ekx-circle-usdclisted
Install: claude install-skill Ekinoxis-evm/claude-skills
# Circle / USDC
**USDC is the Ekinoxis unit of account onchain.** Auctions settle in it, staking pools
hold it, rentals are paid in it, lending pools lend it.
Note: there is **no Circle npm package anywhere in the portfolio**. We integrate USDC
as a plain ERC-20 at known addresses, and use Circle only for the testnet faucet and
(where relevant) CCTP. That is the right default — the Circle Web3 Services SDK is for
custodial wallets, which is Privy/CDP's job here.
Docs: https://developers.circle.com/stablecoins
---
## Rule one: 6 decimals
```
1 USDC = 1_000_000 units (1e6)
```
Not 1e18. This is the most expensive mistake available in our codebase, because
`parseEther("100")` on USDC does not error — it produces a number 12 orders of
magnitude too large, which either reverts on balance (best case) or, in a contract
that trusts its input, moves the wrong amount.
```ts
parseUnits("100", 6) // ✅ 100000000n
parseEther("100") // ❌ 100000000000000000000n
formatUnits(bal, 6) // ✅ display
```
In Solidity: `uint256 constant ONE_USDC = 1e6;` — and never assume `1 ether`.
In tests: `deal(USDC, alice, 1_000e6)`.
---
## Addresses
| Network | USDC address |
|---|---|
| Base mainnet | `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` |
| Base Sepolia | `0x036CbD53842c5426634e7929541eC2318f3dcF7e` |
| Ethereum Sepolia | `0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238` |
| Tempo — pathUSDC | `0x20c0000000000000000000000000000000000000` |
Canonical list: https://developer