Skip to content

Instantly share code, notes, and snippets.

@hexonaut
Last active October 6, 2023 09:56
Show Gist options
  • Save hexonaut/0b0e13e769760515b871fa1d54a2022b to your computer and use it in GitHub Desktop.
Save hexonaut/0b0e13e769760515b871fa1d54a2022b to your computer and use it in GitHub Desktop.
Turbocharge your Ethereum dev environment with this script. Support for multi-chain environments. Tailored for Maker, but mostly generic to Ethereum + L2s.
# Setup variables
export PS1="\[\e[32m\]\W\[\e[91m\]\$(parse_git_branch)\[\e[00m\] $ "
export DEFAULT_PS1="$PS1"
# RPC Endpoints
export REMOTE_MAINNET_RPC_URL=https://eth-mainnet.alchemyapi.io/v2/XXX
export OFFICE_MAINNET_RPC_URL=http://geth.dappnode:8545
export MAINNET_RPC_URL="$REMOTE_MAINNET_RPC_URL"
export OPTIMISM_RPC_URL=https://opt-mainnet.g.alchemy.com/v2/XXX
export ARBITRUM_ONE_RPC_URL=https://arb-mainnet.g.alchemy.com/v2/XXX
export ARBITRUM_NOVA_RPC_URL=https://nova.arbitrum.io/rpc
export GNOSIS_CHAIN_RPC_URL=https://rpc.ankr.com/gnosis
export BASE_RPC_URL=https://base.gateway.tenderly.co/XXX
export GOERLI_RPC_URL=https://eth-goerli.g.alchemy.com/v2/XXX
export OPTIMISM_GOERLI_RPC_URL=https://opt-goerli.g.alchemy.com/v2/XXX
export ARBITRUM_ONE_GOERLI_RPC_URL=https://arb-goerli.g.alchemy.com/v2/XXX
export ZKSYNC_GOERLI_RPC_URL=https://zksync2-testnet.zksync.dev
export GNOSIS_CHAIN_GOERLI_RPC_URL=https://rpc.chiado.gnosis.gateway.fm
export BASE_GOERLI_RPC_URL=https://base-goerli.gateway.tenderly.co/XXX
export LOCAL_RPC_URL=http://127.0.0.1:8545
# Misc Util functions
json-to-env() {
VALUES=$(curl -s -L $1)
for s in $(echo $VALUES | jq -r "to_entries|map(\"\(.key)=\(.value|tostring)\")|.[]" ); do
export $s
done
}
# Local Forking
anvil-node() {
if [ -z "$1" ]
then
anvil --fork-url $ETH_RPC_URL
else
anvil --fork-url $ETH_RPC_URL --port $1
fi
}
# Switch Environments
ep() {
unset ETH_PASSWORD
export ETH_PROFILE="$1"
if [ "$1" = "default" ]; then
export ETH_FROM=0xd200790f62c8da69973e61d4936cfE4f356ccD07
export ETH_KEYSTORE="$HOME/Library/Ethereum/keystore/UTC--2020-10-09T19-18-28.441605000Z--d200790f62c8da69973e61d4936cfe4f356ccd07"
elif [ "$1" = "phoenix" ]; then
export ETH_FROM=0xd1236a6A111879d9862f8374BA15344b6B233Fbd
export ETH_KEYSTORE="$HOME/Library/Ethereum/keystore/UTC--2023-02-27T19-46-21.689622000Z--d1236a6a111879d9862f8374ba15344b6b233fbd"
elif [ "$1" = "fork" ]; then
export ETH_PASSWORD=~/.pass-local
export ETH_FROM=0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266
export ETH_KEYSTORE="$HOME/Library/Ethereum/keystore/UTC--2021-10-01T18-31-44.259779000Z--f39fd6e51aad88f6f4ce6ab8827279cfffb92266"
else
unset ETH_PROFILE
unset ETH_FROM
unset ETH_KEYSTORE
echo "Unknown profile configuration."
fi
export PS1="\[\033[36m\][$ETH_PROFILE-$ETH_NETWORK] $DEFAULT_PS1"
}
en() {
export ETH_NETWORK="$1"
export MAINNET_RPC_URL="$REMOTE_MAINNET_RPC_URL"
if [ "$1" = "mainnet" ]; then
json-to-env https://chainlog.makerdao.com/api/mainnet/active.json
export ETH_RPC_URL="$MAINNET_RPC_URL"
elif [ "$1" = "mainnet-office" ]; then
json-to-env https://chainlog.makerdao.com/api/mainnet/active.json
export ETH_RPC_URL="$OFFICE_MAINNET_RPC_URL"
export MAINNET_RPC_URL="$OFFICE_MAINNET_RPC_URL"
elif [ "$1" = "goerli" ]; then
json-to-env https://chainlog.makerdao.com/api/goerli/active.json
export ETH_RPC_URL="$GOERLI_RPC_URL"
elif [ "$1" = "gnosis" ]; then
export ETH_RPC_URL="$GNOSIS_CHAIN_RPC_URL"
elif [ "$1" = "gnosis-goerli" ]; then
export ETH_RPC_URL="$GNOSIS_CHAIN_GOERLI_RPC_URL"
elif [ "$1" = "base" ]; then
export ETH_RPC_URL="$BASE_RPC_URL"
elif [ "$1" = "optimism" ]; then
export ETH_RPC_URL="$OPTIMISM_RPC_URL"
elif [ "$1" = "arbitrum" ]; then
export ETH_RPC_URL="$ARBITRUM_ONE_RPC_URL"
elif [ "$1" = "local" ]; then
export ETH_RPC_URL="$LOCAL_RPC_URL"
if [ $(cast chain-id) -eq 5 ]; then
json-to-env https://chainlog.makerdao.com/api/goerli/active.json
else
json-to-env https://chainlog.makerdao.com/api/mainnet/active.json
fi
else
unset ETH_NETWORK
unset ETH_RPC_URL
echo "Unknown network configuration."
fi
#export ETH_GAS_PRICE=`echo "$(cast basefee) * 2" | bc`
export PS1="\[\033[36m\][$ETH_PROFILE-$ETH_NETWORK] $DEFAULT_PS1"
}
# Set default env
ep default
en mainnet
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment