我使用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;
} 当我尝试这样做时,它不起作用,但当我将react代码从调用更改为带有地址的发送时,它起作用了
await this.state.Bid.methods.withDraw().send({from:this.state.account}) 但是为什么呢?另外,当我使用这个metamask时,会收取一些燃气费来运行它。你不认为聪明的合同必须把乙醚给我们,它应该支付燃气费。我们支付燃气费,同时将乙醚送到合同上是可以接受的,但为什么我们要支付燃气费来从合同中获得乙醚?
发布于 2021-12-02 02:36:32
关于您的第一个问题,因为web3库就是这样制作的,就这么简单,还有其他库有不同的处理方法,但是{from: this.state.account}是将必要的信息传递给库以签署事务并发送它
关于你的第二个问题,对于以太网络来说,目前(可能永远不会)没有一种方法来区分“提取”和交易,因为它们是完全相同的,请记住,您正在调用一个合约函数,该函数将修改区块链的状态,该调用将成为一个交易,该交易必须通过空洞过程、造币、验证等等,因此任何交易都必须支付天然气
https://stackoverflow.com/questions/70189327
复制相似问题