Safe Multisig Skill
TypeScript-strict scripts for interacting with Safe multisig accounts via:
- Safe Transaction Service (read state, propose txs, submit confirmations)
- Safe{Core} SDK (create Safes, create txs, compute hashes, sign, execute)
All scripts use ethers v6, validate inputs (addresses, tx hashes), and output JSON.
Quick start
cd <this-skill>
./scripts/bootstrap.sh
# sanity check network + service
./scripts/safe_about.sh --chain base
Core scripts
| Script | Description |
|---|---|
create-safe.ts | Predict address + optionally deploy a new Safe |
safe-info.ts | Fetch Safe info (owners/threshold/nonce) |
list-pending.ts | List pending (queued) multisig transactions |
safe_txs_list.ts | List all multisig transactions (queued + executed) |
propose-tx.ts | Create + propose a multisig tx |
approve-tx.ts | Add an off-chain confirmation for a tx hash |
execute-tx.ts | Execute a fully-confirmed tx onchain |
All scripts: npx tsx scripts/<name>.ts --help
Common tasks
1) Create a new Safe
npx tsx scripts/create-safe.ts \
--chain base \
--owners 0xOwner1,0xOwner2,0xOwner3 \
--threshold 2
Add --deploy + SAFE_SIGNER_PRIVATE_KEY to send the deployment tx.
2) Get Safe info
npx tsx scripts/safe-info.ts --chain base --safe 0xYourSafe
3) List pending transactions
npx tsx scripts/list-pending.ts --chain base --safe 0xYourSafe
4) Propose a new transaction
Create a tx request JSON (see references/tx_request.schema.json and references/examples.md).
export SAFE_SIGNER_PRIVATE_KEY="..."
npx tsx scripts/propose-tx.ts \
--chain base \
--rpc-url "$BASE_RPC_URL" \
--tx-file ./references/example.tx.json
5) Confirm (approve) a proposed transaction
export SAFE_SIGNER_PRIVATE_KEY="..."
npx tsx scripts/approve-tx.ts \
--chain base \
--safe 0xYourSafe \
--safe-tx-hash 0x...
6) Execute a confirmed transaction (onchain)
export SAFE_SIGNER_PRIVATE_KEY="..."
npx tsx scripts/execute-tx.ts \
--chain base \
--rpc-url "$BASE_RPC_URL" \
--safe 0xYourSafe \
--safe-tx-hash 0x...
Configuration
All scripts accept:
--chain <slug>(recommended): e.g.base,base-sepolia,mainnet,arbitrum,optimism--tx-service-url <url>: Override the transaction service URL--rpc-url <url>: RPC endpoint (orRPC_URLenv var)--api-key <key>: Safe Transaction Service API key (orSAFE_TX_SERVICE_API_KEYenv var)
Security rules
- Never paste private keys into chat. Use env vars or files.
- Prefer low-privilege signers and spending limits.
- Always verify Safe address, chainId / RPC, and nonce before signing.
References
references/examples.md— example requests + workflowsreferences/tx_request.schema.json— tx request JSON shapereferences/tx_service_slugs.md— chain slugs + notes