TRONSCAN
TRX:Loading
  • Home
  • Blockchain
    NodesBlocksAccounts
    ContractsTransfersTransactions
  • Tokens
    Token Tracker
    Hot Tokens
    image
    TRX

    Official Token of TRON Protocol

    image
    USDT

    Tether USD

    image
    PROS

    Prospective

    image
    SUNDOG

    Sundog

    image
    PePe

    PePe

    image
    $Afro

    Afro

  • Data
    Charts
    TRX Total SupplyTotal Protocol RevenueActive AccountsTransaction TrendsMore
    Rankings
    Top AccountsTop TokensTop ContractsResource ConsumptionMore
    Analytics
    Account HoldingsStablecoin OverviewMore
  • Governance
    Super RepresentativesVotesTRX StakingParameters & Proposals
  • TRON Ecosystem
    DeFi
    JustLend DAO

    TRON's largest decentralized lending platform

    SUN

    TRON's first AMM exchange & mining platform

    SunPump

    TRON's first meme fair launch platform

    SunX

    TRON's first perpetual futures DEX

    JustStable

    A fixed-rate financial system pegged to TRX

    Infrastructure
    TronLink

    The most professional and secure wallet for TRON

    GasFree

    Cost-Effective Accessible Transfers For Everyone

    BTTC

    Cross-chain support for TRON / Ethereum / BSC

    BTFS

    A scalable decentralized storage system

    Decentralized Stablecoin
    USDD

    TRON's first decentralized and over-collateralized stablecoin

    RWA
    image
    stUSDT

    Unleash yields in Real-World Assets (RWA)

    AI
    BANK OF AI

    On-chain payments, identities, and DeFi for AI agents.

    AINFT

    AI infrastructure of TRON ecosystem

    For more projects in the TRON ecosystem, visitDefiLlama
  • Developers
    APIAPI
    Provide easy, efficient, and secure access to the TRON network, ushering in the future of decentralization. The security services enable you to customize the security strategy of your product.
    Dev Resources
    Developer HubGitHubJava-tronMCP & Skills
    Dev Tools
    TronGridTronBoxTronIDETronWebMore
    Community
    DiscordForumHackathonBug Bounty
  • More
    Tools
    Record TokenEncoding ConverterResource CalculatorMulti-Chain Address FinderSign & VerifyTRC-8004 SCAN
    Contract DeploymentContract VerificationBroadcast TransactionRent Energy
    Help Center
    How to set up a multisig account?How to update token information?How to report a scam?How to submit a project?More
    Need more help? Contact us
    Feedback
  • testnetNILE TESTNETSHASTA TESTNET
    All
    All
    tron

    The best blockchain explorer of TRON

    Preferences
    About Us
    • Privacy Policy
    • Terms of Service
    Services & Support
    • API Service
    • Advertise
    • Contact Us
    Resources
    • TRON ETF
    • TRON Architecture
    • TRON Whitepaper V2.1
    Copyright© 2017-2026 tronscan.org
    tron

    The best blockchain explorer of TRON

    About Us
    • Privacy Policy
    • Terms of Service
    Services & Support
    • API Service
    • Advertise
    • Contact Us
    Resources
    • TRON ETF
    • TRON Architecture
    • TRON Whitepaper V2.1
    Copyright© 2017-2026 tronscan.org
    All
    All

    Solidity Compiler Error Message

    Compiler Version:
    0.5.10
    Solidity Compiler Version existLostStorageArrayWriteOnSlotOverflow(low-severity),AbiReencodingHeadOverflowWithStaticArrayCleanup(medium-severity),DirtyBytesArrayToStorage(low-severity),NestedCalldataArrayAbiReencodingSizeValidation(very low-severity),ABIDecodeTwoDimensionalArrayMemory(very low-severity),KeccakCaching(medium-severity),EmptyByteArrayCopy(medium-severity),DynamicArrayCleanup(medium-severity),ImplicitConstructorCallvalueCheck(very low-severity),TupleAssignmentMultiStackSlotComponents(very low-severity),MemoryArrayCreationOverflow(low-severity),privateCanBeOverridden(low-severity),YulOptimizerRedundantAssignmentBreakContinue0.5(low-severity),ABIEncoderV2CalldataStructsWithStaticallySizedAndDynamicallyEncodedMembers(low-severity)There are 14 known compiler bugs.
    Bug NameDescriptionSeverity
    Bug Name
    Description
    Severity
    LostStorageArrayWriteOnSlotOverflow
    Operations that involve clearing or copying from arrays that straddle the end of storage could result in silent data retention.
    Solidity makes it possible to define variables that extend past the last (2**256-th) slot of storage, which results in wrap-around back to slot zero. Since EVM uses 256-bit integer arithmetic, most operations on such variables just work. The only situation which requires special attention is iteration against absolute slot addresses: the invariant that the last slot belonging to a variable has the highest address does not hold. When implemented incorrectly, a loop over an array will immediately terminate if the container spans the end of storage - due to the initial position already being greater than the end position. This affected storage array clearing loops generated by both evmasm and IR pipelines. Additionally, (only in the evmasm pipeline) copying operations whose source was an array straddling the end of storage were also affected. At the language level, the buggy code would be generated for array assignment, array initialization, delete operator, <array>.pop() and <array>.push(). Note that a clearing loop is inserted by the compiler not only for invocations of the delete operator, but also to zero storage when overwriting a longer array with a shorter one, popping an element or even pushing an empty element to a dynamic array. Since clearing is a separate loop, it is possible for the bug to only affect it and not the copy operation it follows (which is always the case in the IR pipeline). The bug is extremely unlikely to be triggered accidentally due to the probabilistic impossibility of a short dynamic array being allocated right at the storage boundary. On the other hand, scenarios in which a user may place a static array there intentionally do not seem realistic and are limited to unusual layouts, in which a contract does not place any storage variables at slot zero (otherwise they would overlap the array).
    low
    AbiReencodingHeadOverflowWithStaticArrayCleanup
    ABI-encoding a tuple with a statically-sized calldata array in the last component would corrupt 32 leading bytes of its first dynamically encoded component.
    When ABI-encoding a statically-sized calldata array, the compiler always pads the data area to a multiple of 32-bytes and ensures that the padding bytes are zeroed. In some cases, this cleanup used to be performed by always writing exactly 32 bytes, regardless of how many needed to be zeroed. This was done with the assumption that the data that would eventually occupy the area past the end of the array had not yet been written, because the encoder processes tuple components in the order they were given. While this assumption is mostly true, there is an important corner case: dynamically encoded tuple components are stored separately from the statically-sized ones in an area called the *tail* of the encoding and the tail immediately follows the *head*, which is where the statically-sized components are placed. The aforementioned cleanup, if performed for the last component of the head would cross into the tail and overwrite up to 32 bytes of the first component stored there with zeros. The only array type for which the cleanup could actually result in an overwrite were arrays with ``uint256`` or ``bytes32`` as the base element type and in this case the size of the corrupted area was always exactly 32 bytes. The problem affected tuples at any nesting level. This included also structs, which are encoded as tuples in the ABI. Note also that lists of parameters and return values of functions, events and errors are encoded as tuples.
    medium
    DirtyBytesArrayToStorage
    Copying ``bytes`` arrays from memory or calldata to storage may result in dirty storage values.
    Copying ``bytes`` arrays from memory or calldata to storage is done in chunks of 32 bytes even if the length is not a multiple of 32. Thereby, extra bytes past the end of the array may be copied from calldata or memory to storage. These dirty bytes may then become observable after a ``.push()`` without arguments to the bytes array in storage, i.e. such a push will not result in a zero value at the end of the array as expected. This bug only affects the legacy code generation pipeline, the new code generation pipeline via IR is not affected.
    low
    NestedCalldataArrayAbiReencodingSizeValidation
    ABI-reencoding of nested dynamic calldata arrays did not always perform proper size checks against the size of calldata and could read beyond ``calldatasize()``.
    Calldata validation for nested dynamic types is deferred until the first access to the nested values. Such an access may for example be a copy to memory or an index or member access to the outer type. While in most such accesses calldata validation correctly checks that the data area of the nested array is completely contained in the passed calldata (i.e. in the range [0, calldatasize()]), this check may not be performed, when ABI encoding such nested types again directly from calldata. For instance, this can happen, if a value in calldata with a nested dynamic array is passed to an external call, used in ``abi.encode`` or emitted as event. In such cases, if the data area of the nested array extends beyond ``calldatasize()``, ABI encoding it did not revert, but continued reading values from beyond ``calldatasize()`` (i.e. zero values).
    very low
    ABIDecodeTwoDimensionalArrayMemory
    If used on memory byte arrays, result of the function ``abi.decode`` can depend on the contents of memory outside of the actual byte array that is decoded.
    The ABI specification uses pointers to data areas for everything that is dynamically-sized. When decoding data from memory (instead of calldata), the ABI decoder did not properly validate some of these pointers. More specifically, it was possible to use large values for the pointers inside arrays such that computing the offset resulted in an undetected overflow. This could lead to these pointers targeting areas in memory outside of the actual area to be decoded. This way, it was possible for ``abi.decode`` to return different values for the same encoded byte array.
    very low
    KeccakCaching
    The bytecode optimizer incorrectly reused previously evaluated Keccak-256 hashes. You are unlikely to be affected if you do not compute Keccak-256 hashes in inline assembly.
    Solidity's bytecode optimizer has a step that can compute Keccak-256 hashes, if the contents of the memory are known during compilation time. This step also has a mechanism to determine that two Keccak-256 hashes are equal even if the values in memory are not known during compile time. This mechanism had a bug where Keccak-256 of the same memory content, but different sizes were considered equal. More specifically, ``keccak256(mpos1, length1)`` and ``keccak256(mpos2, length2)`` in some cases were considered equal if ``length1`` and ``length2``, when rounded up to nearest multiple of 32 were the same, and when the memory contents at ``mpos1`` and ``mpos2`` can be deduced to be equal. You maybe affected if you compute multiple Keccak-256 hashes of the same content, but with different lengths inside inline assembly. You are unaffected if your code uses ``keccak256`` with a length that is not a compile-time constant or if it is always a multiple of 32.
    medium
    EmptyByteArrayCopy
    Copying an empty byte array (or string) from memory or calldata to storage can result in data corruption if the target array's length is increased subsequently without storing new data.
    The routine that copies byte arrays from memory or calldata to storage stores unrelated data from after the source array in the storage slot if the source array is empty. If the storage array's length is subsequently increased either by using ``.push()`` or by assigning to its ``.length`` attribute (only before 0.6.0), the newly created byte array elements will not be zero-initialized, but contain the unrelated data. You are not affected if you do not assign to ``.length`` and do not use ``.push()`` on byte arrays, or only use ``.push(<arg>)`` or manually initialize the new elements.
    medium
    DynamicArrayCleanup
    When assigning a dynamically-sized array with types of size at most 16 bytes in storage causing the assigned array to shrink, some parts of deleted slots were not zeroed out.
    Consider a dynamically-sized array in storage whose base-type is small enough such that multiple values can be packed into a single slot, such as `uint128[]`. Let us define its length to be `l`. When this array gets assigned from another array with a smaller length, say `m`, the slots between elements `m` and `l` have to be cleaned by zeroing them out. However, this cleaning was not performed properly. Specifically, after the slot corresponding to `m`, only the first packed value was cleaned up. If this array gets resized to a length larger than `m`, the indices corresponding to the unclean parts of the slot contained the original value, instead of 0. The resizing here is performed by assigning to the array `length`, by a `push()` or via inline assembly. You are not affected if you are only using `.push(<arg>)` or if you assign a value (even zero) to the new elements after increasing the length of the array.
    medium
    ImplicitConstructorCallvalueCheck
    The creation code of a contract that does not define a constructor but has a base that does define a constructor did not revert for calls with non-zero value.
    Starting from Solidity 0.4.5 the creation code of contracts without explicit payable constructor is supposed to contain a callvalue check that results in contract creation reverting, if non-zero value is passed. However, this check was missing in case no explicit constructor was defined in a contract at all, but the contract has a base that does define a constructor. In these cases it is possible to send value in a contract creation transaction or using inline assembly without revert, even though the creation code is supposed to be non-payable.
    very low
    TupleAssignmentMultiStackSlotComponents
    Tuple assignments with components that occupy several stack slots, i.e. nested tuples, pointers to external functions or references to dynamically sized calldata arrays, can result in invalid values.
    Tuple assignments did not correctly account for tuple components that occupy multiple stack slots in case the number of stack slots differs between left-hand-side and right-hand-side. This can either happen in the presence of nested tuples or if the right-hand-side contains external function pointers or references to dynamic calldata arrays, while the left-hand-side contains an omission.
    very low
    MemoryArrayCreationOverflow
    The creation of very large memory arrays can result in overlapping memory regions and thus memory corruption.
    No runtime overflow checks were performed for the length of memory arrays during creation. In cases for which the memory size of an array in bytes, i.e. the array length times 32, is larger than 2^256-1, the memory allocation will overflow, potentially resulting in overlapping memory areas. The length of the array is still stored correctly, so copying or iterating over such an array will result in out-of-gas.
    low
    privateCanBeOverridden
    Private methods can be overridden by inheriting contracts.
    While private methods of base contracts are not visible and cannot be called directly from the derived contract, it is still possible to declare a function of the same name and type and thus change the behaviour of the base contract's function.
    low
    YulOptimizerRedundantAssignmentBreakContinue0.5
    The Yul optimizer can remove essential assignments to variables declared inside for loops when Yul's continue or break statement is used. You are unlikely to be affected if you do not use inline assembly with for loops and continue and break statements.
    The Yul optimizer has a stage that removes assignments to variables that are overwritten again or are not used in all following control-flow branches. This logic incorrectly removes such assignments to variables declared inside a for loop if they can be removed in a control-flow branch that ends with ``break`` or ``continue`` even though they cannot be removed in other control-flow branches. Variables declared outside of the respective for loop are not affected.
    low
    ABIEncoderV2CalldataStructsWithStaticallySizedAndDynamicallyEncodedMembers
    Reading from calldata structs that contain dynamically encoded, but statically-sized members can result in incorrect values.
    When a calldata struct contains a dynamically encoded, but statically-sized member, the offsets for all subsequent struct members are calculated incorrectly. All reads from such members will result in invalid values. Only calldata structs are affected, i.e. this occurs in external functions with such structs as argument. Using affected structs in storage or memory or as arguments to public functions on the other hand works correctly.
    low