首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么要在web3接口中使用.Send({from:this.state.account})来接收来自contract的以太?

为什么要在web3接口中使用.Send({from:this.state.account})来接收来自contract的以太?
EN

Stack Overflow用户
提问于 2021-12-01 18:17:02
回答 1查看 103关注 0票数 0

我使用ReactJS作为前端,web3作为接口,使用以下代码将以太发送/存放到我的智能合约。

代码语言:javascript
复制
await this.state.Bank.methods.desposit().send({value:amountInEther.toString(),from:this.state.account})

在尝试使用前端Reactjs从智能合约接收以太时,我使用了以下代码

代码语言:javascript
复制
(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代码从调用更改为带有地址的发送时,它起作用了

代码语言:javascript
复制
await this.state.Bid.methods.withDraw().send({from:this.state.account})  

但是为什么呢?另外,当我使用这个metamask时,会收取一些燃气费来运行它。你不认为聪明的合同必须把乙醚给我们,它应该支付燃气费。我们支付燃气费,同时将乙醚送到合同上是可以接受的,但为什么我们要支付燃气费来从合同中获得乙醚?

EN

回答 1

Stack Overflow用户

发布于 2021-12-02 02:36:32

关于您的第一个问题,因为web3库就是这样制作的,就这么简单,还有其他库有不同的处理方法,但是{from: this.state.account}是将必要的信息传递给库以签署事务并发送它

关于你的第二个问题,对于以太网络来说,目前(可能永远不会)没有一种方法来区分“提取”和交易,因为它们是完全相同的,请记住,您正在调用一个合约函数,该函数将修改区块链的状态,该调用将成为一个交易,该交易必须通过空洞过程、造币、验证等等,因此任何交易都必须支付天然气

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70189327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档