> ## Documentation Index
> Fetch the complete documentation index at: https://docs.intention.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# IntentionKernel

> コンセンサスで確定したブロックに対し、金融操作の閉じた命令セットを固定された段階の連なりとして実行する実行レイヤーです。

IntentionKernelは、コミット済みブロックが取引状態に変わる場所です。任意のプログラムを実行する汎用仮想マシンではありません。その命令セットはデリバティブ取引所に必要な金融操作を列挙したものであり、そのひとつひとつに、プロトコルが理解する定義済みの効果があります。

この違いこそが、ネットワークが取引について何かを主張できる理由です。汎用チェーンが言えるのは、トランザクションが署名されていて中断しなかった、ということだけです。そのトランザクションが板の特定の位置にある特定の注文の取り消しだった、とは言えません。呼び出しの意味がチェーンからは見えないからです。ここでは、意味そのものが命令です。

<h2 id="closed-world-execution">
  クローズドワールド実行
</h2>

命令セットを閉じることは、カーネルが四度くり返す同じ動作の一例にすぎません。いずれの場合も、起こりうることの空間があらかじめ列挙され、その外にあるものは処理されるのではなく拒まれます。

<div className="dg" data-dg="kernel-closure">
  <div className="dg-c" style={{aspectRatio:"720 / 384"}}>
    <svg className="dg-w" viewBox="0 0 720 384" aria-hidden="true" />

    <div className="dg-b dg--blue" style={{left:"0.0000%",top:"7.8125%",width:"20.8333%",height:"17.1875%"}}><span className="dg-t">操作</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"22.5000%",top:"7.8125%",width:"41.6667%",height:"17.1875%"}}><span className="dg-s">列挙された集合に属さないペイロード。実行時ではなく検証時に拒否されます</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"65.8333%",top:"7.8125%",width:"34.1667%",height:"17.1875%"}}><span className="dg-s dg-ink--blue">何が要求されたのか</span></div>
    <div className="dg-b dg--sky" style={{left:"0.0000%",top:"28.1250%",width:"20.8333%",height:"17.1875%"}}><span className="dg-t">真</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"22.5000%",top:"28.1250%",width:"41.6667%",height:"17.1875%"}}><span className="dg-s">ブロック単位の作業セットを権威とみなすこと。あれはジャーナルであり、情報源はエンジン状態です</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"65.8333%",top:"28.1250%",width:"34.1667%",height:"17.1875%"}}><span className="dg-s dg-ink--sky">いま何が真か</span></div>
    <div className="dg-b dg--yellow" style={{left:"0.0000%",top:"48.4375%",width:"20.8333%",height:"17.1875%"}}><span className="dg-t">入力</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"22.5000%",top:"48.4375%",width:"41.6667%",height:"17.1875%"}}><span className="dg-s">二台の機械で異なりうるもの一切：ウォールクロック、エントロピー、浮動小数点、ハッシュ順</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"65.8333%",top:"48.4375%",width:"34.1667%",height:"17.1875%"}}><span className="dg-s dg-ink--yellow">別のノードでも同じバイト列になるか</span></div>
    <div className="dg-b dg--green" style={{left:"0.0000%",top:"68.7500%",width:"20.8333%",height:"17.1875%"}}><span className="dg-t">因果</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"22.5000%",top:"68.7500%",width:"41.6667%",height:"17.1875%"}}><span className="dg-s">持ち主のない状態変化。どのユーザー取引にも属さない効果は、免除ではなくシステムチャネルを通ります</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"65.8333%",top:"68.7500%",width:"34.1667%",height:"17.1875%"}}><span className="dg-s dg-ink--green">なぜこの変化が起きたのか</span></div>
    <div className="dg-free" style={{left:"0.0000%",top:"0.0000%",width:"20.8333%"}}><div className="dg-n">閉じるもの</div></div>
    <div className="dg-free" style={{left:"22.5000%",top:"0.0000%",width:"41.6667%"}}><div className="dg-n">拒むもの</div></div>
    <div className="dg-free" style={{left:"65.8333%",top:"0.0000%",width:"34.1667%"}}><div className="dg-n">だから台帳が答えられること</div></div>
    <div className="dg-free" style={{left:"0.0000%",top:"89.0625%",width:"100.0000%"}}><div className="dg-n">四つの閉包、動作はひとつ。起こりうることを前もって列挙し、外にあるものを拒む。</div></div>
  </div>
</div>

これは独立した四つの美点ではありません。それぞれが次を支えています。操作を閉じるから命令の*意味*が復元でき、権威ある状態がひとつだからこそ「結果」という語が定義でき、入力を閉じるからその結果が別の機械でも再現でき、因果を閉じるから結果をそれを生んだ要求まで遡れます。どれか一つを外せば、説明責任の連鎖はそこで切れます。

四つが合わせて買っているものには名前をつける価値があります。伝統的な取引所は同じものをはるかに高い費用で買っているからです。取引所の監査証跡は取引システムの**傍らで**組み立てられ、外部へ報告されます。だからこそシステムと食い違いうるのであり、突合が常設の仕事になり、取引所間の時計同期が実装上の都合ではなく規制要件になります。ここには突合すべき二つ目の記録がありません。監査証跡が実行そのものです。

このページの残りは、その四つの閉包の詳細です。

<h2 id="the-instruction-set">
  命令セット
</h2>

参加者やバリデータにできることは、型付けされた固定の操作集合のいずれかです。

| 分類           | 操作                                                                            |
| ------------ | ----------------------------------------------------------------------------- |
| **注文**       | 発注、取り消し、差し替え、変更。指値・成行・条件付きの各形式にわたり、有効期間、リデュースオンリー、連動するテイクプロフィット / ストップロス構造を伴う |
| **アカウント設定**  | サブアカウントの作成、レバレッジの選択、証拠金モード、ポジションモード                                           |
| **送金**       | サブアカウント間、アカウント間、および[ブリッジ](/ja/protocol/architecture/bridge)経由の入出金             |
| **エージェント承認** | アカウントに代わって取引するエージェントの承認と取り消し                                                  |
| **ヴォールト操作**  | 作成、預け入れ、引き出し、設定                                                               |
| **システム設定**   | マーケットの上場、手数料設定、レバレッジティア、リスクパラメータ。ガバナンスによって承認される                               |
| **バリデータ発行**  | 認証済み価格の更新と再構成                                                                 |

ペイロードがこの集合に属さないトランザクションは、検証の段階で拒否されます。この集合が変わるのはプロトコルのアップグレードによってのみであり、何かを新しくデプロイして変わることはありません。

<h2 id="executing-a-block">
  ブロックの実行
</h2>

実行は固定された段階の連なりです。この順序は実装上の詳細ではありません。強制決済がそれを引き起こした価格を見るかどうか、取り消しが到来するテイカー注文に勝つかどうかを決めるのが、この順序です。

<div className="dg" data-dg="kernel-stages">
  <div className="dg-c" style={{aspectRatio:"720 / 434"}}>
    <svg className="dg-w" viewBox="0 0 720 434" aria-hidden="true">
      <path className="dg-wire" d="M 150.00 69.33 L 150.00 80.93" />

      <path className="dg-head" d="M 150.00 87.33 L 145.60 80.93 L 154.40 80.93 Z" />

      <path className="dg-wire" d="M 150.00 130.67 L 150.00 142.27" />

      <path className="dg-head" d="M 150.00 148.67 L 145.60 142.27 L 154.40 142.27 Z" />

      <path className="dg-wire" d="M 150.00 192.00 L 150.00 203.60" />

      <path className="dg-head" d="M 150.00 210.00 L 145.60 203.60 L 154.40 203.60 Z" />

      <path className="dg-wire" d="M 150.00 253.33 L 150.00 264.93" />

      <path className="dg-head" d="M 150.00 271.33 L 145.60 264.93 L 154.40 264.93 Z" />

      <path className="dg-wire" d="M 150.00 314.67 L 150.00 326.27" />

      <path className="dg-head" d="M 150.00 332.67 L 145.60 326.27 L 154.40 326.27 Z" />
    </svg>

    <div className="dg-b dg--sky" style={{left:"0.0000%",top:"6.9124%",width:"41.6667%",height:"8.1413%"}}><span className="dg-t">価格</span><span className="dg-s">ブロックのマークを固定</span></div>
    <div className="dg-b dg--sky" style={{left:"0.0000%",top:"21.0445%",width:"41.6667%",height:"8.1413%"}}><span className="dg-t">ロード</span><span className="dg-s">ブロックのアカウントと注文を取り込み</span></div>
    <div className="dg-b dg--sky" style={{left:"0.0000%",top:"35.1767%",width:"41.6667%",height:"8.1413%"}}><span className="dg-t">資金調達ステージ</span><span className="dg-s">資金調達フローを決済</span></div>
    <div className="dg-b dg--orange" style={{left:"0.0000%",top:"49.3088%",width:"41.6667%",height:"8.1413%"}}><span className="dg-t">リスク</span><span className="dg-s">ヴォールトのデレバレッジ → 強制決済 → ADL</span></div>
    <div className="dg-b dg--blue" style={{left:"0.0000%",top:"63.4409%",width:"41.6667%",height:"8.1413%"}}><span className="dg-t">マッチング</span><span className="dg-s">事前処理 → マッチング → 事後処理</span></div>
    <div className="dg-b dg--green" style={{left:"0.0000%",top:"77.5730%",width:"41.6667%",height:"8.1413%"}}><span className="dg-t">ファイナライズ</span><span className="dg-s">出力を収集、不要な状態を破棄</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"45.8333%",top:"6.9124%",width:"54.1667%",height:"8.1413%"}}><span className="dg-s">下流のすべてのステージが、動く価格ではなく銘柄ごとにひとつの価格で判断する</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"45.8333%",top:"35.1767%",width:"54.1667%",height:"8.1413%"}}><span className="dg-s">決済の対象はロード時点のポジション、最終状態ではない</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"45.8333%",top:"49.3088%",width:"54.1667%",height:"8.1413%"}}><span className="dg-s">新しい裁量的なフローを受け入れる前に、強制的なフローを解消</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"45.8333%",top:"63.4409%",width:"54.1667%",height:"8.1413%"}}><span className="dg-s">リスクの後に走るからこそ、同じブロックの注文で強制決済をフロントランできない</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"45.8333%",top:"77.5730%",width:"54.1667%",height:"8.1413%"}}><span className="dg-s">ゼロになったポジションと空のアカウントは残らない</span></div>
    <div className="dg-free" style={{left:"0.0000%",top:"0.0000%",width:"41.6667%"}}><div className="dg-n">1ブロック、六つのステージ</div></div>
    <div className="dg-free" style={{left:"45.8333%",top:"0.0000%",width:"54.1667%"}}><div className="dg-n">この位置が決めること</div></div>
    <div className="dg-free" style={{left:"0.0000%",top:"89.4009%",width:"100.0000%"}}><div className="dg-n">条件付き注文はこの連なりの中で走査され、進められます。このブロックのマークで発火したトリガーは、次のブロックではなくこのブロックで効力を持ちます。</div></div>
  </div>
</div>

**価格**が最初に走り、ブロックの残りが使うマークを固定します。これにより下流のすべてのステージは、動く価格ではなく銘柄ごとにひとつの価格に基づいて判断します。**ロード**はブロックのアカウントと注文を取り込みます。**資金調達ステージ**は、ロードされた時点のポジションに対して資金調達の決済を行います。**リスク**は三つのフェーズを順に走らせます。ヴォールトのデレバレッジ、次に強制決済、次に自動デレバレッジです。新しい裁量的なフローを受け入れる前に、強制的なフローを解消するためです。続いて**マッチング**が自身の三つのフェーズを走らせ、約定を生み出します。**ファイナライズ**は変更点を収集し、ゼロになったポジションや空になったアカウントなど、もはや存在する必要のない状態を破棄します。

条件付き注文はこの連なりの中で走査され、ライフサイクルを進められます。そのため、このブロックのマークによって発火したトリガーは、次のブロックではなくこのブロックで効力を持ちます。

<Note>
  強制決済がマッチングより先に走ることが、同じブロック内の注文で強制決済をフロントランできない理由です。裁量的な注文がマッチングされる時点で、強制決済のフローはすでに解消されています。
</Note>

<h2 id="two-kinds-of-state">
  二種類の状態
</h2>

カーネルは、永続するものと一時的なものを厳密に分けています。

<div className="dg" data-dg="kernel-state">
  <div className="dg-c" style={{aspectRatio:"720 / 300"}}>
    <svg className="dg-w" viewBox="0 0 720 300" aria-hidden="true">
      <path className="dg-wire dg--blue" d="M 195.00 104.00 L 254.60 104.00" />

      <path className="dg-head dg--blue" d="M 261.00 104.00 L 254.60 108.40 L 254.60 99.60 Z" />

      <path className="dg-wire dg--yellow" d="M 261.00 152.00 L 201.40 152.00" />

      <path className="dg-head dg--yellow" d="M 195.00 152.00 L 201.40 147.60 L 201.40 156.40 Z" />

      <path className="dg-wire dg--green" d="M 449.00 128.00 L 498.60 128.00" />

      <path className="dg-head dg--green" d="M 505.00 128.00 L 498.60 132.40 L 498.60 123.60 Z" />

      <path className="dg-wire dg--green dg-dash" d="M 615.00 177.00 L 615.00 232.00 L 95.00 232.00 L 95.00 183.40" />

      <path className="dg-head dg--green" d="M 95.00 177.00 L 99.40 183.40 L 90.60 183.40 Z" />
    </svg>

    <div className="dg-band" style={{left:"34.7222%",top:"18.6667%",width:"29.1667%",height:"46.6667%"}}><span className="dg-cap">ブロック実行中</span></div>
    <div className="dg-b dg--blue" style={{left:"0.0000%",top:"26.6667%",width:"26.3889%",height:"30.6667%"}}><span className="dg-t">エンジン状態</span><span className="dg-s">マーケット · アカウント · 板 · ポジション · クリアリングハウス</span><span className="dg-n">ブロックをまたいで存続</span></div>
    <div className="dg-b dg--yellow dg-dashed" style={{left:"36.9444%",top:"26.6667%",width:"24.7222%",height:"30.6667%"}}><span className="dg-t">ブロックワーキングセット</span><span className="dg-s">マーク · 触れたアカウント · 約定 · 準備中の出力</span><span className="dg-n">1ブロックだけ存在</span></div>
    <div className="dg-b dg--green" style={{left:"70.8333%",top:"26.6667%",width:"29.1667%",height:"30.6667%"}}><span className="dg-t">コミット済みチェーン状態</span><span className="dg-s">バージョン付き · 認証済み</span><span className="dg-n">正本</span></div>
    <div className="dg-free" style={{left:"0.0000%",top:"87.3333%",width:"100.0000%"}}><div className="dg-n">変更追跡は正本と取り違えやすいものです。ブロック中の変更は決定的な出力を組み立てるためのもので、状態が置かれている場所ではありません。</div></div>
    <div className="dg-lbl" style={{left:"49.3056%",top:"77.3333%"}}>エンジンを再構成する元になる正本</div>
    <div className="dg-lbl" style={{left:"31.6667%",top:"30.0000%"}}>読み取り</div>
    <div className="dg-lbl" style={{left:"31.6667%",top:"55.3333%"}}>適用</div>
    <div className="dg-lbl" style={{left:"66.2500%",top:"37.3333%"}}>具体化</div>
  </div>
</div>

**エンジン状態**はブロックをまたいで存続します。マーケットのメタデータ、アカウント、板、銘柄の状態、クリアリングハウスの状態です。「いま何が真か」に対する答えがこれです。

**ブロックごとのワーキングセット**は、ブロックが実行されている間だけ存在します。ブロックの入力、開始時に固定されたマーク、触れたアカウントと注文、組み立て中の出力です。これはジャーナルであって、真実の源ではありません。

この区別が重要なのは、変更追跡を正本と取り違えやすいからです。ブロック中に何が変わったかは決定的な出力を組み立てるために使うものであって、状態が置かれている場所ではありません。これを逆にすると、答えが問い方に依存するシステムができあがります。

<h2 id="why-the-result-is-reproducible">
  結果が再現できる理由
</h2>

ここでの決定性は、期待ではなく強制です。同じ事前状態に対して同じブロックを実行する正直なノードは、どれもバイト単位で同じ結果を出します。実行経路上のどこからも、ノードごとに異なるものを読めないからです。

* **全面的に固定小数点演算**。決済の計算は、丸めの意味を明示した整数固定小数点で走ります。証拠金では負の指数で切り上げ、手数料では切り捨てと切り上げを使います。決済経路上に浮動小数点はありません。二台のマシンの間で丸めが食い違えば、それはフォークだからです。
* **実時間を使わない**。ブロック内の順序づけには、コンセンサスがコミットした正規の位置とブロックのタイムスタンプを使い、ローカル時刻は決して使いません。
* **実行時の乱数を使わない**。乱数が必要なものは、チェーン状態から決定的に導出します。
* **決定的な反復**。反復順序が出力に現れるコレクションは、ハッシュでランダム化せず順序づけます。

ひとつ挙げておく価値のある帰結があります。ブロック内の「時間」がコミットされたブロック内位置である以上、ブロックの*内側*にはミリ秒未満のコロケーション優位が存在しません。優先順位スケジュールは、取り消しをテイカー注文の発注より先に走らせます。これと合わせて、同じブロックに到着した注文に板の気配を抜き取られることへの構造的な防御になります。

<h2 id="risk-formulas-are-pure">
  リスク計算式は純粋関数
</h2>

必要証拠金、強制決済価格、デレバレッジ対象の選定、手数料、建玉上限を決める計算式は、**純粋なステートレス関数**として実装されています。値を受け取って値を返すだけで、台帳の状態を読むことも書き換えることもありません。

状態の変更を駆動するのは[クリアリングハウス](/ja/protocol/architecture/clearinghouse)だけです。クリアリングハウスがこれらの関数を呼び、結果を適用します。状態を保持するモジュール（アカウント、ポジション、板）は、データを保存し変更操作を公開しますが、業務フローそのものを駆動することはありません。

これは意図的に引いた境界です。証拠金の計算を、入力と出力の表に対して単独で検証できるということであり、誰かの残高が変わりうるコード経路がちょうどひとつしかない、ということでもあります。

<h2 id="output">
  出力
</h2>

実行は状態の書き込みとイベントを生み、そのそれぞれが原因となったトランザクションに結び付きます。加えて、どの単一ユーザートランザクションにも属さないシステムレベルの効果（資金調達フロー、保険基金の移動、ブロックカウンタ）のためのチャネルがあります。これらが、[ステートレイヤー](/ja/protocol/architecture/state/model)がコミットし[インデクサー](/ja/protocol/architecture/indexer)が提供するトランザクション出力になります。

カーネルの内部で起きたことで、下流から見えないものはありません。状態を変えたのであれば、それは誰かの出力かシステムチャネルのどちらかにあります。

<h2 id="where-to-go-next">
  次に読む
</h2>

<CardGroup cols={2}>
  <Card title="マッチング" href="/ja/protocol/architecture/matching">
    板、価格時間優先、有効期間とセルフトレード防止がどう解決されるのかです。
  </Card>

  <Card title="クリアリングハウス" href="/ja/protocol/architecture/clearinghouse">
    残高、ポジション、証拠金が変わる唯一の経路です。
  </Card>

  <Card title="ステートモデル" href="/ja/protocol/architecture/state/model">
    カーネルの出力がコミットされたあと何になるのかです。
  </Card>

  <Card title="IntentionBFT" href="/ja/protocol/architecture/intention-bft">
    順序と価格がどこから来たのかです。
  </Card>
</CardGroup>
