Skip to main content
IntentionKernelは、コミット済みブロックが取引状態に変わる場所です。任意のプログラムを実行する汎用仮想マシンではありません。その命令セットはデリバティブ取引所に必要な金融操作を列挙したものであり、そのひとつひとつに、プロトコルが理解する定義済みの効果があります。 この違いこそが、ネットワークが取引について何かを主張できる理由です。汎用チェーンが言えるのは、トランザクションが署名されていて中断しなかった、ということだけです。そのトランザクションが板の特定の位置にある特定の注文の取り消しだった、とは言えません。呼び出しの意味がチェーンからは見えないからです。ここでは、意味そのものが命令です。

クローズドワールド実行

命令セットを閉じることは、カーネルが四度くり返す同じ動作の一例にすぎません。いずれの場合も、起こりうることの空間があらかじめ列挙され、その外にあるものは処理されるのではなく拒まれます。
操作
列挙された集合に属さないペイロード。実行時ではなく検証時に拒否されます
何が要求されたのか
真
ブロック単位の作業セットを権威とみなすこと。あれはジャーナルであり、情報源はエンジン状態です
いま何が真か
入力
二台の機械で異なりうるもの一切:ウォールクロック、エントロピー、浮動小数点、ハッシュ順
別のノードでも同じバイト列になるか
因果
持ち主のない状態変化。どのユーザー取引にも属さない効果は、免除ではなくシステムチャネルを通ります
なぜこの変化が起きたのか
閉じるもの
拒むもの
だから台帳が答えられること
四つの閉包、動作はひとつ。起こりうることを前もって列挙し、外にあるものを拒む。
これは独立した四つの美点ではありません。それぞれが次を支えています。操作を閉じるから命令の意味が復元でき、権威ある状態がひとつだからこそ「結果」という語が定義でき、入力を閉じるからその結果が別の機械でも再現でき、因果を閉じるから結果をそれを生んだ要求まで遡れます。どれか一つを外せば、説明責任の連鎖はそこで切れます。 四つが合わせて買っているものには名前をつける価値があります。伝統的な取引所は同じものをはるかに高い費用で買っているからです。取引所の監査証跡は取引システムの傍らで組み立てられ、外部へ報告されます。だからこそシステムと食い違いうるのであり、突合が常設の仕事になり、取引所間の時計同期が実装上の都合ではなく規制要件になります。ここには突合すべき二つ目の記録がありません。監査証跡が実行そのものです。 このページの残りは、その四つの閉包の詳細です。

命令セット

参加者やバリデータにできることは、型付けされた固定の操作集合のいずれかです。 ペイロードがこの集合に属さないトランザクションは、検証の段階で拒否されます。この集合が変わるのはプロトコルのアップグレードによってのみであり、何かを新しくデプロイして変わることはありません。

ブロックの実行

実行は固定された段階の連なりです。この順序は実装上の詳細ではありません。強制決済がそれを引き起こした価格を見るかどうか、取り消しが到来するテイカー注文に勝つかどうかを決めるのが、この順序です。
価格ブロックのマークを固定
ロードブロックのアカウントと注文を取り込み
資金調達ステージ資金調達フローを決済
リスクヴォールトのデレバレッジ → 強制決済 → ADL
マッチング事前処理 → マッチング → 事後処理
ファイナライズ出力を収集、不要な状態を破棄
下流のすべてのステージが、動く価格ではなく銘柄ごとにひとつの価格で判断する
決済の対象はロード時点のポジション、最終状態ではない
新しい裁量的なフローを受け入れる前に、強制的なフローを解消
リスクの後に走るからこそ、同じブロックの注文で強制決済をフロントランできない
ゼロになったポジションと空のアカウントは残らない
1ブロック、六つのステージ
この位置が決めること
条件付き注文はこの連なりの中で走査され、進められます。このブロックのマークで発火したトリガーは、次のブロックではなくこのブロックで効力を持ちます。
価格が最初に走り、ブロックの残りが使うマークを固定します。これにより下流のすべてのステージは、動く価格ではなく銘柄ごとにひとつの価格に基づいて判断します。ロードはブロックのアカウントと注文を取り込みます。資金調達ステージは、ロードされた時点のポジションに対して資金調達の決済を行います。リスクは三つのフェーズを順に走らせます。ヴォールトのデレバレッジ、次に強制決済、次に自動デレバレッジです。新しい裁量的なフローを受け入れる前に、強制的なフローを解消するためです。続いてマッチングが自身の三つのフェーズを走らせ、約定を生み出します。ファイナライズは変更点を収集し、ゼロになったポジションや空になったアカウントなど、もはや存在する必要のない状態を破棄します。 条件付き注文はこの連なりの中で走査され、ライフサイクルを進められます。そのため、このブロックのマークによって発火したトリガーは、次のブロックではなくこのブロックで効力を持ちます。
強制決済がマッチングより先に走ることが、同じブロック内の注文で強制決済をフロントランできない理由です。裁量的な注文がマッチングされる時点で、強制決済のフローはすでに解消されています。

二種類の状態

カーネルは、永続するものと一時的なものを厳密に分けています。
ブロック実行中
エンジン状態マーケット · アカウント · 板 · ポジション · クリアリングハウスブロックをまたいで存続
ブロックワーキングセットマーク · 触れたアカウント · 約定 · 準備中の出力1ブロックだけ存在
コミット済みチェーン状態バージョン付き · 認証済み正本
変更追跡は正本と取り違えやすいものです。ブロック中の変更は決定的な出力を組み立てるためのもので、状態が置かれている場所ではありません。
エンジンを再構成する元になる正本
読み取り
適用
具体化
エンジン状態はブロックをまたいで存続します。マーケットのメタデータ、アカウント、板、銘柄の状態、クリアリングハウスの状態です。「いま何が真か」に対する答えがこれです。 ブロックごとのワーキングセットは、ブロックが実行されている間だけ存在します。ブロックの入力、開始時に固定されたマーク、触れたアカウントと注文、組み立て中の出力です。これはジャーナルであって、真実の源ではありません。 この区別が重要なのは、変更追跡を正本と取り違えやすいからです。ブロック中に何が変わったかは決定的な出力を組み立てるために使うものであって、状態が置かれている場所ではありません。これを逆にすると、答えが問い方に依存するシステムができあがります。

結果が再現できる理由

ここでの決定性は、期待ではなく強制です。同じ事前状態に対して同じブロックを実行する正直なノードは、どれもバイト単位で同じ結果を出します。実行経路上のどこからも、ノードごとに異なるものを読めないからです。
  • 全面的に固定小数点演算。決済の計算は、丸めの意味を明示した整数固定小数点で走ります。証拠金では負の指数で切り上げ、手数料では切り捨てと切り上げを使います。決済経路上に浮動小数点はありません。二台のマシンの間で丸めが食い違えば、それはフォークだからです。
  • 実時間を使わない。ブロック内の順序づけには、コンセンサスがコミットした正規の位置とブロックのタイムスタンプを使い、ローカル時刻は決して使いません。
  • 実行時の乱数を使わない。乱数が必要なものは、チェーン状態から決定的に導出します。
  • 決定的な反復。反復順序が出力に現れるコレクションは、ハッシュでランダム化せず順序づけます。
ひとつ挙げておく価値のある帰結があります。ブロック内の「時間」がコミットされたブロック内位置である以上、ブロックの内側にはミリ秒未満のコロケーション優位が存在しません。優先順位スケジュールは、取り消しをテイカー注文の発注より先に走らせます。これと合わせて、同じブロックに到着した注文に板の気配を抜き取られることへの構造的な防御になります。

リスク計算式は純粋関数

必要証拠金、強制決済価格、デレバレッジ対象の選定、手数料、建玉上限を決める計算式は、純粋なステートレス関数として実装されています。値を受け取って値を返すだけで、台帳の状態を読むことも書き換えることもありません。 状態の変更を駆動するのはクリアリングハウスだけです。クリアリングハウスがこれらの関数を呼び、結果を適用します。状態を保持するモジュール(アカウント、ポジション、板)は、データを保存し変更操作を公開しますが、業務フローそのものを駆動することはありません。 これは意図的に引いた境界です。証拠金の計算を、入力と出力の表に対して単独で検証できるということであり、誰かの残高が変わりうるコード経路がちょうどひとつしかない、ということでもあります。

出力

実行は状態の書き込みとイベントを生み、そのそれぞれが原因となったトランザクションに結び付きます。加えて、どの単一ユーザートランザクションにも属さないシステムレベルの効果(資金調達フロー、保険基金の移動、ブロックカウンタ)のためのチャネルがあります。これらが、ステートレイヤーがコミットしインデクサーが提供するトランザクション出力になります。 カーネルの内部で起きたことで、下流から見えないものはありません。状態を変えたのであれば、それは誰かの出力かシステムチャネルのどちらかにあります。

次に読む

マッチング

板、価格時間優先、有効期間とセルフトレード防止がどう解決されるのかです。

クリアリングハウス

残高、ポジション、証拠金が変わる唯一の経路です。

ステートモデル

カーネルの出力がコミットされたあと何になるのかです。

IntentionBFT

順序と価格がどこから来たのかです。