An enabled store, a tested stablecoin payment and separate automatic sweep rules for USDT and USDC.
1. Prepare your project
Start with an installed Wholly Crypto instance, a project and a store. Back up the project wallets somewhere private and off the VPS. Keep the Ethereum wallet active.
In Settings → Chain connections, check Ethereum scanner readiness and keep independent fallback providers. A healthy node alone does not prove payment-scanning support. Outages can delay detection.
2. Enable the right USDT and USDC
Open Project → Stores → select your store → Payment methods. Choose Ethereum and enable USDT and USDC from the token catalog. Check the network and contract, not just the ticker. Keep the project and store enabled.
Ethereum mainnet contracts to verify
| Token | ERC-20 contract |
|---|---|
| USDT | 0xdac17f958d2ee523a2206206994597c13d831ec7 |
| USDC | 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 |
These identify tokens. Never use a token contract as your payment or sweep destination.
This guide uses Ethereum mainnet, not Base, Arbitrum, Solana or TRON. The same token ticker on another network is a different payment method.
3. Receive a small test payment
In Project → Invoices, create a small invoice, for example 25 EUR, and open its checkout. Choose Ethereum, then USDT or USDC. Send the exact displayed token amount on Ethereum; do not assume 25 EUR means 25 tokens.
Wait for the invoice to be settled under your confirmation policy and check any review flags. In Wallets → Ethereum → Addresses, inspect the received token balance. Repeat with the other token before offering both to customers.
Wholly Crypto uses new invoice addresses. Customer funds first reach your project wallet, not your cold wallet. Sweeping is a separate outgoing transfer; it does not change whether the invoice was paid.
4. Choose your cold-wallet address
Create an Ethereum receiving account in your hardware or other offline wallet. Verify its address on the trusted device. Use an independently generated recovery phrase; never import the server wallet’s phrase into a device and assume it has become cold.
In Settings → Address book, save the public address for Ethereum and the relevant token, with a clear label. You can also enter it directly in the sweep rule. Only the public address belongs in Wholly Crypto; keep the cold wallet’s private keys and recovery words offline.
The same Ethereum address can hold both tokens if your wallet supports them. First test a small manual send from Wallets → token → Send, review the destination and costs, then approve. Verify receipt before enabling automation.
5. Keep ETH available for fees
USDT and USDC cannot pay the ordinary Ethereum gas fees in this workflow. Keep some ETH in the same project’s Ethereum wallet, for example at its primary receiving address. ETH on another chain or in another project cannot fund these sends.
Use project ETH for gas lets Wholly Crypto fund the missing native fees at eligible token-holding addresses, then sweep the tokens. Empty invoice addresses are not funded. Each underfunded source must also meet the rule’s sweep minimum.
Funding and token transfers both cost network fees. Unused ETH remains at the source addresses. Do not empty the project’s ETH wallet first; if you also sweep ETH automatically, keep an adequate native reserve.
How Ethereum gas works ↗ · Invoice addresses and wallet practice →
6. Set one rule per token
Open Project → Sweep → Automatic sweep setup. Find USDT on Ethereum and click Setup. Choose a wallet destination, not an exchange, and select your saved cold address or enter it manually. Repeat separately for USDC.
Example settings for a small test, not universal fee recommendations:
| Setting | Example and meaning |
|---|---|
| Sweep minimum | 10 USDT for the USDT rule, or 10 USDC for USDC. It triggers a sweep and also screens underfunded source addresses. |
| Keep minimum amount | 0 keeps no extra token reserve. A positive amount stays across the project wallet, not at every address. This is not the ETH gas reserve. |
| Fee priority | Medium. Review current fees before enabling the rule. |
| Use project ETH for gas | On. Open Gas fees to review this option and its budget. |
| Daily funding limit | For light usage, 1 EUR can be a starting cap if the rule uses EUR. Higher gas or more addresses may need more. |
| Maximum network fee % | Optional: wait when combined funding and transfer fees exceed your chosen percentage. Empty means no percentage limit. |
The daily limit applies per token rule over a rolling 24 hours. It caps ETH allocated to source addresses, not the whole fee bill, and is not a daily charge. Two rules have separate budgets. Check the displayed currency and current estimates.
With a 10-token minimum, an underfunded address holding 5 tokens will not receive gas, even if other addresses bring the total above 10. Choose a minimum that fits typical invoices and network costs.
Turn on Auto sweep, click Save rule and confirm the destination and limits. Opening Setup or checking the gas option alone does not enable a rule. Fresh balances and fees are checked automatically; Check gas is optional.
7. Check progress and keep it running
In Sweep → Transfer activity, follow Gas funding, confirmations and the outgoing token transfer. Open Details and its Etherscan link to verify the destination and successful execution. Idle rules do not appear as ongoing transfers. The server continues after you close the browser.
Keep the project, store, wallet and token enabled, the wallet backed up, server sending permitted and processing credits sufficient where fees apply. Low credits do not block incoming payments, but can pause sweeps.
If nothing moves
Check ETH availability, per-address minimums, retained balances, daily funding usage, current prices, scanner/provider access and Transfer preparation errors. An exhausted budget pauses new funding; it is not raised automatically.
For an unconfirmed transfer, inspect the existing Details and explorer first. Use Review speed-up fee when offered and approve the reviewed costs. Do not create a duplicate send or treat an unknown confirmation as a failed payment.