標題

[閒聊] BTC/BCH 全節點 節省硬碟空間模式 無法匯入錢包?

看板DigiCurrency數位貨幣板作者kugwa (苦瓜)
時間. (2019-09-08 16:41:05)
推文41則 (3推 0噓 38→)
根據白皮書第七節 Reclaiming Disk Space

理論上 全節點可以丟棄已經被花掉的交易 不影響以後的驗證

(不可能有新交易指向已經被花掉的交易 所以丟棄當然不影響驗證

但如果單純想查被丟棄的交易的詳細資料 那當然找不到了)



而這個功能實際上在比特幣全節點軟體裡也有支援

只要在啟動全節點時加上「-prune=N」的參數即可 N的單位是MiB

意思是你只想要保留最新N MiB的區塊資料 更舊的就丟棄

N最小可以設550 這樣的話硬碟上的raw block data就會維持在550 MiB

(不包含目前大約4 GB的UTXO資料庫chainstate

4 GB + 550 MiB -> 整個比特幣節點軟體大約固定佔用5 GB的硬碟空間)

更詳細的說明在0.11版的release notes

https://tinyurl.com/obc8mhb

(BTC從0.11版開始支援 BCH是之後才分叉出去所以應該也有)



如果有需要跑全節點 但又不想佔太多硬碟空間

就可以啟用這種block file pruning模式

不跑的時候也可以把上述5 GB整個備份

等哪天又有需要再把這5 GB拿回來用

這樣的話只要補驗證這段時間錯過的區塊即可

不用從頭驗證幾百GB的區塊鏈

而且因為都是親自驗證 所以也沒有需要信任別人的問題

當然如果有人想跑全節點但又懶得親自從頭驗證

直接跟你要這5 GB來用(我不知道會不會有這種需求)

那他就必須信任你了



理論上 開啟prune mode的全節點 功能依然完整(問題只在於有無實作)

上面提到沒辦法查詢被丟棄的交易

其實只要跟「保留該交易的節點」要就好了

拿到的交易只要hash值能一路串到merkle root

就能證明它確實存在於區塊裡 依然沒有信任問題

這就跟SPV的原理一樣

只能感嘆聰神的強大



目前要注意的一點

就是全節點在prune mode下似乎無法匯入錢包

這點在0.11版release notes也有提及

這也是「理論上不是問題但目前尚未實作」

(不太懂技術上的難點在哪

源碼在src/wallet/rpcdump.cpp importwallet函數

這次應該不是BTC的鍋 因為BCH的這段源碼也差不多)

我以前用dumpwallet備份了文字檔錢包 裡面的BTC大約值1 USD

現在想importwallet回來居然跳錯

「Importing wallets is disabled in pruned mode」

手邊沒有以前的wallet.dat可以測試

不知道直接複製貼上整個wallet.dat而非透過RPC來弄 是否可行



希望有大大能解惑:

1. 目前prune mode下是否真的無法匯入錢包

2. 我的dumpwallet裡的BTC還有救ㄇ 看不懂裡面的私鑰格式

感謝~

--
血に飢えた狼達よ…今こそ自らの牙で、鎖を解き放つ時が来たのだ…。

すでに戦いは始まっているのだ。さぁ、武器を取れ!そして殺せ!殺しまくれ!!

自らの命を、守るために…
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.227.4.89 (臺灣)
※ 文章網址: https://pttweb.tw/DigiCurrency/M.1567932082.A.FA0
#1kugwa: SL:qq2vtymc5syylwfda7rwfanx2pmhvls46gwrnepsh2 09/08 16:41
#2DarkerDuck: 推推~~ 09/08 16:42
#3DarkerDuck: 在prune mode下匯入錢包會需要重爬一次完整區塊鏈啊 09/08 16:44
#4DarkerDuck: 但是就被prune掉了,當然就無法進行 09/08 16:45
#5kugwa: 理論上只要有當前UTXO set 就沒問題不是嗎? 09/08 16:46
#6kugwa: 我的錢包裡都是還沒花掉的 09/08 16:47
#7DarkerDuck: 匯入不同的錢包,不同地址要重新驗證交易啊 09/08 16:49
#8DarkerDuck: 沒有區塊鏈歷史資料,沒辦法重新驗證啊 09/08 16:49
#9DarkerDuck: 除非跟SPV節點一樣再重新跟其他完整節點要 09/08 16:50
#10DarkerDuck: dumpwallet出來的私鑰就原始格式 09/08 16:51
#11DarkerDuck: 而不是WIF或是BIP39格式 09/08 16:51
#12kugwa: 為啥需要重新驗證交易 09/08 16:55
#13kugwa: 錢包裡的地址 如果是沒花掉的 應該要能在UTXO裡match到? 09/08 16:55
#14kugwa: UTXO屬於chainstate的一部分 是自己跑過的 沒有信任問題吧 09/08 16:56
#15DarkerDuck: 這是為了產生交易歷史,假如你只要最後的餘額 09/08 16:56
#16DarkerDuck: 那當然是只要UTXO就已經足夠了 09/08 16:56
#17DarkerDuck: 但我實際重新匯入過錢包,他會重新產生交易歷史資料庫 09/08 16:56
#18DarkerDuck: 因此會重新驗證交易才能重新產生整個交易歷史 09/08 16:57
#19DarkerDuck: 至於為什麼一定要重新產生交易歷史才行 09/08 16:57
#20DarkerDuck: 這可能就要去問Core開發者了,他們思維跟一般人不一樣 09/08 16:58
#21kugwa: 原來如此 09/08 16:58
#22kugwa: 但我根本不需要交易歷史啊xdddd 09/08 16:58
#23kugwa: 我只要能提出裡面的BTC 把他轉走而已 09/08 16:59
#24kugwa: 或是不知道有沒有SPV錢包認得dumpwallet格式 09/08 17:01
#25kugwa: 只要能動到裡面的BTC 任何方法都行~ 09/08 17:03
#26kugwa: 除了重新驗證整條區塊鏈這個方法之外 09/08 17:03
#27DarkerDuck: blockchain.info網站錢包我有匯入過原始私鑰,可用 09/08 17:05
#28kugwa: 剛剛產生一個私鑰 來測試匯入到blockchain.info錢包 09/08 20:56
#29kugwa: 真的可以用 感謝 09/08 20:56
#30kugwa: 剛剛才搞懂 我的dumpwallet檔案 裡面的私鑰原來是WIF格式 09/08 20:57
#31kugwa: 只是blockchain.info可以吃WIF和原始私鑰 09/08 20:57
#32DarkerDuck: 不過blockchain.info的安全性沒很好,匯入後就可轉出 09/08 20:57
#33kugwa: 對 所以我剛剛是用沒錢的私鑰來測 09/08 20:58
#34kugwa: 感覺沒什麼SPV錢包可以直接匯入私鑰 都要認他們自己的格式 09/08 20:59
#35kugwa: 要碼就是seed phrase 要碼就是錢包自己認得的格式 09/08 21:00
#36kugwa: 這樣要在不同錢包之間轉換有點困難 09/08 21:00
#38DarkerDuck: WIF格式的話,用Electrum也可以直接匯入 09/08 21:22
#39kugwa: 這個好~ 09/08 21:40
※ 編輯: kugwa (36.227.4.89 臺灣), 09/09/2019 02:40:52
#40DarkerDuck: 773字 * 7星 = 5411 PCH 09/09 04:30

DigiCurrency熱門文章