开发回调服务器
HTTP 接口说明
回调服务器是一个 HTTP 服务器,需要支持如下接口的请求:
Path
/v1/check
Method
POST
Body
采用 x-www-form-urlencoded 编码的数据
解析 HTTP 请求
TSS Node 采用如下步骤构建 HTTP 请求,供对接参考:
根据任务类型,生成对应的 CallbackRequest 结构体
将 CallbackRequest 结构体进行 JSON 序列化,得到 CallbackRequestJsonString
使用 CallbackRequestJsonString 作为 JWT 的 payload,使用自身的 RSA 私钥对其进行签名,构造 JWT
使用 form 表单的形式进行 HTTP POST 提交,form 表单的 Key 是 TSS_JWT_MSG,Value 为上一步构造的 JWT
回调服务器接收到 HTTP 请求后,需要按照如下步骤进行解析:
提取 HTTP POST 请求中提交的表单数据,Key 为 TSS_JWT_MSG,Value 即为 JWT
使用本地保存的 TSS Node 的 RSA 公钥,对 JWT 进行签名检查
提取 JWT 中的 payload,并对 payload 按照 CallbackRequest 结构体进行 JSON 反序列化
根据 CallbackRequest 的类型,对其中的 meta 字段进行进一步的 JSON 反序列化,得到本请求的详细信息
开发风控检查相关逻辑
回调服务器内,需要结合自身业务上的需求,针对 CallbackRequest 的内容进行风控检查,确保本次请求的任务是合法的动用私钥分片的任务。
构建 HTTP 响应
回调服务器构建 HTTP 响应的步骤如下:
根据风控检查结构,生成对应的 CallbackResponse 结构体
将 CallbackResponse 结构体进行 JSON 序列化,得到 CallbackResponseJsonString
使用 CallbackResponseJsonString 作为 JWT 的 payload,使用自身的 RSA 私钥对其进行签名,构造 JWT
将上一步构造的 JWT 作为 HTTP 响应的内容,直接返回给 TSS Node
CallbackRequest 定义
参数
类型
描述
request_id
string
回调请求唯一 ID
request_type
int
回调请求的类型,是一个枚举值,包括以下几种: TypePing = 0
TypeKeyGen = 1
TypeKeySign = 2
TypeKeyReshare = 3
request_detail
string
回调请求详细信息,包括请求的一系列关键信息。不同的回调请求类型对应不同的 request_detail 结构;
格式为 JSON 序列化后的字符串
extra_info
string
回调请求辅助信息,包括请求的一些额外相关信息;
不同的回调请求类型对应不同的 extra_info 结构;
格式为 JSON 序列化后的字符串
当request_type == TypeKeyGen时,request_detail 的结构定义如下:
参数
类型
描述
threshold
int
签名阈值
node_ids
[]string
参与生成私钥的节点 ID 集合
curve
int
支持的签名曲线。
0: SECP256K1
2: ED25519
task_id
string
任务 ID
extra_info 的结构定义如下:
参数
类型
描述
cobo_id
string
Cobo 内部 KeyGen 请求唯一 ID
api_request_id
string
用户通过 WaaS 接口传入的请求 ID,如果请求非 WaaS 接口,Cobo 内部会自动生成
当 request_type == TypeKeySign 时,request_detail 的结构定义如下:
参数
类型
描述
group_id
string
签名时使用的 GroupID
root_pub_key
string
根公钥
used_node_ids
[]string
签名时所使用的 nodeID 列表
bip32_path_list
[]string
使用的 bip32path 列表
msg_hash_list
[]string
待签名的消息 Hash 列表
tweak_list
[]string
待签名的 tweak 列表
signature_type
int32
使用的签名算法。 1: ecdsa 2: eddsa 3: schnorr
tss_protocol
int32
使用的TSS签名协议。 0: Unknown 1: GG18 2: Lindell 3: EDDSATss
task_id
string
任务 ID
extra_info 的结构定义如下:
参数
类型
描述
cobo_id
string
Cobo 内部 KeySign 请求唯一 ID
api_request_id
string
提币请求的请求 ID。如果是通过 API 提交的提币请求,则该字段与用户通过接口传入的 request_id 一致;如果是通过 Web 发起的提币,Cobo 内部会自动生成
transaction_type
TransactionTypeEnum
参考 TransactionTypeEnum 定义
operation
TransactionOperationEnum
参考TransactionOperationEnum定义
coin
string
资产名称
decimal
int
币种精度
from_address
string
资产出账地址
amount
string
(非必需)交易数额,请注意,这里的数值包含小数位,例如 BTC decimal 为8位,则这里的 100000000 实际为 1 个 BTC
to_address
string
提币到账地址
to_address_details
json
(非必需)资产接收信息列表,用于 UTXO 模型资产转账时使用,此处参数值需满足结构 list[ToAddressDetail] 的 json 字符串
fee
int
(非必需)对于 BTC 交易,该字段表示每字节对应的手续费,单位为 satoshi
gas_price
int
(非必需)燃料价格,ETH 类型账号模型适用,单位为 GWei
gas_limit
int
(非必需)燃料上限,ETH 类型账号模型适用
extra_parameters
json
交易的额外参数,详情请参考 API 文档 create_transaction 接口参数定义
replace_cobo_id
string
(非必需)RBF 覆盖的交易 Cobo ID
api_key
string
(非必需)通过 API 发起的提币所使用的 API_KEY
spender
string
(非必需) Custody Web 收发币钱包的提币员 email 信息
operator
string
(非必需) Custody Web web3 钱包的操作员 email 信息
custody_wallet_name
string
钱包名称
gas_station_child_id
string
gas station 交易的 Cobo ID
raw_tx_hex
string
交易 hash
note
string
交易备注信息
raw_tx_info
json
构造待签名消息的原始信息
ToAddressDetail
参数
类型
描述
to_address
string
提币到账地址
amount
string
交易数额,请注意,这里的数值包含小数位,例如 BTC decimal 为 8 位,则这里的 100000000 实际为 1 个 BTC
extra_parameters
参数
类型
描述
inputs_to_spend
list[Input]
指定需要作为交易输入的 Input 列表
inputs_to_exclude
list[Input]
指定不能作为交易输入的 Input 列表
Input
参数
类型
描述
tx_hash
string
交易 hash
vout_n
int
在交易中的索引号
TransactionTypeEnum
值
值名称
描述
100
TRANSACTION_FROM_WEB
web端发起的交易
102
TRANSACTION_FROM_API
api发起的交易
103
TRANSACTION_RBF_API_SPEEDUP
api发起的加速交易
104
TRANSACTION_RBF_WEB_SPEEDUP
web端发起的加速交易
105
TRANSACTION_RBF_API_DROP
api发起的废弃交易
106
TRANSACTION_RBF_WEB_DROP
web端发起的废弃交易
TransactionOperationEnum
值
值名称
描述
100
TRANSFER
资产转账
200
CONTRACT_CALL
合约调用
当 request_type == TypeKeyReshare 时,request_detail 的结构定义如下:
参数
类型
描述
old_group_id
string
老的 GroupID
root_pub_key
string
根公钥
curve
int
支持的签名曲线。
0: SECP256K1
2: ED25519
used_node_ids
[]string
参与私钥恢复(Reshare)的老节点 NodeID 列表
old_threshold
int
老的签名阈值
new_threshold
int
新的签名阈值
new_node_ids
[]string
参与私钥恢复(Reshare)的新节点 NodeID 列表;
私钥恢复成功后,这些节点会分别持有新的私钥分片
task_id
string
任务 ID
extra_info 的结构定义如下:
参数
类型
描述
cobo_id
string
Cobo 内部 Reshare 请求唯一 ID
api_request_id
string
用户通过 WaaS 接口传入的请求 ID,如果请求非 WaaS 接口,Cobo 内部会自动生成
CallbackResponse 定义
参数
类型
描述
status
int
状态码,当状态码为 0 时,表明回调服务器正常执行;当状态码为其他值时,表明回调服务器执行过程中出现了一些异常情况
request_id
string
回调请求 ID,与本次请求的 CallbackRequest 对象的request_id 保持一致
action
string
枚举值,代表后续的执行指令: [APPROVE, REJECT]
APPROVE 表示同意继续执行任务; REJECT 表示拒绝执行任务,具体的拒绝信息可以在 error 字段中输出
error
string
错误信息;
当 status 返回值不是 0 时,代表回调服务器内部出现的错误信息;
当 status 为 0,且风控结果为 REJECT 时,代表具体的风控拒绝信息。
注:当 TSS Node 无法接收到 HTTP 响应时,会持续重试请求回调服务器。当超过最大重试次数后,风控结果为 REJECT
Last updated