VEP 10: 测试网络迁移主网的数据映射方案

背景

Vite 从测试网络过渡到预主网时,由于涉及到区块链数据结构、共识等方面的变动,预主网无法验证测试网络的交易数据,因此迁移到预主网后不保留测试网络的交易数据,只保留账户状态。

目标

  1. 尽可能保留测试网络的用户状态信息;
  2. 预主网上线时保证共识可以正常运行。

方案

在涉及到的用户账户链上写一个创世块,在这个创世块中保存用户账户的状态,包括账户余额、合约状态等。用一个创世快照块来快照这些创世账户块。

对于每一个账户,根据账户类型分别对用户账户和合约账户进行状态映射。

用户账户

用户账户的状态信息包含账户余额和在途交易。

  • 账户余额直接保留;
  • 用户账户的在途交易金额汇总后加入账户余额;
  • 只保留 vite 和 vcp 的余额。

合约账户

合约账户的状态信息包含合约信息(代码、合约所在的委托共识组)、合约状态(即合约存储)、账户余额、在途交易。

内置合约

  • 账户余额直接保留;
  • 在途交易金额退还到交易发起者的账户余额中;
  • 只保留 vite 和 vcp 的余额。

抵押合约,地址为 vite_0000000000000000000000000000000000000003f6af7459b9

  • 保留抵押信息,将到期高度改为 1(即预主网上线后可以立即取回)

注册出块节点、投票、共识组合约合并成共识组信息合约,新的合约地址为 vite_0000000000000000000000000000000000000004d28108e76b

  • 保留未取消的 SBP 注册信息,将注册到期高度改为 7776000(即预主网上线后大约 3 个月);
  • 保留给未取消的 SBP 投票的信息;
  • 保留快照共识组和公共委托共识组的信息。

铸币合约,地址为 vite_000000000000000000000000000000000000000595292d996d

  • 保留 vite 和 vcp 的代币信息;
  • 将 vite 代币改为可增发代币;
  • 其他代币的铸币费用(1000 vite)退还到铸币账户,不保留相关代币信息。

其他智能合约

  • 不保留合约信息和合约状态;
  • 创建合约的费用(10 vite)退还给合约创建者;
  • 账户余额退还给合约创建者;
  • 在途交易金额退还到交易发起者的账户余额中;
  • 只保留 vite 和 vcp 的余额。

效果

  • 预主网上线时,保留了测试网络的共识状态,即快照共识组的出块节点不变,节点排名基本不变;
  • 预主网上线时,用户账户的状态保持不变,用户账户的余额不变,抵押信息、投票信息、注册信息、铸币信息不变;
  • 用户在测试网络上创建的代币需要在预主网上线后重新创建;
  • 用户在测试网络上部署的智能合约需要在预主网上线后重新部署。