make-summary-deployment.sh 3.47 KB
Newer Older
1 2 3
#!/bin/bash
set -euo pipefail

4 5 6 7 8
export FOUNDRY_PROFILE=kdeploy

SCRIPT_HOME="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
# shellcheck source=/dev/null
source "$SCRIPT_HOME/common.sh"
9 10 11 12 13 14 15 16 17 18 19 20
# Sanity check on arguments
if [ $# -gt 1 ]; then
  echo "At most one argument can be provided. Instead $# were provided" 1>&2
  exit 1
elif [ $# -eq 1 ]; then
  if [ "$1" != "-h" ] && [ "$1" != "--help" ] && [ "$1" != "container" ] && [ "$1" != "local" ] && [ "$1" != "dev" ]; then
    notif "Invalid argument. Must be \`container\`, \`local\`, \`dev\`, \`-h\` or \`--help\`"
    exit 1
  else
    parse_first_arg "$@"
  fi
fi
21 22

cleanup() {
23
  trap
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
  # Restore the original script from the backup
  if [ -f "$DEPLOY_SCRIPT.bak" ]; then
    cp "$DEPLOY_SCRIPT.bak" "$DEPLOY_SCRIPT"
    rm "$DEPLOY_SCRIPT.bak"
  fi

  if [ -f "snapshots/state-diff/Deploy.json" ]; then
    rm "snapshots/state-diff/Deploy.json"
  fi

  if [ "$LOCAL" = false ]; then
    clean_docker
  fi
}

# Set trap to call cleanup function on exit
40
trap cleanup EXIT ERR
41

42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
# create deployments/hardhat/.deploy and snapshots/state-diff/Deploy.json if necessary
if [ ! -d "deployments/hardhat" ]; then
  mkdir deployments/hardhat;
fi
if [ ! -f "deployments/hardhat/.deploy" ]; then
  touch deployments/hardhat/.deploy;
fi
if [ ! -d "snapshots/state-diff" ]; then
  mkdir snapshots/state-diff;
fi
if [ ! -f "snapshots/state-diff/Deploy.json" ]; then
  touch snapshots/state-diff/Deploy.json;
fi

DEPLOY_SCRIPT="./scripts/Deploy.s.sol"
57
conditionally_start_docker
58 59

# Create a backup
60
cp $DEPLOY_SCRIPT $DEPLOY_SCRIPT.bak
61 62 63 64 65

# Replace mustGetAddress by getAddress in Deploy.s.sol
# This is needed because the Kontrol deployment is only a partial
# version of the full Optimism deployment. Since not all the components
# of the system are deployed, we'd get some reverts on the `mustGetAddress` functions
66
awk '{gsub(/mustGetAddress/, "getAddress")}1' $DEPLOY_SCRIPT > temp && mv temp $DEPLOY_SCRIPT
67

68 69 70 71 72
CONTRACT_NAMES=deployments/kontrol.json

DEPLOY_CONFIG_PATH=deploy-config/hardhat.json \
DEPLOYMENT_OUTFILE="$CONTRACT_NAMES" \
  forge script -vvv test/kontrol/deployment/KontrolDeployment.sol:KontrolDeployment --sig 'runKontrolDeployment()'
73 74 75 76
echo "Created state diff json"

# Clean and store the state diff json in snapshots/state-diff/Kontrol-Deploy.json
JSON_SCRIPTS=test/kontrol/scripts/json
77
GENERATED_STATEDIFF=31337.json # Name of the statediff json produced by the deployment script
78 79 80 81
STATEDIFF=Kontrol-$GENERATED_STATEDIFF # Name of the Kontrol statediff
mv snapshots/state-diff/$GENERATED_STATEDIFF snapshots/state-diff/$STATEDIFF
python3 $JSON_SCRIPTS/clean_json.py snapshots/state-diff/$STATEDIFF
jq . snapshots/state-diff/$STATEDIFF > temp && mv temp snapshots/state-diff/$STATEDIFF # Prettify json
82 83
echo "Cleaned state diff json"

84
python3 $JSON_SCRIPTS/reverse_key_values.py $CONTRACT_NAMES ${CONTRACT_NAMES}Reversed
85 86 87 88 89
CONTRACT_NAMES=${CONTRACT_NAMES}Reversed

SUMMARY_DIR=test/kontrol/proofs/utils
SUMMARY_NAME=DeploymentSummary
LICENSE=MIT
90 91

copy_to_docker # Copy the newly generated files to the docker container
92
run kontrol load-state-diff $SUMMARY_NAME snapshots/state-diff/$STATEDIFF --contract-names $CONTRACT_NAMES --output-dir $SUMMARY_DIR --license $LICENSE
93 94 95 96
if [ "$LOCAL" = false ]; then
    # Sync Snapshot updates to the host
    docker cp "$CONTAINER_NAME:/home/user/workspace/$SUMMARY_DIR" "$WORKSPACE_DIR/$SUMMARY_DIR/.."
fi
97 98 99
forge fmt $SUMMARY_DIR/$SUMMARY_NAME.sol
forge fmt $SUMMARY_DIR/${SUMMARY_NAME}Code.sol
echo "Added state updates to $SUMMARY_DIR/$SUMMARY_NAME.sol"