详细分析:跨链桥技术以及交易流程合约开发部署

简介: 详细分析:跨链桥技术以及交易流程合约系统开发部署

跨链交易流程
主链到侧链
主链用户将代币发送至联邦合约地址,收集人监控联邦地址,发现跨链交易后生成Claim交易,发送至侧链
侧链到主链
侧链用户发起提现交易,销毁侧链资产。收集人监控侧链至主链交易,向主链地址发送对应数量资产。最后联邦在侧链生成一笔完成提现的操作交易。
区块处理
processBlock函数会判断区块中交易是否为跨链的deposit或者是withdraw,并分别调用对应的函数去进行处理。
func (m mainchainKeeper) processBlock(chain orm.Chain, block types.Block, txStatus bc.TransactionStatus) error {

if err := m.processIssuing(block.Transactions); err != nil {
    return err
}

for i, tx := range block.Transactions {
    if m.isDepositTx(tx) {
        if err := m.processDepositTx(chain, block, txStatus, uint64(i), tx); err != nil {
            return err
        }
    }

    if m.isWithdrawalTx(tx) {
        if err := m.processWithdrawalTx(chain, block, uint64(i), tx); err != nil {
            return err
        }
    }
}

return m.processChainInfo(chain, block)

}
在这的processIssuing函数,它内部会遍历所有交易输入Input的资产类型,也就是AssetID。当这个AssetID不存在的时候,则会去在系统中创建一个对应的资产类型。每个Asset对应的数据结构如下所示。
m.assetStore.Add(&orm.Asset{
AssetID: assetID.String(),
IssuanceProgram: hex.EncodeToString(inp.IssuanceProgram),
VMVersion: inp.VMVersion,
RawDefinitionByte: hex.EncodeToString(inp.AssetDefinition),
})
在processBlock函数中,还会判断区块中每笔交易是否为跨链交易。主要通过isDepositTx和isWithdrawalTx函数进行判断。
func (m mainchainKeeper) isDepositTx(tx types.Tx) bool {

for _, output := range tx.Outputs {
    if bytes.Equal(output.OutputCommitment.ControlProgram, m.fedProg) {
        return true
    }
}
return false

}

func (m mainchainKeeper) isWithdrawalTx(tx types.Tx) bool {

for _, input := range tx.Inputs {
    if bytes.Equal(input.ControlProgram(), m.fedProg) {
        return true
    }
}
return false

}

相关文章
|
算法 计算机视觉 开发者
|
监控 前端开发 JavaScript
前端监控(Frontend Monitoring):保障用户体验的不可或缺工具
前端监控是维护卓越用户体验的关键,它使您能够追踪、分析和解决您的Web应用程序中的性能问题和错误。在本博客中,我们将深入探讨前端监控的重要性、监控的关键指标以及如何实施前端监控来提高您的应用程序的可用性和性能。
1107 0
|
运维 JavaScript 前端开发
Neo4j 企业版和系统运维企业版特性概览
Neo4j 企业版和系统运维企业版特性概览
1657 0
Neo4j 企业版和系统运维企业版特性概览
|
机器学习/深度学习 算法 数据可视化
机器学习模型中特征贡献度分析:预测贡献与错误贡献
本文将探讨特征重要性与特征有效性之间的关系,并引入两个关键概念:预测贡献度和错误贡献度。
1018 3
|
9月前
|
Ubuntu 安全 Linux
Linux错误排查:解决Ubuntu 20.4执行sudo apt-get update时出现的libnettle.so.6错误。
很有可能在你得到解决方案时,你也学到了不少Linux修复技巧。祝你处理计算机问题时顺利如麻!永远记得,各种问题总是像老鼠一样从意想不到的地方冒出来。但记住,不管它们跑到哪里,最终都逃不过你的捕鼠器。盖起你的计算机,拾起你的代码,大步向前!
278 28
|
9月前
|
存储 Java 编译器
鸿蒙开发:ArkTs数据类型
最后一点是,ArkTS不支持any和unknown类型,需要显式指定具体类型,否则会报异常,具体原因是,这是ArkTS的特性之一,那就是使用静态类型;如果程序采用静态类型,即所有类型在编译时都是已知的,那么开发者就能够容易理解代码中使用了哪些数据结构。同时,由于所有类型在程序实际运行前都是已知的,编译器可以提前验证代码的正确性,从而可以减少运行时的类型检查,有助于提升性能。
477 8
鸿蒙开发:ArkTs数据类型
|
消息中间件 搜索推荐 UED
Elasticsearch 作为推荐系统后端的技术架构设计
【8月更文第28天】在现代互联网应用中,推荐系统已经成为提高用户体验和增加用户粘性的重要手段之一。Elasticsearch 作为一个高性能的搜索和分析引擎,不仅能够提供快速的全文检索能力,还可以通过其强大的数据处理和聚合功能来支持推荐系统的实现。本文将探讨如何利用 Elasticsearch 构建一个高效且可扩展的推荐系统后端架构,并提供一些具体的代码示例。
953 0
Open3D Intrinsic shape signatures (ISS) 固有形状特征码
Open3D Intrinsic shape signatures (ISS) 固有形状特征码
195 2
|
SQL 关系型数据库 MySQL
MySQL DCL(数据控制语言)详解与实践
MySQL DCL(数据控制语言)详解与实践
|
C语言 C++
C语言printf()函数详解
C语言printf()函数详解
1011 0