Bitcoind

如何使用 getnewaddress 和標籤 api 複製 getaccountaddress 行為

  • January 19, 2022

問題正在getaccountaddress被棄用,並且它具有我嚴重依賴的特定行為(與帳戶無關)。只要沒有傳入交易,它就會在多個呼叫之間為您提供相同的地址……

我所做的基本上是在getaccountaddress ""每次需要顯示地址時呼叫。

這個問題getnewaddress旨在始終為您提供一個新地址,因此我最終會用大量毫無意義的地址淹沒錢包,這些地址永遠不會收到任何東西。

我正在嘗試使用標籤 API 複製舊行為,但我想出的最好方法是組合getaddressesbylabel和解析所有listtransactions輸出以查找是否有未使用的接收類型地址,如果沒有找到則生成新的。

這似乎容易出錯且難以擴展,因為地址的數量可能會增長並且可能會很快變得非常大。

我有哪些選擇?是否有 API 呼叫可用作呼叫的替代getaccountaddress ""或組合呼叫?

可以使用標籤來模仿 getaccountaddress 的相同功能。

這是python中的一個例子:

#!/usr/bin/env python3

import bitcoin.rpc

bitcoin.SelectParams('regtest')
proxy = bitcoin.rpc.Proxy()

def get_unused_address():
   label = 'donations'
   unused = None
   try:
       addr_list = proxy.call('getaddressesbylabel', label)
   except bitcoin.rpc.JSONRPCError as err: 
       if err.error['code'] == -11:
           # No addresses with label
           addr_list = None
   if addr_list:
       # Addresses with label found
       for addr in list(addr_list.keys()):
           # Check for tx received
           r = proxy.call('listreceivedbyaddress', 0, True, False, addr)
           if not len(r[0]['txids']):
               # Unused address found!
               unused = addr
               break
           else:
               # Used address found, remove label
               proxy.call('setlabel', addr, '')
   if not unused:
       # Address with label not found, generate a new one
       unused = proxy.getnewaddress(label)
   return unused

print("Unused address is: %s" % get_unused_address())

比特幣錢包賬戶是為個人使用而設計的,所以你的案例需要在不同的層上開發,正如 G. Maxwell 在這裡解釋的那樣:https ://github.com/bitcoin/bitcoin/issues/3816#issuecomment-37052569

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