Add a new
AddressResolver contract for smart contract lookups.
AddressResolver contract stores the addresses of all interoperable smart contracs within the Synthetix protocol, and provide access to this resolver in all smart contracts that need to communicate with the others.
The Synthetix protocol is supported by a fairly complicated network of smart contracts. However, due to the limits put on smart contracts sizes by the EVM (see EIP-170) only so much logic and state can fit into a single contract. Moreover, to reduce the need to upgrade key contracts and to provide better adherence to the single-responsiblity-principle, having more smaller, single-purpose contracts is preferable.
In order to facilitate this intercontract communication, a contract respository (based on the Service Locator pattern) is the most robust and bytecode efficient solution.
AddressResolver needs a mechanism with which to
import mulitple addresses, and this needs to be restricted to the
owner. This import should be mutative, such that any subsequent imports of the same
name will simply overwrite previous versions.
It will be the responsibility of the deployment (and eventually migration contracts) to ensure that new addresses are imported after they are deployed.
The keys of this repository will be
bytes32 encoding of the existing contract names, which are all described in our list of addresses in the documentation.
Every contract that wishes to use the
AddressResolver will need to inherit from
MixinResolver (by leveraging multiple inhertance, we an think of this functionality as being a mixed into the target contract).
We analyzed how others have approached this task - in particular Colony's implementation of an address lookup system. Ours is somewhat different in that it simply needs to store contract names and allow simple lookup. Seeing as we already have a system in place to uniquely identify contracts by a
string name - converting these to
bytes32 seems the most straightforward and gas efficient.
Copyright and related rights waived via CC0.