首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应付和address.transfer的ERC20令牌

应付和address.transfer的ERC20令牌
EN

Ethereum用户
提问于 2020-12-02 17:04:29
回答 2查看 1.1K关注 0票数 0

我正在尝试开发像传销一样使用ethereum智能合同的觅食。但我喜欢使用ERC20令牌注册支付和股息。ERC20令牌已经部署。我必须使用已部署的ERC20令牌在传销智能合同注册,支付和红利。如果我们使用的是以太而不是令牌,我们可以使用payable进行注册支付,使用address.transfer方法发送红利。如何为ERC20做同样的事情。举个例子,以太的话,注册费就像,

代码语言:javascript
复制
function registration(address referrerAddress) private {
    require(msg.value == 0.05 ether, "registration cost 0.05");
}

假设我期望5 token作为注册费,如何编写这个逻辑。我们可以把以太发送到接收器,

代码语言:javascript
复制
receiverAddress.send(levelPrice)

如何在ERC20令牌的情况下执行相同的操作。

EN

回答 2

Ethereum用户

发布于 2020-12-02 19:29:35

改变这一点:

代码语言:javascript
复制
function registration() private {
    require(msg.value == 0.05 ether, "registration cost 0.05");
}

对此:

代码语言:javascript
复制
function registration() private {
    require(erc20Token.allowance(msg.sender, address(this)) >= X, "registration cost X");
    require(erc20Token.transferFrom(msg.sender, address(this), X));
}

其中,X是十进制分辨率中所需的令牌的注册量(例如,如果令牌小数为8,所需的注册数量为0.05标记,那么X的值应该是5000000)。

您甚至可以去掉第一行(调用allowance),并且它仍然以相同的方式工作,除非在失败时使用不同的错误消息进行恢复。

票数 1
EN

Ethereum用户

发布于 2020-12-02 19:32:16

一般的问题是,接收方无法知道何时接收到令牌,因此在接收令牌时不能执行任何操作。

这就是为什么ERC20标准中有两个额外的函数:approvetransferFrom。假设A是带有令牌的用户,B是应该得到令牌的契约,T是令牌契约,下面是在您的场景中如何使用它们:

  1. A调用T的approve函数,将B作为接收方。这使得B可以从A获得一定数量的令牌。
  2. A在B中调用一些函数,如getMyTokens。这个函数调用T的transferFrom函数从A中获取令牌,一旦成功,相同的函数可以执行额外的逻辑。
票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/90716

复制
相关文章

相似问题

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