Funding with USDC

Funding with USDC

SPL Token transfers, testnet faucets, and dynamic top-up routing.

Runtime

Nomiqon wallets hold USDC on Solana — specifically the canonical USDC SPL Token issued by Circle. The mint address is EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v on mainnet-beta.

Mainnet transfer via CLI

bashnomiqon.com
# Using the Solana CLI
sh -c "$(curl -sSfL https://release.solana.com/stable/install)"

spl-token transfer \
  --url https://api.mainnet-beta.solana.com \
  EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v \
  50 \
  <AGENT_WALLET_ADDRESS> \
  --owner <YOUR_KEYPAIR_PATH> \
  --fee-payer <YOUR_KEYPAIR_PATH>

Mainnet transfer programmatically

typescriptnomiqon.com
import {
  Connection, Keypair, PublicKey, Transaction,
  sendAndConfirmTransaction,
} from "@solana/web3.js";
import {
  getOrCreateAssociatedTokenAccount,
  createTransferInstruction,
} from "@solana/spl-token";
import { bs58 } from "@project-serum/anchor/dist/cjs/utils/bytes";

const USDC_MINT = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const connection = new Connection("https://api.mainnet-beta.solana.com", "confirmed");
const payer      = Keypair.fromSecretKey(bs58.decode(process.env.PAYER_SECRET_KEY!));

async function fundAgentWallet(agentWalletAddress: string, amountUsdc: number) {
  const destination = new PublicKey(agentWalletAddress);
  const sourceAta      = await getOrCreateAssociatedTokenAccount(connection, payer, USDC_MINT, payer.publicKey);
  const destinationAta = await getOrCreateAssociatedTokenAccount(connection, payer, USDC_MINT, destination);
  const amount = BigInt(Math.round(amountUsdc * 1_000_000));
  const tx = await sendAndConfirmTransaction(connection, new Transaction().add(
    createTransferInstruction(sourceAta.address, destinationAta.address, payer.publicKey, amount)
  ), [payer]);
  console.log("Funded:", tx);
}

await fundAgentWallet("6Tzt5ND...VovJn", 25.00);

Devnet faucet (testing)

bashnomiqon.com
# Switch to devnet
solana config set --url devnet
solana airdrop 2 <AGENT_WALLET_ADDRESS>
spl-token mint 4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU 100

Dynamic top-up routing

Nomiqon fires a wallet.low_balance webhook when an agent wallet drops below 10% of its daily cap. Your backend can automatically top up from a treasury account:

typescriptnomiqon.com
// In your webhook handler (e.g. /api/webhooks/nomiqon)
app.post("/api/webhooks/nomiqon", async (req, res) => {
  const event = nomiqon.webhooks.verify(req.body, req.headers["nomiqon-signature"]);

  if (event.type === "wallet.low_balance") {
    const { agentId, walletAddress, balance } = event.data;
    await fundAgentWallet(walletAddress, 10.00);
    console.log(`Topped up ${agentId}: new balance ~${balance} + 10 USDC`);
  }

  res.json({ received: true });
});
Funding with USDC — Nomiqon Docs