Steem 序列化相关内容

in cn •  2 years ago  (edited)

以下内容是 chatgpt 生成的,还未经过验证,仅作参考。

Transaction 序列化

在 Steem 中,Transaction 的序列化顺序如下:

  • 序列化 Transaction 版本号 (UInt16类型,Little Endian 编码);
  • 序列化 Transaction 的 expiration 时间 (TimePointSec 类型,Little Endian 编码);
  • 序列化 Transaction 中所有操作的数量 (Varint32 类型);

对于 Transaction 中的每个操作:

  • 序列化操作的类型 ID (UInt32类型,Little Endian 编码),用于标识操作类型;
  • 序列化操作数据 (序列化为字节数组)。

在上述序列化顺序中,Varint32 是一种可变长度的整数类型,它用于序列化 Transaction 中操作的数量。Varint32 的序列化规则如下:

对于小于等于127的整数,序列化为一个字节,该字节的值等于该整数;

对于大于127的整数,序列化为多个字节,每个字节的最高位为1,其余7位用于表示整数的低7位,最后一个字节的最高位为0,其余7位用于表示剩余整数的最高位。

需要注意的是,Transaction 的操作类型 ID 是 Steem 中唯一标识每个操作的方式。每个操作类型都有一个唯一的整数 ID,用于在序列化和反序列化过程中标识该操作类型。在序列化 Transaction 时,需要先序列化操作类型 ID,然后序列化操作数据。在反序列化时,也需要先解析操作类型 ID,然后根据操作类型 ID 解析操作数据。

最后,需要注意的是,在 Steem 中,Transaction 还可以包含一些附加的元数据,如延迟执行时间、参考块号等。这些附加的元数据也需要进行序列化,但它们的序列化顺序可能与操作数据的序列化顺序不同。具体序列化顺序取决于实现方式和应用场景。

Operation 序列化

在 Steem 中,不同类型的 Operation 在序列化时可能具有不同的序列化顺序。一般来说,Operation 的序列化顺序如下:

  • 序列化 Operation 的类型 ID (UInt32类型,Little Endian 编码),用于标识该 Operation 类型;
  • 序列化 Operation 数据 (序列化为字节数组)。

需要注意的是,不同类型的 Operation 可能具有不同的数据结构和序列化规则。以下是一些常见的 Operation 序列化顺序示例:

转账操作 (Transfer Operation) 的序列化顺序:

  • 序列化 Operation 的类型 ID (值为2);
  • 序列化 from 账户名 (String类型);
  • 序列化 to 账户名 (String类型);
  • 序列化 转账金额 (Asset类型);
  • 序列化 转账备注 (String类型);
  • 序列化 扩展字段 (扩展字段结构体,序列化为字节数组)。

发布帖子操作 (Comment Operation) 的序列化顺序:

  • 序列化 Operation 的类型 ID (值为1);
  • 序列化 父级帖子 (String类型);
  • 序列化 作者 (String类型);
  • 序列化 帖子标题 (String类型);
  • 序列化 帖子正文 (String类型);
  • 序列化 JSON 格式的帖子附加信息 (String类型);
  • 序列化 扩展字段 (扩展字段结构体,序列化为字节数组)。

投票操作 (Vote Operation) 的序列化顺序:

  • 序列化 Operation 的类型 ID (值为3);
  • 序列化 投票人账户名 (String类型);
  • 序列化 被投票对象的账户名 (String类型);
  • 序列化 投票权重 (Int16类型,Little Endian 编码);
  • 序列化 扩展字段 (扩展字段结构体,序列化为字节数组)。

需要注意的是,以上仅是一些常见的 Operation 序列化顺序示例,实际上每个 Operation 的序列化顺序可能不同。在序列化时,需要根据具体的 Operation 类型和序列化规则来确定序列化顺序。

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!