Solidity
Solidity:合約繼承與升級
這可能已經在其他地方得到了回答,但我找不到 100% 令人滿意的答案。我有以下契約:
Contract One {} Contract Two is One{} Contract Three is Two {}
所有契約都在單獨的文件中,正在導入。在這種情況下,我無法理解升級的概念,因為當我在 Truffle 中編譯合約 3 時,其他所有內容都會在此時導入和編譯。
假設我在合約 3 中有設置合約 1 和 2 的新地址的函式,那麼升級的過程是什麼?我無法理解完整的邏輯,並希望對此過程進行詳細描述。基本上,我想要的是能夠在以後更改契約一和契約二(添加更多功能,更改內容)而不影響契約三上的資料結構。
您將永遠無法使用問題中給出的範例來更新任何內容。這裡只有一個合約——
Three
,它嵌入了合約的屬性和One
功能Two
。部署後,您將無法再對其進行更新。如果您希望能夠更新
One
或Two
嵌入的功能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
.