|
|
#!/bin/bash |
|
|
|
|
|
echo "🗑️ Closing All Token Accounts" |
|
|
echo "==============================" |
|
|
echo "⚠️ This will close ALL token accounts and burn any remaining tokens!" |
|
|
echo "💰 You will reclaim the SOL used for rent" |
|
|
echo "📍 Cluster: devnet (safe for testing)" |
|
|
echo "" |
|
|
|
|
|
# Confirm before proceeding |
|
|
read -p "Are you sure you want to close ALL token accounts? (type 'yes' to confirm): " confirm |
|
|
if [ "$confirm" != "yes" ]; then |
|
|
echo "❌ Aborted - no accounts closed" |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
echo "🗑️ Starting token account closure process..." |
|
|
echo "" |
|
|
|
|
|
# Set to devnet |
|
|
solana config set --url devnet > /dev/null |
|
|
|
|
|
echo "💰 Current wallet: $(solana address)" |
|
|
echo "🌐 Cluster: devnet" |
|
|
echo "" |
|
|
echo "💰 SOL balance before: $(solana balance --url devnet)" |
|
|
echo "" |
|
|
|
|
|
# Get all token accounts and close them |
|
|
echo "📊 Current token accounts:" |
|
|
spl-token accounts --url devnet |
|
|
echo "" |
|
|
|
|
|
# List of specific token account addresses to close (from verbose output) |
|
|
TOKEN_ACCOUNTS=( |
|
|
"8zr6uF84gTzY5V1MP9EeEfy6m2LNULkH4VEFgxY1fKwh" |
|
|
"679vTxSpUw55buSgPpUsEp66eiUCQs3Y7acpoeTt6W97" |
|
|
"4t7iZeFsLXA2Ro1EyxoR88Aqnq62Da4txb74eiC2WovQ" |
|
|
"AmNmTDXjESr1PZTjEC6QiWqLbeZxdxdQkM2TasSUL88QK" |
|
|
) |
|
|
|
|
|
# Function to close a token account |
|
|
close_account() { |
|
|
local account=$1 |
|
|
echo "🗑️ Processing token account: $account" |
|
|
|
|
|
# Try to close the account directly |
|
|
local result=$(spl-token close-account $account --url devnet 2>&1) |
|
|
|
|
|
if [ $? -eq 0 ]; then |
|
|
echo " ✅ Successfully closed account and reclaimed SOL" |
|
|
else |
|
|
echo " ❌ Failed to close account: $result" |
|
|
|
|
|
# If direct closure failed, try to get the mint and burn first |
|
|
echo " 🔄 Trying alternative approach..." |
|
|
|
|
|
# Get account info to find the mint |
|
|
local account_info=$(solana account $account --url devnet --output json 2>/dev/null) |
|
|
if [ $? -eq 0 ]; then |
|
|
echo " ℹ️ Account exists, attempting force closure..." |
|
|
spl-token close-account $account --force --url devnet 2>/dev/null |
|
|
if [ $? -eq 0 ]; then |
|
|
echo " ✅ Force closure successful" |
|
|
else |
|
|
echo " ⚠️ Account could not be closed (may have non-zero balance)" |
|
|
fi |
|
|
else |
|
|
echo " ℹ️ Account may already be closed or doesn't exist" |
|
|
fi |
|
|
fi |
|
|
echo "" |
|
|
} |
|
|
|
|
|
# Close all token accounts |
|
|
for account in "${TOKEN_ACCOUNTS[@]}"; do |
|
|
close_account $account |
|
|
done |
|
|
|
|
|
# Also try to close by mint address (alternative approach) |
|
|
echo "🔄 Attempting closure by mint address as backup..." |
|
|
MINTS=( |
|
|
"4auc435LJ9AfprLeMziHTJbP8wQmbSi7o4ZpeXdR66jQ" |
|
|
"5xEQF57sR2L3tJBfdiiqaVtepTMa7nQR9uMybMojEY8n" |
|
|
"8cJ8APx5TwwmpeRk4Zhz1Qbyi1T3HHdHUEw4GUJqxAGN" |
|
|
"AK9fXWyDNWurYjZSDhbqBo6fczqLmCLbCZ3vq9Vftsqb" |
|
|
) |
|
|
|
|
|
for mint in "${MINTS[@]}"; do |
|
|
echo "🗑️ Attempting to close account for mint: $mint" |
|
|
spl-token close $mint --url devnet 2>/dev/null |
|
|
if [ $? -eq 0 ]; then |
|
|
echo " ✅ Closed successfully" |
|
|
else |
|
|
echo " ⚠️ Could not close (may not exist or have balance)" |
|
|
fi |
|
|
done |
|
|
|
|
|
echo "" |
|
|
echo "🎯 Token account closure process complete!" |
|
|
echo "" |
|
|
echo "📊 Final token account status:" |
|
|
spl-token accounts --url devnet |
|
|
|
|
|
echo "" |
|
|
echo "💰 Final SOL balance:" |
|
|
solana balance --url devnet |
|
|
|
|
|
echo "" |
|
|
echo "✅ Token accounts processed!" |
|
|
echo "🧪 Ready for clean testing with your PoWH program" |