Proposal: [onchain] Treasury Management Temporary Solution - Deposit 3M DAI in the DSR Contract

Proposal Title Author(s) Phase Type Date Created
Deposit 3M DAI in the DSR Contract 5pence.eth & alextnetto.eth & gabrielnovak.eth II Fractal onchain 25 May 2024

Proposal

  • Convert 3M USDC to DAI
  • Deposit 3M DAI to in the Dai Savings Rate (DSR) Contract
  • Generate additional 120K DAI per annum (likely more temporarily) for Shutter DAO 0x36

With such an important proposal for the DAO, we made sure the calldata is simulated, tested and documented. More can be found here.

Background / Motivation

A recent Shutter Forum post raised a discussion of treasury management, specifically regarding the opportunity to allocate part of Shutter DAO 0x36’s long term stablecoin assets to earn yield and generate additional resources / runway for the project.

See: Shutter DAO 0x36 Discussion Regarding Treasury Management - Shutter DAO - Shutter Forum

The DSR is accepted to be safe, and the liquidity makes it simple to redeem.

This would be a temporary solution. As Shutter DAO 0x36 grows over the next 6-12 months, we would codify a more permanent treasury manager and committee.

Dai Savings Rate (DSR) Links

https://blog.makerdao.com/dai-savings-rate
https://docs.makerdao.com/smart-contract-modules/rates-module/pot-detailed-documentation
https://docs.makerdao.com/smart-contract-modules/rates-module/pot-detailed-documentation

Forum Discussion Links

Shutter DAO 0x36 Discussion Regarding Treasury Management

Proposal: Issue an RFP for Treasury Diversification

Treasury Sustainability Proposal

Voting Options

Vote “Yes” to if your support this proposal

OR

Vote “No” if you do not support this proposal

OR

Vote “Abstain” if you do not have an opinion but want to help the vote reach quorum

**

(This proposal will remain here in the forum for several days to ensure everyone has an opportunity to review the call data and tests. We want to ensure we have multiple eyeballs on the Txs - Links to Tests and Call Data Here)


(edit on 6/4 - Adding in the function and param names per Fractal/Decent format)

Transaction 1 - USDC Approval

Target:  0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Function: Approve
Parameter 1 Type: address 
Parameter 1 Value: 0x0A59649758aa4d66E25f08Dd01271e891fe52199
Parameter 2 Type: uint256
Parameter 2 Value: 3000000000000
Transaction Value: 0

Transaction 2 - DssPsm (swap USDC to DAI)

Target: 0x89B78CfA322F6C5dE0aBcEecab66Aee45393cC5A
Function: sellGem
Parameter 1 Type: address
Parameter 1 Value: 0x36bD3044ab68f600f6d3e081056F34f2a58432c4
Parameter 2 Type: uint256
Parameter 2 Value: 3000000000000
Transaction Value: 0
Transaction 3 - DAI Approval
Target: 0x6B175474E89094C44Da98b954EedeAC495271d0F
Function: approve
Parameter 1 Type: address
Parameter 1 Value: 0x83F20F44975D03b1b09e64809B757c47f942BEeA
Parameter 2 Type: uint256
Parameter 2 Value: 3000000000000000000000000
Transaction Value: 0
Txransaction 4 - SavingsDai (deposit DAI to DSR)
Target: 0x83F20F44975D03b1b09e64809B757c47f942BEeA
Function: deposit
Parameter 1 Type: uint256
Parameter 1 Value: 3000000000000000000000000
Parameter 2 Type: address
Parameter 2 Value: 0x36bD3044ab68f600f6d3e081056F34f2a58432c4
Transaction Value: 0
2 Likes

Hey Shutter DAO,

We’ve added the call data to the post above, but please also review the tests in the repo (h/t Netto, Novak, Blockful team).

It would be great if we could get some verification from other folks that everything looks good before we move this to Fractal/Decent.

2 Likes

As a reminder, it’s time to hold ETH, not USDC or DAI - So, suggestion, convert to ETH → Sell at market top → convert to DAI - NFA

2 Likes

Thanks @Ricosworksa

This proposal is simply following through on this Snapshot proposal, but that doesn’t mean it can’t still be debated more.

This proposal would be depositing less than half of the treasury’s 6.3 million, so you could certainly put forth another idea to buy some ETH with USDC to see if the community likes the idea.

In the meantime, I was hoping this specific proposal could get another confirmation on the transaction data before we put it up in Fractal or Decent. If there’s anyone in the community who is able to review it for us independently and provide a 2nd confirmation it would be super helpful. :slight_smile:

3 Likes

the tenderly txs looks good IMO.

1 Like

Transaction 0: USDC Approval

  • Target: 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
    • This address is the contract address for the USDC token.
  • Value: 0
    • No ETH is being sent with this transaction.
  • Operation: CALL
    • A standard function call.
  • Data: 0x095ea7b3 followed by parameters
    • The function approve is being called (function signature: 095ea7b3).
    • The parameters indicate that an approval is being granted to the address 0a59649758aa4d66e25f08dd01271e891fe52199 for the amount 2ba7def3000 (in hex), which converts to 1,200,000,000,000 in decimal (likely indicating a large approval, but actual units depend on token decimals).

Transaction 1: DssPsm (swap USDC to DAI)

  • Target: 0x89B78CfA322F6C5dE0aBcEecab66Aee45393cC5A
    • This address is the contract address for DssPsm.
  • Value: 0
    • No ETH is being sent with this transaction.
  • Operation: CALL
    • A standard function call.
  • Data: 0x95991276 followed by parameters
    • The function swap is being called (function signature: 95991276).
    • The parameters indicate that USDC is being swapped for DAI, involving the address 36bd3044ab68f600f6d3e081056f34f2a58432c4 and the amount 2ba7def3000 (1,200,000,000,000 in decimal).

Transaction 2: DAI Approval

  • Target: 0x6B175474E89094C44Da98b954EedeAC495271d0F
    • This address is the contract address for the DAI token.
  • Value: 0
    • No ETH is being sent with this transaction.
  • Operation: CALL
    • A standard function call.
  • Data: 0x095ea7b3 followed by parameters
    • The function approve is being called (function signature: 095ea7b3).
    • The parameters indicate that an approval is being granted to the address 83f20f44975d03b1b09e64809b757c47f942beea for the amount 27b46536c66c8e3000000 (in hex), which converts to a substantial amount, indicating approval of a large amount of DAI (exact amount depends on token decimals).

Transaction 3: SavingsDai (deposit DAI to DSR)

  • Target: 0x83F20F44975D03b1b09e64809B757c47f942BEeA
    • This address is the contract address for SavingsDai.
  • Value: 0
    • No ETH is being sent with this transaction.
  • Operation: CALL
    • A standard function call.
  • Data: 0x6e553f65 followed by parameters
    • The function deposit is being called (function signature: 6e553f65).
    • The parameters indicate that DAI is being deposited into the DSR, involving the address 36bd3044ab68f600f6d3e081056f34f2a58432c4 and the amount 27b46536c66c8e3000000.

Summary

  1. USDC Approval: Approves a large amount of USDC for a specific contract.
  2. USDC to DAI Swap: Swaps a large amount of USDC for DAI via DssPsm.
  3. DAI Approval: Approves a large amount of DAI for a specific contract.
  4. DAI Deposit to DSR: Deposits a large amount of DAI into the DSR (SavingsDai).

These transactions are part of a sequence for swapping USDC to DAI and then depositing the DAI into a savings contract (DSR). The approvals are necessary steps to allow the smart contracts to move the tokens on behalf of the user.

1 Like

Maybe this questions have been already answered, but I would like to better understand associated risks:

  1. Particularly regarding liquidity, operational risks and potential fluctuations in interest rates?
  2. Additionally, how might market instability impact the DSR’s ability to maintain the promised returns?

Detailed insights on these aspects would be great before voting.

1 Like

In order to double check that the proposal correctly does what it’s supposed to, I wrote another test. You can find it here, feel free to run it yourself and add additional checks. It executes the proposal (defined as JSON here) against a local fork of mainnet and makes the following assertions:

  • 0x36’s USDC balance decreases by 3M
  • 0x36’s DAI balance doesn’t change
  • 0x36’s sDAI balance increases by >2.5M (the exact amount fluctuate a little bit)
  • the given approvals are revoked
3 Likes

Thanks @jannik and @Baer_DAOplomats and @Ricosworksa

I really appreciate the additional checks from everyone. It’s a fairly simple 4 Txs, but a large value, so the ounces of prevention are certainly worth it.

I changed the format of the transactions above in the proposal itself to be more like the Fractal/Decent format and just generally easier to read.

I expect we’ll put this up on Decent on June 6th, unless there’s any comments on the Txs before then.

1 Like

I just realised that the stimulation I provided was of a faulty transaction.

I appreciate @5pence’s proposal. The DAO should focus on maximizing its assets’ use to generate income, as we do not have a revenue stream now.

The DSR currently gives around 8%, and the DAO will benefit greatly as it stabilises due to market volatility.

The only ‘real’ feedback I have is around the amount allocated, considering MakerDAO’s current risk scores. Maker was criticized recently for its risk appetite around the USDe/morpho allocations. The maker has moved away from its conservative risk-adjusted approach. There are announcements of introducing a new Stable token for DAI and Splitting it into two while the questions around the tiBills manager are hanging in the air. This does not consider any further risk aspects of DAI, such as the depegg risk or the risks of the contract.

Further read:

  1. GMX labs on a Tibill service provider, whos MIA

  2. Rune, the cofounder of Maker on the new DAO and new stable coin.

The short version is that we must fully know the risks when allocating 50% of the treasury.

.

DAOplomats aren’t against this proposal per se; we would like to ask the Shutter DAO to consider the allocation amount. At DAOplomats, we are comfortable in allocating upwards of 20% for long-term yield generation.

1 Like

This proposal is up for voting on Decent (formerly Fractal).

Here is the link: Decent

https://app.decentdao.org/proposals/18?dao=eth:0x36bD3044ab68f600f6d3e081056F34f2a58432c4

Closing this thread with an update:

This proposal executed properly on Sunday: Transaction Hash on Etherscan

Due to some nuances with the way that DSR deposit contract emits events, the sDAI that 0x36 holds might not display in some wallet viewers. Decent, for instance, doesn’t show that we hold the 3,000,000 worth of sDAI, or any sDAI in the Shutter treasury. This might be corrected soon.

If anyone needs to confirm the balance, you can check etherscan and see the DAO’s sDAI here

You can also verify by looking at the sDAI contract and reading the “balanceOf” function here using the treasury’s address “0x36bD3044ab68f600f6d3e081056F34f2a58432c4”

Thanks to the Blockful team for checking the transaction data multiple times, and even simulating a mainnet fork that voted and executed the proposal to be certain. Thanks Blockful!

4 Likes

I pop by to review this, but I couldn’t see the transaction hash, so I enter to the balance link and look for it.

Here it is for future references.

Praise @5pence for helping the DAO get revenue from the treasury.

2 Likes

The current value of this deposit is: 3,048,531.76 DAI - that’s a 48k gain in 3 months.

Seems to be tracking close to the 8% we’re expecting.

Saw this nice explainer from Martin on why the DSR is a high yielding option. Thought it would be good to augment this thread with:

1 Like