Autonomous Decentralized EXchange & Token Orchestrator Launch an agent-bound ERC-20 on its own bonding curve with no liquidity deposit — gas only — on 0G, Base, Arbitrum or Monad.
A creator launches a token and it opens inside a bonding curve against a virtual reserve. There is nothing to seed, so a launch costs gas and nothing else. 100% of supply enters the curve, so the creator holds no allocation to sell. Income arrives instead as a share of every swap, taken from inside the existing fee rather than added on top of it.
The curve is the permanent venue. There is no graduation step and no migration into an external pool, which is where most launchpad exploits have historically happened. There is also no withdrawal function anywhere in the curve, so no one — including us — can drain a market.
One 0.30% swap fee, divided three ways on-chain. Traders are never charged extra to pay the creator.
| Share | Bps | Goes to |
|---|---|---|
| Depth | 0.15% | stays in the curve, raising the price floor as volume accumulates |
| Creator | 0.10% | streamed to the creator's wallet on every swap |
| Buyback | 0.05% | agent buyback vault, which burns on execution |
Three tiers are selectable at launch (0.10% / 0.30% / 0.50% total); the table shows the 0.30% standard tier. The contract derives depth as swapFeeBps − creatorShareBps − treasuryShareBps, so the three shares can never exceed the total.
graph TD
Creator([Creator]) -->|1 tx per chain, gas only| Factory[AdextoCurveFactory v0.9.0]
subgraph "Deployed atomically in that transaction"
Factory -->|deploys| Token[AdextoToken — ERC-20<br/>no owner, immutable agent address<br/>1% transfer cap for 5 blocks]
Factory -->|deploys| Curve[SovereignCurve — own AMM<br/>virtual reserve, no deposit<br/>no withdrawal function]
Factory -->|seeds 100% of supply| Curve
end
Curve -->|0.15%| Depth[Depth retained in curve]
Curve -->|0.10%| CreatorFee[Creator, every swap]
Curve -->|0.05%| Vault[Buyback vault → burn]
Agent[0G Compute agent<br/>router reports Intel TDX via dstack] -.->|bound by address at launch| Token
Edge[Cloudflare Worker x402<br/>HTTP 402 quote only] -.->|settlement NOT built| Vault
Meta[0G DA<br/>launch metadata anchored] -.->|metadataRoot in calldata| Factory
classDef live fill:#f5f3ff,stroke:#7c3aed,stroke-width:2px,color:#201810;
classDef partial fill:#fffbeb,stroke:#f59e0b,stroke-width:2px,color:#201810;
class Factory,Token,Curve,Depth,CreatorFee,Vault live;
class Agent,Edge,Meta partial;
Every address below was confirmed to hold bytecode by a direct eth_getCode call against the chain's RPC. Testnet deployments are deliberately not listed here — they belong in the operator runbook, not in the public README.
AdextoCurveFactory is the current, executable generation: it deploys the token and its curve in one transaction and needs no liquidity deposit. Its runtime bytecode is byte-identical across all four chains (18,460 bytes) and reproducible from source with node scripts/compile-contracts.mjs --via-ir.
| Contract | Address | Notes |
|---|---|---|
| AdextoCurveFactory | 0x090a586Abfaad1eee258Fc15e8E4584B5c3B67d5 |
current generation · block 43164332 |
| AdextoGovernor | 0x5045b117dDF788078c535f37837fDB6384da034d |
governance, not yet exercised |
| AdextoCCIPReceiver | 0xaD0C7BFF5aDfeb01C3DaF2bF8C85414FE4D47Ab4 |
deployed, CCIP lanes idle |
| AdextoTrinityFactory | 0xe8E9Cf43f88D065892c35c4aDa002C7B8b11F3e0 |
superseded v1 |
| SovereignHook | 0x592c697aD1Fa712c6701C90991B96264aB2E98d8 |
superseded v1, cannot settle trades |
| Contract | Address | Notes |
|---|---|---|
| AdextoCurveFactory | 0xbC72FE919F85E679e7d95e2b471AaDA3c7c3Ac39 |
current generation · block 50708028 |
| AdextoGovernor | 0x01b250a2db25561dB185f4628B93C72048D8bc1B |
governance, not yet exercised |
| AdextoCCIPReceiver | 0x1eE8701Dd8CD8C456E71ef74bd3Dbf0b377B6D8d |
deployed, CCIP lanes idle |
| AdextoTrinityFactory | 0x8e63e117E71A80Cfc10fDF375F079e2e29cd7D7D |
superseded v1 |
| SovereignHook | 0xb264D861264B0e4f8fb98A61B7694BA8a3B6BBe3 |
superseded v1, cannot settle trades |
| Contract | Address | Notes |
|---|---|---|
| AdextoCurveFactory | 0x795D11BEAc025771e9e96Bb4489068b1eDC4b47a |
current generation · block 500393825 |
| AdextoGovernor | 0x33811F9c53da5071A130F18D844f64999dBD43bA |
governance, not yet exercised |
| AdextoCCIPReceiver | 0x5800e9715a47a598fce9bc3B65a95FD6BeBf76A3 |
deployed, CCIP lanes idle |
| AdextoTrinityFactory | 0x2674654D4a8B79f84c1daC4Cf254EA066e59bC56 |
superseded v1 |
| SovereignHook | 0xbC72FE919F85E679e7d95e2b471AaDA3c7c3Ac39 |
superseded v1, cannot settle trades |
| Contract | Address | Notes |
|---|---|---|
| AdextoCurveFactory | 0x05EFA7F066FcbefbE650EDd58583C107831A600B |
current generation · block 100842422 |
| AdextoGovernor | 0x01b250a2db25561dB185f4628B93C72048D8bc1B |
governance, not yet exercised |
| AdextoCCIPReceiver | 0x1eE8701Dd8CD8C456E71ef74bd3Dbf0b377B6D8d |
deployed, CCIP lanes idle |
| AdextoTrinityFactory | 0x8e63e117E71A80Cfc10fDF375F079e2e29cd7D7D |
superseded v1 |
| SovereignHook | 0xb264D861264B0e4f8fb98A61B7694BA8a3B6BBe3 |
superseded v1, cannot settle trades |
Some addresses repeat across chains. That is expected:
CREATEderives an address from the deployer and its nonce, so the same deployer at the same nonce lands on the same address on every EVM chain. The Base curve factory and the Arbitrum v1 hook share an address for exactly this reason, on different chains.
Deployer: 0x8a3c7524Aaed081825aC88eC7f4cCECFc583ee7D
The point of this table is that nothing above it should be read as more finished than it is.
| Component | State | What that means precisely |
|---|---|---|
AdextoCurveFactory 0.10.0 on 4 mainnets |
Live | Broadcast and read back on each chain: VERSION 0.10.0, totalProjectsCount 0, runtime bytecode byte-identical to a local compile (20,054 B), and AGENT_REGISTRY resolving to a live ERC-8004 registry answering name(). |
AdextoCurveFactory 0.9.0 on 4 mainnets |
Live, superseded | Still deployed and still permissionless. Superseded because 0.10.0 adds the ERC-8004 binding, which changes the deployTrinity selector. Addresses kept below so nobody mistakes one for the other. |
| ERC-8004 agent identity | Optional, verified on-chain | See below. Identity registry only; reputation and validation are not used. |
| Launching through the site | Not enabled | NEXT_PUBLIC_CURVE_FACTORY_* is intentionally still unset, so the UI keeps launching disabled. |
| Tokens launched | Zero | totalProjectsCount() returns 0 on every chain. The market index is empty and says so. |
| Trading / swap | No markets yet | Follows from the line above: nothing has launched, so there is nothing to trade. |
Own AMM (SovereignCurve) |
Deployed per launch | The curve ships with the factory. Proven end-to-end on four testnets; no mainnet launch has happened yet. |
| Agent compute (0G) | Live, partially attested | The 0G router reports Intel TDX attestation via dstack for each model we call. We read that declaration; we do not fetch or verify the raw quote. |
| x402 edge gateway | Discovery only | The HTTP 402 challenge, price and settlement vault are live and real. EIP-712 voucher settlement and revenue routing into the vault are not built — a signed voucher returns 501. |
| 0G DA metadata anchoring | Live | Launch metadata is anchored and its storage root travels in calldata as metadataRoot. |
| Chainlink CCIP | Receiver deployed, idle | Contracts exist on all four chains; no lane is open and no message has been sent. |
| The Graph indexing | Not configured for mainnet | See below. |
| Governance | Deployed, unexercised | AdextoGovernor exists on all four chains; no proposal has been made. |
Two claims were carried in this README for a long time and neither was ever true. They are recorded here rather than quietly deleted.
- Uniswap v4 hooks. There is no Uniswap integration.
AdextoCurveFactory,SovereignCurveandAdextoTokencontain zero references to Uniswap and the project has no Uniswap dependency. The supersededSovereignHookdeclares its own localIPoolManagerinterface and anafterSwapfunction, which is not the same thing as being a registered v4 hook — nothing calls it, and 0G and Monad have no Uniswap v4 deployment at all. The curve is its own AMM, which is why there is no migration step to trust. ERC-8004 compliance.This was false and is now partly true; see ERC-8004 agent identity below for exactly how far it goes. Until factory0.10.0,AdextoTokenwasERC20and nothing more, carrying oneaddress immutable agentIdentityand touching no registry — so the claim was unsupportable and the source called it "ERC-8004 style", an analogy. A launch can now bind a real agent id, verified on-chain. The reputation and validation registries are still not used.
Optional, off by default, and real when switched on. A launch may bind the token to an agent registered in the ERC-8004 Identity Registry, and AdextoCurveFactory calls ownerOf(agentId) and refuses the launch unless the caller owns that agent — so a token cannot attach itself to somebody else's identity and inherit its reputation.
| Identity Registry | 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 — same address on all four mainnets, verified answering ownerOf |
| Registry on testnets | absent, so the agent path can only be exercised on mainnet or a local devchain |
| Standard status | Draft. The registry proxy is upgradeable and controlled by a third party |
| Reputation / Validation registries | not used |
| Read on a token | agentBound(), then agentId() and agentRegistry() |
Three things worth knowing before relying on it.
Binding is a separate step from launching. ERC-8004 wants the registration file to contain its own agentId, and the id does not exist until register() returns — so a file pinned beforehand cannot contain it. The creator registers first and passes the id to the launch. Leaving the identity off keeps the launch at one transaction, which is why the gas-only property is unaffected.
agentBound() is the flag to read, not agentId(). Agent id 0 is a real agent with a real owner on 0G, Base, Arbitrum One and Monad, so zero cannot mean "no agent". An earlier revision of this used agentId == 0 as that sentinel; testing against the live registries caught it before it was frozen into immutable bytecode.
The registration file is data: until IPFS pinning is configured. ERC-8004 permits a base64 data: URI for fully on-chain metadata, and that is the default here because an ipfs:// CID that nobody pins is a dead link recorded permanently. Set PINATA_JWT to pin instead; the CID is recomputed locally and compared with what the service reports. This matters: an empirical study of ERC-8004 found most registrations are placeholders with no live endpoint (arXiv 2606.26028), and reading agent #40 on our own four chains shows an empty string on 0G, un-encoded raw JSON on Monad, and an HTTPS URL whose embedded id does not match the token on Base.
npx tsx scripts/register-agent-8004.mjs --chain 0g # dry run
npx tsx scripts/register-agent-8004.mjs --chain 0g --broadcast # registers, then sets the URI
node scripts/test-erc8004-binding.mjs # 24 assertions, local devchainNot wired for mainnet yet. The manifest and per-network config are generated from subgraph/chains.json plus build/deployments.json (npm run networks in subgraph/), so the mainnet factory addresses and start blocks are already in place — but no mainnet subgraph has been deployed and no SUBGRAPH_URL_* is set, so the app reads chain state directly rather than through an indexer.
Two of the four chains cannot use Subgraph Studio at all, which is a property of The Graph and not a choice:
| Chain | Target | Reason |
|---|---|---|
| Base, Arbitrum One | Subgraph Studio | Subgraphs served, indexing rewards enabled |
| 0G Mainnet | Self-hosted Graph Node | absent from graphprotocol/networks-registry entirely |
| Monad Mainnet | Self-hosted Graph Node | listed, but served by Firehose and Substreams only — not Subgraphs |
Self-hosting runs from subgraph/docker-compose.yml. Public-RPC eth_getLogs ceilings are probed rather than assumed and recorded per chain in subgraph/chains.json: 2,000 blocks on 0G, and a hard 100 on Monad, which returns -32614 above that.
git clone https://github.com/0xcuy/adexto.git
cd adexto
npm install
cp .env.example .env.local
npm run dev # http://localhost:3000Contracts compile reproducibly, with no Hardhat run required:
node scripts/compile-contracts.mjs --via-ir # -> build/artifacts/
node scripts/deploy-sovereign-curve.mjs --chain base # dry run, no gas
node scripts/deploy-sovereign-curve.mjs --chain base --broadcast # spends gasThe dry run checks the RPC chain ID, the deployer balance and estimateGas before anything is sent, and refuses to broadcast if the balance cannot cover the deployment.
RESERVED_SYMBOLS in src/lib/registry.ts blocks a set of tickers from being claimed through /api/deploy. This is an application-level guard only: deployTrinity on the factory has no access control, so the reservation cannot bind anyone who calls the contract directly. ADEXTO_OFFICIAL_DEPLOYER grants one address an exception so the protocol can launch its own reserved tickers; it is empty by default, which means nobody can.
MIT © 2026 ADEXTO Core Contributors · adexto.xyz

