我可以将我的自定义 ERC-20 与我的智能合约一起使用吗?

Posted

技术标签:

【中文标题】我可以将我的自定义 ERC-20 与我的智能合约一起使用吗?【英文标题】:Can I use my custom ERC-20 with my smart contract? 【发布时间】:2019-04-17 22:19:44 【问题描述】:

所以我有一份合同,允许您用 ETH 交换我的自定义 ERC20 代币。我现在想将该自定义 ERC20 代币与其他智能合约一起使用。是否有某种方式我必须指定自定义令牌与 ETH?

示例:

pragma solidity ^0.4.24;

/* * - -如何使用: * 1. 向智能合约地址发送任意数量的 HYPER Token。 * 2. 通过发送 0 HYPER 交易(每小时 1 次)来获取您的利润 * 3. 如果您不提款且收入超过200%,您只能提款超过200%的限额一次 */ 合约 HyperLENDtest

using SafeMath for uint;
mapping(address => uint) public balance;
mapping(address => uint) public time;
mapping(address => uint) public percentWithdraw;
mapping(address => uint) public allPercentWithdraw;

function percentRate() public view returns(uint) uint contractBalance = address(this).balance;

    if (contractBalance < 100 ether) 
        return (20);
    
    if (contractBalance >= 500 ether && contractBalance < 1000 ether) 
        return (40);
    
    if (contractBalance >= 1000 ether && contractBalance < 2000 ether) 
        return (60);
    
    if (contractBalance >= 2000 ether) 
        return (80);
    

我不想返还 ETH,而是想使用我的自定义 ERC20 代币给用户发送到合约并获得 ERC20 代币的百分比作为回报。

【问题讨论】:

【参考方案1】:

以电子商务业务为例。所以我的做法是:

    用户会购买代币购买将以太币发送到您的 ERC-20 合约。以太币和你的代币之间的汇率完全取决于你,因为它与业务相关,而不是以太币本身。 在这个商业案例中,假设我们为每个 Ether 提供 100 个代币。用户将 2 个 Ether 传递给合约,然后将 200 个业务代币放入合约的 mapping(address =&gt; uint) accounts。 鉴于此,以下代码将为您提供 200:accounts[customer_address] //(returns 200)

    然后你会有另一份合同,比如说购买给定的物品。您只需从该地址调用此智能合约购买功能。然后这个函数负责调用你的 ERC-20 合约来检查用户是否有足够的资金考虑他/她的地址。如果是这样,那么您的合约会将给定数量的代币转移到您的 ERC-20 合约到可用的代币或您想要的另一个钱包,基本上将用户(地址)代币转移到您决定的另一个地址。

这样,您的用户使用的是您之前购买的代币,甚至没有考虑以太币。 请记住,必须支付 GAS 费用。因此,要么您为此付费,要么您的客户愿意(将其包含在商品价格中)。

希望这可以帮助有同样问题的人:)

【讨论】:

【参考方案2】:

您的合约只是另一个地址,所以是的,您可以将代币发送到您的合约。但是你不能像发送以太币一样发送它们,即使用支付功能。您必须使用您的 ERC-20 代币的转移方式将代币转移到合约地址。并且要将代币从合约发送给其他人,您必须从合约内部调用 transfer ,除非您执行诸如为您的帐户提供大量津贴之类的操作,但我不建议这样做。 this 帖子中解释了如何从其他合约中调用 ERC-20 中的方法。

【讨论】:

感谢 Nikos,所以我知道转移功能,但我想要实现的是使用我现有的合约并使用我的自定义 ERC20 代币与 ETH。因此,例如在这个游戏中,用户向合约发送 X eth,作为回报,每天可以获得 % 的回报。但我想向他们提供我的自定义 ERC20 代币而不是 ETH,而不是 ETH 作为回报。 这当然是可能的,但您需要向他们提供购买和发送 ERC-20 代币的方法。我认为最简单的方法是使用元掩码,除非您想自己创建一个界面。因此,如果您使用 metamask,您可以让他们购买代币,购买将以太币发送到您的 ERC-20 合约,这是执行此操作的标准方式。在他们拥有一些代币后,他们需要将此代币添加到他们的元掩码帐户中,以便他们可以使用元掩码转移代币。本指南介绍如何将自定义 ERC-20 令牌添加到元掩码:luvcrypto.com/add-send-tokens-metamask 并且您还需要通知您的其他合约有关代币转移的信息。我知道这比使用 ether 复杂一点。 这就是我遇到的问题,我不确定如何区分 ETH 与合约中的自定义代币。我目前构建了一个 UI。但是当我使用智能合约并尝试用我的代币替换 ETHER 值时,它会抛出错误。我确实了解将令牌添加到元掩码等等。它真的是如何让合约识别它的 ERC20 代币而不是 ETH(代码在上面的原始帖子中注明) 以太币和代币以不同的方式发送。一笔交易可能包含以太币,但一笔交易不能包含代币。交易将告诉合约转移代币。所以合约可以根据执行的功能知道是 ERC-20 还是 Ether。当你“发送”ERC-20 代币时,实际上只是 ERC-20 合约中的余额发生了变化,你并没有真正通过交易发送任何东西。

以上是关于我可以将我的自定义 ERC-20 与我的智能合约一起使用吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用智能合约存取erc20代币

使用 web3 发送 ERC20 令牌

如何从智能合约中转移 ERC20 代币而不转移到基本账户

我正在尝试编写恶意 ERC20 智能合约批准功能(用于学习目的),但这不起作用

智能合约开发之ERC

ERC20 代币转移到智能合约