Cheatsheet
Order of Precedence of Operators
The following is the order of precedence for operators, listed in order of evaluation.
Precedence | Description | Operator |
|---|---|---|
1 | Postfix increment and decrement |
|
New expression |
| |
Array subscripting |
| |
Member access |
| |
Function-like call |
| |
Parentheses |
| |
2 | Prefix increment and decrement |
|
Unary minus |
| |
Unary operations |
| |
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 |
|
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.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>.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<address payable>.transfer(uint256 amount): send given amount of Wei to Address, throws on failure
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.basefee(uint): current block’s base fee (EIP-3198 and EIP-1559)block.blobbasefee(uint): current block’s blob base fee (EIP-7516 and EIP-4844)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.
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
function myFunction() <visibility specifier> returns (bool) { return true; } 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.