ZooBC ウィキ
トランザクション

トランザクション

トランザクションとは、チェーンへの署名付きの指示です。誰かに支払う、トークンを発行する、注文を出す、アドレスをグループにリンクする、といったものです。ZooBC には、ユーザーのコードのための仮想マシンはありません。すべての機能は、すべてのノードがまったく同じように適用する固定されたルールを持つ組み込みのトランザクションタイプなので、ウォレットは署名する前に、トランザクションにできることのすべてと、その最低手数料を知っています。

組み込みのタイプ

バージョン 0.5.8 以降、ZooBC はタイプ 0 を含めて 73 のトランザクションタイプ番号を、12 のファミリーに分けて定義しています。

トランザクションタイプのファミリーごとに 1 枚ずつ、12 枚のタイル。それぞれにタイプの数が書かれ、合計は 73 です
トランザクションタイプのファミリーごとに 1 枚ずつ、12 枚のタイル。それぞれにタイプの数が書かれ、合計は 73 です

タイプ番号はグループにサブタイプの 256 倍を加えたものなので、番号はまばらです。2 は NodeRegistration で、258(グループ 2、サブタイプ 1)はその更新です。チェーンが定義していない番号は拒否され、定義されたタイプはすべてブロック 1 から受け入れられます。

2 つの番号は特別です。タイプ 0 の Empty は何も動かしません。メッセージを運ぶために存在し、それでもゼロより大きい手数料を支払わなければならず、チェーンが送信者ごとに保持するカウンターである送信者のナンスを増やしません。タイプ 53 の CancelLongevity は廃止されています。どのチェーンもそれを拒否し、代わりに CloseLongevity(309)が使われます。

トランザクションの一生

  1. ウォレットが、すべてのタイプで同じ構成のエンベロープを作り、1 つのチェーンのために署名します。
  2. 署名済みのバイト列を POST /api/v1/transactions で送信します。HTTP 202 は、ノードがトランザクションを自分のプールに受け入れたことを意味し、ブロックに入ったことを意味するのではありません。同じバイト列を再送しても安全です。そのコピーは重複として扱われます。
  3. ノードがトランザクションを渡していき、ブロックの生成者がそれをブロックに取り込みます。1 つのブロックが保持できるのは、最大 2,000 のトランザクションと 524,288 バイトのペイロードで、各アカウントからのトランザクションは最大 1 つです(1 ブロックにつき 1 アカウント 1 トランザクション、そしてバッチ を参照)。
  4. GET /api/v1/transactions/<hash>/status がその進み具合を報告します。staging、mempool(位置付き)、confirmed(ブロック高付き)、rejected(理由付き)、not_found のいずれかです。

どのブロックにも時間枠内に取り込まれなかったトランザクションは失効します(有効期限とタイムスタンプ を参照)。

その間に状態が変わったとき

署名からブロックへの取り込みまでの間に、他のトランザクションがそのトランザクションの前提を変えることがあります。エスクローが決着する、オファーが他の誰かに受諾される、トークンが失効する、などです。そのようなトランザクションは有料の空操作(paid no-op)になります。ブロックに取り込まれ、手数料を支払い、それ以外は何も変えません。ブロックはすべてのノードで有効なままなので、古くなりかけのトランザクションを送ってチェーンを止めることは誰にもできません。

ブロックが無効になるのは、不正な署名、下限を下回る手数料(手数料 を参照)、送信者の残高を超える支払いなど、すべてのノードが同じように認識する欠陥がある場合だけです。

このカテゴリーの記事

関連項目

このトピックの記事