区块链中,交易、收据、区块是三种重要的数据结构,是外界与区块链系统沟通的一种数据格式。
而天玄链中,对以太坊原有的数据格式上新增了天玄链必备的数据字段。如下:
3.1. 交易数据(EthTransaction)
名称 | 类型 | 描述 | RLP编码索引 |
---|---|---|---|
publicKey | bytes20 | 交易发起公钥 | 0 |
nonce | u256 | nonce值,标识当前交易执行的唯一性 | 1 |
futureEventNumber | u256 | 系统查重使用 | 2 |
gasPrice | u256 | gas价格,天玄链中暂未启用 | 3 |
gasLimit | u256 | gas限制,当前交易执行的gas消耗上限,天玄中暂无启用 | 4 |
receiveAddress | bytes20 | 调用地址,交易调用的接收地址 | 5 |
value | u256 | 当前交易的转账数额,天玄链中暂未启用 | 6 |
data | vector<byte> | 调用内容,若receiveAddress=0x0,则为合约代码;否则为合约方法的函数签名 | 7 |
executeStates | set<byte> | 读写状态,当前交易涉及读、写的状态集合 | 8 |
signature | vector<byte> | 交易发起者签名 | 9 |
3.2. 区块数据(Block)
名称 | 类型 | 描述 | RLP编码索引 |
---|---|---|---|
eventId | bytes32 | 当前区块内容哈希,构建链式数据 | 0 |
preEventId | bytes32 | 上一个区块内容哈希,构建链式数据 | 1 |
coinBase | btyes0 | 矿工地址,天玄链中暂未启用 | 2 |
stateRoot | bytes0 | 状态跟,天玄链中暂未启用 | 3 |
receiptsRoot | bytes0 | 收据根,天玄链中暂未启用 | 4 |
epoch | u256 | 世代号,标记当前验证者集合所处时间单位 | 5 |
number | u256 | 区块号,标记当前区块的高度 | 6 |
timestamp | u256 | 时间戳,标记当前区块的出块时间 | 7 |
globalEvents | vector<globalEvent> | 全局事件,当前区块内包含的系统更新事件 | 8 |
receipts | vector<EthTransactionReceipt> | 交易收据,当前区块内包含交易的所有执行后收据 | 9:receipts size 10:receipts[0] 11:receipts[1] ... |
3.3. 全局系统事件数据(globalEvent)
名称 | 类型 | 描述 | RLP编码索引 |
---|---|---|---|
publicKey | vector<byte> | 全局交易发起者公钥 | 0 |
nonce | u256 | nonce值,标识当前交易执行的唯一性 | 1 |
futureEventNumber | u256 | 系统查重使用 | 2 |
commandCode | byte | 系统事件指令 | 3 |
data | vector<byte> | 调用内容,系统事件携带参数 | 4 |
signature | vector<byte> | 交易发起者签名 | 5 |
3.4. 交易收据数据(EthTransactionReceipt)
名称 | 类型 | 描述 | RLP编码索引 |
---|---|---|---|
logInfoList | vector<LogInfo> | event事件列表 | 0 |
ethTransaction | EthTransaction | 交易内容,产生收据的交易内容 | 1 |
gasUsed | u256 | gas消耗 | 2 |
executionResult | vector<byte> | 执行结果,当前交易的执行结果 | 3 |
error | string | 错误日志,标记当前交易执行错误原因 | 4 |
3.5. 合约事件数据(LogInfo)
名称 | 类型 | 描述 | RLP编码索引 |
---|---|---|---|
address | btyes20 | 合约地址 | 0 |
topics | vector<word> | 事件主题 | 1 |
data | vector<byte> | 事件内容 | 2 |