Pesarc settles on Arc, where USDC is the native gas token (predeploy
0x3600000000000000000000000000000000000000). A corridor is a USDC ↔ cXXX
pair priced by one shared oracle and netted by one shared matcher, so the only
per-corridor contract is the local stablecoin.Networks
Deployer / treasury (owner of the oracle and markets):
0xd4418f403F86De7DB7D1885d83A6d9A5bBf701F1.
Arc mainnet (chain 5042)
Core contracts, live since 2026-09-27.Corridor stablecoins (Arc mainnet)
Each corridor isUSDC → cXXX, priced by the RealizedRateOracle above and settled
by the IntentMatcher.
Arc testnet (chain 5042002)
Its own deployment (chain5042002). Use the
testnet explorer and https://rpc.testnet.arc.io.
USDC is the native gas predeploy 0x3600000000000000000000000000000000000000,
same as mainnet.
Arc testnet (
5042002) does not qualify for the grant; it exists so integrators
can test the full flow before touching mainnet. Corridor rates (USD to
NGN/GHS/KES) are seeded, so quotes and settlement work immediately.On-chain Earn — CorridorVault
Earn is a real on-chain ERC-4626 vault. You deposit USDC and receive shares; the protocol’s solver puts the idle inventory to work as settlement liquidity (earning the FX spread) and, on chains with Aave/Morpho/DEXes, through yield strategy adapters. The vault keeps a 10% performance fee on net new profit (a high-water mark), and withdrawals draw on the idle balance. Frontend stays a one-tap “deposit / earn”; this is the LP underneath.Strategy adapters (Earn markets)
The vault puts its deployable idle to work across markets — strategy adapters that all implement oneIStrategyAdapter interface (asset / totalAssets / deposit / withdraw). The vault keeps a withdrawal buffer idle (maxDeployBps,
default 20%), the operator allocates the rest, and totalAssets on each adapter
reports accrued yield so the performance fee is crystallized correctly.
Deploy and register a market in one tx (the broadcaster must be the vault
owner; the adapter auto-selects by chain/env):
ReserveStrategy is registered on the testnet vault
(0x13885D…). Allocation is event-driven — a deposit triggers the operator to
put the new idle to work (/api/earn/allocate, debounced), no cron.
Pool liquidity (the Goldgard v4 hook pool) is intentionally not an Earn
market: it would add local-currency exposure and impermanent loss. The vault
earns the hook’s yield through its ERC-4626 SafetyModule instead, staying
USDC-denominated and withdraw-anytime. Audit before mainnet.
Goldgard v4 hook — deploy anywhere
The corridor swap engine is a Uniswap v4 hook (dynamic fee + oracle-priced FX, with a SafetyModule backstop). The full hook stack and its deploy script live in this repo atpesarc/contracts under evm/
(src/liquidity/GoldgardHook.sol, script/DeployGoldgard.s.sol). It is pluggable
on any EVM chain: DeployGoldgard reuses the chain’s canonical Uniswap v4
PoolManager when you pass one, and stands up its own otherwise — so it runs even
where canonical v4 isn’t deployed (e.g. Arc). It mines the hook’s flag-encoded
address (CREATE2), wires the oracle / safety / hedge / rewards, and initializes the
USDC/local pool.
USDC_ADDRESS=0x3600000000000000000000000000000000000000,
LST_ADDRESS=0xE76E4f347667d973a1B968733bE41738f2AE202C (cNGN). The printed
safetyModule address is what you register as an Earn market (VAULT_ERC4626).
Live on Arc testnet (its own PoolManager, since Arc has no canonical v4):
The hook address ends in
…05c4, encoding its Uniswap v4 permission flags (mined
via CREATE2). The price feed is a placeholder aggregator the owner can repoint.
Other testnets (full stack)
Pesarc’s contracts are chain-agnostic, so the whole settlement stack (oracle, matcher, prediction market and the cNGN/cGHS/cKES corridor stablecoins) is deployed on these testnets too, each with corridor rates seeded. The USD leg is Circle’s testnet USDC on that chain.Arbitrum Sepolia (chain 421614)
Base Sepolia (chain 84532)
Together with Arc testnet above, these give three fully wired testnets you
can switch between in the app. Solana runs the same corridors on devnet.
Cross-chain moves (Hyperbridge)
USDC moves across chains over Circle CCTP, including to and from Arc. The other coins we support ride Hyperbridge, a general cross-chain messaging protocol, across the EVM chains it supports (Arc is not one of them, so Arc value stays on CCTP). Each coin is its own cross-chain token: aWrappedHyperFungibleToken locks
the coin on its home chain and a HyperFungibleToken mints and burns it on each
remote chain, peered to the home contract.
First testnet proof deployment (Base Sepolia to Arbitrum Sepolia), a wrapped test
naira (tcNGN):
Shared Hyperbridge protocol contracts (identical on both testnets):
This is the first live cross-chain pair, proving the Hyperbridge rail end to end
on testnet. The per-coin rollout (cNGN, cKES, cGHS, cZAR, cEGP) and the in-app
move follow. USDC keeps using Circle CCTP, which is also how value reaches Arc.
Solana (devnet)
Pesarc’s Solana side is the spoke in the hub-and-spoke model: a user burns native USDC on Solana over Circle CCTP V2, and the transfer lands on the Arbitrum hub. The native SVM programs are live on devnet (same deployer authority):Solana runs on devnet today: a real, non-custodial flow that settles into the
Arbitrum Sepolia hub. Mainnet Solana is gated on deploying the Pesarc hub to
Arbitrum mainnet first (a spoke can only route to a hub that exists).
Verifying a settlement
- Read a quote from the oracle:
RealizedRateOracle.consult(tokenIn, tokenOut, window)returns the realized rate,hasData(tokenIn, tokenOut)whether a corridor is seeded. - Follow a P2P match on the IntentMatcher; the USDC leg only ever bridges the net imbalance, which is what keeps settlement cheap as volume grows.
- Every user action is gasless via the VerifyingPaymaster, so recipients receive the full local-currency amount quoted before send.