トリガーとアテステーション
トリガーとは、チェーンが預かる条件付きの支払いです。ZBC を今ロックし、条件が満たされたときに後で受取人へ放出します。条件は、ブロック高か、試合の結果など、登録済みノードがアテステーションによって確認する外部世界のイベントのどちらかです。トリガーによって、コントラクトのコードなしに、時間ロック、遅延した贈り物、現実世界の結果に応じた支払いが可能になります。
トリガーの作成
CreateTrigger トランザクション(タイプ 15)は、受取人、金額、条件を示します。トリガーが運べるのは ZBC だけです。条件には 2 種類あります。
- 高さのトリガーは、未来のブロック高を指定します。ブロックは 15 秒ごとに作られるため、高さは日付のように働きます。1 日先は 5,760 ブロックです。
- イベントのトリガーは、イベント ID を指定し、登録済みノードがそのイベントを確定させたときに発動します。それまで、または取り消されるまで保留のままです。発動の高さも運びますが、それは使われません。
金額は直ちに作成者の残高から出ていき、ロックされます。トリガーが発動するまでは、作成者は CancelTrigger(タイプ 16)でお金を取り戻すことができます。トリガーは一度だけ支払います。スクリプトを実行することはなく、繰り返すこともありません。
アテステーション:イベントの確定の仕方
ブロックチェーンは、それだけでは外部の世界を読み取れません。すべてのノードがウェブページを取得したら、異なる答えを見て意見が分かれるかもしれません。ZooBC は代わりにアテステーションを使います。
- 登録済みノードが、イベント ID と値(それぞれ最大 4,096 バイト)を運ぶ AttestEvent(タイプ 17)を送ります。
- 各ノードはイベントごとに 1 票を持ち、新しいアテステーションは古いものを置き換えます。数えられるのは登録済みノードからのアテステーションだけです。
- 各ブロックの終わりに、チェーンは未確定の各イベントのアテステーションを集計します。アクティブなレジストリの 3 分の 2(たとえば 11 席のうち 8 席)がまったく同じ値をアテステーションすると、その値がイベントの結果として最終的に確定します。
- 同じブロックで、そのイベントを指定する保留中のトリガーがすべて、その受取人に支払います。
アテステーションは手数料のかからない義務です。手数料をちょうど 0 と申告し、ノード自身のアカウントから送られます(手数料 を参照)。レジストリが席数および異なるオーナー数の下限 max(3, min_registry_size)、つまり mainnet では 7 を下回っている間は、レジストリ全体の決定は何も確定しません(3 分の 2 ルール を参照)。
予約されたイベント ID
同じアテステーションが、イベント ID の予約されたプレフィックスの下で、ネットワークの他の決定も運びます。それぞれはトリガーの手順ではなく、独自の手順で確定されます。
| プレフィックス | 用途 |
|---|---|
ZBRDEP1: | ブリッジへの入金(ブリッジとラップドコイン を参照) |
ZBWDR1: | ブリッジからの出金 |
ZBCGOV1: | ガバナンス |
ZBCREL1: | リリースに関する投票(リリースとアップデート を参照) |
他の機能との組み合わせ
- トリガーの支払いは受け取る入金なので、受取人の分配ポリシーを通ります(分配ポリシーと取引ポリシー を参照)。
- 受取人の取引ポリシーが確認されるのは CreateTrigger 自体についてだけです。受取人が後から支払いの受け取りを拒否する設定にしても、放出された支払いは届きます。
- 取引ポリシーにおいて、AttestEvent は Bridge のカテゴリーに属します。
繰り返す支払いについては スケジュール送金 を、1 分ごとに権利が確定していくお金については リキッドペイメント(ストリーム) を参照してください。