set -e AVAILIABLE_NETWORKS=(anvil-localnet sepolia-testnet hoodi-testnet) NETWORK="${AVAILIABLE_NETWORKS[0]}" START=1 END=4 VERIFY_NEEDED="--verify" usage() { echo "Correct deployer script usage:" echo -e "\t-s, --start - from which contract deployment should start." echo -e "\t-e, --end - last contract deployment to be done." echo -e "\t-n, --network - network name to be deployed on." echo -e "\t-b, --blockscout - should try to use blockscout as verifier." echo -e "\nAvailable network names: ${AVAILIABLE_NETWORKS[@]}" echo -e "\nContract enumeration:" echo "0) WETH9" echo "1) UniswapV2Factory" echo "2) UniswapV2Router" exit 1 } while [[ $# -gt 0 ]]; do case "${1}" in -s|--start) START="$2" shift shift ;; -e|--end) END="$2" shift shift ;; -n|--network) NETWORK="$2" shift shift ;; -b|--blockscout) VERIFY_NEEDED+=" --verifier blockscout" shift ;; -h|--help) usage ;; *) echo -e "\nERROR: Unknown option provided\n" usage ;; esac done if [ "$NETWORK" == "anvil-localnet" ]; then VERIFY_NEEDED="" fi found=false for i in "${AVAILIABLE_NETWORKS[@]}" do if [ "$i" == "$NETWORK" ] ; then found=true fi done if [ $found == false ] ; then echo "ERROR: '${NETWORK}' is incorrect network for deployment, valid networks are:" for i in "${AVAILIABLE_NETWORKS[@]}" do echo -e "\t${i}" done exit fi for i in $(seq $START $END); do if [ "0" == "$i" ]; then CONTRACT="WETH9" elif [ "1" == "$i" ] ; then CONTRACT="UniswapV2Factory" elif [ "2" == "$i" ]; then CONTRACT="UniswapV2Router" else echo "No contract found for index $i" exit fi forge script script/${CONTRACT}.s.sol:${CONTRACT}Script --rpc-url $NETWORK if [ "$NETWORK" == "anvil-localnet" ]; then answer="y" else read -p "Do you want to broadcast '${CONTRACT}' to ${NETWORK} (y/N)? " answer fi if [ "$answer" != "${answer#[Yy]}" ] ; then forge script script/${CONTRACT}.s.sol:${CONTRACT}Script \ --rpc-url $NETWORK \ --broadcast \ ${VERIFY_NEEDED} \ -vvv else exit fi done