The USDC contract enforces blocklist restrictions at runtime. The Memo and
Multicall3From contracts route transactions while preserving the original
msg.sender through the CallFrom precompile; your monitoring must attribute
these to the original sender. Subscribe to Blocklisted and UnBlocklisted
events to maintain a local copy of the blocklist.
Prerequisites
Before you begin:
- Access to an Arc RPC endpoint (
https://rpc.testnet.arc.io) or WebSocket
(wss://rpc.testnet.arc.io)
- Familiarity with Ethereum event log filtering and transaction tracing
- A local database or cache for storing blocklisted addresses
- Understanding of your regulatory obligations (AML/CFT screening requirements)
Contracts and addresses
Steps
Step 1. Understand blocklist enforcement
Arc enforces the USDC blocklist across multiple stages of the transaction
lifecycle:
Step 2. Monitor blocklist events
Subscribe to the Blocklisted and UnBlocklisted events on the USDC contract
to maintain a real-time view of restricted addresses.
Build transfer history from the system emitter
(0xffffFFFfFFffffffffffffffFfFFFfffFFFfFFfE), not the ERC-20 contract
(0x3600000000000000000000000000000000000000). Native USDC transfers emit no
log at the ERC-20 address, so filtering on the ERC-20 address alone misses
them. An ERC-20 transfer() emits from both addresses, so filtering on both
double-counts every ERC-20 transfer.
Step 3. Include Memo and Multicall3From in your monitoring scope
The Memo and Multicall3From contracts use the CallFrom precompile to execute
calls on behalf of the original sender. The blocklist is still enforced (the
CallFrom precompile checks the original sender’s blocklist status), but
compliance monitors must attribute activity correctly.
If you only monitor direct from addresses in transaction receipts, you will
miss the true sender for transactions routed through Memo or Multicall3From.
You must inspect calls to these contracts and attribute them to the original
msg.sender.
Step 4. Build a transaction decision tree
Use the following logic to determine whether a transaction involves a
blocklisted address:
Step 5. Integrate compliance vendor APIs
Connect your monitoring pipeline to Elliptic or TRM Labs for automated risk
scoring and sanctions screening. These vendors provide Arc-compatible APIs for
real-time transaction analysis.
For vendor-specific integration details, see
Compliance vendors.
When your own system submits a USDC transfer, also check receipt.status after
it confirms. A blocklist revert is onchain: the transaction is included and gas
is consumed, but state rolls back. Monitoring Blocklisted events won’t catch
reverts that already occurred; receipt.status === 0 is the authoritative
signal.
See also