Router and market
How QSHIELD trades, and how the router joins the market to the vault in a single transaction.
The token's market
QSHIELD was launched on the Pons V2 launchpad on Robinhood Chain. It started on a Pons bonding curve and graduated into a Uniswap v4 pool:
| Pair | ETH / QSHIELD |
| Pool manager | 0x8366a39CC670B4001A1121B8F6A443A643e40951 |
| Hook | 0xE5e702641Ea86F4ae6cC3cDaeD2B886f976Be044 |
| Tick spacing | 200 |
| Pool ID | 0x26c3c299984290f723be509c4b4d8359248aeb6b62f52ca1c214ad4037c5a3f6 |
The token is a standard ERC-20: it can be held, transferred and traded by anything that supports ERC-20s.
QuantumRouter
The router is the bridge between the market and the vault. It holds no funds between transactions.
Buy into an account
function buy(bytes32 account, uint256 minTokensOut) external payable returns (uint256 tokensOut);Swaps msg.value ETH for the token, shields the result into account and updates the vault's price average. Reverts
with InsufficientOutput below minTokensOut.
Sell from an account
A sale is an ordinary vault operation whose exit names the router:
exitTarget = router
exitData = abi.encode(minEthOut)
recipient = the address that receives the ETHThe vault approves the router for the exit's amount and calls onShieldExit. The router pulls the tokens, sells them
and sends the ETH to recipient. Only the vault can call it.
Quote
function quote(bool isBuy, uint256 amountIn) external returns (uint256 amountOut);Returns the output of trading amountIn now, Pons fees included. On the pool it runs the real swap and reverts it, so
it is exact; call it with eth_call.
Venue-aware
PonsSwapper, which the router and the harvester share, reads the token's phase from the Pons factory and trades on
whichever venue is live. The same contracts worked on the bonding curve and work on the pool, with no migration.
Exit targets
The router is one implementation of a general interface:
interface IExitTarget {
function onShieldExit(uint256 amount, address recipient, bytes calldata data) external;
}Any contract can be the target of an exit: the owner's signature names it and its parameters. This is how a shielded balance can be routed anywhere in one operation without the tokens resting at an address in between.