Indexed Improvement Proposal 3: Enable Meta-Governance for COMP-Like Tokens
Author: Dillon Kellar
Summary
This proposal would enable NDX holders to vote with the COMP & UNI held by any index pool. Support for other governance tokens that support delegation will follow as the contracts are developed.
Motivation
The two indices which currently exist are DEFI5 and CC10. These 2 pools collectively hold 285k UNI and 7.3k COMP. These are not quite enough tokens to make a large difference in proposals based on current levels of participation in these protocols, but in the future this may change, and we do not want to contribute to voter apathy in other on-chain networks.
Because these governance tokens allow delegation of voting power, it is possible to use them to vote even while they are held by the index pools. Index tokens do not support the necessary balance snapshots to allow LPs to vote with these tokens in a secure manner, but they can be delegated to meta-governance contracts where NDX holders can determine how to cast votes on UNI and COMP proposals.
This would both make our protocol a better member of the ecosystem by increasing participation in on-chain governance and increase the value proposition of NDX token itself, which would likely encourage governance participation for our own community. Additionally, it would help compensate the NDX treasury for rewards paid to keepers who keep the pools updated.
Meta Governance Contracts
We will utilize two new āmeta governanceā contracts. These are contracts modeled on GovernorAlpha, the governance contract used by NDX, COMP, UNI and several other projects, which allow NDX holders to vote on āmeta proposalsā which are proposals for how the delegated votes should be cast on external proposals for Uniswap or Compound governance.
We will use one contract for each governance token - this proposal adds MetaGovernorCOMP and MetaGovernorUNI, which use the same template.
The code for these contracts can be found here:
Proxy Updates
In order to support delegation of COMP-like tokens, the proxy implementations for MarketCapSqrtController
and IndexPool
must be updated to allow governance to tell the index pools to delegate their voting power to the meta governor contracts.
The primary challenge with this is handling the different governance interfaces. For COMP-based tokens such as UNI and COMP, it is quite simple to enable this feature. For other tokens, we will need to create more specific contracts & delegation functions to enable meta governance. This proposal would enable support only for COMP-based tokens, with other delegation-enabled tokens to follow.
The contracts have been updated on github with the modifications described below.
MarketCapSqrtController
Add delegateCompLikeTokenFromPool
which is only callable by the NDX timelock. This function takes the address of an index pool, the address of the token to delegate, and the address of the delegatee, and calls delegateCompLikeToken
on the index pool.
IndexPool
Add delegateCompLikeToken
which is only callable by the controller. This function takes the address of the token to delegate and the address of the meta governor to delegate to, then calls the delegate
function on the token to delegate to the governor.
The contracts have been deployed! On-chain proposal coming a little later today.
MetaGovernorCOMP: 0xeEB40d10cb86f569BB978A81a4eA178a9E1dfDdf
MetaGovernorUNI: 0x1aa7c2a1E6E0c4981D77b96aB985b161bb7729b9
MarketCapSqrtController Implementation: 0x8542E1ddE76E7725DF3ff3C7829DC07229998333
IndexPool Implementation: 0x2483C55E414447CC78b0Bfac77C1471D81BAAbdf
The audit is available here: