Bitcoin-Core
比特幣核心多錢包限制為 333 個錢包
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->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
問題。