Bitcoin-Core
對等點究竟何時保存在 peers.dat 文件中?
在查看此 PR 時,我嘗試了幾件事:https ://github.com/bitcoin/bitcoin/pull/22013
在查看 PR <https://github.com/bitcoin/bitcoin/pull/22651>時,我希望使用以下步驟將 1 個對等點保存在 peers.dat 中:
- 執行節點 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
- 執行節點 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 和 2:
bitcoin-cli -rpcport=18222 -rpcuser=user1 -rpcpassword=password1 stop bitcoin-cli -rpcport=18666 -rpcuser=user2 -rpcpassword=password2 stop
- 使用不同的配置(
onlynet=i2p
和 noproxy
)重新啟動節點 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 地址的數據庫。該數據庫由種子節點、其對等節點和
addpeeraddress
RPC 提供。這個數據庫很大(可以包含幾十萬個 IP 地址),用於建立少量(8-10)個隨機連接。它還用於回答其他對等方的查詢(getaddr
協議消息)。該數據庫每 15 分鐘保存到磁碟,在文件peers.dat
.配置
connect
選項(或-connect
命令行)啟用手動連接機制,並禁用自動連接機制。該addnode
選項啟用手動連接,而自動連接保持不變(它們都有獨立的最大連接數)。該seednode
選項創建到某個節點的手動連接,向其詢問對等 IP,將其輸入**自動地址數據庫,然後斷開連接。所以這裡發生的是你
-addnode
用來建立手動連接。該對等 IP 不會以 結尾peers.dat
,因為該文件屬於自動連接系統。它也行不通:127.0.0.1 地址不是公共地址,甚至可能會傳給其他對等方——他們無法連接到它。