aere-contracts/contracts/stablecoins/USDCe.sol
Aere Network a13a649b77
Some checks are pending
contracts-ci / Install (lockfile) → compile → full test suite (push) Waiting to run
contracts-ci / PQC known-answer tests (NIST vectors) (push) Waiting to run
contracts-ci / Coverage (scoped, with artifacts) (push) Waiting to run
Initial public release
Aere Network public source. Everything here can be checked against the live
chain (chain id 2800, https://rpc.aere.network).

Scope note, stated up front rather than buried: consensus on chain 2800 is
classical secp256k1 ECDSA QBFT. The post-quantum work in this repository is at
the signature, precompile, account and transport layers. Nothing here makes the
consensus post-quantum, and no document in it should be read as claiming so.
2026-07-20 01:02:37 +03:00

73 lines
2.9 KiB
Solidity

// SPDX-License-Identifier: MIT
pragma solidity 0.8.23;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
/**
* @title USDC.e — Bridged USDC on AERE Network (Phase 1, Hyperlane Warp Route)
* @notice ERC-20 wrapper representing locked USDC on Ethereum mainnet,
* minted on AERE Chain ID 2800 by AereHypERC20Synthetic when a
* Hyperlane Warp Route deposit message arrives. Burned when a user
* withdraws back to mainnet.
*
* @dev PHASE 1 design intentionally:
* - Uses a clean OpenZeppelin ERC-20 implementation (NOT the
* Circle FiatToken vendored bytecode). This is the
* independent "bridged" form; Circle's USDC native on-AERE
* graduation requires the Circle Blockchain Due Diligence
* Process (estimated 18-24 months) and a bytecode-identical
* FiatTokenV2_2 re-deploy.
* - Mint and burn are restricted to the canonical
* AereHypERC20Synthetic contract on AERE (set immutably at
* deploy). The synthetic is the *only* bridge endpoint that
* can produce or destroy USDC.e — no admin can mint.
*
* Compatibility:
* - 6 decimals to match Circle native USDC (not the 18 default).
* - Standard transfer / approve / transferFrom.
* - No blacklist / pauser surfaces in this Phase 1 version. The
* Foundation publishes a clear "USDC.e is bridged, not native
* Circle USDC" disclosure on the /cross-chain page.
*
* Reserve attestation:
* - Locked Ethereum-side USDC backing USDC.e supply is
* verifiable on-chain: the AereHypERC20Collateral on mainnet
* holds exactly totalSupply * 1e-12 units of native USDC (the
* decimal-mismatch divisor). A nightly snapshot is committed
* by AereNavOracle (Q3 2026 ship).
*/
contract USDCe is ERC20 {
/// @notice The one and only contract that can mint or burn USDC.e.
address public immutable BRIDGE;
error OnlyBridge();
modifier onlyBridge() {
if (msg.sender != BRIDGE) revert OnlyBridge();
_;
}
constructor(address bridge) ERC20("Bridged USD Coin", "USDC.e") {
require(bridge != address(0), "USDCe: zero bridge");
BRIDGE = bridge;
}
/// @notice Match Circle USDC's 6 decimals (not OZ default 18).
function decimals() public pure override returns (uint8) {
return 6;
}
/// @notice Mint by the bridge when a Hyperlane Warp Route message
/// arrives confirming a corresponding deposit on Ethereum.
function mint(address to, uint256 amount) external onlyBridge {
_mint(to, amount);
}
/// @notice Burn by the bridge when a user requests withdrawal back to
/// Ethereum.
function burnFrom(address from, uint256 amount) external onlyBridge {
_burn(from, amount);
}
}