From d6be2c84ba94ca69fd99a186374edc68afe3ebd6 Mon Sep 17 00:00:00 2001 From: Alex Gherghisan Date: Thu, 12 Dec 2024 22:17:45 +0000 Subject: [PATCH] fix: pass salt to deploy-l1-contracts.sh (#10586) This PR adds deterministic deployment salt to deploy-l1-contracts --------- Co-authored-by: Mitch --- .github/workflows/devnet-deploy.yml | 6 +++++ .github/workflows/network-deploy.yml | 11 ++++++++ .../files/config/deploy-l1-contracts.sh | 10 ++++--- .../aztec-network/templates/boot-node.yaml | 27 +++++++++++++------ spartan/aztec-network/templates/reth.yaml | 9 +++++++ spartan/aztec-network/values.yaml | 1 + spartan/terraform/deploy-release/main.tf | 5 ++++ spartan/terraform/deploy-release/variables.tf | 6 +++++ 8 files changed, 63 insertions(+), 12 deletions(-) diff --git a/.github/workflows/devnet-deploy.yml b/.github/workflows/devnet-deploy.yml index 31f710afe03..83496bc3be0 100644 --- a/.github/workflows/devnet-deploy.yml +++ b/.github/workflows/devnet-deploy.yml @@ -13,6 +13,11 @@ on: description: The name of the secret which holds the boot node's contract deployment mnemonic required: true default: testnet-deployment-mnemonic + deployment_salt: + description: The salt to use for this deployment. Defaults to random + required: false + type: string + default: "" respect_tf_lock: description: Whether to respect the Terraform lock required: false @@ -39,6 +44,7 @@ jobs: values_file: release-devnet.yaml aztec_docker_image: ${{ github.event.inputs.aztec_docker_image }} deployment_mnemonic_secret_name: ${{ github.event.inputs.deployment_mnemonic_secret_name }} + deployment_salt: ${{ github.event.inputs.deployment_salt }} respect_tf_lock: ${{ github.event.inputs.respect_tf_lock }} secrets: GCP_SA_KEY: ${{ secrets.GCP_SA_KEY }} diff --git a/.github/workflows/network-deploy.yml b/.github/workflows/network-deploy.yml index d8c8cb42375..5677fdea1ca 100644 --- a/.github/workflows/network-deploy.yml +++ b/.github/workflows/network-deploy.yml @@ -20,6 +20,11 @@ on: required: true type: string default: testnet-deployment-mnemonic + deployment_salt: + description: The salt to use for this deployment. Defaults to random + required: false + type: string + default: "" respect_tf_lock: description: Whether to respect the Terraform lock required: false @@ -53,6 +58,10 @@ on: description: The name of the secret which holds the boot node's contract deployment mnemonic required: true default: testnet-deployment-mnemonic + deployment_salt: + description: The salt to use for this deployment. Defaults to random + required: false + default: "" respect_tf_lock: description: Whether to respect the Terraform lock required: false @@ -82,6 +91,7 @@ jobs: NAMESPACE: ${{ inputs.namespace }} VALUES_FILE: ${{ inputs.values_file }} DEPLOYMENT_MNEMONIC_SECRET_NAME: ${{ inputs.deployment_mnemonic_secret_name }} + DEPLOYMENT_SALT: ${{ inputs.deployment_salt }} CHART_PATH: ./spartan/aztec-network CLUSTER_NAME: aztec-gke REGION: us-west1-a @@ -161,6 +171,7 @@ jobs: -var="GKE_CLUSTER_CONTEXT=${{ env.GKE_CLUSTER_CONTEXT }}" \ -var="AZTEC_DOCKER_IMAGE=${{ env.AZTEC_DOCKER_IMAGE }}" \ -var="L1_DEPLOYMENT_MNEMONIC=${{ steps.get-mnemonic.outputs.mnemonic }}" \ + -var="L1_DEPLOYMENT_SALT=${DEPLOYMENT_SALT:-$RANDOM}" \ -out=tfplan \ -lock=${{ inputs.respect_tf_lock }} diff --git a/spartan/aztec-network/files/config/deploy-l1-contracts.sh b/spartan/aztec-network/files/config/deploy-l1-contracts.sh index 74f8e3c6bfc..1f4c56599f7 100644 --- a/spartan/aztec-network/files/config/deploy-l1-contracts.sh +++ b/spartan/aztec-network/files/config/deploy-l1-contracts.sh @@ -1,19 +1,21 @@ #!/bin/bash set -exu -CHAIN_ID=$1 - +SALT=${1:-$RANDOM} +CHAIN_ID=$2 # Run the deploy-l1-contracts command and capture the output output="" MAX_RETRIES=5 RETRY_DELAY=60 +export LOG_LEVEL=debug + for attempt in $(seq 1 $MAX_RETRIES); do # if INIT_VALIDATORS is true, then we need to pass the validators flag to the deploy-l1-contracts command if [ "${INIT_VALIDATORS:-false}" = "true" ]; then - output=$(node --no-warnings /usr/src/yarn-project/aztec/dest/bin/index.js deploy-l1-contracts --mnemonic "$MNEMONIC" --validators $2 --l1-chain-id $CHAIN_ID) && break + output=$(node --no-warnings /usr/src/yarn-project/aztec/dest/bin/index.js deploy-l1-contracts --mnemonic "$MNEMONIC" --validators $3 --l1-chain-id $CHAIN_ID --salt $SALT) && break else - output=$(node --no-warnings /usr/src/yarn-project/aztec/dest/bin/index.js deploy-l1-contracts --mnemonic "$MNEMONIC" --l1-chain-id $CHAIN_ID) && break + output=$(node --no-warnings /usr/src/yarn-project/aztec/dest/bin/index.js deploy-l1-contracts --mnemonic "$MNEMONIC" --l1-chain-id $CHAIN_ID --salt $SALT) && break fi echo "Attempt $attempt failed. Retrying in $RETRY_DELAY seconds..." sleep "$RETRY_DELAY" diff --git a/spartan/aztec-network/templates/boot-node.yaml b/spartan/aztec-network/templates/boot-node.yaml index 246d9ff3246..62dbcab873c 100644 --- a/spartan/aztec-network/templates/boot-node.yaml +++ b/spartan/aztec-network/templates/boot-node.yaml @@ -61,17 +61,28 @@ spec: - name: config mountPath: /shared/config {{- if .Values.bootNode.deployContracts }} + - name: deploy-create2-delpoyer + image: {{ .Values.images.foundry.image }} + command: + - /bin/sh + - -c + - | + source /shared/config/service-addresses + cast publish --rpc-url ${ETHEREUM_HOST} 0xf8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222 + volumeMounts: + - name: config + mountPath: /shared/config - name: deploy-l1-contracts {{- include "aztec-network.image" . | nindent 10 }} command: - [ - "/bin/bash", - "-c", - "cp /scripts/deploy-l1-contracts.sh /tmp/deploy-l1-contracts.sh && \ - chmod +x /tmp/deploy-l1-contracts.sh && \ - source /shared/config/service-addresses && \ - /tmp/deploy-l1-contracts.sh {{ .Values.ethereum.chainId }} \"{{ join "," .Values.validator.validatorAddresses }}\"" - ] + - /bin/bash + - -c + - | + cp /scripts/deploy-l1-contracts.sh /tmp/deploy-l1-contracts.sh + chmod +x /tmp/deploy-l1-contracts.sh + source /shared/config/service-addresses + + /tmp/deploy-l1-contracts.sh "{{ .Values.aztec.l1Salt }}" "{{ .Values.ethereum.chainId }}" "{{ join "," .Values.validator.validatorAddresses }}" volumeMounts: - name: scripts-output mountPath: /shared/contracts diff --git a/spartan/aztec-network/templates/reth.yaml b/spartan/aztec-network/templates/reth.yaml index 8a3e28728bf..938d48b649a 100644 --- a/spartan/aztec-network/templates/reth.yaml +++ b/spartan/aztec-network/templates/reth.yaml @@ -42,6 +42,15 @@ spec: balance: '0x3635c9adc5dea00000' // 1000 ETH in wei }; + // We rely on the deterministic deployment proxy to deploy the contracts + // It comes preloaded on anvil (https://book.getfoundry.sh/tutorials/create2-tutorial) + // But we need to do it ourselves for reth + // Addresses/tx in https://github.com/Arachnid/deterministic-deployment-proxy/tree/master + const deployer = '0x3fab184622dc19b6109349b94811493bf2a45362' + genesis.alloc[deployer] = { + balance: '0x3635c9adc5dea00000' // 1000 ETH in wei + }; + fs.writeFileSync('/genesis-output/genesis.json', JSON.stringify(genesis, null, 2)); } diff --git a/spartan/aztec-network/values.yaml b/spartan/aztec-network/values.yaml index b1dc6c94dab..26cf80bb5f7 100644 --- a/spartan/aztec-network/values.yaml +++ b/spartan/aztec-network/values.yaml @@ -35,6 +35,7 @@ aztec: epochProofClaimWindow: 13 # in L2 slots realProofs: false l1DeploymentMnemonic: "test test test test test test test test test test test junk" # the mnemonic used when deploying contracts + l1Salt: "" # leave empty for random salt bootNode: peerIdPrivateKey: "" diff --git a/spartan/terraform/deploy-release/main.tf b/spartan/terraform/deploy-release/main.tf index 73eba9e5b37..84d44bae93e 100644 --- a/spartan/terraform/deploy-release/main.tf +++ b/spartan/terraform/deploy-release/main.tf @@ -52,6 +52,11 @@ resource "helm_release" "aztec-gke-cluster" { value = var.L1_DEPLOYMENT_MNEMONIC } + set { + name = "aztec.l1Salt" + value = var.L1_DEPLOYMENT_SALT + } + # Setting timeout and wait conditions timeout = 1200 # 20 minutes in seconds wait = true diff --git a/spartan/terraform/deploy-release/variables.tf b/spartan/terraform/deploy-release/variables.tf index 0dff0d4509b..7a5fbc364aa 100644 --- a/spartan/terraform/deploy-release/variables.tf +++ b/spartan/terraform/deploy-release/variables.tf @@ -24,3 +24,9 @@ variable "L1_DEPLOYMENT_MNEMONIC" { type = string sensitive = true } + +variable "L1_DEPLOYMENT_SALT" { + description = "Salt to use for the L1 contract deployments" + type = string + default = "" +}