ERC20代币和主网token切换映射的3种实现方式
当前大部分区块链项目,为了融资等需要,会在 Mainnet
上线之前,先在 ETH
上发行自己的 ERC-20
token,待主网上线之后,再将其切换过来;目前主网代币的映射和切换主要有3种方式。
1、主网切换需要完成的工作
由于主网没上线之前,用户的代币都是基于ETH
上的ERC-20
token,存放在ETH地址中,等到主网上线时,必须用一种机制把基于ETH地址的Token
给“转移”到主网地址上,然后将原来的token销毁。所以必须完成如下几件工作:
- 收集
ETH地址
->主网地址
的映射表,这个过程要防止冒领或者错领; - 收集原ETH中ERC20 token的余额;
- 在主网中转账给收集到的地址和余额;
- 销毁原来的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转到指定的若干交易所,免去用户的大部分操作,避免操作过程可能出错的现象,不过用户首先的在交易所注册一个账户。
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。
例如:
参考文章:
- 超详细的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