Cleaning Up Variables
In Ethereum Solidity, variables occupying fewer than 256 bits in memory or storage must be carefully "cleaned" (masked) because the EVM stack operates strictly on 256-bit words. When a uint8 is loaded, the compiler must guarantee the upper 248 bits are zeroed out before performing operations like JUMPI or comparisons.
Cleanup on NeoVM
💡 NeoVM Difference
NeoVM uses strictly typed StackItems, not a flat 256-bit word stack. Variable cleanup operations are largely unnecessary and omitted by the compiler.
On Neo, an integer is an arbitrary-precision BigInteger. There is no concept of "upper bits" containing garbage data from a previous operation.
uint8 a = 255;
uint256 b = a;In EVM, this requires careful masking to ensure b does not inherit trailing bytes. In NeoVM, a is simply the BigInteger 255. Assigning it to b carries over the exact numeric value with zero structural masking required.
Struct and Array Cleanup
Similarly, when deleting data from storage, Ethereum must issue SSTORE 0 to zero out the data slot.
On NeoVM, delete operations compile directly to the System.Storage.Delete syscall, which entirely removes the Key-Value pair from the node's database, freeing up the state footprint efficiently.
