Bitcoinj
從擴展公鑰生成錢包地址
我正在嘗試使用 bitcoinj 從擴展公鑰生成地址,但無法弄清楚,我怎麼可能做到這一點。
我需要這些地址用於僅手錶錢包,這些地址未簽名,對嗎?
此外,我可以簽署這些地址以發送交易。
你可以參考這個原始碼。 <https://github.com/tatumio/tatum-java/blob/master/src/main/java/io/tatum/wallet/Address.java#L24>
由於 Watching 錢包是沒有私鑰的錢包。它是在公鑰的幫助下創建的。因此,為了從擴展公鑰生成僅限手錶錢包的地址,首先您需要先使用該擴展公鑰創建僅限手錶錢包。然後您可以簡單地從中一一推導出地址。
範常式式碼如下所示:
// 指定主網或測試網的網路參數 NetworkParameters 參數 = NetworkParameters.prodNet(); // 提供要從中派生地址的公鑰 字元串 xPub = "xpub6Cw8YA6Mko3xfkYpMQDZjGjgDTWUrJr87NBSiDPXqcmcSJTgxLXm3VCw3iQs4iC5ZrwpY3M21a43DZmiMzDXWzzhF1n7yxSXDnEHjJN6jwK"; // 在 Wallet 類的幫助下創建監視錢包 錢包錢包 = Wallet.fromWatchingKeyB58(params, xPub, DeterministicHierarchy.BIP32_STANDARDISATION_TIME_SECS); // 從提供的公鑰列印第一個派生地址 System.out.println("收款地址:" + wallet.currentReceiveAddress());
輸出將是:
1L23PHmL38qjqbs75doB1VTSL3CKPwkPbC
您可以從https://iancoleman.io/bip39/及其所有特定派生地址獲取公鑰。您可以從那裡比較您第一個生成的地址,以確保您獲得正確的地址。
如果要獲取前 20 個或 30 個地址,則可以在循環中使用給定行。提供高達 20 或 30(您想要的)的循環限制。
// 在循環中執行此語句,其中 i 是循環變數。 System.out.println(i + " : " + wallet.freshReceiveAddress());
您可以再次從https://iancoleman.io/bip39/比較這些地址
注意:此錢包將監視錢包,您可以在這些地址接收硬幣,但您不能花費這些。直到和除非你沒有對特定的私鑰簽署交易,或者你沒有向這個錢包提供私鑰。