首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让智能契约函数调用需要发送特定的令牌。

让智能契约函数调用需要发送特定的令牌。
EN

Ethereum用户
提问于 2022-05-20 19:02:16
回答 1查看 242关注 0票数 0

我发现了一些老帖子,它们提出了类似的问题(例如,在智能契约中需要特定类型的令牌),但是我有点困惑,这与我看到的关于如何最好地传输令牌的其他帖子有什么关系。

我想要做的是在智能契约中有一个函数,期望接收到一定数量的特定令牌,如果它存在,它将改变某种状态或执行其他一些操作,例如:

代码语言:javascript
复制
function do_a_thing(int amount_of_token) public {
        //check if token is the right type
        state = new_state;
        // do something else
    }

在网上阅读时,我看到了关于如何使用“调用”功能进行传输的帖子,而不是转移/接收,我也看到了关于“重新进入攻击”的内容。只需说一句,我就对正确的做法感到有些困惑了!

任何帮助都将受到感谢,任何关于如何使用智能合同做有趣事情的最新指南的建议也是如此。

非常感谢

EN

回答 1

Ethereum用户

发布于 2022-05-20 19:26:26

因为令牌本身是契约,所以不能在发出合同调用的同时发送令牌,因为调用传输令牌也是合同调用。由于这一点,您实际上有两个选项:

  1. 检查您的合同是否持有比它记得的更多的令牌,并假设新的令牌来自用户,用户需要提前传输令牌。只有当调用方是另一个智能契约,并且可以立即执行“注册”令牌的函数时,才应该这样做。这就是uniswap令牌的工作方式,本质上是在池的顶部浏览,查看是否有任何新的标记,并在此基础上执行操作。我不建议尝试这样做。
  2. 处理此问题的最常见方法是,用户首先批准您的合同,使用令牌的审批函数代表他们使用令牌。然后,您的合同使用令牌的transferFrom函数将用户令牌从用户转移到自己。您的合同通过将用户令牌从用户转移到自己,从而使用户代表他们使用令牌,并且用户必须通过批准您的合同提前对此给予许可。
票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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