Например, на сайте BAT ico вы можете увидеть адрес контракта краудсейла , ABI, а также строку для использования в части данных вашей транзакции, если вы не хотите вызывать функцию контракта с помощью ABI.
Данные для ввода в транзакцию — 0xb4427263, что соответствует функции createTokens().
Как им удалось получить это шестнадцатеричное значение 0xb4427263? Должны ли они сначала выполнить транзакцию с помощью ABI, а затем получить данные из транзакции, или есть прямой способ получить значение без отправки транзакции?
В этом конкретном примере вы берете сигнатуру метода createToken()
и вычисляете ее хэш SHA3 0xb4427263722d66ea37c3d76cba9c56b0f1a7d6e049effc1f9f75567547fd47eb
, затем берете первые 4 байта (8 шестнадцатеричных символов) и у вас есть 0xb4427263
. Поскольку аргументы для передачи отсутствуют, это все данные.
web3.sha3("createTokens()").substr(0,10)
Полные спецификации для этой кодировки можно найти по адресу https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI .
Исмаэль
Исмаэль