Use existing L1 accounts for deployment if found (#7)
Part of [Create bridge channel in go-nitro](https://www.notion.so/Create-bridge-channel-in-go-nitro-22ce80a0d8ae4edb80020a8f250ea270) - Use existing accounts from a volume if present instead of creating new accounts and funding them Reviewed-on: #7 Co-authored-by: Prathamesh Musale <prathamesh.musale0@gmail.com> Co-committed-by: Prathamesh Musale <prathamesh.musale0@gmail.com>
This commit is contained in:
parent
ab0e42a54b
commit
6d7101bd85
@ -50,58 +50,78 @@ wait_for_block() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# We need four accounts and their private keys for the deployment: Admin, Proposer, Batcher, and Sequencer
|
# We need four accounts and their private keys for the deployment: Admin, Proposer, Batcher, and Sequencer
|
||||||
# If $CERC_L1_ADDRESS and $CERC_L1_PRIV_KEY have been set, we'll assign it to Admin and generate/fund the remaining three accounts from it
|
# Check if accounts file already exists
|
||||||
# If not, we'll assume the L1 is the stack's own fixturenet-eth and use the pre-funded accounts/keys from $CERC_L1_ACCOUNTS_CSV_URL
|
l2_accounts_file="/l2-accounts/accounts.json"
|
||||||
if [ -n "$CERC_L1_ADDRESS" ] && [ -n "$CERC_L1_PRIV_KEY" ]; then
|
if [ -f $l2_accounts_file ]; then
|
||||||
wallet1=$(cast wallet new)
|
echo "Using existing accounts from $l2_accounts_file."
|
||||||
wallet2=$(cast wallet new)
|
|
||||||
wallet3=$(cast wallet new)
|
|
||||||
# Admin
|
|
||||||
ADMIN=$CERC_L1_ADDRESS
|
|
||||||
ADMIN_KEY=$CERC_L1_PRIV_KEY
|
|
||||||
# Proposer
|
|
||||||
PROPOSER=$(echo "$wallet1" | awk '/Address:/{print $2}')
|
|
||||||
PROPOSER_KEY=$(echo "$wallet1" | awk '/Private key:/{print $3}')
|
|
||||||
# Batcher
|
|
||||||
BATCHER=$(echo "$wallet2" | awk '/Address:/{print $2}')
|
|
||||||
BATCHER_KEY=$(echo "$wallet2" | awk '/Private key:/{print $3}')
|
|
||||||
# Sequencer
|
|
||||||
SEQ=$(echo "$wallet3" | awk '/Address:/{print $2}')
|
|
||||||
SEQ_KEY=$(echo "$wallet3" | awk '/Private key:/{print $3}')
|
|
||||||
|
|
||||||
echo "Funding accounts."
|
ADMIN=$(jq -r .Admin $l2_accounts_file)
|
||||||
wait_for_block 1 300
|
ADMIN_KEY=$(jq -r .AdminKey $l2_accounts_file)
|
||||||
cast send --from $ADMIN --rpc-url $CERC_L1_RPC --value $CERC_PROPOSER_AMOUNT $PROPOSER --private-key $ADMIN_KEY
|
|
||||||
cast send --from $ADMIN --rpc-url $CERC_L1_RPC --value $CERC_BATCHER_AMOUNT $BATCHER --private-key $ADMIN_KEY
|
|
||||||
else
|
|
||||||
curl -o accounts.csv $CERC_L1_ACCOUNTS_CSV_URL
|
|
||||||
# Admin
|
|
||||||
ADMIN=$(awk -F ',' 'NR == 1 {print $2}' accounts.csv)
|
|
||||||
ADMIN_KEY=$(awk -F ',' 'NR == 1 {print $3}' accounts.csv)
|
|
||||||
# Proposer
|
# Proposer
|
||||||
PROPOSER=$(awk -F ',' 'NR == 2 {print $2}' accounts.csv)
|
PROPOSER=$(jq -r .Proposer $l2_accounts_file)
|
||||||
PROPOSER_KEY=$(awk -F ',' 'NR == 2 {print $3}' accounts.csv)
|
PROPOSER_KEY=$(jq -r .ProposerKey $l2_accounts_file)
|
||||||
# Batcher
|
# Batcher
|
||||||
BATCHER=$(awk -F ',' 'NR == 3 {print $2}' accounts.csv)
|
BATCHER=$(jq -r .Batcher $l2_accounts_file)
|
||||||
BATCHER_KEY=$(awk -F ',' 'NR == 3 {print $3}' accounts.csv)
|
BATCHER_KEY=$(jq -r .BatcherKey $l2_accounts_file)
|
||||||
# Sequencer
|
# Sequencer
|
||||||
SEQ=$(awk -F ',' 'NR == 4 {print $2}' accounts.csv)
|
SEQ=$(jq -r .Seq $l2_accounts_file)
|
||||||
SEQ_KEY=$(awk -F ',' 'NR == 4 {print $3}' accounts.csv)
|
SEQ_KEY=$(jq -r .SeqKey $l2_accounts_file)
|
||||||
|
else
|
||||||
|
# If $CERC_L1_ADDRESS and $CERC_L1_PRIV_KEY have been set, we'll assign it to Admin and generate/fund the remaining three accounts from it
|
||||||
|
# If not, we'll assume the L1 is the stack's own fixturenet-eth and use the pre-funded accounts/keys from $CERC_L1_ACCOUNTS_CSV_URL
|
||||||
|
|
||||||
|
if [ -n "$CERC_L1_ADDRESS" ] && [ -n "$CERC_L1_PRIV_KEY" ]; then
|
||||||
|
echo "Creating new accounts for Optimism deployment."
|
||||||
|
wallet1=$(cast wallet new)
|
||||||
|
wallet2=$(cast wallet new)
|
||||||
|
wallet3=$(cast wallet new)
|
||||||
|
# Admin
|
||||||
|
ADMIN=$CERC_L1_ADDRESS
|
||||||
|
ADMIN_KEY=$CERC_L1_PRIV_KEY
|
||||||
|
# Proposer
|
||||||
|
PROPOSER=$(echo "$wallet1" | awk '/Address:/{print $2}')
|
||||||
|
PROPOSER_KEY=$(echo "$wallet1" | awk '/Private key:/{print $3}')
|
||||||
|
# Batcher
|
||||||
|
BATCHER=$(echo "$wallet2" | awk '/Address:/{print $2}')
|
||||||
|
BATCHER_KEY=$(echo "$wallet2" | awk '/Private key:/{print $3}')
|
||||||
|
# Sequencer
|
||||||
|
SEQ=$(echo "$wallet3" | awk '/Address:/{print $2}')
|
||||||
|
SEQ_KEY=$(echo "$wallet3" | awk '/Private key:/{print $3}')
|
||||||
|
|
||||||
|
echo "Funding accounts..."
|
||||||
|
wait_for_block 1 300
|
||||||
|
cast send --from $ADMIN --rpc-url $CERC_L1_RPC --value $CERC_PROPOSER_AMOUNT $PROPOSER --private-key $ADMIN_KEY
|
||||||
|
cast send --from $ADMIN --rpc-url $CERC_L1_RPC --value $CERC_BATCHER_AMOUNT $BATCHER --private-key $ADMIN_KEY
|
||||||
|
else
|
||||||
|
curl -o accounts.csv $CERC_L1_ACCOUNTS_CSV_URL
|
||||||
|
# Admin
|
||||||
|
ADMIN=$(awk -F ',' 'NR == 1 {print $2}' accounts.csv)
|
||||||
|
ADMIN_KEY=$(awk -F ',' 'NR == 1 {print $3}' accounts.csv)
|
||||||
|
# Proposer
|
||||||
|
PROPOSER=$(awk -F ',' 'NR == 2 {print $2}' accounts.csv)
|
||||||
|
PROPOSER_KEY=$(awk -F ',' 'NR == 2 {print $3}' accounts.csv)
|
||||||
|
# Batcher
|
||||||
|
BATCHER=$(awk -F ',' 'NR == 3 {print $2}' accounts.csv)
|
||||||
|
BATCHER_KEY=$(awk -F ',' 'NR == 3 {print $3}' accounts.csv)
|
||||||
|
# Sequencer
|
||||||
|
SEQ=$(awk -F ',' 'NR == 4 {print $2}' accounts.csv)
|
||||||
|
SEQ_KEY=$(awk -F ',' 'NR == 4 {print $3}' accounts.csv)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# These accounts will be needed by other containers, so write them to a shared volume
|
||||||
|
echo "Writing accounts/private keys to volume l2_accounts."
|
||||||
|
accounts_json=$(jq -n \
|
||||||
|
--arg Admin "$ADMIN" --arg AdminKey "$ADMIN_KEY" \
|
||||||
|
--arg Proposer "$PROPOSER" --arg ProposerKey "$PROPOSER_KEY" \
|
||||||
|
--arg Batcher "$BATCHER" --arg BatcherKey "$BATCHER_KEY" \
|
||||||
|
--arg Seq "$SEQ" --arg SeqKey "$SEQ_KEY" \
|
||||||
|
'{Admin: $Admin, AdminKey: $AdminKey, Proposer: $Proposer, ProposerKey: $ProposerKey, Batcher: $Batcher, BatcherKey: $BatcherKey, Seq: $Seq, SeqKey: $SeqKey}')
|
||||||
|
echo "$accounts_json" > $l2_accounts_file
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Using accounts:"
|
echo "Using accounts:"
|
||||||
echo -e "Admin: $ADMIN\nProposer: $PROPOSER\nBatcher: $BATCHER\nSequencer: $SEQ"
|
echo -e "Admin: $ADMIN\nProposer: $PROPOSER\nBatcher: $BATCHER\nSequencer: $SEQ"
|
||||||
|
|
||||||
# These accounts will be needed by other containers, so write them to a shared volume
|
|
||||||
echo "Writing accounts/private keys to volume l2_accounts."
|
|
||||||
accounts_json=$(jq -n \
|
|
||||||
--arg Admin "$ADMIN" --arg AdminKey "$ADMIN_KEY" \
|
|
||||||
--arg Proposer "$PROPOSER" --arg ProposerKey "$PROPOSER_KEY" \
|
|
||||||
--arg Batcher "$BATCHER" --arg BatcherKey "$BATCHER_KEY" \
|
|
||||||
--arg Seq "$SEQ" --arg SeqKey "$SEQ_KEY" \
|
|
||||||
'{Admin: $Admin, AdminKey: $AdminKey, Proposer: $Proposer, ProposerKey: $ProposerKey, Batcher: $Batcher, BatcherKey: $BatcherKey, Seq: $Seq, SeqKey: $SeqKey}')
|
|
||||||
echo "$accounts_json" > "/l2-accounts/accounts.json"
|
|
||||||
|
|
||||||
# Get a finalized L1 block to set as the starting point for the L2 deployment
|
# Get a finalized L1 block to set as the starting point for the L2 deployment
|
||||||
# If the chain is a freshly created fixturenet-eth, a finalized block won't be available for many minutes; rather than wait, we can use block 1
|
# If the chain is a freshly created fixturenet-eth, a finalized block won't be available for many minutes; rather than wait, we can use block 1
|
||||||
echo "Checking L1 for finalized block..."
|
echo "Checking L1 for finalized block..."
|
||||||
@ -165,7 +185,7 @@ echo "Done deploying contracts."
|
|||||||
echo "Generating L2 genesis allocs..."
|
echo "Generating L2 genesis allocs..."
|
||||||
L2_CHAIN_ID=$(jq ".l2ChainID" $deploy_config_file)
|
L2_CHAIN_ID=$(jq ".l2ChainID" $deploy_config_file)
|
||||||
DEPLOY_CONFIG_PATH=$deploy_config_file \
|
DEPLOY_CONFIG_PATH=$deploy_config_file \
|
||||||
CONTRACT_ADDRESSES_PATH=deployments/$DEPLOYMENT_CONTEXT-deploy.json \
|
CONTRACT_ADDRESSES_PATH="deployments/$DEPLOYMENT_CONTEXT-deploy.json" \
|
||||||
forge script --chain-id $L2_CHAIN_ID scripts/L2Genesis.s.sol:L2Genesis --sig 'runWithAllUpgrades()' --private-key $ADMIN_KEY
|
forge script --chain-id $L2_CHAIN_ID scripts/L2Genesis.s.sol:L2Genesis --sig 'runWithAllUpgrades()' --private-key $ADMIN_KEY
|
||||||
|
|
||||||
cp /app/packages/contracts-bedrock/state-dump-$L2_CHAIN_ID.json allocs-l2.json
|
cp /app/packages/contracts-bedrock/state-dump-$L2_CHAIN_ID.json allocs-l2.json
|
||||||
@ -173,7 +193,7 @@ echo "Done."
|
|||||||
echo "*************************************"
|
echo "*************************************"
|
||||||
|
|
||||||
# Copy files needed by other containers to the appropriate shared volumes
|
# Copy files needed by other containers to the appropriate shared volumes
|
||||||
echo "Copying deployment artifacts volume l1_deployment and deploy-config to volume l2_config"
|
echo "Copying deployment artifacts to volume l1_deployment and deploy-config to volume l2_config"
|
||||||
cp /app/packages/contracts-bedrock/deployments/$DEPLOYMENT_CONTEXT-deploy.json /l1-deployment
|
cp /app/packages/contracts-bedrock/deployments/$DEPLOYMENT_CONTEXT-deploy.json /l1-deployment
|
||||||
cp /app/packages/contracts-bedrock/deploy-config/$DEPLOYMENT_CONTEXT.json /l2-config
|
cp /app/packages/contracts-bedrock/deploy-config/$DEPLOYMENT_CONTEXT.json /l2-config
|
||||||
cp allocs-l2.json /l2-config
|
cp allocs-l2.json /l2-config
|
||||||
|
Loading…
Reference in New Issue
Block a user