Consensus
智能合約中的狀態可以是不可變的嗎
我的問題是指智能合約數據的不變性。
如果我在智能合約中創建一個函式並編寫一個條件,如果地圖的鍵已經存在,則跳出該函式並且不要將其添加到地圖中。
IE
library Library { struct data { uint val; bool isValue; } } contract Array{ using Library for Library.data; mapping(address => Library.data) map; function addCluster(address id) { if(map[id].isValue) throw; // duplicate key // else insert a key value pair } }
那麼這種狀態是不可變的嗎?
我聽說如果私有網路的多數共識同意,那麼他們可以逆轉或“回滾”已經開采的交易和區塊。如本文在私有區塊鏈部分https://www.multichain.com/blog/2017/05/blockchain-immutability-myth/下所述。
我試圖了解私有網路的共識決定在該交易被探勘之前回滾到特定塊會發生什麼,該鍵/值對(狀態)會被刪除嗎?因此,如果在契約中對其進行了程式,則詢問狀態可以是不可變的。
這不是根據過去的變化重新組織目前狀態的問題。如果不是過去發生的事情的結果,就不可能存在於現在。
如果共識轉向對過去的不同描述,那麼不同的目前狀態是不言而喻的。節點可能會磨掉一點以進行內部重組,但內部邏輯一致性將保持不變。
如果你是星際迷航或史蒂芬霍金的粉絲,你可能會明白,即使在不太可能的情況下,有人建造了一台時間機器,穿越到過去並改變了一些東西,因果關係也不會被違反。
在私有鏈吹捧回滾作為錯誤合約解決方案的情況下,這樣做所需的門檻值共識遠低於公共鏈上的可比性,因為共識中的節點較少,他們都知道。在任何一種情況下,參與者都會意識到該鏈發生了修訂。
希望能幫助到你。