Как узнать шестнадцатеричный код для использования в данных для вызова конкретной функции контракта?

Например, на сайте BAT ico вы можете увидеть адрес контракта краудсейла , ABI, а также строку для использования в части данных вашей транзакции, если вы не хотите вызывать функцию контракта с помощью ABI.

Данные для ввода в транзакцию — 0xb4427263, что соответствует функции createTokens().

Как им удалось получить это шестнадцатеричное значение 0xb4427263? Должны ли они сначала выполнить транзакцию с помощью ABI, а затем получить данные из транзакции, или есть прямой способ получить значение без отправки транзакции?

Эта информация находится в этом вопросе ethereum.stackexchange.com/questions/234/…

Ответы (1)

В этом конкретном примере вы берете сигнатуру метода createToken()и вычисляете ее хэш SHA3 0xb4427263722d66ea37c3d76cba9c56b0f1a7d6e049effc1f9f75567547fd47eb, затем берете первые 4 байта (8 шестнадцатеричных символов) и у вас есть 0xb4427263. Поскольку аргументы для передачи отсутствуют, это все данные.

web3.sha3("createTokens()").substr(0,10)

Полные спецификации для этой кодировки можно найти по адресу https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI .