本页面为社区翻译版本,仅供参考;内容以英文原版为准。
查看英文原版 ↗

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