比特币(BTC)钱包对接之如何实现平台用户注册地址生成?


2020年有大量的传统金融机构进军比特币市场,使得比特币一路高歌猛进。

 
2021年比特币继续上涨,2月16日突破5万美元关口,再破历史新高,引发了市场新的热点和主流社会的关注,使得市场对于比特币未来的信心激增。

 

像特斯拉这样全球知名的企业,以及马斯克等一众有影响力的人物都来力挺比特币,未来比特币价格继续持续上涨并非稀奇。

而更为重要的是,区块链技术的应用发展会得到更多关注,区块链行业也会更加壮大。目前去中心化金融应用的发展在突飞猛进,锚定比特币的稳定币也在不断增长,扩大去中心化金融应用的市场规模。

2021年数字资产市场会有更多奇迹出现,行业发展将会进入加速期。

渠道合规,使得机构投资有更好的入口,交易平台合规化成为数字资产行业发展重要趋势。

经过十几年的发展,比特币成为交易平台最广泛上线的加密数字货币之一。由于在区块链网络上进行的是价值的传递,所以对账户、钱包以及交易过程的保护显得至关重要。

随着比特币价值的增加,作为汇聚巨额资金流的交易平台所面临潜在的安全威胁和攻击者也相应增加,资产安全成为交易平台赖以生存的关键。交易所等业务系统如何保证交易便捷性和资产安全性?

对于交易所这种业务型系统,选择钱包的时候需要考虑的问题,应该是安全的同时也需要快速的业务对接。在业务上常见的难点有:安全、跨链整合、庞大的数据量、还有其他的业务需求比如生成地址、地址管理、资金管理、交易记录管理、充提币及回调等等

比特币(BTC)钱包对接之如何实现平台用户注册地址生成?以某业内知名的企业级区块链钱包系统为例,如何快捷接入实现交易所平台用户注册地址生成?

详细的钱包接口文档如下:

原文链接:https://www.uduncloud.com/gateway-interface

1、目录

1.1、生成地址

1.2、提币

1.3、代付

1.4、交易回调

1.5、校验地址合法性

1.6、获取商户支持币种信息

2、接口明细

1、生成地址

1.1 场景说明

请求指定币种地址,如要成功获取地址,需先存在钱包,且钱包支持该币种

1.2.1 接口地址

接口详情

 

URL

【/mch/address/create】

请求方式

POST

1.2.2 参数

1.2.2.1 参数说明

参数

类型

是否必填

说明

备注

timestamp

String

时间戳

见验签说明

nonce

String

随机数

见验签说明

sign

String

签名

见验签说明

body

String

消息内容

json字符串,格式如下

[

    {

     "merchantId":"300015",

     "coinType":520,

     "callUrl":"http://localhost:8080/callBack"

    }

]

1.2.2.2 body参数字段

body参数名

类型

是否必填

说明

merchantId

String

商户号

coinType

Integer

主币种编号,见附录一

callUrl

String

回调地址,通过该接口创建的地址,以后关于该地址的充币信息会通过您指定的回调地址通知您。具体示例见交易回调接口

1.2.2.3 示例

{

    "timestamp": 1535005047,

    "nonce": 10000,

    "sign": "a230def43c1a12b14393880a28d4e005",

    "body": "[{"merchantId":"300015","coinType":520,"callUrl":"http://localhost:8080/callBack"}]"

}

1.2.3 返回状态码表

code

解释

200

成功

4005

非法参数

4001

商户不存在

4169

商户已禁用

4162

签名错误

4175

钱包编号错误

4017

商户没有创建钱包

4176

钱包未添加支持该币种

4166

商户没有配置套餐

4168

商户地址达到上限

4045

币种信息错误

-1

获取地址失败

1.3 调取示例

1.3.1 成功

{

    "data":{

        "coinType":520,

        "address":"0xbe4e3699cb870bc95365fe04a187dd279a651a58"

    },

    "message":"SUCCESS",

    "code":200

}

1.3.2 失败

{

    "code": "4101",

    "message": "SIGN_MSG_ERROR"

}

2、发送提币申请

2.1 场景说明

提币申请

2.2 接口详情

2.2.1 接口地址

接口详情

 

URL

【/mch/withdraw】

请求方式

POST

2.2.2 参数

2.2.2.1 参数说明

参数

类型

是否必填

说明

备注

timestamp

String

时间戳

见验签说明

nonce

String

随机数

见验签说明

sign

String

签名

见验签说明

body

String

消息内容

json字符串,格式如下

[

    {

        "address":"raadSxrUhG5EQVCY75CSGaVLWCeXd6yH6s",

        "amount":"0.11",

        "merchantId":"100109",

        "mainCoinType":"144",

        "coinType":"144",

        "callUrl":"http://localhost:8080/mch/callBack",

        "businessId":"15",

        "memo":"10112"

    }

]

2.2.2.2 body参数字段

body参数名称

是否必填

类型

说明

address

String

提币地址

amount

String

提币数量

merchantId

String

商户号

mainCoinType

String

主币种编号 (见附录一 

coinType

String

子币种编号 (见附录一

callUrl

String

回调地址,通过该callUrl告知您该笔提币交易的状态,具体示例见交易回调接口

businessId

String

业务id,必须保证该字段在系统内唯一,如果重复,则该笔审核钱包不会接收。

memo

String

备注,XRP和EOS,这两种币的提币申请该字段可选,起他类型币种不填

2.2.2.3 示例

{

  "timestamp": 1535005047,

  "nonce": 100000,

  "sign": "6df1512ee650431632ce1541a6b064e1",

  "body": "[{"address":"raadSxrUhG5EQVCY75CSGaVLWCeXd6yH6s","amount":"0.11","merchantId":"100109","mainCoinType":"144","coinType":"144","callUrl":"http://localhost:8080/callBack","businessId":"15","memo":"10112"}]"

}

2.2.3 返回状态码表

code

解释

200

成功

4005

非法参数

4598

传入body中的list对象中的所有merchantId必须保持一致

4001

商户不存在

4169

商户已被禁用

4183

到账地址异常

4193

EOS金额小数点后超过4位长度

4034

未找到该币种信息

2.3.1 成功

{

    "message":"SUCCESS",

    "code":200

}

2.3.2 失败

{

    "code": "4101",

    "message": "SIGN_MSG_ERROR"

}

3、代付

3.1 场景说明

代付,发送自动付款申请,未设置代付信息或代付失败则进入审核状态。

3.2 接口详情

3.2.1 接口地址

接口详情

 

URL

【/mch/withdraw/proxypay】

请求方式

POST

3.2.2 参数

3.2.2.1 参数说明

参数

类型

是否必填

说明

备注

timestamp

String

时间戳

见验签说明

nonce

String

随机数

见验签说明

sign

String

签名

见验签说明

body

String

消息内容

JSON字符串,格式如下

[

  {

      "address":"raadSxrUhG5EQVCY75CSGaVLWCeXd6yH6s",

      "amount":"0.1",

      "merchantId":"100146",

      "mainCoinType":"144",

      "coinType":"144",

      "callUrl":"http://localhost:8080/callBack",

      "businessId":"571001",

      "memo":"10112"

  }

]

3.2.2.2 body参数说明

body参数名称

类型

是否必填

说明

merchantId

String

商户号

address

String

提币地址

mainCoinType

String

主币种编号,见附录一

coinType

String

子币种编号,见附录一

amount

String

交易数量

callUrl

String

回调地址,提币(审核、交易)结果将通过该地址进行回调,具体示例见交易回调接口

businessId

String

业务id,必须保证该字段在系统内唯一,如果重复,则该笔提币钱包将不会进行接收

memo

String

备注,XRP和EOS,这两种币的提币申请该字段可选,起他类型币种不填

3.2.2.2 示例

{

    "timestamp": 1535005047,

    "nonce": 100000,

    "sign": "e1bee3a417b9c606ba6cedda26db761a",

    "body": "[{"address":"raadSxrUhG5EQVCY75CSGaVLWCeXd6yH6s","amount":"0.1","merchantId":"100146","mainCoinType":"144","coinType":"144","callUrl":"http://localhost:8080/callBack","businessId":"571001","memo":"10112"}]"

}

3.2.3 返回状态码表

code

解释

200

成功

4005

非法参数

4001

商户不存在

4166

商户没有配置套餐

4169

商户已被禁用

4612

签名错误

4163

签名信息错误

569

无效的地址

571

已存在审核记录,将不再进行处理

581

非法提币金额

554

商户不支持该币种

3.3 调取示例

3.3.1 成功

{

    "message":"SUCCESS",

    "code":200

}

3.3.2 失败

{

    "code": "4101",

    "message": "SIGN_MSG_ERROR"

}

4、交易回调接口

4.1 场景说明

网关收到交易处理结果,调用商户提供的回调接口,通知商户具体变化信息。该接口网关发送给您指定的回调地址的内容,处理您的业务信息。 分充值回调和提币回调,其中提币最多会进行两次回调(审核回调+交易结果回调)

4.2 接口详情

4.2.1 接口地址

接口详情

 

URL

 

请求方式

POST

4.2.2 参数

4.2.2.1 参数说明

参数

类型

是否必填

说明

备注

timestamp

String

时间戳

见验签说明

nonce

String

随机数

见验签说明

sign

String

签名

见验签说明

body

String

消息内容

JSON字符串,格式如下

{

    "address":"DJY781Z8qbuJeuA7C3McYivbX8kmAUXPsW",

    "amount":"12345678",

    "blockHigh":"102419",

    "coinType":"206",

    "decimals":"8",

    "fee":"452000",

    "mainCoinType":"206",

    "status":3,

    "tradeId":"20181024175416907",

    "tradeType":1,

    "txId":"31689c332536b56a2246347e206fbed2d04d461a3d668c4c1de32a75a8d436f0",

    "businessId":"",// 提币回调为提币接口传入的businessId,充币无值

    "memo":""

}

4.2.2.2 body参数说明

body参数名称

类型

说明

address

String

地址

amount

String

交易数量,根据币种精度获取实际金额,实际金额=amount/pow(10,decimals),即实际金额等于amount除以10的decimals次方

fee

String

矿工费,根据币种精度获取实际金额,实际金额获取同上

decimals

String

币种精度

coinType

String

子币种编号,见附录一

mainCoinType

String

主币种编号,见附录一

businessId

String

业务编号,提币回调时为提币请求时传入的,充币回调无值

blockHigh

String

区块高度

status

Integer

状态,见回调接口状态说明

tradeId

String

交易流水号

tradeType

Integer

交易类型,见回调接口交易类型说明

txid

String

区块链交易哈希

memo

String

备注,XRP和EOS(见附录一 ),这2种类型币的充提币可能有值

4.2.2.2 示例

{

    "timestamp": 1535005047,

    "nonce": 100000,

    "sign": "e1bee3a417b9c606ba6cedda26db761a",

    "body": "{"address":"DJY781Z8qbuJeuA7C3McYivbX8kmAUXPsW","amount":"12345678","blockHigh":"102419","coinType":"206","decimals":"8","fee":"452000","mainCoinType":"206","status":3,"tradeId":"20181024175416907","tradeType":1,"txId":"31689c332536b56a2246347e206fbed2d04d461a3d668c4c1de32a75a8d436f0"}"

}

5、校验地址合法性

5.1 场景说明

校验地址的合法性,添加地址、提币申请等场景时可先校验地址合法性,参看校验规则

5.2 接口详情

5.2.1 接口地址

接口详情

 

URL

【/mch/check/address】

请求方式

Post

5.2.2 参数

5.2.2.1 参数说明

参数

类型

是否必填

说明

备注

timestamp

String

时间戳

 

nonce

String

随机数

 

sign

String

签名

 

body

String

消息内容

JSON字符串,格式如下

{

    "merchantId":200000,

    "mainCoinType":"206",

    "address":"DJY781Z8qbuJeuA7C3McYivbX8kmAUXPsW"

}

5.2.2.2 body参数说明

body参数名称

类型

是否必填

说明

merchantId

Long

商户号

mainCoinType

String

主币种编号,见附录一

5.2.2.2 示例

{

    "timestamp": 1535005047,

    "nonce": 100000,

    "sign": "e1bee3a417b9c606ba6cedda26db761a",

    "body": "[{"merchantId":200000,"mainCoinType":"206","address":"DJY781Z8qbuJeuA7C3McYivbX8kmAUXPsW"}]"

5.2.3 返回状态码表

code

解释

200

成功

4005

非法参数

4162

签名错误

4165

地址不合法

5.3 调取示例

5.3.1 成功

{

    "code":200,

    "message":"SUCCESS"

}

5.3.2 失败

{

    "code":4005,

    "message":"PARAM_ERROR"

}

6、获取商户支持的币种信息

6.1 场景说明

获取商户支持的币种,以及余额

6.2 接口详情

6.2.1 接口地址

接口详情

 

URL

【/mch/support-coins】

请求方式

POST

6.2.2 参数

6.2.2.1 参数说明

参数

类型

是否必填

说明

timestamp

String

时间戳

nonce

String

随机数

sign

String

签名

body

String

消息内容

6.2.2.2 body参数说明

body参数名称

类型

是否必填

说明

merchantId

Long

商户号

showBalance

Boolean

是否查询余额,false不获取,true获取

6.2.2.3 示例

{

    "timestamp": 1535005047,

    "nonce": 100000,

    "sign": "e1bee3a417b9c606ba6cedda26db761a",

    "body": "{"merchantId":"200032","showBalance":true}"

}

6.2.3 返回状态码表

状态码

解释

200

成功

4005

body参数错误

6.3 调取示例

6.3.1 成功

{

    "code": 200,

    "message": "SUCCESS",

    "data":[

        {

            "name": "BTC", // 币种别名

            "coinName":"Bitcoin", // 币种全称

            "symbol":"BTC", // 币种单位

            "mainCoinType":"0", //主币种类型

            "coinType":"0", // 币种类型

            "decimals":"8", // 币种精度

            "tokenStatus":"0", // 0: 主币 1:代币

            "mainSymbol":"BTC", //主币种单位

            "balance":"0", // 币种余额

            "logo":"http://bipay-admin.oss-cn-hangzhou.aliyuncs.com/bipay-admin-release/coin-logo/BTC.png" // 币种log地址

        },

        {

            "name": "ETH", // 币种别名

            "coinName":"Ethereum", // 币种全称

            "symbol":"ETH", // 币种单位

            "mainCoinType":"60", //主币种类型

            "coinType":"60", // 币种类型

            "decimals":"18", // 币种精度

            "tokenStatus":"0", // 0: 主币 1:代币

            "mainSymbol":"ETH", //主币种单位

            "balance":"0", // 币种余额

            "logo":"https://bipay-admin.oss-cn-hangzhou.aliyuncs.com/bipay-admin-release/coin-logo/ETH.png" // 币种log地址

        }

    ]

}

6.3.2 失败

{

    "code":4005,

    "message":"BGS_ILLEGAL_PARAMETER"

}

附录一

主币种编号

子币种编号

币种简称

币种英文名

币种中文名称

精度

0

0

BTC

Bitcoin

比特币

8

60

60

ETH

Ethereum

以太坊

18

0

31

USDT

Tether USD

泰达币

8

520

520

CNT

CNT

测试币

18

5

5

DASH

DASH

达世币

8

133

133

ZEC

ZEC

大零币

8

145

145

BCH

Bitcoincash

比特币现金

8

61

61

ETC

Ethereum Classic

以太坊经典

18

2

2

LTC

LTC

莱特币

8

2301

2301

QTUM

QTUM

量子链币

8

502

502

GCC

GalaxyChain

 

8

60

合约地址

eth代币

eth代币

 

根据代币具体情况而定

144

144

XRP

Ripple

瑞波币

6

194

194

EOS

EOS

柚子币

4

194

194

EOS

EOS

柚子币

4

2304

2304

IOTE

IOTE

IOTE

8

2303

2303

VDS

Vollar

Vollar币

8

回调接口状态说明

状态

说明

0

待审核

1

审核成功

2

审核驳回

3

交易成功

4

交易失败

回调接口交易类型说明

状态

说明

1

充币回调

2

提币回调

验签说明

为了保证商户传送到优盾的参数信息不被恶意篡改,网关为商户接口提供Md5加密摘要认证。商户可用基础加密参数:时间戳、随机数、签名密钥(商户唯一的APIKEY)、请求明文参数按指定顺序排列进行Md5加密,产生一个验签串sign,商户请求网关接口时,带上参数时间戳、随机数、请求明文参数、sign作为参数。网关拿到相应的参数以同样的方式进行签名验签。同理,网关请求商户也以同样的方式进行身份验证。

sign=md5(body + key + nonce + timestamp)

key为接口授权码APIKEY,由网关分配给商户,加密字段顺序不能错误

币种地址校验规则

主币种类型

币种简称

币种英文名称

币种中文名称

地址前缀

地址长度限制区间

0

BTC

Bitcoin

比特币

1或者3

[26,36]

60

ETH

Ethereum

以太坊

0x

[42]

145

BCH

Bitcoincash

比特币现金

1

[26,36]

61

ETC

EthereumClassic

以太坊经典

0x

[42]

2

LTC

Litecoin

莱特币

L或者M

[26,36]

508

GX

GX

 

G

[26,36]

503

NBTC

NBTC

 

N

不限制

99

STO

STO

证券型通证发行

S

不限制

5

DASH

DASH

达世币

X

[26,36]

2301

QTUM

QTUM

量子链币

Q

[26,36]

133

ZEC

ZCash

大零币

t1

不限制

144

XRP

Ripple

瑞波币

r

[34]


 

区块链作为一种分布式共享记账本应用,其账户和钱包发挥着重要作用。账户被用于对分布式网络上发生的交易状态和结果进行记录,钱包则用来存储用户的私钥。

区块链网络作为一种价值转移网络,其应用涉及到数字货币资产等价值权属的转移,因此账户、钱包以及交易过程的安全性要求显得更为严格,其安全性由密码学进行保证。

Udun wallet在技术上实现了公钥衍生地址,私钥不上传、不触网、并通过二次加密托管在客户端,冷热钱包分离,大额资产用冷钱包离线保存,既能实现交易所等业务型系统台自主掌握私钥的独立性,又能实现数字资产的安全性。


区块链技术发展日新月异,钱包安全保护的重要性持续提升。

原文地址:https://www.cnblogs.com/fly-l/p/14413988.html