本頁面為社群翻譯版本,僅供參考;內容以英文原版為準。
查看英文原版 ↗

HIP-4 部署者操作

僅測試網

概述

爲確保市場高質量且定義明確,驗證者對結果模板進行投票,HIP-4 部署者以這些模板作爲無許可部署的基礎。模板固定了規範的顯示文本結構、側邊名稱以及類型化關鍵字集合。

部署沒有 Gas 成本。容量則受每個部署者的限額約束(見"限額")。

操作格式

部署涉及以下操作:

{ "type": "activateOutcomeDeployer", "activate": { "venueName": <venue> } }
{ "type": "activateOutcomeDeployer", "deactivate": null }
{ "type": "outcomeDeploy", "venue": <venue>, "operation": { "<variant>": { ...variant fields... } } }
  • 結果和問題通過創建時分配的數字索引引用,例如 "outcome": 7。
  • 場所:每個 outcomeDeploy 操作都攜帶必填的頂層 venue 欄位,必須爲部署者的場所名稱(類似 HIP-3 部署者操作上的 dex 欄位)。子部署者操作傳遞其所代表的部署者的場所,且結算必須針對該場所部署者的結果和問題。
  • 場所名稱:2–4 個小寫 ASCII 字母,遵循與 HIP-3 永續 DEX 名稱相同的規則。該名稱必須在所有部署者的場所名稱中唯一——包括已停用者(其名稱繼續保留)——且不得與現有永續 DEX 名稱(或 spot)相同。反之,已註冊的場所名稱不能被後續的永續 DEX 部署佔用。
  • 與 HIP-3 一樣,所有元組列表在籤名前應按字典序排序
  • keywordToValue 是一個已排序的元組列表,將每個模板關鍵字映射到其值。例如 [["expiry","20260801-0600"],["target","100"],["underlying","ABC"]]。
  • 名稱和描述的值是二元陣列:["<name>", "<description>"]。
  • sideNames 陣列爲 ["<YES side name>", "<NO side name>"]。
  • 金額和結算比例是十進制字串("1"、"0.25")。

激活

activateOutcomeDeployer 是一個枚舉,包含 activate 和 deactivate 兩個變體:

{ "type": "activateOutcomeDeployer", "activate": { "venueName": "ab" } }
{ "type": "activateOutcomeDeployer", "deactivate": null }
  • 質押要求:活躍的部署者在其作爲結果部署者期間必須持續滿足質押要求。該要求與部署者的其他質押要求疊加。例如,計入 HIP-3 部署的質押不會重複計入結果部署。
  • 部署者必須使用 Standard 帳戶抽象。

停用要求最低部署者質押時長(183 天)已屆滿,且部署者沒有活躍的結果。停用是永久的:帳戶無法再次激活,其場所名稱繼續保留。

模板

每個由部署者創建的市場都來自模板。模板具有以下三種角色之一:

  • 獨立結果:部署單個 YES/NO 市場;模板固定側邊名稱。
  • 問題:部署一個問題(即容器)。
  • 問題結果:部署問題的一個結果;每個問題結果模板聲明其父問題模板,且實例化僅在該父模板下被接受。

模板固定了包含 {keyword} 佔位符的顯示名稱與描述文本(例如 "{underlying} above {target} at {expiry}"),以及每個關鍵字的類型化 hint。每次實例化爲每個關鍵字提供恰好一個值。

模板元數據包含 semanticRestriction 欄位,大致定義了從該模板實例化的市場的預期語義。與模板語義限制相矛盾的市場被視爲格式錯誤,可被驗證者罰沒。

按 hint 類型劃分的關鍵字值格式:

Hint 值格式
dateTime UTC 時間 %Y%m%d-%H%M,例如 "20260712-1830";必須在未來一年之內
date UTC 日期 YYYYMMDD,例如 "20260712"(當天結束時);必須在未來一年之內
string 自由文本
shortString 最多 10 個字符的自由文本
hlPerp 現有永續合約的幣名,例如 "ABC" 或 "test:ABC"
uInt 可容納於 u64 的非負整數,例如 "250"(不帶符號或前導零)
uDecimal 非負小數,例如 "0.5" 或 "250"(不帶符號、指數或前導/尾隨零)

值最多 100 個字符,且不能包含 {、} 或 |(允許 :,例如用於 HIP-3 幣名)。

插值後的顯示文本(代入值後的模板文本)同樣有上限:獨立結果與問題的名稱最多 70 個字符,問題結果的名稱最多 25 個字符,獨立結果的側邊名稱最多 10 個字符。

鏈上的結果描述派生自實例化:

  • 名稱:template:<template_id>,例如 template:aaa。template: 前綴是保留的,只有模板部署可以產生。名稱最多 100 個字符。
  • 描述:按關鍵字排序的鍵值對,以 keyword:value|keyword:value 連接,例如 expiry:20260801-0600|target:100|underlying:BTC。描述最多 2000 個字符。
  • 側邊名稱:獨立結果爲 template: 加上模板的側邊名稱(例如 template:Over / template:Under);問題結果使用預設值 Yes / No。
  • 問題兜底:名稱爲 template fallback,描述爲 other,側邊名稱爲 Yes / No。

部署者費率比例

模板實例(registerStandaloneOutcomeFromTemplate 以及 registerQuestionFromTemplate 中的 questionTemplateInstance)必須攜帶 deployerFeeScale,即 [0, 10] 範圍內的十進制字串(Deployer fee scale cannot be negative or greater than 10.)。

  • 交易該結果市場的用戶支付基準結果交易費率乘以 scale + max(scale, 1):scale 部分歸部署者,其餘歸協議。若爲 "0",用戶支付基準費率,部署者不獲得任何費用。結果市場永不支付 Maker 返還。
  • 問題的 scale 統一適用於其兜底結果和每一個問題結果,包括後續關聯的結果;問題結果模板實例自身不攜帶 scale。
  • 每個結果的 scale 在 outcomeMeta info 請求中返回。

示例,以用戶基準結果交易費率的倍數表示:

deployerFeeScale 用戶總費用 部署者獲得 協議獲得
"1" 2x 1x 1x
"3" 6x 3x 3x
"10" 20x 10x 10x
"0.5" 1.5x 0.5x 1x
"0.25" 1.25x 0.25x 1x
"0" 1x 0x 1x

Builder codes

Builder Code 的賣出訂單行爲與現貨一致。Builder Code 也可應用於結果訂單的買入訂單,同樣以計價代幣計收。這些 builder 費用由協議盡力收取。Builder 接口在計算最大訂單規模時可以驗證計價代幣餘額是否充足。

操作參考

registerStandaloneOutcomeFromTemplate

從獨立結果模板部署一個獨立的 YES/NO 市場。

{
  "type": "outcomeDeploy",
  "venue": "ab",
  "operation": {
    "registerStandaloneOutcomeFromTemplate": {
      "id": "abc",
      "keywordToValue": [
        ["expiry", "20260801-0600"],
        ["target", "100"],
        ["underlying", "ABC"]
      ],
      "deployerFeeScale": "1"
    }
  }
}

registerQuestionFromTemplate

在一個操作中部署一個問題及其問題結果。

{
  "type": "outcomeDeploy",
  "venue": "ab",
  "operation": {
    "registerQuestionFromTemplate": {
      "questionTemplateInstance": {
        "id": "abc",
        "keywordToValue": [["expiry", "20260801-1830"]],
        "deployerFeeScale": "1"
      },
      "namedOutcomeTemplateInstances": [
        { "id": "abc-outcome", "keywordToValue": [["choice", "A"]] },
        { "id": "abc-outcome", "keywordToValue": [["choice", "B"]] },
        { "id": "abc-other", "keywordToValue": [] }
      ]
    }
  }
}
  • 每個問題結果模板必須聲明該問題模板爲其父模板。同一問題結果模板可以用不同的值實例化多次。
  • 具有 N 個問題結果的問題會註冊 N + 1 個結果(兜底結果自動創建)。全部計入部署者的活躍結果上限。
  • 可以使用 registerAndAssociateNamedOutcomeFromTemplate 向已上線的問題添加更多問題結果。每個問題最多 100 個問題結果。

registerAndAssociateNamedOutcomeFromTemplate

向部署者的已上線問題添加一個問題結果。

{
  "type": "outcomeDeploy",
  "venue": "ab",
  "operation": {
    "registerAndAssociateNamedOutcomeFromTemplate": {
      "question": 3,
      "namedOutcomeTemplateInstance": { "id": "abc-outcome", "keywordToValue": [["choice", "C"]] }
    }
  }
}
  • 該問題必須已由模板部署,且問題結果模板必須聲明該問題的模板爲其父模板。
  • 新結果繼承該問題的 deployerFeeScale,並計入部署者的活躍結果上限和每日上限。
  • 問題兜底 YES 代幣的持有者將獲得等量的新結果 YES 代幣餘額,因此現有的"其他"頭寸含義保持不變。

settleOutcome

結算部署者的一個結果。

{
  "type": "outcomeDeploy",
  "venue": "ab",
  "operation": {
    "settleOutcome": {
      "outcome": 7,
      "settleFraction": "1",
      "details": "",
      "nameAndDescription": ["template:abc", "expiry:20260801-0600|target:100|underlying:ABC"],
      "sideNames": ["template:Over", "template:Under"]
    }
  }
}
  • nameAndDescription 和 sideNames 必須與被結算的結果完全一致。
  • settleFraction 是 [0, 1] 範圍內的小數。獨立結果可以結算爲任意比例(例如標量賠付用 "0.66");屬於某個問題的結果必須恰好結算爲 "0" 或 "1"。
  • details 必須爲空。
  • 對於問題結果,結算是順序進行的:問題結果可以按任意順序結算爲 "0"。當某個結果成爲最後一個活躍的問題結果時,它結算爲 "1",同時自動將兜底結果結算爲 0 並結算該問題。

settleQuestion2

在一個操作中結算一個問題的所有剩餘問題結果。注意:原始的 settleQuestion 變體已停用。

{
  "type": "outcomeDeploy",
  "venue": "ab",
  "operation": {
    "settleQuestion2": {
      "question": 3,
      "outcomeSettlements": [
        {
          "outcome": 11,
          "settleFraction": "1",
          "details": "",
          "nameAndDescription": ["template:abc-outcome", "choice:A"],
          "sideNames": ["Yes", "No"]
        },
        {
          "outcome": 12,
          "settleFraction": "0",
          "details": "",
          "nameAndDescription": ["template:abc-outcome", "choice:B"],
          "sideNames": ["Yes", "No"]
        }
      ],
      "nameAndDescription": ["template:abc", "expiry:20260801-1830"]
    }
  }
}
  • outcomeSettlements 必須恰好覆蓋該問題剩餘的活躍問題結果,其中恰好一個結算爲 "1",其餘全部結算爲 "0"。兜底結果自動結算爲 0。

setSubDeployers

授予或撤銷子部署者權限。

{
  "type": "outcomeDeploy",
  "venue": "ab",
  "operation": {
    "setSubDeployers": [
      { "variant": "registerStandaloneOutcomeFromTemplate", "user": "0xSUB_DEPLOYER", "allowed": true },
      { "variant": "settleOutcome", "user": "0xSUB_DEPLOYER", "allowed": true },
      { "variant": "settleQuestion", "user": "0xFORMER_OPERATOR", "allowed": false }
    ]
  }
}
  • 被授予某個變體的子部署者可以代表部署者發送該操作:註冊在部署者的場所下創建並計入部署者的限額,且結算只能針對部署者自己的結果和問題。
  • variant 是 registerStandaloneOutcomeFromTemplate、registerQuestionFromTemplate、registerAndAssociateNamedOutcomeFromTemplate、settleOutcome 或 settleQuestion 之一。settleQuestion 授權可用於 settleQuestion2 操作。
  • allowed 用於將該用戶加入或移出該變體的授權集合。

讀取 API

  • {"type": "outcomeMeta"} info 請求包含非空的結果部署者。
  • {"type": "outcomeTemplates"} info 請求返回所有模板。

限額

  • 每個部署者最多 N 個活躍結果(測試網 N=10)。結算結果可釋放容量。
  • 部署者每天最多可部署 M 個結果(測試網 M=50)。
非官方社群鏡像與翻譯,內容版權歸 Hyperliquid 所有,以英文原版為準。 來源: https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/hip-4-deployer-actions