SIP-168: Governance Participation Program

Author
Discussions-Tohttps://research.synthetix.io/t/governance-participation-program/450
StatusImplemented
Created2021-07-19

Implementor

Andy T CF (@andytcf)

Simple Summary

This proposal aims to encourage governance participation from the Synthetix community and ecosystem abroad. Token holders that have values aligned with that of the Ambassadors will now be rewarded with SNX for delegating their votes for the duration of an Epoch (initially set at 28 days), to the Ambassador Multi-sig.

The rewards will be sponsored by the sDAO, which will be 32,000 SNX for the epoch.

Abstract

If this proposal passes, the following will be implemented

  • A script that tracks the delegation activity of users who have delegated to the ambassadorDAO within the program epoch
  • A merkle distributor contract that will allow eligible wallets identified from the script to claim their pro-rata SNX rewards
  • Communications both on Synthetix community and the ambassador dApp to enable discovery of this program
  • The SynthetixDAO (sDAO) will be initially sponsoring 8,000 SNX each week for 4 weeks (32,000 SNX total)

Motivation

According to the ambassadorDAO mandate, one of their main responsibilities is partaking in ecosystem-wide governance systems on behalf of the Synthetix community. As of writing this SIP, we have seen major voter apathy in terms of delegating to the ambassadorDAO multisig in all the protocols, except for AAVE.

This Governance Participation Program would reward community members who wish to express their preferences with an ecosystem proposal, but are discouraged by the concentration of token-votes that some top delegates have and the high quorum thresholds for proposals. The participation program encourages these community members to express their votes through their like-minded Synthetix Ambassadors, and in doing so would be eligible to receive SNX, which in turn may be used for further coordination and governance participation in the various Synthetix DAOs.

In order to fulfil the main responsibility of the ambassadorDAO, the aDAO requires a substantial amount of delegated voting power as made apparent in protocols such as Uniswap (which requires 2.5M - 10M tokens to create a proposal).

The goal of this SIP is to:

  • Encourage participation and overcome voter apathy through the rewarding of delegator with an amount of Synthetix Network Tokens
  • Enable the ambassadorDAO to participate in important governance systems that have a direct impact on the Synthetix ecosystem

Specification

Overview

On the approval of this SIP, the program start and end dates will be specified by the Synthetix Ambassadors.

During the program epoch, users will be encouraged to delegate their Uniswap (UNI) tokens to the Synthetix Ambassador's Multisig via the ambassadors dApp (ambassadors.synthetix.io).

After this epoch ends, a script will be run in order to analysis all the delegation activity that happened with the program epoch and assign pro-rata rewards to users who have successfully participated in the program.

(If a user was to withdraw their delegation before the end of an epoch, they will not be eligible for any rewards within that epoch)

Users will then be able to claim their allocated SNX rewards from the Merkle Distributor contract.

Rationale

Currently users can delegate their tokens to the ambassadorDAO by calling the delegate() function on the Uniswap ERC20 but considering the high threshold of tokens needed for creating a proposal on the Uniswap Governance system and the high concentration of UNI among top delegates, there is a lack of voter expression in critical ecosystem proposals.

This was the catalyst to consider providing incentives to delegates in order to gather more voting power for the ambassadorDAO multisig in order to participate in governance proposals that are critical to the Synthetix ecosystem.

Originally, we had discussed the usage of a vault, whereby users must transfer their ownership into the vault which will then delegate to the ambassadorDAO.

After some feasibility research, this method was not ideal as it:

  • Changes the ownership of the governance token
  • Is not sticky, when the program ends and users need to use their UNI for other purposes, the ambassadorDAO multisig would lose the delegation on the transfer out
  • Had high friction and required more gas than performing most of the calculation off-chain

Instead, the use of a script to analyse block-chain events was considered to be the solution that was least frictional as it does not require users to send their funds out of their wallets and the events are already being emitted by the UNI ERC20 contracts.

By using a merkle distributor, both the uploading of the claim-data and also claiming process are highly efficient and require minimal gas usage benefitting both the protocolDAO and also the users who participate in the program.

Technical Specification

Script

There will be a script written that takes advantage of ether.js events API to map through all the DelegateChanged events emitted by the UNI ERC20, the events are then analysed to map out the:

  • Blocknumber (for time-weighted rewards)
  • Their contribution (denominated in UNI)

From the resulting data gathered from the script, we generate a merkle root containing their pro-rata rewards to upload to our merkle distributor contract

Merkle Distributor

The Merkle Distributor is a highly efficient data structure that is able to store the reward data generated from the script above via a merkle root. The total SNX rewards will be deposited in the contract and users will be able to interact with the contract using their wallet address to see if their wallet is eligible to claim rewards and how many they can claim.

They will then be able to send a transaction to the contract which will then release the allocated SNX rewards to them.

Pro-rata rewards

The rewards allocated to the program participants will be affected by:

  • Their time of participation
  • Their delegation amount
  • Whether they've undelegated during the epoch (complete undelegation results in no rewards)

Test Cases

Starting Conditions
  1. startBlock = 0;
  2. endBlock = 193_710;
  3. startingBalance = 1_000_000
  4. participants = 4
  5. delegatorOne (A) = 50_000 UNI
  6. delegatorTwo (B) = 2_500 UNI
  7. delegatorThree (C) = 10_000 UNI
  8. delegatorFour (D) = 2_000_000 UNI
  9. totalRewards = 32000
  10. rewardsPerBlock (RPB) = 32000/193710 (totalRewards/blocksLeft)
Sequences of events
  1. A delegates their entire balance at Block 100
  2. B delegates their entire balance at Block 1000
  3. A un-delegates their entire balance at Block 20_000
  4. C delegates their entire balance at Block 32_000
  5. B undelegates their entire balance at Block 100_000
  6. A delegates their entire balance at Block 140_000
  7. D delegates their entire balance at Block 165_000
Calculations

On the first event

A is the only one in the pool, they receive the 100% (50000/50000) of the RPB for 900 blocks (1000 - 100)

On the second event

A owns 50000/52500 of the RPB for 19_000 blocks

B owns 2500/52500 of the RPB for 19_000 blocks

On the third event

A is slashed and their accumulated rewards are added back to the remainingRewards

B is the only one in the pool, they receive the 100% (2500/2500) of the RPB for 12_000 blocks (32_000 - 20_000)

On the fourth event

B owns 2500/12500 of the RPB for 68_000 blocks

C owns 10000/12500 of the RPB for 68_000 blocks

On the fifth event

B is slashed and their accumulated rewards are added back to the remainingRewards

C is the only one in the pool, they receive 100% (10000/10000) of the RPB for 40_000 blocks

On the sixth event

C owns 10000/60000 of the RPB for 25_000 blocks A owns 50000/60000 of the RPB for 25_000 blocks

On the seventh event

C owns 10000/2060000 of the RPB for 28_710 blocks A owns 50000/2060000 of the RPB for 28_710 blocks D owns 2000000/2060000 of the RPB for 28_710 blocks

Configurable Values (Via SCCP)

N/A

Copyright and related rights waived via CC0.