A tuple of static members concatenates their encodings without an offset to a tail.
LET’S PICTURE IT
Several fixed-size form fields can be placed next to each other in an agreed order.
SEE IT FOR YOURSELF
Build a transfer call from typed fieldsStep 1 / 4
The standard transfer interface takes an address and a raw integer amount. This diagram uses address one and amount one hundred.
The standard transfer interface takes an address and a raw integer amount. This diagram uses address one and amount one hundred.Keccak-256 of the canonical signature supplies the first four bytes. The transfer selector is a9059cbb.An address is twenty bytes. Standard ABI encoding adds twelve zero bytes on the left to fill one thirty-two-byte word.The integer one hundred is hex 64, left-padded in word one. Selector plus two words produces sixty-eight bytes of standard calldata.
Animated local teaching model. No wallet, RPC or live blockchain data. Some labels and hashes are abbreviated for readability.
Classify every member
A tuple is static only if all its components are static under ABI rules. A tuple containing a string becomes dynamic even if another member is a fixed integer.
Concatenate in order
For a tuple of uint256 and bool, the integer word comes first and the boolean word follows. The tuple occupies sixty-four bytes in this example.
Static does not mean one word
A fixed tuple or fixed array can occupy several words. When calculating later dynamic offsets, use each static value’s full encoded width rather than assuming one slot per top-level parameter.
Connect to nested layouts
A static tuple can be nested inside another structure without introducing dynamic offsets merely for being nested. Dynamic membership, not the presence of parentheses, determines the classification.
Follow the bytes
types: (uint256,bool)
values: [["7",true]]
no function selector prefix
word 0 · argument offset 0 bytes
0x0000000000000000000000000000000000000000000000000000000000000007
word 1 · argument offset 32 bytes
0x0000000000000000000000000000000000000000000000000000000000000001
The tuple contains two static words and no dynamic tail.