Specie
Arc Testnet
Protocol

How a swap settles

One transaction, four actions, nothing held in between. This page is the whole path from a typed amount to a settled trade, including every point where Specie refuses.

1. The quote is a contract read

There is no hosted router for this chain, so a price is never taken from an API. For each pair Specie finds the v4 pools that exist, drops the ones with no liquidity, asks the Quoter what your exact amount returns, and keeps the best answer. A two hop route through USDC is priced alongside the direct one and wins if it returns more.

Pools that are initialised but empty are the trap on a young chain. They quote without reverting and hand back a fraction of the fair amount, so every quote is measured against the pool's own mid, taken by pricing one unit in the same direction.

2. Price impact, measured against the pool

Nothing outside Arc quotes EURC or USYC, so there is no venue price to compare against and Specie does not invent one. The reference is the pool itself, and the panel shows how far your size lands under that mid. The API returns this as lossPercent with reference: "pool-mid".

Hard refusal at 3%. An order that would land more than 3% under the pool's own mid is refused before any signature, on both endpoints. An almost empty pool returns near nothing and is refused with that said plainly rather than quoted.

3. Approvals, and why a buy needs them too

On most chains a buy spends the native coin and needs no approval. On Arc the quote asset is USDC as an ERC-20, so both directions spend a token and both may need up to two approvals:

  1. ERC-20 to Permit2. One approval of the token for the Permit2 contract.
  2. Permit2 to the router. An allowance the Universal Router can spend, which expires in 30 days rather than living forever.

Each approval is its own signature, and the panel says how many are needed before you start. Existing allowances are read first, so an approval is only asked for when it is missing.

4. The rehearsal

Before the wallet is offered anything, the exact transaction is simulated from your own address at the head block through eth_simulateV1, with your real balance and no state overrides. The simulation brackets the swap with balance reads, so the answer carries what you would actually receive, what the fee would actually take, and the gas it used.

If the simulation does not come back clean, the button stays off and the reason is printed in plain language. A node that is merely rate limiting is retried rather than treated as a refusal.

5. One transaction, four actions

The swap is encoded by hand for the Universal Router as a single v4 command carrying four actions in order:

SWAP_EXACT_IN_SINGLE   swap your amount in the chosen pool
SETTLE_ALL             pay the pool exactly what you said you would spend
TAKE_PORTION           0.25% of the output to the Specie fee address
TAKE_ALL               the remainder to you, reverting below your minimum

A multi hop route uses SWAP_EXACT_IN with the path instead of the single pool action. The deadline is ten minutes from the moment the calldata is built. Because the fee is an action inside the same transaction, it cannot be skipped, doubled or promised for later.

6. Two minimums

Slippage produces two numbers. The gross minimum is what the pool must return before the fee is taken, and it guards the swap action. The net minimum is what must land in your wallet after the fee, and it guards TAKE_ALL. The panel shows the net one, because that is the number you actually receive.

Where Specie refuses

CheckWhat happens
Uniswap not found at the configured addresses503, the panel says swaps are not open and the amount field is disabled
No pool with liquidity for the pairroutable: false with the reason
Fill more than 3% under the pool midsafe: false, no calldata is returned
Balance below the amountRefused with your actual balance named
Simulation revertsButton stays off, revert translated into a sentence
Pool moved past your slippageThe transaction reverts onchain instead of filling worse

Routing on Arc Testnet is not open yet, so the first row is the state you will meet today. Everything above it is what runs the moment the contracts are there.