Solidity
為什麼在solidity中沒有私有建構子?
我正在尋找一種機制,允許我限制
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 } }
是否有一種可靠的機制允許在編譯時以這種方式進行約束,或者實際上任何人都可以從**任何地方(在編譯時)創建一個新的合約實例?
我不認為這是可能的,因為每份契約都是公開的。創建合約實例只是讓某人更容易與合約互動,這是不可能禁止的。您可以做的是將一些方法設為私有。這將防止此類方法被其他賬戶(外部或其他合約)執行。