トランザクション
トランザクションとは、チェーンへの署名付きの指示です。誰かに支払う、トークンを発行する、注文を出す、アドレスをグループにリンクする、といったものです。ZooBC には、ユーザーのコードのための仮想マシンはありません。すべての機能は、すべてのノードがまったく同じように適用する固定されたルールを持つ組み込みのトランザクションタイプなので、ウォレットは署名する前に、トランザクションにできることのすべてと、その最低手数料を知っています。
組み込みのタイプ
バージョン 0.5.8 以降、ZooBC はタイプ 0 を含めて 73 のトランザクションタイプ番号を、12 のファミリーに分けて定義しています。
タイプ番号はグループにサブタイプの 256 倍を加えたものなので、番号はまばらです。2 は NodeRegistration で、258(グループ 2、サブタイプ 1)はその更新です。チェーンが定義していない番号は拒否され、定義されたタイプはすべてブロック 1 から受け入れられます。
2 つの番号は特別です。タイプ 0 の Empty は何も動かしません。メッセージを運ぶために存在し、それでもゼロより大きい手数料を支払わなければならず、チェーンが送信者ごとに保持するカウンターである送信者のナンスを増やしません。タイプ 53 の CancelLongevity は廃止されています。どのチェーンもそれを拒否し、代わりに CloseLongevity(309)が使われます。
トランザクションの一生
- ウォレットが、すべてのタイプで同じ構成のエンベロープを作り、1 つのチェーンのために署名します。
- 署名済みのバイト列を
POST /api/v1/transactionsで送信します。HTTP 202 は、ノードがトランザクションを自分のプールに受け入れたことを意味し、ブロックに入ったことを意味するのではありません。同じバイト列を再送しても安全です。そのコピーは重複として扱われます。 - ノードがトランザクションを渡していき、ブロックの生成者がそれをブロックに取り込みます。1 つのブロックが保持できるのは、最大 2,000 のトランザクションと 524,288 バイトのペイロードで、各アカウントからのトランザクションは最大 1 つです(1 ブロックにつき 1 アカウント 1 トランザクション、そしてバッチ を参照)。
GET /api/v1/transactions/<hash>/statusがその進み具合を報告します。staging、mempool(位置付き)、confirmed(ブロック高付き)、rejected(理由付き)、not_found のいずれかです。
どのブロックにも時間枠内に取り込まれなかったトランザクションは失効します(有効期限とタイムスタンプ を参照)。
その間に状態が変わったとき
署名からブロックへの取り込みまでの間に、他のトランザクションがそのトランザクションの前提を変えることがあります。エスクローが決着する、オファーが他の誰かに受諾される、トークンが失効する、などです。そのようなトランザクションは有料の空操作(paid no-op)になります。ブロックに取り込まれ、手数料を支払い、それ以外は何も変えません。ブロックはすべてのノードで有効なままなので、古くなりかけのトランザクションを送ってチェーンを止めることは誰にもできません。
ブロックが無効になるのは、不正な署名、下限を下回る手数料(手数料 を参照)、送信者の残高を超える支払いなど、すべてのノードが同じように認識する欠陥がある場合だけです。
このカテゴリーの記事
- トランザクションのエンベロープ:すべてのトランザクションが運ぶフィールドと、その手数料。
- トランザクションへの署名:チェーン束縛ダイジェストと、署名できる鍵タイプ。
- 有効期限とタイムスタンプ:署名されたトランザクションがどれだけ有効であり続けるか。
- 1 ブロックにつき 1 アカウント 1 トランザクション、そしてバッチ:1 ブロックにつき 1 アカウント 1 トランザクション、そしてバッチ。
- エスクロー:承認者が判断するまでチェーンが預かる支払い。
- マルチシグネチャ:複数の署名でのみ支出するアカウント。
- リキッドペイメント(ストリーム):分単位で受取人へ流れるお金。
- スケジュール送金:一度の署名で行う一連の支払い。
- トリガーとアテステーション:ある高さで、またはイベントの後に放出されるお金。
- アカウントグループ:1 つのアカウントを共有する多数のアドレス。
関連項目
このトピックの記事
- 1 ブロックにつき 1 アカウント 1 トランザクション、そしてバッチ
ZooBC のブロックが各アカウントからのトランザクションを 1 つしか運べない理由と、バッチによって 1 つのアカウントが 1 つのトランザクションで複数の支払いや転送を行う方法を説明します。 - アカウントグループ
ZooBC のアカウントグループによって、任意の鍵タイプの多数のアドレスが 1 つの残高を共有し、コントローラーが各メンバーの支出できる額を決める仕組みを説明します。 - エスクロー
ZooBC の支払いを、指定された承認者が判断するまでチェーンが預かる仕組みを説明します。4 つの結末、その費用、そして受取人が発行するエスクローのリクエストです。 - スケジュール送金
1 つの ZooBC の ScheduledTransfer が、ZBC またはトークンでの一連の支払いを、最初にロックするか期日に引き落とす形で設定する仕組みと、それを取り消したり振り向けたりする方法を説明します。 - トランザクションのエンベロープ
ZooBC のすべてのトランザクションが運ぶフィールドを順に示し、それぞれが何を持つか、そしてガスリミットやチェーン ID など、意図的に存在しないものを説明します。 - トランザクションへの署名
ZooBC の署名が何を対象にしているか、トランザクションのハッシュと ID がどう導かれるか、どの鍵タイプが署名できるか、そして外部のウォレットが自分のチェーンのトランザクションにどう署名するかを説明します。 - トリガーとアテステーション
ZooBC のトリガーが、将来のブロック高や外部世界のイベントまで ZBC をロックする仕組みと、登録済みノードがアテステーションによってイベントを確定させる方法を説明します。 - マルチシグネチャ
ZooBC のマルチシグネチャアカウントが、参加者のうち決められた数が署名したときにだけ支出する仕組みを説明します。参加者が異なるチェーンの鍵を使っていてもかまいません。 - リキッドペイメント(ストリーム)
ZooBC のリキッドペイメントが ZBC またはトークンを指定した分数をかけて受取人へ流す仕組みと、どちらの側も公平な分配でそれを止められる仕組みを説明します。 - 有効期限とタイムスタンプ
ZooBC のすべてのトランザクションが自身の時刻を持つ理由、それがどれだけ有効であり続けるか(既定で 1 時間、最大 1 日)、そしてブロックと決済が時刻をどう使うかを説明します。