Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@ -6,6 +6,7 @@ on: # yamllint disable-line rule:truthy
- 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
- 'kefan/9.6-upgrade'

jobs:
build-and-push-snapshot-dev:
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 @@ -6,6 +6,7 @@ on: # yamllint disable-line rule:truthy
- 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
- 'kefan/9.6-upgrade'

jobs:
build-and-push-dev:
Expand Down
50 changes: 25 additions & 25 deletions protocol/testing/genesis.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2225,31 +2225,31 @@ function edit_genesis() {

# Vaults
# Set default quoting params.
dasel put -t int -f "$GENESIS" ".app_state.vault.default_quoting_params.spread_min_ppm" -v '3000'
# Set operator params.
dasel put -t string -f "$GENESIS" ".app_state.vault.operator_params.operator" -v 'dydx10d07y265gmmuvt4z0w9aw880jnsr700jnmapky'
dasel put -t string -f "$GENESIS" ".app_state.vault.operator_params.metadata.name" -v 'Governance'
dasel put -t string -f "$GENESIS" ".app_state.vault.operator_params.metadata.description" -v 'Governance Module Account'
# Set total shares and owner shares.
if [ -z "${INPUT_TEST_ACCOUNTS[0]}" ]; then
vault_owner_address='dydx199tqg4wdlnu4qjlxchpd7seg454937hjrknju4' # alice as default vault owner
else
vault_owner_address="${INPUT_TEST_ACCOUNTS[0]}"
fi
total_deposit=$((DEFAULT_SUBACCOUNT_QUOTE_BALANCE_VAULT * ${#INPUT_VAULT_NUMBERS[@]}))
dasel put -t string -f "$GENESIS" ".app_state.vault.total_shares.num_shares" -v "${total_deposit}"
dasel put -t json -f "$GENESIS" ".app_state.vault.owner_shares.[]" -v '{}'
dasel put -t string -f "$GENESIS" ".app_state.vault.owner_shares.[0].owner" -v "${vault_owner_address}"
dasel put -t string -f "$GENESIS" ".app_state.vault.owner_shares.[0].shares.num_shares" -v "${total_deposit}"
# Set vaults.
vault_idx=0
for number in "${INPUT_VAULT_NUMBERS[@]}"; do
dasel put -t json -f "$GENESIS" '.app_state.vault.vaults.[]' -v '{}'
dasel put -t string -f "$GENESIS" ".app_state.vault.vaults.[${vault_idx}].vault_id.type" -v 'VAULT_TYPE_CLOB'
dasel put -t int -f "$GENESIS" ".app_state.vault.vaults.[${vault_idx}].vault_id.number" -v "${number}"
dasel put -t string -f "$GENESIS" ".app_state.vault.vaults.[${vault_idx}].vault_params.status" -v 'VAULT_STATUS_QUOTING'
vault_idx=$(($vault_idx + 1))
done
# dasel put -t int -f "$GENESIS" ".app_state.vault.default_quoting_params.spread_min_ppm" -v '3000'
# # Set operator params.
# dasel put -t string -f "$GENESIS" ".app_state.vault.operator_params.operator" -v 'dydx10d07y265gmmuvt4z0w9aw880jnsr700jnmapky'
# dasel put -t string -f "$GENESIS" ".app_state.vault.operator_params.metadata.name" -v 'Governance'
# dasel put -t string -f "$GENESIS" ".app_state.vault.operator_params.metadata.description" -v 'Governance Module Account'
# # Set total shares and owner shares.
# if [ -z "${INPUT_TEST_ACCOUNTS[0]}" ]; then
# vault_owner_address='dydx199tqg4wdlnu4qjlxchpd7seg454937hjrknju4' # alice as default vault owner
# else
# vault_owner_address="${INPUT_TEST_ACCOUNTS[0]}"
# fi
# total_deposit=$((DEFAULT_SUBACCOUNT_QUOTE_BALANCE_VAULT * ${#INPUT_VAULT_NUMBERS[@]}))
# dasel put -t string -f "$GENESIS" ".app_state.vault.total_shares.num_shares" -v "${total_deposit}"
# dasel put -t json -f "$GENESIS" ".app_state.vault.owner_shares.[]" -v '{}'
# dasel put -t string -f "$GENESIS" ".app_state.vault.owner_shares.[0].owner" -v "${vault_owner_address}"
# dasel put -t string -f "$GENESIS" ".app_state.vault.owner_shares.[0].shares.num_shares" -v "${total_deposit}"
# # Set vaults.
# vault_idx=0
# for number in "${INPUT_VAULT_NUMBERS[@]}"; do
# dasel put -t json -f "$GENESIS" '.app_state.vault.vaults.[]' -v '{}'
# dasel put -t string -f "$GENESIS" ".app_state.vault.vaults.[${vault_idx}].vault_id.type" -v 'VAULT_TYPE_CLOB'
# dasel put -t int -f "$GENESIS" ".app_state.vault.vaults.[${vault_idx}].vault_id.number" -v "${number}"
# dasel put -t string -f "$GENESIS" ".app_state.vault.vaults.[${vault_idx}].vault_params.status" -v 'VAULT_STATUS_QUOTING'
# vault_idx=$(($vault_idx + 1))
# done

# Update accountplus module.
dasel put -t bool -f "$GENESIS" '.app_state.dydxaccountplus.params.is_smart_account_active' -v 'true'
Expand Down
15 changes: 14 additions & 1 deletion protocol/testing/snapshotting/snapshot.sh
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ LOG_PATH="/dydxprotocol/chain/local_node/snapshots/dydxprotocol/dydxprotocol_log
# data directory to snapshot. this contains the blockchain state.
DATA_PATH="/dydxprotocol/chain/local_node/data/"
RPC_ADDRESS="http://127.0.0.1:26657"
PREUPGRADE_BINARY_PATH="/bin/dydxprotocold_preupgrade"

while [ $# -gt 0 ]; do

Expand Down Expand Up @@ -62,12 +63,23 @@ install_prerequisites() {
&& rm -rf /var/cache/apk/*
}

setup_preupgrade_binary() {
tar_url='https://github.com/dydxprotocol/v4-chain/releases/download/protocol%2Fv9.6.0/dydxprotocold-v9.6.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/v9.6/bin/"
ln -s /bin/dydxprotocold "$VAL_HOME_DIR/cosmovisor/upgrades/v9.6/bin/dydxprotocold"
}

install_prerequisites
Expand Down Expand Up @@ -96,6 +108,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
34 changes: 24 additions & 10 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,10 +134,10 @@ 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]}"
$PREUPGRADE_BINARY_PATH tendermint gen-priv-key --home "$VAL_HOME_DIR" --mnemonic "${MNEMONICS[$i]}"

# 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 @@ -147,7 +149,7 @@ create_validators() {

edit_config "$VAL_CONFIG_DIR"

echo "${MNEMONICS[$i]}" | dydxprotocold keys add "${MONIKERS[$i]}" --recover --keyring-backend=test --home "$VAL_HOME_DIR"
echo "${MNEMONICS[$i]}" | $PREUPGRADE_BINARY_PATH keys add "${MONIKERS[$i]}" --recover --keyring-backend=test --home "$VAL_HOME_DIR"

# Using "*" as a subscript results in a single arg: "dydx1... dydx1... dydx1..."
# Using "@" as a subscript results in separate args: "dydx1..." "dydx1..." "dydx1..."
Expand All @@ -157,13 +159,13 @@ create_validators() {
update_genesis_complete_bridge_delay "$VAL_CONFIG_DIR" "600"

for acct in "${TEST_ACCOUNTS[@]}"; do
dydxprotocold add-genesis-account "$acct" 100000000000000000$USDC_DENOM,$TESTNET_VALIDATOR_NATIVE_TOKEN_BALANCE$NATIVE_TOKEN --home "$VAL_HOME_DIR"
$PREUPGRADE_BINARY_PATH add-genesis-account "$acct" 100000000000000000$USDC_DENOM,$TESTNET_VALIDATOR_NATIVE_TOKEN_BALANCE$NATIVE_TOKEN --home "$VAL_HOME_DIR"
done
for acct in "${FAUCET_ACCOUNTS[@]}"; do
dydxprotocold add-genesis-account "$acct" 900000000000000000$USDC_DENOM,$TESTNET_VALIDATOR_NATIVE_TOKEN_BALANCE$NATIVE_TOKEN --home "$VAL_HOME_DIR"
$PREUPGRADE_BINARY_PATH 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 All @@ -178,7 +180,7 @@ create_validators() {
cp -r /tmp/gentx "$FIRST_VAL_CONFIG_DIR"

# Build the final genesis.json file that all validators and the full-nodes will use.
dydxprotocold collect-gentxs --home "$FIRST_VAL_HOME_DIR"
$PREUPGRADE_BINARY_PATH collect-gentxs --home "$FIRST_VAL_HOME_DIR"

# Copy this genesis file to each of the other validators
for i in "${!MONIKERS[@]}"; do
Expand All @@ -202,6 +204,15 @@ create_validators() {
done
}

setup_preupgrade_binary() {
tar_url='https://github.com/dydxprotocol/v4-chain/releases/download/protocol%2Fv8.1.0/dydxprotocold-v8.1.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"
Expand All @@ -216,7 +227,9 @@ setup_cosmovisor() {
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/v8.2/bin/"
ln -s /bin/dydxprotocold "$VAL_HOME_DIR/cosmovisor/upgrades/v8.2/bin/dydxprotocold"
done
}

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

install_prerequisites
setup_preupgrade_binary
create_validators
setup_cosmovisor
32 changes: 23 additions & 9 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,10 +95,10 @@ 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]}"
$PREUPGRADE_BINARY_PATH tendermint gen-priv-key --home "$VAL_HOME_DIR" --mnemonic "${MNEMONICS[$i]}"

# 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 @@ -117,16 +119,16 @@ create_validators() {
update_genesis_use_test_volatile_market "$VAL_CONFIG_DIR"
update_genesis_complete_bridge_delay "$VAL_CONFIG_DIR" "30"

echo "${MNEMONICS[$i]}" | dydxprotocold keys add "${MONIKERS[$i]}" --recover --keyring-backend=test --home "$VAL_HOME_DIR"
echo "${MNEMONICS[$i]}" | $PREUPGRADE_BINARY_PATH keys add "${MONIKERS[$i]}" --recover --keyring-backend=test --home "$VAL_HOME_DIR"

for acct in "${TEST_ACCOUNTS[@]}"; do
dydxprotocold add-genesis-account "$acct" 100000000000000000$USDC_DENOM,$TESTNET_VALIDATOR_NATIVE_TOKEN_BALANCE$NATIVE_TOKEN --home "$VAL_HOME_DIR"
$PREUPGRADE_BINARY_PATH add-genesis-account "$acct" 100000000000000000$USDC_DENOM,$TESTNET_VALIDATOR_NATIVE_TOKEN_BALANCE$NATIVE_TOKEN --home "$VAL_HOME_DIR"
done
for acct in "${FAUCET_ACCOUNTS[@]}"; do
dydxprotocold add-genesis-account "$acct" 900000000000000000$USDC_DENOM,$TESTNET_VALIDATOR_NATIVE_TOKEN_BALANCE$NATIVE_TOKEN --home "$VAL_HOME_DIR"
$PREUPGRADE_BINARY_PATH 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 All @@ -141,7 +143,7 @@ create_validators() {
cp -r /tmp/gentx "$FIRST_VAL_CONFIG_DIR"

# Build the final genesis.json file that all validators and the full-nodes will use.
dydxprotocold collect-gentxs --home "$FIRST_VAL_HOME_DIR"
$PREUPGRADE_BINARY_PATH collect-gentxs --home "$FIRST_VAL_HOME_DIR"

# Copy this genesis file to each of the other validators
for i in "${!MONIKERS[@]}"; do
Expand All @@ -157,13 +159,24 @@ create_validators() {
done
}

setup_preupgrade_binary() {
tar_url='https://github.com/dydxprotocol/v4-chain/releases/download/protocol%2Fv8.1.0/dydxprotocold-v8.1.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/v8.2/bin/"
ln -s /bin/dydxprotocold "$VAL_HOME_DIR/cosmovisor/upgrades/v8.2/bin/dydxprotocold"
done
}

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

install_prerequisites
setup_preupgrade_binary
create_validators
setup_cosmovisor
Loading
Loading