什么是交易?

不同于比特币或者以太坊中的 Transaction 只能处理转账,Forge 中 Transaction 的数据结构设计的非常巧妙。包含外部 Transaction 标准字段和可扩展的内部 Itx 域,为什么要设计成这样?

Transaction 的标准字段就如同写信时信封上需要填写的内容,比如收件人、收件地址、邮编等等,而 Itx 域是信封里面的内容。Forge 原生支持超过 20 种 Transaction,这些 Transaction 的主体结构是完全相同的:

message Transaction {
  string from = 1;                    # 这个tx是谁发的,即钱包地址
  uint64 nonce = 2;                   # nonce 用来防止重敌攻击,每次需要递增发送
  string chain_id = 3;                # tx发送至的链的id
  bytes pk = 4;                       # 发tx的钱包的公钥
  bytes signature = 13;               # 发tx的钱包的签名
  repeated multisig signatures = 14;  # 多方签名
  google.protobuf.Any itx = 15;       # inner transaction ,这个tx具体是干啥的
}

这 20 多种 Itx 的结构则存在很大的差异,比如我们要去链上注册账户需要发送的内容如下:

message DeclareTx {
  string moniker;                     # 账户昵称
}

关于 Forge 内置的 Transaction 可以参考 Forge 文档

查看单笔交易?

执行 forge tx <hash>,可以查看某笔链上交易(Transaction)的详情,比如发送者是谁,交易内容是什么,如下图:

from:       z1T2S3qaVpBvzfSLJ7nTz8jniEAKQUUH9a6
nonce:      1572590138519
chainId:    app-chain
pk:         gW67ahtqJowGZjpYGsO+uPZsUaHYyC2k/v+ZSPbjF1E=
gas:        0
delegator:  z1Wmv5ST8xn4mCJT31KTSgrNoCVz7hUtYGp
signature:  dIYmCuBkbXa4Dk2y+iAsag3PIhmid9PJD8Npi7AGjGzopHhgd+U7CogVlrglotInon+IrZeE9l+krIzE79UXBg==
signatures:
  (empty array)
itx:
  type:  TransferTx
  value:
    to:     z1j8b8qftTT2u4e3H8dJNomjxPNAmwoqFKv
    value:  1000000000000000000
    assets:
      (empty array)
    data:
      type:  json
      value: empty

查看多笔交易?

执行 forge tx:ls 能按照发生的时间倒序列出最新的 10 条 Transaction。