mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-10-31 18:27:26 +00:00 
			
		
		
		
	add deploy scripts
This commit is contained in:
		
							parent
							
								
									0b4c5da294
								
							
						
					
					
						commit
						7f62518464
					
				
							
								
								
									
										78
									
								
								networks/testnet/deploy.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										78
									
								
								networks/testnet/deploy.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,78 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | 
 | ||||||
|  | function help() { | ||||||
|  |     echo "Usage: deploy.sh IP1,IP2,IP3 [options]" | ||||||
|  |     echo "" | ||||||
|  |     echo "  -i    Identity file" | ||||||
|  |     echo "  -k    Keyring password to create key (for Linux only)" | ||||||
|  |     echo "  -n    Network (default: testnet)" | ||||||
|  |     echo "  -c    Chain ID (default: \"zgtendermint_9000-1\")" | ||||||
|  |     echo "" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | if [[ $# -eq 0 ]]; then | ||||||
|  | 	help | ||||||
|  | 	exit 1 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | set -e | ||||||
|  | 
 | ||||||
|  | IP_LIST=$1 | ||||||
|  | shift | ||||||
|  | PEM_FLAG="" | ||||||
|  | KEYRING_PASSWORD="" | ||||||
|  | NETWORK="testnet" | ||||||
|  | INIT_GENESIS_ENV="" | ||||||
|  | 
 | ||||||
|  | while [[ $# -gt 0 ]]; do | ||||||
|  | 	case $1 in | ||||||
|  | 	-i) | ||||||
|  | 		PEM_FLAG="-i $2"; | ||||||
|  |         shift; shift | ||||||
|  | 		;; | ||||||
|  | 	-k) | ||||||
|  | 		KEYRING_PASSWORD=$2; | ||||||
|  |         shift; shift | ||||||
|  | 		;; | ||||||
|  |     -n) | ||||||
|  |         NETWORK=$2 | ||||||
|  | 		INIT_GENESIS_ENV="$INIT_GENESIS_ENV export ROOT_DIR=$2;" | ||||||
|  |         shift; shift | ||||||
|  | 		;; | ||||||
|  |     -c) | ||||||
|  | 		INIT_GENESIS_ENV="$INIT_GENESIS_ENV export CHAIN_ID=$2;" | ||||||
|  |         shift; shift | ||||||
|  | 		;; | ||||||
|  | 	*) | ||||||
|  |         help | ||||||
|  |         echo "Unknown flag passed: \"$1\"" | ||||||
|  | 		exit 1 | ||||||
|  | 		;; | ||||||
|  |     esac | ||||||
|  | done | ||||||
|  | 
 | ||||||
|  | IFS=","; declare -a IPS=($IP_LIST); unset IFS | ||||||
|  | NUM_NODES=${#IPS[@]} | ||||||
|  | 
 | ||||||
|  | # Install dependent libraries and binary | ||||||
|  | for ((i=0; i<$NUM_NODES; i++)) do | ||||||
|  |     ssh $PEM_FLAG ubuntu@${IPS[$i]} "git clone https://github.com/0glabs/0g-chain.git; cd 0g-chain; ./networks/testnet/install.sh" | ||||||
|  | done | ||||||
|  | 
 | ||||||
|  | # Create genesis config on node0 | ||||||
|  | ssh $PEM_FLAG ubuntu@${IPS[0]} "cd 0g-chain/networks/testnet; $INIT_GENESIS_ENV ./init-genesis.sh $IP_LIST $KEYRING_PASSWORD; tar czf ~/$NETWORK.tar.gz $NETWORK; rm -rf $NETWORK" | ||||||
|  | scp $PEM_FLAG ubuntu@${IPS[0]}:$NETWORK.tar.gz . | ||||||
|  | ssh $PEM_FLAG ubuntu@${IPS[0]} "rm $NETWORK.tar.gz" | ||||||
|  | 
 | ||||||
|  | # Copy genesis config to remote nodes | ||||||
|  | tar xzf $NETWORK.tar.gz | ||||||
|  | rm $NETWORK.tar.gz | ||||||
|  | cd $NETWORK | ||||||
|  | for ((i=0; i<$NUM_NODES; i++)) do | ||||||
|  |     tar czf node$i.tar.gz node$i | ||||||
|  |     scp $PEM_FLAG node$i.tar.gz ubuntu@${IPS[$i]}:~ | ||||||
|  |     ssh $PEM_FLAG ubuntu@${IPS[$i]} "rm -rf kava-prod; tar xzf node$i.tar.gz; rm node$i.tar.gz; mv node$i kava-prod" | ||||||
|  |     rm node$i.tar.gz | ||||||
|  | done | ||||||
|  | 
 | ||||||
|  | echo -e "\n\nSucceeded to deploy on $NUM_NODES nodes!\n" | ||||||
							
								
								
									
										194
									
								
								networks/testnet/init-genesis.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										194
									
								
								networks/testnet/init-genesis.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,194 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | 
 | ||||||
|  | ROOT_DIR=${ROOT_DIR:-testnet} | ||||||
|  | CHAIN_ID=${CHAIN_ID:-zgtendermint_9000-1} | ||||||
|  | 
 | ||||||
|  | # Usage: init-genesis.sh IP1,IP2,IP3 KEYRING_PASSWORD | ||||||
|  | OS_NAME=`uname -o` | ||||||
|  | USAGE="Usage: ${BASH_SOURCE[0]} IP1,IP2,IP3" | ||||||
|  | if [[ "$OS_NAME" = "GNU/Linux" ]]; then | ||||||
|  | 	USAGE="$USAGE KEYRING_PASSWORD" | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | if [[ $# -eq 0 ]]; then | ||||||
|  | 	echo "IP list not specified" | ||||||
|  | 	echo $USAGE | ||||||
|  | 	exit 1 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | if [[ "$OS_NAME" = "GNU/Linux" ]]; then | ||||||
|  | 	if [[ $# -eq 1 ]]; then | ||||||
|  | 		echo "Keyring password not specified" | ||||||
|  | 		echo $USAGE | ||||||
|  | 		exit 1 | ||||||
|  | 	fi | ||||||
|  | 
 | ||||||
|  | 	PASSWORD=$2 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | kava version 2>/dev/null || export PATH=$PATH:$(go env GOPATH)/bin | ||||||
|  | 
 | ||||||
|  | set -e | ||||||
|  | 
 | ||||||
|  | IFS=","; declare -a IPS=($1); unset IFS | ||||||
|  | 
 | ||||||
|  | NUM_NODES=${#IPS[@]} | ||||||
|  | BALANCE=$((100000000/$NUM_NODES))kava | ||||||
|  | STAKING=$((50000000/$NUM_NODES))kava | ||||||
|  | 
 | ||||||
|  | # Init configs | ||||||
|  | for ((i=0; i<$NUM_NODES; i++)) do | ||||||
|  | 	HOMEDIR="$ROOT_DIR"/node$i | ||||||
|  | 	 | ||||||
|  | 	# Change parameter token denominations to neuron | ||||||
|  | 	GENESIS="$HOMEDIR"/config/genesis.json | ||||||
|  | 	TMP_GENESIS="$HOMEDIR"/config/tmp_genesis.json | ||||||
|  | 
 | ||||||
|  | 	# Init | ||||||
|  | 	kava init "node$i" --home "$HOMEDIR" --chain-id "$CHAIN_ID" >/dev/null 2>&1 | ||||||
|  | 
 | ||||||
|  |     # Replace stake with ukava | ||||||
|  |     sed -in-place='' 's/stake/ukava/g' "$GENESIS" | ||||||
|  | 
 | ||||||
|  |     # Replace the default evm denom of aphoton with ukava | ||||||
|  |     sed -in-place='' 's/aphoton/akava/g' "$GENESIS" | ||||||
|  | 
 | ||||||
|  |     cat $GENESIS | jq '.consensus_params.block.max_gas = "25000000"' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS | ||||||
|  | 
 | ||||||
|  |     # Zero out the total supply so it gets recalculated during InitGenesis | ||||||
|  |     cat $GENESIS | jq '.app_state.bank.supply = []' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS | ||||||
|  | 
 | ||||||
|  |     # Disable fee market | ||||||
|  |     cat $GENESIS | jq '.app_state.feemarket.params.no_base_fee = true' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS | ||||||
|  | 
 | ||||||
|  |     # Disable london fork | ||||||
|  |     cat $GENESIS | jq '.app_state.evm.params.chain_config.london_block = null' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS | ||||||
|  |     cat $GENESIS | jq '.app_state.evm.params.chain_config.arrow_glacier_block = null' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS | ||||||
|  |     cat $GENESIS | jq '.app_state.evm.params.chain_config.gray_glacier_block = null' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS | ||||||
|  |     cat $GENESIS | jq '.app_state.evm.params.chain_config.merge_netsplit_block = null' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS | ||||||
|  |     cat $GENESIS | jq '.app_state.evm.params.chain_config.shanghai_block = null' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS | ||||||
|  |     cat $GENESIS | jq '.app_state.evm.params.chain_config.cancun_block = null' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS | ||||||
|  | 
 | ||||||
|  |     # Add earn vault | ||||||
|  |     cat $GENESIS | jq '.app_state.earn.params.allowed_vaults =  [ | ||||||
|  |         { | ||||||
|  |             denom: "usdx", | ||||||
|  |             strategies: ["STRATEGY_TYPE_HARD"], | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             denom: "bkava", | ||||||
|  |             strategies: ["STRATEGY_TYPE_SAVINGS"], | ||||||
|  |         }]' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS | ||||||
|  | 
 | ||||||
|  |     cat $GENESIS | jq '.app_state.savings.params.supported_denoms = ["bkava-kavavaloper1ffv7nhd3z6sych2qpqkk03ec6hzkmufyz4scd0"]' >$TMP_GENESIS && mv $TMP_GENESIS $GENESIS | ||||||
|  | 
 | ||||||
|  | 	# cat "$GENESIS" | jq '.app_state["staking"]["params"]["bond_denom"]="ukava"' >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" | ||||||
|  | 	# cat "$GENESIS" | jq '.app_state["gov"]["params"]["min_deposit"][0]["denom"]="neuron"' >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS" | ||||||
|  | 
 | ||||||
|  | 	# Change app.toml | ||||||
|  | 	APP_TOML="$HOMEDIR"/config/app.toml | ||||||
|  | 	sed -i 's/minimum-gas-prices = "0akava"/minimum-gas-prices = "1000000000ukava"/' "$APP_TOML" | ||||||
|  | 	sed -i '/\[json-rpc\]/,/^\[/ s/enable = false/enable = true/' "$APP_TOML" | ||||||
|  | 	sed -i '/\[json-rpc\]/,/^\[/ s/address = "127.0.0.1:8545"/address = "0.0.0.0:8545"/' "$APP_TOML" | ||||||
|  | 
 | ||||||
|  |     # Set evm tracer to json | ||||||
|  |     sed -in-place='' 's/tracer = ""/tracer = "json"/g' "$APP_TOML" | ||||||
|  | 
 | ||||||
|  |     # Enable full error trace to be returned on tx failure | ||||||
|  |     sed -in-place='' '/iavl-cache-size/a\ | ||||||
|  | trace = true' "$APP_TOML" | ||||||
|  | done | ||||||
|  | 
 | ||||||
|  | # Update seeds in config.toml | ||||||
|  | SEEDS="" | ||||||
|  | for ((i=0; i<$NUM_NODES; i++)) do | ||||||
|  | 	if [[ $i -gt 0 ]]; then SEEDS=$SEEDS,; fi | ||||||
|  | 	NODE_ID=`kava tendermint show-node-id --home $ROOT_DIR/node$i` | ||||||
|  | 	SEEDS=$SEEDS$NODE_ID@${IPS[$i]}:26656 | ||||||
|  | done | ||||||
|  | 
 | ||||||
|  | for ((i=0; i<$NUM_NODES; i++)) do | ||||||
|  | 	sed -i "/seeds = /c\seeds = \"$SEEDS\"" "$ROOT_DIR"/node$i/config/config.toml | ||||||
|  | done | ||||||
|  | 
 | ||||||
|  | # Prepare validators | ||||||
|  | # | ||||||
|  | # Note, keyring backend `file` works bad on Windows, and `add-genesis-account` | ||||||
|  | # do not supports --keyring-dir flag. As a result, we use keyring backend `os`, | ||||||
|  | # which is the default value. | ||||||
|  | # | ||||||
|  | # Where key stored: | ||||||
|  | # - Windows: Windows credentials management. | ||||||
|  | # - Linux: under `--home` specified folder. | ||||||
|  | if [[ "$OS_NAME" = "Msys" ]]; then | ||||||
|  | 	for ((i=0; i<$NUM_NODES; i++)) do | ||||||
|  | 		VALIDATOR="0gchain_9000_validator_$i" | ||||||
|  | 		set +e | ||||||
|  | 		ret=`kava keys list --keyring-backend os -n | grep $VALIDATOR` | ||||||
|  | 		set -e | ||||||
|  | 		if [[ "$ret" = "" ]]; then | ||||||
|  | 			echo "Create validator key: $VALIDATOR" | ||||||
|  | 			kava keys add $VALIDATOR --keyring-backend os | ||||||
|  | 		fi | ||||||
|  | 	done | ||||||
|  | elif [[ "$OS_NAME" = "GNU/Linux" ]]; then | ||||||
|  | 	# Create N validators for node0 | ||||||
|  | 	for ((i=0; i<$NUM_NODES; i++)) do | ||||||
|  | 		yes $PASSWORD | kava keys add "0gchain_9000_validator_$i" --keyring-backend os --home "$ROOT_DIR"/node0 | ||||||
|  | 	done | ||||||
|  | 
 | ||||||
|  | 	# Copy validators to other nodes | ||||||
|  | 	for ((i=1; i<$NUM_NODES; i++)) do | ||||||
|  | 		cp "$ROOT_DIR"/node0/keyhash "$ROOT_DIR"/node$i | ||||||
|  | 		cp "$ROOT_DIR"/node0/*.address "$ROOT_DIR"/node$i | ||||||
|  | 		cp "$ROOT_DIR"/node0/*.info "$ROOT_DIR"/node$i | ||||||
|  | 	done | ||||||
|  | else | ||||||
|  | 	echo -e "\n\nOS: $OS_NAME" | ||||||
|  | 	echo "Unsupported OS to generate keys for validators!!!" | ||||||
|  | 	exit 1 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | # Add all validators in genesis | ||||||
|  | for ((i=0; i<$NUM_NODES; i++)) do | ||||||
|  | 	for ((j=0; j<$NUM_NODES; j++)) do | ||||||
|  | 		if [[ "$OS_NAME" = "GNU/Linux" ]]; then | ||||||
|  | 			yes $PASSWORD | kava add-genesis-account "0gchain_9000_validator_$i" $BALANCE --home "$ROOT_DIR/node$j" | ||||||
|  | 		else | ||||||
|  | 			kava add-genesis-account "0gchain_9000_validator_$i" $BALANCE --home "$ROOT_DIR/node$j" | ||||||
|  | 		fi  | ||||||
|  | 	done | ||||||
|  | done | ||||||
|  | 
 | ||||||
|  | # Prepare genesis txs | ||||||
|  | mkdir -p "$ROOT_DIR"/gentxs | ||||||
|  | for ((i=0; i<$NUM_NODES; i++)) do | ||||||
|  | 	if [[ "$OS_NAME" = "GNU/Linux" ]]; then | ||||||
|  | 		yes $PASSWORD | kava gentx "0gchain_9000_validator_$i" $STAKING --home "$ROOT_DIR/node$i" --output-document "$ROOT_DIR/gentxs/node$i.json" | ||||||
|  | 	else | ||||||
|  | 		kava gentx "0gchain_9000_validator_$i" $STAKING --home "$ROOT_DIR/node$i" --output-document "$ROOT_DIR/gentxs/node$i.json" | ||||||
|  | 	fi  | ||||||
|  | done | ||||||
|  | 
 | ||||||
|  | # Create genesis at node0 and copy to other nodes | ||||||
|  | kava collect-gentxs --home "$ROOT_DIR/node0" --gentx-dir "$ROOT_DIR/gentxs" >/dev/null 2>&1 | ||||||
|  | sed -i '/persistent_peers = /c\persistent_peers = ""' "$ROOT_DIR"/node0/config/config.toml | ||||||
|  | kava validate-genesis --home "$ROOT_DIR/node0" | ||||||
|  | for ((i=1; i<$NUM_NODES; i++)) do | ||||||
|  | 	cp "$ROOT_DIR"/node0/config/genesis.json "$ROOT_DIR"/node$i/config/genesis.json | ||||||
|  | done | ||||||
|  | 
 | ||||||
|  | # For linux, backup keys for all validators | ||||||
|  | if [[ "$OS_NAME" = "GNU/Linux" ]]; then | ||||||
|  | 	mkdir -p "$ROOT_DIR"/keyring-os | ||||||
|  | 
 | ||||||
|  | 	cp "$ROOT_DIR"/node0/keyhash "$ROOT_DIR"/keyring-os | ||||||
|  | 	cp "$ROOT_DIR"/node0/*.address "$ROOT_DIR"/keyring-os | ||||||
|  | 	cp "$ROOT_DIR"/node0/*.info "$ROOT_DIR"/keyring-os | ||||||
|  | 
 | ||||||
|  | 	for ((i=0; i<$NUM_NODES; i++)) do | ||||||
|  | 		rm -f "$ROOT_DIR"/node$i/keyhash "$ROOT_DIR"/node$i/*.address "$ROOT_DIR"/node$i/*.info | ||||||
|  | 	done | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | echo -e "\n\nSucceeded to init genesis!\n" | ||||||
							
								
								
									
										20
									
								
								networks/testnet/install.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										20
									
								
								networks/testnet/install.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,20 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | 
 | ||||||
|  | # Install dependent libraries | ||||||
|  | go version 2>/dev/null || sudo snap install go --classic | ||||||
|  | jq --version 2>/dev/null || sudo snap install jq | ||||||
|  | make --version 2>/dev/null || sudo apt install make -y | ||||||
|  | gcc --version 2>/dev/null || (sudo apt-get update; sudo apt install gcc -y) | ||||||
|  | 
 | ||||||
|  | # Build binary | ||||||
|  | export PATH=$PATH:$(go env GOPATH)/bin | ||||||
|  | kava version 2>/dev/null | ||||||
|  | if [[ $? -ne 0 ]]; then | ||||||
|  |     # Make under root dir | ||||||
|  |     SCRIPT_DIR=`dirname "${BASH_SOURCE[0]}"` | ||||||
|  |     cd $SCRIPT_DIR/../.. | ||||||
|  |     make install | ||||||
|  | 
 | ||||||
|  |     # Add gopath to path | ||||||
|  |     echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.profile | ||||||
|  | fi | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Peter Zhang
						Peter Zhang