Bitcoinj

從擴展公鑰生成錢包地址

  • December 25, 2020

我正在嘗試使用 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/比較這些地址

注意:此錢包將監視錢包,您可以在這些地址接收硬幣,但您不能花費這些。直到和除非你沒有對特定的私鑰簽署交易,或者你沒有向這個錢包提供私鑰。

引用自:https://bitcoin.stackexchange.com/questions/73013