Skip to content

Instantly share code, notes, and snippets.

@mgild
Last active February 4, 2026 14:27
Show Gist options
  • Select an option

  • Save mgild/3a78caed02b27c272bcc6377ae50134b to your computer and use it in GitHub Desktop.

Select an option

Save mgild/3a78caed02b27c272bcc6377ae50134b to your computer and use it in GitHub Desktop.
#!/bin/bash
# Transfer SWITCH tokens from operator to signer wallet
#
# Usage: ./setup-oracle-env.sh [--simulate] <operator> <signer>
set -e
SIMULATE=false
if [[ "$1" == "--simulate" ]]; then
SIMULATE=true
shift
fi
OPERATOR="$1"
SIGNER="$2"
if [ -z "$OPERATOR" ] || [ -z "$SIGNER" ]; then
echo "Usage: ./setup-oracle-env.sh [--simulate] <operator> <signer>"
echo " --simulate Dry run (shows config and commands only)"
echo " <operator> Operator account address"
echo " <signer> Path to signer keypair"
exit 1
fi
RPC="${RPC:-https://api.mainnet-beta.solana.com}"
SWITCH_MINT="SW1TCHLmRGTfW5xZknqQdpdarB8PD95sJYWpNp9TbFx"
# === Derive signer pubkey ===
SIGNER_PUBKEY=$(solana-keygen pubkey "$SIGNER")
# === Get operator's SWITCH ATA ===
OPERATOR_SWITCH_ATA=$(spl-token address --verbose --token "$SWITCH_MINT" --owner "$OPERATOR" 2>/dev/null | grep "Associated token address" | awk '{print $4}')
if [ -z "$OPERATOR_SWITCH_ATA" ]; then
echo "Error: Could not derive operator SWITCH ATA"
exit 1
fi
# === Fetch balance (raw) ===
UI_AMOUNT=$(spl-token balance --address "$OPERATOR_SWITCH_ATA" --url "$RPC")
# SWITCH has 9 decimals
AMOUNT=$(echo "$UI_AMOUNT * 1000000000" | bc | cut -d'.' -f1)
# === Derive wallet ATA from signer pubkey ===
WALLET_SWITCH_ATA=$(spl-token address --verbose --token "$SWITCH_MINT" --owner "$SIGNER_PUBKEY" 2>/dev/null | grep "Associated token address" | awk '{print $4}')
# === Print config ===
echo "=== Oracle Token Transfer ==="
echo "MODE: $(if $SIMULATE; then echo 'SIMULATE'; else echo 'LIVE'; fi)"
echo "OPERATOR: $OPERATOR"
echo "SIGNER_PUBKEY: $SIGNER_PUBKEY"
echo "RPC: $RPC"
echo "OPERATOR_SWITCH_ATA: $OPERATOR_SWITCH_ATA"
echo "WALLET_SWITCH_ATA: $WALLET_SWITCH_ATA"
echo "AMOUNT: $UI_AMOUNT ($AMOUNT raw)"
echo ""
if $SIMULATE; then
echo "=== Commands (not executed) ==="
echo ""
echo "# Step 1: Delegate token account"
echo "jito-restaking-cli restaking operator operator-delegate-token-account \\"
echo " $OPERATOR \\"
echo " $SIGNER_PUBKEY \\"
echo " $SWITCH_MINT \\"
echo " --rpc-url $RPC \\"
echo " --signer $SIGNER"
echo ""
echo "# Step 2: Transfer tokens"
echo "jito-restaking-cli vault vault delegated-token-transfer \\"
echo " $OPERATOR_SWITCH_ATA \\"
echo " $WALLET_SWITCH_ATA \\"
echo " $AMOUNT \\"
echo " --rpc-url $RPC \\"
echo " --signer $SIGNER"
exit 0
fi
# === Step 1: Delegate token account ===
echo "=== Step 1: Delegate token account ==="
set -x
jito-restaking-cli restaking operator operator-delegate-token-account \
"$OPERATOR" \
"$SIGNER_PUBKEY" \
"$SWITCH_MINT" \
--rpc-url "$RPC" \
--signer "$SIGNER"
set +x
echo ""
# === Step 2: Transfer tokens ===
echo "=== Step 2: Transfer tokens ==="
set -x
jito-restaking-cli vault vault delegated-token-transfer \
"$OPERATOR_SWITCH_ATA" \
"$WALLET_SWITCH_ATA" \
"$AMOUNT" \
--rpc-url "$RPC" \
--signer "$SIGNER"
set +x
echo ""
echo "=== Done ==="
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment