Smart contracts
Deployed contracts, source code, the subgraph, and how to verify a hook is genuine.
Ascnt's reviewed release is three on-chain contracts — a governance registry (AscntGovernance), a CREATE2 factory (HookFactory), and the pricing hook (SimHook) — deployed on Ethereum mainnet. Source code, review reports and technical documentation live in the public repository: github.com/ascntlabs/v1-core. The hook and its fee libraries are source-available under BUSL-1.1, converting to GPL on 5 September 2028; governance, factory and tests are MIT.
Ethereum mainnet
The protocol was deployed on 5 September 2026 and the v1.0.1 hook, which caps any pool's fee at 50%, on 9 September. Every contract is source-verified on Etherscan.
| Contract | Address |
|---|---|
AscntGovernance — the root of trust | 0x7a669Dc45A5720074B140754254AFd308B638341 |
HookFactory | 0xE8Da4C784F7D32a1007147756D91888861eA133A |
SimHook v1.0.1 — the pricing hook | 0xbf9828455cdc5F02771536e3EcB3c0F931EABEC4 |
TimelockController — 7-day delay | 0xc6D4C3E813F2BD4E4281DD490aC8bA112F00E330 |
| Ascnt Safe — governance owner, 3-of-4 | 0x63D0D9Be7c5796293f4235c7D023B29C7681f280 |
Uniswap v4 PoolManager (external) | 0x000000000004444c5dc75cB358380D2e3dE08A90 |
Uniswap v4 PositionManager (external) | 0xbD216513d74C8cf14cf4747E6AaA6420FF64ee9e |
The first factory hook, SimHook v1.0.0 at 0xFEa4…bec4, was deprecated on 9 September 2026. Its pools stay open for withdrawals and take no new deposits.
Pools
Every pool runs with the dynamic-fee flag, a two-block JIT lock, and fee parameters fixed at launch. Volatile pairs use tick spacing 10; pegged pairs use tick spacing 1.
| Pool | Tick spacing | Pool ID |
|---|---|---|
| ETH / USDC | 10 | 0x8ddfe6af731ed0ce87f0d1e5d2d0af2d47eb4b80b8ad602c9c633ee20baeccc1 |
| WBTC / USDC | 10 | 0xeda64c1332b089defa6377b4767dc6a05e6d812f279dc2ddb5ef945abc63305e |
| ETH / PAXG | 10 | 0x18174c009d9ba76575ef972ad8f8a3afaa2c62599fb5d9b7084bdd777b372b44 |
| WBTC / PAXG | 10 | 0x587465173993dc485dbfae3997dcddcc87809d860be5b61959081881bd57c27e |
| ETH / MORPHO | 10 | 0xbd8f2793f58e119a02add141e4823e184c84c87834baf9a6a22f2aaf49dc265b |
| SPCXx / USDC | 10 | 0x527e4a83d6c7e05f65d04c0dec46de20eec3a8f2c450ed7ec73ead33701e5ba7 |
| USDC / SPCXon | 10 | 0xe858f323bd0ab893250340dfd7fd5d7c800ec8f4d8c5dc08c36a67ec9b43391a |
| USDC / USDT | 1 | 0x8f96cfd95ed21e53f32673bf50a9361cb25ae47720bc45ac1324ad7d20903ce6 |
| EURC / ZCHF | 1 | 0x881a6b7ab24c9daf24cc1ce005b8853bbd97d467ac1929837862cc2903b9dcc5 |
| PAXG / XAUT | 1 | 0xa1f70135382dc1e9abcfb33f197de7ec4f0a88426c84fb6b6f02e8abdb719d27 |
The full deployment record, with transaction hashes and launch parameters, is in the repository.
SimHook inherits the abstract AscntBaseHook (authority gates, the protocol-fee take, pause and JIT hooks) — it isn't deployed separately. The internal libraries (swap simulation, fee math, safe casting) are inlined into the hook bytecode, so they have no standalone address.
Subgraph
The Ascnt subgraph indexes every pool, its config, and per-swap state. It is published on The Graph's decentralized network (view in the explorer); query it through the gateway with a free API key from The Graph Studio:
https://gateway.thegraph.com/api/{api-key}/subgraphs/id/GBgiXocG8wbK89EwemUN37Ah7sqDwVUDwmXhi48AFJPLEntities: Pool (identifiers, immutable config, live state), Hook (deprecation and pause flags), Swap (per-swap hook telemetry), ModifyLiquidity, plus hourly/daily aggregates. See Targeting Ascnt Pools for the field list and a sample query.
The root of trust
The one address to know is the canonical AscntGovernance registry in the table above. Everything else is read from it — never the other way round, since any hook can claim whatever pointers it likes:
AscntGovernance gov = AscntGovernance(0x7a669Dc45A5720074B140754254AFd308B638341);
gov.hookFactory(); // the CREATE2 HookFactory
gov.owner(); gov.timelock(); gov.pauser(); gov.poolDeployer();
gov.protocolFeeBps(); gov.treasury(); gov.addLiquidityPaused();Verifying a hook
Before pointing real funds at a hook, confirm from the root that it's genuine:
gov.isCanonicalHook(hook); // true — deployed by the protocol through its factory
gov.isCanonicalHookDeprecated(hook); // false — not superseded / sunset
gov.isAddLiquidityBlocked(hook); // false — deposits not pausedThe hook's own isVerified(), isDeprecated() and governance() views are self-attestations that an impostor contract could hardcode — they only mean something once hook.governance() has been checked against the canonical address. Deprecation is an advisory retirement signal; it doesn't revoke provenance or stop a pool.