机构接入
状态:已实现。 接入由运营人员协助完成;下面的技术步骤是你与 Rocky 运营共同完成的内容。
本页面向使用自有 Canton party 接入现货 API 的做市商及其他机构。内容涵盖开始前需要准备什么、账户如何绑定到你的 party、结算所需的链上授权、密钥登记、沙盒,以及上线检查清单。商务条款(信用、费用、支持)另行约定,并汇总在你的 集成包(Integration Pack) 中。
1. 前置条件
| 要求 | 原因 |
|---|---|
| 一个由你控制的 Canton party,托管在你运营的 validator/participant 或受支持的钱包上 | 结算是钱包对钱包的 DvP;你的 party 就是链上的对手方。party id(<name>::<fingerprint>)是 Rocky 用来绑定你账户的标识。 |
| 你将交易的资产已在该 party 的钱包中 | 你的现货余额是钱包的镜像;没有交易所充值。见 镜像余额。 |
| 用于 API 签名的 Ed25519 密钥对(推荐),或接受 HMAC 共享密钥 | 见 鉴权。使用 Ed25519 时,Rocky 永远不持有能以你的身份签名的 secret。 |
| 交易主机的固定出口 IP | 按 IP 的限流桶与 WebSocket 连接上限以客户端 IP 为键;Rocky 会记录你的 IP 用于监控与 429 归因;它们不会被列为 IP 桶豁免,若连接上限不够,Rocky 通过配置上调。 |
| 你将报价的交易对及预期下单速率 | 决定限流档位,并让 Rocky 能针对涉及的资产逐一验证接收方预授权。 |
| 已签署的信用条款 | 结算是乐观的(见 风险披露)。 |
2. 创建账户与绑定 party
Rocky 运营会创建你的交易账户并将其绑定到你的 Canton party。请通过集成包中约定的安全渠道发送:
- Canton party id。
- validator / 钱包类型,以及你的 party 如何签署交易(这决定第 4 步的 MemberAuth 路径)。
- 交易的交易对及预期每分钟峰值订单数。
- 出口 IP 地址。
- Ed25519 公钥(见下文第 3 步),或申请 HMAC key。
Rocky 会返回你的 API key 标识、确认限流档位(除非另有约定,为 ext-mm),并确认 party 绑定。从此刻起该账户即为已绑定 party:一旦交易场所启用链上结算,在注册(enrollment)完成之前它无法下单(-2012,见第 4 节),且与它之间的交易所内部转账被禁用——你的钱包是唯一的资金来源。
3. Ed25519 公钥登记
-
在你控制的机器上生成密钥对。把 32 字节的 seed / 私钥保存在你的签名基础设施中;它永远不应离开那里。
openssl genpkey -algorithm ed25519 -out spot-ed25519.pemopenssl pkey -in spot-ed25519.pem -pubout -outform DER | tail -c 32 | base64 > spot-ed25519.pub.b64base64 -d spot-ed25519.pub.b64 | sha256sum # 指纹 = 原始 32 字节的 SHA-256;复述前 16 位十六进制 -
通过安全渠道发送 base64 公钥(44 个字符,解码后恰好 32 字节)。公钥不是秘密,但在传输中不能被篡改:在登记密钥之前,双方通过第二个渠道(语音或商务联系人的邮箱)互相复述指纹(原始 32 字节公钥的 SHA-256,取前 16 位十六进制)。
-
Rocky 在你的账户上以
ED25519类型登记该密钥并返回 API key 标识。Ed25519 密钥不会签发 secret。 -
在发送第一个请求之前,用 参考向量 验证你的签名器,然后在沙盒上用签名的
GET /api/v3/account确认。
自助:钱包会话绑定后,你也可以在网页端 API Keys 页面或通过 /v1/api-keys 自行创建与吊销 key;这样创建的 key 从 standard 档位开始,Rocky 运维按需提升档位。
轮换:发送新公钥;Rocky 登记新密钥并在约定时间吊销旧密钥。吊销在请求后立即生效(之后返回 -2015)。密钥类型不能更改;要从 HMAC 迁移到 Ed25519,请登记一个新密钥。
4. MemberAuth(链上结算授权)
MemberAuth 是你的 party 与 Rocky 结算操作者之间的一份 Canton 合约。它授权操作者为涉及你的 party 的成交执行两腿 DvP——仅此而已。没有它,你的成交就没有链上路径:在没有它的情况下尝试的结算会落入 failed。网关的 -2012 门槛以钱包出资分段的**注册(enrollment)**为准(即 Rocky 对你的 party 的登记):钱包驱动路径在 execute 时自动完成,运营协助路径由 Rocky 运营在建号时完成;MemberAuth 本身在结算时检查,而不是在下单时。
MemberAuth 每个 party 创建一次。完成它同时会把该 party 注册进钱包出资分段:从那一刻起,你的现货余额镜像你的钱包,成交以零手续费结算。
路径 A——钱包驱动(浏览器或程序化会话)
如果你的 party 位于受支持的钱包(Rocky Wallet、Loop、Console、Send)中,MemberAuth 通过交易所会话 API 完成,该 API 代理于 /v1/spot-chain/…,并使用交易所钱包会话 bearer token 鉴权(通过将钱包连接到 Rocky 网页应用或其会话端点获得):
| 步骤 | 调用 | 结果 |
|---|---|---|
| 检查 | GET /v1/spot-chain/member-auth | {"authorized": false, "partyId": "...", "memberAuthContractId": null, "proposalContractId": null} |
| 提议 | POST /v1/spot-chain/member-auth/proposal | 相同字段外加 transaction:一笔准备好的 accept 交易(commandId、actAs、readAs、disclosedContracts、synchronizerId 等),由你的钱包签名并提交 |
| 签名并提交 | 你的钱包 | Loop / Console / Send 直接提交 transaction 对象。Rocky Wallet 则调用 POST /v1/spot-chain/member-auth/prepare(返回 preparedTransactionHash、hashingSchemeVersion、commandId),对哈希签名,再以 {"signature": "..."} 调用 POST /v1/spot-chain/member-auth/execute |
| 确认 | GET /v1/spot-chain/member-auth | authorized: true 且 memberAuthContractId 已设置;通常在几秒内 |
路径 B——运营协助(自有 validator)
如果你的 party 托管在你自己的 participant 上,Rocky 运营会应请求为你的 party 创建 MemberAuth proposal。然后你从自己的 participant(Canton console、JSON Ledger API 或你的签名服务)exercise accept choice,并在完成后通知 Rocky。Rocky 确认注册后,该 party 会在下一次对账时出现在钱包出资分段中。
无论哪条路径,最终状态都是同一份合约;之后账户的交易行为完全相同。
5. 接收方预授权
在 Canton 上,Token Standard 转账只有在接收方对该 instrument 持有长期有效的预授权时才会原子执行(transferKind: direct)。否则转账会退化为两阶段的 offer,DvP 无法使用——结算腿会失败。
对于你在交易对中可能收到的每一种资产(买入时的基础资产、卖出时的计价资产),你的 party 必须在你的 participant 上持有该 instrument 的接收方预授权。上线前,Rocky 会针对每种资产的每个方向(Rocky 托管 → 你的 party,以及你的 party → Rocky 托管)对该 instrument 的 registry 运行探测,并要求每次探测都报告 direct。你会收到逐资产的结果;任何 offer 或缺失的结果都必须在你这一侧修复(创建预授权,对于 Amulet/CC 还需确保已充值),然后该资产的交易对才会启用。
如果你使用的钱包会自动管理预授权(Rocky Wallet、Loop、Console、Send),受支持资产通常已经就绪;但仍请以探测结果为准进行确认。
6. 沙盒
Rocky 提供一个沙盒环境,运行相同的网关、撮合引擎和结算流水线,对接一个测试 Canton 网络。Base URL 和沙盒 API key 在你的集成包中。上述接入步骤——party 绑定、密钥登记、MemberAuth、预授权——先用测试 party 在沙盒上重复一遍。
Rocky 还提供一个集成模拟器(Python),用你的密钥遍历整个接口面:ping → time → exchangeInfo → depth → 高于 minNotional 的 LIMIT 单 → 查询 → 撤单 → myTrades(断言存在 settlementStatus)→ WebSocket depth5与trade 帧,并对照参考向量自检其 Ed25519 签名器。在接入你的交易系统之前,请用你自己的 seed 在沙盒上运行它;运行全绿即为沙盒验收标准。
7. 上线检查清单
以下各项均需双方确认后,生产密钥才会启用交易。
- 生产 party 已绑定到账户;标签与限流档位(
ext-mm)已由 Rocky 确认。 - Ed25519 公钥已登记;指纹已通过第二渠道确认;签名器已对照参考向量验证。
- 生产 party 的 MemberAuth 为
authorized: true。 - 接收方预授权探测对每种资产、两个方向均报告
direct。 - 首次镜像对账在
GET /api/v3/account中显示与钱包一致的非零余额。 - 沙盒:模拟器运行全绿;至少一笔成交达到
settlementStatus: "confirmed"。 - 生产:每个方向各有一笔小额成交达到
confirmed;其cantonUpdateId已由双方 在 Canton 上验证 并留存。 - 出口 IP 已确认;限流档位余量已对照你的预期下单速率核查(沙盒运行期间观测到的
X-MBX-USED-WEIGHT-1M/X-MBX-ORDER-COUNT-1M)。 - Rocky 监控已包含你的 party(结算失败与漂移告警)。
- 信用条款已签署;支持渠道与事件报告格式已约定(集成包)。
8. 运行注意事项
从自营 validator 跑报价或刷量策略?外部做市商指南 讲了每笔成交的 Canton 流量成本、kill switch 与对账接口,以及多账户行为。
- 资金:把资产转入已绑定的钱包;镜像会在两个对账周期内(每个 30 秒——新出现的链上盈余先在一轮确认、下一轮计入)计入
free。没有充值调用,也没有提现调用。 - 把结算库存留在钱包里。 在有挂单或未结算卖出时移出资产会触发钳制、撤单,并可能冻结(
-2010 Account is frozen…)。解冻需人工操作。 - 链上结算的每一笔成交均零手续费;
commission为"0"。 - 自成交防护始终 开启;你自己的挂单会被跳过。
- 最小名义金额适用于每一笔订单(
-1013);请从exchangeInfo读取minNotional。 - 请对照
myTrades对账成交,并把任何非confirmed的成交视为未结算。