По существу, байт-код для функций принимает значение web3.sha3 имени функции и первые 4 байта результирующего хэша в формате 0x00000000.
Итак, если у вас есть функция с именем totalsupply(), хэш будет 0x18160ddd.
Я понимаю, что общедоступные переменные имеют автоматически созданные геттеры.
Однако при попытке определить байт-код для общедоступной переменной, такой как «Имя». Я бы предположил, что созданная функция называется «Имя()», и поэтому байт-код равен 0x8052474d.
Однако, похоже, он не работает, когда я пытаюсь вызвать функцию, используя этот байт-код.
Любые мысли о том, что я делаю неправильно?
Для общедоступной переменной x я автоматически сгенерирую метод x(), чтобы вы могли получить доступ к этой переменной способом вызова метода. Я даю простую демонстрацию, как показано ниже:
pragma solidity ^0.4.2;
contract test{
uint public age;
function test(){
age = 10;
}
function callData() returns (string){
bool result = this.delegatecall(bytes4(sha3("age()")));
if (result) {
return "success";
}
return "failed";
}
}
Надеюсь поможет~
Из примера в документации Solidity мы видим, что:
0xcdcd77c0: идентификатор метода. Это получается как первые 4 байта хэша Keccak формы ASCII подписи baz(uint32,bool)
Мы можем проверить хэш с помощью этого онлайн-инструмента для хеширования keccak 256, введя «baz (uint32, bool)»:
https://emn178.github.io/online-tools/keccak_256.html
Кроме того, вы можете получить ABI контракта от etherscan и вставить его в этот инструмент: https://abi.hashex.org/#
который затем предоставляет хэши для ваших функций. Кажется, вам нужно ввести хотя бы первый параметр.
В браузере солидности указан байт-код для всех функций в контракте. Не нужно ломать голову... Обнаружил это сразу после публикации.
Эдмунд Эдгар
Дино Анастос
Эдмунд Эдгар
Роман Шер