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 在
outcomeMetainfo 請求中返回。
示例,以用戶基準結果交易費率的倍數表示:
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)。