Cheatsheet — Solidity 0.8.33-develop documentation
Order of Precedence of Operators
The following is the order of precedence for operators, listed in order of evaluation.
1
Postfix increment and decrement
++, --
New expression
new <typename>
Array subscripting
<array>[<index>]
Member access
<object>.<member>
Function-like call
<func>(<args...>)
Parentheses
(<statement>)
2
Prefix increment and decrement
++, --
Unary minus
-
Unary operations
delete
Logical NOT
!
Bitwise NOT
~
3
Exponentiation
**
4
Multiplication, division and modulo
*, /, %
5
Addition and subtraction
+, -
6
Bitwise shift operators
<<, >>
7
Bitwise AND
&
8
Bitwise XOR
^
9
Bitwise OR
`
10
Inequality operators
<, >, <=, >=
11
Equality operators
==, !=
12
Logical AND
&&
13
Logical OR
`
14
Ternary operator
<conditional> ? <if-true> : <if-false>
Assignment operators
=, `
15
Comma operator
,
ABI Encoding and Decoding Functions
abi.decode(bytes memory encodedData, (...)) returns (...): ABI-decodes the provided data. The types are given in parentheses as second argument. Example:(uint a, uint[2] memory b, bytes memory c) = abi.decode(data, (uint, uint[2], bytes))abi.encode(...) returns (bytes memory): ABI-encodes the given argumentsabi.encodePacked(...) returns (bytes memory): Performs packed encoding of the given arguments. Note that this encoding can be ambiguous!abi.encodeWithSelector(bytes4 selector, ...) returns (bytes memory): ABI-encodes the given arguments starting from the second and prepends the given four-byte selectorabi.encodeCall(function functionPointer, (...)) returns (bytes memory): ABI-encodes a call tofunctionPointerwith the arguments found in the tuple. Performs a full type-check, ensuring the types match the function signature. Result equalsabi.encodeWithSelector(functionPointer.selector, ...)abi.encodeWithSignature(string memory signature, ...) returns (bytes memory): Equivalent toabi.encodeWithSelector(bytes4(keccak256(bytes(signature))), ...)
Members of bytes and string
bytes and stringbytes.concat(...) returns (bytes memory): Concatenates variable number of arguments to one byte arraystring.concat(...) returns (string memory): Concatenates variable number of arguments to one string array
Members of address
address<address>.balance(uint256): balance of the Address in Wei<address>.code(bytes memory): code at the Address (can be empty)<address>.codehash(bytes32): the codehash of the Address<address>.call(bytes memory) returns (bool, bytes memory): issue low-levelCALLwith the given payload, returns success condition and return data<address>.delegatecall(bytes memory) returns (bool, bytes memory): issue low-levelDELEGATECALLwith the given payload, returns success condition and return data<address>.staticcall(bytes memory) returns (bool, bytes memory): issue low-levelSTATICCALLwith the given payload, returns success condition and return data<address payable>.send(uint256 amount) returns (bool): send given amount of Wei to Address, returnsfalseon failure (deprecated)<address payable>.transfer(uint256 amount): send given amount of Wei to Address, throws on failure (deprecated)
Block and Transaction Properties
blockhash(uint blockNumber) returns (bytes32): hash of the given block - only works for 256 most recent blocksblobhash(uint index) returns (bytes32): versioned hash of theindex-th blob associated with the current transaction. A versioned hash consists of a single byte representing the version (currently0x01), followed by the last 31 bytes of the SHA256 hash of the KZG commitment ( EIP-4844). Returns zero if no blob with the given index exists.block.chainid(uint): current chain idblock.coinbase(address payable): current block miner’s addressblock.difficulty(uint): current block difficulty (EVM < Paris). For other EVM versions it behaves as a deprecated alias forblock.prevrandaothat will be removed in the next breaking releaseblock.gaslimit(uint): current block gaslimitblock.number(uint): current block numberblock.prevrandao(uint): random number provided by the beacon chain (EVM >= Paris) (see EIP-4399 )block.timestamp(uint): current block timestamp in seconds since Unix epochgasleft() returns (uint256): remaining gasmsg.data(bytes): complete calldatamsg.sender(address): sender of the message (current call)msg.sig(bytes4): first four bytes of the calldata (i.e. function identifier)msg.value(uint): number of wei sent with the messagetx.gasprice(uint): gas price of the transactiontx.origin(address): sender of the transaction (full call chain)
Validations and Assertions
assert(bool condition): abort execution and revert state changes if condition isfalse(use for internal error)require(bool condition): abort execution and revert state changes if condition isfalse(use for malformed input or error in external component)require(bool condition, string memory message): abort execution and revert state changes if condition isfalse(use for malformed input or error in external component). Also provide error message.revert(): abort execution and revert state changesrevert(string memory message): abort execution and revert state changes providing an explanatory string
Mathematical and Cryptographic Functions
keccak256(bytes memory) returns (bytes32): compute the Keccak-256 hash of the inputsha256(bytes memory) returns (bytes32): compute the SHA-256 hash of the inputripemd160(bytes memory) returns (bytes20): compute the RIPEMD-160 hash of the inputecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) returns (address): recover address associated with the public key from elliptic curve signature, return zero on erroraddmod(uint x, uint y, uint k) returns (uint): compute(x + y) % kwhere the addition is performed with arbitrary precision and does not wrap around at2**256. Assert thatk != 0starting from version 0.5.0.mulmod(uint x, uint y, uint k) returns (uint): compute(x * y) % kwhere the multiplication is performed with arbitrary precision and does not wrap around at2**256. Assert thatk != 0starting from version 0.5.0.
Contract-related
this(current contract’s type): the current contract, explicitly convertible toaddressoraddress payablesuper: a contract one level higher in the inheritance hierarchyselfdestruct(address payable recipient): send all funds to the given address and (only on EVMs before Cancun or when invoked within the transaction creating the contract) destroy the contract.
Type Information
type(C).name(string): the name of the contracttype(C).creationCode(bytes memory): creation bytecode of the given contract, see Type Information.type(C).runtimeCode(bytes memory): runtime bytecode of the given contract, see Type Information.type(I).interfaceId(bytes4): value containing the EIP-165 interface identifier of the given interface, see Type Information.type(T).min(T): the minimum value representable by the integer typeT, see Type Information.type(T).max(T): the maximum value representable by the integer typeT, see Type Information.
Function Visibility Specifiers
public: visible externally and internally (creates a getter function for storage/state variables)private: only visible in the current contractexternal: only visible externally (only for functions) - i.e. can only be message-called (viathis.func)internal: only visible internally
Modifiers
purefor functions: Disallows modification or access of state.viewfor functions: Disallows modification of state.payablefor functions: Allows them to receive Ether together with a call.constantfor state variables: Disallows assignment (except initialization), does not occupy storage slot.immutablefor state variables: Allows assignment at construction time and is constant when deployed. Is stored in code.anonymousfor events: Does not store event signature as topic.indexedfor event parameters: Stores the parameter as topic.virtualfor functions and modifiers: Allows the function’s or modifier’s behavior to be changed in derived contracts.override: States that this function, modifier or public state variable changes the behavior of a function or modifier in a base contract.