Oracles

任何智能合約都可以分叉嗎?

  • December 14, 2017

Casper 中的最終抑制系統是分叉合約,導致攻擊者失去權益。這種機制是否適用於任何智能合約?

我正在嘗試編寫一個預言機合約,以激勵對一些真實世界數據的共識,並希望能夠在合約受到攻擊時分叉合約。

正如您所建議的,分叉系統通常是為共識系統提供一層安全性的好方法。這個想法是,如果有人花費一些資源來攻擊系統並將其置於使用者認為錯誤的狀態,則可以部署該系統的新版本,理想情況下,攻擊者仍持有的任何資源都將被刪除或重新分配,並且使用者將忽略舊系統並轉移到新系統。

在實踐中,分叉可能意味著一些不同的事情。

如果你有自己的網路,比如比特幣網路或乙太坊網路,你可以通過改變一些節點遵循的規則來分叉。這將系統分成兩個不同的網路,它們在分裂之前在塊中共享相同的狀態,但之後具有不同的狀態。

如果你打算讓你的程式碼在乙太坊這樣的現有網路之上執行,那麼你在分叉時不能更改該網路的規則,並且你的所有數據都儲存在一個單一的、一致的分類賬上。由於你不能分叉賬本,你必須以某種方式在現有的賬本上創建一個新的資料結構。

一種選擇是,如果您的資源都由同一個合約持有,您可以簡單地部署該合約的新版本,每個人都會轉向該版本。如果合約管理的主要內容是代幣,並且您(分叉社區)能夠說服對該代幣感興趣的任何人轉移到新合約,則此方法有效。如果這是一個普通的 ERC20 代幣,這可能無法完美執行,因為一些與代幣通信的合約可能不知道分叉,這可能會導致資金損失,但它可能足以滿足您的目的。這裡有更多關於實用性的資訊:https ://medium.com/@edmundedgar/what-happens-when-you-try-to-fork-an-ethereum-token-863e3defcf7

另一種選擇是在單個契約中管理所有分支,並始終強制使用者指定分支。這是我們在此處描述的契約中使用的策略:https ://decentralize.today/get-the-facts-hard-fork-all-the-things-3ea2233da0fd

第三種選擇也將分叉保留在單個合約中,但嘗試在它們之間進行裁決以創建“真正的”分叉。這是 Augur 使用的策略:當一個分叉被觸發時,使用者需要將他們的令牌(“REP”)遷移到一個分支或另一個分支,系統最終將遷移最多 REP 的分支視為“真”分支。這具有將單個令牌介面暴露給其他合約的優點,並且不需要其他合約與其合約對話來指定分支,因為存在“最佳”分支。缺點是這個過程非常具有破壞性,因此必須用債券系統保護它,這增加了複雜性,並且如果債券被證明設置在錯誤的水平,可能無法觸發。

請注意,在所有沒有“真正”分支的情況下,系統可能無法管理外部資源,例如(對於在乙太坊之上執行的系統)ETH。所有這些系統都依賴於擁有一個可以由使用它的社區隨意重新定義的原生代幣。

這裡有幾個混合在一起的誤解。讓我們看看我能不能解開它們。(1) Casper 抑制不是“分叉合約”,事實上,我什至不確定“分叉合約”是什麼意思。如果驗證者做錯了什麼,Casper 有時會“削減”他們的股份,但我不會稱之為“分叉合約”。

當您說“分叉契約”時,聽起來您正在考慮 Linux,其中可以分叉一個程序並擁有該程序的兩個執行版本。區塊鏈分叉不是那樣的,但我不確定這就是你所說的。

“預言機合約”這個詞也有點陌生。至少據我所知,區塊鏈世界中的“預言機”是一種鏈下軟體,它定期將數據寫入鏈上(即寫入智能合約),作為為智能手機提供數據的一種方式契約。我不認為大多數人認為預言機是鏈上的。(並不是說你不能從另一個智能合約向其他合約提供數據,但一般來說,我認為人們說“oracle”時不是這個意思。)

最後,不清楚你的意思是“當契約受到攻擊時分叉”。你的意思是如果有人試圖破解它,你想讓智能合約本身以某種方式做出反應嗎?有些人用“終止”或“暫停”開關編寫智能合約,但聽起來不像你說的那樣。

總的來說,你的問題有點令人困惑。也許你可以澄清一下。

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