【btc錢包對接】Bitcoin Core 錢包安裝與對接

Bitcoin介紹

比特幣(Bitcoin)的概念最初由中本聰在2008年11月1日提出,並於2009年1月3日正式誕生。根據中本聰的思路設計發佈的開源軟件以及建構其上的P2P網絡。比特幣是一種P2P形式的虛擬的加密數字貨幣。點對點的傳輸意味着一個去中心化的支付系統。與全部的貨幣不一樣,比特幣不依靠特訂貨幣機構發行,它依據特定算法,經過大量的計算產生,比特幣經濟使用整個P2P網絡中衆多節點構成的分佈式數據庫來確認並記錄全部的交易行爲,並使用密碼學的設計來確保貨幣流通各個環節安全性。P2P的去中心化特性與算法自己能夠確保沒法經過大量製造比特幣來人爲操控幣值。基於密碼學的設計可使比特幣只能被真實的擁有者轉移或支付。這一樣確保了貨幣全部權與流通交易的匿名性。比特幣與其餘虛擬貨幣最大的不一樣,是其總數量很是有限,具備極強的稀缺性。 bitcoin百度百科 bitcoin維基百科git

Bitcoin core錢包介紹

目前網絡上有不少社區開發了多款bitcoin錢包,其中bitcoin core錢包安裝後會下載所有節點,而且有一套rpc接口協議,代碼在github也所有開源,bitcoin core支持多個操做系統,咱們能夠根據本身須要進行安裝。我作過的項目需求都是交易系統和支付系統實現充值,提現,和歸集功能,bitcoin core對我來講足夠了,因此就選擇他了。至於其餘錢包我就沒有具體深刻研究了,若是有特殊需求的業務,也能夠去研究下其餘錢包是否支持。 想研究其餘錢包可點擊連接進行查看:bitcoin維基百科github

Bitcoin 須要知道的知識點

由於虛擬幣價值比較高,因此有不少黑客會想盡各類辦法盜取虛擬幣資產,像一線交易所也都被盜過,目前最簡單和成本最低的防範方法就是作冷熱錢包隔離,咱們在設計系統的時候也應該考慮此方面的解決方案,而後在這個思路上面延伸。個人解決方案是用戶充值進錢包的虛擬幣,我天天會經過定時任務把熱錢包的虛擬幣轉到冷錢包。這樣的話黑客就算黑了咱們錢包,他能盜走的幣也不多,能夠減小平臺的損失。算法

  • 熱錢包,咱們如今搭建的就屬於熱錢包,簡單來說就是與外界聯網的錢包,充值地址的幣,天天都會劃轉到冷錢包
  • 冷錢包,與外界網絡徹底隔離,目前市面上也有不少相關的硬件錢包產品
  • 區塊鏈的機制就是一但生成交易就沒法篡改和撤回了,咱們在開發的時候也要多注意,特別是在轉幣的時候
  • utxo,官方解釋是未經使用的交易輸出,具體介紹能夠點擊看其餘大哥寫的詳細介紹,utxo介紹

Bitcoin core錢包安裝

1.服務器硬件配置

  • 我目前用的服務器配置是aws ubuntu 2c,8g,500g硬盤,下面的配置信息是我給的建議
  • cpu:2c(同步區塊的時候會佔用cpu)
  • 內存:8G
  • 硬盤:500G(不差錢上固態,固態同步區塊速度會快不少)

2.注意事項

區塊同步時cpu會懟滿,因此大家到時候不要大驚小怪了,這是正常的,等區塊同步完成後就會恢復正常shell

3.安裝錢包

安裝也有多種方法,能夠在上面地址下載安裝文件也行,這裏我是直接經過ubuntu的apt下載安裝 首先須要添加bitcoin的源:數據庫

sudo add-apt-repository ppa:bitcoin/bitcoin

添加源成功以後,須要更新下源:json

sudo apt-get update

安裝bitcoind:ubuntu

sudo apt-get install bitcoind

能夠選擇性的安裝bitcoin-qt,在ubuntu-service版本上是不須要bitcoin-qt的,若是是在ubuntu-desktop上面想使用bitcoin-qt的話能夠選擇安裝:安全

sudo apt-get install bitcoin-qt

4.運行bitcoind

直接輸入bitcoind命令可讓bitcoind在前臺直接運行:服務器

bitcoind

也能夠採用後臺運行的方式,也能夠和我同樣用nohup打印一下日誌網絡

nohup bitcoind &

經過命令查看錢包版本,以及是否安裝成功

bitcoind -version

Bitcoin Core Daemon version v0.18.0.0-g2472733a24a9364e4c6233ccd04166a26a68cc65
Copyright (C) 2009-2019 The Bitcoin Core developers

Please contribute if you find Bitcoin Core useful. Visit
<https: bitcoincore.org> for further information about the software.
The source code is available from <https: github.com bitcoin>.

This is experimental software.
Distributed under the MIT software license, see the accompanying file COPYING
or <https: opensource.org licenses mit>

This product includes software developed by the OpenSSL Project for use in the
OpenSSL Toolkit <https: www.openssl.org> and cryptographic software written by
Eric Young and UPnP software written by Thomas Bernard.

啓動後錢包會自動同步區塊,能夠打開日誌查看具體同步狀況

tail -f nohup.out

進入bitcoin安裝目錄

cd $HOME/.bitcoin
ls
banlist.dat  bitcoind.pid  blocks  chainstate  debug.log  peers.dat  wallets
ls wallets/
database  db.log  wallet.dat

由於這次我安裝的版本是0.18,因此相比老版本有所改變,wallet.bat文件在wallet文件夾裏面,上面咱們能夠看到文件夾最新結構,下面是具體文件夾介紹

bitcoind.pid bitcoind   運行的進程文件

blocks  區塊鏈數據文件

chainstate 區塊鏈狀態的數據庫使用LevelDB存儲

db.log 數據庫日誌文件

debug.log 運行時的日誌文件

wallet.dat 錢包文件(這個要劃重點了,此文件保存了咱們錢包生成的私鑰,特別重要,建議經過編寫shell腳本或者使用後臺程序天天作個備份)

安裝supervisor(進程監控),錢包掛掉可使程序自啓

sudo apt-get install supervisor

5.錢包命令介紹

bitcoin-cli getwalletinfo   查看錢包詳情,在0.18版本中,之前的getinfo已經取消
{
  "walletname": "",
  "walletversion": 169900,              錢包版本
  "balance": 0.00000000,                錢包餘額
  "unconfirmed_balance": 0.00000000,    未確認餘額
  "immature_balance": 0.00000000,       這個暫時還不清楚
  "txcount": 0,                         錢包內交易數量
  "keypoololdest": 1562826486,          密鑰池內最先密鑰建立時間
  "keypoolsize": 1000,                  密鑰池大小
  "keypoolsize_hd_internal": 1000,
  "paytxfee": 0.00000000,               手續費率(這個比較重要,後面單獨講)
  "hdseedid": "ed13b2019c2e28e9dc84cf7124ba2e36cebcb656",
  "private_keys_enabled": true
}

bitcoin-cli getblockchaininfo   查看區塊詳情
{
  "chain": "main",
  "blocks": 238558,                     錢包當前區塊(btc安裝啓動後通常1-2天能夠同步到最新區塊高度)
  "headers": 584893,                    當前最新區塊高度
  ....  後面還有其餘信息,咱們暫不關注
}

bitcoin-cli sendtoaddress   轉帳接口(後面具體介紹)
Response:
1. "address"            (string, required) 接收地址
2. "amount"             (numeric or string, required) 轉帳金額

Result:
"txid"                  (string) 惟一標識tx_id

Examples:
&gt; bitcoin-cli sendtoaddress "1M72Sfpbz1BPpXFHz9m3CdqATR44Jvaydd" 0.1
&gt; curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "sendtoaddress", "params": ["1M72Sfpbz1BPpXFHz9m3CdqATR44Jvaydd", 0.1] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/

業務系統對接BTC錢包

1.充值和提現實現方式

充值
  • 用戶在頁面進入btc充值頁面時,調用後臺查詢充值地址,若是沒有充值地址咱們經過btc錢包rpc接口「getnewaddress」建立一個屬於用戶的充值地址保存到數據庫並返回給頁面,用戶往這個地址轉幣進行充值。
  • 後臺起一個線程或者調度任務根據區塊高度掃描當前區塊中交易記錄,取出來和數據庫中充值地址對比,若是是平臺用戶的充值地址交易記錄,保存到區塊轉帳記錄表中(表中可設置tx_id爲主鍵,tx_id爲區塊轉帳信息惟一標識,不會重複)。

btc充值.png

提現
  • 普通用戶提交提現表單後,若是提現數量大於設置的審覈數量,則須要進到管理後臺人工審覈,審覈經過後同步給提現地址轉幣,並更新審覈狀態和修改用戶資產信息。

提現處理流程.jpg

轉帳記錄更新(處理區塊中充值和提現的記錄確認結果)
  • 添加調度任務掃描區塊轉帳表中待處理的記錄,根據確認數來決定是否進行後續處理

轉帳記錄確認處理流程.jpg

2.轉帳使用接口

轉帳目前有多種方式和接口,下面作詳細介紹:

  • 是使用離線簽名方式的原生交易,適合冷錢包轉帳交易,大概步驟爲先建立交易信息進行簽名後,經過返回的hash值,廣播出去後便可(廣播也可使用第三方服務進行廣播),須要單獨設置手續費,設置找零地址;
  • sendfrom接口,這個接口能夠設置指定發送地址;
  • sendmany接口,這個接口看名字也大概知道,能夠批量轉帳;
  • sendtoaddress接口,這個接口是使用整個錢包的utxo(簡單理解就是整個錢包的可用餘額)進行對外轉帳,好處就是他是把錢包全部的餘額聚集一塊兒對外轉帳,好比說用戶提現1btc,若是我用其餘接口指定轉出地址時,轉出地址餘額沒有1btc就沒法轉帳,可是由於這個接口是把錢包餘額加起來對外轉,全部能夠成功轉出。

3.用戶充值btc餘額歸集

目前個人項目是設置的定時器天天在不一樣時間執行三次歸集任務,由於用的sendtoaddress轉帳的接口,因此我每次歸集的時候查詢錢包餘額是否超過歸集閾值,超過就作歸集操做。

btc歸集.png </https:></https:></https:></https:>

相關文章
相關標籤/搜索