主页 > imtoken钱包dapp图标 > Bystack跨链技术源码解读
Bystack跨链技术源码解读
Bystack是比原链团队提出的一主多侧链BaaS平台。 它将区块链应用分为三层架构:底层账本层、侧链扩展层、业务适配层。 底层账本层为Layer1,是比较成熟的采用POW共识的比原公链。 侧链膨胀层为Layer 2btc源码分析,为多侧链层,Vapor侧链在Layer 2。
图片来自 Bystack 白皮书
Vapor侧链采用DPOS和BBFT共识,TPS可达数万。 这里分析一下连接比原链主链和Vapor侧链的跨链模型。
主侧链协同工作模型
一、技术细节
POW目前被诟病浪费能源,而POW本身在提升TPS的过程中也遇到了很多问题。 理论上,可以扩大区块,将更多的交易塞入区块。 TPS 是每秒出块数 * 出块交易数。
但也存在问题:小节点无力存储如此大容量的内容,会逐渐成为中心化模式,因为只有大财团和大机构才有财力建设机房设备,成为能够出块的节点。 同时,传输也存在问题。 网络带宽有限。 区块的大小与网络传输的余量有关。 不可能无限地增加块的大小。 处于网络边缘的人无法获得新区块的信息,这也会降低去中心化程度,这也是POW无法在提高可靠性的同时提高TPS的原因。
BFT虽然在去中心化方面比较弱,但是效率和吞吐量都很高,不需要大量的共识计算。 非常环保节能,符合Bystack侧链的高TPS性能要求。
(1) 跨链模型架构
在Bystack的主侧链协同工作模型中,有主链、侧链和联邦。 主链是比原链,采用AI友好型计算友好型PoW(Proof of Work)算法,主要负责价值锚定、价值传递和可信存证。 侧链为Vapor,采用DPOS+BBFT共识,高TPS满足垂直业务。 主链和侧链之间的资产流通主要依靠联邦。
(2) 节点类型
跨链模型中的节点主要包括收集者、验证者和联邦成员。 收集器监听联邦地址,收集交易后生成跨链的Claim交易。 验证者是侧链的出块人。 联盟成员由侧链用户选举产生,负责生成新的联盟合约地址。
(3) 跨链交易流程
主链用户发送token到联邦合约地址,采集器监听联邦地址,发现跨链交易后生成Claim交易发送到侧链
侧链用户发起提现交易,销毁侧链资产。 收集器监听从侧链到主链的交易,并将相应数量的资产发送到主链地址。 最后联邦在侧链上生成操作交易完成提现。
2.代码分析
跨链代码主要在federation文件夹下,这里对这部分代码进行介绍。
(1) 守门员开始
整个跨链的关键是同步主链和侧链的区块,并在区块中处理跨链交易。 这部分代码主要分为mainchain_keerper.go和sidechain_keerper.go两部分,分别处理主链和侧链的区块。 keeper 在 Run 函数中启动。
在Run函数中,首先会生成一个定时Ticker,规定每SyncSeconds秒同步一次区块btc源码分析,处理区块中的交易。
(2) 主侧链同步块
Run函数会调用syncBlock函数来同步block。
该功能仅限于根据链名从数据库中检索对应的链。 然后使用 GetBlockCount 函数获取链的高度。 然后执行伪确定性检测。
主要目的是判断链上资产是否不可逆。 这里Confirmations的值设置为10,如果不进行这个不可逆的等待过程,很有可能主链资产跨链后,主链最长的链发生变化,导致交易无法进行打包在主链中,但相应的资产会添加到侧链中。 之后通过GetBlockByHeight函数获取链的下一个区块。
必须满足下一个区块的前一个区块哈希等于当前链中的头部区块哈希。 这也符合区块链的定义。
之后,进一步调用processBlock函数,通过调用tryAttachBlock函数对block进行处理。
(3) 块处理
processBlock函数会判断区块中的交易是跨链存款还是取款,并调用相应的函数进行处理。
这里的processIssuing函数中,会遍历交易输入Input的所有资产类型,也就是AssetID。 当AssetID不存在时,系统会创建一个对应的资产类型。 每个Asset对应的数据结构如下。
在processBlock函数中,还会判断区块中的每笔交易是否为跨链交易。 主要通过isDepositTx和isWithdrawalTx函数判断。
看一下这两个函数,主要是对比一下transaction中的控制程序标识和mainchainKeeper结构中的fedProg。 如果相同,则为跨链交易。 fedProg 是结构中的字节数组。
(4) 跨链交易(主链充值到侧链)处理
这部分主要分为主链到侧链的充值和侧链到主链的提现。 我们先来看比较复杂的主链到侧链充值代码的处理。
在这里它创建了一个跨链交易 orm。 具体结构如下。 如您所见,其结构包括源和目标字段。
创建这个跨链交易后,它会将交易存储在数据库中。
在此之后,getCrossChainReqs 在这里被调用。 这个函数内部比较复杂,主要功能是遍历交易的输出,返回一个跨链交易请求数组。 详细看这个函数。
显然,这里有两种类型的交易:支付给公钥哈希和支付给脚本哈希。 这里会根据不同的交易类型获取一个地址。
之后,该函数将遍历所有交易输出,然后创建跨链交易请求。 具体结构如下。
创建所有跨链交易请求后,在processDepositTx中返回一个crossChainInputs数组存入db。
至此,主链到侧链的充值处理完毕。
(5)跨链交易(从侧链退出到主链)交易处理
这部分比较复杂的逻辑主要在sidechain_keeper.go中的processWithdrawalTx函数中。 这部分逻辑类似于上面从主链到侧链的充值逻辑。 orm.crossTransaction 结构也创建了,唯一的变化是事务的source 和dest 颠倒了。 这里不做具体描述。
3. 跨链的优缺点
优势
(1) 跨链模型和代码比较完整。 目前使用跨链技术的项目很多,但真正做到跨链的却寥寥无几。
(2) 侧链可以根据不同需求实现,满足各种场景
缺点
(1)跨链速度慢,需要等待10个区块确认,在目前的比原链上需要30分钟左右
(2) 相比comos、polkadot等项目,开发者开发侧链进入主网成本更高
(3) 只支持资产跨链,不支持跨链智能合约调用
4. Cosmos跨链模型并行对比
可扩展性
Bystack 的主测试链协同工作模式依赖于 Federation,尚未形成通用协议。 其他开发者更难访问其跨链网络。 Cosmos 采用 ibc 协议,可扩展性强。
代码开发进度
vapor侧链已经可以实现跨链。 Cosmos 目前没有成熟的跨链项目,ibc 协议处于最后的开发阶段。
跨链模型
Vapor是主要的侧链模型,Cosmos是Hub-Zone的中继链模型。
五、参考建议
侧链采用bbft共识。 在非POW的情况下,无需等待10次交易确认,加快了跨链速度。
巴比特诚邀您与我们一起重新定义区块链商业生态,共生共赢!
课程详情请点击下方图片
﹏
﹏﹏﹏