I have debated with myself about smart contract’s admin keys and ownership and how this can occur in different ways. I will try to point some of the findings that I have found:
-
OpenZepellin community has developed ownership patterns and, as mentioned, one of the contracts - Ownable.sol - should be the most reused code for that purpose: https://hackernoon.com/ownership-and-access-control-in-solidity-nn7g3xo3
-
This blog entry mentioned three primary flavors of ownership driven by OpenZepellin contracts (Ownable.sol, Whitelist.sol and RBAC.sol): https://medium.com/coinmonks/guide-to-ownership-and-access-control-in-solidity-f2d99f63c6d4
-
In addition, I have seen that some contracts are linked with their proxies such as Paxos GOLD contract: https://etherscan.io/token/0x45804880De22913dAFE09f4980848ECE6EcbAf78#readProxyContract and again OpenZepellin has defined essentially three ways of proxying (Inherited, Eternal, and Unstructured Storages): https://blog.openzeppelin.com/proxy-patterns/
Considering this context, I have the following questions that we could discuss here:
-
It seems like we have orthogonal concepts here: contract ownerships and proxy contracts containing their owners. As a sanity checking, is it necessarily a proxy owner to be the same as the implementation contract’s owner? (Assuming, e.g., the implementation contract inherited some of the mentioned interfaces from OpenZeppelin such as Ownable, etc.)
-
Have you seen any other interfaces other than OpenZepellin’s that are also utilized by developers that need to deal with ownership relations?
-
If we wanted to track all ownership relations on the Ethereum blockchain, would there be more than enough parse calls of OpenZepellin contracts such as Ownable, etc., that tell about ownership assignment/revocation/transfer?
-
Is there any estimate on how broad in Ethereum history OpenZepellin’s adoption versus something else on this aspect?