dao/operations/templates/terminus-deploy.md

2.8 KiB

Deploy the Terminus contract

The Terminus contract is deployed as an EIP2535 Diamond proxy contract with a Terminus facet attached to it.

This checklist describes how to deploy the contract.

Deployed addresses

You will modify this section as you go through the checklist

Diamond addresses

TerminusInitializer address

export TERMINUS_INITIALIZER_ADDRESS=""

TerminusFacet address

export TERMINUS_FACET_ADDRESS=""

Environment variables

  • export DAO_NETWORK=<desired brownie network>
  • export DAO_OWNER=<path to keystore file for owner account>
  • export DAO_OWNER_ADDRESS=$(jq -r .address $DAO_OWNER)
  • export GAS_PRICE="<N> gwei"
  • export CONFIRMATIONS=<M>
  • export TERMINUS_ADDRESSES=<path to JSON file in which to store diamond addresses>

Deploy diamond proxy

  • Deploy diamond with all core facets
dao core gogogo \
    --network $DAO_NETWORK \
    --sender $DAO_OWNER \
    --gas-price "$GAS_PRICE" \
    --confirmations $CONFIRMATIONS \
    --owner $DAO_OWNER_ADDRESS \
    --outfile $TERMINUS_ADDRESSES
  • Store JSON output under Deployed addresses / Diamond addresses above.

  • Export diamond proxy address: export TERMINUS_DIAMOND="$(jq -r .Diamond $TERMINUS_ADDRESSES)"

Deploy TerminusInitializer

  • Deploy TerminusInitializer contract
dao terminus-initializer deploy \
    --network $DAO_NETWORK \
    --sender $DAO_OWNER \
    --gas-price "$GAS_PRICE" \
    --confirmations $CONFIRMATIONS
  • Export address of deployed contract as export TERMINUS_INITIALIZER_ADDRESS=<address>

  • Store address of deployed contract under Deployed addresses / TerminusInitializer address above

Deploy TerminusFacet

  • Deploy TerminusFacet contract
dao terminus deploy \
    --network $DAO_NETWORK \
    --sender $DAO_OWNER \
    --gas-price "$GAS_PRICE" \
    --confirmations $CONFIRMATIONS
  • Export address of deployed contract as export TERMINUS_FACET_ADDRESS=<address>

  • Store address of deployed contract under Deployed addresses / TerminusFacet address above

  • Attach TerminusFacet to diamond:

dao core facet-cut \
    --address $TERMINUS_DIAMOND \
    --network $DAO_NETWORK \
    --sender $DAO_OWNER \
    --gas-price "$GAS_PRICE" \
    --confirmations $CONFIRMATIONS \
    --facet-name TerminusFacet \
    --facet-address $TERMINUS_FACET_ADDRESS \
    --action add \
    --initializer-address $TERMINUS_INITIALIZER_ADDRESS
  • Check the number of pools on the Terminus contract: dao terminus total-pools --network $DAO_NETWORK --address $TERMINUS_DIAMOND

  • Number of pools is 0

  • Check the Terminus controller: dao terminus terminus-controller --network $DAO_NETWORK --address $TERMINUS_DIAMOND

  • Controller should be the same as $DAO_OWNER_ADDRESS