When I compile the below code in 0.6.6 it doesn't compile (requires public) but in 0.7.3 it does compile.

If I make the below code compilable (adding public) in 0.6.6 I can successfully deploy on Rinkeby. If I compile the below code in 0.7.3 I can successfully deploy on Rinkeby. This would suggest that there are no changes to Rinkeby EVM, only the way compiler versions enforce Bytecode arrangement has changed?

Does this imply I could use 0.6.6 compiler standards for many more years down the road and my code won't break? The numerous compiler iterations is a new experience for me and I'm trying to wrap my head around it.

Thank you

contract A { constructor () payable {} }

1 Answer 1


You are correct. Solidity version changes are often

  • Syntactical changes (make the language safer)

  • ABI changes (see Ethereum smart contract ABI v2

EVM changes add new instructions, like ones for revert(string) and catch and then these are adopted into Solidity as language constructs, but these changes are more rare.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.