ZooBC 维基
交易

交易信封

每笔 ZooBC 交易,无论类型如何,都是一个布局相同的字节串,称为信封。该类型自有的数据放在一个单独的字段里,即交易体;其余一切(谁发送、谁接收、手续费、时间、可选的消息)由全部 73 种类型共用。了解信封,就足以读取任何交易、为其计价并对其进行检查。

按顺序排列的字段

信封被画成一条按顺序排列的字段带,从类型一直到签名,上方的燃气上限和链 id 被划掉
信封被画成一条按顺序排列的字段带,从类型一直到签名,上方的燃气上限和链 id 被划掉
字段大小说明
类型4 字节,小端序[[transactions交易类型]]编号
版本1 字节1、2 或 3
时间戳8 字节Unix 秒
发送方一个地址
接收方一个地址或 4 字节的空标记 02 00 00 00
手续费8 字节以原子单位计
存续8 字节版本 2 和 3
到期4 字节版本 3
交易体4 字节长度,后接交易体最多 65,536 字节
托管部分可变或 4 字节的空标记
消息4 字节长度,后接消息可选
签名可变始终位于最后

地址由 4 字节的类型编号后接载荷构成:原生 ZBC_ 账户共 36 字节,以太坊账户共 24 字节(见 账户与地址)。每个金额都是整数个原子单位,1 ZBC 等于 100,000,000 个原子单位。

缺少的东西

没有燃气(gas)上限,因为没有需要计量的虚拟机:每种类型都是一条固定规则,其价格在签名之前就已知。没有链 id 字段:签名改为覆盖该链的创世区块哈希(见 签署交易)。也没有 nonce 字段:链在自己的状态中保存每个发送方的 nonce。

版本

  • 版本 1 没有存续字段。
  • 版本 2 增加了存续字段。
  • 版本 3 还增加了到期字段,用来设定交易保持有效的时长(见 有效期与时间戳)。

声明了存续押金的版本 1 交易会被拒绝,声明了有效期的版本 1 或 2 交易也会被拒绝:它们的字节中没有容纳这些内容的位置。

存续、交易体、托管部分和消息

  • 存续要么为 0,要么至少为 10,000,000 原子单位(0.1 ZBC)。它会开启一条存续记录,让交易在常规修剪之后仍被保存,而且它从不退还(见 付费保存数据(存续))。在消息中携带外部链已签名交易的交易不得支付存续押金。
  • 交易体最多 65,536 字节,按其类型所定义的方式排布。
  • 托管部分只能由 SendZBC 和 TransferToken 携带;它把这笔付款变成托管。
  • 消息为明文时最多 256 字节,且不得含零字节;加密时最多 320 字节(加密消息以“ZBE1”开头);携带来自以太坊、Solana 或比特币的外部链原生交易时最多 4,096 字节。

手续费字段

手续费以原子单位声明,且必须至少等于该交易的下限:0.025 ZBC 的基础操作费乘以已注册节点投票决定的手续费系数,再加上每个已注册节点都要保存的交易体和消息字节的费用。由于下限只取决于交易本身和链的参数,钱包可以在签名之前用 GET /api/v1/blockchain/estimate-fee 向任何节点查询。

低于下限的手续费会被拒绝,包含这种交易的区块无效。声明中高于下限的部分会在同一区块中退还给付款方,因此不小心多付不会有任何损失。不转移任何东西的 Empty 类型仍须支付高于零的手续费,而已注册节点为网络执行的少数职责交易,例如存储证明和事件见证,必须声明恰好为 0 的手续费。手续费 一文解释了计算公式、退还规则以及手续费的去向。

另见