181 lines
6.3 KiB
Bash
181 lines
6.3 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
|
||
|
|
# Send 20M cUSDT and cUSDC to a wallet address
|
||
|
|
# Usage: ./send-20m-tokens.sh
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
# Colors
|
||
|
|
GREEN='\033[0;32m'
|
||
|
|
RED='\033[0;31m'
|
||
|
|
YELLOW='\033[1;33m'
|
||
|
|
BLUE='\033[0;34m'
|
||
|
|
NC='\033[0m'
|
||
|
|
|
||
|
|
# Change to script directory
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
cd "$SCRIPT_DIR/.." || exit 1
|
||
|
|
|
||
|
|
# Load .env
|
||
|
|
if [ -f .env ]; then
|
||
|
|
set -a
|
||
|
|
source .env
|
||
|
|
set +a
|
||
|
|
fi
|
||
|
|
|
||
|
|
RPC_URL=${RPC_URL:-${RPC_URL_138:-"http://192.168.11.211:8545"}}
|
||
|
|
|
||
|
|
# Token addresses (from .env or defaults)
|
||
|
|
COMPLIANT_USDT_ADDRESS=${COMPLIANT_USDT_ADDRESS:-"0x93E66202A11B1772E55407B32B44e5Cd8eda7f22"}
|
||
|
|
COMPLIANT_USDC_ADDRESS=${COMPLIANT_USDC_ADDRESS:-"0xf22258f57794CC8E06237084b353Ab30fFfa640b"}
|
||
|
|
|
||
|
|
# Recipient address
|
||
|
|
RECIPIENT="0x4207aA9aC89B8bF4795dbAbBbE17fdd224E7947C"
|
||
|
|
|
||
|
|
# Amount: 20,000,000 tokens with 6 decimals = 20000000000000
|
||
|
|
AMOUNT="20000000000000"
|
||
|
|
|
||
|
|
echo -e "${BLUE}╔══════════════════════════════════════════════════════════════╗${NC}"
|
||
|
|
echo -e "${BLUE}║ Send 20M cUSDT and cUSDC ║${NC}"
|
||
|
|
echo -e "${BLUE}╚══════════════════════════════════════════════════════════════╝${NC}"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
if [ -z "$PRIVATE_KEY" ]; then
|
||
|
|
echo -e "${RED}Error: PRIVATE_KEY not set${NC}"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
DEPLOYER=$(cast wallet address --private-key "$PRIVATE_KEY" 2>/dev/null)
|
||
|
|
echo -e "${BLUE}Deployer Address:${NC} $DEPLOYER"
|
||
|
|
echo -e "${BLUE}Recipient Address:${NC} $RECIPIENT"
|
||
|
|
echo -e "${BLUE}Amount:${NC} 20,000,000 tokens (each)"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Check balances before transfer
|
||
|
|
echo -e "${YELLOW}Checking balances...${NC}"
|
||
|
|
|
||
|
|
CUSDT_BALANCE=$(cast call "$COMPLIANT_USDT_ADDRESS" "balanceOf(address)" "$DEPLOYER" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
|
||
|
|
CUSDC_BALANCE=$(cast call "$COMPLIANT_USDC_ADDRESS" "balanceOf(address)" "$DEPLOYER" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
|
||
|
|
|
||
|
|
CUSDT_BALANCE_DISPLAY=$(echo "scale=2; $CUSDT_BALANCE / 1000000" | bc 2>/dev/null || echo "0")
|
||
|
|
CUSDC_BALANCE_DISPLAY=$(echo "scale=2; $CUSDC_BALANCE / 1000000" | bc 2>/dev/null || echo "0")
|
||
|
|
|
||
|
|
echo " Deployer cUSDT Balance: $CUSDT_BALANCE_DISPLAY tokens"
|
||
|
|
echo " Deployer cUSDC Balance: $CUSDC_BALANCE_DISPLAY tokens"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Check if we need to mint or transfer
|
||
|
|
USE_MINT=false
|
||
|
|
if [ "$(echo "$CUSDT_BALANCE < $AMOUNT" | bc 2>/dev/null || echo 1)" = "1" ]; then
|
||
|
|
echo -e "${YELLOW}Insufficient balance. Will mint tokens directly to recipient...${NC}"
|
||
|
|
USE_MINT=true
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ "$USE_MINT" = "true" ]; then
|
||
|
|
# Mint cUSDT directly to recipient
|
||
|
|
echo -e "${YELLOW}Minting 20M cUSDT to recipient...${NC}"
|
||
|
|
TX_OUTPUT=$(cast send "$COMPLIANT_USDT_ADDRESS" \
|
||
|
|
"mint(address,uint256)" \
|
||
|
|
"$RECIPIENT" \
|
||
|
|
"$AMOUNT" \
|
||
|
|
--rpc-url "$RPC_URL" \
|
||
|
|
--private-key "$PRIVATE_KEY" \
|
||
|
|
--legacy \
|
||
|
|
--gas-price 20000000000 \
|
||
|
|
2>&1)
|
||
|
|
else
|
||
|
|
# Transfer cUSDT
|
||
|
|
echo -e "${YELLOW}Transferring 20M cUSDT...${NC}"
|
||
|
|
TX_OUTPUT=$(cast send "$COMPLIANT_USDT_ADDRESS" \
|
||
|
|
"transfer(address,uint256)" \
|
||
|
|
"$RECIPIENT" \
|
||
|
|
"$AMOUNT" \
|
||
|
|
--rpc-url "$RPC_URL" \
|
||
|
|
--private-key "$PRIVATE_KEY" \
|
||
|
|
--legacy \
|
||
|
|
--gas-price 20000000000 \
|
||
|
|
2>&1)
|
||
|
|
fi
|
||
|
|
|
||
|
|
if echo "$TX_OUTPUT" | grep -qE "transactionHash"; then
|
||
|
|
TX_HASH=$(echo "$TX_OUTPUT" | grep -oE "transactionHash[[:space:]]+0x[0-9a-fA-F]{64}" | awk '{print $2}')
|
||
|
|
if [ "$USE_MINT" = "true" ]; then
|
||
|
|
echo -e "${GREEN}✓ cUSDT mint successful${NC}"
|
||
|
|
else
|
||
|
|
echo -e "${GREEN}✓ cUSDT transfer successful${NC}"
|
||
|
|
fi
|
||
|
|
echo " Transaction Hash: $TX_HASH"
|
||
|
|
else
|
||
|
|
echo -e "${RED}✗ cUSDT operation failed${NC}"
|
||
|
|
echo "$TX_OUTPUT"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Check if we need to mint cUSDC
|
||
|
|
USE_MINT_USDC=false
|
||
|
|
if [ "$(echo "$CUSDC_BALANCE < $AMOUNT" | bc 2>/dev/null || echo 1)" = "1" ]; then
|
||
|
|
USE_MINT_USDC=true
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ "$USE_MINT_USDC" = "true" ]; then
|
||
|
|
# Mint cUSDC directly to recipient
|
||
|
|
echo -e "${YELLOW}Minting 20M cUSDC to recipient...${NC}"
|
||
|
|
TX_OUTPUT=$(cast send "$COMPLIANT_USDC_ADDRESS" \
|
||
|
|
"mint(address,uint256)" \
|
||
|
|
"$RECIPIENT" \
|
||
|
|
"$AMOUNT" \
|
||
|
|
--rpc-url "$RPC_URL" \
|
||
|
|
--private-key "$PRIVATE_KEY" \
|
||
|
|
--legacy \
|
||
|
|
--gas-price 20000000000 \
|
||
|
|
2>&1)
|
||
|
|
else
|
||
|
|
# Transfer cUSDC
|
||
|
|
echo -e "${YELLOW}Transferring 20M cUSDC...${NC}"
|
||
|
|
TX_OUTPUT=$(cast send "$COMPLIANT_USDC_ADDRESS" \
|
||
|
|
"transfer(address,uint256)" \
|
||
|
|
"$RECIPIENT" \
|
||
|
|
"$AMOUNT" \
|
||
|
|
--rpc-url "$RPC_URL" \
|
||
|
|
--private-key "$PRIVATE_KEY" \
|
||
|
|
--legacy \
|
||
|
|
--gas-price 20000000000 \
|
||
|
|
2>&1)
|
||
|
|
fi
|
||
|
|
|
||
|
|
if echo "$TX_OUTPUT" | grep -qE "transactionHash"; then
|
||
|
|
TX_HASH=$(echo "$TX_OUTPUT" | grep -oE "transactionHash[[:space:]]+0x[0-9a-fA-F]{64}" | awk '{print $2}')
|
||
|
|
if [ "$USE_MINT_USDC" = "true" ]; then
|
||
|
|
echo -e "${GREEN}✓ cUSDC mint successful${NC}"
|
||
|
|
else
|
||
|
|
echo -e "${GREEN}✓ cUSDC transfer successful${NC}"
|
||
|
|
fi
|
||
|
|
echo " Transaction Hash: $TX_HASH"
|
||
|
|
else
|
||
|
|
echo -e "${RED}✗ cUSDC operation failed${NC}"
|
||
|
|
echo "$TX_OUTPUT"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Verify transfers
|
||
|
|
echo -e "${YELLOW}Verifying transfers...${NC}"
|
||
|
|
sleep 3
|
||
|
|
|
||
|
|
RECIPIENT_CUSDT=$(cast call "$COMPLIANT_USDT_ADDRESS" "balanceOf(address)" "$RECIPIENT" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
|
||
|
|
RECIPIENT_CUSDC=$(cast call "$COMPLIANT_USDC_ADDRESS" "balanceOf(address)" "$RECIPIENT" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
|
||
|
|
|
||
|
|
RECIPIENT_CUSDT_DISPLAY=$(echo "scale=2; $RECIPIENT_CUSDT / 1000000" | bc 2>/dev/null || echo "0")
|
||
|
|
RECIPIENT_CUSDC_DISPLAY=$(echo "scale=2; $RECIPIENT_CUSDC / 1000000" | bc 2>/dev/null || echo "0")
|
||
|
|
|
||
|
|
echo " Recipient cUSDT Balance: $RECIPIENT_CUSDT_DISPLAY tokens"
|
||
|
|
echo " Recipient cUSDC Balance: $RECIPIENT_CUSDC_DISPLAY tokens"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
echo -e "${GREEN}╔══════════════════════════════════════════════════════════════╗${NC}"
|
||
|
|
echo -e "${GREEN}║ Transfers Complete! ║${NC}"
|
||
|
|
echo -e "${GREEN}╚══════════════════════════════════════════════════════════════╝${NC}"
|