Contract-Invocation

我是否有效地將自己鎖定在自己的智能合約之外?

  • November 18, 2017

我害怕我把自己鎖在自己的契約之外,我的資金被凍結在裡面。如果有人能證實這一點,那就太好了。

我使用乙太坊錢包創建了以下智能合約: 0xdCC90B1Eace5c2190F1eB2EFa36fa24f69dAD091

我用來創建智能合約的賬戶如下:0x128e9DE813f598C24403e5F67946D11AAFcCff7e

在一系列不成功的轉賬嘗試之後,我使用平價錢包對合約功能本身進行了更改。我相信可以通過更改智能合約來修復錯誤。在這樣做的同時,我顯然將自己作為唯一的契約所有者移除了。請參閱以下 Tx 雜湊: 0x6affa9e915dd758efca2458b523743ff32eb3b997a351ff250c5336ad6100382

在此之後,契約上的任何內容都無法再執行。這是否意味著我有效地將自己從智能合約中移除,並且我所有的資金都被永遠鎖定在那裡?現在(和將來)是否沒有其他機會獲得資金和這個智能合約?

如果是這樣,我真的認為應該有某種標准保護,這樣契約所有者就不能在沒有通知的情況下將自己從契約中刪除等等……

是的,我認為你被鎖定了。

不要m_numOners被 1 所迷惑——程式碼似乎沒有考慮到所有所有者都被移除的情況,所以它在m_numOwners這裡設置了 1 的下限,但實際上並沒有阻止最後一個所有者的移除:

while (m_numOwners > 1 && m_owners[m_numOwners] == 0) m_numOwners--;

我認為,如果您在創建契約時將_required(放入m_required)設置為 1 而不是 0,則不會讓您這樣做。我認為契約沒有正確處理m_required為 0 的邊緣情況。

您可以通過使用您的地址呼叫isOwner合約上的方法來確認。我這樣做:

> web3.eth.call({"to":"0xdCC90B1Eace5c2190F1eB2EFa36fa24f69dAD091", "data":"0x2f54bf6e000000000000000000000000128e9de813f598c24403e5f67946d11aafccff7e"}).then(console.log);
> 0x0000000000000000000000000000000000000000000000000000000000000000

零響應意味著錯誤。您還可以在 MyEtherWallet 合約選項卡上確認 - 粘貼合約地址和 ABI。您需要編輯 ABIisOwner以設置"constant":true從那裡呼叫它。它還返回false:即該地址不是所有者。

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