feat: add guarded Base Sepolia encore
This commit is contained in:
Executable
+56
@@ -0,0 +1,56 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user