中移链交易模块介绍

2024-02-08 12:59
文章标签 模块 介绍 交易 中移

本文主要是介绍中移链交易模块介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

这篇关于中移链交易模块介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/691114

相关文章

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

Python模块导入的几种方法实现

《Python模块导入的几种方法实现》本文主要介绍了Python模块导入的几种方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录一、什么是模块?二、模块导入的基本方法1. 使用import整个模块2.使用from ... i

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题