bitcoin network 大致上有兩種
node
:如果只有
full node
,那我們就不用去想設計
merkle tree
,以及後來的
bloom filter
,那麼這個世界就簡單多了。但為了要讓
bitcoin wallet(錢包)
可以通行所有裝置,特別是手機,
spv node
就很重要了,不然就需要
100g
以上空間存放整個
blockchain
,這是不可行的。
自從中本聰的
bitcoin p2p network
**,2008
年橫空出世之來,他就**到,將來必定是
spv node
盛行,所以他很早就提出了
spv (simplified payment verification)
的概念。
而後來2012
年提出的
bip37 - connection bloom filtering
,是基於
spv的概念,用
bloom filter
,提出乙個更加可行的方案出來。
本篇先為這個問題:「
bitcion wallet
如何知道有多少
utxo
?」,提供簡單的回答。
我們知道,
wallet
只存所有的
block header
,而沒有全部的
transaction
,最多隻存屬於自己的
transaction
。一開始,連
block header
都沒有的情況下,如何知道
wallet
有些utxo(unspent transaction output)
呢?它要去問具有完整帳本
(blockchain)
的peer
。問的方式有兩種:
(blockchain)
後自己從裡面去找
方法二:向
peer
公開wallet
的所有訊息,
peer
就回傳屬於該
wallet
的utxo
方法三:向
peer
公開wallet
的部份訊息,
peer
回傳可能屬於該
wallet
的utxo
這個問題,講白一點,就是:「我想知道錢包有多少錢?」
要知道真實的錢包有多少錢,直接開啟來數一下就行了。
bitcoin wallet
,是電子錢包,執行的時候,會顯示目前的餘額,斷電的時候,不需要儲存餘額,因為下次重啟的時候,只要去問就好了。根據什麼來問?
wallet
惟一需要存放的,是一組
private keys
,被安全存放在晶元裡,可能是
secure element
或trust zone
。這一組
key是別人獲取不到的,甚至
自己也獲取不到。
wallet
的安全晶元,可以從
private key
去推算出
public key
。這個public key
可以視為
address
。有時候
address
是從public key
被hash
兩次算得來的。
我們把address
視為銀行的帳號。所以別人要給我
bitcoin
,我就要將
address
給別人,請他將錢匯到這個帳號,就行了。
回到原來的問題「我想知道錢包有多少錢?」
(blockchain)
,然後自己從裡面去找
這種方法,最簡單,但耗費的網路頻寬最多,至要要傳輸
100g
以上的資料量。因為
wallet
沒有向peer
表明,那些
address
屬於wallet
,所以peer
當然不知道那些
address
屬於wallet
。我們無法從
blockchain
存放的address
,往回推導出是從那乙個
wallet
產生出來的。所以
peer
只好將blockchain
一股腦傳給
wallet
,讓wallet
自己去找。
優點:結果精確,保留隱私
缺點:浪費頻寬
方法二:向
peer
公開wallet
的所有訊息,
peer
就回傳屬於該
wallet
的utxo
wallet
向peer
公開所有的
address
,可是這樣一來,就洩露隱私。
peer
拿到address
,就回報屬於該
wallet
的utxo
,及所屬的
block
。根據中本聰的**,此
block
不會自帶所有的
transaction
,而是merkle path
。優點:結果精確,簡省頻寬
缺點:洩露隱私
方法三:向
peer
公開wallet
的部份訊息,
peer
回傳可能屬於該
wallet
的utxo
wallet
向peer
公開部份訊息,以
bloom filter
呈現。peer
拿到bloom filter
,就回報「可能」屬於該
wallet
的utxo
,及所屬的
block header
,及merkle path
。因為bloom filter
沒有直接呈現
address
,所以保留了一點隱私。
但是bloom filter
,的特性是:
優點:保留一定程度的隱私,簡省頻寬
缺點:結果不精確
(但可接受
)-count
知道視窗控制代碼如何知道檔名
知道視窗控制代碼如何知道檔名?delphi windows sdk api 知道視窗控制代碼,怎麼得到該程式的檔名?先通過getwindowthreadprocessid取得視窗所屬程序的pid,再通過列舉系統程序,得到該程序的檔名。列舉程序可以通過系統快照 createtoolhelp32snap...
不知道如何提筆。
奔三的人了,雖然心態還不算老,但事實是殘酷的。今天的路何去何從。我真的看不太清。自己看好的方向卻很難找到機會。迫於生活的壓力只能將就了乙個比較接近的。但我就一普通人,看不清未來。現在就是堅定信念,在現在的領域努力。我相信,只要付出比別人多的努力,那麼機會就會光顧我的。堅信。總結下這個禮拜的學習內容。...
如何知道Apache的連線數目
統計httpd程序數,連個請求會啟動乙個程序.netstat nat grep i 80 wc l 452netstat an 會列印系統當前網路鏈結狀態.grep i 80 是用來提取與80埠有關的連線的,wc l進行連線數統計.netstat na grep established wc l 1...