单公证人模式实现测试链间跨链入门教程(架构模块篇)
Posted o_young17
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单公证人模式实现测试链间跨链入门教程(架构模块篇)相关的知识,希望对你有一定的参考价值。
总结汇报篇
5 功能与模块设计
总体设计分为三大主要功能:
1、同链资产转移
2、跨链资产转移
3、增/删/改可支持链/币
以及四个以上常规功能:
1、余额查询
2、存/取款
3、验证币种合法性
4、铸/销币
5、…
5.1 同链资产转移功能
5.1.1 模块设计
转账定义模块:用户将自己需要转移的代币信息作为参数输入。
币种校验模块:根据用户提供的信息对代币进行校验,检查本交易系统是否支持该代币的转账。
合约实例化模块:在跨链桥合约中实现实例化代币对应的合约,并且根据用户需求调用其中部分函数
事件模块:在完成一个操作后抛出事件(日志),外部程序(链下)可以精准捕获到事件并且借此分析合约发生的事件。
5.1.2 业务流程设计
5.2 跨链资产转移功能
5.2.1模块设计
监控模块:监控链上特地合约地址的特定事件
交易构造模块:每次往链上发合约之前需要根据以太坊交易格式和交易需求构造交易
签名模块:交易发送前需要对交易进行签名,同时要求签名人地址与交易发起人地址相
同,否则交易无法被链上认可。
交易执行模块:由于跨链无法实现真正意义上的资产转移,而是在源链上将资产锁定在 特殊的地址中,因此跨链的资产转移实质是在目标链上释放等量的等价替代币,因此此 处交易执行包括铸(等价)币,之后再转账。
5.2.2业务流程设计
5.3 增/删/改可支持链/币
5.3.1模块设计
申请模块:发起增/删/改申请,申请中填写要增/删/改的目标链,目标币名称,目标币 的合约地址
权限审查模块:只有合约中指定的用户才有权限进行修改(类似管理员)。
修改模块:根据申请内容进行增/删/改
5.3.2业务流程设计
6、逻辑架构
6.1系统架构逻辑图
6.2服务器中间件
6.3合约层
6.4系统架构过程视图
(1)展示层
交易所处于demo阶段,完成了功能部分,前端使用Remix IDE编译器进行操作。操作分为两个部分。第一步是打开remix网页版,在界面输入合约地址,点击at address,即可获得该合约。
第二步,点击deployed contracts下的箭头,显示函数名与对应的参数名称,输入值,即可调用此合约中的函数。右侧的输出控制台可以根据需求在项目中添加代码,输出预期观测的值。
(2)过程视图
跨链 设计链间的信任
摘自wecross公众号
1. 场景
跨链的基础操作为:对方链执行某个操作完成后,本地链才可执行另一个操作。
区块链A的执行结果被发到区块链B上。区块链B在执行请求Y前,必须先判断X是否上链。判断的方法是,在区块链B的运行环境中,验证区块链A与X相关的执行结果是否有效。验证通过,表示X已上链,区块链B可继续执行后续步骤:发送请求Y,在区块链B进行上链。
问题:区块链B必须信任区块链A的执行机制。
2. 方案研究
执行结果的验证划分为以下四层
- 验区块连续:在验证开始时,需确认数据来源,基于区块链的连续性,验证区块是否归属于指定区块链,防止攻击者用任意区块链的区块进行伪造。
- 验区块共识:在确认来源后,需验证区块是否代表对方链的整体意愿。此步骤验证区块的共识信息是否符合要求,防止攻击者用未经过共识的区块进行伪造。
- 验交易存在:区块被验证合法后,需验证指定交易是否属于此区块。不同链有不同验证方法,下一节会展开描述。
- 验交易正确:交易存在性得到验证后,并不能代表此交易确实是跨链场景下预期的操作,还需结合业务场景,判断交易的具体内容是否符合预期。
2.1 验区块连续
不同区块链只在哈希算法和计算区块哈希的字段上存在差异。验证区块链连续性,只需按照相应链的实现,验证区块依次相连成链即可。
2.2 验区块共识
验区块共识,即验证区块的共识信息是否符合对应的算法条件。不同算法有不同的实现。此处给出最具代表性的两种共识算法:POW(工作量证明)和PBFT(实用拜占庭容错)。
2.2.1 POW
定义:POW 属于最终一致性共识算法,通过最长链和延迟确认的方式逐渐让共识结果收敛一致。
WeCross实现:
- 验难度:验证区块的nonce是否满足工作量证明条件
- 验延迟:验证当前块是否低于已知最高块N个块(N可取为10,表示1个小时前的区块)
- 验最长链:引入多方,验证当前区块处于最长链上,防止单方面谎造最高块高和伪造分叉链进行作恶
2.2.2 PBFT算法
定义:PBFT算法在多方共识后立即达成一致,区块链不存在分叉和回滚的可能。在算法中,节点通过多次相互广播签名以达到共识。在区块中,足够数量的签名代表了区块的合法性。
WeCross实现:
- 配置公钥:事先配置对方链共识节点的公钥
- 验签名:用事先配置的公钥验证区块中签名的有效性,并判断有效签名数量是否达到PBFT共识条件
2.3 验交易存在
验交易存在同样需要根据不同实现判断,比较有代表性的是SPV(简单支付验证)和背书策略。
2.3.1SPV
定义: SPV初衷是为了实现轻客户端,目前已在大多数区块链上实现。随着跨链技术兴起,此技术也被用作验证区块中某数据的存在性。以交易为例,区块头中记录了当前区块内所有交易哈希组成Merkle树的树根,即“交易根”。任何一笔交易,都唯一对应了一条通向交易根的Merkle path。区块内不存在的交易,无法伪造出通向交易根的Merkle Path。
WeCross实现:需验证某交易的Merkle Path,即可判断某交易是否属于某区块。
2.3.2 背书策略
定义:背书策略为Hyperledger Fabric所采用。在Fabric中,每笔交易都需满足某个事先定义好的背书策略。交易在执行时会被多个背书节点签名,当各方签名满足背书策略时,此交易才被认为有效。Fabric将背书节点签名信息作为交易的一部分保存于区块中。多笔交易组成区块内的交易列表。交易列表以二进制形式计算哈希值,此哈希值被记录于区块头中。
WeCross实现:需判断交易是否在交易列表中(且对应flag有效),并校验交易列表哈希值,即可初步判断交易的存在性。后续将结合背书策略,验证交易的背书节点签名,进一步增强交易存在验证的有效性。
2.4 验交易正确
验交易正确,是根据业务的预期参数判断前三步验证的交易哈希(或二进制)是否是业务预期的那个操作。eg,预期操作为transfer(a, b, 100),则相应的交易内容不能是get(a)。验证时,需根据交易的编码方式和哈希算法,校验业务预期参数与交易哈希(或二进制)是否对应。不同区块链实现的差别只体现在交易编码和哈希算法上,根据链实现采用相应方法进行校验即可。
WeCross实现:在不同链的插件实现了不同的校验逻辑。
- FISCO BCOS插件采用的是RLP编码和SHA-256哈希算法,验证的是交易哈希是否正确;
- Fabric插件则采用ProtoBuf编码,验证的是交易二进制是否正确。
3. 解决方案
- 验区块连续:FISCO BCOS通过比对区块头中父区块哈希与真实的父区块哈希,验证此区块是对方链的区块。
- 验区块共识:通过校验当前区块的签名列表,判断合法签名数量是否满足PBFT共识条件,确认当前区块代表了对方链的整体意愿。
- 验交易存在:通过验证交易哈希通向交易根的Merkle Path的正确性,可判断交易已存在于区块链上。- 验交易正确:通过验证业务预期、交易二进制、交易哈希的对应关系,可判断交易是业务预期的那个操作。
四个层次验证通过后,说明业务所预期的操作已在对方链上上链,验证完成。
以上是关于单公证人模式实现测试链间跨链入门教程(架构模块篇)的主要内容,如果未能解决你的问题,请参考以下文章