from chipi_sdk import (
GetTokenBalanceParams,
GetWalletParams,
TransferParams,
WalletData,
ChainToken,
Chain,
)
def transfer_with_balance_check(
user_id: str,
recipient: str,
amount: str,
pin: str,
):
"""Transfer USDC after verifying sufficient balance."""
# Get wallet
wallet_response = sdk.get_wallet(
params=GetWalletParams(external_user_id=user_id)
)
if not wallet_response:
raise ValueError(f"Wallet not found for user: {user_id}")
# Check balance
balance = sdk.get_token_balance(
params=GetTokenBalanceParams(
chain_token=ChainToken.USDC,
chain=Chain.STARKNET,
wallet_public_key=wallet_response.public_key,
)
)
from decimal import Decimal
if Decimal(balance.balance) < Decimal(amount):
raise ValueError(
f"Insufficient balance: {balance.balance} USDC available, "
f"{amount} USDC required"
)
# Execute transfer
tx_hash = sdk.transfer(
params=TransferParams(
encrypt_key=pin,
wallet=WalletData(
public_key=wallet_response.public_key,
encrypted_private_key=wallet_response.encrypted_private_key,
),
token=ChainToken.USDC,
recipient=recipient,
amount=amount,
)
)
print(f"Transfer successful: {tx_hash}")
return tx_hash
# Usage
tx = transfer_with_balance_check(
user_id="user-123",
recipient="0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
amount="25.0",
pin="secure-pin-1234",
)