介绍
欢迎来到 Safeheron 开发者文档页面!Safeheron 提供了丰富的 API ,可以让您完全通过 API 来管理您的团队,自动化您的交易流程。除此之外还提供了 Webhook 消息推送功能,使您能够接收到团队下发生的事件通知。
您可以通过 Safeheron 提供的 API :
- 发起交易,并收到关于交易的实时状态变更通知
- 通过 Safeheron 的 API Co-Signer 设置交易自动签名
- 管理您的钱包账户
- 检查区块链钱包地址是否正确
- ......
所有交易都将反映在 Safeheron 的控制台、交易历史、Webhook 中。
接入指南
概述
请使用具有 API 管理权限的用户账户登录 Safeheron 控制台,在 管理 -> API
标签页进行 Webhook 配置与 API 账户创建,API 账户创建成功后,可以使用 API Key 来访问 Safeheron API 。
API 鉴权
Safeheron 所有的 API 接口在请求时,采用了对称密钥加密和非对称公钥加密的混合加密方案,并且使用非对称私钥对请求参数进行签名。对称加密算法采用 AES-256 算法,非对称加密和签名算法采用 RSA-4096 算法,具体流程如下:
- 将业务请求参数序列化为 JSON 字符串,随机生成 32 字节 AES Key 和 16 字节初始化向量 IV
- 使用 AES Key 和 IV 对该 JSON 字符串进行加密,加密结果 base64 编码后作为请求参数中的
bizContent
字段 - 使用Safeheron 平台的 API RSA 公钥对该 AES Key + IV 48 个字节加密,加密结果 base64 编码后作为请求参数中的
key
字段 - 对所有请求参数按照字典 key 升序排序序列化为字符串,即序列化为
apiKey=...&bizContent=...&key=...×tamp=...
格式 - 使用您的 API RSA 私钥对请求序列化字符串进行签名,签名结果 base64 编码后作为请求参数中的
sig
字段
Safeheron 会使用同样的流程对接口响应业务参数进行加密和签名,您可以使用以下流程进行解密和验签:
- 对响应数据按照字典 key 升序排序序列化为字符串,即序列化为
bizContent=...&code=...&key=...&message=...×tamp=...
格式 - 使用 Safeheron API RSA 公钥,响应序列化字符串和响应中
sig
字段进行验签,如果验签通过,进行响应数据解密 - 使用您的 API RSA 私钥解密响应数据中
key
字段,获取随机 AES Key + IV - 使用该 AES Key 和 IV 解密响应数据中
bizContent
字段,获取响应业务数据明文
您可以使用 OpenSSL 生成 RSA 私钥(api_private.pem
为您的 API RSA 私钥 ):
openssl genpkey -out api_private.pem -algorithm RSA -pkeyopt rsa_keygen_bits:4096
使用 OpenSSL 生成 RSA 私钥对应的公钥(api_public.pem 为您的 API RSA 公钥):
openssl rsa -in api_private.pem -out api_public.pem -pubout
注意:
- 您只需要在 Safeheron 控制台中设置您的 API RSA 公钥,请妥善保管您的 API RSA 私钥,避免泄漏带来安全隐患
IP 白名单
在调用 Safeheron API 时,只允许从您设置的 IP 白名单地址发起请求,您需要在创建 API Key 时设置调用发起的 IP 地址。
请求示例
请求 base URL
https://api.safeheron.vip
加密前请求参数
加密前业务请求参数示例
{
"apiKey": "341916e58af445f8aadeb95170218e37",
"timestamp": "1623038312088",
"bizContent": {
"page": 1,
"pageSize": 1
}
}
具体格式请参考每个接口请求业务参数格式定义,示例参考右侧。
加密后请求参数
加密后的请求参数示例
{
"apiKey": "341916e58af445f8aadeb95170218e37",
"timestamp": "1628652100447",
"bizContent": "qjFMZXs2n+CxnrNGoaZmGrKQzPosy6QbWEumCMkGOEw=",
"key": "gYZvuXdJADuaLYMU3z8q5vOtld62PSaPxrrhhr4UGwWbZm7Pw3/VImzHrd3oNy1XT8R55V7pbpQOBVdbmTev/rESnuaXlGofkB04JWAaRCIPytEKMHUNXZXEU9GLVppYst7bgiekMDIDScS4AkD75eDG8zru5Gr+gTxU4AYyHSzB0deQnxmNRemwZn+jaNgNs7WeBcuQWR1Cq2+1At8FlAqF5XzEaeQ3x1Q0N3iaLzSiXHQRYqP1Q6V6/aiIXchin/X9bBRYL618utjm4k0qoXU8Rw2JeEKzn7m2ShyyQQ31zX/rQ1xf0ar5PDtJPU/qYp9Kr4oVtcN6yHdG802nLqpGYlHlMvxy9vpnGFXb9oxh4xYnp0qRUfKLyJIylc3qhq6spHyWnuC5XV1S4lH+rIPNF1icV08ex7pjps2jvTICBzIIPExBamh1n00RcxZbkGqxYfRZ7SLTUCH06EaV5lP8yXNe3fNWjHk4mppaVDj0QFagqTzBM9AwMfHs1dOeDmcwkTacKQsvNRu3l5uZFQYkaUeVB9m3AhKw3lyl2oJIfJgYeBLJEHMGFVZXP92z8+J5KrZEVfkL8F80XkB3sXRP0BiIv/9Mm4VrjopYoDWyXttCysY0lJ9XImRyE7GkSy2sjmW0BCsrECoVHWh73s9o7Kw0uIegFaitch24GsM=",
"sig": "ZPQcL1aIxMrA6HTq7RWWS8FZS08zSOkS69WohcBw1bDr4Qv2Wkrp2t+PNHMh3TmDUnOmUOiv7mBs/sOw08rhgPHqAU/qtvc1lzJFFOnPp5MBmDgffD1auwm7icGzm3myhEz3hKePxyRgZWB1DpPmMYaRuWt1RYcVmcqRa/Bfd0jR37a35neuOSlaip4jsQE1pHQzQ6itdQhBtZZABl1Plz5u8OaMIDTVj63485zi/n6iuuav+GL+JX2JL6pnWz3CT/9DNqa/McyYbxGswGMBAPgHCptseELVmOQ3ZKNHgMu6EtXEKLzmLeZ5REwnw2MTvpzuy5B1zIuxiafuAhh6Tg=="
}
公共参数描述
参数名 | 类型 | 描述 |
---|---|---|
apiKey | string | 平台分配唯一 API Key 标识 |
timestamp | string | 请求时间戳,UNIX 毫秒格式字符串 |
key | string | 使用 Safeheron API RSA 公钥对随机 AES Key 加密后的数据 |
sig | string | 使用您的 API RSA 私钥对请求参数签名得到的签名数据 |
bizContent | object | 业务请求参数 AES 加密后数据 |
响应示例
响应加密数据示例
响应加密数据示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1628652101098",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "gYZvuXdJADuaLYMU3z8q5vOtld62PSaPxrrhhr4UGwWbZm7Pw3/VImzHrd3oNy1XT8R55V7pbpQOBVdbmTev/rESnuaXlGofkB04JWAaRCIPytEKMHUNXZXEU9GLVppYst7bgiekMDIDScS4AkD75eDG8zru5Gr+gTxU4AYyHSzB0deQnxmNRemwZn+jaNgNs7WeBcuQWR1Cq2+1At8FlAqF5XzEaeQ3x1Q0N3iaLzSiXHQRYqP1Q6V6/aiIXchin/X9bBRYL618utjm4k0qoXU8Rw2JeEKzn7m2ShyyQQ31zX/rQ1xf0ar5PDtJPU/qYp9Kr4oVtcN6yHdG802nLqpGYlHlMvxy9vpnGFXb9oxh4xYnp0qRUfKLyJIylc3qhq6spHyWnuC5XV1S4lH+rIPNF1icV08ex7pjps2jvTICBzIIPExBamh1n00RcxZbkGqxYfRZ7SLTUCH06EaV5lP8yXNe3fNWjHk4mppaVDj0QFagqTzBM9AwMfHs1dOeDmcwkTacKQsvNRu3l5uZFQYkaUeVB9m3AhKw3lyl2oJIfJgYeBLJEHMGFVZXP92z8+J5KrZEVfkL8F80XkB3sXRP0BiIv/9Mm4VrjopYoDWyXttCysY0lJ9XImRyE7GkSy2sjmW0BCsrECoVHWh73s9o7Kw0uIegFaitch24GsM=",
"data": "fVwpf1ektFjHOAGK5D1Da+uza9AMknD8kmidt4aHL82JrsmxUpBMGq/bC2wX52sIRYgMJ5O/8fQhtvTXqWEmHVLxismG5ffYkkYVYRTAuV2sUMlU7nhmC6nDZzds+SOs81brzoS6INlHMp9pI59y9+FBYty8NR5a57UBo3XIsll1fWCHwt9T3OBoWpWmGFENpNGPPSADt/mDzXQRmDgL5KVGNOu8LkAVZmJCjunmX+41RCuhwdUQSWciv578ZI90cI9rRI5RxcxkVyI5XWZsEhCMoASvOQ3PJ0AkB64UigP+Jjj7oD9BnX+xO+9Tw1kGwdkVikG1aWnAd3/XrdeaRL9ZA/0HYZCHZ2VupoQ7GuEYDQ30iWklI4v6Uoofg+hGY872GVmsyTZNe9GMSYV4go69nd8cDiA39mGTSDZWvQ9VYvpeZiuzZpdS/O2UNv82qfujn0OmKup4RscQ5baXVSOgeS8UQVRmo4d7KWdxi2S5WvriM/MKemKM4myoMVi1jN8k2Bd8S/u5yX16d9KLZM8EBhTLxuo3/lMZn505SFqt9RnvF1qCRVDaDboq6r8V91ZOpciDmJyWrYGKleleBBObFRZ+Ro1UoY3IUiwfr98oTXVgDYE3YtcZjkPBi7IXcZIBz8m/of97aBitUn//og=="
}
请参考右侧。
响应参数描述
响应参数 | 类型 | 描述 |
---|---|---|
code | int | 响应结果码 |
message | string | 响应结果描述 |
timestamp | string | 响应时间戳,UNIX 毫秒格式字符串 |
sig | string | 使用 Safeheron API RSA 私钥对响应参数签名得到的签名数据 |
key | string | 使用您的 API RSA 公钥对随机 AES Key 加密后的数据 |
bizContent | object | 业务响应参数 AES 加密后数据 |
响应加密数据解密后示例
[
{
"addressBookKey": "8be8c8de4bf749b3b08137ccxefa0b16",
"addressBookName": "name",
"whiteLists": [
{
"whiteListKey": "fdac862c74734d4fa81d62884f2ce4x0",
"coinKey": "ETH_ROPSTEN",
"coinFullName": "Ethereum(Ropsten)",
"symbol": "ETH",
"address": "0xCa104eA8CB4722e33a3E68eD4D12x3569594FBC5",
"urlAddress": "https://ropsten.etherscan.io/address/0xCa104eA8CB4722e33a3E68eD4D12d3569594xBC5",
"amount": 0,
"usdAmount": 0,
"whiteListStatus": "VERIFY_PASS",
"passNum": 1,
"signNum": 1,
"refuseUserName": ""
}
]
}
]
bizContent 解密后示例
具体格式请参考每个接口响应数据格式定义
API 列表
钱包账户
钱包账户相关接口,可以创建自己的钱包,进行钱包相关的操作。
获取钱包账户列表
根据不同条件组合,筛选团队下钱包账户列表。
HTTP 请求地址
POST /v1/account/list
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
pageNumber | int32 | 否 | 分页页码,从 1 开始,默认为 1 |
pageSize | int32 | 否 | 每页显示条数,默认为 10 ,最大 100 |
hiddenOnUI | boolean | 否 | 筛选是否在 Safeheron App 不展示的钱包账户 true:查询 App 不展示的钱包账户 false:查询 App 展示的钱包账户 不传:默认值,同时查询 App 展示和不展示的钱包账户 |
namePrefix | string | 否 | 筛选钱包账户名称前缀匹配的结果 |
nameSuffix | string | 否 | 筛选钱包账户名称后缀匹配的结果 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": {
"pageNumber": 1,
"pageSize": 10,
"totalElements": 100,
"content": [
{
"accountKey": "accountfd9a0bc50c5f4a53b920c7c0ca85e0b7",
"accountName": "default",
"accountIndex": 0,
"accountType": "VAULT_ACCOUNT",
"hiddenOnUI": false,
"usdBalance": "0",
"pubKeys": [
{
"signAlg": "secp256k1",
"pubKey": "03ba5cfed3f88a811f0208570c64d1627af2e8f3363f65aad22be7490469dadd2a"
}
]
}
]
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
pageNumber | int32 | 分页页码 |
pageSize | int32 | 分页每页条数 |
totalElements | int64 | 总记录数 |
content | array | 每页数据列表 |
└─accountKey | string | 账户 Key ,账户唯一标识 |
└─accountName | string | 账户名称 |
└─accountIndex | int32 | 账户索引 |
└─accountType | string | 账户类型 |
└─hiddenOnUI | boolean | Safeheron App 是否不展示 true: 不展示 false: 展示 |
└─usdBalance | string | 账户余额,查询时 USD 汇率换算余额 |
└─pubKeys | array | 账户公钥信息 |
└─signAlg | string | 签名算法 |
└─pubKey | string | 账户压缩公钥 |
创建钱包账户
创建一个新的钱包账户。
HTTP 请求地址
POST /v1/account/create
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
accountName | string | 否 | 账户名称,最长 30 |
hiddenOnUI | boolean | 否 | 是否在 Safeheron App 不展示 true:不展示 false:展示 默认:false |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": {
"accountKey": "account4b8d2c00520646c8862b68420aa1bc55",
"pubKeys": [
{
"signAlg": "secp256k1",
"pubKey": "03ba5cfed3f88a811f0208570c64d1627af2e8f3363f65aad22be7490469dadd2a"
}
]
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
accountKey | string | 钱包账户 Key |
pubKeys | array | 账户公钥信息 |
└─signAlg | string | 签名算法 |
└─pubKey | string | 账户压缩公钥 |
批量创建钱包账户 V1
根据指定数量创建一批钱包账户,批量创建的钱包账户,Safeheron App 默认不展示,推荐使用 V2 版本接口。
HTTP 请求地址
POST /v1/account/batch/create
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
accountName | string | 否 | 钱包账户名称前缀,最长 30 |
count | int32 | 是 | 创建数量,大于 0,最大 100 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": {
"accountKeyList": [
"account4b8d2c00520646c8862b68420aa1bc55"
]
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
accountKeyList | array | 钱包账户 Key |
批量创建钱包账户 V2
根据指定数量创建一批钱包账户,批量创建的钱包账户,Safeheron App 默认不展示。
HTTP 请求地址
POST /v2/account/batch/create
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
accountName | string | 否 | 钱包账户名称前缀,最长 30 |
count | int32 | 是 | 创建数量,大于 0,最大 100 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": [
{
"accountKey": "account4b8d2c00520646c8862b68420aa1bc55",
"pubKeys": [
{
"signAlg": "secp256k1",
"pubKey": "03ba5cfed3f88a811f0208570c64d1627af2e8f3363f65aad22be7490469dadd2a"
}
]
}
]
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
accountKey | string | 钱包账户 Key |
pubKeys | array | 账户公钥信息 |
└─signAlg | string | 签名算法 |
└─pubKey | string | 账户压缩公钥 |
修改钱包账户 App 展示状态
修改钱包账户在 Safeheron App 的展示状态。
HTTP 请求地址
POST /v1/account/update/show/state
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
accountKey | string | 是 | 钱包账户 Key |
hiddenOnUI | boolean | 是 | 是否在 Safeheron App 不展示 true: App 不展示 false: App 展示 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": {
"result": true
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
result | boolean | 执行结果 true:执行成功 false:执行失败 |
单个钱包账户添加币种
向钱包账户中添加一个币种,并创建该币种的默认地址组信息,返回默认地址组中的地址信息;如果添加的币种在账户下已经存在,则直接返回该币种的默认地址组信息。
在一个钱包账户下,UTXO类型币种可以添加多个地址组,其他币种一般只会存在一个地址组,可以根据 币种列表 接口币种信息中的 isMultipleAddress 属性值确定是否支持添加多个地址组。
HTTP 请求地址
POST /v1/account/coin/create
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
coinKey | string | 是 | 币种 Key |
accountKey | string | 是 | 账户 Key |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": [
{
"address": "0x1ec4fb20d8955d9d6a4ae45f01af04e170c0c022",
"addressType": "DEFAULT"
}
]
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
address | string | 币种收款地址 |
addressType | string | 地址类型 |
批量钱包账户下添加币种
指定批量的钱包账户,给每个账户添加指定的币种信息,并创建币种的默认地址组信息,返回默认地址组中的地址信息,如果有钱包账户已经存在对应的币种,则直接返回该账户已经存在币种的默认地址组地址信息。
HTTP 请求地址
POST /v1/account/batch/coin/create
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
coinKey | string | 是 | 币种 Key |
accountKeyList | array | 是 | 账户 Key ,最大 100 |
addressGroupName | string | 否 | 地址组名称,最长30 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": [
{
"addressList": [
{
"address": "0x1ec4fb20d8955d9d6a4ae45f01af04e170c0c022",
"addressType": "DEFAULT"
}
],
"accountKey": "accountfd9a0bc50c5f4a53b920c7c0ca85e0b7"
}
]
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
addressList | array | 地址列表 |
└─address | string | 币种收款地址 |
└─addressType | string | 地址类型 |
accountKey | string | 账户 Key |
获取钱包账户下币种列表
查询一个钱包账户下的所有币种列表,以及每个币种的默认地址组信息。
HTTP 请求地址
POST /v1/account/coin/list
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
accountKey | string | 是 | 账户 Key |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": [
{
"coinKey": "ETH_ROPSTEN",
"coinFullName": "Ethereum(Ropsten)",
"coinName": "ETH(Ropsten)",
"coinDecimal": 18,
"txRefUrl": "https://ropsten.etherscan.io/tx/{txHash}",
"addressRefUrl": "https://ropsten.etherscan.io/address/{address}",
"logoUrl": "https://resource.safeheron.vip/resource/img/logo/1626851355990.png",
"symbol": "ETH",
"isMultipleAddress": "NO",
"feeCoinKey": "ETH_ROPSTEN",
"feeUnit": "Gwei",
"feeDecimal": 9,
"showCoinDecimal": 8,
"balance": "0",
"usdBalance": "0",
"addressList": [
{
"address": "0x1ec4fb20d8955d9d6a4ae45f01af04e170c0c022",
"addressType": "DEFAULT",
"addressBalance": "0"
}
]
}
]
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
coinKey | string | 币种 Key |
coinFullName | string | 币种全称 |
coinName | string | 币种简称 |
coinDecimal | int32 | 币种精度 |
txRefUrl | string | 引用浏览器交易 |
addressRefUrl | string | 引用浏览器地址 |
logoUrl | string | 币种 LOGO 地址 |
symbol | string | 币种单位名称 |
isMultipleAddress | string | 是否能创建多个地址组 YES:是 NO:否 |
feeCoinKey | string | 转账所消耗的手续费币种 Key ,例如 ERC20 币种转账,所消耗的手续费币种是 ETH |
feeUnit | string | 手续费单位名 ( Gwei,satoshis ) |
feeDecimal | int32 | Safeheron 控制台手续费精度 |
showCoinDecimal | int32 | Safeheron 控制台币种显示精度 |
balance | string | 账户余额 |
usdBalance | string | 账户余额,查询时 USD 汇率换算余额 |
addressList | array | 币种地址列表 |
└─address | string | 币种收款地址 |
└─addressType | string | 地址类型 |
└─addressBalance | string | 币种地址余额 |
钱包账户币种地址组列表
查询钱包账户下某个币种的所有地址组列表。
HTTP 请求地址
POST /v1/account/coin/address/list
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
pageNumber | int32 | 否 | 分页页码,从 1 开始,默认为 1 |
pageSize | int32 | 否 | 每页显示条数,默认为 10 ,最大 100 |
coinKey | string | 是 | 币种 Key |
accountKey | string | 是 | 账户 Key |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": {
"pageNumber": 1,
"pageSize": 10,
"totalElements": 100,
"content": [
{
"addressGroupKey": "addressffb9910f1f324f06a45ef055748fdf43",
"addressGroupName": "AddressName",
"addressList": [
{
"address": "0x1ec4fb20d8955d9d6a4ae45f01af04e170c0c022",
"addressType": "DEFAULT",
"addressBalance": "0"
}
]
}
]
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
pageNumber | int32 | 分页页码 |
pageSize | int32 | 分页每页条数 |
totalElements | int64 | 总记录数 |
content | array | 每页数据列表 |
└─addressGroupKey | string | 地址组 Key |
└─addressGroupName | string | 地址组名称 |
└─addressList | array | 地址列表 |
└─address | string | 币种收款地址 |
└─addressType | string | 地址类型 |
└─addressBalance | string | 币种地址余额 |
查询地址余额信息
根据币种地址查询地址余额信息。
HTTP 请求地址
POST /v1/account/coin/address/info
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
coinKey | string | 是 | 币种 Key |
address | string | 是 | 币种收款地址 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": {
"address": "0x1ec4fb20d8955d9d6a4ae45f01af04e170c0c022",
"addressType": "DEFAULT",
"addressBalance": "0",
"accountKey": "accountfd9a0bc50c5f4a53b920c7c0ca85e0b7"
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
address | string | 币种收款地址 |
addressType | string | 地址类型 |
addressBalance | string | 币种地址余额 |
accountKey | string | 账户 Key |
修改钱包账户币种地址组名称
修改钱包账户下某个币种的地址组名称。
HTTP 请求地址
POST /v1/account/coin/address/name
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
addressGroupKey | string | 是 | 地址组 Key |
addressGroupName | string | 是 | 地址组名称,最长 30 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": {
"result": true
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
result | boolean | 执行结果 true:执行成功 false:执行失败 |
UTXO 类型币种添加地址组
为钱包账户下 UTXO 类型币种添加一个新的地址组,如果该币种不存在,则会先添加该币种,再添加新的地址组,返回添加的地址信息。
HTTP 请求地址
POST /v1/account/coin/address/create
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
coinKey | string | 是 | 币种 Key |
accountKey | string | 是 | 账户 Key |
addressGroupName | string | 是 | 地址组名称,最长 30 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": [
{
"address": "0x1ec4fb20d8955d9d6a4ae45f01af04e170c0c022",
"addressType": "DEFAULT"
}
]
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
address | string | 币种收款地址 |
addressType | string | 地址类型 |
UTXO 类型币种批量添加地址组
对于钱包账户下 UTXO 类型的币种,可以通过指定钱包账户和地址组数量,为该账户批量添加多个地址组,返回添加的地址组信息,如果该 UTXO 类型的币种在账户下不存在,则会先添加该币种,然后再添加对应数量的地址组。
HTTP 请求地址
POST /v1/account/coin/utxo/batch/create
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
coinKey | string | 是 | 币种 Key |
accountKey | string | 是 | 账户 Key |
count | int32 | 是 | 数量,最大100 |
addressGroupName | string | 否 | 地址组前缀名称,最长 30 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": [
{
"addressList": [
{
"address": "0x1ec4fb20d8955d9d6a4ae45f01af04e170c0c022",
"addressType": "DEFAULT"
}
],
"accountKey": "accountfd9a0bc50c5f4a53b920c7c0ca85e0b7"
}
]
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
addressList | array | 地址列表 |
└─address | string | 币种收款地址 |
└─addressType | string | 地址类型 |
accountKey | string | 账户 Key |
币种
币种相关接口,可以查看平台支持的币种、币种维护信息、币种地址校验等。
币种列表
获取 Safeheron 平台支持的币种列表。
HTTP 请求地址
POST /v1/coin/list
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": [
{
"coinKey": "ETH_ROPSTEN",
"coinFullName": "Ethereum(Ropsten)",
"coinName": "ETH(Ropsten)",
"coinDecimal": 18,
"txRefUrl": "https://ropsten.etherscan.io/tx/{txHash}",
"addressRefUrl": "https://ropsten.etherscan.io/address/{address}",
"logoUrl": "https://resource.safeheron.vip/resource/img/logo/1626851355990.png",
"symbol": "ETH",
"isMultipleAddress": "NO",
"feeCoinKey": "ETH_ROPSTEN",
"feeUnit": "Gwei",
"feeDecimal": 9,
"showCoinDecimal": 8,
"coinType": "NATIVE",
"tokenIdentifier": "NATIVE",
"minTransferAmount": "1",
"blockChain": "ethereum",
"network": "ropsten",
"gasLimit": 21000,
"isMemo": "NO",
"isUtxo": "NO",
"blockchainType": "EVM"
}
]
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
coinKey | string | 币种 Key |
coinFullName | string | 币种全称 |
coinName | string | 币种简称 |
coinDecimal | int32 | 币种精度 |
txRefUrl | string | 引用浏览器交易 |
addressRefUrl | string | 引用浏览器地址 |
logoUrl | string | 币种 LOGO 地址 |
symbol | string | 币种单位名称 |
isMultipleAddress | string | 是否能创建多个地址组 YES:是 NO:否 |
feeCoinKey | string | 转账所消耗的手续费币种 Key ,例如 ERC20 币种转账,所消耗的手续费币种是 ETH |
feeUnit | string | 手续费单位名 ( Gwei,satoshis ) |
feeDecimal | int32 | Safeheron 控制台手续费精度 |
showCoinDecimal | int32 | Safeheron 控制台币种显示精度 |
coinType | string | 币种类型 |
tokenIdentifier | string | 合约地址,NATIVE 表示原生资产,非 NATIVE 表示合约地址 |
minTransferAmount | string | 最小转账数量,转账单位为 symbol |
blockChain | string | 区块链 |
network | string | 区块链网络 |
gasLimit | int32 | Safeheron 设定的 gasLimit |
isMemo | string | 是否支付 MEMO 类型 YES:是 NO:否 |
isUtxo | string | 是否是 UTXO 类型,UTXO 类型币种,请 查看 YES:是 NO:否 |
blockchainType | string | 区块链类型 |
币种维护列表
获取 Safeheron 平台处于维护中的币种信息。
HTTP 请求地址
POST /v1/coin/maintain/list
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": [
{
"coinKey": "ETH_ROPSTEN",
"maintain": true,
"title": "ETH Maintenance",
"content": "We will maintain ETH tokens during xxx-xxx",
"startTime": "1635170400000",
"endTime": "1635199200000"
}
]
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
coinKey | string | 币种 Key |
maintain | boolean | 是否处于维护中 |
title | string | 维护标题 |
content | string | 内容 |
startTime | string | 币种维护开始时间,时间 UNIX 毫秒数 |
endTime | string | 币种维护结束时间,时间 UNIX 毫秒数 |
币种地址检查
根据传入的校验属性检查币种地址是否正确。
HTTP 请求地址
POST /v1/coin/address/check
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
coinKey | string | 是 | 币种 Key |
address | string | 是 | 币种收款地址 |
checkContract | boolean | 否 | 检查是否是合约地址 true:检查 false:不检查 |
checkAml | boolean | 否 | 检查aml合法性 true:检查 false:不检查 |
checkAddressValid | boolean | 否 | 检查地址格式有效性 true:检查 false:不检查 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": {
"addressValid": true,
"contract": true,
"amlValid": true
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
addressValid | boolean | 地址格式是否合法 true:地址合法 false:地址不合法 |
contract | boolean | 是否是合约地址 true:是合约地址 false:非合约地址 |
amlValid | boolean | 是否风控限制 true:AML 合法地址 false:AML 黑名单地址 |
币种余额快照
Safeheron 会根据交易区块创建的GMT+8 时间对当天的币种余额进行快照存储,可以传递某一个具体日期,查询当天的币种快照余额。
HTTP 请求地址
POST /v1/coin/balance/snapshot
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
gmt8Date | string | 是 | GMT+8 时间 yyyy-MM-dd 格式字符串 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": [
{
"coinKey": "ETH_ROPSTEN",
"coinBalance": "0"
}
]
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
coinKey | string | 币种 Key |
coinBalance | string | 币种余额,单位为币种列表返回的 symbol |
获取币种当前扫块高度
根据传入的币种Key,查询当前币种对应的扫块高度。
HTTP 请求地址
POST /v1/coin/block/height
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
coinKey | string | 是 | 币种 Key,多个币种 Key 时以英文逗号分割 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": [
{
"coinKey": "ETH_ROPSTEN",
"localBlockHeight": 0
}
]
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
coinKey | string | 币种 Key |
localBlockHeight | int64 | 币种当前扫块高度 |
交易
交易相关接口,可以查询交易信息、发起交易、加速交易、取消交易等操作。
交易列表
根据不同的条件组合,筛选团队下的交易记录。
HTTP 请求地址
POST /v1/transactions/list
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
pageNumber | int32 | 否 | 分页页码,从 1 开始,默认为 1 |
pageSize | int32 | 否 | 每页显示条数,默认为 10 ,最大 100 |
sourceAccountKey | string | 否 | 交易源账户 Key |
sourceAccountType | string | 否 | 交易源账户类型 |
destinationAccountKey | string | 否 | 交易目标账户 Key |
destinationAccountType | string | 否 | 交易目标账户类型 |
createTimeMin | int64 | 否 | 创建时间开始时间,UNIX 时间戳毫秒数 |
createTimeMax | int64 | 否 | 创建时间结束时间,UNIX 时间戳毫秒数 |
txAmountMin | string | 否 | 交易最小金额 |
txAmountMax | string | 否 | 交易最大金额 |
coinKey | string | 否 | 币种 Key,多个币种 Key 时以英文逗号分割 |
feeCoinKey | string | 否 | 手续费币种 Key,多个币种 Key 时以英文逗号分割 |
transactionStatus | string | 否 | 交易状态 |
transactionSubStatus | string | 否 | 交易子状态 |
completedTimeMin | int64 | 否 | 交易完成最小时间,UNIX 时间戳毫秒数 |
completedTimeMax | int64 | 否 | 交易完成最大时间,UNIX 时间戳毫秒数 |
customerRefId | string | 否 | 商户业务唯一 ID 标识 |
realDestinationAccountType | string | 否 | 实际交易目标账户类型 |
hideSmallAmountUsd | string | 否 | 自定义过滤金额,即查询结果不返回低于此金额的交易记录,单位USD |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": {
"pageNumber": 1,
"pageSize": 10,
"totalElements": 100,
"content": [
{
"txKey": "tx46461daa9b7a4612abce99e7ce598844",
"txHash": "0xf7292ea446b573bab7311921e2489fb29d26ec393f2d6c8e280a7157f635234",
"coinKey": "ETH_ROPSTEN",
"txAmount": "0.001",
"sourceAccountKey": "account4b8d2c00520646c8862b68420aa1234234",
"sourceAccountType": "VAULT_ACCOUNT",
"sourceAddress": "0xCa104eA8CB4722e33a3E68eD4D12d3569594FBC5",
"destinationAccountKey": "6553009588f443b1970a5962590a2158",
"destinationAccountType": "WHITELISTING_ACCOUNT",
"destinationAddress": "0xCa104eA8CB4722e33a3E68eD4D12d3569594F234234",
"destinationTag": "TEST",
"transactionStatus": "COMPLETED",
"transactionSubStatus": "CONFIRMED",
"createTime": 1626075236000,
"note": "Initiate transaction",
"auditUserKey": "a1ef6672-c231-43cc-b174-ff30d392e723",
"createdByUserKey": "a1ef6672-c231-43cc-b174-ff30d392e723",
"txFee": "0.000106841386050000",
"feeCoinKey": "ETH_ROPSTEN",
"replaceTxHash": "0x628626531285bb90d4130d3beb3c355d2a7fe0bdfa1fa05e3431f15340aafeb6",
"customerRefId": "a1ef6672-c231-43cc-b174-ff30d392e723",
"customerExt1": "1",
"customerExt2": "2",
"blockHeight": 10000000,
"completedTime": 1626075236000,
"realDestinationAccountType": "VAULT_ACCOUNT",
"transactionSubStatusDesc": "Confirmed",
"txAmountToUsd": "19.9813552",
"sourceAccountName": "wallet1",
"sourceAccountTypeName": "vault",
"destinationAccountName": "API transaction group",
"destinationAccountTypeName": "Whitelisted address",
"auditUserName": "test",
"createdByUserName": "test"
}
]
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
pageNumber | int32 | 分页页码 |
pageSize | int32 | 分页每页条数 |
totalElements | int64 | 总记录数 |
content | array | 每页数据列表 |
└─txKey | string | 交易 Key |
└─txHash | string | 交易 Hash |
└─coinKey | string | 币种 Key |
└─txAmount | string | 交易金额,单位为币种列表返回的 symbol |
└─sourceAccountKey | string | 交易源账户 Key |
└─sourceAccountType | string | 交易源账户类型 |
└─sourceAddress | string | 交易源地址 |
└─destinationAccountKey | string | 交易目标账户 Key |
└─destinationAccountType | string | 交易目标账户类型 |
└─destinationAddress | string | 交易目标地址 |
└─destinationTag | string | 如果目标是tag,memo类型的,都给这个值,可为空 |
└─transactionStatus | string | 交易状态 |
└─transactionSubStatus | string | 交易子状态 |
└─createTime | int64 | 交易创建时间,UNIX 时间戳毫秒数 |
└─note | string | 备注 |
└─auditUserKey | string | 最后审核人 Key |
└─createdByUserKey | string | 创建人 Key |
└─txFee | string | 交易手续费 |
└─feeCoinKey | string | 转账所消耗的手续费币种 Key ,例如 ERC20 币种转账,所消耗的手续费币种是 ETH |
└─replaceTxHash | string | 引用的交易 Hash,只有加速的交易存在该值 |
└─customerRefId | string | 商户业务唯一 ID 标识 |
└─customerExt1 | string | 商户扩展字段 |
└─customerExt2 | string | 商户扩展字段 |
└─blockHeight | int64 | 交易块高度,交易状态为确认中和交易成功时有值 |
└─completedTime | int64 | 交易完成时间 |
└─realDestinationAccountType | string | 实际交易目标账户类型 |
└─transactionSubStatusDesc | string | 交易子状态描述 |
└─txAmountToUsd | string | 交易时 USD 汇率换算金额 |
└─sourceAccountName | string | 交易源账户名称 |
└─sourceAccountTypeName | string | 交易源账户类型名称 |
└─destinationAccountName | string | 交易目标账户名称 |
└─destinationAccountTypeName | string | 交易目标账户类型名称 |
└─auditUserName | string | 最后审核人名称 |
└─createdByUserName | string | 创建人名称 |
创建交易
发起一个新的交易。
HTTP 请求地址
POST /v2/transactions/create
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
customerRefId | string | 是 | 商户业务唯一 ID 标识,最长 100 |
customerExt1 | string | 否 | 商户扩展字段,商户自定义,该字段会透传给商户,最长 255 |
customerExt2 | string | 否 | 商户扩展字段,商户自定义,该字段会透传给商户,最长 255 |
note | string | 否 | 交易备注,最长180 |
coinKey | string | 是 | 币种 Key |
txFeeLevel | string | 否 | 交易手续费费率等级 与交易手续费费率二选一,如果设置了交易手续费费率,优先使用设置的费率 |
feeRateDto | object | 否 | 交易手续费费率,txFeeLevel 和 feeRateDto 二选一 |
└─feeRate | string | 否 | 费率:UTXO 的 feePerByte; EVM 类的 gasPrice; 以及 TRON 的 feeLimit (对于 TRON 也可以不传) |
└─gasLimit | string | 否 | EVM 类的 gasLimit |
└─maxPriorityFee | string | 否 | EIP-1559 的 maxPriorityFee |
└─maxFee | string | 否 | EIP-1559 的 maxFee |
└─gasPremium | string | 否 | FileCoin 的矿工小费费率,类似于 EIP-1559 的 maxPriorityFee |
└─gasFeeCap | string | 否 | FileCoin 的最高手续费费率,类似于 EIP-1559 的 maxFee |
maxTxFeeRate | string | 否 | 设置交易手续费费率等级估算允许的最大手续费费率 |
txAmount | string | 是 | 交易金额 |
sourceAccountKey | string | 是 | 交易源账户 Key |
sourceAccountType | string | 是 | 账户类型 |
destinationAccountKey | string | 否 | 交易目标账户 Key 目标类型为白名单账户时,为白名单 Key 目标类型为钱包账户时,为钱包账户 Key 目标类型为陌生地址时,该参数不传 |
destinationAccountType | string | 是 | 交易目标账户类型 |
destinationAddress | string | 否 | 当 destinationAccountType 为 ONE_TIME_ADDRESS 时,必须传入 |
destinationTag | string | 否 | 交易目标 Tag |
isRbf | boolean | 否 | btc 是否开启 rbf(全称 Replace-by-fee,是比特币内存池中的一种协议,允许使用其他交易将未确认交易进行替换的方式) |
failOnContract | boolean | 否 | 默认【true】,该参数决定了在目标地址为合约地址时是否可以成功发起交易。 若选择了【false】,则目标地址为合约时可以成功发起交易, 若选择了【true】,则目标地址为合约时,交易将会发送失败 |
nonce | int64 | 否 | 自定义 nonce |
balanceVerifyType | string | 否 | 余额检查类型,默认 BALANCE_CHECK |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": {
"txKey": "tx46461daa9b7a4612abce99e7ce598844"
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
txKey | string | 交易 Key |
EVM 以及 UTXO 类交易加速
针对广播中的交易手续费偏低,长时间不上链,进行交易加速;针对 EVM 的交易加速, BTC 的 RBF 加速(当创建交易/create 指定了 isRbf = true 时,该交易进行加速则是 RBF 加速,否则走 CPFP 加速),以及其它 UTXO 类的 CPFP 加速。
HTTP 请求地址
POST /v2/transactions/recreate
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
txKey | string | 是 | 交易 Key |
txHash | string | 是 | 交易 Hash |
coinKey | string | 是 | 币种 Key |
txFeeLevel | string | 否 | 交易手续费费率等级 与交易手续费费率二选一,如果设置了交易手续费费率,优先使用设置的费率 |
feeRateDto | object | 否 | 交易手续费费率,txFeeLevel 和 feeRateDto 二选一 |
└─feeRate | string | 否 | 费率:UTXO 的 feePerByte; EVM 类的 gasPrice; 以及 TRON 的 feeLimit (对于 TRON 也可以不传) |
└─gasLimit | string | 否 | EVM 类的 gasLimit |
└─maxPriorityFee | string | 否 | EIP-1559 的 maxPriorityFee |
└─maxFee | string | 否 | EIP-1559 的 maxFee |
└─gasPremium | string | 否 | FileCoin 的矿工小费费率,类似于 EIP-1559 的 maxPriorityFee |
└─gasFeeCap | string | 否 | FileCoin 的最高手续费费率,类似于 EIP-1559 的 maxFee |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": {
"txKey": "tx46461daa9b7a4612abce99e7ce598844"
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
txKey | string | 交易 Key |
查询单笔交易
查询单笔交易,customerRefId与 txKey 参数二选一必填,如果两个都有值,将按照 txKey 查询。
HTTP 请求地址
POST /v1/transactions/one
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
txKey | string | 否 | 交易 Key |
customerRefId | string | 否 | 商户业务唯一 ID 标识,最长 100 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": {
"txKey": "tx46461daa9b7a4612abce99e7ce598844",
"txHash": "0xf7292ea446b573bab7311921e2489fb29d26ec393f2d6c8e280a7157f635234",
"coinKey": "ETH_ROPSTEN",
"txAmount": "0.001",
"sourceAccountKey": "account4b8d2c00520646c8862b68420aa1234234",
"sourceAccountType": "VAULT_ACCOUNT",
"sourceAddress": "0xCa104eA8CB4722e33a3E68eD4D12d3569594FBC5",
"destinationAccountKey": "6553009588f443b1970a5962590a2158",
"destinationAccountType": "WHITELISTING_ACCOUNT",
"destinationAddress": "0xCa104eA8CB4722e33a3E68eD4D12d3569594F234234",
"destinationTag": "TEST",
"transactionStatus": "COMPLETED",
"transactionSubStatus": "CONFIRMED",
"createTime": 1626075236000,
"note": "Initiate transaction",
"auditUserKey": "a1ef6672-c231-43cc-b174-ff30d392e723",
"createdByUserKey": "a1ef6672-c231-43cc-b174-ff30d392e723",
"txFee": "0.000106841386050000",
"feeCoinKey": "ETH_ROPSTEN",
"replaceTxHash": "0x628626531285bb90d4130d3beb3c355d2a7fe0bdfa1fa05e3431f15340aafeb6",
"customerRefId": "a1ef6672-c231-43cc-b174-ff30d392e723",
"customerExt1": "1",
"customerExt2": "2",
"blockHeight": 10000000,
"completedTime": 1626075236000,
"realDestinationAccountType": "VAULT_ACCOUNT",
"transactionSubStatusDesc": "Confirmed",
"txAmountToUsd": "19.9813552",
"sourceAccountName": "wallet1",
"sourceAccountTypeName": "vault",
"destinationAccountName": "API transaction group",
"destinationAccountTypeName": "Whitelisted address",
"auditUserName": "test",
"createdByUserName": "test"
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
txKey | string | 交易 Key |
txHash | string | 交易 Hash |
coinKey | string | 币种 Key |
txAmount | string | 交易金额,单位为币种列表返回的 symbol |
sourceAccountKey | string | 交易源账户 Key |
sourceAccountType | string | 交易源账户类型 |
sourceAddress | string | 交易源地址 |
destinationAccountKey | string | 交易目标账户 Key |
destinationAccountType | string | 交易目标账户类型 |
destinationAddress | string | 交易目标地址 |
destinationTag | string | 如果目标是tag,memo类型的,都给这个值,可为空 |
transactionStatus | string | 交易状态 |
transactionSubStatus | string | 交易子状态 |
createTime | int64 | 交易创建时间,UNIX 时间戳毫秒数 |
note | string | 备注 |
auditUserKey | string | 最后审核人 Key |
createdByUserKey | string | 创建人 Key |
txFee | string | 交易手续费 |
feeCoinKey | string | 转账所消耗的手续费币种 Key ,例如 ERC20 币种转账,所消耗的手续费币种是 ETH |
replaceTxHash | string | 引用的交易 Hash,只有加速的交易存在该值 |
customerRefId | string | 商户业务唯一 ID 标识 |
customerExt1 | string | 商户扩展字段 |
customerExt2 | string | 商户扩展字段 |
blockHeight | int64 | 交易块高度,交易状态为确认中和交易成功时有值 |
completedTime | int64 | 交易完成时间 |
realDestinationAccountType | string | 实际交易目标账户类型 |
transactionSubStatusDesc | string | 交易子状态描述 |
txAmountToUsd | string | 交易时 USD 汇率换算金额 |
sourceAccountName | string | 交易源账户名称 |
sourceAccountTypeName | string | 交易源账户类型名称 |
destinationAccountName | string | 交易目标账户名称 |
destinationAccountTypeName | string | 交易目标账户类型名称 |
auditUserName | string | 最后审核人名称 |
createdByUserName | string | 创建人名称 |
交易手续费费率估算
发起交易或者加速交易时,可以通过该接口获取对应币种手续费费率估算允许范围,便于选择合适的费率值进行交易。
HTTP 请求地址
POST /v2/transactions/getFeeRate
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
coinKey | string | 是 | 币种 Key |
txHash | string | 否 | 交易 Hash,加速交易估算时传递原交易的 Hash 值 |
sourceAccountKey | string | 否 | 交易源账户 Key,UTXO 币种请提供此参数 |
sourceAddress | string | 否 | 转账源地址,当为 TRON 预估手续费时,必填;当为 EVM 时动态获取链上 gasLimit 时 必填,否则 gasLimit 返回默认固定值 |
destinationAddress | string | 否 | 转账目标地址,当 TRON 预估手续费时,可传(非必传,传了则计算预估手续费会更精确);当为 EVM 时动态获取链上 gasLimit 时 必填,否则 gasLimit 返回默认固定值 |
value | string | 否 | 转账金额,当为 EVM 时,传入金额计算 gasLimit 更加精确;当为 UTXO 时,传入金额预估手续费更加精确,不传金额时按最大 UTXO 数量计算 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": {
"feeUnit": "Gwei",
"highFeeRate": {
"baseFee": "0.000049522",
"fee": null,
"feeRate": "2.000049522",
"gasLimit": "22000",
"maxFee": "2.000112945",
"maxPriorityFee": "2",
"bytesSize": "1",
"gasPremium": "1",
"gasFeeCap": "1"
},
"lowFeeRate": {
"baseFee": "0.000049522",
"fee": null,
"feeRate": "1.100049522",
"gasLimit": "22000",
"maxFee": "1.100055713",
"maxPriorityFee": "1.1",
"bytesSize": "1",
"gasPremium": "1",
"gasFeeCap": "1"
},
"middleFeeRate": {
"baseFee": "0.000049522",
"fee": null,
"feeRate": "1.500049522",
"gasLimit": "22000",
"maxFee": "1.500079325",
"maxPriorityFee": "1.5",
"bytesSize": "1",
"gasPremium": "1",
"gasFeeCap": "1"
},
"minFeeRate": {
"baseFee": "0.000049522",
"fee": null,
"feeRate": "1.000049522",
"gasLimit": "22000",
"maxFee": "1.000049522",
"bytesSize": "1",
"gasPremium": "1",
"gasFeeCap": "1"
}
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
feeUnit | string | 费率单位 |
minFeeRate | object | 最小费率 |
lowFeeRate | object | 普通费率 |
middleFeeRate | object | 快速费率 |
highFeeRate | object | 急速费率 |
└─feeRate | string | 费率,UTXO 的 feePerByte 以及 EVM 类的 gasPrice,以及 TRON 的 feeLimit (费率上限) |
└─fee | string | TRON 链和 UTXO 币种的预估手续费 |
└─gasLimit | string | EVM 类的 gasLimit |
└─baseFee | string | EIP-1559 的 baseFee |
└─maxPriorityFee | string | EIP-1559 的 maxPriorityFee |
└─maxFee | string | EIP-1559 的 maxFee,不同于 API 的 maxTxFeeRate |
└─bytesSize | string | UTXO 字节数,不包含小于 1000 聪的 UTXO |
└─gasPremium | string | FileCoin 的矿工小费费率,类似于 EIP-1559 的 maxPriorityFee |
└─gasFeeCap | string | FileCoin 的最高手续费费率,类似于 EIP-1559 的 maxFee |
取消交易
待授权的交易可以发起取消。
HTTP 请求地址
POST /v1/transactions/cancel
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
txKey | string | 是 | 交易 Key |
txType | string | 否 | 交易类型,默认 TRANSACTION |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": {
"result": true
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
result | boolean | 执行结果 true:执行成功 false:执行失败 |
UTXO 币种归集
对于钱包账户下UTXO 类型多地址币种,可以通过该接口将符合条件的一些地址余额归集到指定的地址中。
HTTP 请求地址
POST /v1/transactions/utxo/collection
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
customerRefId | string | 是 | 商户业务唯一 ID 标识,最长 100 |
customerExt1 | string | 否 | 商户扩展字段,商户自定义,该字段会透传给商户,最长 255 |
customerExt2 | string | 否 | 商户扩展字段,商户自定义,该字段会透传给商户,最长 255 |
note | string | 否 | 交易备注,最长180 |
coinKey | string | 是 | 币种 Key |
txFeeRate | string | 否 | 交易手续费费率,单位为币种列表返回的 feeUnit |
txFeeLevel | string | 否 | 交易手续费费率等级 与交易手续费费率二选一,如果设置了交易手续费费率,优先使用设置的费率 |
maxTxFeeRate | string | 否 | 设置交易手续费费率等级估算允许的最大手续费费率 |
minCollectionAmount | string | 否 | 最小归集金额 |
sourceAccountKey | string | 是 | 交易源钱包账户 Key |
sourceAccountType | string | 是 | 账户类型,传值 VAULT_ACCOUNT |
destinationAccountKey | string | 是 | 交易目标钱包账户 Key |
destinationAccountType | string | 是 | 交易目标账户类型,传值 VAULT_ACCOUNT |
destinationAddress | string | 否 | 交易目标地址 |
destinationTag | string | 否 | 交易目标 Tag |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": {
"txKey": "tx46461daa9b7a4612abce99e7ce598844",
"collectionAmount": "1",
"collectionNum": 10
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
txKey | string | 交易 Key |
collectionAmount | string | 归集金额,单位为币种列表返回的 symbol |
collectionNum | int32 | 归集数量 |
Web3 API
Web3 API 介绍
Safeheron 面向机构级客户,为 DeFi、NFT 等 Web3 应用场景,引入了通用多签审批的安全治理。您可以通过 API 发起 Web3 交易,轻松链接任意 DeFi、NFT 等 Web3 应用,自动化您的 Web3 业务。
支持以下的 API:
- eth_sign
- personal_sign
- eth_signTypedData
- eth_signTransaction
创建 Web3 钱包账户
创建一个新的 Web3 钱包账户。
HTTP 请求地址
POST /v1/web3/account/create
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
accountName | string | 否 | 账户名称,最长 30 |
hiddenOnUI | boolean | 否 | 是否在 Safeheron APP内显示此钱包 true:不展示 false:展示 默认:false |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": {
"accountName": "钱包 11",
"accountKey": "account2024152bd65d4eaa85a26e57497562c1",
"hiddenOnUI": false,
"pubkeyList": [
{
"signAlg": "secp256k1",
"pubkey": "02c165c9a481f6a12eabe0d417ca6e7d04e762c5786afdf55c8c5716a1214b8cbf" }
],
"addressList": [
{
"blockchainType": "EVM",
"address": "0x111111111111111111111111111"
}
]
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
accountKey | string | 账户 Key ,账户唯一标识 |
accountName | string | 账户名称 |
hiddenOnUI | boolean | 是否在 Safeheron APP内显示此钱包 true:不展示 false:展示 |
pubKeyList | array | 账户公钥信息 |
└─signAlg | string | 签名算法,目前支持 secp256k1 |
└─pubKey | string | 账户压缩公钥 |
addressList | array | 地址列表 |
└─blockchainType | string | 区块链类型 |
└─address | string | 币种收款地址 |
批量创建 Web3 钱包账户
根据指定数量创建一批钱包账户,批量创建的 Web3 钱包账户,Safeheron App 默认不展示。
HTTP 请求地址
POST /v1/web3/batch/account/create
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
accountName | string | 否 | 钱包账户名称前缀,最长 30 |
count | int32 | 是 | 创建数量,大于 0,最大 100 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": [
{
"accountKey": "account2024152bd65d4eaa85a26e57497562c1",
"pubkeyList": [
{
"signAlg": "secp256k1",
"pubkey": "02c165c9a481f6a12eabe0d417ca6e7d04e762c5786afdf55c8c5716a1214b8cbf" }
],
"addressList": [
{
"blockchainType": "EVM",
"address": "0x111111111111111111111111111"
}
]
}
]
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
accountKey | string | 账户 Key ,账户唯一标识 |
pubKeyList | array | 账户公钥信息 |
└─signAlg | string | 签名算法,目前支持 secp256k1 |
└─pubKey | string | 账户压缩公钥 |
addressList | array | 地址列表 |
└─blockchainType | string | 区块链类型 |
└─address | string | 币种收款地址 |
获取 Web3 钱包账户列表
根据不同条件组合,筛选团队下 Web3 钱包账户列表。
HTTP 请求地址
POST /v1/web3/account/list
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
direct | string | 否 | 分页查询方向,默认 NEXT |
limit | int32 | 否 | 一次查询多少条,默认最大值 500 |
fromId | string | 否 | 起始钱包的 accountKey |
namePrefix | string | 否 | 筛选钱包账户名称前缀匹配的结果 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": [
{
"accountName": "钱包 11",
"accountKey": "account2024152bd65d4eaa85a26e57497562c1",
"hiddenOnUI": false,
"pubkeyList": [
{
"signAlg": "secp256k1",
"pubkey": "02226320f7571a5b1f2d56f3f1d1b6c4efce9a1a882f8f42bfc37bc7d1f3848cc2"
}
],
"addressList": [
{
"blockchainType": "EVM",
"address": "0x111111111111111111111111111"
}
]
}
]
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
accountKey | string | 账户 Key ,账户唯一标识 |
accountName | string | 账户名称 |
hiddenOnUI | boolean | 是否在 Safeheron APP内显示此钱包 true:不展示 false:展示 |
pubKeyList | array | 账户公钥信息 |
└─signAlg | string | 签名算法,目前支持 secp256k1 |
└─pubKey | string | 账户压缩公钥 |
addressList | array | 地址列表 |
└─blockchainType | string | 区块链类型 |
└─address | string | 币种收款地址 |
创建 ethSign 签名
商户可以通过此接口发起 ethSign 签名。商户侧需要自主完成交易数据的序列化并生成交易数据的 hash (同时支持 0x 和非 0x 开头的数据格式),通过此接口提交 hash 创建签名,签名结果可以通过查询单笔 Web3 签名接口或者 webhook 获取,获取签名后续过程商户根据自身需要自主完成。
HTTP 请求地址
POST /v1/web3/sign/ethSign
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
accountKey | string | 是 | 交易源账户 Key |
customerRefId | string | 是 | 商户业务唯一 ID 标识,最长 100 |
note | string | 否 | 备注 |
customerExt1 | string | 否 | 商户扩展字段,商户自定义,该字段会透传给商户,最长 255 |
customerExt2 | string | 否 | 商户扩展字段,商户自定义,该字段会透传给商户,最长 255 |
messageHash | object | 是 | messageHash |
└─chainId | int64 | 是 | 链ID (chainId 不参与签名,只有 hash 参与签名) |
└─hash | array | 是 | 待签名 Hash ,16 进制字符串 (暂只支持传入1个) |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent":
{
"txKey": "tx7dacce99c5f249b6bf486214596a5458"
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
txKey | string | 交易 Key |
创建 personalSign 签名
商户可以通过此接口发起任意文本的 personalSign 签名。商户侧只需要准备好待签名数据,通过此接口提交待签名数据创建签名,签名结果可以通过查询单笔 Web3 签名接口或者 webhook 获取,获取签名后续过程商户根据自身需要自主完成。
HTTP 请求地址
POST /v1/web3/sign/personalSign
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
accountKey | string | 是 | 交易源账户 Key |
customerRefId | string | 是 | 商户业务唯一 ID 标识,最长 100 |
note | string | 否 | 备注 |
customerExt1 | string | 否 | 商户扩展字段,商户自定义,该字段会透传给商户,最长 255 |
customerExt2 | string | 否 | 商户扩展字段,商户自定义,该字段会透传给商户,最长 255 |
message | object | 是 | message |
└─chainId | int64 | 是 | 链ID (chainId 不参与签名,只有 data 参与签名) |
└─data | string | 是 | 待签名数据 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent":
{
"txKey": "tx7dacce99c5f249b6bf486214596a5458"
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
txKey | string | 交易 Key |
创建 ethSignTypedData 签名
商户可以通过此接口发起特定格式数据 (支持 v1,v3 和 v4 类型的数据格式) 的 ethSignTypedData 签名。商户侧需要自主完成签名数据的格式封装,通过此接口提交特定格式的待签名数据创建签名,签名结果可以通过查询单笔 Web3 签名接口或者 webhook 获取,获取签名后续过程商户根据自身需要自主完成。
HTTP 请求地址
POST /v1/web3/sign/ethSignTypedData
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
accountKey | string | 是 | 交易源账户 Key |
customerRefId | string | 是 | 商户业务唯一 ID 标识,最长 100 |
note | string | 否 | 备注 |
customerExt1 | string | 否 | 商户扩展字段,商户自定义,该字段会透传给商户,最长 255 |
customerExt2 | string | 否 | 商户扩展字段,商户自定义,该字段会透传给商户,最长 255 |
message | object | 是 | message |
└─chainId | int64 | 是 | 链ID (chainId 不参与签名,只有 data 参与签名) |
└─data | string | 是 | 待签名数据 |
└─version | string | 是 | EthSignTypedData 版本 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent":
{
"txKey": "tx7dacce99c5f249b6bf486214596a5458"
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
txKey | string | 交易 Key |
创建 ethSignTransaction 签名
商户可以通过此接口发起 ethSignTransaction 签名交易。商户侧需要准备好 from, to, nonce, gasLimit, gasPrice, value, data 等交易相关数据,通过此接口提交交易数据创建签名,签名结果可以通过查询单笔 Web3 签名接口或者 webhook 获取,获取签名后续过程商户根据自身需要自主完成。
HTTP 请求地址
POST /v1/web3/sign/ethSignTransaction
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
accountKey | string | 是 | 交易源账户 Key |
customerRefId | string | 是 | 商户业务唯一 ID 标识,最长 100 |
note | string | 否 | 备注 |
customerExt1 | string | 否 | 商户扩展字段,商户自定义,该字段会透传给商户,最长 255 |
customerExt2 | string | 否 | 商户扩展字段,商户自定义,该字段会透传给商户,最长 255 |
transaction | object | 是 | transaction |
└─to | string | 否 | to |
└─value | string | 是 | value(单位: wei) |
└─chainId | int64 | 是 | 链ID |
└─gasPrice | string | 否 | gasPrice |
└─gasLimit | int32 | 是 | gasLimit |
└─maxPriorityFeePerGas | string | 否 | EIP-1559 的 maxPriorityFeePerGas |
└─maxFeePerGas | string | 否 | EIP-1559 的 maxFeePerGas |
└─nonce | int64 | 是 | nonce |
└─data | string | 否 | data |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent":
{
"txKey": "tx7dacce99c5f249b6bf486214596a5458"
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
txKey | string | 交易 Key |
取消签名
待授权的签名可以发起取消。
HTTP 请求地址
POST /v1/web3/sign/cancel
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
txKey | string | 是 | 交易 Key |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": {
"result": true
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
result | boolean | 执行结果 true:执行成功 false:执行失败 |
查询单笔 Web3 签名
查询特定的 Web3 签名,customerRefId 与 txKey 参数二选一必填,如果两个都有值,将按照 txKey 查询。
HTTP 请求地址
POST /v1/web3/sign/one
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
txKey | string | 否 | 交易 Key |
customerRefId | string | 否 | 商户业务唯一 ID 标识,最长 100 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent":
{
"txKey":null,
"accountKey":null,
"sourceAddress":null,
"transactionStatus":null,
"transactionSubStatus":null,
"createdByUserKey":null,
"createdByUserName":null,
"createTime":null,
"auditUserKey":null,
"auditUserName":null,
"customerRefId":"{{customerRefId}}",
"note":"",
"customerExt1":null,
"customerExt2":null,
"balance":"0",
"tokenBalance":null,
"symbol":"ETH",
"subjectType":null,
"tokenSymbol":null,
"transaction":{
"to":"TLFNznovqX6FRjk1bkbX47KUGQX2UAaFnY",
"value":"0",
"chainId":1,
"gasPrice":"0",
"gasLimit":0,
"maxPriorityFeePerGas":"0",
"maxFeePerGas":"0",
"nonce":2,
"data":"hexData",
"txHash":null,
"signedTransaction": "",
"sig": {
"hash":"hashString",
"sig": null
}
},
"message":{
"chainId":1,
"data":"json",
"sig": {
"hash":"hashString",
"sig": null
}
},
"messageHash":{
"chainId":1,
"sigList":[
{
"hash":"hashString",
"sig": null
}
]
}
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
txKey | string | 交易 Key |
accountKey | string | 交易源账户 Key |
sourceAddress | string | 交易源地址 |
transactionStatus | string | 交易状态 |
transactionSubStatus | string | 交易子状态 |
createdByUserKey | string | 创建人 Key |
createdByUserName | string | 创建人名称 |
createTime | int64 | 交易创建时间,UNIX 时间戳毫秒数 |
auditUserKey | string | 最后审核人 Key |
auditUserName | string | 最后审核人名称 |
customerRefId | string | 商户业务唯一 ID 标识 |
note | string | 备注 |
customerExt1 | string | 商户扩展字段 |
customerExt2 | string | 商户扩展字段 |
balance | string | 账户余额 |
tokenBalance | string | token余额 |
symbol | string | 币种单位名称 |
tokenSymbol | string | token币种单位名称 |
subjectType | string | 签名类型 |
transaction | object | 当签名类型为 ETH_SIGNTRANSACTION 时,返回此字段 |
└─to | string | to |
└─value | string | value |
└─chainId | int64 | 链ID |
└─gasPrice | string | gasPrice |
└─gasLimit | int32 | gasLimit |
└─maxPriorityFeePerGas | string | EIP-1559 的 maxPriorityFeePerGas |
└─maxFeePerGas | string | EIP-1559 的 maxFeePerGas |
└─nonce | int64 | nonce |
└─data | string | data |
└─txHash | string | 交易 Hash(签名完成的交易返回此字段) |
└─signedTransaction | string | 16进制数据(签名完成的交易返回此字段) |
└─sig | object | 签名 |
└─hash | string | hash |
└─sig | string | 签名(签名完成的交易返回此字段) |
message | object | 当签名类型为 PERSONAL_SIGN 或 ETH_SIGN_TYPED_DATA 时,返回此字段 |
└─chainId | int64 | 链ID |
└─data | string | data |
└─sig | object | 签名 |
└─hash | string | hash |
└─sig | string | 签名(签名完成的交易返回此字段) |
messageHash | object | 当签名类型为 ETH_SIGN 时,返回此字段 |
└─chainId | int64 | 链ID |
└─sigList | array | sigList |
└─hash | string | hash |
└─sig | string | 签名(签名完成的交易返回此字段) |
Web3 签名列表
根据不同的条件组合,筛选团队下的 Web3 签名记录。
HTTP 请求地址
POST /v1/web3/sign/list
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
direct | string | 否 | 分页查询方向,默认 NEXT |
limit | int32 | 否 | 一次查询多少条,默认最大值 500 |
fromId | string | 否 | 起始交易记录 txKey,传入上一次结果的最后一条交易记录的 txKey ,如果第一页不传 |
subjectType | string | 否 | Web3 签名类型 |
transactionStatus | array | 否 | 交易状态 |
accountKey | string | 否 | 交易源账户 Key |
startTime | int64 | 否 | 开始时间,时间 UNIX 毫秒数 |
endTime | int64 | 否 | 结束时间,时间 UNIX 毫秒数 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent":
[
{
"txKey":null,
"accountKey":null,
"sourceAddress":null,
"transactionStatus":null,
"transactionSubStatus":null,
"createdByUserKey":null,
"createdByUserName":null,
"createTime":null,
"auditUserKey":null,
"auditUserName":null,
"customerRefId":"{{customerRefId}}",
"note":"",
"customerExt1":null,
"customerExt2":null,
"balance":"0",
"tokenBalance":null,
"symbol":"ETH",
"subjectType":null,
"tokenSymbol":null,
"transaction":{
"to":"TLFNznovqX6FRjk1bkbX47KUGQX2UAaFnY",
"value":"0",
"chainId":1,
"gasPrice":"0",
"gasLimit":0,
"maxPriorityFeePerGas":"0",
"maxFeePerGas":"0",
"nonce":2,
"data":"hexData",
"txHash":null,
"signedTransaction": "",
"sig": {
"hash":"hashString",
"sig": null
}
},
"message":{
"chainId":1,
"data":"json",
"sig": {
"hash":"hashString",
"sig": null
}
},
"messageHash":{
"chainId":1,
"sigList":[
{
"hash":"hashString",
"sig": null
}
]
}
}
]
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
txKey | string | 交易 Key |
accountKey | string | 交易源账户 Key |
sourceAddress | string | 交易源地址 |
transactionStatus | string | 交易状态 |
transactionSubStatus | string | 交易子状态 |
createdByUserKey | string | 创建人 Key |
createdByUserName | string | 创建人名称 |
createTime | int64 | 交易创建时间,UNIX 时间戳毫秒数 |
auditUserKey | string | 最后审核人 Key |
auditUserName | string | 最后审核人名称 |
customerRefId | string | 商户业务唯一 ID 标识 |
note | string | 备注 |
customerExt1 | string | 商户扩展字段 |
customerExt2 | string | 商户扩展字段 |
balance | string | 账户余额 |
tokenBalance | string | token余额 |
symbol | string | 币种单位名称 |
tokenSymbol | string | token币种单位名称 |
subjectType | string | 签名类型 |
transaction | object | 当签名类型为 ETH_SIGNTRANSACTION 时,返回此字段 |
└─to | string | to |
└─value | string | value |
└─chainId | int64 | 链ID |
└─gasPrice | string | gasPrice |
└─gasLimit | int32 | gasLimit |
└─maxPriorityFeePerGas | string | EIP-1559 的 maxPriorityFeePerGas |
└─maxFeePerGas | string | EIP-1559 的 maxFeePerGas |
└─nonce | int64 | nonce |
└─data | string | data |
└─txHash | string | 交易 Hash(签名完成的交易返回此字段) |
└─signedTransaction | string | 16进制数据(签名完成的交易返回此字段) |
└─sig | object | 签名 |
└─hash | string | hash |
└─sig | string | 签名(签名完成的交易返回此字段) |
message | object | 当签名类型为 PERSONAL_SIGN 或 ETH_SIGN_TYPED_DATA 时,返回此字段 |
└─chainId | int64 | 链ID |
└─data | string | data |
└─sig | object | 签名 |
└─hash | string | hash |
└─sig | string | 签名(签名完成的交易返回此字段) |
messageHash | object | 当签名类型为 ETH_SIGN 时,返回此字段 |
└─chainId | int64 | 链ID |
└─sigList | array | sigList |
└─hash | string | hash |
└─sig | string | 签名(签名完成的交易返回此字段) |
MPC Sign
MPC Sign 介绍
Safeheron 开放了基于 MPC 的底层签名能力,让您能够灵活的将 MPC 签名算法“可签但密钥不可见”的特性应用到您的业务场景中,如:
- DeFi、DEX、GameFi 等合约交互
- 合约 Owner 权限管理
- Token Mint 权限管理
- 构造 Safeheron 暂不支持的区块链转账交易
- 电子签名
- ……
为了说明 MPC Sign 的具体应用,下面以构造并签名一笔 ETH 交易过程为例:
单私钥签名流程如下:
- 准备交易数据:from, to, nonce, gasLimit, gasPrice, value, data
- 序列化:rawTransaction = RLP(from, to, nonce, gasLimit, gasPrice, value, data)
- 计算交易数据 hash: hash = sha3(rawTransaction)
- 对交易数据 hash 使用单私钥进行签名:sig = secp256k1Sign(私钥,hash)
- 组装签名后交易数据:signedRawTransaction = RLP(from, to, nonce, gasLimit, gasPrice, value, data, sig)
- 计算交易 hash: txHash = sha3(signedRawTransaction)
- 广播交易:rpc.submitTransaction(signedRawTransaction)
如果将上述过程自动化完成,单私钥不可避免的要在服务器中使用,从而带来私钥泄露等安全风险。为了解决单私钥的安全问题,您可以采用 Safeheron 提供的 MPC Sign 接口进行分布式签名,Safeheron MPC Sign 签名过程中原始私钥始终不会出现在程序内存中,通过 MPC 技术完成分布式签名,以保护私钥安全。
使用 Safeheron MPC Sign 改造后流程如下:
- [客户]准备交易数据:from, to, nonce, gasLimit, gasPrice, value, data
- [客户]序列化:rawTransaction = RLP(from, to, nonce, gasLimit, gasPrice, value, data)
- [客户]计算交易数据 hash: hash = sha3(rawTransaction)
- [客户 + Safeheron]对交易数据 hash 进行签名:sig = mpcSign(hash)
- [客户]组装签名后交易数据:signedRawTransaction = RLP(from, to, nonce, gasLimit, gasPrice, value, data, sig)
- [客户]计算交易 hash: txHash = sha3(signedRawTransaction)
- [客户]广播:rpc.submitTransaction(signedRawTransaction)
以上两个过程对比可以看出,使用 Safeheron MPC Sign 改造后的流程中,在使用私钥进行签名的过程中使用 Safeheron MPC Sign 对 hash 进行签名,返回签名结果,客户拿到签名结果后应用于自己的业务逻辑。
注:目前 MPC 协议支持 Secp256k1、Ed25519 签名算法,未来会增加对 BLS、Schnorr 等签名算法的支持。
API
创建钱包账户
创建 MPC Sign 交易
商户可以通过此接口发起 MPC Sign 签名交易。商户侧需要自主完成交易数据的序列化并生成交易数据的 hash,通过此接口提交 hash 创建签名交易,签名结果可以通过查询单笔 MPC Sign 交易接口或者 webhook 获取,获取签名后续过程商户根据自身需要自主完成。
HTTP 请求地址
POST /v1/transactions/mpcsign/create
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
customerRefId | string | 是 | 商户业务唯一 ID 标识,最长 100 |
customerExt1 | string | 否 | 商户扩展字段,商户自定义,该字段会透传给商户,最长 255 |
customerExt2 | string | 否 | 商户扩展字段,商户自定义,该字段会透传给商户,最长 255 |
sourceAccountKey | string | 是 | 交易源账户 Key |
signAlg | string | 是 | 签名算法 |
dataList | array | 是 | 交易待签名数据列表 |
└─note | string | 否 | 交易备注,最长180 |
└─data | string | 是 | 待签名数据,具体见下方说明 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": {
"txKey": "tx46461daa9b7a4612abce99e7ce598844"
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
txKey | string | 交易 Key |
查询单笔 MPC Sign 交易
查询特定的 MPC Sign 交易,customerRefId 与 txKey 参数二选一必填,如果两个都有值,将按照 txKey 查询。
HTTP 请求地址
POST /v1/transactions/mpcsign/one
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
txKey | string | 否 | 交易 Key |
customerRefId | string | 否 | 商户业务唯一 ID 标识,最长 100 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": {
"txKey": "tx46461daa9b7a4612abce99e7ce598844",
"transactionStatus": "COMPLETED",
"transactionSubStatus": "CONFIRMED",
"createTime": 1626075236000,
"sourceAccountKey": "accountbb6acc4892264e8c9202b9cd3e3235a3",
"auditUserKey": "a1ef6672-c231-43cc-b174-ff30d392e723",
"createdByUserKey": "a1ef6672-c231-43cc-b174-ff30d392e723",
"customerRefId": "a1ef6672-c231-43cc-b174-ff30d392e723",
"customerExt1": "1",
"customerExt2": "2",
"signAlg": "secp256k1",
"auditUserName": "test",
"createdByUserName": "test",
"hashs": [
{
"note": "Initiate transaction",
"hash": "d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f69",
"sig": "b3d5b45dec592d6ca60455f2926e06e5ff1c81cc4115d44d4b4f9953e6260aee55bc80e341977ab77713c80b31d960be01e09bb19014db49484db45859c77fda00"
}
],
"dataList": [
{
"note": "Initiate transaction",
"data": "d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f69",
"sig": "b3d5b45dec592d6ca60455f2926e06e5ff1c81cc4115d44d4b4f9953e6260aee55bc80e341977ab77713c80b31d960be01e09bb19014db49484db45859c77fda00"
}
]
}
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
txKey | string | 交易 Key |
transactionStatus | string | 交易状态 |
transactionSubStatus | string | 交易子状态 |
createTime | int64 | 交易创建时间,UNIX 时间戳毫秒数 |
sourceAccountKey | string | 交易源账户 Key |
auditUserKey | string | 最后审核人 Key |
createdByUserKey | string | 创建人 Key |
customerRefId | string | 商户业务唯一 ID 标识 |
customerExt1 | string | 商户扩展字段 |
customerExt2 | string | 商户扩展字段 |
signAlg | string | 签名算法 |
auditUserName | string | 最后审核人名称 |
createdByUserName | string | 创建人名称 |
dataList | array | 交易签名数据列表 |
└─note | string | 备注 |
└─data | string | 待签名数据 |
└─sig | string | 交易签名 (sig 的值由32 bytes r + 32 bytes s + 1 byte v组成) |
MPC Sign 交易列表
根据不同的条件组合,筛选团队下的 MPC Sign 交易记录。
HTTP 请求地址
POST /v1/transactions/mpcsign/list
请求参数
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
direct | string | 否 | 分页查询方向,默认 NEXT |
limit | int32 | 否 | 一次查询多少条,默认最大值 500 |
fromId | string | 否 | 起始交易记录 txKey,传入上一次结果的最后一条交易记录的 txKey ,如果第一页不传 |
createTimeMin | int64 | 否 | 创建时间开始时间,UNIX 时间戳毫秒数 |
createTimeMax | int64 | 否 | 创建时间结束时间,UNIX 时间戳毫秒数 |
响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1626336745267",
"sig": "ZHIHfOoAH9WMCK2yXg8TkLSrotntBuVzMjTPTKrffpTb1rQlffTrlIFloinflgje/2gkZ8Jj9OPkOt/J1QDbyAkuQCbwu3lVOur83NzPsckFETbhmRHEUKmZYbNXm3abheVA7wx06NA1jtDy0NgUxL/f8WOJn0T3pUBdSj9lmKdeXJ8K2v9JS1wPDjnW0WTGlxviOgAy2rxRio7cj6f/GrVokN2I6itNYF82njOV2WI3P2fVOBPwq0SoRcFnHcH9OjxmXjJWqrhd/N5V5KfSHUORarDtDGOXuknplJ9bhUjN30lF6FDzidZVyeptbUeNK0yeWRoUVmnt+MhsjOHnyA==",
"key": "y0WmiDSL23d4H5uYgc+F+yopfapj113jZYNK5nEdf7ebETIjb2IWBjaKEIAnbkxE/TJ0C/Y2EUx7D6j8ojuRcji9jnprSvdiRu9po/t08pZ3X9DEV9D6FJEud5xVCdhFLXWynYtmRpo9bGQB840s7Lykc8zM971wEk8vEhDDQeiD6C/JSDPGo6+TuTyKlOdqe9tO2fIX/4FqaYrAe8mC7yOp7oYJqV7oTi5/b8yNI5pgGXhGUqG1QDeDN218vwFctxbae01N3Q1+WgSHO+YhcBIc0bzo8ppSICUSudbY4E0DTRdF89t3df7iL7dd0zB6QWxNjHCKVeu1kmIW7GqLqg==",
"bizContent": [
{
"txKey": "tx46461daa9b7a4612abce99e7ce598844",
"transactionStatus": "COMPLETED",
"transactionSubStatus": "CONFIRMED",
"createTime": 1626075236000,
"sourceAccountKey": "accountbb6acc4892264e8c9202b9cd3e3235a3",
"auditUserKey": "a1ef6672-c231-43cc-b174-ff30d392e723",
"createdByUserKey": "a1ef6672-c231-43cc-b174-ff30d392e723",
"customerRefId": "a1ef6672-c231-43cc-b174-ff30d392e723",
"customerExt1": "1",
"customerExt2": "2",
"signAlg": "secp256k1",
"auditUserName": "test",
"createdByUserName": "test",
"hashs": [
{
"note": "Initiate transaction",
"hash": "d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f69",
"sig": "b3d5b45dec592d6ca60455f2926e06e5ff1c81cc4115d44d4b4f9953e6260aee55bc80e341977ab77713c80b31d960be01e09bb19014db49484db45859c77fda00"
}
],
"dataList": [
{
"note": "Initiate transaction",
"data": "d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f69",
"sig": "b3d5b45dec592d6ca60455f2926e06e5ff1c81cc4115d44d4b4f9953e6260aee55bc80e341977ab77713c80b31d960be01e09bb19014db49484db45859c77fda00"
}
]
}
]
}
响应数据
参数名称 | 数据类型 | 描述 |
---|---|---|
txKey | string | 交易 Key |
transactionStatus | string | 交易状态 |
transactionSubStatus | string | 交易子状态 |
createTime | int64 | 交易创建时间,UNIX 时间戳毫秒数 |
sourceAccountKey | string | 交易源账户 Key |
auditUserKey | string | 最后审核人 Key |
createdByUserKey | string | 创建人 Key |
customerRefId | string | 商户业务唯一 ID 标识 |
customerExt1 | string | 商户扩展字段 |
customerExt2 | string | 商户扩展字段 |
signAlg | string | 签名算法 |
auditUserName | string | 最后审核人名称 |
createdByUserName | string | 创建人名称 |
dataList | array | 交易签名数据列表 |
└─note | string | 备注 |
└─data | string | 待签名数据(注:ed25519算法,此字段不返回) |
└─sig | string | 交易签名 (sig 的值由32 bytes r + 32 bytes s + 1 byte v组成) |
Webhook
Webhook 概述
Safeheron 可以通过 Webhook 主动通知您团队下发生的一些事件通知。比如:
- 创建钱包
- 创建交易
- 交易广播上链
- 交易达到确认数
- ......
如果您需要接收事件通知,可以使用具有API管理权限的用户账户登录Safeheron 控制台,在 设置 -> API 账户管理
界面配置 Webhook 信息。
Webhook 回调时采用与 API 鉴权中相同的数据加密和签名方案,需要您在 Safeheron 控制台配置您的 Webhook RSA 公钥。您可以参考 API 鉴权章节生成 RSA 公私钥对,在 Safeheron 控制台可获取 Safeheron Webhook RSA 公钥,您可以使用该公钥对回调数据进行验签。
回调请求描述
Safeheron 会向您在控制台中设置的 Webhook 回调地址发送一个 POST
请求,HTTP 请求头中 Content-Type
为 application/json;charset=UTF-8
。
回调的请求参数格式如下:
回调请求示例
{
"bizContent": "string",
"sig": "string",
"key": "string",
"timestamp":"string"
}
参数 | 类型 | 描述 |
---|---|---|
timestamp | string | 回调时间戳,UNIX 毫秒格式字符串 |
bizContent | string | 业务请求参数 AES 加密后数据 |
sig | string | 使用 Safeheron Webhook RSA 私钥对请求参数签名得到的签名数据 |
key | string | 使用您的 Webhook RSA 公钥对随机 AES Key 加密后的数据 |
您可以使用以下流程对回调数据进行解密和验签:
- 对回调数据按照字典 key 升序排序序列化为字符串,即序列化为
bizContent=...&key=...×tamp=...
格式 - 使用 Safeheron Webhook RSA 公钥,序列化字符串和回调数据中
sig
字段进行验签,如果验签通过,进行响应数据解密 - 使用您的 Webhook RSA 私钥解密回调数据中
key
字段,获取随机 AES Key + IV - 使用该 AES Key 和 IV 解密回调数据中
bizContent
字段,获取回调业务数据明文
您在收到 Webhook 推送通知后,需要返回成功(HTTP状态码 200 )应答,成功响应内容格式固定为为:
Webhook响应示例
{
"code":200,
"message":"SUCCESS"
}
示例如右侧所示:
参数 | 类型 | 描述 |
---|---|---|
code | string | webhook响应码,成功固定为 200 |
message | string | webhook返回信息,成功固定为 SUCCESS |
Safeheron 在收到非200成功状态码以及响应内容非以上成功格式时,会认为此次推送失败,会再次进行重试推送,再次推送的频率为 30s,1m,5m,1h,12h,24h。
事件格式
bizContent
字段解密后数据格式,如右侧所示:
事件格式示例
{
"eventType": "TRANSACTION_CREATED",
"eventDetail": {
}
}
参数 | 类型 | 描述 |
---|---|---|
eventType | string | 回调事件类型 |
eventDetail | object | 回调事件详情 |
事件类型
eventType | eventDetail | 描述 |
---|---|---|
TRANSACTION_CREATED | TransactionParam | 创建交易 |
TRANSACTION_STATUS_CHANGED | TransactionParam | 交易状态变更 |
MPC_SIGN_CREATED | MPCSignParam | 创建 MPC Sign 交易 |
MPC_SIGN_STATUS_CHANGED | MPCSignParam | MPC Sign 交易状态变更 |
WEB3_SIGN_CREATED | Web3SignParam | 创建 web3 签名交易 |
WEB3_SIGN_STATUS_CHANGED | Web3SignParam | Web3 签名状态变更 |
事件详情
TransactionParam
TransactionParam 示例
{
"txKey": "tx46461daa9b7a4612abce99e7ce598844",
"txHash": "0xf7292ea446b573bab7311921e2489fb29d26ec393f2d6c8e280a7157f635234",
"coinKey": "ETH_ROPSTEN",
"txAmount": "0.001",
"sourceAccountKey": "account4b8d2c00520646c8862b68420aa1234234",
"sourceAccountType": "VAULT_ACCOUNT",
"sourceAddress": "0xCa104eA8CB4722e33a3E68eD4D12d3569594FBC5",
"destinationAccountKey": "6553009588f443b1970a5962590a2158",
"destinationAccountType": "WHITELISTING_ACCOUNT",
"destinationAddress": "0xCa104eA8CB4722e33a3E68eD4D12d3569594F234234",
"destinationTag": "TEST",
"transactionStatus": "COMPLETED",
"transactionSubStatus": "CONFIRMED",
"createTime": 1626075236000,
"note": "Initiate transaction",
"auditUserKey": "a1ef6672-c231-43cc-b174-ff30d392e723",
"createdByUserKey": "a1ef6672-c231-43cc-b174-ff30d392e723",
"txFee": "0.000106841386050000",
"feeCoinKey": "ETH_ROPSTEN",
"replaceTxHash": "0x628626531285bb90d4130d3beb3c355d2a7fe0bdfa1fa05e3431f15340aafeb6",
"customerRefId": "a1ef6672-c231-43cc-b174-ff30d392e723",
"customerExt1": "1",
"customerExt2": "2",
"blockHeight": 10000000,
"completedTime": 1626075236000,
"realDestinationAccountType": "VAULT_ACCOUNT"
}
参数名称 | 数据类型 | 描述 |
---|---|---|
txKey | string | 交易 Key |
txHash | string | 交易 Hash |
coinKey | string | 币种 Key |
txAmount | string | 交易金额,单位为币种列表返回的 symbol |
sourceAccountKey | string | 交易源账户 Key |
sourceAccountType | string | 交易源账户类型 |
sourceAddress | string | 交易源地址 |
destinationAccountKey | string | 交易目标账户 Key |
destinationAccountType | string | 交易目标账户类型 |
destinationAddress | string | 交易目标地址 |
destinationTag | string | 如果目标是tag,memo类型的,都给这个值,可为空 |
transactionStatus | string | 交易状态,交易状态为确认中时,当币种确认数达到币种设定的确认数时,交易状态更新为交易成功 |
transactionSubStatus | string | 交易子状态 |
createTime | int64 | 交易创建时间,UNIX 时间戳毫秒数 |
note | string | 备注 |
auditUserKey | string | 最后审核人 Key |
createdByUserKey | string | 创建人 Key |
txFee | string | 交易手续费 |
feeCoinKey | string | 转账所消耗的手续费币种 Key ,例如 ERC20 币种转账,所消耗的手续费币种是 ETH |
replaceTxHash | string | 引用的交易 Hash,只有加速的交易存在该值 |
customerRefId | string | 商户业务唯一 ID 标识 |
customerExt1 | string | 商户扩展字段 |
customerExt2 | string | 商户扩展字段 |
blockHeight | int64 | 交易块高度,交易状态为确认中和交易成功时有值 |
completedTime | int64 | 交易完成时间 |
realDestinationAccountType | string | 实际交易目标账户类型 |
MPCSignParam
MPCSignParam 示例
{
"txKey": "tx697eebea3a61440a8edf6f0a783d19b2",
"sourceAccountKey": "sourceAccountKey",
"auditUserKey": "a1ef6672-c231-43cc-b174-ff30d392e723",
"createdByUserKey": "a1ef6672-c231-43cc-b174-ff30d392e723",
"createTime": 1626075236000,
"customerRefId": "1639558034534",
"customerExt1": "",
"customerExt2": "",
"signAlg": "secp256k1",
"transactionStatus": "CANCELLED",
"transactionSubStatus": "",
"hashs": [
{
"note": "",
"hash": "d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f69",
"sig":""
}
],
"dataList": [
{
"note": "",
"data": "d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f69",
"sig":""
}
]
}
参数 | 类型 | 描述 |
---|---|---|
txKey | string | 交易 Key |
signAlg | string | 签名算法 |
transactionStatus | string | 交易状态 |
transactionSubStatus | string | 交易子状态 |
sourceAccountKey | string | 源账户 Key |
auditUserKey | string | 最后审核人 Key |
createdByUserKey | string | 创建人 Key |
createTime | int64 | 交易创建时间,UNIX 时间戳毫秒数 |
customerRefId | string | 自定义业务唯一标识,在发起交易时,Safeheron 使用此字段判断进行幂等判断 |
customerExt1 | string | 商户扩展字段 |
customerExt2 | string | 商户扩展字段 |
dataList | array | 交易签名数据列表 |
└─note | string | 交易备注 |
└─data | string | 待签名数据 |
└─sig | string | 交易签名 (sig 的值由32 bytes r + 32 bytes s + 1 byte v组成) |
Web3SignParam
Web3SignParam 示例
{
"txKey":null,
"subjectType":null,
"accountKey":null,
"sourceAccountType":null,
"sourceAddress":null,
"transactionStatus":null,
"transactionSubStatus":null,
"createdByUserKey":null,
"createTime":null,
"auditUserKey":null,
"note":"",
"customerExt1":null,
"customerExt2":null,
"transaction":{
"to":"TLFNznovqX6FRjk1bkbX47KUGQX2UAaFnY",
"value":"0",
"chainId":1,
"gasPrice":"0",
"gasLimit":0,
"maxPriorityFeePerGas":"0",
"maxFeePerGas":"0",
"nonce":2,
"data":"hexData",
"txHash":null,
"signedTransaction": "",
"sig": {
"hash":"hashString",
"sig": null
}
},
"message":{
"chainId":1,
"data":"json",
"sig": {
"hash":"hashString",
"sig": null
}
},
"messageHash":{
"chainId":1,
"sigList":[
{
"hash":"hashString",
"sig": null
}
]
}
}
参数 | 类型 | 描述 |
---|---|---|
txKey | string | 交易 Key |
subjectType | string | 签名类型 |
accountKey | string | 交易源账户 Key |
sourceAccountType | string | 交易源账户类型 |
sourceAddress | string | 交易源地址 |
transactionStatus | string | 交易状态 |
transactionSubStatus | string | 交易子状态 |
createdByUserKey | string | 创建人 Key |
createTime | int64 | 交易创建时间,UNIX 时间戳毫秒数 |
auditUserKey | string | 最后审核人 Key |
note | string | 备注 |
customerExt1 | string | 商户扩展字段 |
customerExt2 | string | 商户扩展字段 |
transaction | object | 当签名类型为 ETH_SIGNTRANSACTION 时,返回此字段 |
└─to | string | to |
└─value | string | value |
└─chainId | int64 | 链ID |
└─gasPrice | string | gasPrice |
└─gasLimit | int32 | gasLimit |
└─maxPriorityFeePerGas | string | EIP-1559 的 maxPriorityFeePerGas |
└─maxFeePerGas | string | EIP-1559 的 maxFeePerGas |
└─nonce | int64 | nonce |
└─data | string | data |
└─txHash | string | 交易 Hash(签名完成的交易返回此字段) |
└─signedTransaction | string | 16进制数据(签名完成的交易返回此字段) |
└─sig | object | 签名 |
└─hash | string | hash |
└─sig | string | 签名(签名完成的交易返回此字段) |
message | object | 当签名类型为 PERSONAL_SIGN 或 ETH_SIGN_TYPED_DATA 时,返回此字段 |
└─chainId | int64 | 链ID |
└─data | string | data |
└─sig | object | 签名 |
└─hash | string | hash |
└─sig | string | 签名(签名完成的交易返回此字段) |
messageHash | object | 当签名类型为 ETH_SIGN 时,返回此字段 |
└─chainId | int64 | 链ID |
└─sigList | array | sigList |
└─hash | string | hash |
└─sig | string | 签名(签名完成的交易返回此字段) |
已接入币种
币种 | 币种确认数 | 账户类型 |
---|---|---|
Ethereum | 12 | ACCOUNT |
Ethereum(Ropsten) | 50 | ACCOUNT |
Bsc | 12 | ACCOUNT |
Heco | 12 | ACCOUNT |
Tron | 20 | ACCOUNT |
Avalanche | 120 | ACCOUNT |
Ether Classic | 500 | ACCOUNT |
FTM | 30 | ACCOUNT |
MATIC | 130 | ACCOUNT |
NEAR | 120 | ACCOUNT |
FIL | 900 | ACCOUNT |
Bitcoin | 2 | UTXO |
Bitcoin cash | 10 | UTXO |
Dash | 10 | UTXO |
API Co-Signer
API Co-Signer 概述
API Co-Signer 用于实现自动化签名流程,需要您私有化部署。API Co-Signer 中包含授权私钥和 MPC 私钥分片,分别用于授权交易和进行 MPC 签名。
API Co-Signer 会将交易审核任务回调您的业务系统,根据您业务系统的响应对交易审核任务进行拒绝或者授权通过。自动化签名流程如下图所示:
Co-Signer 回调
API Co-Signer 会向您配置的回调地址发送一个 POST
请求,HTTP 请求头中 Content-Type
为 application/json;charset=UTF-8
。
API Co-Signer 回调时采用与 API 鉴权中相同的数据加密和签名方案,需要您在 API Co-Signer 配置您的 Callback RSA 公钥。您可以参考 API 鉴权章节生成 RSA 公私钥对。
在配置 API Co-Signer 时需要配置 API RSA 公私钥对与 Safeheron API 网关进行通信,在 API Co-Signer 回调您的业务系统时,复用了 API RSA 公私钥对与您的业务系统进行通信。
回调请求格式
回调的请求参数格式如下:
回调请求示例
{
"bizContent": "string",
"sig": "string",
"key": "string",
"timestamp":"string"
}
参数 | 类型 | 描述 |
---|---|---|
timestamp | string | 回调时间戳 |
bizContent | string | 业务请求参数 AES 加密后数据 |
sig | string | 使用您的 API RSA 私钥对请求参数签名得到的签名数据 |
key | string | 使用您的 Callback RSA 公钥对随机 AES Key 加密后的数据 |
您可以使用以下流程对回调数据进行解密和验签:
- 对回调数据按照字典 key 升序排序序列化为字符串,即序列化为
bizContent=...&key=...×tamp=...
格式 - 使用您的 API RSA 公钥,序列化字符串和回调数据中
sig
字段进行验签,如果验签通过,进行响应数据解密 - 使用您的 Callback RSA 私钥解密回调数据中
key
字段,获取随机 AES Key + IV - 使用该 AES Key 和 IV 解密回调数据中
bizContent
字段,获取回调业务数据明文
回调响应格式
回调响应参数格式如下:
回调响应示例
{
"code": 200,
"message": "SUCCESS",
"timestamp": "1628652100447",
"bizContent": "string",
"key": "string",
"sig": "string"
}
响应参数 | 类型 | 描述 |
---|---|---|
code | int | 响应结果码,用于日志输出,正常返回请使用 200 |
message | string | 响应结果描述,用于日志输出,正常返回请使用 SUCCESS |
timestamp | string | 响应时间戳 |
sig | string | 使用您的 Callback RSA 私钥对响应参数签名得到的签名数据 |
key | string | 使用您的 API RSA 公钥对随机 AES Key 加密后的数据 |
bizContent | object | 业务响应参数 AES 加密后数据 |
您可以使用以下流程对响应数据进行加密和签名:
- 将业务响应参数序列化为 JSON 字符串,随机生成 32 字节 AES Key 和 16 字节初始化向量 IV
- 使用 AES Key 和 IV 对该 JSON 字符串进行加密,加密结果 base64 编码后作为请求参数中的
bizContent
字段 - 使用您的 API RSA 公钥对该 AES Key + IV 48 个字节加密,加密结果 base64 编码后作为请求参数中的
key
字段 - 对所有请求参数按照字典 key 升序排序序列化为字符串,即序列化为
bizContent=...&code=...&key=...&message=...×tamp=...
格式 - 使用您的 Callback RSA 私钥对请求序列化字符串进行签名,签名结果 base64 编码后作为请求参数中的
sig
字段
Co-Signer 回调业务字典
回调字典
参数名称 | 数据类型 | 描述 |
---|---|---|
type | string | 业务类型 |
customerContent | object | 业务内容 |
回调类型
type | customerContent | 描述 |
---|---|---|
TRANSACTION | 交易审核 | 审核交易 |
MPC_SIGN | MPC Sign 审核 | 签名交易 |
Web3_SIGN | Web3 Sign 审核 | Web3 签名交易 |
交易审核
示例
{
"auditRecordKey": "57e3a3e0eb3140c3ba538cc094bcb024",
"txKey": "txc0710da7db2b42ff9bf28df8910f8a88",
"coinKey": "ETH_ROPSTEN",
"txAmount": "0.012000000000000000",
"sourceAddress":"0xCa104eA8CB4722e33a3E68eD4D12d3569594FBC5",
"sourceAccountKey": "accounta5867fecbbbc4a4f876532c87477407a",
"sourceAccountType": "VAULT_ACCOUNT",
"destinationAccountKey": "0259e8c481c345ca922f489961bc331b",
"destinationAccountType": "INTERNAL_WALLET",
"destinationAddress": "0xCa104eA8CB4722e33a3E68eD4D12d3569594FBC5",
"destinationTag": null,
"customerRefId": "123234111112112",
"triggerTime": 1635938498071,
"triggerUserName": "signer",
"txHash": "",
"blockHeight": null,
"feeCoinKey": "ETH_ROPSTEN",
"fee": null,
"customerExt1": "",
"customerExt1": ""
}
参数名称 | 数据类型 | 描述 |
---|---|---|
txKey | string | 交易 Key |
txHash | string | 交易 Hash |
coinKey | string | 币种 Key |
txAmount | string | 交易金额,单位为币种列表返回的 symbol |
sourceAccountKey | string | 交易源账户 Key |
sourceAccountType | string | 交易源账户类型 |
sourceAddress | string | 交易源地址 |
destinationAccountKey | string | 交易目标账户 Key |
destinationAccountType | string | 交易目标账户类型 |
destinationAddress | string | 交易目标地址 |
destinationTag | string | 如果目标是tag,memo类型的,都给这个值,可为空 |
vaultTxDirection | string | 交易方向 |
transactionStatus | string | 交易状态,交易状态为确认中时,当币种确认数达到币种设定的确认数时,交易状态更新为交易成功 |
transactionSubStatus | string | 交易子状态 |
createTime | int64 | 交易创建时间,UNIX 时间戳毫秒数 |
note | string | 备注 |
auditUserKey | string | 最后审核人 Key |
createdByUserKey | string | 创建人 Key |
txFee | string | 交易手续费 |
feeCoinKey | string | 转账所消耗的手续费币种 Key ,例如 ERC20 币种转账,所消耗的手续费币种是 ETH |
replaceTxHash | string | 引用的交易 Hash,只有加速的交易存在该值 |
customerRefId | string | 商户业务唯一 ID 标识 |
customerExt1 | string | 商户扩展字段 |
customerExt2 | string | 商户扩展字段 |
MPC SIGN 审核
示例
{
"auditRecordKey": "57e3a3e0eb3140c3ba538cc094bcb024",
"txKey": "tx697eebea3a61440a8edf6f0a783d19b2",
"triggerTime": 1635938498071,
"triggerUserName": "signer",
"note": "",
"customerRefId": "1639558034534",
"customerExt1": "",
"customerExt2": "",
"signAlg": "secp256k1",
"hashs": [
{
"sourceAccountKey": "sourceAccountKey",
"hash": "d061e9c5891f579fd548cfd22ff29f5c642714cc7e7a9215f0071ef5a5723f69"
}
]
}
参数名称 | 数据类型 | 描述 |
---|---|---|
auditRecordKey | string | 审核记录唯一标识 |
customerRefId | string | 商户业务唯一 ID 标识 |
note | string | 交易备注 |
triggerTime | string | 审核触发时间 |
triggerUserName | string | 审核触发者名称 |
txKey | string | 交易唯一标识 Key |
customerExt1 | string | 商户扩展字段 |
customerExt2 | string | 商户扩展字段 |
signAlg | string | 签名算法 |
hashs | array | 交易签名源账户信息 |
└─sourceAccountKey | string | 源账户 Key |
└─hash | string | 签名 Hash |
Web3 SIGN 审核
示例
{
"txKey":null,
"subjectType":null,
"accountKey":null,
"sourceAddress":null,
"transactionStatus":null,
"transactionSubStatus":null,
"createdByUserKey":null,
"createTime":null,
"auditUserKey":null,
"customerRefId":"",
"transaction":{
"to":"TLFNznovqX6FRjk1bkbX47KUGQX2UAaFnY",
"value":"0",
"chainId":1,
"gasPrice":"0",
"gasLimit":0,
"maxPriorityFeePerGas":"0",
"maxFeePerGas":"0",
"nonce":2,
"data":"hexData",
"txHash":null
},
"message":{
"chainId":1,
"data":"json"
},
"messageHash":{
"chainId":1,
"data":[""]
}
}
参数名称 | 类型 | 描述 |
---|---|---|
txKey | string | 交易 Key |
subjectType | string | 签名类型 |
accountKey | string | 交易源账户 Key |
sourceAddress | string | 交易源地址 |
transactionStatus | string | 交易状态 |
transactionSubStatus | string | 交易子状态 |
createdByUserKey | string | 创建人 Key |
createTime | int64 | 交易创建时间,UNIX 时间戳毫秒数 |
auditUserKey | string | 最后审核人 Key |
customerRefId | string | 商户业务唯一 ID 标识 |
transaction | object | 当签名类型为 ETH_SIGNTRANSACTION 时,返回此字段 |
└─to | string | to |
└─value | string | value |
└─chainId | int64 | 链ID |
└─gasPrice | string | gasPrice |
└─gasLimit | int32 | gasLimit |
└─maxPriorityFeePerGas | string | EIP-1559 的 maxPriorityFeePerGas |
└─maxFeePerGas | string | EIP-1559 的 maxFeePerGas |
└─nonce | int64 | nonce |
└─data | string | data |
└─txHash | string | 交易 Hash |
message | object | 当签名类型为 PERSONAL_SIGN 或 ETH_SIGN_TYPED_DATA 时,返回此字段 |
└─chainId | int64 | 链ID |
└─data | string | data |
messageHash | object | 当签名类型为 ETH_SIGN 时,返回此字段 |
└─chainId | int64 | 链ID |
└─data | array | 待签名 Hash |
响应字典
审核交易任务
参数名称 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
approve | boolean | 是 | 审核结果 true: 审核通过 false: 审核拒绝 |
错误码
错误码 | 描述 |
---|---|
200 | 成功 |
500 | 系统错误 |
1001 | 未知异常,请联系 Safeheron 客服 |
1004 | 重复的请求 |
1005 | 用户无权限 |
1008 | 请求非法 |
1009 | API Key 非法 |
1010 | 参数解密失败 |
1011 | IP 非法 |
1012 | 验签失败 |
1013 | 时间戳检查失败 |
1014 | IP 超过频率限制 |
1015 | 非法的用户状态 |
1016 | 非法的 API Key 状态 |
1017 | 参数校验错误 |
1018 | 请求记录不存在 |
1019 | 参数解析异常 |
1020 | 请求参数错误 |
1021 | CoinKey 不存在 |
1022 | RSA 公钥错误 |
1023 | 您无法请求当前接口,请联系客服升级您的版本 |
3009 | 商户已冻结 |
3010 | 商户已关闭 |
3016 | 请求基础服务失败 |
3017 | 钱包已被禁用 |
3018 | 非法的商户状态 |
3019 | 没有足够的资金来满足提款要求 |
3020 | 非审核状态 |
3021 | 请求交易结果异常 |
3022 | 请求交易失败 |
3023 | 当前钱包不允许该操作 |
3024 | 交易打包数据验证失败 |
3025 | 签名错误 |
3026 | 记录取消 |
3027 | 审核记录已处理 |
3028 | 当前钱包不允许该操作 |
3029 | 输入的 hash 不合法 |
3030 | ChainId 对应的网络不存在 |
3031 | Hash 暂支持传入1个 |
3032 | Data 不能为空 |
3033 | ChainId 不能为空 |
3034 | 数据格式不正确 |
3035 | 数据长度必须介于 0 和 100000 之间 |
3036 | Value 不能为空 |
3037 | Nonce 不能为空 |
3038 | Value 不合法 |
3039 | GasPrice 不合法 |
3040 | GasLimit 过大 |
3041 | MaxPriorityFeePerGas 不合法 |
3042 | MaxFeePerGas 不合法 |
3043 | GasLimit 不能为空 |
3044 | MaxPriorityFeePerGas 小于网络的当前值 |
3045 | MaxFee 太低 |
3046 | GasPrice 和 feePerGas 不能同时为空 |
3047 | 数据长度必须介于 0 和 1000000 之间 |
3048 | Nonce 太小 |
3049 | Nonce 太大 |
3050 | UTXO类型不支持跳过余额检查 |
3051 | 不支持资产 |
3052 | Version 不能为空 |
3053 | Version 错误 |
3054 | 不支持加速币种 |
3055 | 请在创建资产之前备份私钥 |
3056 | FeeRate 必须大于 0 |
3057 | GasLimit 必须大于 0 |
3058 | MaxPriorityFee 必须大于 0 |
3059 | MaxFee 必须大于 0 |
3060 | Hashs 和 dataList 不能同时为空 |
3061 | 不支持此算法 |
3062 | 不支持此应用程序 |
3063 | 签名数据太长 |
3064 | 交易金额不能为 0 |
3065 | 无效的接收地址 |
3066 | GasFeeCap 过低 |
3067 | CoSigner 版本过低 |
9001 | 商户业务唯一 ID 已经存在 |
9002 | 系统维护中,暂停转账 |
9003 | 发送数量的小数精度错误 |
9004 | 费率的小数精度不正确 |
9005 | 隐藏账户不允许修改名称 |
9006 | 隐藏的账户不允许提币 |
9007 | 源账户已冻结 |
9008 | 地址已经存在 |
9009 | 地址格式错误 |
9010 | 存款地址存在安全隐患 |
9011 | 地址薄已经存在该币种 |
9012 | 地址不存在 |
9013 | 白名单地址状态非法 |
9015 | 目标账户被冻结 |
9016 | 该转账地址存在安全风险,为了您的资产安全,请谨慎操作,如有疑问请联系 Safeheron 支持团队 |
9017 | 手续费不足 |
9018 | 手续费过高 |
9019 | 手续费过低 |
9020 | TRX 币种不支持源地址和目标地址为同一个地址 |
9021 | 要替换的交易不存在 |
9022 | 处于“广播中”的交易才能加速 |
9023 | 不支持加速的币种 |
9024 | 试图由未经授权的用户发起或批准交易 |
9025 | 取款的金额低于规定的最低限额 |
9026 | 没有足够的资金来满足提款要求 |
9027 | 匹配到策略,但审核人不是可以审核的角色 |
9028 | 缺乏相应的交易策略 |
9030 | 非可以取消的状态 |
9031 | 线上预估手续费大于设置最高手续费限制 |
9032 | 非 UTXO 类型币种 |
9033 | 白名单地址组名称已存在 |
9034 | 地址与 ID 不匹配 |
9035 | 交易记录不存在 |
9036 | 源账户不存在 |
9037 | 账户币种不存在 |
9038 | 暂不支持该币种 |
9039 | 钱包账户数量超过限制 |
9040 | 地址数量超过限制 |
9041 | 钱包名称已存在 |
9042 | 不满足 UTXO 资金归集要求 |
9043 | MPC Sign 当前只支持同一账号 |
9044 | Hash 不合法 |
9045 | 其他地址薄已存在该地址 |
9046 | 交易号不存在 |
9047 | Gaslimit小于最小值 |
9048 | 风控异常检测 |
9049 | 该转账地址存在安全风险 |
9050 | 地址格式错误 |
9051 | 正在广播中请耐心等待 |
9052 | 交易输出已使用,无法加速 |
9053 | 加速交易已上链或nonce已被占用 |
9054 | 白名单地址必须处于已批准状态才能允许转移 |
9055 | UTXO不足 |
9056 | 加速不能重复 |
9057 | RBF加速交易费率高于加速交易费率 |
数据字典
交易状态
字典码 | 描述 |
---|---|
SUBMITTED | 待授权 |
SIGNING | 签名中 |
BROADCASTING | 广播中 |
CONFIRMING | 确认中 |
CANCELLED | 交易取消 |
COMPLETED | 交易成功 |
FAILED | 交易失败 |
REJECTED | 拒绝 |
交易子状态
字典码 | 描述 |
---|---|
CONFIRMED | 确认 |
UN_KNOW_ERROR | 意外错误 |
REVIEW_REJECTED | 审核拒绝 |
TRADING_STRATEGY_BLOCKING | 交易策略阻断 |
MATCHING_RULE_NO_AUDITOR | 匹配到策略,但editor不是可以审核的角色 |
TX_INFO_ERROR | 交易失败 |
NONCE_TOO_LOW | nonce过低 |
INTRINSIC_GAS_TOO_LOW | GasLimit太小,无法完成交易执行 |
INSUFFICIENT_FUNDS | 没有足够的资金来满足提款要求 |
AMOUNT_TOO_SMALL | 取款的金额低于规定的最低限额 |
TRANSACTION_UNDERPRICED | 手续费太小,交易被节点拒绝 |
MISSING_INPUTS | 无效的input |
INVALID_SIGNATURE | 无效的交易签名 |
INTERNAL_ERROR | 处理交易时出现内部错误 |
TIMEOUT | 交易请求已超时 |
PENDING_BLOCKCHAIN_CONFIRMATIONS | 等待区块链确认 |
TAPOS_ERROR | Tapos检查错误 |
NODE_SERVER_BUSY | 节点服务忙 |
DUP_TRANSACTION_ERROR | 交易已上链,再次提交了相同交易 |
TRANSACTION_EXPIRATION_ERROR | 交易过期失效 |
TRANSACTION_EXECUTION_FAILED | 交易上链执行失败 |
BANDWITH_ERROR | 特指Tron交易,账户资源不足,可提高手续费或者购买资源(带宽或能量)后再发起交易 |
ACCOUNT_DOES_NOT_EXIST | 账户不存在 |
NO_MATCHING_RULE_FOUND | 交易失败,请先配置交易策略 |
WHITELIST_ADDRESS_STATUS_ILLEGAL | 白名单地址状态未审核通过 |
AML_SCREENING_REJECTED | AML检查拒绝 |
CONTRACT_VALIDATE_ERROR | 交易检验错误 |
THE_DEAL_WAS_ABANDONED | 交易被废弃 |
MANUAL_TX_FAIL | 人工处理 |
CANCELLED_BY_USER | 用户取消交易 |
RISK_CHECK_ILLEGAL | 风控检测异常 |
WALLET_NOT_ALLOWED | 该钱包不支持当前操作 |
USER_NO_PERMISSION | 用户无权限 |
PROCESSING_EXCHANGE | 交易所正在处理 |
PENDING_EXCHANGE | 等待交易所确认 |
CANCELED_EXCHANGE | 交易所取消交易 |
FAILED_EXCHANGE | 交易所交易失败 |
CONFIRMING_EXCHANGE | 交易所交易确认中 |
CONFIRMED_EXCHANGE | 交易所交易完成确认 |
EXCHANGE_CALL_ERROR | 调用交易所服务异常 |
EXCHANGE_SIGNATURE_ERROR | 交易所签名失败 |
EXCHANGE_WHILELIST_UNSET_ERROR | 未在交易所设置提币地址 |
EXCHANGE_EMAIL_CONFIRMING | 等待邮件确认 |
EXCHANGE_UN_KNOW_ERROR | 意外错误 |
EXCHANGE_ADDRESS_ERROR | 交易所报错地址错误 |
EXCHANGE_IP_ERROR | 交易所IP地址错误 |
EXCHANGE_INVALID_API | 交易所无效的API账号 |
EXCHANGE_TRANS_PERMISSION_DENIED | 交易所API无提币权限 |
EXCHANGE_INVALID_INFO | 无效的API密钥,IP或操作权限 |
EXCHANGE_TRANS_LIMIT | 交易所限制此帐户转出 |
EXCHANGE_AMOUNT_OVER_LIMIT | 转出金额超过上限 |
EXCHANGE_BALANCE_LACK | 可用余额不足 |
Web3 交易状态
字典码 | 描述 |
---|---|
SUBMITTED | 待授权 |
SIGNING | 签名中 |
CANCELLED | 已取消 |
SIGN_COMPLETED | MPC签名成功 |
FAILED | 失败 |
REJECTED | 已拒绝 |
交易手续费费率等级
字典码 | 描述 |
---|---|
LOW | 低 |
MIDDLE | 中 |
HIGH | 高 |
账户类型
字典码 | 描述 |
---|---|
VAULT_ACCOUNT | 金库账户 |
交易源账户类型
字典码 | 描述 |
---|---|
VAULT_ACCOUNT | 金库账户 |
UNKNOWN | 外部账户 |
交易目标账户类型
字典码 | 描述 |
---|---|
VAULT_ACCOUNT | 金库账户 |
WHITELISTING_ACCOUNT | 白名单账户 |
ONE_TIME_ADDRESS | 陌生地址账户 |
币种白名单状态
字典码 | 描述 |
---|---|
VERIFY_PENDING | 审核中 |
VERIFY_PASS | 审核通过 |
VERIFY_REFUSE | 审核拒绝 |
AML_REFUSE | 风控拒绝 |
交易方向
字典码 | 描述 |
---|---|
RECEIVE | 收,源账户为外部账户,目标账户为平台账户 |
SEND | 发,源账户为金库账户 |
SEND_SELF | 发给自己,源账户为金库账户,目标账户为金库账户 |
币种类型
字典码 | 描述 |
---|---|
NATIVE | 原生资产,比如 ETH、BTC |
ERC20 | ETH 上的代币标准 |
OMNI | BTC 上的代币标准 |
TRC20 | TRON 上的代币标准 |
BEP20 | BSC 上的代币标准 |
地址类型
字典码 | 描述 |
---|---|
DEFAULT | 普通地址 |
P2PKH | 普通地址 |
P2WPKH | 隔离见证地址 |
P2PKH_CASH | BCH 格式普通地址 |
交易类型
字典码 | 描述 |
---|---|
TRANSACTION | 交易 |
MPC_SIGN | 原始签名 |
Web3 签名类型
字典码 | 描述 |
---|---|
ETH_SIGN | ethSign 签名 |
PERSONAL_SIGN | personalSign 签名 |
ETH_SIGN_TYPED_DATA | ethSignTypedData 签名 |
ETH_SIGNTRANSACTION | ethSignTransaction 签名 |
签名算法
字典码 | 描述 |
---|---|
secp256k1 | secp256k1 |
ed25519 | ed25519 |
分页查询方向
字典码 | 描述 |
---|---|
PREV | 向前 |
NEXT | 向后 |
余额检查类型
字典码 | 描述 |
---|---|
BALANCE_CHECK | 余额检查 |
NON_CHECK | 不检查 |
EthSignTypedData 版本
字典码 | 描述 |
---|---|
ETH_SIGNTYPEDDATA_V1 | eth_signTypedData_v1 |
ETH_SIGNTYPEDDATA_V3 | eth_signTypedData_v3 |
ETH_SIGNTYPEDDATA_V4 | eth_signTypedData_v4 |
API SDK
我们提供 Java/js/golang/python 四种语言的 API SDK:
- Java
- JavaScript & TypeScript
- Golang
- Python: Coming soon
更新日志
2023-03-16 v2.1.4
创建交易
接口添加 gasPremium 、gasFeeCap 字段交易手续费费率估算
接口返回值添加 bytesSize、gasPremium、gasFeeCap 字段
2023-02-17 v2.1.3
- 签名算法支持 ed25519
创建 MPC Sign 交易
接口添加 dataList 字段查询单笔 MPC Sign 交易
、MPC Sign 交易列表
接口返回值添加 dataList 字段- Webhook MPCSign 回调添加 dataList 字段
交易手续费费率估算
接口添加 sourceAccountKey 字段
2022-11-24 v2.1.2
交易列表
接口添加hideSmallAmountUsd
查询条件
2022-11-03 v2.1.1
- 新增
批量创建 Web3 钱包账户
接口 币种列表
接口返回值添加 blockchainType 字段- Webhook 回调 新增
WEB3_SIGN_CREATED
、WEB3_SIGN_STATUS_CHANGED
类型 交易手续费费率估算
接口添加 value 字段
2022-09-27 v2.1.0
- 新增
创建 Web3 钱包账户
、获取 Web3 钱包账户列表
接口 - 新增
创建 ethSign 签名
、创建 personalSign 签名
、创建 ethSignTypedData 签名
、创建 ethSignTransaction 签名
、取消签名
接口 - 新增
查询单笔 Web3 签名
、Web3 签名列表
接口 创建交易
接口添加 nonce 、balanceVerifyType 字段
2022-06-30 v2.0.0
- 发布 V2.0.0 版本接口
- 增加文档版本切换功能
- EVM 类币种交易手续费支持 EIP-1559
2022-06-18 v1.0.4
- 增加英文文档
- API 删除
地址簿列表
、创建地址簿
、删除地址簿
、获取单个地址簿白名单列表
、地址薄添加币种白名单
、地址薄删除币种白名单
接口 - Webhook 删除
ACCOUNT_CREATED
、ACCOUNT_COIN_CREATED
、ADDRESS_BOOK_WHITE_LIST_CREATED
、ADDRESS_BOOK_WHITE_LIST_AUDIT_PASSED
、ADDRESS_BOOK_WHITE_LIST_AUDIT_REFUSED
事件类型
2022-01-18 v1.0.3
创建钱包账户
、、获取钱包账户列表
接口返回账号压缩公钥信息- 新增
批量创建钱包账户 V2
接口 - 新增
查询地址余额信息
接口 - 新增
创建 MPC Sign 交易
、MPC Sign 交易列表
、查询单笔 MPC Sign 交易
接口 取消交易
接口 添加 txType 字段- API Co-Signer 审核任务新增 MPC_SIGN 类型
- Webhook 回调 新增
MPC_SIGN_CREATED
、MPC_SIGN_STATUS_CHANGED
类型 - 删除
修改钱包账户名称
接口 - 删除
交易列表
接口vaultTxDirection
查询条件 交易列表
接口添加feeCoinKey
查询条件,conKey
查询支持多个币种 Key- 添加
获取币种当前扫块高度
接口
2021-12-03 v1.0.2
- 新增
UTXO 归集交易
接口 - 新增
币种余额快照查询
接口 获取钱包账户列表
接口添加 amlLockUsdBalance 字段创建交易
接口添加 customerExt1 、customerExt2 字段交易列表查询
、单个交易查询
接口返回值添加 customerExt1 、customerExt2、completedTime、amlLock、destinationTag、realDestinationAccountType 字段获取钱包账户下币种列表
接口将原来币种下的 amlLock 字段移动到地址信息中,添加 amlLockBalance 、 amlLockUsdBalance 字段单个钱包账户添加币种
、批量钱包账户下添加币种
、钱包账户币种地址组列表
、UTXO 类型币种添加地址组
、UTXO 类型币种批量添加地址组
接口返回的地址信息中添加 amlLock 字段- API Webhook 交易推送添加 customerExt1 、customerExt2 、amlLock、vaultTxDirection、realDestinationAccountType 字段
- Webhook TransactionParam 中的 status 和 subStatus 修改为 transactionStatus 和 transactionSubStatus
交易列表查询
增加 completedTimeMin、completedTimeMax、 vaultTxDirection、customerRefId、transactionSubStatus、realDestinationAccountType 查询条件
2021-11-17 v1.0.1
- API 版本优化
2021-08-31 v1.0.0
- 创建文档