Solidity

為什麼在solidity中沒有私有建構子?

  • February 10, 2022

我正在尋找一種機制,允許我限制A從任何地方創建契約,而不是另一個契約B

contract A {
   // ...
}

contract B {
   constructor() {
       A a = new A(); // legal
   }
}

contract C {
   constructor() {
       A a = new A() // illegal
   }
}

在 C++ 中,這可以通過類和私有建構子之間的友誼關係實現:

class A {
   friend class B;

private:
   A() { }
}

class B {
   B() {
       A *a = new A(); // legal
   }
}

class C {
   C() {
       A *a = new A() // illegal
   }
}

是否有一種可靠的機制允許在編譯時以這種方式進行約束,或者實際上任何人都可以從**任何地方(在編譯時)創建一個新的合約實例?

我不認為這是可能的,因為每份契約都是公開的。創建合約實例只是讓某人更容易與合約互動,這是不可能禁止的。您可以做的是將一些方法設為私有。這將防止此類方法被其他賬戶(外部或其他合約)執行。

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