Bitcoin-Core

bitcoind 同步標頭但不同步塊

  • August 5, 2022

我有bitcoind23.0 版在regtest模式下的機器上執行。

然後我在另一台機器上啟動另一個實例並執行addnode "x.x.x.x:xxxx" "add"連接到第一個實例。

結果:新實例連接良好,同步塊頭,但不同步塊。

getpeerinfo顯示:

[
 {
   "id": 0,
<snip>
   "network": "ipv4",
   "services": "0000000000000408",
   "servicesnames": [
     "WITNESS",
     "NETWORK_LIMITED"
   ],
   "relaytxes": true,
   "last_transaction": 0,
   "last_block": 0,
   "bytessent": 1045,
   "bytesrecv": 1329,
   "timeoffset": 0,
   "version": 70016,
   "subver": "/Satoshi:23.0.0/",
   "inbound": false,
   "bip152_hb_to": false,
   "bip152_hb_from": false,
   "startingheight": 110,
   "synced_headers": 110,
   "synced_blocks": -1,
   "inflight": [
   ],
   "addr_relay_enabled": true,
   "addr_processed": 1,
   "addr_rate_limited": 0,
   "permissions": [
   ],
   "minfeefilter": 0.00001000,
<snip>
   "connection_type": "manual"
 }
]

我的bitcoin.conf樣子是這樣的:

listen=1
server=1
prune=2000
regtest=1
rpcauth=<snip>
port=<snip>
rpcport=18443
rpcbind=127.0.0.1
rpcallowip=127.0.0.1

getblockcount``110在第一台機器和第二台機器上返回0,確認沒有同步任何塊。

為什麼會發生這種情況以及如何進行塊同步?

同步節點將尋找一個宣布NODE_NETWORK服務標誌的對等點,該標誌指示一個節點具有所有塊並且可以為它們提供服務。

修剪過的節點只會服務最新的 288 個塊,這通過NODE_NETWORK_LIMITED服務標誌發出信號。由於修剪過的節點往往沒有最早的塊(除非像您的測試中那樣少),同步節點不會從修剪過的節點請求塊。

當您在 regtest 上執行並且無論如何您的塊可能大部分都是空的時,您可以通過關閉修剪來緩解您的問題。

peerbloomfilters打開對 BIP37 布隆過濾器的支持,它允許瘦客戶端請求全節點為它們搜尋塊並通知它們相關的交易。如果您的兩個節點都是完整節點實例,則不會使用此功能並且不會影響您的成功。

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