TRON Solidity compiler 0.8.20 is fully compatible with Ethereum Solidity 0.8.20.
IMPORTANT NOTE: This compiler switches the default target VM version to Shanghai, which means that the generated bytecode will include PUSH0
opcodes. Be sure to select the appropriate VM version in case you intend to deploy on mainnet or testnet that may not yet support PUSH0
, otherwise deployment of your contracts will fail. You can verify that the network supports the PUSH0
by checking that the 76th network parameter allowTvmShanghai
is on.
Major changelog from Ethereum
Language Features:
- Allow defining custom operators for user-defined value types via
using {f as +} for T global
syntax.
Compiler Features:
- SMTChecker: New trusted mode that assumes that any compile-time available code is the actual used code, even in external calls. This can be used via the CLI option
--model-checker-ext-calls trusted
or the JSON fieldsettings.modelChecker.extCalls: "trusted"
. - Assembler: Use
push0
for placing0
on the stack for EVM versions starting from "Shanghai". This decreases the deployment and runtime costs. - EVM: Set default EVM version to "Shanghai".
- EVM: Support for the EVM Version "Shanghai".
- SMTChecker: Group all messages about unsupported language features in a single warning. The CLI option
--model-checker-show-unsupported
and the JSON optionsettings.modelChecker.showUnsupported
can be enabled to show the full list. - SMTChecker: Properties that are proved safe are now reported explicitly at the end of analysis. By default, only the number of safe properties is shown. The CLI option
--model-checker-show-proved-safe
and the JSON optionsettings.modelChecker.showProvedSafe
can be enabled to show the full list of safe properties. - Yul EVM Code Transform: If available, use
push0
instead ofcodesize
to produce an arbitrary value on stack in order to create equal stack heights between branches.
Bugfixes:
- Assembler: Avoid duplicating subassembly bytecode where possible.
- Code Generator: Avoid including references to the deployed label of referenced functions if they are called right away.
- ContractLevelChecker: Properly distinguish the case of missing base constructor arguments from having an unimplemented base function.
- SMTChecker: Fix internal error caused by unhandled
z3
expressions that come from the solver when bitwise operators are used. - SMTChecker: Fix internal error when using the custom NatSpec annotation to abstract free functions.
- TypeChecker: Also allow external library functions in
using for
. - ABI: Include events in the ABI that are emitted by a contract but defined outside of it.
- Immutables: Disallow initialization of immutables in try/catch statements.
- SMTChecker: Fix false positives in ternary operators that contain verification targets in its branches, directly or indirectly.
Integrity Check
All binaries in this release are signed via this GPG key:
- PUB: 1254 F859 D2B1 BD9F 66E7 107D F859 BCB4 4A28 290B
- UID: build@tron.network
From the download listings below you should see links to the downloadable binaries as well as sig signature files. To verify the authenticity of any binary, grab the binary and sig files with the same prefix name and then execute the verification process: GPG signature verification