HIP-4 デプロイヤーアクション
テストネット専用
概要
市場の品質と定義の明確さを確保するため、バリデーターは結果テンプレートに投票します。HIP-4 デプロイヤーはこれをパーミッションレス・デプロイの基礎として使用します。テンプレートは、仕様の表示テキストの構造、サイド名、および型付きキーワードの集合を固定します。
デプロイにはガス代はかかりません。代わりに、容量はデプロイヤーごとの制限によって制約されます(「制限」を参照)。
アクションフォーマット
デプロイには以下のアクションが関わります:
{ "type": "activateOutcomeDeployer", "activate": { "venueName": <venue> } }
{ "type": "activateOutcomeDeployer", "deactivate": null }
{ "type": "outcomeDeploy", "venue": <venue>, "operation": { "<variant>": { ...variant fields... } } }
- アウトカムとクエスチョンは、作成時に割り当てられた数値インデックスで参照されます(例:
"outcome": 7)。 - Venue: すべての
outcomeDeployアクションは必須のトップレベルvenueフィールドを持ち、それはデプロイヤーの venue 名でなければなりません(HIP-3 デプロイヤーアクションのdexフィールドと同様)。サブデプロイヤーアクションは、彼らが代理として行動するデプロイヤーの venue を渡し、決済はその venue のデプロイヤーのアウトカムとクエスチョンを対象としなければなりません。 - Venue 名: 2〜4 文字の小文字 ASCII 文字で、HIP-3 の永続契約 DEX 名と同じルールに従います。この名前は、無効化されたデプロイヤー(その名前は予約されたまま)を含むすべてのデプロイヤーの venue 名全体で一意でなければならず、既存の永続契約 DEX 名(および
spot)と一致してはなりません。逆に、登録済みの venue 名を後の永続契約 DEX デプロイが取得することはできません。 - HIP-3 と同様に、タプルのリストはすべて署名前に辞書式順序でソートする必要があります
keywordToValueは、各テンプレートキーワードをその値にマッピングするソート済みタプルのリストです。例:[["expiry","20260801-0600"],["target","100"],["underlying","ABC"]]。- 名前と説明の値は 2 要素配列です:
["<name>", "<description>"]。 sideNames配列は["<YES side name>", "<NO side name>"]です。- 金額と決済分数は 10 進文字列です(
"1"、"0.25")。
有効化
activateOutcomeDeployer は activate と deactivate のバリアントを持つ列挙型です:
{ "type": "activateOutcomeDeployer", "activate": { "venueName": "ab" } }
{ "type": "activateOutcomeDeployer", "deactivate": null }
- ステーキング要件: 有効なデプロイヤーは、結果デプロイヤーであり続ける限り、ステーキング要件を維持しなければなりません。要件は、デプロイヤーの他のステーキング要件と累積されます。例えば、HIP-3 デプロイにカウントされるステークは、結果デプロイには二重にカウントされません。
- デプロイヤーは Standard アカウントアブストラクションを使用する必要があります。
無効化(deactivation)には、最小デプロイヤーステーキング期間(183 日)が経過しており、かつデプロイヤーに有効なアウトカムがないことが必要です。無効化は恒久的です: アカウントは再び有効化できず、その venue 名は予約されたままとなります。
テンプレート
デプロイヤーが作成するすべての市場はテンプレートから生まれます。テンプレートには 3 つの役割のいずれかがあります:
- スタンドアロンアウトカム: 単一の YES/NO 市場をデプロイします。テンプレートがサイド名を固定します。
- クエスチョン: クエスチョン(コンテナ)をデプロイします。
- クエスチョンアウトカム: クエスチョンの 1 つのアウトカムをデプロイします。各クエスチョンアウトカムテンプレートはその親クエスチョンテンプレートを宣言し、インスタンス化はその親の下でのみ受け付けられます。
テンプレートは、{keyword} プレースホルダー(例: "{underlying} above {target} at {expiry}")を含む表示名と説明テキスト、およびキーワードごとの型付き hint を固定します。インスタンス化はキーワードごとに exactly 1 つの値を提供します。
テンプレートのメタデータには semanticRestriction フィールドがあり、テンプレートからインスタンス化される市場の意図されたセマンティクスを大まかに定義します。テンプレートのセマンティック制限に矛盾する市場は不正な形式とみなされ、バリデーターによってスラッシュ可能です。
ヒントタイプごとのキーワード値フォーマット:
| Hint | Value format |
|---|---|
dateTime |
UTC time %Y%m%d-%H%M, e.g. "20260712-1830"; must be within the next year |
date |
UTC date YYYYMMDD, e.g. "20260712" (end of day); must be within the next year |
string |
free text |
shortString |
free text of at most 10 characters |
hlPerp |
coin name of an existing perp, e.g. "ABC" or "test:ABC" |
uInt |
nonnegative integer that fits in a u64, e.g. "250" (no sign or leading zeros) |
uDecimal |
nonnegative decimal, e.g. "0.5" or "250" (no sign, exponent, or leading/trailing zeros) |
値は最大 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] の 10 進文字列です(Deployer fee scale cannot be negative or greater than 10.)。
- アウトカムの市場を取引するユーザーは、ベースとなる結果取引手数料率に
scale + max(scale, 1)を掛けたものを支払います:scale成分はデプロイヤーが受け取り、残りはプロトコルが受け取ります。"0"の場合、ユーザーはベース料金を支払い、デプロイヤーは何も受け取りません。アウトカム市場ではメイカーリベートは支払われません。 - クエスチョンのスケールは、そのフォールバックとすべてのクエスチョンアウトカム(後から関連付けられたものを含む)に一律に適用されます。クエスチョンアウトカムテンプレートのインスタンスは自身のスケールを持ちません。
- アウトカムごとのスケールは
outcomeMetainfo リクエストで返されます。
例(ユーザーのベースとなる結果取引手数料率の倍数で表記):
deployerFeeScale |
Total user fee | Deployer receives | Protocol receives |
|---|---|---|---|
"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 codes は売り注文についてはスポットの挙動を継承します。Builder codes はアウトカム注文の買い注文にも適用でき、これもクォートトークンで課金されます。これらのビルダー手数料はプロトコルによってベストエフォートベースで課金されます。ビルダーインターフェースは、最大注文サイズを計算する際に十分なクォートトークン残高を検証する場合があります。
アクションリファレンス
registerStandaloneOutcomeFromTemplate
スタンドアロンアウトカムテンプレートからスタンドアロンの YES/NO 市場をデプロイします。
{
"type": "outcomeDeploy",
"venue": "ab",
"operation": {
"registerStandaloneOutcomeFromTemplate": {
"id": "abc",
"keywordToValue": [
["expiry", "20260801-0600"],
["target", "100"],
["underlying", "ABC"]
],
"deployerFeeScale": "1"
}
}
}
registerQuestionFromTemplate
クエスチョンとそのクエスチョンアウトカムを 1 つのアクションでデプロイします。
{
"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
デプロイヤーの稼働中のクエスチョンに 1 つのクエスチョンアウトカムを追加します。
{
"type": "outcomeDeploy",
"venue": "ab",
"operation": {
"registerAndAssociateNamedOutcomeFromTemplate": {
"question": 3,
"namedOutcomeTemplateInstance": { "id": "abc-outcome", "keywordToValue": [["choice", "C"]] }
}
}
}
- クエスチョンはテンプレートからデプロイされたものでなければならず、クエスチョンアウトカムテンプレートはそのクエスチョンのテンプレートを親として宣言していなければなりません。
- 新しいアウトカムはクエスチョンの
deployerFeeScaleを継承し、デプロイヤーの有効アウトカム上限と日次上限にカウントされます。 - クエスチョンのフォールバック YES トークンの保有者は、新しいアウトカムの YES トークンを同額受け取るため、既存の「other」ポジションはその意味を保ちます。
settleOutcome
デプロイヤーの 1 つのアウトカムを決済します。
{
"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]の 10 進数です。スタンドアロンアウトカムは任意の分数(例: スカラーペイアウトの"0.66")で決済できます。クエスチョンに属するアウトカムは exactly"0"または"1"で決済しなければなりません。detailsは空でなければなりません。- クエスチョンアウトカムの場合、決済は逐次的です: クエスチョンアウトカムは任意の順序で
"0"に決済できます。単一のアウトカムは、それが最後の有効なクエスチョンアウトカムになった後に"1"に決済され、それによりフォールバックが自動的に 0 に決済され、クエスチョンが決済されます。
settleQuestion2
クエスチョンの残りのすべてのクエスチョンアウトカムを 1 つのアクションで決済します。注: 元の 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は、クエスチョンの残りの有効なクエスチョンアウトカムを過不足なくカバーし、exactly 1 つが"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 }
]
}
}
- バリアントを付与されたサブデプロイヤーは、デプロイヤーの代理としてそのアクションを送信できます: 登録はデプロイヤーの venue の下に作成され、デプロイヤーの制限にカウントされ、決済はデプロイヤー自身のアウトカムとクエスチョンのみを対象にできます。
variantはregisterStandaloneOutcomeFromTemplate、registerQuestionFromTemplate、registerAndAssociateNamedOutcomeFromTemplate、settleOutcome、settleQuestionのいずれかです。settleQuestionの付与はsettleQuestion2アクションを認可します。allowedは、そのバリアントの許可セットにユーザーを追加または削除します。
Read API
{"type": "outcomeMeta"}info リクエストには null でない結果デプロイヤーが含まれます。{"type": "outcomeTemplates"}info リクエストはすべてのテンプレートを返します。
制限
- デプロイヤーごとに最大
N個の有効アウトカム(テストネットでは N=10)。アウトカムを決済すると容量が解放されます。 - デプロイヤーは 1 日あたり
M個のアウトカムをデプロイできます(テストネットでは M=50)。