Proposal ID
ADdptSo35TcVpqBZqcwHTaRmd5LHXMzPa6pWELJsfmDM
What do we propose:
We propose to establish dynamic limits to prevent large liquidity exits through over-borrowing or withdrawing. This means both borrowing and withdrawing as well as importing and redeeming vTokens will be limited automatically, depending on the level of market utilization.
Why is this important?
Withdrawals of USDC/USDT/USDN are currently blocked because all the USDC/USDT/USDN has been loaned out to borrowers. This means the utilization rates of those markets are above acceptable levels to sustain the protocol. No one was able withdraw because the amount borrowers are paying back in interest is not enough to cover the number of withdrawals. This is why it was prudent to limit withdrawals with the previous proposal to a more manageable 1000 USDT and USDC per day per user.
Now that this admittedly harsh limit is established, we can propose the plan back to full functionality.
By introducing dynamic limits based on utilization rate we can gradually lift (or reapply) withdrawal and borrowing limits automatically as the situation normalizes.
This means Vires users with collateral in the protocol will know when they can withdraw based on the utilization rate. Giving a clear metric to keep track of to understand the health of their positions and the market. it also increases the stability of the protocol by automatically re-enabling limits in the case of extraordinary events that cause a similar liquidity squeeze.
For example, a USDT market that has 250m Borrowable:
| utilization | available | utilization, % | withdraw limit | borrow limit | import | redeem |
| -------------:| ---------:| --------------:| --------------:| ------------:| --------:| --------:|
| 250M/250M | 0 | 100% | - | - | - | - |
| 237.5M/250M | 12.5M | > 95% | 1K | denied | denied | denied |
| 225M/250M | 25M | > 90% | 10K | denied | denied | denied |
| 212.5M/250M | 37.5M | > 85% | 100K | 100K | denied | denied |
| 200M/250M | 50M | > 80% | 1M | 1M | denied | denied |
| < 200M/250M | >= 50M | <= 80% | no limit | no limit | allowed | allowed |
Parameters:
The daily withdrawal limit will be:
- extended to 10K as utilization drops below 95%,
- extended to 100K below 90%,
- extended to 1M below 85%,
- removed when below 80% utilization;
Borrows will be enabled:
- when utilization rate drops below 90%;
Importing and Redeeming vTokens (Vires LP tokens) will be enabled:
- when utilization rate drops below 80%;
This will push the markets to a position of ~80% utilization, which is both a decent APY and a healthy margin for borrows and withdrawals (please note, limiting imports and redeems doesn’t make any sense as users can create multiple accounts).
This proposal sets equal parameters for USDN, USDT and USDC. These parameters, as well as other markets’ configurations, can later be upgraded through Vires DAO.
Transaction Payload
{
"type": 12,
"version": 2,
"data": [
{
"key": "limiter",
"type": "string",
"value": "3PRBVq52csUvTx77NYwLTULrt2e9jdsHfRB"
},
{
"key": "main",
"type": "string",
"value": "3PAZv9tgK1PX7dKR7b4kchq5qdpUS3G5sYT|3PJ6iR5X1PT2rZcNmbqByKuh7k8mtj5wVGw"
},
{
"key": "LimitUtilizationBreakpoints",
"type": "string",
"value": "950|900|850|800"
},
{
"key": "34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ_950_acc_limit",
"type": "integer",
"value": 1000000000
},
{
"key": "34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ_900_acc_limit",
"type": "integer",
"value": 10000000000
},
{
"key": "34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ_850_acc_limit",
"type": "integer",
"value": 100000000000
},
{
"key": "34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ_800_acc_limit",
"type": "integer",
"value": 1000000000000
},
{
"key": "6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ_950_acc_limit",
"type": "integer",
"value": 1000000000
},
{
"key": "6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ_900_acc_limit",
"type": "integer",
"value": 10000000000
},
{
"key": "6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ_850_acc_limit",
"type": "integer",
"value": 100000000000
},
{
"key": "6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ_800_acc_limit",
"type": "integer",
"value": 1000000000000
},
{
"key": "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p_950_acc_limit",
"type": "integer",
"value": 1000000000
},
{
"key": "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p_900_acc_limit",
"type": "integer",
"value": 10000000000
},
{
"key": "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p_850_acc_limit",
"type": "integer",
"value": 100000000000
},
{
"key": "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p_800_acc_limit",
"type": "integer",
"value": 1000000000000
},
{
"key": "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p_borrow_utilization_threshold",
"type": "integer",
"value": 900
},
{
"key": "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p_import_utilization_threshold",
"type": "integer",
"value": 800
},
{
"key": "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p_redeem_utilization_threshold",
"type": "integer",
"value": 800
},
{
"key": "34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ_borrow_utilization_threshold",
"type": "integer",
"value": 900
},
{
"key": "34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ_import_utilization_threshold",
"type": "integer",
"value": 800
},
{
"key": "34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ_redeem_utilization_threshold",
"type": "integer",
"value": 800
},
{
"key": "6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ_borrow_utilization_threshold",
"type": "integer",
"value": 900
},
{
"key": "6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ_import_utilization_threshold",
"type": "integer",
"value": 800
},
{
"key": "6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ_redeem_utilization_threshold",
"type": "integer",
"value": 800
}
],
"senderPublicKey": "3gQ8QUfoGQW6YVuhUv3zuqsbmxbV5F2FAuDXJqVKD6C9",
"fee": 50000000,
"feeAssetId": "WAVES",
"timestamp": 1651936140000
}