diff --git a/scripts/common.sh b/scripts/common.sh
old mode 100644
new mode 100755
index 5561eb7..38b41d6
--- a/scripts/common.sh
+++ b/scripts/common.sh
@@ -3,7 +3,7 @@
set -eo pipefail
if [[ ${DEBUG} ]]; then
- set -x
+ set -x
fi
# All contracts are output to `out/addresses.json` by default
@@ -16,38 +16,38 @@ ETH_RPC_URL=${ETH_RPC_URL:-http://localhost:8545}
GREEN='\033[0;32m'
NC='\033[0m' # No Color
log() {
- printf '%b\n' "${GREEN}${*}${NC}"
- echo ""
+ printf '%b\n' "${GREEN}${*}${NC}"
+ echo ""
}
# Coloured output helpers
-if command -v tput > /dev/null 2>&1; then
- if [ $(($(tput colors 2> /dev/null))) -ge 8 ]; then
- # Enable colors
- TPUT_RESET="$(tput sgr 0)"
- TPUT_YELLOW="$(tput setaf 3)"
- TPUT_RED="$(tput setaf 1)"
- TPUT_BLUE="$(tput setaf 4)"
- TPUT_GREEN="$(tput setaf 2)"
- TPUT_WHITE="$(tput setaf 7)"
- TPUT_BOLD="$(tput bold)"
- fi
+if command -v tput >/dev/null 2>&1; then
+ if [ $(($(tput colors 2>/dev/null))) -ge 8 ]; then
+ # Enable colors
+ TPUT_RESET="$(tput sgr 0)"
+ TPUT_YELLOW="$(tput setaf 3)"
+ TPUT_RED="$(tput setaf 1)"
+ TPUT_BLUE="$(tput setaf 4)"
+ TPUT_GREEN="$(tput setaf 2)"
+ TPUT_WHITE="$(tput setaf 7)"
+ TPUT_BOLD="$(tput bold)"
+ fi
fi
# ensure ETH_FROM is set and give a meaningful error message
if [[ -z ${ETH_FROM} ]]; then
- echo "ETH_FROM not found, please set it and re-run the last command."
- exit 1
+ echo "ETH_FROM not found, please set it and re-run the last command."
+ exit 1
fi
# Make sure address is checksummed
-if [ $ETH_FROM != $(seth --to-checksum-address $ETH_FROM) ]; then
- echo "ETH_FROM not checksummed, please format it with 'seth --to-checksum-address
'"
- exit 1
+if [ "$ETH_FROM" != "$(seth --to-checksum-address "$ETH_FROM")" ]; then
+ echo "ETH_FROM not checksummed, please format it with 'seth --to-checksum-address '"
+ exit 1
fi
# Setup addresses file
-cat > "$ADDRESSES_FILE" <"$ADDRESSES_FILE" < deploy ContractName arg1 arg2 arg3`
# (or omit the env vars if you have already set them)
deploy() {
- NAME=$1
- ARGS=${@:2}
- # select the filename and the contract in it
- PATTERN=".contracts[\"src/$NAME.sol\"].$NAME"
+ NAME=$1
+ ARGS=${@:2}
+ # select the filename and the contract in it
+ PATTERN=".contracts[\"src/$NAME.sol\"].$NAME"
- # get the constructor's signature
- ABI=$(jq -r "$PATTERN.abi" out/dapp.sol.json)
- SIG=$(echo $ABI | seth --abi-constructor)
+ # get the constructor's signature
+ ABI=$(jq -r "$PATTERN.abi" out/dapp.sol.json)
+ SIG=$(echo "$ABI" | seth --abi-constructor)
- # get the bytecode from the compiled file
- BYTECODE=0x$(jq -r "$PATTERN.evm.bytecode.object" out/dapp.sol.json)
+ # get the bytecode from the compiled file
+ BYTECODE=0x$(jq -r "$PATTERN.evm.bytecode.object" out/dapp.sol.json)
- # estimate gas
- GAS=$(seth estimate --create $BYTECODE $SIG $ARGS --rpc-url $ETH_RPC_URL)
+ # estimate gas
+ GAS=$(seth estimate --create "$BYTECODE" "$SIG" $ARGS --rpc-url "$ETH_RPC_URL")
- # deploy
- ADDRESS=$(dapp create $NAME $ARGS -- --gas $GAS --rpc-url $ETH_RPC_URL)
+ # deploy
+ ADDRESS=$(dapp create "$NAME" $ARGS -- --gas "$GAS" --rpc-url "$ETH_RPC_URL")
- # save the addrs to the json
- # TODO: It'd be nice if we could evolve this into a minimal versioning system
- # e.g. via commit / chainid etc.
- saveContract $NAME $ADDRESS
+ # save the addrs to the json
+ # TODO: It'd be nice if we could evolve this into a minimal versioning system
+ # e.g. via commit / chainid etc.
+ saveContract "$NAME" "$ADDRESS"
- echo $ADDRESS
+ echo "$ADDRESS"
}
# Call as `saveContract ContractName 0xYourAddress` to store the contract name
# & address to the addresses json file
saveContract() {
- # create an empty json if it does not exist
- if [[ ! -e $ADDRESSES_FILE ]]; then
- echo "{}" > $ADDRESSES_FILE
- fi
- result=$(cat $ADDRESSES_FILE | jq -r ". + {\"$1\": \"$2\"}")
- printf %s "$result" > "$ADDRESSES_FILE"
+ # create an empty json if it does not exist
+ if [[ ! -e $ADDRESSES_FILE ]]; then
+ echo "{}" >"$ADDRESSES_FILE"
+ fi
+ result=$(cat "$ADDRESSES_FILE" | jq -r ". + {\"$1\": \"$2\"}")
+ printf %s "$result" >"$ADDRESSES_FILE"
}
estimate_gas() {
- NAME=$1
- ARGS=${@:2}
- # select the filename and the contract in it
- PATTERN=".contracts[\"src/$NAME.sol\"].$NAME"
-
- # get the constructor's signature
- ABI=$(jq -r "$PATTERN.abi" out/dapp.sol.json)
- SIG=$(echo $ABI | seth --abi-constructor)
-
- # get the bytecode from the compiled file
- BYTECODE=0x$(jq -r "$PATTERN.evm.bytecode.object" out/dapp.sol.json)
- # estimate gas
- GAS=$(seth estimate --create $BYTECODE $SIG $ARGS --rpc-url $ETH_RPC_URL)
-
- GASNOW_RESPONSE=$(curl -s https://www.gasnow.org/api/v3/gas/price)
- response=$(jq '.code' <<< $GASNOW_RESPONSE)
- if [[ $response != "200" ]]; then
- echo "Could not get gas information from ${TPUT_BOLD}gasnow.org${TPUT_RESET}: https://www.gasnow.org"
- echo "response code: $response"
- else
- rapid=$(( $(jq '.data.rapid' <<< $GASNOW_RESPONSE) / 1000000000 ))
- fast=$(( $(jq '.data.fast' <<< $GASNOW_RESPONSE) / 1000000000 ))
- standard=$(( $(jq '.data.standard' <<< $GASNOW_RESPONSE) / 1000000000 ))
- slow=$(( $(jq '.data.slow' <<< $GASNOW_RESPONSE) / 1000000000 ))
- echo "Gas prices from ${TPUT_BOLD}gasnow.org${TPUT_RESET}: https://www.gasnow.org"
- echo " \
+ NAME=$1
+ ARGS=${@:2}
+ # select the filename and the contract in it
+ PATTERN=".contracts[\"src/$NAME.sol\"].$NAME"
+
+ # get the constructor's signature
+ ABI=$(jq -r "$PATTERN.abi" out/dapp.sol.json)
+ SIG=$(echo "$ABI" | seth --abi-constructor)
+
+ # get the bytecode from the compiled file
+ BYTECODE=0x$(jq -r "$PATTERN.evm.bytecode.object" out/dapp.sol.json)
+ # estimate gas
+ GAS=$(seth estimate --create "$BYTECODE" "$SIG" $ARGS --rpc-url "$ETH_RPC_URL")
+
+ TXPRICE_RESPONSE=$(curl -sL https://api.txprice.com/v1)
+ response=$(jq '.code' <<<"$TXPRICE_RESPONSE")
+ if [[ $response != "200" ]]; then
+ echo "Could not get gas information from ${TPUT_BOLD}txprice.com${TPUT_RESET}: https://api.txprice.com/v1"
+ echo "response code: $response"
+ else
+ rapid=$(($(jq '.blockPrices[0].estimatedPrices[0].maxFeePerGas' <<<"$TXPRICE_RESPONSE")))
+ fast=$(($(jq '.blockPrices[0].estimatedPrices[1].maxFeePerGas' <<<"$TXPRICE_RESPONSE")))
+ standard=$(($(jq '.blockPrices[0].estimatedPrices[2].maxFeePerGas' <<<"$TXPRICE_RESPONSE")))
+ slow=$(($(jq '.blockPrices[0].estimatedPrices[3].maxFeePerGas' <<<"$TXPRICE_RESPONSE")))
+ basefee$(($(jq '.blockPrices[0].baseFeePerGas' <<<"$TXPRICE_RESPONSE")))
+ echo "Gas prices from ${TPUT_BOLD}txprice.com${TPUT_RESET}: https://api.txprice.com/v1"
+ echo " \
${TPUT_RED}Rapid: $rapid gwei ${TPUT_RESET} \n
${TPUT_YELLOW}Fast: $fast gwei \n
${TPUT_BLUE}Standard: $standard gwei \n
${TPUT_GREEN}Slow: $slow gwei${TPUT_RESET}" | column -t
- size=$(contract_size $NAME)
- echo "Estimated Gas cost for deployment of $NAME: ${TPUT_BOLD}$GAS${TPUT_RESET} units of gas"
- echo "Contract Size: ${size} bytes"
- echo "Total cost for deployment:"
- rapid_cost=$(echo "scale=5; $GAS*$rapid/1000000000" | bc)
- fast_cost=$(echo "scale=5; $GAS*$fast/1000000000" | bc)
- standard_cost=$(echo "scale=5; $GAS*$standard/1000000000" | bc)
- slow_cost=$(echo "scale=5; $GAS*$slow/1000000000" | bc)
- echo " \
+ size=$(contract_size "$NAME")
+ echo "Estimated Gas cost for deployment of $NAME: ${TPUT_BOLD}$GAS${TPUT_RESET} units of gas"
+ echo "Contract Size: ${size} bytes"
+ echo "Total cost for deployment:"
+ rapid_cost=$(echo "scale=5; $GAS*$rapid" | bc)
+ fast_cost=$(echo "scale=5; $GAS*$fast" | bc)
+ standard_cost=$(echo "scale=5; $GAS*$standard" | bc)
+ slow_cost=$(echo "scale=5; $GAS*$slow" | bc)
+ echo " \
${TPUT_RED}Rapid: $rapid_cost ETH ${TPUT_RESET} \n
${TPUT_YELLOW}Fast: $fast_cost ETH \n
${TPUT_BLUE}Standard: $standard_cost ETH \n
${TPUT_GREEN}Slow: $slow_cost ETH ${TPUT_RESET}" | column -t
- fi
+ fi
}
-contract_size(){
- NAME=$1
- ARGS=${@:2}
- # select the filename and the contract in it
- PATTERN=".contracts[\"src/$NAME.sol\"].$NAME"
-
- # get the bytecode from the compiled file
- BYTECODE=0x$(jq -r "$PATTERN.evm.bytecode.object" out/dapp.sol.json)
- length=$(echo $BYTECODE | wc -m )
- echo $(( $length / 2 ))
-}
\ No newline at end of file
+contract_size() {
+ NAME=$1
+ ARGS=${@:2}
+ # select the filename and the contract in it
+ PATTERN=".contracts[\"src/$NAME.sol\"].$NAME"
+
+ # get the bytecode from the compiled file
+ BYTECODE=0x$(jq -r "$PATTERN.evm.bytecode.object" out/dapp.sol.json)
+ length=$(echo "$BYTECODE" | wc -m)
+ echo $(($length / 2))
+}
diff --git a/scripts/run-temp-testnet.sh b/scripts/run-temp-testnet.sh
old mode 100644
new mode 100755