> ## 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/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/protocol/architecture/clearinghouse)驱动：清算所调用这些函数，并把结果落到状态上。持有状态的模块——账户、仓位、订单簿——存放数据并暴露修改方法，但自身不驱动业务流程。

这是一条刻意划出的边界。它意味着一次保证金计算可以脱离环境、对着一张输入输出表单独核对；也意味着任何人的余额要发生变化，有且只有一条代码路径。

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

执行产出状态写入和事件，每一项都绑定到引起它的那笔交易；此外还有一条通道，容纳不属于任何单笔用户交易的系统级影响——资金费、保险基金变动、区块计数器。这些构成交易输出，由[状态层](/zh/protocol/architecture/state/model)提交、由[索引器](/zh/protocol/architecture/indexer)对外提供。

内核里发生的事，下游没有看不见的。只要动了状态，它就出现在某个人的输出里，或者出现在系统通道里。

<h2 id="where-to-go-next">
  后续阅读
</h2>

<CardGroup cols={2}>
  <Card title="撮合" href="/zh/protocol/architecture/matching">
    订单簿、价格-时间优先，以及订单有效期和自成交防护如何在其上生效。
  </Card>

  <Card title="清算所" href="/zh/protocol/architecture/clearinghouse">
    余额、仓位与保证金发生变化的唯一路径。
  </Card>

  <Card title="状态模型" href="/zh/protocol/architecture/state/model">
    内核的输出一旦被提交，会变成什么。
  </Card>

  <Card title="IntentionBFT" href="/zh/protocol/architecture/intention-bft">
    顺序和价格是从哪里来的。
  </Card>
</CardGroup>
