Skip to main content

Scripting Guide

Automate Privacy Boost operations with shell scripts and batch processing.

JSON Output

Use --output json (or -o json) for machine-readable output:
# Get all balances as JSON
privacy-boost balances --output json

# Parse with jq
privacy-boost balances -o json | jq '.[] | select(.symbol == "WETH")'

# Get specific field
privacy-boost status -o json | jq -r '.privacy_address'

Environment Setup

Configuration Script

Create a setup script:
#!/bin/bash
# setup-env.sh

export NETWORK="${1:-op-sepolia}"

case $NETWORK in
  op-sepolia)
    export PRIVACY_BOOST_CHAIN_ID=11155420
    export PRIVACY_BOOST_INDEXER_URL="https://test-api.privacy-boost.sunnyside.io/indexer"
    export PRIVACY_BOOST_PROVER_URL="https://test-api.privacy-boost.sunnyside.io/prover"
    export PRIVACY_BOOST_RPC_URL="https://sepolia.optimism.io"
    export PRIVACY_BOOST_SHIELD_CONTRACT="0xB22fD661b322F10d4B7cd0cFcb9578C485423119"
    export PRIVACY_BOOST_WETH_CONTRACT="0x4200000000000000000000000000000000000006"
    ;;
  local)
    export PRIVACY_BOOST_CHAIN_ID=31337
    export PRIVACY_BOOST_INDEXER_URL="http://localhost:8081"
    export PRIVACY_BOOST_PROVER_URL="http://localhost:8080"
    export PRIVACY_BOOST_RPC_URL="http://localhost:8545"
    ;;
esac

echo "Environment configured for $NETWORK"
Usage:
source setup-env.sh op-sepolia

Secure Key Loading

#!/bin/bash
# load-key.sh

# From environment (set elsewhere)
if [ -n "$PRIVATE_KEY" ]; then
  echo "Using PRIVATE_KEY from environment"
  exit 0
fi

# From file
KEY_FILE="${HOME}/.privacy-boost/key"
if [ -f "$KEY_FILE" ]; then
  export PRIVATE_KEY=$(cat "$KEY_FILE")
  echo "Loaded key from file"
  exit 0
fi

# From pass (password manager)
if command -v pass &> /dev/null; then
  export PRIVATE_KEY=$(pass show crypto/privacy-boost)
  echo "Loaded key from pass"
  exit 0
fi

echo "No private key found!"
exit 1

Automation Scripts

Daily Deposit Script

#!/bin/bash
# daily-deposit.sh

set -e

source setup-env.sh mainnet
source load-key.sh

TOKEN="0x4200000000000000000000000000000000000006"  # WETH
AMOUNT="0.1"

# Login
privacy-boost login --private-key "$PRIVATE_KEY"

# Check balance
BALANCE=$(privacy-boost balance --token "$TOKEN" --output json | jq -r '.shielded_balance')
echo "Shielded balance: $BALANCE"

# Deposit
echo "Depositing $AMOUNT..."
TX=$(privacy-boost deposit --token "$TOKEN" --amount "$AMOUNT" --human --output json | jq -r '.tx_hash')
echo "Deposit TX: $TX"

# Logout
privacy-boost logout

Batch Transfer Script

#!/bin/bash
# batch-transfer.sh

set -e

TRANSFERS_FILE="${1:-transfers.csv}"
TOKEN="0x4200000000000000000000000000000000000006"

# CSV format: privacy_address,amount
# 0x1234...,0.1
# 0x5678...,0.2

source setup-env.sh mainnet
source load-key.sh

privacy-boost login --private-key "$PRIVATE_KEY"

# Read and process transfers
while IFS=',' read -r recipient amount; do
  # Skip header or empty lines
  [[ "$recipient" == "privacy_address" ]] && continue
  [[ -z "$recipient" ]] && continue

  echo "Sending $amount to $recipient..."

  TX=$(privacy-boost send \
    --token "$TOKEN" \
    --amount "$amount" \
    --recipient "$recipient" \
    --output json | jq -r '.tx_hash')

  echo "  TX: $TX"

  # Small delay between transactions
  sleep 2
done < "$TRANSFERS_FILE"

privacy-boost logout
echo "Batch complete!"

Monitor Balance Script

#!/bin/bash
# monitor-balance.sh

TOKEN="${1:-0x4200000000000000000000000000000000000006}"
THRESHOLD="${2:-1.0}"
INTERVAL="${3:-300}"  # 5 minutes

source setup-env.sh mainnet
source load-key.sh

privacy-boost login --private-key "$PRIVATE_KEY"

while true; do
  BALANCE=$(privacy-boost balance --token "$TOKEN" --output json | jq -r '.shielded_balance')

  TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
  echo "[$TIMESTAMP] Shielded balance: $BALANCE wei"

  sleep "$INTERVAL"
done

Error Handling

Retry Logic

#!/bin/bash
# retry.sh

MAX_RETRIES=3
RETRY_DELAY=5

retry() {
  local n=1
  local cmd="$@"

  until [ $n -gt $MAX_RETRIES ]; do
    echo "Attempt $n: $cmd"
    if eval "$cmd"; then
      return 0
    fi

    echo "Failed, waiting ${RETRY_DELAY}s..."
    sleep $RETRY_DELAY
    ((n++))
  done

  echo "Failed after $MAX_RETRIES attempts"
  return 1
}

# Usage
retry "privacy-boost deposit --token $TOKEN --amount 1.0 --human"

Error Notifications

#!/bin/bash
# with-notification.sh

notify_error() {
  local message="$1"

  # Slack webhook
  if [ -n "$SLACK_WEBHOOK" ]; then
    curl -X POST -H 'Content-type: application/json' \
      --data "{\"text\":\"Privacy Boost Error: $message\"}" \
      "$SLACK_WEBHOOK"
  fi

  # Email (using mail command)
  # echo "$message" | mail -s "Privacy Boost Error" admin@example.com
}

# Trap errors
trap 'notify_error "Script failed at line $LINENO"' ERR

# Your operations
privacy-boost deposit --token "$TOKEN" --amount 1.0 --human

Cron Jobs

Daily Balance Report

# Run every day at 9 AM
0 9 * * * /path/to/balance-report.sh >> /var/log/privacy-boost.log 2>&1
#!/bin/bash
# balance-report.sh

source /path/to/setup-env.sh mainnet
source /path/to/load-key.sh

privacy-boost login --private-key "$PRIVATE_KEY"

echo "=== Daily Balance Report ==="
echo "Date: $(date)"
echo ""
privacy-boost balances

privacy-boost logout

Auto-Deposit on Low Balance

# Check every hour
0 * * * * /path/to/auto-deposit.sh >> /var/log/privacy-boost.log 2>&1
#!/bin/bash
# auto-deposit.sh

MIN_SHIELDED="0.5"  # ETH
DEPOSIT_AMOUNT="1.0"
TOKEN="0x4200000000000000000000000000000000000006"

source /path/to/setup-env.sh mainnet
source /path/to/load-key.sh

privacy-boost login --private-key "$PRIVATE_KEY"

BALANCE=$(privacy-boost balance --token "$TOKEN" --output json | jq -r '.shielded_balance')

echo "$(date): Shielded balance: $BALANCE wei"

privacy-boost logout

Integration Examples

With GitHub Actions

# .github/workflows/daily-deposit.yml
name: Daily Deposit

on:
  schedule:
    - cron: '0 9 * * *'
  workflow_dispatch:

jobs:
  deposit:
    runs-on: ubuntu-latest
    steps:
      - name: Download CLI
        run: |
          curl -L https://github.com/privacy-boost/releases/latest/download/privacy-boost-linux-amd64.tar.gz | tar xz
          chmod +x privacy-boost

      - name: Run Deposit
        env:
          PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
          PRIVACY_BOOST_INDEXER_URL: ${{ vars.INDEXER_URL }}
          PRIVACY_BOOST_PROVER_URL: ${{ vars.PROVER_URL }}
          PRIVACY_BOOST_RPC_URL: ${{ secrets.RPC_URL }}
          PRIVACY_BOOST_CHAIN_ID: 1
        run: |
          ./privacy-boost login --private-key "$PRIVATE_KEY"
          ./privacy-boost deposit --token ${{ vars.TOKEN }} --amount 1000000000000000000

Next Steps