После того, как вы узнали, как оценить комиссию за транзакцию контракта, спасибо Как оценить стоимость вызова метода смарт-контракта? и Синтаксис для вызова методов изменения состояния контракта . Я попытался использовать все эти знания и реализовать собственную контрактную транзакцию с предыдущей оценкой газа, но они довольно сильно отличаются. По оценкам, газ составляет 27 348, в то время как потребляемый газ составляет 181 080 . Итак, что не так? Хорошо ли реализован этот процесс оценки газа при работе со смарт-контрактами?
Это данные, которые я использовал для оценки газа для конечной точки: «начало (адрес, адрес)» в смарт-контракте с адресом 0x27c042342C9ba937214117e11A4970A6145034cB.
web3_sha3(endpoint) = 0xaa6d19c0b1d22f6983033c255695177ad1db0a0aad0435b6f6a367b48d4b37f4
arguments = "0xa7e3c7c227c72a60e5a2f9912448fb1c21078769, 0xf28dafbfeb41bf32869c9d498da0d651d0206ed4"
strhex(arguments) = 0x3078613765336337633232376337326136306535613266393931323434386662316332313037383736392c20307866323864616662666562343162663332383639633964343938646130643635316430323036656434
data = 0xaa6d19c03078613765336337633232376337326136306535613266393931323434386662316332313037383736392c20307866323864616662666562343162663332383639633964343938646130643635316430323036656434
что дает оценку газа: 27 348
С другой стороны, выполняется следующая передача:
sc.start.sendTransaction("0xa7e3c7c227c72a60e5a2f9912448fb1c21078769", "0x47978a69f410d0f61850c92acdb0d4c464d70937", {from:"0x3b877e80b5c0b29d88f3768ed4292b35fdd93a9d", value:"0x55ae82600", gas:1000000});
txHash: 0xbad5639d7f02cfb1658580eb8cab5f950d379ee8197f423178391dc70701459f
и после того, как tx был добыт, это результирующие значения газа:
Gas: 1,000,000
Gas Used By Transaction: 181,080
Итак, почему предполагаемый газ так выключен? Спасибо заранее!
Я нашел кое-что, может быть, это может помочь другим...
Подпись к хэшу НЕ "начало (адрес, адрес)", а вместо этого "начало (адрес, адрес)". Это белое пространство меняет все.
Я также нашел очень ценную информацию о передаче параметров в контракты на https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI#examples.
Теперь это работает как шарм!
endpoint = "start(address,address)"
web3_sha3(endpoint) = 0x3ccfe887556b4c598501287bcd4528f0b8830f303e150d3b4c3ac9831b7989a8
arguments = Array (
[sellerAddress] => Array
(
[type] => address
[value] => 0xa7e3c7c227c72a60e5a2f9912448fb1c21078769
)
[thirdPartyAddress] => Array
(
[type] => address
[value] => 0xf28dafbfeb41bf32869c9d498da0d651d0206ed4
)
)
data = 0x3ccfe887000000000000000000000000a7e3c7c227c72a60e5a2f9912448fb1c21078769000000000000000000000000f28dafbfeb41bf32869c9d498da0d651d0206ed4
газОценка = 181 080
Аргументы должны быть закодированы один за другим, каждый из которых занимает 32 байта, дополненный 0 слева, поэтому для представления каждого из них используется 64 шестнадцатеричных символа.
эт