// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; /// @title ArcPay Router /// @notice Routes native USDC on Arc directly to a recipient-controlled wallet. /// @dev There is no owner, custody, withdrawal function, or mutable configuration. contract ArcPayRouter { error InvalidRecipient(); error ZeroAmount(); error TransferFailed(); event PaymentRouted( bytes32 indexed paymentId, address indexed sender, address indexed recipient, uint256 amount ); function route(bytes32 paymentId, address payable recipient) external payable { if (recipient == address(0)) revert InvalidRecipient(); if (msg.value == 0) revert ZeroAmount(); (bool sent, ) = recipient.call{value: msg.value}(""); if (!sent) revert TransferFailed(); emit PaymentRouted(paymentId, msg.sender, recipient, msg.value); } receive() external payable { revert TransferFailed(); } fallback() external payable { revert TransferFailed(); } }