SIP-10: Upgrade Delegate Powers
Author | |
---|---|
Status | Implemented |
Type | Governance |
Implementor | TBD |
Release | TBD |
Discussions-To | https://discord.gg/CDTvjHY |
Created | 2019-07-16 |
Simple Summary
This SIP proposes to add the ability for Delegates to mint & burn on their owners behalf.
Abstract
What are Delegates and what are their current powers? Delegates are trusted wallet addresses that you can set to claim the weekly rewards on your behalf. This function is already live on SNX mainnet however adoption will likely be limited if Delegates are not able to help their owner in penalty to fix their c ratio before claiming the rewards. By upgrading the current powers of Delegates, we will be able to explore the true potential of this feature and hopefully help minters to have an easier life and less #tech-support issues with their ledger wallet. This will also encourage 3rd party integrations such as building an automated delegate to help claim the weekly rewards
Motivation
We expect c-ratio and reduction of rewards period to change from time to time based on governance calls so by upgrading the powers of delegates, owners can make use of their delegates to help them react to c-ratio and rewards period changes more easily. Using delegates provides higher security as well because now you can keep your hardware wallet in cold storage without needing to connect it online anymore. Also we expect delegates to help solve a major pain point for ledger wallet owners with their constant browser support issues. More importantly delegates currently can only claim rewards on behalf, however if the owner wallet is in penalty, the delegate will not be able to help fix the penalty and claim for maximum rewards. The upgrade in powers is much needed to complete the potential of what delegates can help their owners to achieve for rewards. Delegating synthetix.exchange() is to be able to exchange via a mobile DApp browser and for Triggered Orders. (see https://github.com/Synthetixio/synthetix/issues/195)
Specification
New call functions expected to be added in which allows owner to approve each function individually or all 3 functions of claim, issue and burn with a single contract call
function issueSynthsOnBehalf function issueMaxSynthsOnBehalf
function burnSynthsOnBehalf function burnSynthsToTargetOnBehalf
function approveIssueOnBehalf function approveBurnOnBehalf
function removeIssueOnBehalf function removeBurnOnBehalf
function approveAllDelegatePowers (add delegate entries for all of the above including claimFeesOnBehalf) function removeAllDelegatePowers
Rationale
There should be additional functions to safeguard against potential rogue delegates after approval hence:
- Delegates will only be able to burn sUSD if the owner is in penalty and only up to the point where the penalty will be removed
- Delegates will not able to burn any sUSD to unlock the owner SNX tokens
Technical consultation has been asked from Clinton (hav-noms) & Jackson(jacko125) (SNX core team) and initial feedback is that this is feasible
Strategic backers for this SIP are SNX Discord Guardians - gmgh & Arthur
Green light given by Kain to push this SIP forward
Potential uses cases
- SNX stored in ledger wallet, delegate to your own hot wallet such as metamask wallet to do claim/burn/mint without worrying about broken ledger support on browser ever again
- Integration with 3rd party services to automate the weekly rewards claim and ensuring that you can always claim maximum rewards because your delegates can now fix your c ratio if you are in penalty
- SNX stored in hardware wallet, delegate to your own hot wallet such as metamask/trust wallet so that when you are traveling or away from home you will be still be able to claim for maximum rewards easily
Test Cases
https://github.com/Synthetixio/synthetix/blob/v2.21.6/test/contracts/DelegateApprovals.js https://github.com/Synthetixio/synthetix/blob/v2.21.6/test/contracts/Issuer.js#L1703 https://github.com/Synthetixio/synthetix/blob/v2.21.6/test/contracts/Exchanger.js#L1230
Implementation
-
Deprecate existing
DelegateApprovals
contract that is attached to FeePool and supports only setting delegation for single action/s. -
Doesn't require associatedState to be set to FeePool contract.
-
User's can set their delegated approvals directly on the new
DelegateApprovals
contract and desired level of actions they want to give each approved delegate address. -
Synthetix / Issuer and FeePool will read from the
DelegateApprovals
as a single source of truth for the required delegations. -
Add EternalStorage pattern to new
DelegateApprovals
contract to allow adding new delegation powers but also not lose existing approvals that have been set.
https://github.com/Synthetixio/synthetix/blob/master/contracts/DelegateApprovals.sol
Copyright
Copyright and related rights waived via CC0.