> ## 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">不在枚舉集合裡的 payload——在驗證階段被拒，不是執行期</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>

參與者或驗證者能做的每一件事，都屬於一組固定的、帶型別的操作：

| 分組        | 操作                                                               |
| --------- | ---------------------------------------------------------------- |
| **訂單**    | 下單、撤單、替換與改單——涵蓋限價、市價和條件單形式，帶訂單有效期、只減倉，以及關聯的停利／停損（TP/SL）結構        |
| **帳戶配置**  | 子帳戶建立、槓桿選擇、保證金模式、部位模式                                            |
| **轉帳**    | 子帳戶之間、帳戶之間，以及透過[跨鏈橋](/zh-Hant/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">一個區塊，六個階段</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">只存續一個區塊</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>

保證金要求、強平價格、減倉對象選擇、手續費和未平倉合約量上限，都由公式決定，而這些公式實作成**純的、無狀態的函式**：接受輸入值、回傳結果，既不讀取也不修改帳本狀態。

狀態變更完全由[清算所](/zh-Hant/protocol/architecture/clearinghouse)驅動：清算所呼叫這些函式，並把結果落到狀態上。持有狀態的模組——帳戶、部位、訂單簿——存放資料並暴露修改方法，但自身不驅動業務流程。

這是一條刻意劃出的邊界：一次保證金計算可以脫離環境，對著一張輸入輸出表單獨核對；任何人的餘額要變動，也有且只有一條程式碼路徑。

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

執行產出狀態寫入和事件，每一項都綁定到引起它的那筆交易；此外還有一條通道，容納不屬於任何單筆使用者交易的系統級影響：資金費、保險基金變動、區塊計數器。這些構成交易輸出，由[狀態層](/zh-Hant/protocol/architecture/state/model)提交、由[索引器](/zh-Hant/protocol/architecture/indexer)對外提供。

內核裡發生的任何事，下游都看得見。只要動到了狀態，就會出現在某個人的輸出裡，或者出現在系統通道裡。

<h2 id="where-to-go-next">
  後續閱讀
</h2>

<CardGroup cols={2}>
  <Card title="撮合" href="/zh-Hant/protocol/architecture/matching">
    訂單簿、價格優先與時間優先，以及訂單有效期和自成交防護如何在其上生效。
  </Card>

  <Card title="清算所" href="/zh-Hant/protocol/architecture/clearinghouse">
    餘額、部位與保證金發生變化的唯一路徑。
  </Card>

  <Card title="狀態模型" href="/zh-Hant/protocol/architecture/state/model">
    內核的輸出一旦提交，會變成什麼。
  </Card>

  <Card title="IntentionBFT" href="/zh-Hant/protocol/architecture/intention-bft">
    順序和價格是從哪裡來的。
  </Card>
</CardGroup>
