中移链交易模块介绍

中移链交易模块是中移链区块链系统的核心模块之一。它的主要作用是处理用户发起的交易请求,并将其打包成区块添加到区块链上。交易模块接收来自不同合约执行的指令,比如创建账号、转账、部署和执行智能合约等指令,并确保所有交易都是有效且合法的。与其他模块相比,交易模块的工作量较大,每秒需要高效地处理上千个交易请求。

01

交易的组件构成

中移链的交易主要由以下几个组件构成:

图片

事务在中移链中是一个整体,事务有统一的事务管理机制(Transaction),事务要么全部执行成功,要么全部执行失败。交易模块中的事务是用于执行区块链上的状态转换操作的基本单位。链账户首先通过智能合约来发起交易,合约中必须包含一个或多个Action。在智能合约被链账户提交后,事务将会被创建。之后事务处理器将会对其中的事务进行校验并执行。默认情况下,同一笔交易中的Action将会在同一个事务中,如果其中一个Action校验失败,当前交易中的所有的Action将会被回滚。

以购买内存的交易为例:

{
    "expiration":"2023-06-21T12:00:00", #事务过期时间
    "ref_block_num":12345, #指示事务的参考区块编号,防止重放攻击
    "ref_block_prefix":67890, #指示事务的参考前缀,防止重放攻击
    "max_net_usage_words":0, #允许在事务中使用的最大网络资源单位,为0则无限制
    "max_cpu_usage_ms":0, #允许在事务中使用的最大CPU资源时间,为0则无限制
    "delay_sec":0, #事务的延迟执行时间(秒)
    "context_free_actions":[ #与上下文无关的操作
    ],
    "actions":[ #事务中的操作列表,这里包含了一个转账操作
        {
            "account":"eosio",
            "name":"buyrambytes",
            "authorization":[
                {
                    "actor":"accountadmin",
                    "permission":"active"
                }
            ],
            "data":{
                "payer":"accountadmin"
                "receiveruser":"receiveruser"
                "bytes":"1024"
            }
        }
    ],
    "transaction_extensions":[ #事务的扩展信息(一般为空)

    ]
}

在上述交易中:

actions里面包含了当前这笔交易的所有操作。

account表示要调用的目标合约账户,指定了要执行哪个账户的合约。

name指定了要执行的操作的名称。在这个例子中,调用了系统合约中购买内存的方法。

authorization授权信息列表,指定了可以执行该操作的授权用户和权限级别。在这个例子中,只有 "accountadmin" 的 "active" 权限被授权执行该操作。

data包含了具体的操作数据。在购买内存的合约中,payer为付款方,receiveruser为接收方,bytes表示购买1024bytes的内存。

当上述交易提交后,action中的转账操作将会创建一个新的事务,事务管理器会对转账中的authorization(签名授权)进行校验。如果发送方的权限错误或者权限不足,将会出现授权失败的错误,整个事务和数据都将会被回滚,提交的交易无法存入块的交易列表中(延迟事务失败后也会包含在块中,并且将对cpu资源进行收费)。在这过程中,事务会经历一个复杂的过程来完成确认并最终执行。下面一章讲介绍整个交易的生命周期。

02

交易的生命周期介绍

中移链的交易的整个生命周期,包括用户创建事务对象、签名交易、交易广播、验证、检查交易有效性和资源是否充足、添加交易到挂起事务池、区块生成和确认、交易执行和区块链状态更新、通知用户交易完成以及将事务添加到相关账户的事务历史记录等漫长的过程。注意,下图是一个简化的流程图,实际的处理中还包括很多复杂的细节和环节。

图片

交易的大体流程如下:

1.交易事务构造:交易事务包含了一系列操作,这些操作定义了在交易中进行的具体功能,如转账、调用智能合约、更新合约等。每个操作都需要指定操作的类型、执行所需的权限以及相关的参数。

2.签名:交易事务需要被有效签名,以证明事务是由被授权的账户发起的,并确保事务的完整性。交易中的每个操作都需要被添加一个或多个签名,以确保其来源的合法性。

3.权限验证:在执行交易事务之前,中移链会对交易进行权限验证。这意味着交易必须由授权了相应权限的账户发起,并且交易需要满足授权账户的权限要求,如权重、密钥等。

4.广播交易:在执行事务中包含的所有操作之后,事务进入结束阶段。在此步骤中,将为每个操作生成相应的操作收据。事务收据汇总了事务的结果(已执行、未执行、失败、延迟、过期等),包括以微秒为单位的实际CPU使用量,以及使用的总NET和RAM并通过P2P网络进行广播,以使其他节点可以接收到该交易,并验证其有效性。

5.传播及验证:交易事务被广播到网络中的其他节点后,每个节点都会验证交易的合法性和有效性。在验证过程中,节点会检查交易的签名、权限、交易哈希以及相关的数据是否正确。

6.区块打包和确认:在验证通过后,交易事务会进入区块的候选事务池,待生成新的区块时,中移链大约每0.5秒产生一个新的区块,会从候选事务池中选择一些交易事务来组成该区块。一旦新的区块生成并被共识确认,其中包含的交易事务就会得到确认,并被永久记录在区块链上。

7. 状态更新:根据交易事务中的操作,区块链的状态会被更新,包括智能合约存储、数据变更等。这些状态的更新会影响区块链状态的完整性和一致性。

需要注意的是,在交易执行过程中,签名和权限的验证会在事务创建后进行校验,保证所有的状态都将被回滚,这样可以保证整个区块链的数据一致性。在整个生命周期中,可以通过一些全局的配置来设置链的交易设置,比如交易超时时间、交易最大延迟块数、交易处理器线程数等参数来灵活的控制交易的执行规则,满足不同环境的不同需求。

03

总结

交易模块是中移链的重要组成部分。中移链的交易模块具有以下几个属性:

  • 高效性:中移链的交易系统拥有独立线程,所有交易发起后都会挂起到线程池,线程池能够快速地处理大量的交易,并支持并行处理。

  • 稳定性:中移链的交易模块采用了高度可靠的算法和系统设计,通过使用DPoS共识算法来选择区块生产者和验证交易,减少了共识算法的计算成本和能源消耗,确保交易的一致性和正确性。

  • 可扩展性:中移链的交易模块采用了分布式架构和优化算法,所有节点采用P2P进行连接,可以轻松地扩展到更大的网络规模。

  • 安全性:中移链的交易模块采用了先进的加密技术和安全机制,通过数字签名和哈希函数来保护交易的完整性,哈希函数将交易数据转换为固定长度的哈希值,任何对数据的修改都会导致不同的哈希值。通过比较哈希值,可以验证交易数据是否被篡改,确保交易的安全性和保密性。

  • 可定制性:中移链的交易模块可以根据需要进行自定义配置和调整,通过系统合约可以配置交易系统的各种参数,以满足不同环境的需求。

04

参考资料

[1]BSN开放联盟链:

https://opb.bsnbase.com/main/index

[2]官方EOSIO账号和权限介绍:

https://developers.eos.io/welcome/latest/protocol-guides/accounts_and_permissions

[3]官方EOSIO交易介绍:

https://developers.eos.io/welcome/latest/protocol-guides/transactions_protocol

[4]官方EOSIO智能合约介绍:

https://developers.eos.io/welcome/latest/smart-contract-guides/index

[5]官方EOSIO资源模块介绍:

https://developers.eos.io/welcome/latest/resources/index

[6]官方EOSIO代码库交易回滚的费用回答:

https://developers.eos.io/welcome/latest/resources/index

[7]官方EOS论坛对交易参数防止重放攻击的回答:

https://developers.eos.io/welcome/latest/resources/index

[8]官方EOSIO白皮书对context-free-actions的解释:

https://developers.eos.io/welcome/latest/resources/index

电脑访问DDC网络门户

ddc.bsnbase.com

END

猜你喜欢

转载自blog.csdn.net/BSN_yanxishe/article/details/133128438