写操作(39 Action)
统一入口:
POST /api/v1/action· JSON-RPC 2.0 · 禁止 batch 所有数值字段在action内走 canonical decimal string(ADR-0026 §D) method 必须与签名 envelope 内 Action tag 一致 生产 Base URL:https://rpc.auroran.io
目录
- 1. 请求格式
- 2. 签名算法
- 3. EIP-712 签名通道
- 4. 响应格式
- 5. 交易
- 6. 批量交易
- 7. 保证金管理
- 8. 清算
- 9. 预言机报价
- 10. 市场管理
- 11. Bridge 充提
- 12. 账户管理
- 13. 手续费与推荐
- 14. 高级订单(触发单 / OCO)
- 15. MarketConfigWire schema
1. 请求格式
{
"jsonrpc": "2.0",
"id": 1,
"method": "PlaceOrder",
"params": {
"envelope": {
"chain_id": 1,
"domain_chain_id": 1,
"action_version": 2,
"nonce": 42,
"signer": "0x1111222233334444555566667777888899990000",
"credential": {
"Secp256k1": {
"signature": [27, 95, 83, 94, "..."]
}
},
"action": {
"PlaceOrder": {
"owner": "0x1111222233334444555566667777888899990000",
"symbol": "BTC-USDT",
"side": "Bid",
"limit_price": "97100.00",
"qty": "1.00000",
"tif": "Gtc",
"client_order_id": "my-cloid-1",
"reduce_only": false
}
}
}
}
}
安全约束:method(JSON-RPC 外层)必须等于 params.envelope.action 的变体名(如 "PlaceOrder"),否则返回 -32602。分发权威永远是签名后的 envelope.action,method 不进签名摘要。
1.1 Action 中的数值格式
所有数值字段在 action 内均使用 canonical decimal string:
| 语义 | 精度 | 示例 |
|---|---|---|
| 价格(limit_price / trigger_price / mark_price 等) | 市场 price_decimals | "97100.00" |
| 数量(qty / amount) | 市场 size_decimals | "1.50000" |
| 余额 / 保证金 / 费率 / 名义值 | SCALE_6 | "5000.000000" |
2. 签名算法
2.1 L1 通道(36 个交易/管理操作)
适用于除 WithdrawRequest / RegisterAgent / RevokeAgent 外的全部 Action。
L1 通道使用 phantom EIP-712 类型 L1Action(string source,bytes32 connectionId)。服务端不生成、不持有 typed data JSON——签名端自行按以下原语重建 digest,再对 digest 做 secp256k1 签名。
所需参数(从节点运维方获取):
| 参数 | 来源 | 说明 |
|---|---|---|
chain_id | ChainConfig.chain_id | 网络标识(如 Mainnet=1, Testnet=2) |
network_tag | ChainConfig.signing_network_tag | L1 phantom 类型的 source 字段(如 "Mainnet") |
nonce | getAccount 查询 | 账户当前 nonce |
action | 业务构造 | Action 对象(externally-tagged JSON) |
Step 1 — msgpack 序列化 action 并计算 connectionId:
msgpack_bytes = rmp_serde::to_vec_named(&action)
connectionId = keccak256(msgpack_bytes || nonce.to_be_bytes(8))
msgpack 编码细节(rmp_serde named-map 模式,确定性保证):
i128→ msgpack integer(定长)Option::None→ msgpacknil- Enum → msgpack map(外部 tag,key=变体名字符串,value=内层 map)
Address20→ 20 字节 bin- String/str → msgpack str
- bool → msgpack bool
- u32/u64 → 对应 msgpack integer
关键:action 序列化必须使用 msgpack(
rmp_serde::to_vec_named),而非 JSON。msgpack canonical 字节即协议,golden 锁定、跨语言可复现。使用 JSON 序列化将导致签名验证失败。
Step 2 — 构建 EIP-712 domain separator:
typeHash_domain = keccak256(b"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)")
domain = keccak256(
typeHash_domain
|| keccak256(b"ZeptoSignTransaction") // enc_string("ZeptoSignTransaction")
|| keccak256(b"1") // enc_string("1")
|| pad32(chain_id.to_be_bytes()) // enc_uint(chain_id)
|| pad32_left([0u8; 20]) // enc_address(0x0000...0000)
)
Step 3 — 构建 L1Action struct hash:
typeHash_l1 = keccak256(b"L1Action(string source,bytes32 connectionId)")
struct_hash = keccak256(
typeHash_l1
|| keccak256(network_tag.as_bytes()) // enc_string(network_tag)
|| connectionId // enc_bytes32(connectionId)
)
Step 4 — EIP-712 最终摘要:
digest = keccak256(0x19 || 0x01 || domain || struct_hash)
Step 5 — 签名:
对 32 字节 digest 做 secp256k1 recoverable 签名(v ∈ {27, 28}),得到 65 字节 [v, r_0..r_31, s_0..s_31]。填入 credential.Secp256k1.signature(JSON 字节数组)。
2.2 EIP-712 通道(3 个敏感操作)
适用于 WithdrawRequest / RegisterAgent / RevokeAgent。详见 §3。
由钱包 eth_signTypedData_v4 直接处理 EIP-712 签名。domain 与 L1 通道相同(ZeptoSignTransaction,chainId=chain_id),但 primary type 和 message 按 Action 不同。签名结果仍是 65 字节 secp256k1,填入 credential.Secp256k1.signature(JSON 字节数组)。
3. EIP-712 签名通道
三种敏感操作走 EIP-712 typed data 签名通道,对标 Hyperliquid 的 hyperliquidChain 模式。钱包通过 eth_signTypedData_v4 对结构化数据进行签名。
3.1 Domain
所有 User-Signed 操作共用同一 EIP-712 domain。chainId 取 domain_chain_id(即用户钱包当前连接的 EVM 网络 ID,如 Ethereum Mainnet=1、BSC=56),确保钱包签名时不报 chainId 不匹配:
{
"types": {
"EIP712Domain": [
{ "name": "name", "type": "string" },
{ "name": "version", "type": "string" },
{ "name": "chainId", "type": "uint256" },
{ "name": "verifyingContract", "type": "address" }
]
},
"domain": {
"name": "ZeptoSignTransaction",
"version": "1",
"chainId": 1,
"verifyingContract": "0x0000000000000000000000000000000000000000"
}
}
| 域字段 | 值 | 说明 |
|---|---|---|
name | "ZeptoSignTransaction" | 固定 |
version | "1" | Domain 版本 |
chainId | ChainConfig.chain_id | Zepto 链 ID |
verifyingContract | 0x0000...0000 | 零地址(链上无验证合约) |
3.2 WithdrawRequest
Primary type: Withdraw(string zeptoChain,address owner,string amount,string chain,uint64 nonce)
| 字段 | 类型 | 说明 |
|---|---|---|
zeptoChain | string | 链标识(如 "Mainnet"),密码学绑定防跨链 |
owner | address | 提现账户地址 |
amount | string | 提现金额 canonical 小数串(SCALE_6,如 "100.500000") |
chain | string | 用户选择的下提目标链(如 "bsc"),密码学绑定防跨链重放 |
nonce | uint64 | 账户 nonce |
{
"types": {
"EIP712Domain": [
{ "name": "name", "type": "string" },
{ "name": "version", "type": "string" },
{ "name": "chainId", "type": "uint256" },
{ "name": "verifyingContract", "type": "address" }
],
"Withdraw": [
{ "name": "zeptoChain", "type": "string" },
{ "name": "owner", "type": "address" },
{ "name": "amount", "type": "string" },
{ "name": "chain", "type": "string" },
{ "name": "nonce", "type": "uint64" }
]
},
"primaryType": "Withdraw",
"domain": {
"name": "ZeptoSignTransaction",
"version": "1",
"chainId": 1,
"verifyingContract": "0x0000000000000000000000000000000000000000"
},
"message": {
"zeptoChain": "Mainnet",
"owner": "0x1111222233334444555566667777888899990000",
"amount": "100.500000",
"chain": "bsc",
"nonce": 42
}
}
3.3 RegisterAgent
Primary type: RegisterAgent(string zeptoChain,address owner,address agentAddress,uint64 roleMask,uint64 expiresAtMs,uint64 nonce)
| 字段 | 类型 | 说明 |
|---|---|---|
zeptoChain | string | 链标识(如 "Mainnet") |
owner | address | Master 账户地址 |
agentAddress | address | 被授权的 secp256k1 API-wallet 地址 |
roleMask | uint64 | 授予 agent 的角色位掩码(1 = Trader) |
expiresAtMs | uint64 | 过期时间(毫秒);0 = 永不过期 |
nonce | uint64 | 账户 nonce |
{
"types": {
"EIP712Domain": [
{ "name": "name", "type": "string" },
{ "name": "version", "type": "string" },
{ "name": "chainId", "type": "uint256" },
{ "name": "verifyingContract", "type": "address" }
],
"RegisterAgent": [
{ "name": "zeptoChain", "type": "string" },
{ "name": "owner", "type": "address" },
{ "name": "agentAddress", "type": "address" },
{ "name": "roleMask", "type": "uint64" },
{ "name": "expiresAtMs", "type": "uint64" },
{ "name": "nonce", "type": "uint64" }
]
},
"primaryType": "RegisterAgent",
"domain": {
"name": "ZeptoSignTransaction",
"version": "1",
"chainId": 1,
"verifyingContract": "0x0000000000000000000000000000000000000000"
},
"message": {
"zeptoChain": "Mainnet",
"owner": "0x1111222233334444555566667777888899990000",
"agentAddress": "0xaaaa111122223333444455556666777788889999",
"roleMask": 1,
"expiresAtMs": 0,
"nonce": 42
}
}
3.4 RevokeAgent
Primary type: RevokeAgent(string zeptoChain,address owner,address agentAddress,uint64 nonce)
| 字段 | 类型 | 说明 |
|---|---|---|
zeptoChain | string | 链标识(如 "Mainnet") |
owner | address | Master 账户地址 |
agentAddress | address | 待撤销的 agent 地址 |
nonce | uint64 | 账户 nonce |
{
"types": {
"EIP712Domain": [
{ "name": "name", "type": "string" },
{ "name": "version", "type": "string" },
{ "name": "chainId", "type": "uint256" },
{ "name": "verifyingContract", "type": "address" }
],
"RevokeAgent": [
{ "name": "zeptoChain", "type": "string" },
{ "name": "owner", "type": "address" },
{ "name": "agentAddress", "type": "address" },
{ "name": "nonce", "type": "uint64" }
]
},
"primaryType": "RevokeAgent",
"domain": {
"name": "ZeptoSignTransaction",
"version": "1",
"chainId": 1,
"verifyingContract": "0x0000000000000000000000000000000000000000"
},
"message": {
"zeptoChain": "Mainnet",
"owner": "0x1111222233334444555566667777888899990000",
"agentAddress": "0xaaaa111122223333444455556666777788889999",
"nonce": 42
}
}
3.5 字段编码约定
| EIP-712 类型 | 编码方式 | 对应 Rust 字段 |
|---|---|---|
string | keccak256(utf8_bytes) | String(zeptoChain、amount) |
address | 左补 12 零字节 → 32 字节 | Address20(owner、agentAddress) |
uint64 | 大端 8 字节,高位补零 → 32 字节 | u64(nonce、roleMask、expiresAtMs) |
4. 响应格式
4.1 成功(accepted)
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"tx_hash": "0xa1b2...",
"height": 12346,
"envelope_idx": 3,
"signer": "0x1111222233334444555566667777888899990000",
"nonce": 42,
"action": { "PlaceOrder": { ... } },
"status": "accepted",
"events": [
{ "seq": 0, "block_height": 12346, "envelope_idx": 3,
"kind": { "Exec": { "OrderAccepted": { "order_id": 1001, "market_id": 1, ... } } } }
]
}
}
4.2 业务拒绝(kept-reject)
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"tx_hash": "0x...",
"height": 12346,
"envelope_idx": 0,
"signer": "0x...", "nonce": 43,
"action": { "PlaceOrder": { ... } },
"status": "kept-reject",
"reason": { "InsufficientBalance": { "required": 5000000000, "have": 3000000000 } },
"events": [{
"kind": { "Core": { "Rejected": { "action_kind": "PlaceOrder", "reason": { "InsufficientBalance": { "required": "5000.000000", "have": "3000.000000" } } } } }
}]
}
}
关键差异:
result.reason中的数值字段为 raw i128(如5000000000),未做 decimal 投影。同一笔交易result.events[]中的对应Rejected事件已经过 ADR-0026 投影为 decimal string(如"5000.000000")。对接方解析reason时须自行按精度转换。
4.3 响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
tx_hash | TxHash | 32 字节 hex,0x 前缀 |
height | u64 | 落块高度 |
envelope_idx | u32 | 块内序号 |
signer | Address20 | 签名者 master 地址 |
nonce | u64 | 本笔交易的 nonce |
action | Value | 原始 Action JSON |
status | TxStatus | "accepted" · "kept-reject" |
reason | RejectReason? | 仅 kept-reject;externally-tagged 枚举,数值为 raw i128 |
events | Value[] | 事件投影(数值字段为 decimal string) |
5. 交易
5.1 PlaceOrder
下单。limit_price 按价格精度、qty 按数量精度。
| 参数 | 类型 | 必填 | 精度 | 说明 |
|---|---|---|---|---|
owner | Address20 | 是 | — | 下单账户地址 |
symbol | String | 是 | — | 交易对名,如 "BTC-USDT" |
side | Side | 是 | — | "Bid" 买 · "Ask" 卖 |
limit_price | String | 是 | px_decimals | 限价(decimal string) |
qty | String | 是 | sz_decimals | 下单数量(decimal string) |
tif | TimeInForce | 是 | — | "Gtc" · "Ioc" · "Fok" · "PostOnly" |
client_order_id | String? | 否 | — | 客户端订单 ID(对账用) |
reduce_only | bool | 是 | — | 仅减仓(不增加净持仓方向) |
expires_at_ms | u64? | 否 | — | GTD 过期时刻(毫秒);null = GTC 长挂 |
杠杆说明:
PlaceOrder不携带杠杆字段。杠杆是仓位的属性,通过SetLeverage设置。
5.2 CancelOrder
撤单。定位方式二选一。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
owner | Address20 | 是 | 挂单账户地址 |
symbol | String | 条件 | cloid 路径必填;order_id 路径可省 |
order_id | u64 | 条件 | 系统订单 ID(与 client_order_id 互斥) |
client_order_id | String | 条件 | 客户端订单 ID(与 order_id 互斥,需同时提供 symbol) |
5.3 AmendOrder
改单。定位方式二选一(order_id / client_order_id)。所有 new_* 字段为选填——仅更新提供的字段。
| 参数 | 类型 | 必填 | 精度 | 说明 |
|---|---|---|---|---|
owner | Address20 | 是 | — | 挂单账户地址 |
symbol | String | 是 | — | 交易对名 |
order_id | u64 | 条件 | — | 系统订单 ID(与 client_order_id 互斥) |
client_order_id | String | 条件 | — | 客户端订单 ID(与 order_id 互斥) |
new_limit_price | String? | 否 | px_decimals | 新限价 |
new_qty | String? | 否 | sz_decimals | 新总数量(含已成交部分) |
new_tif | TimeInForce? | 否 | — | 新 TIF |
new_reduce_only | bool? | 否 | — | 新 reduce_only |
5.4 MassCancel
批量撤单。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
owner | Address20 | 是 | 挂单账户地址 |
symbol | String | 是 | 交易对名 |
scope | MassCancelScope | 是 | 撤销范围:"Owner"(全部) · {"Side":"Bid"}(按方向) · {"Ids":[1,2,3]}(按 ID 列表) |
5.5 ClosePosition
主动平仓(语法糖——构造 reduce_only + Ioc 的 PlaceOrder)。
| 参数 | 类型 | 必填 | 精度 | 说明 |
|---|---|---|---|---|
owner | Address20 | 是 | — | 持仓账户地址 |
symbol | String | 是 | — | 交易对名 |
qty | String? | 否 | sz_decimals | 平仓数量;null = 全平 |
limit_price | String? | 否 | px_decimals | 限价;null = 市价 |
tif | TimeInForce? | 否 | — | TIF;null = Ioc |
client_order_id | String? | 否 | — | 客户端订单 ID |
5.6 ScheduleCancel
Dead-Man-Switch(断线全撤)。设置未来截止时刻,到期且未刷新则全市场全撤。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
owner | Address20 | 是 | 账户地址 |
trigger_time_ms | u64? | 是 | 截止时刻(毫秒);null = 关闭 DMS |
6. 批量交易
6.1 BatchPlaceOrder
一签多单。子项顺序执行、逐条回执,单条失败只回滚该子项并 emit BatchItemRejected。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
orders | PlaceOrderActionWire[] | 是 | 下单列表(每项字段同 PlaceOrder) |
6.2 BatchModify
一签多改单。子项顺序执行、逐条回执。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
modifies | AmendOrderActionWire[] | 是 | 改单列表(每项字段同 AmendOrder) |
7. 保证金管理
7.1 SetLeverage
设置某市场的杠杆倍数。修改后自动重算所有保证金,不足则拒。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
owner | Address20 | 是 | 账户地址 |
symbol | String | 是 | 交易对名 |
leverage | u32 | 是 | 杠杆倍数(1 ≤ leverage ≤ 市场 max_leverage) |
7.2 SetMarginMode
切换 Cross ↔ Isolated(须 flat + 无挂单)。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
owner | Address20 | 是 | 账户地址 |
symbol | String | 是 | 交易对名 |
margin_mode | MarginMode | 是 | "Cross" · "Isolated" |
7.3 SetIsolatedMargin
逐仓保证金划入/划出。
| 参数 | 类型 | 必填 | 精度 | 说明 |
|---|---|---|---|---|
owner | Address20 | 是 | — | 账户地址 |
symbol | String | 是 | — | 交易对名 |
amount | String | 是 | SCALE_6 | 金额(正=划入逐仓,负=划出回 balance) |
8. 清算
8.1 Liquidate
清算指定账户在指定市场的仓位。signer 须持 Liquidator 角色。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
target | Address20 | 是 | 被清算账户地址 |
symbol | String | 是 | 交易对名 |
9. 预言机报价
9.1 SubmitOracleQuote
提交 Book B 盘口报价。signer 须持 Quoter 角色。
| 参数 | 类型 | 必填 | 精度 | 说明 |
|---|---|---|---|---|
quoter | Address20 | 是 | — | 报价者地址 |
symbol | String | 是 | — | 交易对名 |
bid_price | String | 是 | px_decimals | 买一价 |
ask_price | String | 是 | px_decimals | 卖一价 |
mark_price | String | 是 | px_decimals | 标记价 |
source_ts_ms | u64 | 是 | — | 报价源时间戳(毫秒) |
sequence_id | u64 | 是 | — | 报价序列号(严格递增) |
last_price | String | 是 | px_decimals | 外部最新成交价 |
volume | String | 是 | sz_decimals | 外部成交量增量 |
9.2 BatchSubmitOracleQuote
一签多 quote。子项顺序执行、逐条回执。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
quotes | SubmitOracleQuoteActionWire[] | 是 | 报价列表(每项字段同 SubmitOracleQuote) |
10. 市场管理
全部 master-only(必须 master 直签,agent 一律拒)。
10.1 CreateMarket
创建市场。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
config | MarketConfigWire | 是 | 完整市场配置(详见 §15 MarketConfigWire schema) |
10.2 ActivateMarket / HaltMarket / ResumeMarket
市场生命周期操作。|| 参数 | 类型 | 必填 | 说明 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
symbol | String | 是 | 交易对名 |
ActivateMarket:Created → ActiveHaltMarket:Active → HaltedResumeMarket:Halted → Active
10.3 RequestDelist / CompleteDelist
下市操作。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
symbol | String | 是 | 交易对名 |
RequestDelist:Active\|Halted → DelistPendingCompleteDelist:DelistPending → Delisted(强制清退残留持仓)
10.4 SetFeeRecipient
修改市场手续费接收账户。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
symbol | String | 是 | 交易对名 |
recipient | Address20 | 是 | 新的手续费接收账户地址 |
10.5 AmendMarketConfig
运行时调整市场风险/费率参数。所有字段为选填——仅更新提供的字段。
| 参数 | 类型 | 必填 | 精度 | 说明 |
|---|---|---|---|---|
symbol | String | 是 | — | 交易对名 |
max_leverage | u32? | 否 | — | 市场级最大杠杆 |
maker_fee_rate | String? | 否 | SCALE_6 | Maker 费率 |
taker_fee_rate | String? | 否 | SCALE_6 | Taker 费率 |
margin_table | MarginTierWire[]? | 否 | SCALE_6 | 保证金分层表(整表替换,须升序) |
mark_max_change_bps | u32? | 否 | — | mark 单次最大相对偏离(bps;0=不限制) |
10.6 SetEmergencyHalt
紧急熔断开关。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
symbol | String | 是 | 交易对名 |
halt | bool | 是 | true 熔断 · false 恢复 |
11. Bridge 充提
11.1 RecordDeposit
登记链外到账单。signer 须持 SettlementOperator 角色。
| 参数 | 类型 | 必填 | 精度 | 说明 |
|---|---|---|---|---|
external_ref | Object | 是 | — | 外部链充值引用 { "chain": "bsc" | "admin" | ..., "seq": u64 } |
tx_hash | [u8;32]? | 否 | — | BSC 充值 tx_hash(JSON 序列化为字节数组) |
account | Address20 | 是 | — | 入账目标账户 |
amount | String | 是 | SCALE_6 | 充值金额(> 0) |
bsc_block | u64 | 是 | — | BSC 区块号(管理员补 0) |
bsc_ts | u64 | 是 | — | BSC 区块时间戳秒(管理员补 0) |
充值序号由链上自增分配(非外部传入)。external_ref 为去重键,同 (chain, seq) 重复提交将被拒绝。管理员充值使用 chain = "admin",同样参与去重。
11.2 CreditDeposit
对已登记的充值执行入账。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
seq | u64 | 是 | 待入账充值单的链上序号(= RecordDeposit 时分配的 seq,从 DepositRecorded 事件获取) |
11.3 WithdrawRequest
用户发起提现。User-Signed EIP-712 通道(见 §3.2)。
| 参数 | 类型 | 必填 | 精度 | 说明 |
|---|---|---|---|---|
zepto_chain | String | 是 | — | 链标识(如 "Mainnet"),密码学绑定 |
owner | Address20 | 是 | — | 提现账户地址 |
amount | String | 是 | SCALE_6 | 提现金额(> 0) |
chain | String | 是 | — | 用户选择的下提目标链(如 "bsc"),链外提款程序据此适配处理 |
EIP-712 签名包含 chain 字段,防止跨链重放。
11.4 WithdrawSettle
标记提现单已链下放款成功。signer 须持 SettlementOperator 角色。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
request_id | u64 | 是 | 提现请求 ID |
external_tx | Object | 是 | {"tx_hash": [u8;32], "bsc_block": u64, "bsc_ts": u64} |
11.5 WithdrawRefund
标记提现单退款。signer 须持 SettlementOperator 角色。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
request_id | u64 | 是 | 提现请求 ID |
reason_code | u8 | 是 | 退款原因码(操作员自定义) |
11.6 SetSettlementPaused
全局充提结算闸门。signer 须持 Admin 角色。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
paused | bool | 是 | true 暂停 · false 恢复 |
12. 账户管理
12.1 SetAccountRole
修改账户角色。Master-only。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
target | Address20 | 是 | 目标账户地址 |
role | AccountRole | 是 | 角色:"Trader"/"OracleOperator"/"SettlementOperator"/"Admin"/"Liquidator"/"Quoter" |
granted | bool | 是 | true 授予 · false 撤销 |
12.2 RegisterAgent
授权 API-wallet agent。User-Signed EIP-712 通道(见 §3.3)。Master-only。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
zepto_chain | String | 是 | 链标识(如 "Mainnet") |
owner | Address20 | 是 | Master 账户地址(须 = envelope.signer) |
agent_address | Address20 | 是 | 被授权的 secp256k1 API-wallet 地址 |
role_mask | u64 | 是 | 角色位掩码(须 ⊆ owner.role_mask) |
expires_at_ms | u64 | 是 | 过期时间(毫秒);0 = 永不过期 |
12.3 RevokeAgent
撤销已注册的 API-wallet agent。User-Signed EIP-712 通道(见 §3.4)。Master-only。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
zepto_chain | String | 是 | 链标识(如 "Mainnet") |
owner | Address20 | 是 | Master 账户地址(须 = envelope.signer) |
agent_address | Address20 | 是 | 待撤销的 agent 地址 |
13. 手续费与推荐
13.1 SetUserFeeRate
设置账户级自定义费率。signer 须持 Admin 角色。
| 参数 | 类型 | 必填 | 精度 | 说明 |
|---|---|---|---|---|
owner | Address20 | 是 | — | 目标账户地址 |
maker_fee_rate | String? | 否 | SCALE_6 | Maker 费率;null = 清除(回退市场默认) |
taker_fee_rate | String? | 否 | SCALE_6 | Taker 费率;null = 清除(回退市场默认) |
13.2 SetReferrer
绑定推荐码。signer 须持 Trader 角色。每个账户只能绑定一次。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
owner | Address20 | 是 | 被推荐人地址 |
code | String | 是 | 已注册的推荐码(不能自荐) |
13.3 RegisterReferrer
注册自己的推荐码。signer 须持 Trader 角色。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
owner | Address20 | 是 | 推荐人地址 |
code | String | 是 | 推荐码(全局唯一,格式合法) |
14. 高级订单(触发单 / OCO)
14.1 PlaceTriggerOrder
提交触发单(stop-loss / take-profit)。触发前不预扣保证金,触发那一刻才走 PlaceOrder 路径。
| 参数 | 类型 | 必填 | 精度 | 说明 |
|---|---|---|---|---|
owner | Address20 | 是 | — | 账户地址 |
symbol | String | 是 | — | 交易对名 |
trigger_price | String | 是 | px_decimals | 触发线 |
trigger_direction | TriggerDirection | 是 | — | "Above" · "Below" |
payload | TriggerOrderPayloadWire | 是 | — | 触发后提交的订单(见下) |
expires_at_ms | u64? | 否 | — | 触发单过期时刻(毫秒);null = 永不过期 |
TriggerOrderPayloadWire(payload 字段,externally-tagged):
Market 变体(市价触发):
| 字段 | 类型 | 必填 | 精度 | 说明 |
|---|---|---|---|---|
side | Side | 是 | — | "Bid" · "Ask" |
qty | String | 是 | sz_decimals | 下单数量 |
reduce_only | bool | 是 | — | 仅减仓 |
client_order_id | String? | 否 | — | 客户端订单 ID |
Limit 变体(限价触发):
| 字段 | 类型 | 必填 | 精度 | 说明 |
|---|---|---|---|---|
side | Side | 是 | — | "Bid" · "Ask" |
limit_price | String | 是 | px_decimals | 限价 |
qty | String | 是 | sz_decimals | 下单数量 |
tif | TimeInForce | 是 | — | TIF |
reduce_only | bool | 是 | — | 仅减仓 |
client_order_id | String? | 否 | — | 客户端订单 ID |
14.2 CancelTriggerOrder
撤销触发单。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
owner | Address20 | 是 | 账户地址 |
trigger_id | u64 | 是 | 触发单 ID |
14.3 PlaceOco
原子提交 OCO 组合单(一对二:一个被执行则另一个自动撤销)。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
owner | Address20 | 是 | 账户地址 |
execution | OcoExecutionWire | 是 | OCO 腿配置(见下) |
client_pair_id | u64? | 否 | 客户端 OCO ID |
OcoExecutionWire(execution 字段,externally-tagged):
TwoLimits 变体(两个限价单互斥):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
primary | OcoLimitLegWire | 是 | 主腿 |
secondary | OcoLimitLegWire | 是 | 副腿 |
StopAndLimit 变体(触发单 + 限价单):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
stop_leg | OcoStopLegWire | 是 | 触发腿 |
limit_leg | OcoLimitLegWire | 是 | 限价腿 |
OcoLimitLegWire:
| 字段 | 类型 | 必填 | 精度 | 说明 |
|---|---|---|---|---|
symbol | String | 是 | — | 交易对名 |
side | Side | 是 | — | "Bid" · "Ask" |
limit_price | String | 是 | px_decimals | 限价 |
qty | String | 是 | sz_decimals | 数量 |
tif | TimeInForce | 是 | — | TIF |
reduce_only | bool | 是 | — | 仅减仓 |
client_order_id | String? | 否 | — | 客户端订单 ID |
expires_at_ms | u64? | 否 | — | GTD 过期时刻 |
OcoStopLegWire(StopAndLimit 的触发腿):
| 字段 | 类型 | 必填 | 精度 | 说明 |
|---|---|---|---|---|
symbol | String | 是 | — | 交易对名 |
side | Side | 是 | — | "Bid" · "Ask" |
qty | String | 是 | sz_decimals | 数量 |
trigger_price | String | 是 | px_decimals | 触发线 |
trigger_direction | TriggerDirection | 是 | — | "Above" · "Below" |
reduce_only | bool | 是 | — | 仅减仓 |
client_trigger_id | u64? | 否 | — | 客户端触发 ID |
expires_at_ms | u64? | 否 | — | GTD 过期时刻 |
14.4 CancelOco
撤销 OCO 组合单。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
owner | Address20 | 是 | 账户地址 |
pair_id | u64 | 是 | OCO pair ID |
15. MarketConfigWire schema
CreateMarket 的 config 字段类型,也用于 getMarket 响应中的 config。
| 字段 | 类型 | 精度 | 说明 |
|---|---|---|---|
symbol | String | — | 交易对名 |
kind | MarketKind | — | "Native" CLOB · "ExternalPeg" 预言机 |
price_decimals | u32 | — | 价格小数位(MARK_PRICE_DECIMALS - size_decimals) |
size_decimals | u32 | — | 数量小数位 |
fee_recipient | Address20 | — | 手续费接收账户 |
max_leverage | u32 | — | 市场级最大杠杆 |
maker_fee_rate | String | SCALE_6 | Maker 手续费率 |
taker_fee_rate | String | SCALE_6 | Taker 手续费率 |
margin_table | MarginTierWire[] | SCALE_6 | 保证金分层表(见下) |
mark_max_change_bps | u32 | — | mark 单次最大偏离(bps;0=不限制) |
max_fills_per_quote | u32 | — | 每次报价最大成交笔数 |
price_floor | String | px_decimals | 价格下限 |
price_ceil | String | px_decimals | 价格上限 |
MarginTierWire(margin_table 的元素):
| 字段 | 类型 | 精度 | 说明 |
|---|---|---|---|
max_notional | String | SCALE_6 | 该 tier 的名义值上限(最后一个 tier 可为超大值表示无上限) |
im_rate | String | SCALE_6 | 初始保证金率 |
mm_rate | String | SCALE_6 | 维持保证金率 |
max_leverage | u32 | — | 该 tier 内的最大杠杆 |