Events

向區塊鏈證明日誌的存在

  • April 27, 2020

作為序言:我不完全確定這個問題是否有意義。只是我有一個想法,我想檢查其可行性。

我很確定可以使用 Merkle 證明來證明某個交易包含在某個區塊中,我想知道這是否也適用於日誌。

從本質上講,是否可以通過包含以下任一的 Merkle 證明來證明日誌是生成的:1)生成日誌的事務或 2)日誌(我知道日誌的儲存方式與事務不同,所以我不確定這個完全有可能)。

本質上是否可以向合約提供證據,證明某些日誌是由某個區塊中的某些交易生成的?

更新:https ://github.com/PISAresearch/event-proofs有一些程式碼。從它的自述文件中:

事件證明

探索如何在智能合約中驗證乙太坊日誌的 POC。證明是使用 eth-proof 生成的,並使用 Peace Relay 的 Merkle Patricia Tree 實現進行驗證。如果針對 Infura 執行測試,請耐心等待,因為生成證明需要大量 rpc 呼叫。


原答案:

的,交易收據的 Merkle 證明可用於驗證日誌的存在。

乙太坊區塊頭具有(交易)收據樹的 Merkle 根。

交易收據包含所有日誌

通過對交易收據和構成 Merkle 證明的雜湊值進行雜湊處理,可以將生成的雜湊值與標頭中的 Merkle 根進行比較。匹配將指示日誌存在。

黃皮書的描述:

每張收據,記為 BR

$$ i $$對於第 i 個事務,將其放置在 索引鍵樹中,並將根記錄在標頭中作為 He。交易收據是四個項目的元組, 包括交易後狀態,Rσ,包含交易收據的塊中使用的累積氣體,截至交易發生後,Ru,通過執行交易****創建的日誌集 , Rl 和由這些日誌中的資訊組成的布隆過濾器……:

https://blog.ethereum.org/2015/11/15/merkling-in-ethereum Vitalik Buterin 給出了一個使用收據的例子,以及其他可以用 Merkle 證明回答的例子:

  • 該交易是否包含在特定區塊中?
  • 告訴我該地址在過去 30 天內發出的所有 X 類事件實例(例如,達到其目標的眾籌合約)
  • 我賬戶的目前餘額是多少?
  • 這個賬戶存在嗎?
  • 假裝在這個合約上執行這個交易。輸出會是什麼?

第一個由事務樹處理;第三個和第四個由狀態樹處理,第二個由接收樹處理。前四個計算起來相當簡單。伺服器簡單地找到對象,獲取 Merkle 分支(從對像到樹根的雜湊列表)並用分支回复輕客戶端。

第五個也由狀態樹處理,但計算方式更複雜。在這裡,我們需要建構一個可以稱為 Merkle 狀態轉換證明的東西……

Vitalik 還在 DevCon1 上做了一個演講和一個關於日誌的部分:

https://www.youtube.com/watch?v=gjwr-7PgpN8&t=2106

引用自:https://ethereum.stackexchange.com/questions/16117