中移链交易模块是中移链区块链零碎的外围模块之一。它的次要作用是解决用户发动的交易申请,并将其打包成区块增加到区块链上。交易模块接管来自不同合约执行的指令,比方创立账号、转账、部署和执行智能合约等指令,并确保所有交易都是无效且非法的。与其余模块相比,交易模块的工作量较大,每秒须要高效地解决上千个交易申请。
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/acco…
[3] 官网 EOSIO 交易介绍:
https://developers.eos.io/welcome/latest/protocol-guides/tran…
[4] 官网 EOSIO 智能合约介绍:
https://developers.eos.io/welcome/latest/smart-contract-guide…
[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