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

# 規則變更

> 交易規則、風險參數與協議行為如何變更：通知期、生效區塊高度，以及為什麼已過去區塊的規則永遠無法被改寫。

會觸及運行中網路的變更有三類：**參數變更**（某個風險限額、某張費率表、某個資金費率上限）、**行為變更**（執行本身如何運作），以及**市場變更**（[上市與退市](/zh-Hant/programs/listings)）。

三者的公告方式不同，但共享一個性質，而這個性質才是關鍵：變更在鏈上歷史的**某個具體位置**生效，該位置之前的歷史不受影響。

<h2 id="parameter-changes">
  參數變更
</h2>

風險參數、槓桿級距、資金費率上限、部位限額和費率表都是鏈上配置。改動其中任何一項，都是一筆在區塊中執行的協議交易，排在[區塊優先級](/zh-Hant/trading/tx-sequencing)的最前面。

取值本身就是鏈上狀態，所以變更是看得到的，不必靠人通報。某個市場的維持保證金變了，你不需要別人告訴你：現在是多少可以讀出來，過去任一區塊是多少也可以讀出來。

配置鍵還帶有**版本**。某個取值變的若是結構而不是數字，新結構就寫在新鍵之下，舊鍵仍然可讀。用戶端即時解析配置，就能跨越這次變更繼續工作；把鍵路徑寫死的用戶端則會立刻發現問題，不會悄悄讀到過時的東西。參見[狀態模型](/zh-Hant/protocol/architecture/state/model)。

<h2 id="behavioral-changes">
  行為變更
</h2>

改變執行的**行為**，比改一個數字更難，因為每個驗證者都必須在完全相同的時刻做出這一改變。變更若在不同節點上於不同時間生效，那不是分階段發布，那是分叉。

Intention 用**鏈上開關**（gate）來處理這件事。每個開關就是一個存放區塊高度的狀態鍵：新行為從這個高度開始生效。

<div className="dg" data-dg="gated-change">
  <div className="dg-c" style={{aspectRatio:"720 / 250"}}>
    <svg className="dg-w" viewBox="0 0 720 250" aria-hidden="true">
      <path className="dg-wire" d="M 163.00 43.00 L 176.60 43.00" />

      <path className="dg-head" d="M 183.00 43.00 L 176.60 47.40 L 176.60 38.60 Z" />

      <path className="dg-wire" d="M 350.00 43.00 L 363.60 43.00" />

      <path className="dg-head" d="M 370.00 43.00 L 363.60 47.40 L 363.60 38.60 Z" />

      <path className="dg-wire" d="M 537.00 43.00 L 550.60 43.00" />

      <path className="dg-head" d="M 557.00 43.00 L 550.60 47.40 L 550.60 38.60 Z" />
    </svg>

    <div className="dg-b dg--sky" style={{left:"0.0000%",top:"0.0000%",width:"22.0833%",height:"34.4000%"}}><span className="dg-t">新行為靜默發布</span><span className="dg-s">已在程式裡，但未啟用</span></div>
    <div className="dg-b dg--blue" style={{left:"25.9722%",top:"0.0000%",width:"22.0833%",height:"34.4000%"}}><span className="dg-t">寫入一個開關</span><span className="dg-s">一個存放未來區塊高度的狀態鍵</span></div>
    <div className="dg-b dg--blue" style={{left:"51.9444%",top:"0.0000%",width:"22.0833%",height:"34.4000%"}}><span className="dg-t">所有驗證者讀到同一個高度</span></div>
    <div className="dg-b dg--green" style={{left:"77.9167%",top:"0.0000%",width:"22.0833%",height:"34.4000%"}}><span className="dg-t">行為在該區塊精確切換</span></div>
    <div className="dg-b dg-dashed dg-left" style={{left:"0.0000%",top:"49.6000%",width:"31.8519%",height:"46.4000%"}}><span className="dg-t">該高度必須在未來</span><span className="dg-s">開關不能設成已經過去的高度。光是這一條規則，就保證了變更的同時性。</span></div>
    <div className="dg-b dg-dashed dg-left" style={{left:"34.0741%",top:"49.6000%",width:"31.8519%",height:"46.4000%"}}><span className="dg-t">開關不存在即為未啟用</span><span className="dg-s">重放歷史的節點在那些高度上讀不到這個鍵，於是走舊路徑；歷史重放的正確性因此不必靠相容性矩陣。</span></div>
    <div className="dg-b dg-dashed dg-left" style={{left:"68.1481%",top:"49.6000%",width:"31.8519%",height:"46.4000%"}}><span className="dg-t">在正在執行的版本上讀取</span><span className="dg-s">絕不從快取讀。重放舊區塊時去讀當前值，等於把今天的規則套用到昨天的歷史上。</span></div>
  </div>
</div>

由此得出三個性質，每一個都是承重的：

**寫入時該高度必須在未來。** 開關不能設成已經過去的高度。光是這一條規則就保證了變更的同時性：每個驗證者走到那個區塊，看到的都是同一個已經存在的鍵。

**開關不存在即為未啟用。** 重放歷史的節點在那些高度上讀不到這個鍵，於是走的正是舊程式碼路徑。歷史重放的正確性是免費得到的，不需要誰去維護一張相容性矩陣。

**開關要在正在執行的那個版本上讀取，絕不從快取讀。** 重放舊區塊時去讀當前值，等於把今天的規則套用到昨天的歷史上，會算出一個不同的狀態根。所以取值一律從正在執行的那個區塊的執行視圖中讀。

同樣的機制也支援逐步啟用：旗標可以先以未啟用狀態引入，用真實流量驗證，再在預定高度打開，不必當成一次性的二進位升級整體上線。

<h2 id="notice-periods">
  通知期
</h2>

通知期多長，看這項變更可能對你手上的部位造成多大影響。

| 變更類型                             | 通知              |
| -------------------------------- | --------------- |
| **影響已開部位**——保證金要求、槓桿級距、資金費率上限、退市 | 在生效日期之前公告，並寫明日期 |
| **影響串接**——API 介面、訊息結構、鍵佈局        | 提前公告，並給出遷移路徑    |
| **僅影響成本**——費率表、手續費回饋級距           | 在生效日期之前公告       |
| **修正一項正在發生的風險**——為因應市場狀況而收緊的參數   | 可能立即生效          |

最後一行是真實的例外，不是漏洞。部位限額若必須等一週才能收緊，那恰恰在最需要它的那一週裡毫無作用。真的用到這一條時，變更內容與原因會一併公布。

<Warning>
  保證金要求或槓桿級距一變，你手上部位的強平價格就跟著變。這不會平掉任何東西，也不會單獨通知你。帶著部位跨過一次已公告的風險參數變更，就按新的取值重算你離強平還有多遠，不要用開倉時生效的取值。參見[槓桿](/zh-Hant/trading/leverage)。
</Warning>

<h2 id="what-cannot-change">
  不能改變的東西
</h2>

已經提交的區塊所適用的規則。

每一次規則變更，生效的高度在記錄當下都還在未來，所以重放舊區塊，套用的一定是當時生效的規則。某條規則在過去某個版本是否生效，這個問題只有一個答案，今天問和一年後問，答案一樣。

這比一條公開的政策更強。重點不在於協議**不會**改寫歷史，而在於這套機制根本沒有辦法表示一條「從過去開始生效」的規則。參見[狀態模型](/zh-Hant/protocol/architecture/state/model)。

<h2 id="announcements">
  公告
</h2>

<Note>
  本頁的通知承諾自 **2026 年 9 月 20 日**的公開測試網開始生效。[私有測試網](/zh-Hant/protocol/architecture/network-status)變更參數和行為不會發通知，它存在的目的就是調這些。
</Note>

通知期開始之後，每一次變更都會記入[協議變更日誌](/zh-Hant/protocol/roadmap/changelog)，註明生效日期；上表要求時，還會在該日期之前先行公告。

條目的日期以**變更在網路上生效的時間**為準，而不是公告時間。

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

<CardGroup cols={2}>
  <Card title="協議變更日誌" href="/zh-Hant/protocol/roadmap/changelog">
    已發布內容的帶日期記錄。
  </Card>

  <Card title="上市與退市" href="/zh-Hant/programs/listings">
    市場變更及其通知期。
  </Card>

  <Card title="狀態模型" href="/zh-Hant/protocol/architecture/state/model">
    為什麼配置鍵要帶版本、要即時解析。
  </Card>

  <Card title="槓桿" href="/zh-Hant/trading/leverage">
    風險參數變更對已開部位意味著什麼。
  </Card>
</CardGroup>
