Solidity

Solidity:合約繼承與升級

  • July 2, 2018

這可能已經在其他地方得到了回答,但我找不到 100% 令人滿意的答案。我有以下契約:

Contract One {}

Contract Two is One{}

Contract Three is Two {}

所有契約都在單獨的文件中,正在導入。在這種情況下,我無法理解升級的概念,因為當我在 Truffle 中編譯合約 3 時,其他所有內容都會在此時導入和編譯。

假設我在合約 3 中有設置合約 1 和 2 的新地址的函式,那麼升級的過程是什麼?我無法理解完整的邏輯,並希望對此過程進行詳細描述。基本上,我想要的是能夠在以後更改契約一和契約二(添加更多功能,更改內容)而不影響契約三上的資料結構。

您將永遠無法使用問題中給出的範例來更新任何內容。這裡只有一個合約—— Three,它嵌入了合約的屬性和One功能Two。部署後,您將無法再對其進行更新。

如果您希望能夠更新OneTwo嵌入的功能Three,則Three必須持有:

  • 一個引用One和一個onlyOwner可以改變該引用的函式
  • 一個引用Two和一個onlyOwner可以改變該引用的函式

例如:

interface IOne {
   // Define your functions here
}

interface ITwo {
   // Define your functions here
}

contract One is IOne {
   // Implement your functions here
}

contract Two is ITwo {
   // Implement your functions here
}

contract Three is Ownable {
   IOne public one;
   ITwo public two;
   constructor(IOne _one, ITwo _two) public {
       one = _one;
       two = _two;
   }
   function setOne(IOne _one) external onlyOnwer {
       one = _one;
   }
   function setTwo(ITwo _two) external onlyOnwer {
       two = _two;
   }
}

請參閱此處了解Ownable.

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