mvonsteinkirch 703e1edf6d yay
2022-12-24 20:33:09 -08:00
..
yay
2022-12-24 20:33:09 -08:00

ABI encoding

tl; dr

  • the solidity built-in function abi.encode encodes solidity types into raw bytes, that can be interpreted directly by the EVM.
contract StringEncoding {
    bytes public encodedString = abi.encode("hacking");
}
  • this is what happens:
    1. 1st (32 bytes) word = offset → indicates at which bytes index the string starts. If you count 32 from the beginning (= index 32), you will reach the starting point of where the actual encoded string starts.
    2. 2nd (32 bytes) word = string length → in the case of the string, this indicates how many characters (including whitespaces) are included in the string.
    3. 3rd (32 bytes) word = the actual utf8 encoded string → each individual bytes corresponds to hex notation of a letter / character encoded in utf8.

  • *other ABI Encodings
    • address payable -> address
    • contract -> address
    • enum -> uint8
    • struct -> tuple of elementry types

resources