Dapps

drizzle 如何知道合約狀態何時更新並在儲存中反映該狀態(當一個值被cacheCalled 時)?

  • August 17, 2019

基本上有人可以對此提供更技術性的解釋嗎?

它說它監視(訂閱)區塊頭以及何時“通過交易查看是否有任何人觸及我們的契約”。它是如何做到的?它是否必須檢索塊中的所有交易,還是有一些聰明的方法讓它知道這一點(默克爾證明之類的?)?

然後它說“我們重放儲存中已經存在的呼叫以刷新任何可能更改的數據。 ”你如何’重放呼叫’?這是否意味著它模擬了呼叫,或者它從區塊鏈中獲取每個訂閱值的數據?

最後(希望解釋上述內容會使這個問題變得多餘),這個規模如何?如果您正在觀看 100 個合約價值,那麼每個區塊對區塊鏈的呼叫是否比您僅訂閱 1 個價值時多 100 倍?

好問題!希望這會有所幫助,或者開始討論。

它說它監視(訂閱)區塊頭,並在“通過交易查看是否有任何人觸及我們的契約”進入區塊頭時。它是如何做到的?它是否必須檢索塊中的所有交易,還是有一些聰明的方法讓它知道這一點(默克爾證明之類的?)?

沒有什麼比 Merkle 證明更花哨的了。Drizzle 維護著一系列可供觀看的契約。to當一個新的區塊可用時,Drizzle 會過濾在其orfrom欄位中具有那些被監視合約的區塊的交易。我們必須假設這些合約變數的狀態發生了變化,然後 Drizzle 將查詢它配置為同步的每個合約方法的更新值。

最後(希望解釋上述內容會使這個問題變得多餘),這個規模如何?如果您正在觀看 100 個合約價值,那麼每個區塊對區塊鏈的呼叫是否比您僅訂閱 1 個價值時多 100 倍?

Drizzle 將呼叫新區塊交易的toor欄位中引用的合約的所有方法。from因此,如果您正在觀看 100 份合約,但在一份合約中訂閱了一個值,那麼只要合約被交易弄髒,它就會只進行一次呼叫。

值得注意的是,當您評估可伸縮性時,這些被同步的方法在合約 ABI 中被定義為常量方法。

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