トランザクションのエンベロープ
ZooBC のトランザクションは、タイプにかかわらず、すべて同じ構成の 1 つのバイト列であり、これをエンベロープと呼びます。タイプ固有のデータは本体という 1 つのフィールドに収まり、それ以外のもの(送信者、受取人、手数料、時刻、任意のメッセージ)は 73 のタイプすべてで共通です。エンベロープを知っていれば、どのトランザクションでも読み、価格を求め、確認することができます。
フィールドの順序
| フィールド | サイズ | 備考 | |
|---|---|---|---|
| タイプ | 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 バイト、Ethereum アカウントでは 24 バイトです(アカウントとアドレス を参照)。すべての額はアトミック単位の整数で、1 ZBC は 100,000,000 アトミック単位です。
存在しないもの
ガスリミットはありません。計量すべき仮想マシンがないからです。各タイプは固定されたルールで、その価格は署名前に分かります。チェーン ID のフィールドもありません。代わりに署名がチェーンのジェネシスブロックのハッシュを対象にしています(トランザクションへの署名 を参照)。そしてナンスのフィールドもありません。チェーンは各送信者のナンスを自身の状態の中に保持しています。
バージョン
- バージョン 1 には延命フィールドがありません。
- バージョン 2 は延命フィールドを加えます。
- バージョン 3 はさらに、トランザクションがどれだけ有効であり続けるかを設定する有効期限フィールドを加えます(有効期限とタイムスタンプ を参照)。
延命デポジットを示しているバージョン 1 のトランザクションは拒否され、有効期限を示しているバージョン 1 または 2 のトランザクションも拒否されます。それらのバイト列にはそのための場所がないからです。
延命、本体、エスクロー部分、メッセージ
- 延命は 0 か、少なくとも 10,000,000 アトミック単位(0.1 ZBC)です。通常のプルーニングの後もトランザクションを保存しておくロンジェビティのレコードを開き、決して返金されません(データ保持のための支払い(ロンジェビティ) を参照)。メッセージに外部のチェーンの署名済みトランザクションを運ぶトランザクションは、これを支払うことができません。
- 本体は最大 65,536 バイトを保持し、そのタイプが定める構成になっています。
- エスクロー部分を運べるのは SendZBC と TransferToken だけです。これは支払いを エスクロー に変えます。
- メッセージは、平文の場合はゼロのバイトを含まずに最大 256 バイト、暗号化されている場合(暗号化メッセージは "ZBE1" で始まります)は最大 320 バイト、Ethereum、Solana、Bitcoin の外部のチェーンのネイティブなトランザクションを運ぶ場合は最大 4,096 バイトを保持します。
手数料のフィールド
手数料はアトミック単位で申告され、トランザクションの下限以上でなければなりません。下限は、0.025 ZBC の基本アクション手数料に登録済みノードが投票で決める手数料スケールを掛け、すべての登録済みノードが保持する本体とメッセージのバイト数に対する料金を加えたものです。下限はトランザクションとチェーンのパラメータだけで決まるため、ウォレットは署名前に GET /api/v1/blockchain/estimate-fee で任意のノードにそれを尋ねることができます。
下限を下回る手数料は拒否され、それを運ぶブロックは無効になります。下限を超えて申告した分は同じブロックで支払者に戻ってくるため、誤って多く払いすぎても何も失いません。何も動かさない Empty タイプもゼロより大きい手数料を支払わなければなりませんが、ストレージ証明やイベントのアテステーションなど、登録済みノードがネットワークのために行ういくつかの義務は、手数料をちょうど 0 と申告しなければなりません。式、返金、手数料の行き先については 手数料 で説明しています。