区块链实现数据迁移

在一些特殊的场景中,难免会遇到数据迁移的难题。一般有相同底层链和不同底层链的迁移场景。迁移方法一般三种:底层数据直接迁移,底层数据转换迁移,链数据重新读写。

在相同底层链的底层数据完全兼容的场景中,新版本链可以直接拷贝旧版本链的区块链数据,更新版本二进制文件,直接启动。

当相同底层链的底层数据不兼容时,或,不同底层链之间迁移数据时,就需要一个中间工具去转换链的数据,转换为新链支持的链数据,才可以实现数据迁移。这个工具的话,个人和中小团队一般不用考虑自己做,做不了。等官方或开源社区之类的推出这个工具。

如果没有这个工具怎么办呢?这就来到了第三种费力不讨好的方法,即链数据业务层的重新读写。读取链的所有历史数据,可以跟链的系统合约RPC交互,查询历史关键数据。也可以通过区块链浏览器或者区块链管理平台的数据库去获取数据。如果区块链管理平台有数据模块,调用数据模块的API也可以获取到数据。但这些数据都是加密的,需要解密,主要解密交易的input和output数据。拿到历史操作数据,然后调用新链相应的合约API,把数据重新写进去即可。数据很多的话,肯定是需要开启线程池处理的。这种实现方法,能保证交易的输入输出数据不变,但是会导致合约地址、用户地址、交易时间戳、交易hash、交易块高等发生改变。

如果实在迁移不了数据,就保留原始链,在业务层做一个路由分离,原始链的操作在原始链进行,新链的操作在新链进行,原始链的数据在原始链浏览器查看,新链的数据在新链浏览器查看,当然这俩浏览器整合到一个也是OK的。

不管使用什么迁移方法,涉及数据的操作一定谨慎小心吧。