`

eos事务结构

    博客分类:
  • EOS
 
阅读更多
transaction_header:事务头的数据大小是固定的,所有交易都有一个过期时间,如果过期时间小于最新区块的时间,那么该交易一定不会再被包含在不可逆区块中
struct transaction_header 
{
   time_point_sec         expiration; 
   uint16_t               ref_block_num       = 0U;
   uint32_t               ref_block_prefix    = 0UL;
   fc::unsigned_int       max_net_usage_words = 0UL;
   uint8_t                max_cpu_usage_ms    = 0;
   fc::unsigned_int       delay_sec           = 0UL;
}

1.expiration:设置当前事务过期时间
2.ref_block_num:引用区块的高度
3.ref_block_prefix:引用区块的前缀
4.max_net_usage_words:最大网络使用字数
5.max_cpu_usage_ms:最大CPU使用量,按毫秒计算
6.delay_sec:事务延迟执行时间,按秒计算

transaction:事务是由一组全部完成或者全部失败的消息组成的,这些消息具备数据的读写能力,transaction继承transaction_header
struct transaction : public transaction_header 
{
   vector<action>         context_free_actions;
   vector<action>         actions;
   extensions_type        transaction_extensions;
}

1.context_free_actions:保存不参与签名的动作
2.actions:事务包含的动作action数组
3.transaction_extensions:事务内容扩展

signed_transaction:签名事务继承transaction
struct signed_transaction : public transaction
{
   vector<signature_type>    signatures;
   vector<bytes>             context_free_data;
}

1.signatures:事务的签名
2.context_free_data:不参与签名的数据,实际是该事务包含的所有action结构中的context_free_actions的集合入口

defered_transaction:延迟事务继承signed_transaction.
EOS支持计划执行事务,只需要在发送事务时添加defered相关的参数即可.延迟事务会放在一个内存容器中,每次出块都会比对其触发时间,以决定是否执行该事务,并将其打包进区块.

这个貌似在1.8版本已经没有了
1.sender_id:延迟事务的id
2.sender:事务发送者
3.payer:开销付费者
4.execute_after:延时时间,按秒计算

packed_transaction:打包事务,该结构体内部定义了多个函数,可以打包transaction,也可以打包signed_transaction,是因为这个结构的对象有可能在网络中传输,可以有打包的需求
struct packed_transaction : fc::reflect_init 
{
   enum compression_type {
      none = 0,
      zlib = 1,
   };
private:
   vector<signature_type>                  signatures;
   fc::enum_type<uint8_t,compression_type> compression;
   bytes                                   packed_context_free_data;
   bytes                                   packed_trx;
private:
   signed_transaction                      unpacked_trx;
};


transaction_receipt_header:当一个事务被包含进入一个区块(可逆区块)以后,该事务可能会有来自区块生产者发起的多个状态的转换.因此,有transaction_receipt_header帮忙完成这项工作
struct transaction_receipt_header 
{
   enum status_enum {
      executed  = 0, ///< succeed, no error handler executed
      soft_fail = 1, ///< objectively failed (not executed), error handler executed
      hard_fail = 2, ///< objectively failed and error handler objectively failed thus no state change
      delayed   = 3, ///< transaction delayed/deferred/scheduled for future execution
      expired   = 4  ///< transaction expired and storage space refuned to user
   };

   fc::enum_type<uint8_t,status_enum>   status;
   uint32_t                             cpu_usage_us = 0; 
   fc::unsigned_int                     net_usage_words; 
};

1.status:该结构体主要包含了状态的枚举,共有五种状态
a.executed:成功,没有出现错误
b.soft_fail:客观出错,未执行,错误处理器执行
c.hard_fail:客观失败并且错误处理器也执行失败,因此没有状态修改
d.delayed:事务被延迟,或者定时执行,将于未来执行
e.expired:事务超时执行,存储空间开销退还付款者
f.net_usage_words:网络带宽消耗的字数账单
g.cpu_usage_s:CPU使用量,按微秒记录的账单

transaction_receipt:作为完整的事务
struct transaction_receipt : public transaction_receipt_header 
{
   fc::static_variant<transaction_id_type, packed_transaction> trx;

   digest_type digest()const {
      digest_type::encoder enc;
      fc::raw::pack( enc, status );
      fc::raw::pack( enc, cpu_usage_us );
      fc::raw::pack( enc, net_usage_words );
      if( trx.contains<transaction_id_type>() )
         fc::raw::pack( enc, trx.get<transaction_id_type>() );
      else
         fc::raw::pack( enc, trx.get<packed_transaction>().packed_digest() );
      return enc.result();
   }
};


trx:事务体,是区块链中事务上链的重要阶段,包括网络中的流转通信,因此是打包事务packed_transaction类型.

digest():摘要函数



1.sign_block所包含的事务集合就是transaction_receipt类型,而不是transaction.
2.transaction_receipt:代表经过区块链打包,网络广播,通信验证及确权共识以后的事务
3.transaction:是本地事务,可以说transaction经过多层包装以后成为transaction_receipt
分享到:
评论

相关推荐

    普元EOS

    1. **基础构件**:这是构成EOS平台的基本元素,如数据访问、事务管理、安全控制等。它们为上层构件提供基础设施支持。 2. **业务构件**:这些构件专注于特定的业务领域,如订单处理、财务管理等。它们封装了业务...

    EOS6程序员教程

    - EOS6的目录结构清晰明了,包含了bin、lib、conf等多个重要目录。 #### 二、EOS6体验开发 **2.1 HelloWorld案例开发** - **案例描述:** - HelloWorld案例是最简单的入门案例,用于展示如何创建、部署和运行一个...

    EOS标签例子(RichWeb)

    在实际应用中,EOS标签可以与其他EOS功能结合使用,如服务代理(Service Proxy)、事务管理(Transaction Management)和安全性控制(Security Control)。例如,一个表单提交的标签可能与EOS的服务代理配合,将用户...

    EOS6 工作流教程

    教程将指导用户如何根据组织结构分配不同的角色,确保每个角色都能在流程中发挥其应有的作用。权限管理是确保数据安全和流程合规的重要环节,用户将学习如何设置不同级别的访问权限。最后,通过模拟运行和实际测试,...

    普元EOS简单运算逻辑的编写

    标题“普元EOS简单运算...以上只是基础的EOS Bizlet开发要点,实际应用中可能涉及更多复杂逻辑,如事务管理、并发控制、安全性等。学习EOS的官方文档、参考案例以及参与社区讨论能帮助你更深入地理解和掌握这一技术。

    EOS操作文档及相关资料

    - 解释EOS开发中常见的专业术语,如构件、服务、事件、事务等。 **2.4 EOS集成开发环境介绍** - **Studio项目结构**:描述EOS Studio项目的组织结构,包括源代码、资源文件、配置文件等。 - **基于Eclipse平台的...

    普元eos-springbean开发

    - **创建构件包**:为了更好地组织代码结构,通常会创建多个构件包,将相关的类或组件放置在一起。 - **开发页面**:利用EOS提供的页面设计器,快速搭建用户界面。 - **开发SpringBean**:根据业务需求编写具体的...

    Primeton EOS6.0程序员教程

    - 分析代码结构,理解EOS服务的工作原理。 **3.2 单表查询开发** - **案例描述:** - 实现一个简单的单表查询功能。 - **案例开发:** - 创建服务接口。 - 定义查询逻辑。 - 使用数据库连接查询数据。 - **...

    普元 EOS6程序员开发教程

    - 安装完成后,EOS6会在指定位置生成相应的目录结构,包括配置文件、日志文件等。 #### 二、EOS6体验开发 **2.2 HelloWorld案例开发** - **案例描述:** - HelloWorld案例是一个简单的示例项目,用于演示如何...

    EOS入门必备之SQL_Server篇.doc

    此外,SQL Server具有强大的事务处理能力,确保数据的一致性和完整性,且具备高可用性解决方案,如镜像、复制和AlwaysOn可用性组。 【数据表的操作】 数据表是SQL Server中存储数据的核心组件。在EOS环境下,理解...

    《仓储信息技术》PPT课件.ppt

    4. 电子数据交换(EDI):EDI是一种在企业间传输商业文件的电子方式,ISO定义它为结构化事务处理的数据传输。通过统一标准,EDI使得不同组织间的数据交换变得高效,常见于订单、发票等商务文档的传输。 5. 全球定位...

    EDI电子数据交换技术PPT课件

    国际标准化组织(ISO)将EDI定义为将商业或行政事务按照公认标准转换为结构化的事务处理或信息数据,然后在计算机之间进行电子传输。联合国的定义强调了通过约定的标准编排数据并进行自动传输。在中国,EDI被定义为...

    信息化解决方案.docx

    连锁分店作为零售前线,利用POS系统(销售点系统)进行实时交易记录,EOS系统(电子订货系统)实现自动订货,同时借助店内管理系统来处理日常运营事务。远程联网系统则将这些分散的节点连接起来,实现数据的快速传递...

    连锁药店的财务管理.doc

    此外,运用先进的信息系统(如EOS系统)来收集信息,减少交流成本,进一步提升效率。 总之,连锁药店的财务管理是通过严谨的制度设计,借助现代信息技术,实现资金和资产的高效运作,以达到降低运营成本、增加盈利...

    AMBA® AXI and ACE Protocol Specification 5.0

    3. 流接口:用于连续数据传输的特性,如流标识符(ID)和流结束(EOS)标志。 4. 事务层(Transaction Layer)和物理层(Physical Layer)的区别和作用。 5. AXI的多通道设计:如何通过多个独立的通道并行处理多个...

    ADF学习教程

    Model层通常由Entity Objects (EOs) 和 View Objects (VOs) 组成,它们处理与数据库的交互。 2. **View层**:用户在这一层的UI界面上进行操作,这些操作会直接影响到Model层代理的数据。 3. **Controller层**:...

Global site tag (gtag.js) - Google Analytics