ChainUp MPC Wallet
ChainUp Custody 对于MPC技术的整体实施应用能够保证您的投资资产处于市场上最高级别的安全等级的托管保护之下,用户的私钥将由用户和ChainUp Custody共同管理,该技术使您拥有资产完整控制权,您对资产的管理使用不受时间和地点的限制。方便资产的备份和恢复,消除私钥管理的单点故障问题,同时增加了资产自管的安全性。
MPC协议的性质允许用户了解哪些私钥片段参与和签署,但其协议的性质不要求参与者对外披露他们的身份,这意味着每一方的输入都是保密的。同时MPC会保证签名生成方的在网络上是私密不可见的,在保护其个人数据隐私的同时,保证多方协作和交易可信度。
ChainUp Custody MPC提供了一个简单、高效的对接组件和API,可以帮助开发者更快地接入系统,可以让您自动化管理您的钱包、交易流程等。除此之外,我们还提供交易消息通知,让你更快的感知事件的发生。
API主要提供以下功能:
- 管理子钱包和资产查看
- 获取发起交易所需的预估手续费
- 发起交易、收到交易最终的状态通知
- 通过ChainUp Custody提供的Co-Signer完成自动签名、地址生成
- 获取所有交易的记录详情
请联系商务经理或发邮件至 custody@chainup.com 获取API 信息。
接入指引
开发者可以根据下述流程快速完成ChainUp Custody - MPC钱包API的接入工作
开通账户
使用ChainUp MPC钱包需要开设一个账号,客户可自助完成开户操作
下载APP
用户可通过以下方式获取APP
方式一:手机浏览器访问官方网站(https://custody.chainup.com/download)或使用手机扫描二维码;
方式二:应用市场下载
- 安卓系统可在谷歌应用市场搜索:ChainUp Custody;若您所在国家及地区访问谷歌应用市场受限,您可通过官网下载安装。
- 苹果系统可在AppStore搜索:ChainUp Custody;由于政策原因,部分国家及地区的AppStore暂未上架(例如,中国大陆),您可通过其它国家地区的苹果账号获取。
注册登录
系统支持邮箱、手机号两种方式注册登录;注册与登录功能合二为一,首次登录会自动完成注册;
创建钱包
登录系统后,首先切换到MPC,为团队在APP创建一个钱包,钱包创建成功将会在APP本地生成其中一份私钥片段,客户务必及时备份私钥片段,未备份私钥片段部分功能将不可用。
目前系统支持手动抄写
、上传云服务器
两种备份方式。
钱包分为主钱包、子钱包两个类型;一个主钱包可以创建多个子钱包;
应用场景:
主钱包可用于某个业务线的资产统计;子钱包分配给不同的用户使用。
主钱包可用于公司总资产的统计;子钱包分配给不同的业务部门使用。
私钥密码用于加解密私钥分片,非常重要,为了您的资产安全请务必及时备份。 未备份私钥分片和密码将限制您MPC 钱包功能的使用。
- ChainUp Custody 采用的是3-3的签名策略,其中2个私钥分片分别加密存储在微软云服务商和亚马逊云服务商,另外1个私钥分片在用户本地;
- 用户对资产有100%的控制权:ChainUp Custody 仅协助用户管理资产,在没有用户私钥分片签名情况下,无法触碰用户资产。因此用户需要及时将本地私钥分片进行备份并妥善保管;
- 为了便于用户记忆,私钥分片以助记词形式存在。
若钱包配置不满足您的需求,可联系商务经理或发邮件至 custody@chainup.com 获取支持。
功能配置
在系统开发前,需要对钱包完成以下准备工作
创建API
请钱包创建者登录ChainUp控制台系统,在API管理页面创建API;
关于RSA公钥
为了保证数据传输安全,ChainUp采用 RSA-2048 PKCS#8 密钥格式的非对称加密算法对 API 请求和响应的数据进行加解密;其中公钥用于解密请求数据需要上传到ChainUp,私钥用于加密数据由客户自行配置到对应服务器并妥善保管;
RSA公私钥对的说明
第一对RSA公私钥:创建 API 后,ChainUp Custody会默认生成,其中
RSA公钥
会给到开发者,开发者用于响应参数解密
第二对RSA公私钥:开发者生成,客户业务系统请求 API 前对参数加密,并将
RSA公钥
配置到ChainUp Custody用于请求参数解密
第三对RSA公私钥:开发者生成,Co-Signer请求 API 前对参数加密,并将
RSA公钥
配置到ChainUp Custody用于请求参数解密
第四对RSA公私钥(
可选
):开发者生成,主要用于Co-Signer未配置回调通知
时验证交易签名
,该份公私钥由客户生成并保存,ChainUp Custody不持有
关于回调通知
目前系统支持三种业务类型回调服务;交易状态回调
、签名回调
、交易审批回调
其中交易状态回调
地址、签名回调
是由客户在ChainUp平台配置,且由ChainUp主动触发,交易审批回调
地址由客户在Co-Signer程序内配置,且由Co-Signer主动触发
交易状态回调
:在交易订单处理完成时(如充值、提现订单),ChainUp会回调客户通知订单最新状态,该回调地址由客户在ChainUp平台内,创建API
页面配置【交易状态通知地址】签名回调
:在API发起创建地址或为Co-Signer生成私钥片段时,ChainUp会回调Co-Signer进行签名操作;该回调地址由客户在ChainUp平台内,创建API
页面配置【Co-Signer接口地址】交易审批回调地址
:请参考Co-Signer配置
配置Co-Signer
Co-Signer 常用于自动化签名 OpenAPI 发起的、以及自动归集交易
Co-Signer服务器选择
Co-Signer支持部署在普通服务器或 支持SGX
的服务器,为了安全起见,建议使用带有 SGX 的服务器;推荐微软云服务商;查看Co-Signer服务器配置要求
Co-Signer配置
Co-Signer 提供了回调处理程序,该程序属于可选组件;
- 若配置回调处理程序(安全级别:高)
Co-Signer 会对 OpenAPI 发起的交易请求到业务服务器进行二次审核,仅当业务服务器审核通过后方可进行签名操作;
创建地址、资金归集、加油等交易不会回调
- 若未配置回调处理程序(安全级别:较高)
API Co-Signer 会验证交易签名,并签署所有 OpenAPI 发起的交易请求;
创建Co-Signer私钥片段
完成API及Co-Signer程序配置后,在APP为Co-Signer创建私钥片段。
钱包创建者
可在MPC钱包【安全】-【Co-Signer】页面中创建Co-Signer私钥片段;创建的Co-Signer私钥片段将通过客户在ChainUp平台配置的 Co-Singer RSA公钥加密同步到Co-Signer服务器。
开启自动归集
为了提高资金安全以及资金利用率,部分主链需要配置归集及加油功能,ChainUp为客户提供了一套自动化归集解决方案;具体操作流程如下:
登录ChainUp管理平台,在Co-Signer页面中创建;
- 钱包成员(
任意角色
)设置资金归集到账钱包及加油钱包;
仅支持选择在APP端显示的子钱包;为了保证资金效率建议归集钱包
与加油钱包
设置为不同的钱包(由于账户类型的主链出金是单笔执行,若配置成相同钱包,在为地址补充矿工费时,出金交易会等待直到补充矿工费完成。)
钱包创建者
在APP审批签名;通过钱包私钥对设置的钱包进行加密,确保资金归集的地址正确。
- 钱包成员(
任意角色
)配置子钱包归集、加油应用范围,币种归集、加油规则等信息
应用归集范围
配置要进行资金归集的子钱包;
归集策略
配置要进行资金归集的币种、归集阈值;超过归集阈值且低于设置的矿工费时会自动触发资金归集;用户可通过控制台
或API
自定义归集的阈值以及最大矿工费。
加油策略
为归集币种配置补充矿工费,由于代币归集需要使用主币作为矿工费,当地址的代币满足归集策略且地址没有主币时,将会触发从加油钱包向待归集地址补充矿工费,补充矿工费的数量可自定义,请务必注意补充的矿工费要低于归集阈值。
- 策略配置完成,系统自动运行,可在设置的钱包内查看资产变动情况。
建议客户配置矿工费不足报警
通知,及时补充,避免影响用户出币
对接测试
为了让客户更便捷、快速的对接系统,ChainUp基于过往客户的对接经验,梳理了核心流程【获取充币地址】【用户充币】【用户提币】的对接方案。具体如下:
获取充币地址
创建子钱包
/api/mpc/sub_wallet/create
为子钱包创建币种地址
/api/mpc/sub_wallet/create/address
ChainUp回调Co-Signer签名,Co-Signer与ChainUp node协同完成签名
签名成功返回币种创建的地址
地址支持两种类型:系统地址、用户地址;系统地址
用于资金归集或找零,不可分配
给用户;
用户充币
用户在客户系统内完成注册
当用户在前端查看币种充值地址时,客户系统为用户分配币种地址
用户向地址充币
ChainUp监控区块链地址有充币交易后,回调通知客户业务系统收款通知(客户系统主动获取
/api/mpc/billing/sync_deposit_list
)客户获取当前币种对应区块链的块高(
/api/mpc/chain_height
)客户系统确认达到安全确认数后为用户上账
用户充币成功
用户提币
用户在客户系统发起提币
客户系统审核通过后,通过API向ChainUp系统发起提币请求
/api/mpc/billing/withdraw
Co-Signer定时获取提币交易,若Co-Signer配置了回调程序,则Co-Signer向客户业务系统进行二次确认,若Co-Signer配置了签名校验,则Co-Signer会验证签名,并与ChainUp node协同签名
签名完成,ChainUp将交易向区块链广播并监控状态
若交易矿工费过低,可对该笔交易进行加速,以便快速上链;用户可在控制台或使用API操作;/api/mpc/billing/withdraw_pending
可通过接口获取支持加速的主链:/api/mpc/wallet/open_coin
交易被区块链确认后,回调通知客户业务系统转账通知(客户系统主动获取
/api/mpc/billing/sync_withdraw_list
)客户系统更新订单状态
用户提币成功
API接口
统一说明
域名及API密钥
生产环境域名(不支持测试环境): | https://openapi.hicoin.vip/ |
---|---|
app_id: | 请创建钱包后获取 |
rsa_wallet_pub: | Custody系统公钥;请创建钱包后从Custody系统获取 |
rsa_third_prv: | 客户私钥;自主生成、保存 |
rsa_third_pub: | 客户公钥;自主生成;请创建钱包后配置到Custody系统 |
rsa_co_signer_pri: | Co-Signer私钥;使用Co-Signer生成,或自主生成、保存 |
rsa_co_signer_pub: | Co-Signer公钥;使用Co-Signer生成,或自主生成;请创建钱包后配置到Custody系统 |
RSA公私钥格式
密码长度:2048
密钥格式:PKCS#8
接口规则
传输方式: | https(测试环境暂时使用 http) |
---|---|
响应状态码为: | 0 表示处理成功 ,非 0 表示请求错误或系统异常 |
请求地址: | 域名+接口地址 |
加密算法: | RSA |
请求接口示例:
POST /api/mpc/sub_wallet/assets
app_id=2128eb8de9e932a4376909f3d69424cc&data=SWYYr-LBVAmaS0eq8n-CUT_nHkM3OBxyWOsImMTe41UaqAoYI2ZghmaphXHov-7hsRsVmOhyPqC-JFuRGvonJKFd2Jirxv6Vn_8V40r_MMYTkhqcviQbZWYW5xX8Ai8CIpqas9fIWVDIYA_NKBl0UCJpwGxscxLNpjq5Z8-BTyIYDsVBquM9zEQGBCfcA7szD9n2fN_loSkoexlwqV8wg9HIZO5yQ6utZ_Kt0lNDQQb8zn8BwfAvsEsbJlOINUAqhxh1vV_AJ4bXn2uYx8TaYcBht-n_ZcBdxIDt975dbOFUiH-oCzIuDi1oLDtb4EylfCvhU5E4ozel_lQ-6cyIG0Dqiiyx0RFFOCJzPSXIoV031pvoa8pTCpkWklh8mRw1rylBgeZtqSxpnJO2_u2RIlXq6Hs8Yly9CmhIXaSrUgPir0h6xVxlf4VC6PFVCkiiTlp0kZ_H_UbKm0nUis3v3U2sflWJ2C449waSrikhuxVrFAQ6PQmrFVCAE6MYXNrFXJQuam2HAIQNSGbFQjspw8b_bXyfyZMGZ3K2oBC4I_v3eETTdPe0pfSNJb-5g37K0tOAr_UFbWK8pkC8yl56fSjn8tcR3yCRWwoi8jxTcUBiswTtvXZtzgG4dyzkaHXjsZjSGiywXSqP76VZWlyOmAx6IDSViLcPLPISdU3ruCI
请求参数统一格式
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
app_id | String | 必须 | 商户唯一标识 |
data | String | 可选 | 加密之后的字符串;客户的RSA私钥加密,具体加密信息见各接口 请求参数数据结构 |
响应参数统一格式
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
data | String | 必须 | 加密之后的字符串;Custody的RSA私钥加密,具体加密信息见 响应结果data解密后格式 |
响应结果示例:
{
"data": "SWYYr-LBVAmaS0eq8n-CUT_nHkM3OBxyWOsImMTe41UaqAoYI2ZghmaphXHov
-7hsRsVmOhyPqC-JFuRGvonJKFd2Jirxv6Vn_8V40r_MMYTkhqcviQbZWYW5xX8Ai8CIpqas9fIWVDIYA
_NKBl0UCJpwGxscxLNpjq5Z8-BTyIYDsVBquM9zEQGBCfcA7szD9n2fN_loSkoexlwqV8wg9HIZO5yQ6utZ_
Kt0lNDQQb8zn8BwfAvsEsbJlOINUAqhxh1vV_AJ4bXn2uYx8TaYcBht-n_ZcBdxIDt975dbOFUiH-
oCzIuDi1oLDtb4EylfCvhU5E4ozel_lQ-6cyIG0Dqiiyx0RFFOCJzPSXIoV031pvoa8pTCpkWklh8mRw1rylBgeZtqSxpnJO2
_u2RIlXq6Hs8Yly9CmhIXaSrUgPir0h6xVxlf4VC6PFVCkiiTlp0kZ
_H_UbKm0nUis3v3U2sflWJ2C449waSrikhuxVrFAQ6PQmrFVCAE6MYXNrFXJQuam2HAIQNSGbFQjspw8b_
bXyfyZMGZ3K2oBC4I_v3eETTdPe0pfSNJb-5g37K0tOAr_UFbWK8pkC8yl56fSjn8tcR3yCRWwoi8jxTcUBiswTtvXZtzgG4dyzka
HXjsZjSGiywXSqP76VZWlyOmAx6IDSViLcPLPISdU3ruCI"
}
响应结果data解密后格式
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
code | String | 是 | 状态码,例:100002 |
msg | String | 是 | 响应结果说明,例:请求参数错误 |
data | String | 否 | 具体响应数据,数据结构定义见各接口 响应参数数据结构 |
加解密方式
请求参数data与响应字段data的值都是经过rsa加密后再通过 base64urlsafe 加密的结果
钱包
获取钱包开通的主链
获取ChainUp Custody支持的MPC主链币种和开通的MPC主链币种
HTTP请求
GET /api/mpc/wallet/open_coin
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
time | Long | 是 | 当前时间戳 |
charset | String | 是 | 编码格式,无特殊情况,传参数utf-8 |
响应结果示例
{
"open_main_chain":[
{
"coin_net":"BTC",
"symbol":"BTC",
"symbol_alias":"BTC",
"support_acceleration" : false
},
{
"coin_net":"ETH",
"symbol":"ETH",
"symbol_alias":"ETH",
"support_acceleration" : true
}
],
"support_main_chain":[
{
"coin_net":"BTC",
"if_open_chain":true,
"symbol":"BTC",
"symbol_alias":"BTC",
"support_acceleration" : false
},
{
"coin_net":"ETH",
"if_open_chain":false,
"symbol":"ETH",
"symbol_alias":"ETH",
"support_acceleration" : true
}
]
}
响应参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
open_main_chain | Array | 否 | 钱包开通的主链 |
>coin_net | String | 否 | 币种网络,例:ETH |
>symbol | String | 是 | 币种唯一标识,转账时使用,例:USDTERC20 |
>symbol_alias | String | 否 | 币种真实币名,例:USDT |
>support_acceleration | Boolean | 是 | true:支持加速,false:不支持加速 |
support_main_chain | Array | 否 | MPC支持的主链 |
coin_net | String | 否 | 币种网络,例:ETH |
>symbol | String | 是 | 币种唯一标识,转账时使用,例:USDTERC20 |
>symbol_alias | String | 否 | 币种真实币名,例:USDT |
>if_open_chain | Boolean | 是 | 是否开通主链, false 未开通,true :已开通 |
>support_acceleration | Boolean | 是 | true:支持加速,false:不支持加速 |
获取MPC币种详情
获取ChainUp Custody支持的MPC主链币及代币
HTTP请求
GET /api/mpc/coin_list
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
time | Long | 是 | 当前时间戳 |
charset | String | 是 | 编码格式,无特殊情况,传参数utf-8 |
symbol | String | 否 | 币种唯一标识,转账时使用,例:USDTERC20 |
base_symbol | String | 否 | 主链币种名称,币种唯一标识,转账时使用,例:ETH |
open_chain | Boolean | 否 | 主链开通币种,默认获取全部,true 获取开通币种,false 获取未开通币种 |
响应结果示例
[
{
"address_regex":".*",
"address_tag_regex":"",
"base_symbol":"BSC",
"coin_net":"BSC",
"contract_address":"0xe9e7cea3dedca5984780bafc599bd69add087d56",
"decimals":"18",
"deposit_confirmation":"1",
"address_link":"https://www.bscscan.com/address/",
"tx_link":"https://www.bscscan.com/tx/",
"icon":"",
"if_open_chain":true,
"name":"BUSD Token;BSC;BUSD",
"real_symbol":"BUSD",
"support_memo":"0",
"support_token":"0",
"symbol":"BUSD",
"symbol_alias":"BUSD",
"support_acceleration": true,
"support_multi_addr" : true
},
{
"address_regex":".*",
"address_tag_regex":"",
"base_symbol":"ETH",
"coin_net":"ETH",
"contract_address":"0xdac17f958d2ee523a2206206994597c13d831ec7",
"decimals":"18",
"deposit_confirmation":"1",
"address_link":"https://etherscan.io/address/",
"tx_link":"https://etherscan.io/tx/",
"icon":"",
"if_open_chain":false,
"name":"USDTERC20;ETH;USDT",
"real_symbol":"USDTERC20",
"support_memo":"0",
"support_token":"0",
"symbol":"USDTERC20",
"symbol_alias":"USDT",
"support_acceleration": true,
"support_multi_addr" : true
}
]
响应参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
symbol | String | 是 | 币种唯一标识,转账时使用,例:BUSD |
symbol_alias | String | 是 | Custody 币种别名 |
real_symbol | String | 是 | 币种链上名称 |
base_symbol | String | 是 | 币种所属主链币种唯一标识,例:BSC |
coin_net | String | 否 | 币种网络 |
contract_address | String | 否 | MPC支持的主链 |
deposit_confirmation | String | 是 | 充值确认数 |
address_link | String | 否 | 地址查询链接 |
txid_link | String | 否 | 交易查询链接 |
icon | String | 是 | 币种icon |
if_open_chain | Boolean | 是 | 是否开通主链, false 未开通,true :已开通 |
decimals | String | 是 | 币种精度 |
support_memo | String | 是 | 是否支持memo,0不支持1支持 |
support_token | String | 是 | 是否支持token币,0不支持1支持,主链币有值,代币为空 |
address_tag_regex | String | 是 | 地址正则 |
address_regex | String | 是 | tag正则 |
support_acceleration | Boolean | 是 | 是否支持加速 |
support_multi_addr | Boolean | 是 | 是否支持多地址,true:支持, false:不支持 |
coin_type | Integer | 是 | 所属主链币类型,0 账户类型, 1 utxo类型主链, 2 Memo类型 |
merge_address_symbol | String | 否 | 合并地址主链币,币种唯一标识 |
获取主链最新块高
获取指定主链的区块最新块高
HTTP请求
GET /api/mpc/chain_height
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
base_symbol | String | 是 | 币种唯一标识,例:ETH |
响应结果示例
{
"height": 10023412
}
响应参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
height | Long | 是 | 主链最新区块高度 |
子钱包
创建子钱包
传入指定的子钱包名称,为钱包创建一个新的子钱包
HTTP请求
POST /api/mpc/sub_wallet/create
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
sub_wallet_name | String | 是 | 子钱包名称,最大支持50个字符,同一钱包下子钱包不能重名,例:mpc矿池 |
app_show_status | String | 否 | 创建后app和web端是否展示该子钱包,1 展示, 2 不展示;默认不展示 |
响应结果示例:
{
"sub_wallet_id": 10234122
}
响应参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
sub_wallet_id | Integer | 是 | 子钱包id |
子钱包创建地址
为指定子钱包及币种创建地址;同一个子钱包可以创建多个地址,Memo类型会创建多个memo
HTTP请求
POST /api/mpc/sub_wallet/create/address
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
sub_wallet_id | Integer | 是 | 子钱包id |
symbol | String | 是 | 币种唯一标识,例:USDTERC20 |
响应结果示例
{
"address":"0xd5b688639ef10ac7fb8ad0156eb0ae025dd03b86"
"addr_type":1,
"memo":""
}
响应参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
address | String | 是 | 创建的地址 |
addr_type | Integer | 是 | 地址类型,1:用户地址,2:系统地址(包括归集地址、找零地址)。系统地址 不可给分配给用户使用, UTXO交易的找零都会找零到找零地址 |
memo | String | 否 | Memo主链下币种时分配 |
子钱包地址查询
子钱包地址列表
HTTP请求
POST /api/mpc/sub_wallet/get/address/list
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
sub_wallet_id | Integer | 是 | 子钱包id |
symbol | String | 是 | 币种唯一标识,例:USDTERC20 |
max_id | Integer | 是 | 地址起始id, Memo类型币种起始id为memo,默认0 |
响应结果示例
[
{
"address":"12ZzzA48sYnE12fdkmKmaxkR3Rz5j7Gjac",
"addr_type": 1,
"memo": ""
},
{
"address":"139cRprA9siBDbScbjtCZTcESUgZ1rm9fr",
"addr_type": 2,
"memo": ""
}
]
响应参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
address | String | 是 | 创建的地址 |
addr_type | Integer | 是 | 地址类型,1:用户地址,2:系统地址(包括归集地址、找零地址)。系统地址 不可给分配给用户使用, UTXO交易的找零都会找零到找零地址 |
memo | String | 否 |
获取子钱包资产
获取指定子钱包及币种下的账户资产
HTTP请求
GET /api/mpc/sub_wallet/assets
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
symbol | String | 是 | 币种唯一标识,例:USDTERC20 |
sub_wallet_id | Integer | 是 | 子钱包id |
响应结果示例
{
"collecting_balance":"3.23",
"normal_balance":"1.23",
"lock_balance":"0.77"
}
响应参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
normal_balance | String | 是 | 可用余额 |
lock_balance | String | 是 | 冻结余额 |
collecting_balance | String | 是 | 待归集余额 |
修改子钱包状态
指定子钱包在app、web客户端的展示情况,不展示无法在app发起交易
HTTP请求
POST /api/mpc/sub_wallet/change_show_status
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
sub_wallet_ids | String | 是 | 多个子钱包id的字符串,英文逗号分割 |
app_show_status | String | 是 | 1 展示, 2 不展示 |
响应参数数据结构
无
转账
转账
发起一笔转账交易
HTTP请求
POST /api/mpc/billing/withdraw
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
sub_wallet_id | Integer | 是 | 子钱包id |
symbol | String | 是 | 币种唯一标识,例:USDTERC20 |
from | String | 否 | 指定出币地址 |
address_to | String | 是 | 转账到账地址 |
memo | String | 否 | 转账到账地址memo,Memo类型转账时如有可填入 |
amount | String | 是 | 转账金额 |
request_id | String | 是 | 转账唯一标识 |
remark | String | 否 | 转账备注,例:mpc矿池 |
fee_rate | String | 否 | BTC类型系列,费率;注意:不要和其他系列参数一起传入 |
size | String | 否 | BTC类型系列,字节大小;注意:不要和其他系列参数一起传入 |
gas_price | String | 否 | ETH类型系列,gas推荐单价;注意:不要和其他系列参数一起传入 |
gas_limit | String | 否 | ETH类型系列,gas限制;注意:不要和其他系列参数一起传入 |
fee | String | 否 | 其他系列,如DOT\TRX,使用fee;注意:不要和其他系列参数一起传入;gas_limit除外,如ATOM |
sign | String | 否 | 使用RSA私钥签名, 参与签名的参数: "request_id", "sub_wallet_id", "symbol", "address_to", "amount", "memo"。签名规则详见Co-Signer交易签名验证 |
响应结果示例
{
"withdraw_id": 12345
}
响应参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
withdraw_id | Integer | 是 | 转账id |
转账预估手续费
获取转账需要的预估手续费用
HTTP请求
GET /api/mpc/billing/gas_estimate
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
from | String | 否 | 出币地址, /api/mpc/coin_list 接口coin_type != 1时, 该参数必传 |
sub_wallet_id | Integer | 否 | UTXO多地址出金时, 该参数必传, 指定from无效 |
to | String | 是 | 到账地址 |
memo | String | 否 | 转账到账地址memo,Memo类型转账时如有可填入 |
symbol | String | 是 | 币种唯一标识,例:USDTERC20 |
amount | String | 是 | 金额 |
响应结果示例
{
"gas_limit":0,
"fee_unit":"Gwei",
"gas_price1":"0",
"fee":"0.00159",
"gas_price2":"0",
"gas_price3":"0",
"trans_fee":"0.00159"
}
响应参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
fee_unit | String | 是 | 手续费单位,例:Gwei |
fee_rate1 | String | 否 | BTC类型系列,费率一档 |
fee_rate2 | String | 否 | BTC类型系列,费率二档 |
fee_rate3 | String | 否 | BTC类型系列,费率三档 |
size | Long | 是 | BTC类型系列,字节大小,该参数值不可修改 |
gas_limit | Long | 否 | ETH类型系列(部分其他系列币种如ATOM也有此参数值),gas限制 |
gas_price1 | String | 否 | ETH类型系列,gas推荐单价一档 |
gas_price2 | String | 否 | ETH类型系列,gas推荐单价二档 |
gas_price3 | String | 否 | ETH类型系列,gas推荐单价三档 |
gas_decimals | Integer | 否 | ETH类型系列,用于计算主币手续费,计算式: (gas_price/10^gas_decimals)*gas_limit |
fee | String | 否 | 其他系列,如DOT\TRX,使用fee字段做手续费 |
fee_changeable | Boolean | 否 | 其他系列,如DOT\TRX,使用fee参数值是否可更改,true 可修改,false 不可修改 |
trans_fee | String | 否 | 参考交易手续费,单位是主链币 |
转账加速
转账签名完成后,由于手续费不足而长时间未上链的时候,可以重新指定更高额的手续费用加速上链
HTTP请求
POST /api/mpc/billing/withdraw_pending
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
withdraw_id | Integer | 是 | 转账id |
fee_rate | String | 否 | BTC类型系列,费率;注意:不要和其他系列参数一起传入 |
size | String | 否 | BTC类型系列,字节大小;注意:不要和其他系列参数一起传入 |
gas_price | String | 否 | ETH类型系列,gas推荐单价;注意:不要和其他系列参数一起传入 |
gas_limit | String | 否 | ETH类型系列,gas限制;注意:不要和其他系列参数一起传入 |
fee | String | 否 | 其他系列,如DOT\TRX,使用fee;注意:不要和其他系列参数一起传入,gas_limit除外,如ATOM |
响应参数数据结构
无
获取转账记录
获取钱包下所有子钱包转账记录,最多返回100条
HTTP请求
GET /api/mpc/billing/withdraw_list
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
ids | String | 是 | 多request_id 的字符串,英文逗号分割 |
响应结果示例
[
{
"symbol":"ETH",
"amount":"0.0000111",
"real_fee":"0",
"withdraw_source":2,
"fee":"0.0002782353",
"address_to":"0xc70d1eebb7c687ec8d56bead73f104d41e6e0bda",
"memo": "",
"created_at":1672304978000,
"txid":"0x8e6beba81b90835fc9fcd40a2bdca33243c7c3b81ac765c240837d4810874a55",
"confirmations":0,
"contract_address":"",
"sub_wallet_id":"123",
"address_from":"0x5EDc9177997Bf6B4db559A5C184051858B3B3704",
"fee_symbol":"ETH",
"updated_at":1672318660000,
"base_symbol":"",
"id":242,
"request_id":"57fdc296-1e14-47fa-a99d-5e86f8e51008",
"status":1200,
"tx_height":3120013
},
{
"symbol":"TRX",
"amount":"0.001",
"real_fee":"0",
"withdraw_source":1,
"fee":"27.4",
"address_to":"TYQJcpoH2zeZ2pnpRokwBeRZ16yqyNZPR4",
"memo": "",
"created_at":1672304978000,
"txid":"dee604ca778aee55ef0d17260ee4a96d69dfbc965228288598dce0cf9c829542",
"confirmations":0,
"contract_address":"",
"sub_wallet_id":"123",
"address_from":"TC1rbTinyRyNC5sBJdxGcADbVXh9xcHwwQ",
"fee_symbol":"TRX",
"updated_at":1672318660000,
"base_symbol":"",
"id":242,
"request_id":"57fdc296-1e14-47fa-a99d-5e86f8e51008",
"status":2000,
"tx_height":56207376
}
]
响应参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
id | Integer | 是 | 转账id |
request_id | String | 是 | 转账唯一标识 |
sub_wallet_id | Integer | 是 | 子钱包id |
symbol | String | 是 | 币种唯一标识,转账时使用,例:USDTERC20 |
amount | String | 是 | 转账金额 |
fee_symbol | String | 是 | 手续费币种,例:ETH |
fee | String | 是 | 手续费,例:0.00123 |
real_fee | String | 是 | 真实消耗的手续费,例:0.00111 |
created_at | Long | 是 | 创建时间时间戳 |
updated_at | Long | 是 | 修改时间时间戳 |
address_from | String | 是 | 出币地址 |
address_to | String | 是 | 到账地址 |
memo | String | 否 | 转账到账地址memo |
txid | String | 是 | 交易hash |
confirmations | Integer | 是 | 区块确认数,例:10 |
status | Integer | 是 | 转账状态: 1000 未审批, 1100 审批通过, 待签名,1200 支付中,2000 支付完成,2100 审批拒绝,2200 拒绝,2201 系统拒绝,2300 交易丢弃,2400 支付失败 |
withdraw_source | Integer | 是 | 转账类型: 1 app, 2 openapi, 3 web |
base_symbol | String | 否 | 转账币种主链唯一标识,例:ETH |
contract_address | String | 否 | 转账币种合约地址 |
tx_height | Long | 是 | 交易完成的区块高度 |
同步转账记录
获取钱包下所有子钱包转账记录,最多返回100条
HTTP请求
GET /api/mpc/billing/sync_withdraw_list
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
max_id | String | 是 | 转账记录起始id |
响应结果示例
[
{
"symbol":"ETH",
"amount":"0.0000111",
"real_fee":"0",
"withdraw_source":2,
"fee":"0.0002782353",
"address_to":"0xc70d1eebb7c687ec8d56bead73f104d41e6e0bda",
"memo": "",
"created_at":1672304978000,
"txid":"0x8e6beba81b90835fc9fcd40a2bdca33243c7c3b81ac765c240837d4810874a55",
"confirmations":0,
"contract_address":"",
"sub_wallet_id":"123",
"address_from":"0x5EDc9177997Bf6B4db559A5C184051858B3B3704",
"fee_symbol":"ETH",
"updated_at":1672318660000,
"base_symbol":"",
"id":242,
"request_id":"57fdc296-1e14-47fa-a99d-5e86f8e51008",
"status":1200,
"tx_height":3120013
},
{
"symbol":"TRX",
"amount":"0.001",
"real_fee":"0",
"withdraw_source":1,
"fee":"27.4",
"address_to":"TYQJcpoH2zeZ2pnpRokwBeRZ16yqyNZPR4",
"memo": "",
"created_at":1672304978000,
"txid":"dee604ca778aee55ef0d17260ee4a96d69dfbc965228288598dce0cf9c829542",
"confirmations":0,
"contract_address":"",
"sub_wallet_id":"123",
"address_from":"TC1rbTinyRyNC5sBJdxGcADbVXh9xcHwwQ",
"fee_symbol":"TRX",
"updated_at":1672318660000,
"base_symbol":"",
"id":242,
"request_id":"57fdc296-1e14-47fa-a99d-5e86f8e51008",
"status":2000,
"tx_height":56207376
}
]
响应参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
id | Integer | 是 | 转账id |
request_id | String | 是 | 转账唯一标识 |
sub_wallet_id | Integer | 是 | 子钱包id |
symbol | String | 是 | 币种唯一标识,转账时使用,例:USDTERC20 |
amount | String | 是 | 转账金额 |
fee_symbol | String | 是 | 手续费币种,例:ETH |
fee | String | 是 | 手续费,例:0.00123 |
real_fee | String | 是 | 真实消耗的手续费,例:0.00111 |
created_at | Long | 是 | 创建时间时间戳 |
updated_at | Long | 是 | 修改时间时间戳 |
address_from | String | 是 | 出币地址 |
address_to | String | 是 | 到账地址 |
memo | String | 否 | 转账到账地址memo |
txid | String | 是 | 交易hash |
confirmations | Integer | 是 | 区块确认数,例:10 |
status | Integer | 是 | 转账状态: 1000 未审批, 1100 审批通过, 待签名,1200 支付中,2000 支付完成,2100 审批拒绝,2200 拒绝,2201 系统拒绝,2300 交易丢弃,2400 支付失败 |
withdraw_source | Integer | 是 | 转账类型: 1 app, 2 openapi, 3 web |
base_symbol | String | 否 | 转账币种主链唯一标识,例:ETH |
contract_address | String | 否 | 转账币种合约地址 |
tx_height | Long | 是 | 交易完成的区块高度 |
收款
获取收款记录
获取钱包下所有子钱包收款记录,最多返回100条
HTTP请求
GET /api/mpc/billing/deposit_list
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
ids | String | 是 | 多个id的字符串,英文逗号分割,例:123,345 |
响应结果示例
[
{
"symbol":"ETH",
"amount":"1",
"address_to":"0x33648fACAD6CECA85cf717841Ddd87c40B12438F",
"memo": "",
"created_at":1672107533000,
"txid":"0xfd0b04024bd1d849ba69e301733194154cb42a05c1dd32065367d8c6336af711",
"confirmations":20,
"contract_address":"",
"sub_wallet_id":"123",
"address_from":"0xc70d1eebb7c687ec8d56bead73f104d41e6e0bda",
"updated_at":1672323030000,
"base_symbol":"ETH",
"id":43,
"status":2000,
"tx_height":3120013
},
{
"symbol":"ETH",
"amount":"1",
"address_to":"0x525208dd0b56c27bd10703bd675fca0509a17154",
"memo": "",
"created_at":1672107533000,
"txid":"0x97cccb68595182d8df439fe17d33376d4bb69abf49d56e08d46fa5f281e095fb",
"confirmations":5,
"contract_address":"",
"sub_wallet_id":"123",
"address_from":"0xe897Fd38f319cB343ffD03Ba2f7426BA99bb97c4",
"updated_at":1672323030000,
"base_symbol":"ETH",
"id":45,
"status":2000,
"tx_height":13238654
}
]
响应参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
id | Integer | 是 | 收款id |
sub_wallet_id | Integer | 是 | 子钱包id |
symbol | String | 是 | 币种唯一标识,例:USDTERC20 |
amount | String | 是 | 收款金额 |
created_at | Long | 是 | 创建时间时间戳 |
updated_at | Long | 是 | 修改时间时间戳 |
address_from | String | 是 | 出币地址 |
address_to | String | 是 | 到账地址 |
memo | String | 否 | 到账地址memo |
txid | String | 是 | 交易hash |
confirmations | Integer | 是 | 区块确认数,例:10 |
status | Integer | 是 | 收款状态: 1000 未确认,1100 已确认(交易区块已确认), 2000 已完成(上账已完成),3000 异常 |
deposit_type | Integer | 是 | 充值类型,1: 普通币种充值, 2:NFT充值 |
token_id | String | 否 | NFT充值的tokenId, 当: deposit_type=2时, 该值不为空 |
base_symbol | String | 否 | 收款币种主链唯一标识,例:ETH |
contract_address | String | 否 | 收款币种合约地址 |
tx_height | Long | 是 | 交易完成的区块高度 |
同步收款记录
获取钱包下所有子钱包收款记录,最多返回100条
HTTP请求
GET /api/mpc/billing/sync_deposit_list
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
max_id | String | 是 | 转账记录起始id,例:100 |
响应结果示例
[
{
"symbol":"ETH",
"amount":"1",
"address_to":"0x33648fACAD6CECA85cf717841Ddd87c40B12438F",
"memo": "",
"created_at":1672107533000,
"txid":"0xfd0b04024bd1d849ba69e301733194154cb42a05c1dd32065367d8c6336af711",
"confirmations":20,
"contract_address":"",
"sub_wallet_id":"123",
"address_from":"0xc70d1eebb7c687ec8d56bead73f104d41e6e0bda",
"updated_at":1672323030000,
"base_symbol":"ETH",
"id":43,
"status":2000,
"tx_height":3120013
},
{
"symbol":"ETH",
"amount":"1",
"address_to":"0x525208dd0b56c27bd10703bd675fca0509a17154",
"memo": "",
"created_at":1672107533000,
"txid":"0x97cccb68595182d8df439fe17d33376d4bb69abf49d56e08d46fa5f281e095fb",
"confirmations":5,
"contract_address":"",
"sub_wallet_id":"123",
"address_from":"0xe897Fd38f319cB343ffD03Ba2f7426BA99bb97c4",
"updated_at":1672323030000,
"base_symbol":"ETH",
"id":45,
"status":2000,
"tx_height":13238654
}
]
响应参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
id | Integer | 是 | 收款id |
sub_wallet_id | Integer | 是 | 子钱包id |
symbol | String | 是 | 币种唯一标识,例:USDTERC20 |
amount | String | 是 | 收款金额 |
created_at | Long | 是 | 创建时间时间戳 |
updated_at | Long | 是 | 修改时间时间戳 |
address_from | String | 是 | 出币地址 |
address_to | String | 是 | 到账地址 |
memo | String | 否 | 到账地址memo |
txid | String | 是 | 交易hash |
confirmations | Integer | 是 | 区块确认数,例:10 |
status | Integer | 是 | 收款状态: 1000 未确认,1100 已确认(交易区块已确认), 2000 已完成(上账已完成),3000 异常 |
deposit_type | Integer | 是 | 充值类型,1: 普通币种充值, 2:NFT充值 |
token_id | String | 否 | NFT充值的tokenId, 当: deposit_type=2时, 该值不为空 |
base_symbol | String | 否 | 收款币种主链唯一标识,例:ETH |
contract_address | String | 否 | 收款币种合约地址 |
tx_height | Long | 是 | 交易完成的区块高度 |
归集
获取归集子钱包
获取币种的归集子钱包及加油子钱包
HTTP请求
GET /api/mpc/auto_collect/sub_wallets
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
symbol | String | 是 | 币种唯一标识,例:USDTERC20 |
响应结果示例
{
"collect_sub_wallet_id":10241,
"fueling_sub_wallet_id":20482
}
响应参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
collect_sub_wallet_id | Integer | 否 | 归集子钱包,币种配置后获取 |
fueling_sub_wallet_id | Integer | 否 | 加油子钱包,币种配置后获取 |
归集币种设置
设置币种的最小归集金额、以及加油的最大矿工费
HTTP请求
POST /api/mpc/auto_collect/symbol/set
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
symbol | String | 是 | 币种唯一标识,例:USDTERC20 |
collect_min | String | 是 | 归集最小币种金额;最大6位小数精度,不超过9999999999999999 |
fueling_limit | String | 是 | 归集最多消耗矿工费金额;最大6位小数精度,不超过9999999999999999 |
响应结果示例
{
"symbol":"USDTERC20"
}
响应参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
symbol | String | 是 | 配置完成币种唯一标识 |
同步归集记录
获取钱包下所有子钱包归集记录,最多返回100条
HTTP请求
GET /api/mpc/billing/sync_auto_collect_list
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
max_id | String | 是 | 归集记录起始id |
响应结果示例
[
{
"symbol":"ETH",
"amount":"0.0000111",
"real_fee":"0",
"trans_type":10,
"fee":"0.0002782353",
"address_to":"0xc70d1eebb7c687ec8d56bead73f104d41e6e0bda",
"memo": "",
"created_at":1672304978000,
"txid":"0x8e6beba81b90835fc9fcd40a2bdca33243c7c3b81ac765c240837d4810874a55",
"confirmations":0,
"contract_address":"",
"sub_wallet_id":"123",
"address_from":"0x5EDc9177997Bf6B4db559A5C184051858B3B3704",
"fee_symbol":"ETH",
"updated_at":1672318660000,
"base_symbol":"",
"id":242,
"status":1200
},
{
"symbol":"HECO",
"amount":"0.0000111",
"real_fee":"0",
"trans_type":11,
"fee":"0.0024040607337957",
"address_to":"0x0AabA82E4ba9c2Fdf80B9F8E1AcE885f092B64F0",
"memo": "",
"created_at":1672304978000,
"txid":"",
"confirmations":0,
"contract_address":"",
"sub_wallet_id":"123975",
"address_from":"0xE76a3d30dAc35C4b9A17E690cd250d8Bec649b65",
"fee_symbol":"HECO",
"updated_at":1672318660000,
"base_symbol":"HECO",
"id":315,
"status":2400
}
]
响应参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
id | Integer | 是 | 归集id |
sub_wallet_id | Integer | 是 | 子钱包id |
symbol | String | 是 | 币种唯一标识,转账时使用,例:USDTERC20 |
amount | String | 是 | 归集金额 |
fee_symbol | String | 是 | 手续费币种,例:ETH |
fee | String | 是 | 手续费,例:0.00123 |
real_fee | String | 是 | 真实消耗的手续费,例:0.00111 |
created_at | Long | 是 | 创建时间时间戳 |
updated_at | Long | 是 | 修改时间时间戳 |
address_from | String | 是 | 出币地址 |
address_to | String | 是 | 归集地址 |
memo | String | 否 | 归集到账地址memo |
txid | String | 是 | 交易hash |
confirmations | Integer | 是 | 区块确认数,例:10 |
status | Integer | 是 | 归集状态: 1000 未审批, 1100 审批通过, 待签名,1200 支付中,2000 支付完成,2100 审批拒绝,2200 拒绝,2201 系统拒绝,2202 自动取消,2300 交易丢弃,2400 支付失败 |
trans_type | Integer | 是 | 归集类型: 10.归集交易, 11.归集加油交易 |
base_symbol | String | 否 | 归集币种主链唯一标识,例:ETH |
contract_address | String | 否 | 归集币种合约地址 |
Web3交易
创建Web3交易
创建一笔Web3交易
HTTP请求
POST /api/mpc/web3/trans/create
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
request_id | String | 是 | 交易唯一标识 |
main_chain_symbol | String | 是 | 主链币币名(唯一标识) |
sub_wallet_id | Integer | 是 | 子钱包ID |
from | String | 否 | 交易发起地址,子钱包存在多地址时, 可指定交易地址, 不指定时默认使用子钱包“常用地址“ |
interactive_contract | String | 是 | 交互合约 |
amount | String | 是 | 交易金额,-1:表示无穷大, 该金额表示主链币使用金额, 如金额为1ETH, 传值为:1 |
gas_price | String | 是 | gas 手续费,单位:Gwei |
gas_limit | String | 是 | gas limit 手续费 |
input_data | String | 是 | 合约交易的方法参数组成的16进制数据 |
trans_type | Integer | 是 | 0:授权交易,1:其他交易。为0时,amount设置金额无效 |
dapp_name | String | 否 | dapp名称 |
dapp_url | String | 否 | dapp 访问url |
dapp_img | String | 否 | dapp 图片 |
sign | String | 否 | 使用RSA私钥签名, 参与签名的参数: "request_id", "sub_wallet_id", "main_chain_symbol", "interactive_contract", "amount", "input_data"。签名规则详见Co-Signer交易签名验证 |
响应结果示例
{
"trans_id": 198012
}
响应参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
trans_id | Integer | 是 | Web3交易ID |
Web3交易加速
转账签名完成后,由于手续费不足而长时间未上链的时候,可以重新指定更高额的手续费加速上链
HTTP请求
POST /api/mpc/web3/pending
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
trans_id | Integer | 是 | Web3交易ID |
gas_price | String | 是 | gas peice, 单位:Gwei |
gas_limit | String | 是 | gas limit |
响应参数数据结构
无
获取web3交易记录
获取钱包下所有子钱包Web3交易记录,最多返回100条
HTTP请求
GET /api/mpc/web3/trans_list
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
ids | String | 是 | 多request_id 的字符串,英文逗号分割 |
响应结果示例
[
{
"id":435,
"request_id":"0000000003",
"sub_wallet_id":1000895,
"txid":"0xbc87e486d28df91fe715436415bab38cc1cf5e4b23fbb8497ff688b823c08ba7",
"symbol":"",
"main_chain_symbol":"HECO",
"amount":"0",
"fee_symbol":"HECO",
"fee":"0.00018",
"real_fee":"0.000107277",
"created_at":1684220373000,
"updated_at":1684222558000,
"address_from":"0xd5c2d98BF2d205039F62ee40c9A7ab1B36125d6d",
"address_to":"",
"confirmations":4,
"input_data":"0xca718c65",
"interactive_contract":"0xe012F3957226894B1a2a44b3ef5070417a069dC2",
"status":2400,
"trans_source":2,
"tx_height":3120013
},
{
"id":436,
"request_id":"0000000003",
"sub_wallet_id":1000895,
"txid":"0xeab40bf0072c25514bc61fe58e5e36cc082ea7f50ae33f33013dd365beba9438",
"symbol":"",
"main_chain_symbol":"HECO",
"amount":"0",
"fee_symbol":"HECO",
"fee":"0.00018",
"real_fee":"0.000107277",
"created_at":1684220373000,
"updated_at":1684222558000,
"address_from":"0xBDeBecf1fEDc622Cc50dE2F2aD6925D1EE15fCf9",
"address_to":"",
"confirmations":4,
"input_data":"0xca718c65",
"interactive_contract":"0x0AabA82E4ba9c2Fdf80B9F8E1AcE885f092B64F0",
"status":2400,
"trans_source":2,
"tx_height":3120113
}
]
响应参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
id | Integer | 是 | Web3交易ID |
request_id | String | 是 | 交易唯一标识 |
sub_wallet_id | Integer | 是 | 子钱包ID |
txid | String | 否 | 交易hash |
symbol | String | 否 | 交易币种 |
main_chain_symbol | String | 是 | 主链币币名(唯一标识),例:ETH |
amount | String | 是 | 交易金额。-1表示无穷大 |
fee_symbol | String | 是 | 手续费币种,例:ETH |
fee | String | 是 | 手续费 |
real_fee | String | 是 | 真实消耗的手续费 |
created_at | String | 是 | 创建时间时间戳 |
updated_at | String | 是 | 修改时间时间戳 |
address_from | String | 是 | 交易from地址 |
address_to | String | 是 | 交易to地址 |
interactive_contract | String | 是 | 交互合约 |
confirmations | Integer | 是 | 确认数 |
input_data | String | 是 | 合约交易的方法参数组成的16进制数据 |
status | Integer | 是 | 交易状态: 1100 待签名,1200 支付中,2000 支付完成,2100 审批拒绝,2200 拒绝,2300 交易丢弃,2400 支付失败 |
trans_source | Integer | 是 | 交易类型: 1.app, 2.open-api |
tx_height | Long | 是 | 交易完成的区块高度 |
同步web3交易记录
获取钱包下所有子钱包Web3交易记录,最多返回100条
HTTP请求
GET /api/mpc/web3/sync_trans_list
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
max_id | String | 是 | Web3交易记录起始id |
响应结果示例
[
{
"id":435,
"request_id":"0000000003",
"sub_wallet_id":1000895,
"txid":"0xbc87e486d28df91fe715436415bab38cc1cf5e4b23fbb8497ff688b823c08ba7",
"symbol":"",
"main_chain_symbol":"HECO",
"amount":"0",
"fee_symbol":"HECO",
"fee":"0.00018",
"real_fee":"0.000107277",
"created_at":1684220373000,
"updated_at":1684222558000,
"address_from":"0xd5c2d98BF2d205039F62ee40c9A7ab1B36125d6d",
"address_to":"",
"confirmations":4,
"input_data":"0xca718c65",
"interactive_contract":"0xe012F3957226894B1a2a44b3ef5070417a069dC2",
"status":2400,
"trans_source":2,
"tx_height":3120013
},
{
"id":436,
"request_id":"0000000003",
"sub_wallet_id":1000895,
"txid":"0xeab40bf0072c25514bc61fe58e5e36cc082ea7f50ae33f33013dd365beba9438",
"symbol":"",
"main_chain_symbol":"HECO",
"amount":"0",
"fee_symbol":"HECO",
"fee":"0.00018",
"real_fee":"0.000107277",
"created_at":1684220373000,
"updated_at":1684222558000,
"address_from":"0xBDeBecf1fEDc622Cc50dE2F2aD6925D1EE15fCf9",
"address_to":"",
"confirmations":4,
"input_data":"0xca718c65",
"interactive_contract":"0x0AabA82E4ba9c2Fdf80B9F8E1AcE885f092B64F0",
"status":2400,
"trans_source":2,
"tx_height":3120113
}
]
响应参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
id | Integer | 是 | Web3交易ID |
request_id | String | 是 | 交易唯一标识 |
sub_wallet_id | Integer | 是 | 子钱包ID |
txid | String | 否 | 交易hash |
symbol | String | 否 | 交易币种 |
main_chain_symbol | String | 是 | 主链币币名(唯一标识),例:ETH |
amount | String | 是 | 交易金额。-1表示无穷大 |
fee_symbol | String | 是 | 手续费币种,例:ETH |
fee | String | 是 | 手续费 |
real_fee | String | 是 | 真实消耗的手续费 |
created_at | String | 是 | 创建时间时间戳 |
updated_at | String | 是 | 修改时间时间戳 |
address_from | String | 是 | 交易from地址 |
address_to | String | 是 | 交易to地址 |
interactive_contract | String | 是 | 交互合约 |
confirmations | Integer | 是 | 确认数 |
input_data | String | 是 | 合约交易的方法参数组成的16进制数据 |
status | Integer | 是 | 交易状态: 1100 待签名,1200 支付中,2000 支付完成,2100 审批拒绝,2200 拒绝,2300 交易丢弃,2400 支付失败 |
trans_source | Integer | 是 | 交易类型: 1.app, 2.open-api |
tx_height | Long | 是 | 交易完成的区块高度 |
NFT
获取NFT信息
获取NFT图片,名称等数据
HTTP请求
POST /api/nft/info
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
base_symbol | String | 是 | 主链币 |
contract_address | String | 是 | NFT合约地址 |
token_id | String | 是 | NFT token id |
响应结果示例
{
"base_symbol": "bsc",
"contract_address": "0xC2A19349D5f451071C3085B90f531D19F190FF21",
"token_id": "75000000000000000281",
"nft_name": "#75000000000000000281",
"image": "https://ipfs.io/ipfs/QmXCaMVmRWviaFtRpEH7dJXrJav8dsJdGcsj7M8NpgAgPW",
"image_type": ".svg",
"is_video": false,
}
响应参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
base_symbol | String | 是 | 主链币 |
contract_address | String | 是 | NFT合约地址 |
token_id | String | 是 | NFT token id |
nft_name | String | 是 | NFT 名称, 不存在时, 使用 "# + tokenId", 如: #1000001 |
image | String | 是 | nft图片或视频url, 或图片base64 |
image_type | String | 是 | nft图片或视频类型, 如:".png", ".mp4" |
is_video | Boolean | 是 | 是否是视频, true: image是视屏, 反之不是视频 |
交易通知
统一说明
POST /客户回调通知地址
交易通知请求接口示例
app_id=2128eb8de9e932a4376909f3d69424cc&data=SWYYr-LBVAmaS0eq8n-CUT_nHkM3OBxyWOsImMTe41UaqAoYI2ZghmaphXHov-7hsRsVmOhyPqC-JFuRGvonJKFd2Jirxv6Vn_8V40r_MMYTkhqcviQbZWYW5xX8Ai8CIpqas9fIWVDIYA_NKBl0UCJpwGxscxLNpjq5Z8-BTyIYDsVBquM9zEQGBCfcA7szD9n2fN_loSkoexlwqV8wg9HIZO5yQ6utZ_Kt0lNDQQb8zn8BwfAvsEsbJlOINUAqhxh1vV_AJ4bXn2uYx8TaYcBht-n_ZcBdxIDt975dbOFUiH-oCzIuDi1oLDtb4EylfCvhU5E4ozel_lQ-6cyIG0Dqiiyx0RFFOCJzPSXIoV031pvoa8pTCpkWklh8mRw1rylBgeZtqSxpnJO2_u2RIlXq6Hs8Yly9CmhIXaSrUgPir0h6xVxlf4VC6PFVCkiiTlp0kZ_H_UbKm0nUis3v3U2sflWJ2C449waSrikhuxVrFAQ6PQmrFVCAE6MYXNrFXJQuam2HAIQNSGbFQjspw8b_bXyfyZMGZ3K2oBC4I_v3eETTdPe0pfSNJb-5g37K0tOAr_UFbWK8pkC8yl56fSjn8tcR3yCRWwoi8jxTcUBiswTtvXZtzgG4dyzkaHXjsZjSGiywXSqP76VZWlyOmAx6IDSViLcPLPISdU3ruCI
交易通知请求参数统一格式
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
app_id | String | 必须 | 商户唯一标识 |
data | String | 必须 | 加密之后的字符串,具体加密信息见各接口 请求参数数据结构 |
交易通知响应参数统一格式
返回字符串:SUCCESS
表示成功,FAILURE
表示失败 (注意此处返回参数无需进行加密)
转账通知
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
charset | String | 是 | 编码格式,无特殊情况,传参数utf-8 |
side | String | 是 | 通知类型, 收款通知:deposit , 转账通知: withdraw ,Web3交易通知:web3-trans |
notify_time | String | 是 | 通知时间,例:2022-11-02 11:04:05 |
id | String | 是 | 转账id |
request_id | String | 是 | 转账唯一标识 |
sub_wallet_id | String | 是 | 子钱包id |
symbol | String | 是 | 币种唯一标识,转账时使用,例:USDTERC20 |
amount | String | 是 | 转账金额 |
fee_symbol | String | 是 | 手续费币种,例:ETH |
fee | String | 是 | 手续费,例:0.00123 |
real_fee | String | 是 | 真实消耗的手续费,例:0.00111 |
created_at | String | 是 | 创建时间时间,如:2006-01-02 15:04:05 |
updated_at | String | 是 | 修改时间时间,如:2006-01-02 15:04:05 |
address_from | String | 是 | 出币地址 |
address_to | String | 是 | 到账地址 |
memo | String | 否 | 到账地址memo |
txid | String | 是 | 交易hash |
confirmations | String | 是 | 区块确认数,例:10 |
status | String | 是 | 转账状态: 1000 未审批, 1100 审批通过, 待签名,1200 支付中,2000 支付完成,2100 审批拒绝,2200 拒绝,2300 交易丢弃,2400 支付失败 |
withdraw_source | String | 是 | 转账类型: 1 app, 2 openapi, 3 web |
base_symbol | String | 否 | 转账币种主链唯一标识,例:ETH |
contract_address | String | 否 | 转账币种合约地址 |
tx_height | String | 是 | 交易完成的区块高度 |
收款通知
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
charset | String | 是 | 编码格式,无特殊情况,传参数utf-8 |
side | String | 是 | 通知类型, 收款通知:deposit , 转账通知: withdraw ,Web3交易通知:web3-trans |
notify_time | String | 是 | 通知时间,例:2022-11-02 11:04:05 |
id | String | 是 | 收款id |
sub_wallet_id | String | 是 | 子钱包id |
symbol | String | 是 | 币种唯一标识,例:USDTERC20 |
amount | String | 是 | 收款金额 |
created_at | String | 是 | 创建时间时间,如:2006-01-02 15:04:05 |
updated_at | String | 是 | 修改时间时间,如:2006-01-02 15:04:05 |
address_from | String | 是 | 出币地址 |
address_to | String | 是 | 到账地址 |
memo | String | 否 | 到账地址memo |
txid | String | 是 | 交易hash |
confirmations | String | 是 | 区块确认数,例:10 |
status | String | 是 | 收款状态: 1000 未确认,1100 已确认(交易区块已确认), 2000 已完成(上账已完成),3000 异常 |
base_symbol | String | 否 | 收款币种主链唯一标识,例:ETH |
contract_address | String | 否 | 收款币种合约地址 |
tx_height | String | 是 | 交易完成的区块高度 |
Web3交易通知
请求参数数据结构
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
charset | String | 是 | 编码格式,无特殊情况,传参数utf-8 |
side | String | 是 | 通知类型, 收款通知:deposit , 转账通知: withdraw ,Web3交易通知:web3-trans |
notify_time | String | 是 | 通知时间,例:2022-11-02 11:04:05 |
id | String | 是 | 收款id |
request_id | String | 是 | 转账唯一标识 |
sub_wallet_id | String | 是 | 子钱包id |
main_chain_symbol | String | 是 | 主链币币名(唯一标识),例:ETH |
symbol | String | 否 | 币种唯一标识,例:USDTERC20 |
amount | String | 是 | 交易金额 |
created_at | String | 是 | 创建时间时间,如:2006-01-02 15:04:05 |
updated_at | String | 是 | 修改时间时间,如:2006-01-02 15:04:05 |
address_from | String | 是 | 出币地址 |
address_to | String | 是 | 到账地址 |
txid | String | 是 | 交易hash |
confirmations | String | 是 | 区块确认数,例:10 |
status | String | 是 | 转账状态: 1000 未审批, 1100 审批通过, 待签名,1200 支付中,2000 支付完成,2100 审批拒绝,2200 拒绝,2300 交易丢弃,2400 支付失败 |
interactive_contract | String | 是 | 交互合约 |
fee_symbol | String | 是 | 手续费币种,例:ETH |
fee | String | 是 | 手续费 |
real_fee | String | 是 | 真实消耗的手续费 |
input_data | String | 是 | 合约交易的方法参数组成的16进制数据 |
trans_type | String | 是 | 交易类型, 0:授权交易,1:转账交易 |
dapp_img | String | 是 | dapp 图片 |
dapp_name | String | 是 | dapp名称 |
dapp_url | String | 是 | dapp 访问url |
tx_height | String | 是 | 交易完成的区块高度 |
Co-Signer
概述
Co-Signer可以帮助您快速对接API,需要您单独部署在服务器上。Co-Signer需要绑定您钱包的分片私钥,用于创建地址
和交易签名
。
Co-Signer在交易签名前会回调您的业务系统,得到授权通过后才能发起签名,否则无法进行交易。
归集交易在app端签名授权后,将不会回调客户系统
对接流程
Co-Signer主要实现了两个功能:创建地址和自动签名,调用关系如下图:
创建地址:
自动签名(回调方式):
自动签名(签名sign验证方式):
- 回调方式、和签名sign验证方式可以并存,但是至少需要一种验证,开发者可以按照需要选择验证方式
Co-Signer回调
为了保证交易的安全,您需要在Co-Signer中配置一个业务系统的回调地址,在交易签名之前授权。
授权交易数据采用明文传输,您需要在应用服务中保证业务系统和Co-Signer之间的通信安全。
提现回调
HTTP请求
POST /{url}
Content-Type application/json;charset=UTF-8
回调参数示例
POST /callback/example
{
"type":"sign_start",
"withdraw_id":321456,
"request_id":"c70d1eebb7c687ec8d56bead73f104",
"pending_round":false,
"from":"0xc70d1eebb7c687ec8d56bead73f104d41e6e0bda",
"to":"0x5EDc9177997Bf6B4db559A5C184051858B3B3704",
"memo": "123321",
"amount":167230.4978,
"symbol":"BTC"
}
回调参数格式:
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
type | String | 是 | 回调类型,sign_start 签名开始,sign_success 签名成功 |
withdraw_id | Integer | 是 | 交易ID |
request_id | String | 是 | 发起交易唯一标识 |
pending_round | Boolean | 是 | 加速状态,true是,false否(普通交易) |
from | String | 是 | 交易出币地址 |
to | String | 是 | 交易到账地址 |
memo | String | 否 | 交易到账memo |
amount | Decimal | 是 | 交易金额 |
symbol | String | 是 | 交易币种唯一标识 |
txid | String | 否 | 交易hash,签名成功返回txid |
回调响应参数统一格式
返回字符串:SUCCESS
表示成功,FAILURE
表示失败
Web3交易回调
HTTP请求
POST /{url}
Content-Type application/json;charset=UTF-8
回调参数示例
POST /callback/example
{
"type":"sign_start",
"trans_id":432,
"request_id":"0000000003",
"pending_round":false,
"from":"0xc70d1eebb7c687ec8d56bead73f104d41e6e0bda",
"to":"0x5EDc9177997Bf6B4db559A5C184051858B3B3704",
"amount":0,
"main_chain_symbol":"HECO",
"input_data":"0xca718c65",
"interactive_contract":"0xe012F3957226894B1a2a44b3ef5070417a069dC2",
"txid":"",
}
回调参数格式:
Param | 类型 | 是否必须 | 说明 |
---|---|---|---|
type | String | 是 | 回调类型,sign_start 签名开始,sign_success 签名成功 |
trans_id | Integer | 是 | 交易ID |
request_id | String | 是 | 发起交易唯一标识 |
pending_round | Boolean | 是 | 加速状态,true是,false否(普通交易) |
from | String | 是 | 交易from地址 |
to | String | 是 | 交易to地址 |
amount | Decimal | 是 | 交易金额。-1表示无穷大 |
main_chain_symbol | String | 是 | 主链币币名(唯一标识),例:ETH |
input_data | String | 是 | 交易币种唯一标识 |
interactive_contract | String | 是 | 交互合约 |
txid | String | 否 | 交易hash,签名成功返回txid |
回调响应参数统一格式
返回字符串:SUCCESS
表示成功,FAILURE
表示失败
Co-Signer交易签名验证
Co-Signer为交易提供更安全的双重验证功能。
除Co-Signer回调机制外,客户可以在发起交易时,同时传入sign字段,Co-Signer将额外验证sign是否合法。
错误码
接口错误码表 - 表格
code | msg |
---|---|
0 | 成功 |
100001 | 系统错误 |
100004 | 请求参数不合法 |
100005 | 签名校验失败 |
100007 | 非法IP |
100011 | 余额不足 |
100015 | 商户ID无效 |
100016 | 商户信息过期 |
110055 | 转账地址错误 |
110088 | 请勿重复提交请求 |
110160 | 注册失败 |
110161 | 超过转账最大支持精度 |
110227 | 币种已暂停转账 |
120202 | 币种不支持 |
120204 | 构建交易失败 |
200004 | 暂无权限进行此操作 |
200005 | 钱包不存在 |
200008 | 超出子钱包可创建最大数量 |
200007 | 正在创建子钱包,请耐心等待 |
200011 | 币种地址已存在 |
200013 | 节点配置错误,请联系客服 |
200015 | 签名失败 |
200025 | 正在处理,请耐心等待 |
200040 | 钱包已到期 |
200066 | 子钱包展示最多可操作1000条 |
200067 | 名称超过限制长度 |
210003 | 订单不存在 |
3040006 | 不能给自己转账 |
200071 | 该主链不支持加速 |
200072 | 子钱包类型不支持该类型交易 |
200073 | 多签地址不存在,请检查输入是否正确 |
200074 | 该地址并不是您参与的多签钱包,请检查后再次操作 |
200075 | 预估手续费失败 |
200076 | 暂不支持该交易 |