中移链交易模块介绍

2023-09-21 11:06:50

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

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

更多推荐

数据库设计步骤

一、数据库设计重点:有效存储、高效访问1、为什么要进行数据库设计:(1)减少数据冗余;(2)避免数据异常维护;(3)节约存储空间;(4)高效访问;二、数据库设计步骤1、需求分析;2、逻辑设计:ER图等建模;3、物理设计:根据每种数据库特点设计;4、维护优化;三、为什么要进行需求分析1、了解系统中所要存储的数据;2、了解

基于本地持久内存的并行一致性哈希文件系统CHFS

摘要CHFS是一个利用计算节点的持久内存的自适应并行文件系统。该设计完全基于高度可扩展的分布式键值存储,采用一致性哈希算法。CHFS通过消除专用元数据服务器、顺序执行和集中式数据管理,提高了并行数据访问性能和元数据性能的可扩展性。该实施利用了多核和多核CPU、高性能网络和Mochi-Margo库的远程直接内存访问。在一

操作系统备考学习 day3 (2.1.1 - 2.1.6)

操作系统备考学习day3二、进程与线程2.1进程与线程2.1.1进程的概念和特征2.1.2进程的状态与转换2.1.3进程的组织2.1.4进程控制2.1.5进程间通信(IPC)2.1.6线程和多线程模型二、进程与线程2.1进程与线程2.1.1进程的概念和特征进程:是动态的,是程序的一次执行过程。同一个程序多次执行会对应多

C++数据结构 -- 哈希表

目录一、哈希概念二、哈希冲突三、哈希函数四、减少哈希冲突常用的方法4.1闭散列4.1.1闭散列的开放定址法的增容4.1.2闭散列的开放定址法的哈希结构的实现4.3开散列4.3.1开散列概念4.3.2插入元素4.3.2删除元素4.3.3开散列的哈希桶的增容4.3.4开散列的哈希桶(拉链法)代码实现4.3.5关于开散列的思

过拟合和欠拟合:机器学习模型中的两个重要概念

文章目录🍋引言🍋过拟合和欠拟合的概念🍋过拟合和欠拟合的影响与危害🍋过拟合和欠拟合的原因与解决方法🍋过拟合和欠拟合的研究现状与发展趋势🍋过拟合&欠拟合---案例🍋总结🍋引言在机器学习模型中,过拟合和欠拟合是两种常见的问题。它们在模型训练和预测过程中扮演着重要的角色。了解过拟合和欠拟合的概念、影响、解决方法

【SQL】S0 系列博文大纲

系列博文大纲SQL学习环境建议系列博文相关书籍系列博文大纲阶段进展SQL学习环境建议对于SQL语言的学习,博主本地使用:MySQL+DataGrip;MySQL提供本地数据库服务;DataGripIDE,承担编程运行测试任务;DataGrip与Pycharm同属于Jetbrains公司开发IDE产品,个人感觉非常好用,

设计模式汇总

设计模式本质上是某类特定问题的代码设计解决方案,实际上是一套某类问题的代码设计经验总结。(前辈总结的解决某类问题的切实可行的套路)问题1、为什么要使用设计模式?答:1、提高代码复用率,降低开发成本和成周期。2、提高代码可维护性,可扩展性。3、使代码更优雅,更容易被他人理解。问题2、设计模式的设计原则是什么?答:1、单一

JDK 21探秘:引领Java开发新潮流的强大功能

JDK21是Java开发工具包的最新版本,它引入了许多令人振奋的新特性,旨在提高开发人员的生产力和代码质量。在本文中,我们将介绍一些JDK21的新特性,并提供使用示例,以帮助您更好地理解和应用这些功能。一、字符串模板(StringTemplates)字符串模板是JDK21中引入的一项预览功能。它可以大大简化Java中处

(Vue2)VueRouter

VueRouter修改地址栏路径时,切换显示匹配的组件使用5+2:1下载版本3.6.5(Vue3对应版本4.X)npmaddvue-router@3.6.52引入importVueRouterfrom'vue-router'3安装注册Vue.use(VueRouter)4创建路由对象constrouter=newVue

Vue3.2组件如何封装,以弹窗组件的封装为例

以前一直想,每次封装一个弹窗组件的时候,一直特别复杂,父传子,子传父,各种来回绕,来回修改。一直想如何才能更加简化,但是一直没时间,今天终于抽时间出来封装了一下本次封装简化了很多的代码,再也不用父传子,子传父,各种来回绕,来回修改了。实现功能如下://拆分了表格组件和弹窗组件//实现在父组件中,控制弹窗的显示与隐藏//

设计模式之代理模式

文章目录代理模式(Proxy)代理模式的基本介绍静态代理静态代码模式的基本介绍应用实例静态代理优缺点动态代理动态代理模式的基本介绍JDK中生成代理对象的API动态代理应用实例Cglib代理Cglib代理模式的基本介绍Cglib代理模式实现步骤Cglib代理模式应用实例几种常见的代理模式介绍—几种变体代理模式(Proxy

热文推荐