Skip to content

Commit

Permalink
setup upgrade from v5.2.0 onchain to v6.x
Browse files Browse the repository at this point in the history
  • Loading branch information
jonfung-dydx committed Aug 16, 2024
1 parent 39e1921 commit 4706f27
Show file tree
Hide file tree
Showing 7 changed files with 80 additions and 751 deletions.
1 change: 1 addition & 0 deletions .github/workflows/protocol-build-and-push-snapshot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ name: Protocol Build & Push Image to AWS ECR
on: # yamllint disable-line rule:truthy
push:
branches:
- jonfung/v6_upgrade_test
- main
- 'release/protocol/v[0-9]+.[0-9]+.x' # e.g. release/protocol/v0.1.x
- 'release/protocol/v[0-9]+.x' # e.g. release/protocol/v1.x
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/protocol-build-and-push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ name: Protocol Build & Push Image to AWS ECR
on: # yamllint disable-line rule:truthy
push:
branches:
- jonfung/v6_upgrade_test
- main
- 'release/protocol/v[0-9]+.[0-9]+.x' # e.g. release/protocol/v0.1.x
- 'release/protocol/v[0-9]+.x' # e.g. release/protocol/v1.x
Expand Down
735 changes: 1 addition & 734 deletions protocol/testing/genesis.sh

Large diffs are not rendered by default.

16 changes: 15 additions & 1 deletion protocol/testing/snapshotting/snapshot.sh
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ now_date() {
echo -n $(TZ="UTC" date '+%Y-%m-%d_%H:%M:%S')
}

PREUPGRADE_BINARY_PATH="/bin/dydxprotocold_preupgrade"

install_prerequisites() {
apk add dasel jq curl
apk add --no-cache \
Expand All @@ -62,12 +64,23 @@ install_prerequisites() {
&& rm -rf /var/cache/apk/*
}

setup_preupgrade_binary() {
tar_url='https://github.com/dydxprotocol/v4-chain/releases/download/protocol%2Fv5.2.0/dydxprotocold-v5.2.0-linux-amd64.tar.gz'
tar_path='/tmp/dydxprotocold/dydxprotocold.tar.gz'
mkdir -p /tmp/dydxprotocold
curl -vL $tar_url -o $tar_path
dydxprotocold_path=$(tar -xvf $tar_path --directory /tmp/dydxprotocold)
mv /tmp/dydxprotocold/$dydxprotocold_path $PREUPGRADE_BINARY_PATH
}

setup_cosmovisor() {
VAL_HOME_DIR="$HOME/chain/local_node"
export DAEMON_NAME=dydxprotocold
export DAEMON_HOME="$HOME/chain/local_node"

cosmovisor init /bin/dydxprotocold
cosmovisor init $PREUPGRADE_BINARY_PATH
mkdir -p "$VAL_HOME_DIR/cosmovisor/upgrades/v6.0.0/bin/"
ln -s /bin/dydxprotocold "$VAL_HOME_DIR/cosmovisor/upgrades/v6.0.0/bin/dydxprotocold"
}

install_prerequisites
Expand Down Expand Up @@ -96,6 +109,7 @@ sed -i 's/min-retain-blocks = 0/min-retain-blocks = 2/' /dydxprotocol/chain/loca
# Do not index tx_index.db
sed -i 's/indexer = "kv"/indexer = "null"/' /dydxprotocol/chain/local_node/config/config.toml

setup_preupgrade_binary
setup_cosmovisor

# TODO: add metrics around snapshot upload latency/frequency/success rate
Expand Down
28 changes: 22 additions & 6 deletions protocol/testing/testnet-dev/dev.sh
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,12 @@ VAULT_NUMBERS=(
4 # CRV clob pair ID
)

PREUPGRADE_BINARY_PATH="/bin/dydxprotocold_preupgrade"

# Define dependencies for this script.
# `jq` and `dasel` are used to manipulate json and yaml files respectively.
install_prerequisites() {
apk add dasel jq
apk add curl dasel jq
}

# Create all validators for the chain including a full-node.
Expand All @@ -110,7 +112,7 @@ create_validators() {
for i in "${!FULL_NODE_KEYS[@]}"; do
FULL_NODE_HOME_DIR="$HOME/chain/.full-node-$i"
FULL_NODE_CONFIG_DIR="$FULL_NODE_HOME_DIR/config"
dydxprotocold init "full-node" -o --chain-id=$CHAIN_ID --home "$FULL_NODE_HOME_DIR"
$PREUPGRADE_BINARY_PATH init "full-node" -o --chain-id=$CHAIN_ID --home "$FULL_NODE_HOME_DIR"

# Note: `dydxprotocold init` non-deterministically creates `node_id.json` for each validator.
# This is inconvenient for persistent peering during testing in Terraform configuration as the `node_id`
Expand All @@ -132,7 +134,7 @@ create_validators() {
VAL_CONFIG_DIR="$VAL_HOME_DIR/config"

# Initialize the chain and validator files.
dydxprotocold init "${MONIKERS[$i]}" -o --chain-id=$CHAIN_ID --home "$VAL_HOME_DIR"
$PREUPGRADE_BINARY_PATH init "${MONIKERS[$i]}" -o --chain-id=$CHAIN_ID --home "$VAL_HOME_DIR"

# Overwrite the randomly generated `priv_validator_key.json` with a key generated deterministically from the mnemonic.
dydxprotocold tendermint gen-priv-key --home "$VAL_HOME_DIR" --mnemonic "${MNEMONICS[$i]}"
Expand Down Expand Up @@ -163,7 +165,7 @@ create_validators() {
dydxprotocold add-genesis-account "$acct" 900000000000000000$USDC_DENOM,$TESTNET_VALIDATOR_NATIVE_TOKEN_BALANCE$NATIVE_TOKEN --home "$VAL_HOME_DIR"
done

dydxprotocold gentx "${MONIKERS[$i]}" $TESTNET_VALIDATOR_SELF_DELEGATE_AMOUNT$NATIVE_TOKEN --moniker="${MONIKERS[$i]}" --keyring-backend=test --chain-id=$CHAIN_ID --home "$VAL_HOME_DIR"
$PREUPGRADE_BINARY_PATH gentx "${MONIKERS[$i]}" $TESTNET_VALIDATOR_SELF_DELEGATE_AMOUNT$NATIVE_TOKEN --moniker="${MONIKERS[$i]}" --keyring-backend=test --chain-id=$CHAIN_ID --home "$VAL_HOME_DIR"

# Copy the gentx to a shared directory.
cp -a "$VAL_CONFIG_DIR/gentx/." /tmp/gentx
Expand Down Expand Up @@ -202,21 +204,34 @@ create_validators() {
done
}

setup_preupgrade_binary() {
tar_url='https://github.com/dydxprotocol/v4-chain/releases/download/protocol%2Fv5.2.0/dydxprotocold-v5.2.0-linux-amd64.tar.gz'
tar_path='/tmp/dydxprotocold/dydxprotocold.tar.gz'
mkdir -p /tmp/dydxprotocold
curl -vL $tar_url -o $tar_path
dydxprotocold_path=$(tar -xvf $tar_path --directory /tmp/dydxprotocold)
mv /tmp/dydxprotocold/$dydxprotocold_path $PREUPGRADE_BINARY_PATH
}

setup_cosmovisor() {
for i in "${!FULL_NODE_KEYS[@]}"; do
FULL_NODE_HOME_DIR="$HOME/chain/.full-node-$i"
export DAEMON_NAME=dydxprotocold
export DAEMON_HOME="$HOME/chain/.full-node-$i"

cosmovisor init /bin/dydxprotocold
cosmovisor init $PREUPGRADE_BINARY_PATH
mkdir -p "$FULL_NODE_HOME_DIR/cosmovisor/upgrades/v6.0.0/bin/"
ln -s /bin/dydxprotocold "$FULL_NODE_HOME_DIR/cosmovisor/upgrades/v6.0.0/bin/dydxprotocold"
done

for i in "${!MONIKERS[@]}"; do
VAL_HOME_DIR="$HOME/chain/.${MONIKERS[$i]}"
export DAEMON_NAME=dydxprotocold
export DAEMON_HOME="$HOME/chain/.${MONIKERS[$i]}"

cosmovisor init /bin/dydxprotocold
cosmovisor init $PREUPGRADE_BINARY_PATH
mkdir -p "$VAL_HOME_DIR/cosmovisor/upgrades/v6.0.0/bin/"
ln -s /bin/dydxprotocold "$VAL_HOME_DIR/cosmovisor/upgrades/v6.0.0/bin/dydxprotocold"
done
}

Expand All @@ -235,5 +250,6 @@ edit_config() {
}

install_prerequisites
setup_preupgrade_binary
create_validators
setup_cosmovisor
22 changes: 18 additions & 4 deletions protocol/testing/testnet-local/local.sh
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,12 @@ VAULT_NUMBERS=(
1 # ETH clob pair ID
)

PREUPGRADE_BINARY_PATH="/bin/dydxprotocold_preupgrade"

# Define dependencies for this script.
# `jq` and `dasel` are used to manipulate json and yaml files respectively.
install_prerequisites() {
apk add dasel jq
apk add curl dasel jq
}

# Create all validators for the chain including a full-node.
Expand All @@ -93,7 +95,7 @@ create_validators() {
VAL_CONFIG_DIR="$VAL_HOME_DIR/config"

# Initialize the chain and validator files.
dydxprotocold init "${MONIKERS[$i]}" -o --chain-id=$CHAIN_ID --home "$VAL_HOME_DIR"
$PREUPGRADE_BINARY_PATH init "${MONIKERS[$i]}" -o --chain-id=$CHAIN_ID --home "$VAL_HOME_DIR"

# Overwrite the randomly generated `priv_validator_key.json` with a key generated deterministically from the mnemonic.
dydxprotocold tendermint gen-priv-key --home "$VAL_HOME_DIR" --mnemonic "${MNEMONICS[$i]}"
Expand Down Expand Up @@ -126,7 +128,7 @@ create_validators() {
dydxprotocold add-genesis-account "$acct" 900000000000000000$USDC_DENOM,$TESTNET_VALIDATOR_NATIVE_TOKEN_BALANCE$NATIVE_TOKEN --home "$VAL_HOME_DIR"
done

dydxprotocold gentx "${MONIKERS[$i]}" $TESTNET_VALIDATOR_SELF_DELEGATE_AMOUNT$NATIVE_TOKEN --moniker="${MONIKERS[$i]}" --keyring-backend=test --chain-id=$CHAIN_ID --home "$VAL_HOME_DIR"
$PREUPGRADE_BINARY_PATH gentx "${MONIKERS[$i]}" $TESTNET_VALIDATOR_SELF_DELEGATE_AMOUNT$NATIVE_TOKEN --moniker="${MONIKERS[$i]}" --keyring-backend=test --chain-id=$CHAIN_ID --home "$VAL_HOME_DIR"

# Copy the gentx to a shared directory.
cp -a "$VAL_CONFIG_DIR/gentx/." /tmp/gentx
Expand Down Expand Up @@ -157,13 +159,24 @@ create_validators() {
done
}

setup_preupgrade_binary() {
tar_url='https://github.com/dydxprotocol/v4-chain/releases/download/protocol%2Fv5.2.0/dydxprotocold-v5.2.0-linux-amd64.tar.gz'
tar_path='/tmp/dydxprotocold/dydxprotocold.tar.gz'
mkdir -p /tmp/dydxprotocold
curl -vL $tar_url -o $tar_path
dydxprotocold_path=$(tar -xvf $tar_path --directory /tmp/dydxprotocold)
mv /tmp/dydxprotocold/$dydxprotocold_path $PREUPGRADE_BINARY_PATH
}

setup_cosmovisor() {
for i in "${!MONIKERS[@]}"; do
VAL_HOME_DIR="$HOME/chain/.${MONIKERS[$i]}"
export DAEMON_NAME=dydxprotocold
export DAEMON_HOME="$HOME/chain/.${MONIKERS[$i]}"

cosmovisor init /bin/dydxprotocold
cosmovisor init $PREUPGRADE_BINARY_PATH
mkdir -p "$VAL_HOME_DIR/cosmovisor/upgrades/v6.0.0/bin/"
ln -s /bin/dydxprotocold "$VAL_HOME_DIR/cosmovisor/upgrades/v6.0.0/bin/dydxprotocold"
done
}

Expand Down Expand Up @@ -193,5 +206,6 @@ edit_config() {
}

install_prerequisites
setup_preupgrade_binary
create_validators
setup_cosmovisor
28 changes: 22 additions & 6 deletions protocol/testing/testnet-staging/staging.sh
Original file line number Diff line number Diff line change
Expand Up @@ -151,10 +151,12 @@ VAULT_NUMBERS=(
4 # CRV clob pair ID
)

PREUPGRADE_BINARY_PATH="/bin/dydxprotocold_preupgrade"

# Define dependencies for this script.
# `jq` and `dasel` are used to manipulate json and yaml files respectively.
install_prerequisites() {
apk add dasel jq
apk add curl dasel jq
}

# Create all validators for the chain including a full-node.
Expand All @@ -164,7 +166,7 @@ create_validators() {
for i in "${!FULL_NODE_KEYS[@]}"; do
FULL_NODE_HOME_DIR="$HOME/chain/.full-node-$i"
FULL_NODE_CONFIG_DIR="$FULL_NODE_HOME_DIR/config"
dydxprotocold init "full-node" -o --chain-id=$CHAIN_ID --home "$FULL_NODE_HOME_DIR"
$PREUPGRADE_BINARY_PATH init "full-node" -o --chain-id=$CHAIN_ID --home "$FULL_NODE_HOME_DIR"

# Note: `dydxprotocold init` non-deterministically creates `node_id.json` for each validator.
# This is inconvenient for persistent peering during testing in Terraform configuration as the `node_id`
Expand All @@ -186,7 +188,7 @@ create_validators() {
VAL_CONFIG_DIR="$VAL_HOME_DIR/config"

# Initialize the chain and validator files.
dydxprotocold init "${MONIKERS[$i]}" -o --chain-id=$CHAIN_ID --home "$VAL_HOME_DIR"
$PREUPGRADE_BINARY_PATH init "${MONIKERS[$i]}" -o --chain-id=$CHAIN_ID --home "$VAL_HOME_DIR"

# Overwrite the randomly generated `priv_validator_key.json` with a key generated deterministically from the mnemonic.
dydxprotocold tendermint gen-priv-key --home "$VAL_HOME_DIR" --mnemonic "${MNEMONICS[$i]}"
Expand Down Expand Up @@ -217,7 +219,7 @@ create_validators() {
dydxprotocold add-genesis-account "$acct" 900000000000000000$USDC_DENOM,$TESTNET_VALIDATOR_NATIVE_TOKEN_BALANCE$NATIVE_TOKEN --home "$VAL_HOME_DIR"
done

dydxprotocold gentx "${MONIKERS[$i]}" $TESTNET_VALIDATOR_SELF_DELEGATE_AMOUNT$NATIVE_TOKEN --moniker="${MONIKERS[$i]}" --keyring-backend=test --chain-id=$CHAIN_ID --home "$VAL_HOME_DIR"
$PREUPGRADE_BINARY_PATH gentx "${MONIKERS[$i]}" $TESTNET_VALIDATOR_SELF_DELEGATE_AMOUNT$NATIVE_TOKEN --moniker="${MONIKERS[$i]}" --keyring-backend=test --chain-id=$CHAIN_ID --home "$VAL_HOME_DIR"

# Copy the gentx to a shared directory.
cp -a "$VAL_CONFIG_DIR/gentx/." /tmp/gentx
Expand Down Expand Up @@ -256,21 +258,34 @@ create_validators() {
done
}

setup_preupgrade_binary() {
tar_url='https://github.com/dydxprotocol/v4-chain/releases/download/protocol%2Fv5.2.0/dydxprotocold-v5.2.0-linux-amd64.tar.gz'
tar_path='/tmp/dydxprotocold/dydxprotocold.tar.gz'
mkdir -p /tmp/dydxprotocold
curl -vL $tar_url -o $tar_path
dydxprotocold_path=$(tar -xvf $tar_path --directory /tmp/dydxprotocold)
mv /tmp/dydxprotocold/$dydxprotocold_path /bin/dydxprotocold_preupgrade
}

setup_cosmovisor() {
for i in "${!FULL_NODE_KEYS[@]}"; do
FULL_NODE_HOME_DIR="$HOME/chain/.full-node-$i"
export DAEMON_NAME=dydxprotocold
export DAEMON_HOME="$HOME/chain/.full-node-$i"

cosmovisor init /bin/dydxprotocold
cosmovisor init $PREUPGRADE_BINARY_PATH
mkdir -p "$FULL_NODE_HOME_DIR/cosmovisor/upgrades/v6.0.0/bin/"
ln -s /bin/dydxprotocold "$FULL_NODE_HOME_DIR/cosmovisor/upgrades/v6.0.0/bin/dydxprotocold"
done

for i in "${!MONIKERS[@]}"; do
VAL_HOME_DIR="$HOME/chain/.${MONIKERS[$i]}"
export DAEMON_NAME=dydxprotocold
export DAEMON_HOME="$HOME/chain/.${MONIKERS[$i]}"

cosmovisor init /bin/dydxprotocold
cosmovisor init $PREUPGRADE_BINARY_PATH
mkdir -p "$VAL_HOME_DIR/cosmovisor/upgrades/v6.0.0/bin/"
ln -s /bin/dydxprotocold "$VAL_HOME_DIR/cosmovisor/upgrades/v6.0.0/bin/dydxprotocold"
done
}

Expand All @@ -289,5 +304,6 @@ edit_config() {
}

install_prerequisites
setup_preupgrade_binary
create_validators
setup_cosmovisor

0 comments on commit 4706f27

Please sign in to comment.