Bitcoin-Core

對等點究竟何時保存在 peers.dat 文件中?

  • August 7, 2021

在查看此 PR 時,我嘗試了幾件事:https ://github.com/bitcoin/bitcoin/pull/22013

在查看 PR <https://github.com/bitcoin/bitcoin/pull/22651>時,我希望使用以下步驟將 1 個對等點保存在 peers.dat 中:

  1. 執行節點 1:
bitcoind -port=18333 -rpcport=18222 -datadir="/home/user/node1" -regtest=1 -listen=1 -server=1 -debug=net -rpcuser=user1 -rpcpassword=password1 -torcontrol='127.0.0.1:9051' -proxy='127.0.0.1:9050' -onlynet=onion
  1. 執行節點 2:
bitcoind -port=18777 -rpcport=18666 -datadir="/home/user/node2" -regtest=1 -listen=1 -server=1 -debug=net -rpcuser=user2 -rpcpassword=password2 -addnode='127.0.0.1:18333' -torcontrol='127.0.0.1:9051' -proxy='127.0.0.1:9050' -onlynet=onion
  1. 停止節點 1 和 2:
bitcoin-cli -rpcport=18222 -rpcuser=user1 -rpcpassword=password1 stop
bitcoin-cli -rpcport=18666 -rpcuser=user2 -rpcpassword=password2 stop
  1. 使用不同的配置(onlynet=i2p和 no proxy)重新啟動節點 2:
bitcoind -port=18777 -rpcport=18666 -datadir="/home/user/node2" -regtest=1 -listen=1 -server=1 -debug=net -rpcuser=user2 -rpcpassword=password2 -i2psam=127.0.0.1:7656 -onlynet=i2p

但是根據日誌,peers.dat 中沒有保存任何內容。所以我不得不使用addpeeraddress我猜做同樣事情的測試。那麼如果節點 1 被添加為節點 2 中的出站連接,這不應該保存在 peers.dat 中嗎?在測試網或主網的情況下它如何工作?

比特幣核心有兩種主要獨立的機制來創建出站連接:

  • 手動addnode機制,由配置設置connect和RPC 控制,addnode以在執行時更改 addnode 列表。使用者可以使用它直接建立與他們選擇的對等點的連接,包括無法公開訪問的 IP 地址上的連接(包括本地主機和本地網路)。
  • 自動機制,Bitcoin Core 維護一個可公開訪問的對等 IP 地址的數據庫。該數據庫由種子節點、其對等節點和addpeeraddressRPC 提供。這個數據庫很大(可以包含幾十萬個 IP 地址),用於建立少量(8-10)個隨機連接。它還用於回答其他對等方的查詢(getaddr協議消息)。該數據庫每 15 分鐘保存到磁碟,在文件peers.dat.

配置connect選項(或-connect命令行)啟用手動連接機制,並禁用自動連接機制。該addnode選項啟用手動連接,而自動連接保持不變(它們都有獨立的最大連接數)。該seednode選項創建到某個節點的手動連接,向其詢問對等 IP,將其輸入**自動地址數據庫,然後斷開連接。

所以這裡發生的是你-addnode用來建立手動連接。該對等 IP 不會以 結尾peers.dat,因為該文件屬於自動連接系統。它也行不通:127.0.0.1 地址不是公共地址,甚至可能會傳給其他對等方——他們無法連接到它。

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