57 lines
2.0 KiB
Bash
Executable File
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
|