Bitcoinj

一段時間後看不到平衡

  • September 26, 2018

我正在嘗試使用bitcoinj庫來接收比特幣付款並監控地址上的餘額。我的實現是基於DeterministicKey觀察公鑰。下面的程式碼可以正常工作一段時間,它會在收到硬幣時列印一條消息,然後列印正確的餘額。但是如果我重新啟動它,餘額會變為零,並且錢包會失去所有以前收到的交易(getTransactionsByTime()是空列表),因此只有在程式碼執行時我將一些硬幣發送到靜態地址時它才能工作。此外,如果我再次啟動程式碼並將新硬幣發送到同一個地址(它是靜態的),我只會看到新的交易,之前的所有交易都失去了。這是我的展示程式碼,用於檢查它是否正常工作(groovy):

def net = TestNet3Params.get()
def wlt = Wallet.fromWatchingKey(net, DeterministicKey.deserializeB58('tpubD9xtwS1WLdbdLQKCSiR8kiwBwWzL1C1qq7LTgMq12ugeqyGbDCoFic2zqrNgwthyvq8DUubn6CSev58Ja2o9KgMQxafDd6UZWG9JSZWcdGY', net))
def store = new SPVBlockStore(net, new File("/tmp/spvbstore.blockchain"))
def chain = new BlockChain(net, store)
def peers = new PeerGroup(net, chain)
peers.maxConnections = 5
peers.maxPeersToDiscoverCount = 5
peers.addPeerDiscovery(new DnsDiscovery.DnsSeedDiscovery(net, 'testnet-seed.bitcoin.jonasschnelli.ch'))
chain.addWallet(wlt)
peers.addWallet(wlt)
peers.start()
peers.downloadBlockChain()
wlt.addCoinsReceivedEventListener(
 new WalletCoinsReceivedEventListener() {
   @Override
   void onCoinsReceived(
     final Wallet wallet,
     final Transaction tx, final Coin prevBalance, final Coin newBalance) {
       println("RECEIVED: $tx: $prevBalance -> $newBalance")
   }
 }
)
while (true) {
 println("BALANCE: ${wlt.getBalance(Wallet.BalanceType.ESTIMATED)}")
 println("transactions:\n$wlt.transactionsByTime")
 Thread.sleep(10000)
}

聽起來像一個看錢包,但你需要保存wallet文件以及保存spv文件。根據文件

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