[幣嚴區塊鏈]BitcoinCash - BCH錢包地址生成與掃塊充值監控(JAVA版)


本文的方案無需自建節點,因為BCH當前區塊數據大小已經達到200G以上,BTC區塊數據也已超過300G,若每個幣都自建節點,對雲服務器的消耗會非常大。

 

認識BitcoinCash(BCH)

Bitcoin Cash(BCH)是比特幣的分叉幣,與比特幣相同,是一種基於去中心化,采用點對點網絡與共識主動性,開放源代碼,以區塊鏈作為底層技術的加密貨貨幣。比特幣社區圍繞擴容問題爭論了三年之久,終於在2017年8月1日,比特幣現金在區塊高度478558執行硬分叉,按照比特幣1:1分發,總量2100萬,刪除隔離見證、區塊上限升級為8M,后升級為32M,通過鏈上擴容解決了舊版比特幣系統中手續費高、確認慢、實用性差等問題,履行比特幣作為「點對點電子現金」的承諾。

BCH的源頭最早可以追溯到2008年,中本聰發表了白皮書《比特幣:一種點對點的電子現金系統》,白皮書中構建了一個基於P2P網絡傳輸的去中心化貨幣體系,相比於法幣體系它排除了第三方信任機制的引入。隨着比特幣的用戶群體進一步擴大,1M區塊大小無法承載日益增加的交易量,比特幣網絡開始出現擁堵,手續費過高,交易長時間無法打包等情況。

社區中開始出現了擴容的聲音,而以核心開發者Core為代表的小區塊者們則是希望用過隔離見證+閃電網絡的方式緩解比特幣的擁堵問題。

社區矛盾逐漸無法調和,同時硬分叉的聲音也愈演愈烈,最終在礦工的主導下完成了硬分叉,比特幣社區自此一分為二。

 

至於當前正在進行的BCH ABC與 BCH SV的算力競爭,我們先不管了。本文主要介紹BCH ABC的對接方式。

 

 

認識BCH新地址

 

1、新的地址到底是什么樣子?

它將以下面這種形式展現出來,舉個例子:

bitcoincash:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a

 

2、舊的遺留地址還能用嗎?

是可以用的。不過還是強烈的建議升級成為新的地址。如果您有一個當前正在使用的遺留地址,它將繼續工作。但是對於大多數用戶而言,應該升級成為新的地址,因為新的地址會更加安全。此外,當每個人都使用相同的格式的時候,用戶體驗將會得到增強。

 

3、我可以從舊的地址發送到新的地址嗎?

可以。地址格式只是一個編碼。打個比方,可以把編碼看成一種包裝或者是衣服。就像不管你穿什么衣服都可以隨時和你的朋友聊天一樣,不管是舊的地址還是新的地址,那層“衣服”下面都是原始公鑰散列值(pubkeyHash)。

 

4、當我試着將我的比特幣現金轉移到新的地址中是,但是交易所或者錢包不讓我這樣做,這是為什么?

如果一個錢包還沒有升級,那它就不支持新的地址格式。不過不用擔心,這個問題是可以很容易解決的。您可以通過地址轉換工具將舊的地址格式轉換成新的地址格式。有好幾種轉換工具都可以用。推薦

https://cashaddr.bitcoincash.org/

 

5、從舊地址到新地址是否有一對一的“映射”?

是的,任何遺留的比特幣地址格式都將轉換為一個並且只有一個CashAddr格式,反之亦然。因此,任何給定地址都有兩個版本(legacy和CashAddr),它們是可以互換的,因為它們對應於同一組私鑰和公共密鑰。

 

6、如果我將一個舊的地址轉換成新的格式,並將這些比特幣現金發送給我的朋友,但他的錢包不支持這種新格式,會發生什么情況呢?

沒關系。錢仍然會出現在他的舊地址(因為地址其實是一樣的,只不過編碼方式不同)。

 

7、為什么比特幣現金開發社區決定創建一個新的地址格式?

比特幣現金作為一種獨特的分類賬本和加密貨幣,應該擁有獨一無二的地址格式。而且使用獨特的地址格式可以減少用戶的錯誤和混淆。

 

8、這種特殊地址格式的好處是什么?

除了提供不同的地址格式之外,新格式不區分大小寫,這使得地址更容易在人們之間編寫和傳達。而且它也是可擴展的,當比特幣現金在未來添加更多新的功能時也不需要改變地址格式了。

 

 

如何生成BCH地址?

需要依賴的項目:https://github.com/bitcoincash-wallet/bitcoinj  分支選擇 addsingedinputs

操作步驟:

一、建立Maven工程,在pom.xml中導入以下依賴:

<dependency>
      <groupId>cash.bitcoinj</groupId>
      <artifactId>bitcoinj-core</artifactId>
      <version>0.14.5.2</version>
</dependency>

 

二、任意新建一個類(包含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

 


免責聲明!

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



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