SuperGoodDollar is an implementation of the GoodDollar token which adds functionality implemented by the Superfluid protocol, making it a Super Token.
SuperGoodDollar is implemented as a Pure Super Token - it has no underlying ERC20.
This is possible because Super Tokens are themselves ERC20 tokens.
The SuperGoodDollar contract is composed like this:
GoodDollarProxy is a minimal base contract. It's responsible for state storage and for dispatching calls to the appropriate logic contract via delegatecall.
Its initialize
method connects the proxy to 2 logic contracts:
initialize
then invokes the initializer methods of both connected logic contracts.
The contract GoodDollarCustom
overrides some of the method already implemented by the SuperToken
contract.
Such overriding across different logic contracts can be done by making external calls to the base implementation.
For convenience, this is handled by the base contract SuperTokenBase
which wraps SuperToken methods to be overrided.Dual upgradeability of the 2 connected logic contracts is achieved this way:
The tests in SuperGoodDollar.ts
aren't comprehensive (not ready for production), but sufficient to prove that the mechanism with 2 logic contracts works.