我正在尝试开发像传销一样使用ethereum智能合同的觅食。但我喜欢使用ERC20令牌注册支付和股息。ERC20令牌已经部署。我必须使用已部署的ERC20令牌在传销智能合同注册,支付和红利。如果我们使用的是以太而不是令牌,我们可以使用payable进行注册支付,使用address.transfer方法发送红利。如何为ERC20做同样的事情。举个例子,以太的话,注册费就像,
function registration(address referrerAddress) private {
require(msg.value == 0.05 ether, "registration cost 0.05");
}假设我期望5 token作为注册费,如何编写这个逻辑。我们可以把以太发送到接收器,
receiverAddress.send(levelPrice)如何在ERC20令牌的情况下执行相同的操作。
发布于 2020-12-02 19:29:35
改变这一点:
function registration() private {
require(msg.value == 0.05 ether, "registration cost 0.05");
}对此:
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),并且它仍然以相同的方式工作,除非在失败时使用不同的错误消息进行恢复。
发布于 2020-12-02 19:32:16
一般的问题是,接收方无法知道何时接收到令牌,因此在接收令牌时不能执行任何操作。
这就是为什么ERC20标准中有两个额外的函数:approve和transferFrom。假设A是带有令牌的用户,B是应该得到令牌的契约,T是令牌契约,下面是在您的场景中如何使用它们:
approve函数,将B作为接收方。这使得B可以从A获得一定数量的令牌。transferFrom函数从A中获取令牌,一旦成功,相同的函数可以执行额外的逻辑。https://ethereum.stackexchange.com/questions/90716
复制相似问题