本文的方案無需自建節點,由於BCH當前區塊數據大小已經達到200G以上,BTC區塊數據也已超過300G,若每一個幣都自建節點,對雲服務器的消耗會很是大。git
認識BitcoinCash(BCH)github
Bitcoin Cash(BCH)是比特幣的分叉幣,與比特幣相同,是一種基於去中心化,採用點對點網絡與共識主動性,開放源代碼,以區塊鏈做爲底層技術的加密貨貨幣。比特幣社區圍繞擴容問題爭論了三年之久,終於在2017年8月1日,比特幣現金在區塊高度478558執行硬分叉,按照比特幣1:1分發,總量2100萬,刪除隔離見證、區塊上限升級爲8M,後升級爲32M,經過鏈上擴容解決了舊版比特幣系統中手續費高、確認慢、實用性差等問題,履行比特幣做爲「點對點電子現金」的承諾。數據庫
BCH的源頭最先能夠追溯到2008年,中本聰發表了白皮書《比特幣:一種點對點的電子現金系統》,白皮書中構建了一個基於P2P網絡傳輸的去中心化貨幣體系,相比於法幣體系它排除了第三方信任機制的引入。隨着比特幣的用戶羣體進一步擴大,1M區塊大小沒法承載日益增長的交易量,比特幣網絡開始出現擁堵,手續費太高,交易長時間沒法打包等狀況。json
社區中開始出現了擴容的聲音,而以核心開發者Core爲表明的小區塊者們則是但願用過隔離見證+閃電網絡的方式緩解比特幣的擁堵問題。api
社區矛盾逐漸沒法調和,同時硬分叉的聲音也愈演愈烈,最終在礦工的主導下完成了硬分叉,比特幣社區自此一分爲二。瀏覽器
至於當前正在進行的BCH ABC與 BCH SV的算力競爭,咱們先無論了。本文主要介紹BCH ABC的對接方式。安全
認識BCH新地址服務器
一、新的地址究竟是什麼樣子?網絡
它將如下面這種形式展示出來,舉個例子:函數
bitcoincash:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a
二、舊的遺留地址還能用嗎?
是能夠用的。不過仍是強烈的建議升級成爲新的地址。若是您有一個當前正在使用的遺留地址,它將繼續工做。可是對於大多數用戶而言,應該升級成爲新的地址,由於新的地址會更加安全。此外,當每一個人都使用相同的格式的時候,用戶體驗將會獲得加強。
三、我能夠從舊的地址發送到新的地址嗎?
能夠。地址格式只是一個編碼。打個比方,能夠把編碼當作一種包裝或者是衣服。就像無論你穿什麼衣服均可以隨時和你的朋友聊天同樣,不論是舊的地址仍是新的地址,那層「衣服」下面都是原始公鑰散列值(pubkeyHash)。
四、當我試着將個人比特幣現金轉移到新的地址中是,可是交易所或者錢包不讓我這樣作,這是爲何?
若是一個錢包尚未升級,那它就不支持新的地址格式。不過不用擔憂,這個問題是能夠很容易解決的。您能夠經過地址轉換工具將舊的地址格式轉換成新的地址格式。有好幾種轉換工具均可以用。推薦
https://cashaddr.bitcoincash.org/
五、從舊地址到新地址是否有一對一的「映射」?
是的,任何遺留的比特幣地址格式都將轉換爲一個而且只有一個CashAddr格式,反之亦然。所以,任何給定地址都有兩個版本(legacy和CashAddr),它們是能夠互換的,由於它們對應於同一組私鑰和公共密鑰。
六、若是我將一箇舊的地址轉換成新的格式,並將這些比特幣現金髮送給個人朋友,但他的錢包不支持這種新格式,會發生什麼狀況呢?
不要緊。錢仍然會出如今他的舊地址(由於地址實際上是同樣的,只不過編碼方式不一樣)。
七、爲何比特幣現金開發社區決定建立一個新的地址格式?
比特幣現金做爲一種獨特的分類帳本和加密貨幣,應該擁有獨一無二的地址格式。並且使用獨特的地址格式能夠減小用戶的錯誤和混淆。
八、這種特殊地址格式的好處是什麼?
除了提供不一樣的地址格式以外,新格式不區分大小寫,這使得地址更容易在人們之間編寫和傳達。並且它也是可擴展的,當比特幣現金在將來添加更多新的功能時也不須要改變地址格式了。
如何生成BCH地址?
須要依賴的項目:https://github.com/bitcoincash-wallet/bitcoinj 分支選擇 addsingedinputs
操做步驟:
1、創建Maven工程,在pom.xml中導入如下依賴:
<dependency> <groupId>cash.bitcoinj</groupId> <artifactId>bitcoinj-core</artifactId> <version>0.14.5.2</version> </dependency>
2、任意新建一個類(包含static main函數),例如:
class Test{ public static void main(String[] args){ // 獲取網絡參數 NetworkParameters params = MainNetParams.get(); // 新建bch.wallet錢包文件(該文件存儲私鑰) final File walletFile = new File("bch.wallet"); // 該段代碼每次都用新建錢包文件的方式建立錢包,首次運行可用這種方式生成bch.wallet文件 Wallet wallet = new Wallet(walletFile); // 如下代碼用於已經建立過bch.wallet,讀取錢包文件使用 //try { // wallet = Wallet.loadFromFile(walletFile); //} catch (UnreadableWalletException e) { // e.printStackTrace(); // return MessageResult.error(500,"error:" + e.getMessage()); //} // 新建密鑰對 ECKey key = new ECKey(); // 經過網絡參數獲取地址 Address address = key.toAddress(params); // 打印錢包地址 System.out.println("生成的錢包地址:" + address.toBase58()); // 將密鑰對導入錢包文件 wallet.importKey(key); try { // 保存祕鑰到錢包文件 wallet.saveToFile(walletFile); } catch (IOException e) { e.printStackTrace(); } } }
上述代碼以最簡單的方式演示瞭如何生成地址,具體健壯性須要編碼者本身認證完善。
如何掃塊監聽充值?
因爲咱們不打算自建節點,那麼若是有不少地址,就須要去檢測是否有充值,這裏咱們使用掃塊的方式,一旦發現某個收帳地址屬於咱們,咱們就發起充值提醒,或寫入數據庫中的用戶餘額表。
掃塊主要是經過區塊鏈瀏覽器獲取,市面上有不少區塊鏈瀏覽器,咱們能夠選擇適合本身的,這裏演示的使用的區塊鏈瀏覽器是:
https://bch.btc.com/
API文檔是:
https://bch.btc.com/api-doc
好比咱們能夠經過API接口:https://bch-chain.api.btc.com/v3/block/latest/tx,來獲取最新區塊裏包含的交易:
上圖是用Chrome調試工具獲取到的json格式數據,這個裏面咱們能夠看到outputs -> addresses裏面就是到帳的地址。
具體編碼細節這裏就不作延伸了,無非就是經過HttpUtli發起請求,獲取json數據,而後解析json數據便可。
BIZZAN(幣嚴) 數字貨幣交易所官方網址:
www.bizzan.com
幣嚴區塊鏈技術交流QQ羣:
811249099