my-homelab-configs/scripts/blockchain-wallet

87 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
FOUNDRY_IMAGE="${FOUNDRY_IMAGE:-ghcr.io/foundry-rs/foundry:latest}"
usage() {
cat <<'EOF'
Usage: ./jeannie blockchain-wallet {instructions|new|address|sign-message MESSAGE}
instructions Print wallet lab guidance.
new Generate a new development wallet.
address Print the address for PRIVATE_KEY.
sign-message MESSAGE Sign a dev message with PRIVATE_KEY.
Set PRIVATE_KEY only with an Anvil/dev private key. Never use a real wallet key.
EOF
}
run_cast() {
if command -v cast >/dev/null 2>&1; then
cast "$@"
return
fi
if ! command -v docker >/dev/null 2>&1; then
echo "cast or docker is required for blockchain-wallet." >&2
exit 1
fi
docker run --rm \
-e "PRIVATE_KEY=${PRIVATE_KEY:-}" \
"$FOUNDRY_IMAGE" \
cast "$@"
}
require_private_key() {
if [ -z "${PRIVATE_KEY:-}" ]; then
echo "Set PRIVATE_KEY to an Anvil/dev private key first." >&2
exit 1
fi
}
case "${1:-instructions}" in
instructions)
cat <<'EOF'
Wallet lab rules:
- Use only Anvil or disposable development keys.
- Never paste a real seed phrase or funded private key into this repo or shell.
- Prefer environment variables for short-lived dev keys.
- Treat signatures as authorization; verify what you are signing.
Examples:
./jeannie blockchain-wallet new
export PRIVATE_KEY=0x...
./jeannie blockchain-wallet address
./jeannie blockchain-wallet sign-message "homelab devnet login"
Pair this with:
./jeannie blockchain-devnet up
./jeannie blockchain-devnet rpc
EOF
;;
new)
run_cast wallet new
;;
address)
require_private_key
run_cast wallet address "$PRIVATE_KEY"
;;
sign-message)
require_private_key
shift
if [ "$#" -eq 0 ]; then
echo "sign-message requires a message." >&2
exit 1
fi
run_cast wallet sign --private-key "$PRIVATE_KEY" "$*"
;;
-h|--help|help)
usage
;;
*)
usage >&2
exit 1
;;
esac