Deployments
Async Swap v1.3.0 is deployed on Unichain Sepolia and Robinhood Chain testnet, with the bounded tick bitmap and funded priority-fee top-ups. No mainnet deployment is included. The current testnet addresses and hook start blocks below match the per-chain deployment registries.
Contracts
How to read the table:
AsyncSwap,Router,FeeVaultare the protocol. The hook address is mined per chain for its Uniswap v4 permission bits, so it differs by chain, andFeeVaultis created by the hook's constructor. Router addresses depend on the deployer nonce on each chain.AsyncMatching,TickPrice,DynamicFeeOrdering,TickBitmap,EligiblePrice, andPriorityFeeUpdatesare linked libraries, created through the deterministic CREATE2 deployer (0x4e59b44847b379578588920cA78FbF26c0B4956C) with fixed salts. Identical bytecode gets the same address on every chain.- Pool parameters are fixed at deployment. No setter changes them and anyone can open a pool. On
these two hooks
minOrderis 0 (no dollar minimum) andassetPrecisionis 4: an order's asset side must be at least 0.0001 of a whole token, or 10^(decimals - 4) base units. The optional priority bid's minimum is capped at $0.10, derived from the numeraire's decimals. Routers batch calls withmulticall. WithdrawalRouterentries in the registries are not for these hooks. They were deployed for earlier hooks and are kept as a record. Cancels and claims go through theRouterabove.- PoolManager is the Uniswap v4 singleton the hook is attached to. Both testnets use existing instances.
- Numeraire is the stablecoin every pool is priced in.
- Hook start block is where an indexer should start reading the hook's events.
The per-chain registries in deployments/ are the source of truth: each
deployments/<chainId>/<chainId>.json holds every address with its deployment transaction and start
block. The docs site serves all of them, with each chain's name, explorer and numeraire, as one file
at /deployments.json.
v1.3.0 release and previous orders
The protocol source is frozen at c9372ff9577ba3950fa321090a7bfb559fc964a4.
The deployer and hook owner on both testnets is 0x33ce69DA05c3ad30A3b525625F950fAda8673205 (new-deployer).
The registries advertise features.priorityFeeTopUps: true only for these new hooks and Routers.
Orders and pools are tied to their hook address. Existing orders remain on the previous deployment and must be cancelled, filled or claimed through its original Router. They are not migrated to the new book. The complete previous records are preserved in Unichain Sepolia and Robinhood testnet. Clients and indexers must retain those addresses while adding the new deployment; publishing this registry alone does not update a running frontend or indexer.
The live create → top-up → cancel sequence passed on both networks. All nine release modules per chain have exact source matches on Sourcify. See release validation for receipts, measured gas and verification links.
Network notes
| Network | Chain ID | Gas token | Notes |
|---|---|---|---|
| Unichain Sepolia | 1301 | ETH | Uniswap's PoolManager. |
| Robinhood Chain testnet | 46630 | ETH | No Circle USDC; the numeraire is Paxos USDG (6 decimals) from faucet.paxos.com. An Arbitrum chain: block.number inside contracts is the L1 block, so start blocks come from receipts. |
Deploying
script/deploy.sh <chain-key> [dry-run|broadcast|verify] deploys the libraries (when missing), the
hook and the Router, then writes the registry. Each network has a wrapper:
deploy-unichain-sepolia.sh and deploy-robinhood-testnet.sh. Chain addresses come from
script/config/chains.json; RPCs and the keystore account come from
.env.deploy (see .env.deploy.example).
Fund the deployer with the network's gas token first.
Set DEPLOYER_ACCOUNT=new-deployer and its public address as DEPLOY_OWNER in the local .env.deploy. With that keystore enrolled in Olive, one Touch ID authorization lets Foundry sign the commands in the wrapper:
olive exec new-deployer -- script/deploy-robinhood-testnet.sh broadcastverify submits every registry
entry to Sourcify, then to the chain's Blockscout explorer when there is one, and writes standard
JSON inputs to deployments/<chainId>/verify/ for manual upload.