Contract-Development
如何使用 web3@1.0.0 通過 Infura 在 Ropsten 上呼叫合約狀態更改方法?
我有以下契約:
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,因為我可以:
- 通過 truffle 部署合約
- 在方法上執行
call
,例如getBalance
.但是,當我想使用send來更改狀態(即退還合約所有者他們存入的資金)時,我得到以下響應:
錯誤:無效的 JSON RPC 響應:“”
這不會發生在 Ganache 上,因此我認為這是由 Infura 引起的問題。是否存在某種不兼容?
Infura 不支持任何需要私鑰的操作(例如簽署交易)。這是因為他們不儲存任何人的私鑰。
如果您想通過 Infura 發送交易,您必須先在本地簽名(使用您的私鑰),然後通過 Infura 廣播已簽名的交易。