Json-Rpc
JSON-RPC 估計氣體錯誤
我正在使用參數呼叫方法:
{ "jsonrpc":"2.0", "method":"eth_estimateGas", "params": [ { "to": "0x8f0921f30555624143d427b340b1156914882c10", "data":"0xa9059cbb0000000000000000000000001fb330ab08bdba6e218e55fabc357643cf8252e300000000000000000000000000000000000000000000000000005af3107a4000" } ], "id":1 }
但我總是得到一個錯誤:
{ "jsonrpc": "2.0", "id": 1, "error": { "code": -32000, "message": "gas required exceeds allowance or always failing transaction" } }
0x8f0921f30555624143d427b340b1156914882c10這是一些 ERC-20 Token 的地址。當我把這個契約地址改為其他人時,一切都很好。有什麼問題?
eth_estimateGas
JSON-RPC 呼叫最終會導致該欄位中定義的合約函式的“試執行”data
。對於 ERC20 轉賬,此函式可能(通常確實)如下所示:function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; }
請注意,發送者的餘額中有一個非本地引用
msg.sender
和 arequire()
。嘗試
from
在 JSON-RPCparams
數據中添加一個欄位;這應該提供一個價值msg.sender
並允許require()
成功,希望如此。注意:估計 gas 需要進行餘額檢查肯定是不直覺的。