Bitcoin-Core

比特幣核心多錢包限制為 333 個錢包

  • February 13, 2018

Bitcoin Core 0.15.1支持多錢包

bitcoin.conf我們可以添加多個條目:

wallet=wallet-1.dat
wallet=wallet-2.dat
wallet=wallet-3.dat
wallet=wallet-4.dat
...
wallet=wallet-350.dat

當 Bitcoin Core 啟動時,如果錢封包件不存在,它將創建它。這非常適合我們的需求。

但是,它總是在 333 錢包上崩潰。有db.log錯誤:

Lock table is out of available locker entries

並且debug.log

2018-02-13 14:47:05 init message: Loading wallet...
2018-02-13 14:47:05 nFileVersion = 160000
2018-02-13 14:47:05 Keys: 21 plaintext, 0 encrypted, 21 w/ metadata, 21 total
2018-02-13 14:47:05  wallet                   36ms
2018-02-13 14:47:05 setKeyPool.size() = 20
2018-02-13 14:47:05 mapWallet.size() = 0
2018-02-13 14:47:05 mapAddressBook.size() = 0
2018-02-13 14:47:05 init message: Loading wallet...
2018-02-13 14:47:05 

************************
EXCEPTION: St13runtime_error       
CDB: Error 12, can't open database wallet-333.dat       
D:\BitcoinCore\bitcoin-0.16.0\bin\bitcoin-qt.exe in Runaway exception     

我還嘗試最小化,-keypool=20這樣錢包的大小就會小得多,載入它們的過程也會快得多。

有人提示我這個錯誤是因為每個 wallet.dat 文件都是在同一個 BDB 環境中打開的。整個環境的數據庫鎖數量有限,似乎有 333 個錢包命中了這個數量的數據庫鎖。

解決方案(不起作用)是創建一個DB_CONFIG在數據目錄中命名的文件,並將以下幾行放入該文件中:

set_lk_max_locks 400000
set_lk_max_objects 400000

預設情況下是 40000,現在是 400000(可用鎖數的十倍)

但這給出了相同的結果。

我也試過:

set_lg_dir database

沒有運氣。

我在具有 0.15.1 和 0.16.0 的兩台不同的 Windows 10 機器上驗證了這一點。結果相同。載入333錢包​​時總是崩潰。

有人對此有解決方案嗎?

如果有人願意複製,我已經列出了錢包列表:https ://pastebin.com/8wHD1tL3

好的,我找到了解決方案。添加

set_lk_max_lockers 400000

成功了。

<https://docs.oracle.com/cd/E17276_01/html/api_reference/C/set_lk_max_lockers_parameter.html>

我測試並能夠自動創建和載入 932 個錢包,直到我遇到記憶體不足錯誤:

Logging region out of memory; you may need to increase its size
DB_TXN-&gt;abort: log undo failed for LSN: 227 171878: Not enough space
PANIC: Not enough space
PANIC: DB_RUNRECOVERY: Fatal error, run database recovery
PANIC: fatal region error detected; run recovery

環境:

set_lg_regionmax 1048576

解決了上述Logging region out of memory; you may need to increase its size問題。

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