牛年伊始,就在Elon Musk先生“大力喊单”以及各大机构投资者强势入场等一系列“利好”刺激下,比特币飙升到近49,000美元的历史高位,2月16日首破5万美元大关,20日比特币价格上破57000美元关口。
当然,比特币的价格,历史上有一些其他重要的里程碑:
· 中本聪(Satoshi Nakamoto)于2008年发布了比特币白皮书《比特币:一个点对点电子现金系统》。彼时它没有任何价值,只是一个想法。
· 比特币价格在2010年首次达到1美元。
· 价格已开始规模性应用,价格在2013年首次突破$1,000,2017年首次突破$10,000。
当前比特币的价格飙升也导致了整个市场在这个加密货币之王的引领下出现普涨。加密货币总市值在过去三个月内几乎翻了三倍,从略高于6071亿美元一路走高至近1.8万亿美元,创下价格历史新高。
如今随着加密货币市场整体向好,交易所的业务也开始繁忙起来,平台交易量出现激增,尤其BTC交易量惊人。
事实上,运营像交易所这类业务型系统,数字资产安全和管理问题始终困扰着整个行业,钱包系统成为区块链项目的基础且核心配置。
一时间,BTC钱包开发,ETH钱包开发,USDT钱包开发,交易所钱包开发等需求猛增,搜索量接连突破新高,成为币圈搜索热词之一。
交易所需要考虑的一方面,交易所被黑客攻击事件以及内鬼盗币事件屡屡发生;另一方面,交易所存储、管理和流通的币种极多,而数字货币的匿名性使得其不像传统金融出账入账明确,因而账面管理是一个突出的难点。
如何开发一款钱包系统可以接入各类数字货币币种的充、提、归集、管理?如何搭建交易所钱包系统?
1、搭建区块链钱包节点
一、USDT/BTC
(1)搭建BTC/USDT节点并同步数据
git地址:https://github.com/OmniLayer/omnicore,目前该omni版本已支持BTC,不用再单独部署btc节点
(2)检查是否同步最新
可参考区块浏览器https://btc.com/,调用omnicore-cli的getblockchaininfo方法检查是否同步到最新高度
二、ERC20/ETH
(1)搭建eth节点
git地址:https://github.com/multi-geth/multi-geth/releases
(2)检查最新
可参考区块浏览器https://cn.etherscan.com/,使用geth attach接入节点,调用eth.syncing检查是否同步到最新高度;或者使用RPC提供的接口eth_syncing查看。
2、搭建交易所钱包系统
以现在市面上用的最多的优盾钱包为例:
参考案例:优盾钱包
优盾钱包官网API接口文档:https://www.uduncloud.com/gateway-interface
至少添加以下几张表
(1)会员钱包表
会员ID、币种、余额、冻结余额、充值地址
逻辑1:对应会员地址有充币时,增加对应钱包余额
逻辑2:会员提币时,从余额冻结对应提币数量,待提币成功,扣除对应冻结数量,提币失败,返还对应冻结数量
(2)充币记录表
txid、充值地址、会员ID、币种、数量、时间
逻辑1:对应会员地址有充值时录入充币类型记录
逻辑2:可根据txid和充值地址判断唯一,防止重复入账
(3)提币审核表
提币编号、会员ID、币种、提币地址、提币数量、提币状态、txid、时间
逻辑1:会员申请提币时录入待审核记录
逻辑2:审核通过,将会员提币的金额成功发送到链上后,设置为审核成功,记录交易哈希txid
逻辑3:审核拒绝,设置为审核失败
逻辑4:获取交易在区块链的状态,根据状态判断该笔审核交易的成功与失败,成功扣除提币冻结资金、失败则返还
(4)支持币种表
币种、币种类型
逻辑1:根据支持币种去生成地址
逻辑2:只允许提币支持的币种
3、实现充提币对接
生成地址:
(1)在对应部署的区块节点上创建钱包
(2)通过rpc接口进行生成地址
(3)将生成的地址分配给交易所用户的钱包信息中,供用户充值使用
充提币处理逻辑:
(1)查询最新区块链最新高度
(2)对比系统已处理的最新高度
(3)假如区块链最新高度大于已处理的最新高度,则处理系统已处理的最新高度加一的高度
(4)查询需要处理的区块信息
(5)查询对应区块的所有交易信息
(6)循环处理该区块的交易信息处理充币
(6-1)过滤已成功的交易
(6-2)查询到账地址是否为系统地址
(6-3)到账是系统地址则可以判断为充币,进行充币逻辑处理
(7)处理提币
(7-1)循环处理交易
(7-2)判断交易哈希是否为系统提币的交易哈希
(7-3)该笔交易状态为成功,则系统处理提币交易成功
(7-4)该笔交易状态为失败,则系统处理为提币交易失败
4、指令和调用方式
一、USDT/BTC
指令:
钱包在启动节点时就已经创建,钱包名称默认为"",钱包默认打开,没有锁定操作
例如:在账户recive下创建新的地址
bitcoin-cli getnewaddress "recive"
rpc函数调用:
调用方式均为标准的rpc调用方式,请求地址为http://user:password@ip:port,user/password为配置的允许调用rpc的用户名和密码,ip为节点部署的服务器ip,port为配置的支持rpc端口
查询最新高度
{
"jsonrpc": "2.0",
"id": 1,
"method": "getbestblockhash",
"params": []
}
获取区块相关信息信息
{
"jsonrpc": "2.0",
"id": 1,
"method": "getblock",
"params": ["5dacf2826896060679267ff7bbf42ecae8313173f405492ec0583ad5737ffb69",true]
}
{
"jsonrpc": "2.0",
"id": 1,
"method": "getblockhash",
"params": [2]
}
{
"jsonrpc": "2.0",
"id": 1,
"method": "getblockheader",
"params": ["e2acdf2dd19a702e5d12a925f1e984b01e47a933562ca893656d4afb38b44ee3", true]
}
获取交易详情
{
"jsonrpc": "2.0",
"id": 1,
"method": "getrawtransaction",
"params": ["e2acdf2dd19a702e5d12a925f1e984b01e47a933562ca893656d4afb38b44ee3"]
}
{
"jsonrpc": "2.0",
"id": 1,
"method": "gettxout",
"params": ["e2acdf2dd19a702e5d12a925f1e984b01e47a933562ca893656d4afb38b44ee3", 1]
}
发送交易
{
"jsonrpc": "2.0",
"id": 1,
"method": "sendrawtransaction",
"params": ["signedhex"]
}
二、ERC20/ETH
指令:
运行节点时,钱包已经创建,只需要创建账户即可!所以操作需要使用 geth attach 接入节点
# 列出当前账户
eth.accounts
# 创建账户
personal.newAccount()
#解锁账户(资金来源的账户)
personal.unlockAccount(eth.accounts[0])
#锁定账户(资金来源的账户)
personal.lockAccount(eth.accounts[0])
rpc函数:
官方文档链接https://github.com/ethereum/wiki/wiki/JSON-RPC#net_version
常用rpc函数:
查询最新高度
查看区块个数
{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_blockNumber",
"params": []
}
根据区块hash获取区块信息
{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_getBlockByHash",
"params": ["0x13d796b3485a49b1ff9654638a2be8f61a617d14df676a0613c70716c353f1e7", true]
}
根据区块高度获取区块信息
{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_getBlockByNumber",
"params": ["0x1", true]
}
获取交易详情
{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_getTransactionByHash",
"params": ["0x9428ea6b8cc11b996625be6e04ae99b1e460a3cdf2ade9184ebf3026c2dc81c4"]
}
发送交易
{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_sendTransaction",
"params": [{
"from": "0x81a8d02cfd1db2cc781940f361d301edc11b978c",
"to": "0xed45bbb0c75a23b82304d77ad551f9d5d46b046a",
"value": "0xDE0B6B3A7640000"}]
}
发送签名交易
{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_sendRawTransaction",
"params": ["0xf8610180825208941e4abf25b8f6d692e079cc60cebbb12e908553c48203e8801ba0d1012ee33405ee58d68837fd4bad6632d5d5f7070b9eb6312b60428c21e7e41aa025f99c502f134a15ad6b0c55256375800799e2e833e986598a4144d9d80a3f50"]
}
随着加密货币行业正式进入到新一轮牛市,以及本身拥有的雄厚资源储备与犀利战略眼光,交易所赛道竞争日趋激烈,面对DEX的挑战,中心化交易所如何能夺回先发优势和市场领先地位,交易所钱包系统在平台安全运营上占据着举足轻重的重要地位。