驗證交易是否在區塊鏈中
首先讓我說我只是學習區塊鍊和技術方面。
據我了解,每筆交易都經過加密散列,散列配對並散列,直到生成單個根散列。礦工散列包含根散列、前一個散列、時間戳等的整個塊。如果散列滿足目標難度,則該塊被添加到鏈中。加密散列使得從散列輸出中獲取輸入變得不可行。
問:如果說,我想回到區塊 X 並查看它包含哪些交易,如果所有散列都是加密的並且無法從散列輸出中找到輸入,這怎麼可能?
提前致謝。
需要明確的是:正如您所說,並不是整個塊都在被散列,而是通過僅對候選塊的塊頭進行散列來找到塊。然而,區塊頭包含交易樹的 Merkle 根,該根又送出到區塊中的確切交易集。
您是對的,加密雜湊函式是一種單向函式,並且無法從雜湊中檢索塊內容。要了解區塊的內容,您可以使用區塊雜湊作為唯一標識符,並從存檔節點(即保存完整比特幣區塊鏈的完整節點)請求完整的區塊。
反過來,如果你只有
txid
從那裡去,你可以從任何知道它的節點請求完整的交易。原始交易不包括它包含在哪個塊中的資訊。AFAIU,為了得到你會做一個類型的getData
請求MSG_MERKLEBLOCK
。這不僅會為您提供完整的交易,還會對合作夥伴進行散列以形成Merkle 分支,直至塊散列和塊頭,從而允許您完全驗證交易是否包含在區塊鏈中。
礦工散列包含根散列、前一個散列、時間戳等的整個塊。如果散列滿足目標難度,則該塊被添加到鏈中
不完全是,只有區塊頭被散列用於工作證明。區塊頭由:版本號、前區塊雜湊、默克爾根、時間戳、目標(難度)和用於查找有效區塊的隨機數組成。
雖然塊頭只是塊的一部分,但每個塊還包含其中包含的所有交易的數據。所以回答你的問題:
我想回到區塊 X,看看它包含哪些交易,這怎麼可能 […]?
很簡單,你只需回到那個區塊,看看裡面的交易數據!
如果您想知道為什麼/如何使用 merkle 根,這個問題有一個很好的答案。比特幣維基也有一些相關資訊:
[交易] 僅通過 Merkle 根間接進行散列。因為交易不是直接散列的,所以用 1 個交易對一個塊進行散列與用 10,000 個交易對一個塊進行散列所花費的精力完全相同。