abi.encode
abi.encode
abi.encode
only deals with 32 byte data
function abiEncode() external {
bytes32 x40;
assembly {
x40 := mload(0x40)
}
emit MemoryPointer(x40);
abi.encode(uint256(5), uint256(19)); // needs to store the length of the data that follows, along with the variables
assembly {
x40 := mload(0x40)
}
emit MemoryPointer(x40); ; // returns 0xe0 instead, which is 32 bytes into the future
}
function abiEncode2() external {
bytes32 x40;
assembly {
x40 := mload(0x40)
}
emit MemoryPointer(x40);
abi.encode(uint256(5), uint128(19));
assembly {
x40 := mload(0x40)
}
emit MemoryPointer(x40); // still returns 0xe0
}
abi.encodePacked
- will try and make the values as short as possible
function abiEncodePacked() external {
bytes32 x40;
assembly {
x40 := mload(0x40)
}
emit MemoryPointer(x40); // 0x80
abi.encodePacked(uint256(5), uint128(19));
assembly {
x40 := mload(0x40)
}
emit MemoryPointer(x40); // 0xd0
}
// 0xd0 - 0x80 = 80 -> 32 + 32 + 16
Last updated