> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xenarch.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Contract Reference

> XenarchSplitter Solidity interface — functions, events, and constants for the non-custodial x402 USDC payment splitter contract on Base L2.

## Constructor

```solidity theme={null}
constructor(address _usdc, address _treasury)
```

| Parameter | Description |
| - | - |
| `_usdc` | USDC token address |
| `_treasury` | Treasury wallet for fee collection |

Sets `owner` to `msg.sender`. Fee starts at 0%.

## Functions

### split

```solidity theme={null}
function split(address collector, uint256 amount) external
```

Split a USDC payment between the publisher (`collector`) and treasury.

| Parameter | Type | Description |
| - | - | - |
| `collector` | address | Publisher's wallet address |
| `amount` | uint256 | USDC amount in satoshis (6 decimals) |

**Requirements:**

* Not paused
* `amount` between 1 and 1,000,000 (inclusive)
* Caller has approved sufficient USDC on the splitter

**Behavior:**

* Transfers `amount - fee` to `collector`
* Transfers `fee` to treasury (if fee > 0)
* Emits `Split` event

### setFee

```solidity theme={null}
function setFee(uint256 _newFeeBps) external
```

Update the fee in basis points. Owner only.

| Parameter | Type | Description |
| - | - | - |
| `_newFeeBps` | uint256 | New fee in basis points (max 99) |

### setTreasury

```solidity theme={null}
function setTreasury(address _newTreasury) external
```

Update the treasury address. Owner only.

### setPaused

```solidity theme={null}
function setPaused(bool _paused) external
```

Pause or unpause the contract. Owner only.

## Events

### Split

```solidity theme={null}
event Split(
    address indexed payer,
    address indexed collector,
    uint256 amount,
    uint256 fee
)
```

Emitted on every successful `split()` call.

| Field | Description |
| - | - |
| `payer` | Agent wallet that sent the payment |
| `collector` | Publisher wallet that received the payment |
| `amount` | Gross USDC amount (satoshis) |
| `fee` | Fee deducted (satoshis) |

## Constants

```solidity theme={null}
uint256 public constant MAX_FEE_BPS = 99;  // 0.99% — immutable
```

## State variables

| Variable | Type | Description |
| - | - | - |
| `owner` | address | Contract owner |
| `treasury` | address | Fee collection wallet |
| `usdc` | IERC20 (immutable) | USDC token |
| `paused` | bool | Pause flag |
| `feeBps` | uint256 | Current fee in basis points |

## ABI (human-readable)

```typescript theme={null}
const SPLITTER_ABI = [
  "function split(address collector, uint256 amount) external",
  "function setFee(uint256 _newFeeBps) external",
  "function setTreasury(address _newTreasury) external",
  "function setPaused(bool _paused) external",
  "function owner() view returns (address)",
  "function treasury() view returns (address)",
  "function feeBps() view returns (uint256)",
  "function paused() view returns (bool)",
  "function MAX_FEE_BPS() view returns (uint256)",
  "event Split(address indexed payer, address indexed collector, uint256 amount, uint256 fee)",
];
```

## Fee calculation

```
fee = (amount * feeBps) / 10_000
net = amount - fee
```

**Examples** (at 99 bps / 0.99%):

| Amount (USD) | USDC units | Fee | Net |
| - | - | - | - |
| \$0.003 | 3,000 | 29 | 2,971 |
| \$0.01 | 10,000 | 99 | 9,901 |
| \$0.10 | 100,000 | 990 | 99,010 |
| \$1.00 | 1,000,000 | 9,900 | 990,100 |

At the current fee of 0%, all amounts go directly to the publisher.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.