我已经使用以下代码将以太币发送/存放到我的智能合约,使用ReactJS作为前端,使用web3作为接口。
await this.state.Bank.methods.desposit().send({value:amountInEther.toString(),from:this.state.account})
在尝试使用前端Reactjs从智能合约接收以太时,我使用了以下代码
(React code) await this.state.Bid.methods.withDraw(this.state.account).call()
dbank.sol(solidity below code):
function withDraw(address payable receiver)public{
receiver.transfer(accounts[receiver]);
accounts[receiver]=0;
}
当我尝试这样做时,它不起作用,但当我将反应代码从呼叫更改为带地址发送时,它起作用了
await this.state.Bid.methods.withDraw().send({from:this.state.account})
但为什么?而且,当我使用这个元任务时,运行它需要一些汽油费。你不认为智能合约必须把以太币交给我们,它应该支付天然气费吗。我们在向合同发送乙醚的同时支付天然气费用。这可以接受,但我们为什么要支付天然气费才能从合同中接收我们的乙醚?
关于你的第一个问题,因为web3库是这样创建的,就这么简单,还有其他库有不同的处理方式,但{from: this.state.account}
是如何将必要的信息传递给库来签署事务并将其发送给
关于你的第二个问题,以太坊网络目前(可能永远不会(不存在区分";撤回";从一笔交易中,因为有完全相同的,请记住,你正在调用一个合同函数,该函数将修改区块链的状态,该调用将成为一笔交易,该交易必须通过挖洞过程、铸造、验证等等,所以任何交易都必须支付天然气