ERC20代币和主网token切换映射的3种实现方式

当前大部分区块链项目,为了融资等需要,会在 Mainnet 上线之前,先在 ETH 上发行自己的 ERC-20 token,待主网上线之后,再将其切换过来;目前主网代币的映射和切换主要有3种方式。

目录:

  • 1、主网切换需要完成的工作
  • 2、地址映射合约
  • 3、3种用户调用合约的方法
    • 3.1 EOS之专业用户手操方案
    • 3.2 TRX之交易所简易方案
    • 3.3 Qtum之专用钱包方案
  • 4、ERC20 token销毁
    • 4.1 预设的 stop() 方法
    • 4.2 转给映射合约

1、主网切换需要完成的工作

由于主网没上线之前,用户的代币都是基于 ETH 上的 ERC-20 token,存放在ETH地址中,等到主网上线时,必须用一种机制把基于ETH地址的 Token 给“转移”到主网地址上,然后将原来的token销毁。所以必须完成如下几件工作:

  1. 收集 ETH地址 -> 主网地址 的映射表,这个过程要防止冒领或者错领;
  2. 收集原ETH中ERC20 token的余额;
  3. 在主网中转账给收集到的地址和余额;
  4. 销毁原来的ERC20 token;

2、地址映射合约

对于项目方来说,要收集 ETH地址 -> 主网地址 的映射表,同时要防止冒领或者错领,最好的方法就是在ETH中部署一个收集映射表的合约,由于,只有持有ETH地址私钥的人才能调用该合约,这样保证了Token持有人才能设置自己的主网地址。

下面以EOS的映射合约合约为例,EOS众筹合约:

    // Value should be a public key.  Read full key import policy.
    // Manually registering requires a base58
    // encoded using the STEEM, BTS, or EOS public key format.
    function register(string key) {
        assert(today() <=  numberOfDays + 1);
        assert(bytes(key).length <= 64);

        keys[msg.sender] = key;

        LogRegister(msg.sender, key);
    }

    // Crowdsale owners can collect ETH any number of times
    function collect() auth {
        assert(today() > 0); // Prevent recycling during window 0
        exec(msg.sender, this.balance);
        LogCollect(this.balance);
    }

    // Anyone can freeze the token 1 day after the sale ends
    function freeze() {
        assert(today() > numberOfDays + 1);
        EOS.stop();
        LogFreeze();
    }

3、3种用户调用合约的方法

当项目方以上收集地址映射的合约部署后,对于专业用户来,即可以使用常用的ETH钱包或者网站,调用该合约中的 register() 方法,发起一笔交易,完成地址映射;

更一般地,项目方应当为用户提供一个解决方案,以便:

  • 方便用户创建主网的公私钥;
  • 方便用户调用地址映射合约;
  • 防止用户提供的不是主网地址;
  • 防止用户提供一个自己并没有私钥的主网地址;
  • 方便用户验证映射是否成功;

下面介绍3个主流的区块链平台主网切换的处理过程:

3.1 EOS之专业用户手操方案

EOS 的主网映射时,为用户提供了网站,供用户创建公私钥,其他的操作,只提供了操作指南,在通常的ETH钱包中进行,需要用户专业性比较强;

具体操作可参考:EOS官方标准映射攻略

3.2 TRX之交易所简易方案

TRX 主网切换时,发布公告,让用户将token转到指定的若干交易所,免去用户的大部分操作,避免操作过程可能出错的现象,不过用户首先的在交易所注册一个账户。

公告见:TRX的ERC20代币迁移至波场主网代币

3.3 Qtum之专用钱包方案

Qtum 主网切换时,可以在以一个专用的钱包内进行映射,这样能避免注册一个多余的交易所账户,同时也减少出错的可能,不过这个钱包必须同时支持ETH和Qtum才行。

具体过程可参考:Qtum ERC20 to Mainnet Token Swap

4、ERC20 token销毁

一般当主网上线上线后的一段时间,当地址映射收集后,会在主网上转账给用户的同时,将原 ERC20 token销毁。就销毁ERC20 token而言,各个平台的处理方案,有所不同。

4.1 预设的 stop() 方法

一些先知先觉的项目,会在发行ERC20 token的同时,会将销毁方法写好,例如 EOS,见第1节的 EOS.stop() 方法,会在截止日期后一次性销毁;

contract DSStop is DSAuth, DSNote {

    bool public stopped;

    modifier stoppable {
        assert (!stopped);
        _;
    }
    function stop() auth note {
        stopped = true;
    }
    function start() auth note {
        stopped = false;
    }

}

4.2 转给映射合约

对于其他项目,由于事先没有销毁方法,只能采用迂回的方式,分批次销毁token,可让用户将token转给新部署的映射合约地址或者其他指定的ETH地址,让token永远无法使用,即销毁了token。

例如:

  • YOYOW main net is up & tokens conversion notes 主网上线,YOYOW代币转换注意事项
  • 波场TRON ERC20代币销毁公示

参考文章:

  • 超详细的EOS映射教程: https://cloud.tencent.com/developer/news/140659
  • ERC20 Token与主网Token互转分析: https://steemit.com/erc20/@chaimyu/erc20-token-token
  • Qtum量子链主干网络切换公告: https://www.hibtc.org/2167.html

你可能感兴趣的:(区块链)