Relayer API
Relayer 负责处理 MPC Node 之间的通信,本文档介绍 Relayer 提供的接口。
基本概念
OTT
一次性 Token(One-Time Token,OTT),每个 Embedded MPC Node 连接 Relayer 时需要使用一次性 Token 进行鉴权。
获取 OTT
功能概述
每个 Embedded MPC Node 连接 Relayer 时需要使用一次性 Token 进行鉴权(One-Time Token,OTT)。当建立连接后 OTT 马上失效,每个 OTT 只能只用一次,并且 OTT 有效期为 1 小时。
此接口仅支持通过 APIServer.Port 端口访问。
接口 URL
POST /ott/create
请求参数
| 参数名 | 类型 | 必须 | 说明 |
| id | int | 是 | Embedded MPC Node 中租户的 Party ID |
| tpk | string | 是 | 租户的公钥,格式为 16 进制字符串,04 开头,共 130 个字符 |
| count | int | 是 | 要创建的 OTT 个数,最大 10 个 |
响应参数
| 参数名 | 类型 | 说明 |
| otts | array<string> | ott列表 |
| timestamp | string | 服务器当前时间戳 |
| errorCode | string | 错误码 |
| errorMsg | string | 错误码描述 |
WebSocket 通信接口
功能概述
MPC Node Service 和 Embedded MPC Node 自动使用该接口通过 WebSocket 协议进行点对点通信。
该接口存在两种访问场景:
(1)MPC Node Service 通过内网或者公网访问,通过在 Relayer 配置文件中配置 MPC Node Service 公钥实现通信的鉴权。开发者只需要配置 MPC Node Service 公钥即可,MPC Node Service 调用该接口自动进行鉴权,无需开发者额外配置。
(2)Embedded MPC Node 通过公网访问该接口,访问时需要携带 OTT。开发者需要开发自己的后端服务,通过内网调用 Relayer 获取 OTT 接口获得 OTT,然后下发给 Embedded MPC Node,Embedded MPC Node 每次连接时会使用该 OTT。
开发者无需显式编程调用此接口。
接口 URL
/websocket
通信补偿接口
功能概述
当 Embedded MPC Node 所处的网络环境不稳定时, Embedded MPC Node 会自动尝试使用该接口通信。该接口依然需要 OTT,需要开发者后端服务向 Relayer 申请 OTT 并下发给 Embedded MPC Node。
默认情况下该接口不支持跨域访问,如果 Embedded MPC Node 是浏览器端,则需要开启跨域功能。如需配置跨域访问,请参考 Relayer 部署文档进行配置。
开发者无需显式编程调用此接口。
接口 URL
/sendandreceive
PreStop 接口
功能概述
当开发者希望下线或者重启某个实例时需要调用本接口。收到接口调用后,健康检查接口状态变更为 stopped,同时 HTTP 状态码返回 500。此接口仅支持通过 APIServer.Port 端口访问。
当调用 preStop 接口后,/ott/create 请求响应固定返回错误码 R000003 。此时存在一个场景,当开发者调用 preStop 接口后,负载均衡器还没有将 relayer 实例从负载均衡目标组中摘除,开发者的后端服务可以请求到正在关闭的 relayer 实例,此时可以增加重试逻辑:如果错误码为 R000003 则进行一定次数的重试。
为了防止 preStop 被内网恶意调用,每个实例在启动时独立生成一个 token,该 token 用于 preStop 的简单鉴权,保存 token 的位置为 ./preStop/preStopToken.txt,文件内容中包含了 token。开发者通过查看 preStopToken.txt 内容进行调用 preStop。
此接口仅支持通过 APIServer.Port 端口访问。
接口 URL
GET /preStop
请求参数
| 参数名 | 类型 | 说明 |
| token | string | 启动时生成的 token 字符串,存储路径在 ./preStop/preStopToken.txt |
响应参数
| 参数名 | 类型 | 说明 |
| stopped | bool | 停机状态 |
| timestamp | string | 服务器当前时间戳 |
| errorCode | string | 错误码 |
| errorMsg | string | 错误码描述 |
健康检查接口
功能概述
检查 Relayer 工作状态是否正常。当 Relayer 工作状态正常时,该接口返回 HTTP 状态码 200,当工作状态不正常时,返回 HTTP 状态码 500。当使用负载均衡类产品配置负载时,可以使用该接口检查负载的健康状况。
此接口仅支持通过 APIServer.Port 端口访问。
接口 URL
GET /check
请求参数
无
响应参数
| 参数名 | 类型 | 说明 |
| version | string | MPC Node Relayer 的版本,如 v1.0.0 |
| status | string | 如果一切正常,该字段为 ok,preStop 后为 stopped,其他情况为 unhealthy |
| msg | string | 状态描述 |
| timestamp | string | 服务器当前时间戳 |
| errorCode | string | 错误码 |
| errorMsg | string | 错误码描述 |
错误码列表
| 错误码 | 错误描述 |
| R000001 | Unknown Error. Please check the service logs or contact Safeheron support team. |
| R000002 | Please check if Redis is functioning properly. |
| R000003 | The new request is not allowed since the Relayer is stopping. |
| R001001 | The request is missing the 'commPartyId' parameter. |
| R001002 | The request is missing authentication credential information. |
| R001003 | Request missing parameters |
| R001004 | Failed to format the request data. |
| R001005 | Invalid request parameters, please check the Id and the TPK |
| R001006 | The timestamp parameter must be between the current time and a time point within the last five minutes. |
| R001007 | The timestamp parameter must be between the current time and a time point within the last sixty minutes. |
| R001008 | Invalid OTT or Signature. |
| R001009 | Invalid CommPartyId or Signature. |
| R001010 | Illegal PreStopToken |
| R002001 | Messages and query* cannot be empty at the same time. |