Files

57 lines
2.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
fail() {
printf '%s\n' "$1" >&2
exit 1
}
case ${1-} in
deploy|upgrade|transfer) ;;
*) fail 'usage: require-base-config.sh <deploy|upgrade|transfer>' ;;
esac
for variable in \
BASE_SEPOLIA_RPC_URL \
BASE_SEPOLIA_PUBLIC_RPC_URL \
BASE_SEPOLIA_ACCOUNT \
BASE_SEPOLIA_SENDER \
BASE_SEPOLIA_RECIPIENT; do
[[ -n ${!variable-} ]] || fail "$variable is required"
done
[[ $BASE_SEPOLIA_ACCOUNT =~ ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$ ]] || \
fail 'BASE_SEPOLIA_ACCOUNT must be a conservative Foundry account identifier'
address_pattern='^0x[[:xdigit:]]{40}$'
[[ $BASE_SEPOLIA_SENDER =~ $address_pattern ]] || fail 'BASE_SEPOLIA_SENDER must be an address'
[[ $BASE_SEPOLIA_RECIPIENT =~ $address_pattern ]] || fail 'BASE_SEPOLIA_RECIPIENT must be an address'
[[ ${BASE_SEPOLIA_SENDER,,} != 0x0000000000000000000000000000000000000000 ]] || \
fail 'BASE_SEPOLIA_SENDER must be nonzero'
[[ ${BASE_SEPOLIA_RECIPIENT,,} != 0x0000000000000000000000000000000000000000 ]] || \
fail 'BASE_SEPOLIA_RECIPIENT must be nonzero'
[[ ${BASE_SEPOLIA_SENDER,,} != "${BASE_SEPOLIA_RECIPIENT,,}" ]] || \
fail 'BASE_SEPOLIA_SENDER and BASE_SEPOLIA_RECIPIENT must differ'
[[ $BASE_SEPOLIA_RPC_URL =~ ^https://[^[:space:]]+$ ]] || \
fail 'BASE_SEPOLIA_RPC_URL must use HTTPS'
[[ $BASE_SEPOLIA_PUBLIC_RPC_URL =~ ^https://[^[:space:]]+$ ]] || \
fail 'BASE_SEPOLIA_PUBLIC_RPC_URL must use HTTPS'
public_remainder=${BASE_SEPOLIA_PUBLIC_RPC_URL#https://}
public_authority=${public_remainder%%[/?#]*}
[[ -n $public_authority && $public_authority != *@* ]] || \
fail 'BASE_SEPOLIA_PUBLIC_RPC_URL must not contain user info'
if [[ $BASE_SEPOLIA_PUBLIC_RPC_URL == *\?* ]]; then
public_query=${BASE_SEPOLIA_PUBLIC_RPC_URL#*\?}
public_query=${public_query%%#*}
IFS='&' read -r -a parameters <<<"$public_query"
for parameter in "${parameters[@]}"; do
key=${parameter%%=*}
if [[ ${key,,} =~ (key|token|secret|password|credential) ]]; then
fail 'BASE_SEPOLIA_PUBLIC_RPC_URL must not contain credential query parameters'
fi
done
fi