> ## 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.

# 自己验一遍

> 五项检查，把这套架构的主张变成你自己就能了结的东西——其中两项完全不需要联网。

这些页面反复给出四条主张：一次保证金计算可以脱离环境验证、任何人都能重算一次自动减仓的选择、资金费是推导出来的而不是定出来的、两个诚实节点会产出逐字节相同的结果。这种形状的主张，在协议之外有人真的跑过一遍之前，一文不值。

这一页讲的就是怎么跑。每一项检查都写明需要哪些输入、输入从哪来，以及同样重要的：它*不能*证明什么。

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

    <div className="dg-band" style={{left:"0.0000%",top:"7.2581%",width:"30.9259%",height:"72.5806%"}}><span className="dg-cap">只需算术</span></div>
    <div className="dg-band" style={{left:"34.5370%",top:"7.2581%",width:"30.9259%",height:"72.5806%"}}><span className="dg-cap">公开数据，任一节点</span></div>
    <div className="dg-band" style={{left:"69.0741%",top:"7.2581%",width:"30.9259%",height:"72.5806%"}}><span className="dg-cap">你自己的全节点</span></div>
    <div className="dg-b dg--blue" style={{left:"2.2222%",top:"18.5484%",width:"26.4815%",height:"22.5806%"}}><span className="dg-t">一次保证金要求</span></div>
    <div className="dg-b dg--blue" style={{left:"2.2222%",top:"45.9677%",width:"26.4815%",height:"22.5806%"}}><span className="dg-t">一个强平价格</span></div>
    <div className="dg-b dg--orange" style={{left:"36.7593%",top:"18.5484%",width:"26.4815%",height:"22.5806%"}}><span className="dg-t">一次 ADL 选择</span></div>
    <div className="dg-b dg--orange" style={{left:"36.7593%",top:"45.9677%",width:"26.4815%",height:"22.5806%"}}><span className="dg-t">一笔资金费</span></div>
    <div className="dg-b dg--green" style={{left:"71.2963%",top:"32.2581%",width:"26.4815%",height:"22.5806%"}}><span className="dg-t">一个区块，逐字节</span></div>
    <div className="dg-free dg-mid" style={{left:"0.0000%",top:"83.0645%",width:"100.0000%"}}><div className="dg-n">五项里有两项完全不需要联网：这些公式是对公开档位记录的纯函数。</div></div>
  </div>
</div>

<h2 id="1-a-margin-requirement">
  1 · 一次保证金要求
</h2>

**你需要什么：** 一份杠杆档位记录，加一个仓位规模。没有别的了。不需要节点，不需要联网，也不需要账户。

起始保证金和维持保证金都是名义价值与档位记录的纯函数，公式和确切的舍入规则见[杠杆](/zh/trading/leverage)：

$$
\text{起始保证金} = \text{名义价值} \times \text{im\_leverage} \times 10^{\text{exponent}}
$$

$$
\text{维持保证金} = \max\!\left(\text{名义价值} \times \text{mm\_leverage} \times 10^{\text{exponent}} - \text{扣减项},\; 0\right)
$$

档位记录发布在 [API 参考](https://testnet-openapi.intention.xyz/)的 **DEX Config** 分组里——`im_leverage`、`mm_leverage`、共用的 `exponent`，以及每档的 `deduction`。挑一个名义价值，在纸上把两个式子算出来，再跟场所对同一个仓位实际收的数对一下。

**它证明了什么：** 这个要求是公开参数的一个公开函数，不是逐账户的判断。 **它没有证明什么：** 档位记录本身定得好不好。那是治理问题，不是算术问题。

<Note>
  舍入是规范的一部分，不是容差。如果你的整数和场所的差一个单位，那么两者之中必有一个是错的——先看[清算所](/zh/protocol/architecture/clearinghouse)那页的舍入规则，再判断错的是哪一个。
</Note>

<h2 id="2-a-liquidation-price">
  2 · 一个强平价格
</h2>

**你需要什么：** 同一份档位记录，加上你的余额和仓位。

阈值是一个比率，定义见[强平](/zh/trading/liquidations)：

$$
\text{占用率} = \frac{\text{维持保证金}}{\text{净保证金资产}}
$$

净保证金资产是余额加未实现盈亏，再减去挂单已经预留的部分。解出这个比率达到触发点时的标记价，你就拿到了协议将会动手的那个价格——在它动手之前。

**它证明了什么：** 触发点可以提前从你自己的数字里推出来。 **它没有证明什么：** 你实际会被平在什么价。那取决于那一刻的订单簿，并以破产价格为界。

<h2 id="3-an-auto-deleveraging-selection">
  3 · 一次自动减仓的选择
</h2>

**你需要什么：** 某个市场的未平仓仓位和标记价，从任何一个全节点都能取。

选择依据是一个分数，定义见[自动减仓](/zh/trading/adl)：

$$
\text{排序分} = \text{未实现盈利百分比} \times \text{有效杠杆}
$$

从 **Accounts** 分组取某个市场的仓位，从 **Oracle** 分组取认证价格，对盈利那一侧的每个仓位算出分数，然后排序。这个顺序就是队列。把你算出来的队首跟界面上显示的 ADL 指示灯比一比。

**它证明了什么：** 队列是公开状态的函数。没有人在挑，队列里也不存在你自己的算术找不到的仓位。 **它没有证明什么：** 减仓不会轮到你。一个你能算出来的队列，仍然是一个你可能身在其中的队列。

<h2 id="4-a-funding-payment">
  4 · 一笔资金费
</h2>

**你需要什么：** 结算那一轮的订单簿和认证指数价，加上你的仓位。

费率在[资金费率](/zh/trading/funding)里分三步搭出来——深度加权溢价，按该市场的结算间隔缩放，再钳制：

$$
P = \frac{\max(0,\; \text{深度加权买价} - \text{指数价格}) \;-\; \max(0,\; \text{指数价格} - \text{深度加权卖价})}{\text{指数价格}}
$$

$$
F = F_{8h} \times \frac{\text{周期秒数}}{28{,}800}
\qquad
F_{\text{final}} = \operatorname{clamp}\!\left(F,\; F_{\min},\; F_{\max}\right)
$$

然后是这笔费用本身：

$$
\text{资金费} = \text{仓位数量} \times \text{标记价格} \times \text{资金费率}
$$

订单簿来自 **Markets** 分组，认证指数来自 **Oracle**，协议实际扣的那笔钱来自 **Accounts** 分组里的资金费支付接口。重算一遍，对一下。

**它证明了什么：** 费率是从订单簿和指数推导出来的，不是运营方定的。 **它没有证明什么：** 指数本身是对的。见[预言机保证什么、不保证什么](/zh/protocol/architecture/oracle)。

<h2 id="5-a-block-byte-for-byte">
  5 · 一个区块，逐字节
</h2>

**你需要什么：** 一个你自己的全节点。任何人都可以跑一个——见[运行节点](/zh/developers/run-a-node)。

<Note>
  这是本页唯一目前还跑不了的检查。在公开访问开放之前，网络运行在一个[私有测试网](/zh/protocol/architecture/network-status)上，所以前四项现在就能跑，这一项到那时才能跑。把它列在这里，是因为另外四项的价值全部压在它上面。
</Note>

其余四项都压在这一项上。取一个已提交的区块和它的前置状态，执行一遍，把你的结果和网络的比对。这里的确定性是被强制的，不是被指望的：执行路径读不到墙钟、运行时熵、浮点数，也读不到哈希随机化的迭代顺序，所以出现分歧就是缺陷，不是容差。见[为什么结果是可复现的](/zh/protocol/architecture/kernel)。

有两条性质让这件事是真的检验而不是走过场。定序是共识提交的对象，所以你重放的次序是法定人数签过名的那一份，不是你的节点自己推断出来的。而价格由同一批签名提交，所以不存在一个窗口，能让你对着网络没有认证过的价格去重放。

**它证明了什么：** 你被喂到的状态，是按已公布的规则、在网络提交过的输入上产出的。 **它没有证明什么：** 规则本身没有缺陷。逐字节复现一个 bug，复现出来的仍然是那个 bug——这正是[审计](/zh/protocol/security/audits)和[漏洞赏金](/zh/protocol/security/bug-bounty)要和这件事并存的原因。

<h2 id="what-none-of-it-covers">
  这些都覆盖不到的部分
</h2>

验证为「必须交给信任的东西」封顶，但它消不掉信任。剩下的部分——验证者集合、价格法定人数、治理对参数的触及范围，以及跨链桥——列在[信任假设](/zh/protocol/architecture/trust)那一页。如果你来这里是想找边界而不是找保证，下一页就读那个。

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

<CardGroup cols={2}>
  <Card title="信任假设" href="/zh/protocol/architecture/trust">
    所有能查的都查完之后，还剩下什么。
  </Card>

  <Card title="运行节点" href="/zh/developers/run-a-node">
    硬件、同步，以及一个验证者实际在跑什么。
  </Card>

  <Card title="IntentionKernel" href="/zh/protocol/architecture/kernel">
    让重放这件事有意义的那四重封闭。
  </Card>

  <Card title="API 参考" href="https://testnet-openapi.intention.xyz/">
    上面点到的每一项输入的字段级细节。
  </Card>
</CardGroup>
