Как строятся данные вызова функции контракта Ethereum ниже?

0x5537f99e000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000072268656c6c6f2200000000000000000000000000000000000000000000000000

5537f99e — это имя функции, то есть «setstring», 2268656c6c6f22 — это аргумент функции, то есть «hello»,

Пожалуйста, объясните, как устроены эти необработанные данные для контракта ethereum. Меня смущают эти смещения.


person Tarak Ram    schedule 10.10.2017    source источник


Ответы (1)


Вы можете найти ссылку здесь https://solidity.readthedocs.io/en/develop/abi-spec.html

если ваша функция

function setstring(string string_value) {
}
  1. первые 4 байта 0x5537f99e

Первые 4 байта данных получаются как первые 4 байта хэша Keccak формы ASCII подписи setstring(string)

  1. следующие 32 байта 0x0000000000000000000000000000000000000000000000000000000000000020

Это означает расположение части данных вашего string_value, измеренное в байтах от начала блока аргументов. В этом случае следующий блок

  1. следующие 32 байта 0000000000000000000000000000000000000000000000000000000000000007

Это означает размер вашей строки, 7. "hello"

  1. следующие 32 байта 2268656c6c6f2200000000000000000000000000000000000000000000000000

Содержимое файла "hello" закодировано в UTF-8.

person juhyung park    schedule 16.10.2017
comment
Спасибо, док очень помог - person Tarak Ram; 16.10.2017