Solidity

我們如何在區塊鏈上的合約中實現不變性?

  • June 6, 2018

總體而言,我對 Dapps 和區塊鏈領域相對較新,如果您向熟悉區塊鏈特性的人詢問,“不可變”這個詞總是會出現在回復中。在 google 上進行關於不變性的簡單搜尋,從區塊鏈的角度來看,給出的解釋是有道理的。但是,當你更深入地研究編碼、乙太坊智能合約,具體來說,這個想法就變得模糊了。我已經閱讀瞭如何在 Solidity 中實現 CRUD 操作的兩部分系列,正如您所知,CRUD 的更新和刪除部分引入了可變性。在第2 部分結束時,作者說:

  1. 映射結構(細節仍然存在)僅供我們合約使用。當然,數據仍然在區塊鏈的某個地方,但是如果這個合約不會為你檢索它(它不會),它與消失的大致相同。

2)我們無法阻止一個堅定的對手找到曾經是但不再是目前鏈狀態一部分的數據。覆蓋數據不會撤消不可變的歷史記錄。

我很擔心,因為我的第 4 年項目需要為乙太坊開發一個區塊鏈應用程序,以使我們的國家能夠儲存公共記錄,如學術記錄、地契、駕駛執照和日誌。

我在提案中做出的承諾之一是這種不變性的想法:一旦記錄進入區塊鏈,就不會對其進行編輯,從而有助於遏制我們一直看到的偽造。如果可以像上面連結的教程所示的那樣簡單地執行更新,那麼什麼會阻止任何人更新他們的學術成就(例如,在系統開發人員的幫助下或其他方式的幫助下)?

所以我目前的推理是為這些記錄提供setter和getter,但明確省略更新/刪除它們的函式。這樣,作為一名開發人員,我幫助實現了不變性,而不是區塊鏈中的一個功能。

但我覺得這是錯誤的。我如何在這個項目中證明不變性?

扎克是完全正確的。我的教程中描述的刪除更新操作會附加調整**目前狀態的新事務。這樣做不會(不能)以任何方式改變不可變的歷史。

您可以將值 X 儲存在合約中,並將其設置為 1,然後是 2,然後是 3。您將擁有三個不可變的交易。即使您通過所描述的方法“刪除”記錄,仍然會有插入歷史(帶有值),發生的任何更新,然後是使其在邏輯上消失的刪除事務。沒有數據失去,這就是為什麼我提醒讀者刪除不會像他們可能錯誤地期望的那樣向好奇的觀察者隱藏資訊。

區塊鍊是一個不可變的、僅附加的交易集。如果需要,它可以給出邏輯覆蓋的外觀。有很多情況是可取的。

希望能幫助到你。

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