Transactions

驗證交易是否在區塊鏈中

  • December 14, 2017

首先讓我說我只是學習區塊鍊和技術方面。

據我了解,每筆交易都經過加密散列,散列配對並散列,直到生成單個根散列。礦工散列包含根散列、前一個散列、時間戳等的整個塊。如果散列滿足目標難度,則該塊被添加到鏈中。加密散列使得從散列輸出中獲取輸入變得不可行。

問:如果說,我想回到區塊 X 並查看它包含哪些交易,如果所有散列都是加密的並且無法從散列輸出中找到輸入,這怎麼可能?

提前致謝。

需要明確的是:正如您所說,並不是整個塊都在被散列,而是通過僅對候選塊的塊頭進行散列來找到塊。然而,區塊頭包含交易樹的 Merkle 根,該根又送出到區塊中的確切交易集。

您是對的,加密雜湊函式是一種單向函式,並且無法從雜湊中檢索塊內容。要了解區塊的內容,您可以使用區塊雜湊作為唯一標識符,並從存檔節點(即保存完整比特幣區塊鏈的完整節點)請求完整的區塊。

反過來,如果你只有txid從那裡去,你可以從任何知道它的節點請求完整的交易。原始交易不包括它包含在哪個塊中的資訊。AFAIU,為了得到你會做一個類型的getData請求MSG_MERKLEBLOCK。這不僅會為您提供完整的交易,還會對合作夥伴進行散列以形成Merkle 分支,直至塊散列和塊頭,從而允許您完全驗證交易是否包含在區塊鏈中。

礦工散列包含根散列、前一個散列、時間戳等的整個塊。如果散列滿足目標難度,則該塊被添加到鏈中

不完全是,只有區塊頭被散列用於工作證明。區塊頭由:版本號、前區塊雜湊、默克爾根、時間戳、目標(難度)和用於查找有效區塊的隨機數組成。

雖然塊頭只是塊的一部分,但每個塊還包含其中包含的所有交易的數據。所以回答你的問題:

我想回到區塊 X,看看它包含哪些交易,這怎麼可能 […]?

很簡單,你只需回到那個區塊,看看裡面的交易數據!

如果您想知道為什麼/如何使用 merkle 根,這個問題有一個很好的答案。比特幣維基也有一些相關資訊

[交易] 僅通過 Merkle 根間接進行散列。因為交易不是直接散列的,所以用 1 個交易對一個塊進行散列與用 10,000 個交易對一個塊進行散列所花費的精力完全相同。

引用自:https://bitcoin.stackexchange.com/questions/65214