# VEP 10: 测试网络迁移主网的数据映射方案
# 背景
Vite 从测试网络过渡到预主网时,由于涉及到区块链数据结构、共识等方面的变动,预主网无法验证测试网络的交易数据,因此迁移到预主网后不保留测试网络的交易数据,只保留账户状态。
# 目标
- 尽可能保留测试网络的用户状态信息;
- 预主网上线时保证共识可以正常运行。
# 方案
在涉及到的用户账户链上写一个创世块,在这个创世块中保存用户账户的状态,包括账户余额、合约状态等。用一个创世快照块来快照这些创世账户块。
对于每一个账户,根据账户类型分别对用户账户和合约账户进行状态映射。
# 用户账户
用户账户的状态信息包含账户余额和在途交易。
- 账户余额直接保留;
- 用户账户的在途交易金额汇总后加入账户余额;
- 只保留 vite 和 vcp 的余额。
# 合约账户
合约账户的状态信息包含合约信息(代码、合约所在的委托共识组)、合约状态(即合约存储)、账户余额、在途交易。
# 内置合约
- 账户余额直接保留;
- 在途交易金额退还到交易发起者的账户余额中;
- 只保留 vite 和 vcp 的余额。
抵押合约,地址为 vite_0000000000000000000000000000000000000003f6af7459b9
- 保留抵押信息,将到期高度改为 1(即预主网上线后可以立即取回)
注册出块节点、投票、共识组合约合并成共识组信息合约,新的合约地址为 vite_0000000000000000000000000000000000000004d28108e76b
- 保留未取消的 SBP 注册信息,将注册到期高度改为 7776000(即预主网上线后大约 3 个月);
- 保留给未取消的 SBP 投票的信息;
- 保留快照共识组和公共委托共识组的信息。
铸币合约,地址为 vite_000000000000000000000000000000000000000595292d996d
- 保留 vite 和 vcp 的代币信息;
- 将 vite 代币改为可增发代币;
- 其他代币的铸币费用(1000 vite)退还到铸币账户,不保留相关代币信息。
# 其他智能合约
- 不保留合约信息和合约状态;
- 创建合约的费用(10 vite)退还给合约创建者;
- 账户余额退还给合约创建者;
- 在途交易金额退还到交易发起者的账户余额中;
- 只保留 vite 和 vcp 的余额。
# 效果
- 预主网上线时,保留了测试网络的共识状态,即快照共识组的出块节点不变,节点排名基本不变;
- 预主网上线时,用户账户的状态保持不变,用户账户的余额不变,抵押信息、投票信息、注册信息、铸币信息不变;
- 用户在测试网络上创建的代币需要在预主网上线后重新创建;
- 用户在测试网络上部署的智能合约需要在预主网上线后重新部署。