Contract-Development

代幣和智能合約“升級”

  • January 22, 2020

我不是很技術,但我有一個問題。

假設一個智能合約正在升級到一個新的,在新的合約中是否有可能不向某些錢包發送新的代幣?

例如,如果錢包 XXXXX 是已知的被黑資金儲存者,錢包 XXXXX 是否可以不從新合約中發送代幣?

是的。你可以在你的合約中實現一個簡單的邏輯:

例如:

mapping(address => bool) public hacker;   
    function doSomething() public {
        require(!hacker[ADDRESS_TO_CHECK]);
       //continue
   }

假設正在升級智能合約

讓我們分解一下。首先,我認為這取決於您所說的“升級”是什麼意思。

明確的管理特權

可以編寫一份契約,將賬戶列入黑名單。因此,它只是來自一個特殊使用者的輸入,該使用者決定將誰列入黑名單,每個人都會看到將某人列入黑名單的程序,並決定是否參與。這兩種情況都有很好的論據,具體取決於您要證明的內容。

function blacklistUser(address badguy) public onlyAdmin {
 badguys[badguy] = true;
}

在其他地方,確保它不是壞人:

require(!badguys[msg.sender], "You are a badguy. Go away.");

誠然,為了說明這個概念,這過於簡單化了。

在這種情況下,合約本身不需要升級,因為它清楚地說明了管理員在目前合約上下文中擁有的特殊權限。

多變的邏輯

有幾種模式可用於更改合約邏輯本身。也就是說,一種讓舊規則不再適用的方法,從現在開始,新規則。

開發人員將呼叫這些可升級契約。可升級性在存在時是顯而易見的,這在很大程度上是因為要實現它並非易事。實現它的程式碼真的很突出。我無法想像有一種方法可以向程式碼審查者隱藏它,因為有所有這些額外的東西。

我不會做一個例子,因為這是一個很大的話題,只是說這個想法是從一開始就將邏輯委託給可互換的部分,然後實現一種交換組件的方式。那些委託和交換邏輯的方法非常明顯。

在大多數情況下,可升級合約會破壞不可變軟體的保證。一切皆有可能,因為我們無法確定這件事將來會做什麼。

不可升級的合約無法轉換為可升級的合約。也就是說,如果沒有可升級的跡象,那麼你可以放心,規則不會改變。

如果您對此主題感興趣,可以查看此概述,其中包含指向更多資訊的連結:https ://medium.com/hackernoon/trustless-upgrades-in-solidity-bf0bd4047d28

希望能幫助到你。

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