Bitcoin-Core
SPV 客戶端如何形成然後廣播的交易?
據我了解,SPV 客戶端只在自己的數據庫中跟踪區塊頭。那麼當使用者嘗試使用特定的 SPV 客戶端發送比特幣時,交易是如何建構的?
使用該客戶端的使用者可能會輸入他想要發送的金額和目標地址。他可能會使用他的私鑰登錄。
那麼使用這 3 個數據,即金額、目的地和 privateKey,SPV 將如何建構整個交易對象。
因為我知道如果我必須手動編寫事務,我需要:
- 以前的交易雜湊(資金交易)。
- 我嘗試花費的 UTXO 的序列號。
- ScriptSig 或解鎖密鑰,由 privateKey 和整個交易體的雜湊構成。
- 產值。
- ScriptPubKey 使用目標地址構造。
- SigHash 程式碼。
所以我只是提供金額、目的地和私鑰。SPV 客戶端將如何獲取 Prevout 雜湊、序列號、要解鎖多少 UTXO 以及應該形成多少新 UTXO 等剩餘值?
如果有人提到給出實現的程式碼庫,這將非常有幫助。
一般來說,當資金被發送到錢包控制的地址時,SPV 錢包會從驗證全節點接收交易和默克爾證明。
merkle-proof 保證具有錢包可花費輸出的交易被送出到其本地(強)頭鏈的頭中。由於錢包控制此輸出的私鑰,因此它將其索引為本地 UTXO,而不知道在驗證節點上找到的完整 UTXO 集。
當將資金花費到另一個地址時,本地錢包將為此交易解決一組最佳的本地 UTXO。Prevout 點數,可用於錢包的索引如前所述。您描述的所有其他交易欄位都獨立於 UTXO,或者可以從索引的先前交易中推斷出來(例如,由 CSV/CLTV 輸出腳本操作強制執行的時間鎖)。目標地址將告訴錢包要花費的輸出,就像所有其他錢包類型(P2PKH、P2WPKH、P2SH、P2WSH 等)一樣。
上面描述的 SPV 錢包必然會顯示它有興趣從驗證節點接收 merkle 證明的地址。SPV 客戶端有多種技術可以在一定的頻寬成本下提高隱私性並減少資訊洩露。
- 伺服器端過濾器(例如布隆過濾器(將被棄用))
- 客戶端過濾器(例如 Neutrino)