AscntDocs
Security

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.

ContractAddress
AscntGovernance — the root of trust0x7a669Dc45A5720074B140754254AFd308B638341
HookFactory0xE8Da4C784F7D32a1007147756D91888861eA133A
SimHook v1.0.1 — the pricing hook0xbf9828455cdc5F02771536e3EcB3c0F931EABEC4
TimelockController — 7-day delay0xc6D4C3E813F2BD4E4281DD490aC8bA112F00E330
Ascnt Safe — governance owner, 3-of-40x63D0D9Be7c5796293f4235c7D023B29C7681f280
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.

PoolTick spacingPool ID
ETH / USDC100x8ddfe6af731ed0ce87f0d1e5d2d0af2d47eb4b80b8ad602c9c633ee20baeccc1
WBTC / USDC100xeda64c1332b089defa6377b4767dc6a05e6d812f279dc2ddb5ef945abc63305e
ETH / PAXG100x18174c009d9ba76575ef972ad8f8a3afaa2c62599fb5d9b7084bdd777b372b44
WBTC / PAXG100x587465173993dc485dbfae3997dcddcc87809d860be5b61959081881bd57c27e
ETH / MORPHO100xbd8f2793f58e119a02add141e4823e184c84c87834baf9a6a22f2aaf49dc265b
SPCXx / USDC100x527e4a83d6c7e05f65d04c0dec46de20eec3a8f2c450ed7ec73ead33701e5ba7
USDC / SPCXon100xe858f323bd0ab893250340dfd7fd5d7c800ec8f4d8c5dc08c36a67ec9b43391a
USDC / USDT10x8f96cfd95ed21e53f32673bf50a9361cb25ae47720bc45ac1324ad7d20903ce6
EURC / ZCHF10x881a6b7ab24c9daf24cc1ce005b8853bbd97d467ac1929837862cc2903b9dcc5
PAXG / XAUT10xa1f70135382dc1e9abcfb33f197de7ec4f0a88426c84fb6b6f02e8abdb719d27

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/GBgiXocG8wbK89EwemUN37Ah7sqDwVUDwmXhi48AFJPL

Entities: 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 paused

The 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.

On this page