Contract-Development
契約交易:估計的氣體與使用的氣體不匹配
在了解如何估算合約 tx 費用後,如何估算呼叫智能合約方法的成本?呼叫合約狀態更改方法的語法 Gas 估計為 27,348 ,而 Gas 消耗為 181,080。那麼,有什麼問題呢?在處理智能合約時,這種氣體估算過程是否做得很好?
這是我用來估算端點氣體的數據:地址為0x27c042342C9ba937214117e11A4970A6145034cB的智能合約中的**“start(address, address)”**
web3_sha3(endpoint) = 0xaa6d19c0b1d22f6983033c255695177ad1db0a0aad0435b6f6a367b48d4b37f4 arguments = "0xa7e3c7c227c72a60e5a2f9912448fb1c21078769, 0xf28dafbfeb41bf32869c9d498da0d651d0206ed4" strhex(arguments) = 0x3078613765336337633232376337326136306535613266393931323434386662316332313037383736392c20307866323864616662666562343162663332383639633964343938646130643635316430323036656434 data = 0xaa6d19c03078613765336337633232376337326136306535613266393931323434386662316332313037383736392c20307866323864616662666562343162663332383639633964343938646130643635316430323036656434
產生的氣體估計為:27,348
另一方面,執行以下 tx:
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
gasEstimated = 181,080
參數必須一個接一個地編碼,每個 32 字節 0 左填充,因此每個使用 64 個十六進製字元來表示。