中移链交易模块介绍

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

相关文章

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.

Pytorch介绍与安装过程

《Pytorch介绍与安装过程》PyTorch因其直观的设计、卓越的灵活性以及强大的动态计算图功能,迅速在学术界和工业界获得了广泛认可,成为当前深度学习研究和开发的主流工具之一,本文给大家介绍Pyto... 目录1、Pytorch介绍1.1、核心理念1.2、核心组件与功能1.3、适用场景与优势总结1.4、优

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe

Spring Security介绍及配置实现代码

《SpringSecurity介绍及配置实现代码》SpringSecurity是一个功能强大的Java安全框架,它提供了全面的安全认证(Authentication)和授权(Authorizatio... 目录简介Spring Security配置配置实现代码简介Spring Security是一个功能强

JSR-107缓存规范介绍

《JSR-107缓存规范介绍》JSR是JavaSpecificationRequests的缩写,意思是Java规范提案,下面给大家介绍JSR-107缓存规范的相关知识,感兴趣的朋友一起看看吧... 目录1.什么是jsR-1072.应用调用缓存图示3.JSR-107规范使用4.Spring 缓存机制缓存是每一

Python logging模块使用示例详解

《Pythonlogging模块使用示例详解》Python的logging模块是一个灵活且强大的日志记录工具,广泛应用于应用程序的调试、运行监控和问题排查,下面给大家介绍Pythonlogging模... 目录一、为什么使用 logging 模块?二、核心组件三、日志级别四、基本使用步骤五、快速配置(bas

Java中 instanceof 的用法详细介绍

《Java中instanceof的用法详细介绍》在Java中,instanceof是一个二元运算符(类型比较操作符),用于检查一个对象是否是某个特定类、接口的实例,或者是否是其子类的实例,这篇文章... 目录引言基本语法基本作用1. 检查对象是否是指定类的实例2. 检查对象是否是子类的实例3. 检查对象是否

什么是ReFS 文件系统? ntfs和refs的优缺点区别介绍

《什么是ReFS文件系统?ntfs和refs的优缺点区别介绍》最近有用户在Win11Insider的安装界面中发现,可以使用ReFS来格式化硬盘,这是不是意味着,ReFS有望在未来成为W... 数十年以来,Windows 系统一直将 NTFS 作为「内置硬盘」的默认文件系统。不过近些年来,微软还在研发一款名

Python datetime 模块概述及应用场景

《Pythondatetime模块概述及应用场景》Python的datetime模块是标准库中用于处理日期和时间的核心模块,本文给大家介绍Pythondatetime模块概述及应用场景,感兴趣的朋... 目录一、python datetime 模块概述二、datetime 模块核心类解析三、日期时间格式化与

Python如何调用指定路径的模块

《Python如何调用指定路径的模块》要在Python中调用指定路径的模块,可以使用sys.path.append,importlib.util.spec_from_file_location和exe... 目录一、sys.path.append() 方法1. 方法简介2. 使用示例3. 注意事项二、imp