Hi all,
Let’s discuss the design of limiting SNS treasury proposals!
Context & Motivation
After the community discussion here, there are four planned measures to make passing critical SNS proposals more robust. For context, critical proposals are transfers of treasury funds, minting of SNS tokens, and giving dapp canisters under DAO control to another controller (“de-registering dapp canisters”). One planned measure is introducing limits to the amount of tokens that can be moved by SNS treasury proposals during a given period of time. The main motivation for this is that it is one of the only measures that helps to slow down attacks in a malicious scenario.
This forum thread is to discuss the design of these limits in more detail.
Proposed design
We propose the following design.
- Have separate limits on each kind of token in the SNS treasury - the native SNS tokens and ICP tokens.
- For each of those tokens (native SNS tokens & ICP tokens), the following limits hold for each week:
- at most 300,000 XDR worth of tokens can be taken out of the treasury
- if there are at least 100,000 XDR worth of tokens in the treasury, then at most 25% of the treasury can be moved out.
- In the case where there are less than 100,000 XDR worth of tokens in the treasury, this limit does not apply.
- For the conversion rate of SNS tokens / XDR and ICP tokens / XDR, take the moving average from the last month.
Some details
Why XDR?
The ICP to XDR conversion rate is already stored on an NNS canister and therefore easily obtainable. Since the main purpose of this feature is to limit the damage that can be done in a malicious context, whether these limits are given in XDR or another currency, e.g., USD, does not seem to be relevant.
How to get the conversion rate for SNS tokens to XDR?
It is unclear how to get a reliable conversion rate from any SNS token to XDR or ICP - new SNSs might not even be in any liquidity pools yet. This first design proposes to take the SNS tokens to ICP tokens conversion rate from the SNS’s initial decentralization swap. If the SNS token increases or decreases a lot in value after the initial swap, then the limits might be a bit off.
To better understand this, let’s consider some examples:
- Let’s assume that at the swap, 1 SNS token = 1 ICP, let’s also assume (just because this is the easiest number for the given rules), that 1 ICP = 3 XDR and that this stays constant over time.
- Let’s now consider different scenarios for the SNS token price and see how many XDR can be taken out of the treasury according to the above rules in one week.
- According to the above rules, we take the SNS / ICP conversion rate from the swap, so 1 SNS token = 1 ICP token. As we assume ICP / XDR is stable, this means that a treasury proposal can take out 300,000 XDR = 100,000 ICP = 100,000 SNS tokens.
- If the SNS token to ICP exchange rate has not changed, then this is accurate.
- Let’s assume the SNS token is now worth 10 times more: 1 SNS token = 10 ICP. This means that effectively a treasury proposal can now take out 100,000 SNS tokens = 3,000,000 XDR
- Let’s assume the SNS token is now worth 10 times less: 1 SNS token = 0.1 ICP. This means that effectively a treasury proposal can now take out 100,000 SNS tokens = 30,000 XDR
The conclusion is that in the case where the SNS token increases a lot in value compared to ICP, the measures proposed in this thread are less effective. However, for many SNS tokens these measures would already slow down an attack scenario, which is the main goal. Later improvements, e.g., to make the limits even more robust, can still be added in the future.
Next steps
We are looking forward to discussing the design of this feature in this forum thread. Once we converge to a design, we plan to pick up the implementation and propose this to the NNS as part of the normal release process of SNS governance.