Cheatsheet
Order of Precedence of Operators
Global Variables
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)), ...)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 arrayblock.basefee(uint): current block’s base fee (EIP-3198 and EIP-1559)block.chainid(uint): current chain idblock.coinbase(address payable): current block miner’s addressblock.difficulty(uint): current block difficultyblock.gaslimit(uint): current block gaslimitblock.number(uint): current block numberblock.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)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 stringblockhash(uint blockNumber) returns (bytes32): hash of the given block - only works for 256 most recent blockskeccak256(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.this(current contract’s type): the current contract, explicitly convertible toaddressoraddress payablesuper: the contract one level higher in the inheritance hierarchyselfdestruct(address payable recipient): destroy the current contract, sending its funds to the given 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 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 failuretype(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 initialisation), does not occupy storage slot.immutablefor state variables: Allows exactly one assignment at construction time and is constant afterwards. 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 behaviour to be changed in derived contracts.override: States that this function, modifier or public state variable changes the behaviour of a function or modifier in a base contract.
Reserved Keywords
These keywords are reserved in Solidity. They might become part of the syntax in the future:
after, alias, apply, auto, byte, case, copyof, default,
define, final, implements, in, inline, let, macro, match,
mutable, null, of, partial, promise, reference, relocatable,
sealed, sizeof, static, supports, switch, typedef, typeof,
var.