Json-Rpc

JSON-RPC 估計氣體錯誤

  • March 25, 2019

我正在使用參數呼叫方法:

{
 "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_estimateGasJSON-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和 a require()

嘗試from在 JSON-RPCparams數據中添加一個欄位;這應該提供一個價值msg.sender並允許require()成功,希望如此。

注意:估計 gas 需要進行餘額檢查肯定是不直覺的。

引用自:https://ethereum.stackexchange.com/questions/47841