交易所錢包系統搭建流程


 

搭建區塊鏈錢包節點

一、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查看。

 

搭建交易所錢包系統

 

以現在市面上用的最多的優盾錢包為例:

參考案例:優盾錢包
優盾錢包官網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:只允許提幣支持的幣種

 

實現充提幣對接

 

生成地址:

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)該筆交易狀態為失敗,則系統處理為提幣交易失敗

 

指令和調用方式

 

一、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"]

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM