首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在新的牢固合同中用新的代币交换旧的代币,并限制特定的钱包?

如何在新的牢固合同中用新的代币交换旧的代币,并限制特定的钱包?
EN

Ethereum用户
提问于 2018-02-01 00:31:47
回答 2查看 2.1K关注 0票数 0

希望你能在这种情况下帮我

几个月前,一个令牌已经被创建,并被发送到几个钱包。现在,开发人员希望为用户添加一些更好的功能。

用户需要向新契约发送相同数量(我们称之为100)的令牌,其中这100个令牌被交换成100个新令牌。

但需要注意的是,开发人员丢失了一个钱包,里面有一些令牌(大约30,000枚),如果有人发现了,他想排除在获得新令牌的可能性之外。

现在的问题是;

  1. 一个新的合同怎么能收到X个旧的代币。
  2. 如何检查发送的金额并将相同值的新令牌发回?
  3. 如何限制特定钱包获得新的代币

因此,基本上,我在寻找一种方式,以交换新的硬币从旧合同,并排除一个特定的钱包地址。

(如果您也可以添加标准代码)

谢谢你帮我:-)

EN

回答 2

Ethereum用户

发布于 2018-05-24 07:02:50

不幸的是,我不能对飞行的回答发表评论,但以下是一些需要注意的事情:

  1. 通过调用oldToken.trasnferFrom提取旧令牌余额。如果适当的话,可以考虑使用oldTokens,或者将其发送到address(this)。它将允许您执行双重检查并确保正确性。
  2. 在交换oldToken之后,考虑检查“前”和“后”的余额。不要盲目信任oldToken.trasnferFrom返回值,显式检查oldToken.balanceOf
票数 1
EN

Ethereum用户

发布于 2018-02-01 01:13:17

我不打算写出要使用的完整合同,但这里有一个简单的示例:契约/工作流使用审批/传输工作流,前提是原始令牌符合ERC20。您必须实现新令牌契约的ERC20方面。也没有办法阻止人们从丢失的钱包中发送->,另一个钱包,->,然后升级令牌。您所能做的最好是添加一个截止日期,当最后一次升级是可能的。

代码语言:javascript
复制
import 'ERC20.sol`;

contract NewToken{
    ERC20 public oldToken;
    address public addressToIgnore;

    function NewToken(address _oldTokenAdddress, address _addressToIgnore){
        oldTokenAddress=_oldTokenAddress;
        addressToIgnore=_addressToIgnore;
    }

    function upgradeTokens(uint amountToUpgrade){
        require(amountToUpgrade<=oldToken.balanceOf(msg.sender));
        require(amountToUpgrade<=allowance(msg.sender, this));
        require(msg.sender!=addressToIgnore);
        if(transferFrom(msg.sender, 0x0, amountToUpgrade)){
            //Mint the new tokens
        }
    }
}

以下是一般流程:

  1. 用户在原始令牌上调用approve(newTokenAddress, usersBalance),以允许新的令牌契约占用他们的余额。
  2. 用户对新的令牌契约调用upgradeTokens(amountToUpgrade)
  3. 新令牌契约验证所有令牌都是好的,将令牌从用户转移到0x0地址烧掉它们,并创建新令牌。
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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