Bridge USDC from any supported chain to Algorand or VOI for settlement via AlgoVoi.
Financial Services integration. Wormhole is a permissionless cross-chain messaging and token transfer protocol. This integration enables USDC held on Ethereum, Solana, Base, Polygon, or other supported chains to be bridged natively to Algorand for AlgoVoi settlement — no manual swap required.
Payer holds USDC on Ethereum / Solana / Base / Polygon (or any Wormhole chain)
↓
Wormhole NTT burns/locks USDC on source chain
↓
Wormhole guardian network produces attestation (1–5 minutes)
↓
USDC minted on Algorand (or VOI) via CCTP / NTT bridge
↓
AlgoVoi verifies on-chain receipt on Algorand / VOI
↓
Settlement complete — TX ID recorded
No CEX. No manual swap. USDC arrives natively on Algorand from any source chain.
- An active AlgoVoi tenant account
- A funded wallet on a Wormhole-supported source chain (Ethereum, Solana, Base, Polygon, Avalanche, etc.)
- An Algorand wallet opted into ASA
31566704(USDC) as the destination - Basic familiarity with cross-chain transactions
Wormhole is a permissionless open protocol — no onboarding, KYB, or approval required. Integration is developer-driven.
POST /internal/tenants/{tenant_id}/network-configs
Authorization: Bearer <admin-key>
Content-Type: application/json
{
"network": "algorand_mainnet",
"payout_address": "<your-algorand-address>",
"preferred_asset_id": "31566704",
"preferred_asset_decimals": 6
}The Algorand payout wallet must have opted into ASA
31566704before it can receive bridged USDC.
No platform-specific credentials are required for Wormhole — the bridge is on-chain. Register the integration to enable AlgoVoi to watch for bridged USDC arriving at your payout address:
POST /internal/integrations/{tenant_id}/wormhole
Authorization: Bearer <admin-key>
Content-Type: application/json
{
"credentials": {},
"shop_identifier": "<your-identifier>",
"base_currency": "USD",
"preferred_network": "algorand_mainnet"
}Use the Wormhole SDK or Portal Bridge UI to transfer USDC from the source chain to Algorand.
import { wormhole, amount } from "@wormhole-foundation/sdk";
import algorand from "@wormhole-foundation/connect-sdk-algorand";
import evm from "@wormhole-foundation/connect-sdk-evm";
const wh = await wormhole("Mainnet", [evm, algorand]);
const srcChain = wh.getChain("Ethereum");
const dstChain = wh.getChain("Algorand");
// Initiate USDC transfer: 10 USDC from Ethereum → Algorand
const xfer = await wh.tokenTransfer(
"USDC",
amount.units(amount.parse("10", 6)),
{ chain: "Ethereum", address: "<sender-evm-address>" },
{ chain: "Algorand", address: "<your-algorand-payout-address>" },
false // automatic = false (manual redeem)
);
const srcTxids = await xfer.initiateTransfer(srcSigner);
console.log("Source TX:", srcTxids);
// Wait for attestation (~13 seconds), then redeem on Algorand
await xfer.fetchAttestation(60_000);
const dstTxids = await xfer.completeTransfer(dstSigner);
console.log("Algorand TX:", dstTxids);- Go to portalbridge.com
- Select Source chain (e.g. Ethereum) and Target chain (Algorand)
- Select USDC as the token
- Paste your AlgoVoi payout address as the destination
- Confirm and sign on the source chain
- Wait for attestation, then redeem on Algorand
Once a cross-chain transfer completes:
- USDC arrives at your AlgoVoi payout address on Algorand
- AlgoVoi detects the on-chain receipt via its Algorand indexer
- Payment is confirmed and TX ID is recorded against the pending order
- Merchant is notified via configured webhook
AlgoVoi monitors for USDC transfers to registered payout addresses. The Wormhole transfer TX ID on the destination chain is used as the payment reference.
| Chain | USDC source | Bridge mechanism |
|---|---|---|
| Ethereum | Native USDC (Circle) | CCTP via Wormhole |
| Solana | Native USDC (Circle) | CCTP via Wormhole |
| Base | Native USDC (Circle) | CCTP via Wormhole |
| Polygon | Native USDC (Circle) | CCTP via Wormhole |
| Avalanche | Native USDC (Circle) | CCTP via Wormhole |
| Arbitrum | Native USDC (Circle) | CCTP via Wormhole |
| Optimism | Native USDC (Circle) | CCTP via Wormhole |
All transfers settle as native USDC (ASA 31566704) on Algorand mainnet.
| Step | Typical duration |
|---|---|
| Source chain confirmation | 12–15 seconds (EVM), ~1 second (Solana) |
| Wormhole guardian attestation | 1–5 minutes |
| Algorand destination confirmation | ~4 seconds |
| Total end-to-end | ~2–6 minutes |
| Symptom | Likely cause |
|---|---|
| Transfer stuck at attestation | Guardian network congestion — wait up to 10 minutes before retrying |
| Algorand redeem failing | Payout wallet not opted into ASA 31566704 |
| USDC not appearing in AlgoVoi | Destination address mismatch — verify the Algorand address used matches your registered payout address |
| HTTP 422 "No network config" | Network config missing for the configured preferred_network |
Confirmed end-to-end on 2026-04-14 against api1.ilovechicken.co.uk:
| Test | Network | Result |
|---|---|---|
| Webhook → checkout link | algorand_mainnet (USDC (ASA 31566704)) |
Pass |
| Webhook → checkout link | voi_mainnet (WAD (ARC200 app ID 47138068)) |
Pass |
| Webhook → checkout link | hedera_mainnet (USDC (token 0.0.456858)) |
Pass |
| Webhook → checkout link | stellar_mainnet (USDC (Circle)) |
Pass |
| Webhook → checkout link | algorand_mainnet (USDC (ASA 31566704)) | Pass |
| Network | Asset | Notes |
|---|---|---|
algorand_mainnet |
USDC (ASA 31566704) | Destination for all Wormhole transfers |
algorand_testnet |
Test USDC | Use Wormhole testnet environment for testing |
voi_mainnet |
WAD (ARC200 app ID 47138068) |