Contract-Development

如何使用 web3@1.0.0 通過 Infura 在 Ropsten 上呼叫合約狀態更改方法?

  • July 28, 2018

我有以下契約:

pragma solidity ^0.4.24;

contract Escrow {

   address public owner;

   event LogReceivedFunds(address sender, uint amount);
   event LogReturnedFunds(address recipient, uint amount);

   constructor() public {
       owner = msg.sender;
   }

   function() public payable {
       emit LogReceivedFunds(msg.sender, msg.value);
   }

   modifier onlyOwner() {
       require(msg.sender == owner);
       _;
   }

   function getBalance() public view returns (uint256) {
       return address(this).balance;
   }

   function refundBalance() public onlyOwner {
       uint256 balance = address(this).balance;
       msg.sender.transfer(balance);
       emit LogReturnedFunds(msg.sender, balance);
   }

   function kill() public onlyOwner {
       selfdestruct(owner);
   }
}

我通過 Infura 成功連接到 Ropsten,因為我可以:

  1. 通過 truffle 部署合約
  2. 在方法上執行call,例如getBalance.

但是,當我想使用send來更改狀態(即退還合約所有者他們存入的資金)時,我得到以下響應:

錯誤:無效的 JSON RPC 響應:“”

這不會發生在 Ganache 上,因此我認為這是由 Infura 引起的問題。是否存在某種不兼容?

Infura 不支持任何需要私鑰的操作(例如簽署交易)。這是因為他們不儲存任何人的私鑰。

如果您想通過 Infura 發送交易,您必須先在本地簽名(使用您的私鑰),然後通過 Infura 廣播已簽名的交易。

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