[IIP-2] - Add a Smart Treasury to IDLE

IIP 2 Implement a smart treasury for the IDLE protocol

  • Consensus Check Vote
    Snapshot link active until 2021-01-30T00:00:00Z

  • Authors
    Asaf Silman

  • Abstract
    Implement a smart treasury for the idle protocol. A smart treasury, based on the article by Placeholder VC could be implemented to redirect a portion of the fees into a buy-back machine, while also providing more on-chain liquidity.

  • Problem
    Since the launch of the $IDLE governance token, there has been an ongoing discussion in the forum of how to increase the on-chain liquidity of the token, and of how to give the tokens economic value in the long-term to its holders. Uniswap-like liquidity mining programs help boost on-chain liquidity in the short term, but once the program is finished most of the liquidity evaporates. Buy-back and burn models help increase the token value but also shrinks the supply of the token, which is counter-intuitive when the primary role of the token is voting rights.

  • Solution
    A smart treasury helps in solving both of these issues for $IDLE by increasing the on-chain liquidity of IDLE, and by providing a sound value proposition. Fees which are generated from the protocol can be redirected into the balancer pool, acting as a ‘buy-back machine’. This pool will be available for investors to swap against, increasing on-chain liquidity. The fees which are generated from swaps will be added into the pool, which serves as an additional income stream for the IDLE protocol. In addition to this, making the protocol eligible for $BAL tokens which can be held, or re-invested back into the smart treasury. The smart treasury will be controlled by the IDLE governance which can adjust parameters such as pool weights, token additions/removals, swap fees, and to pause/unpause swaps.

    130,000 $IDLE will be used from the ecosystem fund along-side funds from the FeeTreasury to bootstrap the smart treasury. The smart treasury will start with two tokens, IDLE-WETH. The WETH will be bought by swapping all the fee tokens (USDC, DAI …) from the FeeTreasury to WETH using uniswap. The value of IDLE and WETH will determine the initial pool weights, which will be gradually updated to a weight of 90 / 10 IDLE / WETH over a period of a month.

    In addition to this a new contract will be deployed called FeeCollector which will help convert the idle protocol fees into WETH and deposit a portion into the smart treasury, acting as the buy-back. This contract will also distribute fees to the feeTreasury, and the idle rebalancer. In the future more addresses can be added as beneficiaries to idle fee’s, such as the treasury commitee multisig.

    The technical implementation can be found in this github repo GitHub - asafsilman/idle-smart-treasury

  • Parameters

    • Smart Pool Parameters
      • Weights: 90 / 10
      • Tokens: Idle / WETH
      • Swapping fee 0.5%
    • Fee Collector Parameters
      • 80% of the fees will be directed to the smart treasury
      • 15% will be directed back to the feeTreasury
      • 5% will be directed to the idle rebalancer
  • Benefits
    Implementing a smart treasury benefits everyone in the idle community, $IDLE holders will have long-term incentives to remain holders through the tokenomics of the smart treasury, $IDLE investors/traders will have access to greater liquidity for IDLE on-chain. The IDLE protocol also benefits as it will gain an additional revenue stream which can be utilised for funding further growth for the protocol and community.

  • The Journey
    The smart treasury idea was discussed from the early stages of IDLE governance release, the following posts trace the journey of how we got to this IIP

The code has now been reviewed by members of the community with the commit at 9cef492 being the most up-to date version of the code. With reviewers

@emilianobonassi, @EndymionJkb | @Fernando , @MickdeGraaf, @patitonar, @william and @gravityblast

contributing issues to the github. Please share an eth address for your tip once the treasury committee is ready.

  • References

  • Proposal Roadmap
    This is the outline each step which needs is required to implement this IIP, and where governance will need to be involved.

    1. Pass consensus check for IIP - Forum post here: [Consensus Check] — Add a Smart Treasury to idle
    2. Delegate IDLE to my deployed address 0x143daa7080f05557C510Be288D6491BC1bAc9958 (This is my own deployer address )
    3. Deploy contracts on-chain.
    4. Create on-chain vote #1 for this IIP
      • This vote will send all fees from the FeeTreausry to the bootstrap contract to create the smart treasury.
      • This will also transfer 130,000 $IDLE to the bootstrap contract
    5. The multisig address will initialise the smart treasury and transfer ownership to the IDLE timelock. The multisig will also configure the FeeCollector to use the bootstrapped smart treasury
    6. Create on-chain vote #2 for this IIP
    • This vote will update the feeAddress for each idle token (USDCBestYield, DAIRiskAdjusted, etc) to point to the feeCollector
    • Fund 1,000 $IDLE for the grant to build the smart treasury

Really a great job so far @8bitporkchop!

Let’s spread the word and delegate votes to this address! :slight_smile:

One minor note, I think we could also withdraw some IDLE to the multisig to tip the reviewers, alongside the 1000 IDLE bounty for the IIP (so to not hit the 10 actions limit per proposal) for their contibution and let the multisig then procede with the transfers or we can distribute rewards through the Treasury committee once set up in 1-2 week.


How do we delegate votes @william ?

1 Like

Here is a guide [Guide] — How To Delegate


Congrats on the great work guys! No tip needed for me obviously: let me know if I can help any further =)


520K votes minimum exceeded! :tada:


Smart Treasury is Live :rocket:

Hi everyone, I am glad to announce that phase 1 of IIP-2 has been successfully executed, and the smart treasury has been successfully bootstrapped. >> [[Here]] <<.

To trade with the smart treasury you can simply use the balancer UI. Trades will be automatically routed to the treasury: Balancer Exchange.

The pool was bootstrapped with a starting weights of 96/4 : IDLE/WETH.
(The actual weights are 95.98 / 4.02 and will be gradually updated to 90/10)

In addition to this 1,300 $IDLE was also withdrawn as part of this proposal to fund the development grant and reward peer reviewers.

@emilianobonassi, @EndymionJkb , @MickdeGraaf, @patitonar, @william and @gravityblast

Technical details
Here is the list of transactions which were executed in order to bootstrap the treasury. The gnosis safe multisig was used for transactions interacting with the SmartTreasuryBootstrap Address.

  1. Execute Proposal → tx 0xd155bb20…
  2. swap() → tx 0x29934ad8…
  3. setIDLEPrice() → tx 0x1718aa1f…
  4. initialise() → tx 0x8111389d…
  5. bootstrap() → tx 0xcbe221…
  6. renounce() → tx 0x777675db…
  7. setSmartTreasuryAddress() → tx 0xedd6297b

The address of the ConfigurableRightsPool (Smart Treasury) is here: 0x859e4d219e83204a2ea389dac11048cc880b6aa8

And the address of the underlying bPool is here: 0xcaf467dfe064a1f54e4ece8515ddf326b9be801e

Issues encountered during bootstrap
There was a minor issue encountered during the pool bootstrap where the call to updateWeightsGradually had the wrong parameters. This will be fixed in phase 2 of the IIP, where we will call updateWeightsGradually again with the correct parameters to gradually move the pool weights from 96/4 → 90/10.

Next Steps
Now that the first phase of IIP-2 has been executed the next phase will be to enable the protocol buy-back by routing fees from idle to the FeeCollector contract. A new on-chain vote will be created in the coming days with the fix to the pool weights also included.

Thank you to everyone who voted and contributed to this proposal, it’s been an awesome experience :smiley: :rocket: .


Congrats on getting the Smart Treasury off the ground Asaf. Well done, amazing job :fire:


Really cool to be part of the idle community! Roadmap for 2021 is crazy fun!!
Congrats to EVERYONE!


Really good job! :slight_smile:


Congrats @8bitporkchop, the countless contributors, and the whole Idle Governance for the deployment of the Smart Treasury! :clap: :rocket:


:star_struck: :partying_face: :partying_face:


Huge congrats @8bitporkchop, that’s a great milestone :100: :fire: props to the whole community for supporting, discussing, and moving forward with this initiative!


Phase two of this proposal is now live on-chain :fireworks:



Hi frens I was told to post a bounty address here for reviewing the smart contract. You can send the bounty to mick.eth

Great to see it go live!


Great job everyone! Glad to see this working!

Here is my eth address: 0x3752F0a521b2E383693f658D6FC377953024C207


Congrats @8bitporkchop :raised_hands: :facepunch: great job :muscle:

Looking on the “about” tab of the pool there is something i don’t understand:

  • There is a gradual weights update underway
    from June 20, 2680, 10:01 PM (1612391309)
    until July 15, 2681, 10:01 PM (1614983309)

    :thinking: why the date is from June 20 2680 to July 15 2681 ?? Isn’t strange?

  • Restrict LPs to a whitelist
    Tokenholders can be included into a whitelist or for be a LP need a new smart contract that will create a tokenholders pool and than it will be a LP for the Treasury?


The gradual weight update parameters were incorrectly entered. The issue was the start and end times were entered as timestamps, when they should have been blocknumbers.

I have already spoken with the balancer team about this, and a fix has already been implemented into phase 2 of this IIP if you look at the on-chain proposal it is the first action.

Upon the advice from balancer and the general design principal of a smart treasury, the protocol should be the only LP. This is just the safest design choise for the smart treasury. This doesn’t stop others from creating their own pools on balancer however. Once balancer V2 is released, or after a few months it may be good to re-evaluate the performance of the smart treasury and see what could be changed to optimise the pool to the needs of the community.


This is the eth address I will be using for receiving the development grant: 0x1929A0454cDD4d925E8Fc9b6c366ECD7844866F2


Great job! Really proud to have participated and glad we achieved this result!

My address is emiliano.eth

Looking forward to build and support even more!