密钥与服务
管理员上传链上操作私钥,绑定到 oracle / liquidator / hedger / bridge 组件。 私钥经 ECIES(secp256k1 + HKDF + AES-256-GCM)加密传输;解密后明文写入 SQLite,API 永不回传私钥。
服务取值:oracle · liquidator · hedger · bridge_deposit · bridge_withdraw。
GET /api/keys/encryption-key
无鉴权。 返回本进程启动时生成的 ECIES 公钥(重启即变)。
{
"public_key": "0x04…",
"algorithm": "ecies-secp256k1"
}
客户端用该公钥加密私钥 hex,再 POST /api/keys。
GET /api/keys
Bearer。列表(无私钥)。
{
"keys": [{
"id": "uuid",
"label": "oracle-hot",
"address": "0x…",
"created_at": "…",
"used_by": ["oracle"]
}]
}
POST /api/keys
Bearer。上传一把密钥。
Body:
{
"label": "oracle-hot",
"address": "0x…",
"ephemeral_public_key": "0x…",
"iv": "…",
"ciphertext": "…"
}
服务端解密后从私钥推导地址,须与 address 忽略大小写一致。
201: 密钥条目(无 private_key)。
| HTTP | 说明 |
|---|---|
| 400 | JSON / 解密失败 / 地址不匹配 |
| 503 | 无数据库 |
DELETE /api/keys/{id}
Bearer。仍被服务绑定时 409;不存在 404。
200: { "ok": true }
GET /api/service-config
Bearer。各服务当前绑定。
{
"services": {
"oracle": { "key_id": "uuid", "address": "0x…", "enabled": true },
"liquidator": { "key_id": null, "address": null, "enabled": false }
}
}
PUT /api/service-config
Bearer。绑定或开关。key_id 有值时会热重启对应组件。
Body: { "service": "oracle", "key_id": "uuid" | null, "enabled": true }
service 非法 → 400。
200: { "ok": true }