我想知道如何识别在智能契约中接收到的特定令牌的单位。
我正在构建一个智能契约,它可以接收以太或其他以太令牌,作为交换,接收到的其他令牌将被颁发。
我可以在智能契约中使用哪些代码来识别接收到多少个以太或任何其他令牌?
它应该在什么功能中使用呢?
发布于 2018-02-27 10:55:07
到目前为止所给出的答案并没有解决这个问题。这个想法是你创造了一个聪明的契约。此智能契约可以接收以太或其他令牌。问题是,如何检查接收了多少个特定类型的令牌?
一般来说,令牌(类似于ERC20)只是一种平衡。当您在钱包中看到令牌时,这就是访问契约中余额的钱包(因为该令牌的契约已经发出了一个事件,指示余额中的更改)。这意味着,你并没有真正收到你钱包里的代币。
现在,假设您使用契约创建了token_1。另一个合同创建了token_2。如果我将token_2发送到您的合同地址,那么创建Token_2的合同余额将更新余额并将您的合同地址添加到簿记中。您的合同不会对此作出反应,这就是为什么通常向错误的合同地址发送令牌会导致资金损失的原因。
您将需要听另一个合同的事件,以知道谁和多少特定的令牌已经发送给您,但是这不能在智能契约中完成,您将需要一个读事件的离链代码。
我希望这能帮上忙。
发布于 2017-05-02 09:50:30
要知道您收到了多少以太,您可以像往常一样使用msg.value
。只是不要忘记包括payable
修饰符。
关于令牌,标准是:
approveAndCall
,以允许您的契约移动他的令牌。receiveApproval
并在需要时移动令牌,同时执行任何其他函数。要知道您可以访问多少个令牌,可以从契约tokenContract.allowance(msg.sender, this)
执行。发布于 2017-05-03 00:14:51
合同不能像在事务中接收ETH那样接收令牌。令牌被管理(创建/传输/刻录/等等)通过发行合同。
因此,如果您拥有拥有方法receivePayment()
的合同A,正如@adrianclv所提到的那样,您可以访问msg.value
成员来查看方法调用事务发送了多少ETH。
但是,如果有人要“发送”合同A一些其他令牌,他们将需要通过发行合同提供的任何接口将这些令牌的所有权转移到合同A,比如B。
如果发行合同B与样本类似,则发送方将调用B.transfer(A, amount)
,后者将授予令牌的amount
的合同A的“所有权”。
(不幸的是,如果不运行节点并监视来自B的Transfer
事件,您的合同A将永远不会知道发生了这样的传输。)
https://ethereum.stackexchange.com/questions/15726
复制相似问题