makerdao / spells-mainnet

Staging repo for MakerDAO weekly executive spells
GNU Affero General Public License v3.0
107 stars 43 forks source link

spells-mainnet

Build Status

Staging repo for MakerDAO executive spells.

Instructions

Getting Started

$ git clone git@github.com:makerdao/spells-mainnet.git
$ dapp update

Build

$ make

Test (DappTools without Optimizations)

Set ETH_RPC_URL to a Mainnet node.

$ export ETH_RPC_URL=<Mainnet URL>
$ make test

Test (Forge without Optimizations)

Prerequisites

  1. Install Rust.
  2. Install Forge.

Operation

Set ETH_RPC_URL to a Mainnet node.

$ export ETH_RPC_URL=<Mainnet URL>
$ make test-forge

Deploy

Set ETH_RPC_URL to a Mainnet node and ensure ETH_GAS_LIMIT is set to a high enough number to deploy the contract.

$ export ETH_RPC_URL=<Mainnet URL>
$ export ETH_GAS_LIMIT=5000000
$ export ETH_GAS_PRICE=$(seth --to-wei 100 "gwei")
$ make deploy

A few helpful tips to estimate gas. You can use the following to get a gas estimate for the deploy.

make all
make estimate

Once you have that, add another million gas as a buffer against out-of-gas errors. Set ETH_GAS_LIMIT to this value.

export ETH_GAS_LIMIT="$((<value from previous step> + 0))"
export ETH_GAS_LIMIT=$(bc <<< "$ETH_GAS_LIMIT + 1000000")

You should also check current gas prices on your favorite site (e.g. https://ethgasstation.info/) and put that gwei value in the ETH_GAS_PRICE line.

export ETH_GAS_PRICE=$(seth --to-wei 420 "gwei")

Cast to tenderly

  1. Create Tenderly account (no trial period needed atm) https://dashboard.tenderly.co/register
    • Note down TENDERLY_USER and TENDERLY_PROJECT values
  2. Create Tenderly access token (on the account level!) https://dashboard.tenderly.co/account/authorization
    • Note down TENDERLY_ACCESS_KEY values
  3. Export required env vars via export or create scripts/cast-on-tenderly/.env file with them:
    ETH_RPC_URL=""
    TENDERLY_USER=""
    TENDERLY_PROJECT=""
    TENDERLY_ACCESS_KEY=""
  4. Execute make cast-on-tenderly spell=0x..., with the address of the spell that hasn't been casted yet
    • The execution should finish with successfully casted
  5. Open the public explorer url printed into the console (it should require no credentials)