# 区块和交易结构介绍

# 1. GXChain的区块结构

  • 区块中包含了transaction,transaction包含了operation,opreation包含了调用合约、投票、转账等操作

  • 通过GXChain的区块结构可以最直观的了解GXChain,一个完整的区块包含如下信息:

{
  "previous": "0092ab99afb1a7bc9107d85796ce7219214c5700",                   //上一个区块的ID
  "timestamp": "2018-12-12T07:44:18",                                       //生成区块的时间戳
  "witness": "1.6.30",                                                      //出块的公信节点对象ID
  "transaction_merkle_root": "b0e3fc1caf19cb57530f5b14ad903779221f487c",    //交易默克尔根
  "extensions": [],
  "witness_signature": "1f6335138fa77a52986ed0e0980ece86b919f84cf06647c2fdea3382578287c2e5403088d960cd75d5d5f134647bae80d1189e0a417f0d5bc127b294949864d662",    //公信节点签名
  "transactions": [         // block中包含的交易信息
    {
      "ref_block_num": 43928,               // 交易引用的区块信息(ref_block_num、ref_block_prefix皆来自之前的区块ID,可自己指定)
      "ref_block_prefix": 3666011859,
      "expiration": "2018-12-12T07:45:12",  // 交易到期时间
      "operations": [                       // transactions包含operations
        [
          75,       //operation操作码,75表示调用合约
          {
            "fee": {                    // 提供的手续费
              "amount": 13097,          // 带精度的手续费数量,比如精度为5,则除以100000
              "asset_id": "1.3.1"       // 手续费资产ID
            },
            "account": "1.2.882",       // 调用者账户ID
            "contract_id": "1.2.881",   // 合约账户ID
            "amount": {                 // 附带资产
              "amount": 135000,
              "asset_id": "1.3.1"
            },
            "method_name": "roll",      // action方法
            "data": "1e6632693277676439536b6c717065594a7a54736c6a3658316e4873797941008813",     //action参数
            "extensions": []
          }
        ]
      ],
      "extensions": [],
      "signatures": [       // 交易签名
        "1f254c944ee1bc26437f0d093ef1f05269a728914fee247db0556c5cf2dac52158124c495ddb404be83f5f08ac7960593ae0e2ccc9372d138c873d68bd6b9a99b6"
      ],
      "operation_results": [        //操作执行结果,消耗的手续费、cpu、ram
        [
          3,
          {
            "billed_cpu_time_us": 505,
            "ram_usage_bs": 430,
            "fee": {
              "amount": 13097,
              "asset_id": "1.3.1"
            }
          }
        ]
      ]
    }
  ],
  "block_id": "0092ab9a9e7e11137fa487176f7e10992fef1c47",       //此区块的ID
  "signing_key": "GXC6xSvFR3hohUGut8tsARuJPMPvkdmc3KnVg2KvrKw9cvLTbTP3u",   //出块公信节点的公钥
  "transaction_ids": [
    "ba2bdb39acda14e11bc645a41e6d0e0cba14921d"      //区块包含的交易ID
  ]
}

# 2. Operation

GXChain区块链包含一系统operation, 每个operation对应一个Code,根据Code可以判断区块中包含哪些operation,比如区块 1769028 (opens new window) 包含了一笔转帐交易,Code 0 对应转帐操作。 常用的Code和operation的对应关系:

Code Operation Type
0 转账
5 创建账户
6 更新账户
73 代理转账
74 部署合约
75 调用合约
76 更新合约

# 3. GXChain上的对象

GXChain上相关类型的数据结构是通过对象保存的,对象ID作为其标识(格式为:x.x.x),对象的instance id 为对象ID的最后一位。示例:nathan账户ID为1.2.17,instance id为17;GXC资产ID为1.3.1,instance id为1,常见对象类型如下:

ID Object Type
1.2.x 帐户对象
1.3.x 资产对象
1.5.x 理事会成员对象
1.6.x 见证人对象
1.10.x 提案对象
1.11.x 操作历史对象
1.13.x 待解冻余额对象
1.14.x 预算项目对象
1.25.x 忠诚计划冻结余额对象
2.0.0 系统全局参数对象
2.1.x 动态参数对象
2.3.x 资产动态参数对象
2.5.x 帐户余额对象
2.6.x 帐户统计对象
2.7.x 交易对象
2.8.x 区块摘要对象
2.9.x 帐户交易历史对象
2.12.x 见证人调度表对象