SIP-394: Delegate governance power from collateral token deposited in Synthetix

Author
StatusDraft
TypeGovernance
NetworkEthereum, Optimism, Base & Arbitrum
ImplementorTBD
ReleaseTBD
Created2024-05-31

Simple Summary

Enable Synthetix to delegate governance power from token deposited in the system to any address set by governance.

Abstract

Add address delegatee in CollateralConfiguration.Data field and a function call delegate(address delegatee) to token when delegatee is not set to address(0)

Motivation

As Arbitrum deployment is accepting ARB as collateral, there is an opportunity to use the governance power in the token to vote on proposals. This could be set to delegate to multisig of Ambassador Council multisig.

Specification

Overview

Add a call to delgate to token when address is not address(0)

Rationale

As collateral configuration is already exists, the delegation can be piggybacked on top in V3 configuration. A call will be determined by whether parameter is address(0) or not. In case of renouncing the power, this could be set to dead address.

Technical Specification

Add IVotes interface which is used by many governance token as following.

interface IVotes {
    function delegate(address delegatee) external;
}

In CollateralConfugration.Data struct, add the following.

library CollateralConfiguration {
    struct Data {
        ...
+       address delegatee;
    }
}

In set function, add the following.

function set(Data memory config) internal {
    ...
    if (config.issuanceRatioD18 < config.liquidationRatioD18) {
            revert ParameterError.InvalidParameter(
                "issuanceRatioD18",
                "must be greater than liquidationRatioD18"
            );
        }
    
+   if(config.delegatee != address(0)) {
+       IVotes(config.tokenAddress).delegate(config.delegatee);
+   }
    ...
    storedConfig.depositingEnabled = config.depositingEnabled;
+   storedConfig.delegatee = config.delegatee;
}

Test Cases

When delegatee is not address(0)

  • it should call delegate(address) with delegatee as parameter.
  • otherwise do nothing.

Configurable Values (Via SCCP)

address delegatee a address to delegate to.

Copyright and related rights waived via CC0.