# paracross 执行器 跨链交易之 资产转移方案 ## 逻辑介绍 交易功能, 把资产从主链移动到平行链, 或从平行链将资产移动回主链。 账户模型 1. 合约资产移动总帐号: 记录所有从主链转移出去的资产 1. 平行链资产总帐号 : 记录从主链转移到某个平行链的资产 1. 用户主链的paracross合约帐号: 同普通的约合帐号 1. 用户平行链paracross合约帐号: 同普通的约合帐号 资产流转 1. A: conis/token -> 主链paracross合约帐号 1. A: 主链paracross合约帐号 -> 平行链paracross合约帐号 1. A: 平行链paracross合约帐号 -> 使用 1. B(可能也是A): 平行链paracross合约帐号 -> 主链paracross合约帐号 ## 实现上的说明 这个交易有点特殊, 需要同时在主链和某平行链上执行 1. 为了容易认出, 暂定方案 执行器名字带上另行链title:如 user.p.guodun.paracross, 也就是说需要在主链上能执行这样的交易 关于交易序号的说明 1. 由于平行链上加了挖矿交易, 交易列表不再是全部从主链区块中过滤, 原来设计表示平行链区块交易列表执行情况的bitmap, 改为 txHash 对应结果的数组 1. 避免对平行链后续变动,主链数平行链的交易序号也要跟着变化 1. 但交易大小会变大, 如果接受不了, 再做其他的方案 ## 交易 asset-transfer 分两种, 主链转出, 主链转入 主链转出执行 transfer * 主链 1. 用户主链paracross合约帐号, balance - 1. 某平行链paracross合约帐号, balance + * 平行链(如果上面步骤失败,, 平行链会过滤掉这个交易) 1. 平行链中paracross合约帐号 balance + 1. 平行链中 用户paracross合约帐号 balance + 主链转入 withdraw * 平行链 1. 平行链中 用户paracross合约帐号 balance - 1. 平行链中paracross合约帐号 balance - * 主链(上面步骤失败, 不进行操作) 1. commit 交易共识时执行 1. 某平行链paracross合约帐号, balance - 1. 用户主链paracross合约帐号, balance + 交易执行代码分为 三个部分 1. 主链 1. 平行链 1. 共识时 ### kv,日志, 查询 1. kv 帐号变化 1. 用户合约帐号 1. 合约资产帐号 (主链有, 平行链无) 1. 平行链资产帐号 1. 日志 1. 对应帐号变化的日志 1. 查询 1. 查询: 合约资产帐号/平行链资产帐号 ``` 帐号 主链部分 平行链部分 account 主链合约 平行链帐号在主链 用户A在主链 用户B在主链 平行链合约 用户A 用户B 1 A转账5bty 5 0 5 0 0 0 0 到para合约 2 B转账5bty 10 0 5 5 0 0 0 到para合约 3 A跨链4bty 10 4 1 5 0 0 0 主链执行完 到平行链 10 4 1 5 4 4 0 平行链执行完 4 A用3bty 10 4 1 5 1 1 0 在平行链 5 B赚到2bty 10 4 1 5 3 1 2 在平行链, 并把2bty转到合约 6 B从平行链 10 4 1 5 3 1 2 主链打包 提币 1bty 10 4 1 5 2 1 1 平行链执行完 10 3 1 6 2 1 1 主链共识完 ```