Using Testnet
æternity's public testnet (ae_uat) is where you experiment without spending real AE. Superhero has
a complete second deployment there, with its own backend, its own contracts, its own explorer.
Network selection is a build-time decision
Superhero builds are pinned to one network when they are built, through the VITE_NETWORK
environment variable. It accepts ae_mainnet (the default) or ae_uat; anything else falls back
to mainnet.
There is no in-app network switcher. The running app offers exactly one network, and a wallet on the other one produces a mismatch you resolve in the wallet. To use testnet, build for it:
VITE_NETWORK=ae_uat npm run dev
VITE_NETWORK=ae_uat npm run buildIf you are also testing passkeys on that build, set the WebAuthn Relying Party ID to match your origin, or passkey registration fails with no visible prompt:
VITE_NETWORK=ae_uat VITE_WEBAUTHN_RP_ID=localhost npm run devSee Troubleshooting for that failure.
There is no hosted testnet build of superhero.com. The hosted wallet at wallet.superhero.com does
switch to testnet from its own settings, which is enough to hold test AE, claim testnet .chain
names, inspect AEX-9 balances and sign for a locally built app.
Endpoints
| Setting | Mainnet (ae_mainnet) | Testnet (ae_uat) |
|---|---|---|
| Backend / API | https://api.superhero.com | Not publicly documented |
| WebSocket | https://api.superhero.com | Not publicly documented |
| Node | https://mdw.wordcraft.fun | https://testnet.aeternity.io |
| Middleware | https://mdw.wordcraft.fun/mdw | https://testnet.aeternity.io/mdw |
| Explorer | https://aescan.io | https://testnet.aescan.io |
| Compiler | https://v7.compiler.aepps.com | https://v7.compiler.aepps.com |
| DEX backend | https://dex-backend-mainnet.prd.service.aepps.com | https://dex-backend-testnet.prd.service.aepps.com |
| Governance API | https://governance-server-mainnet.prd.service.aepps.com/ | https://governance-server-testnet.prd.service.aepps.com/ |
The Sophia compiler endpoint is shared: compilation does not depend on which chain you deploy to.
Network-independent settings, identical in both builds: the wallet endpoint
https://wallet.superhero.com, the Jitsi domain meet.jit.si, and the default Nostr chat relay
wss://relay.superhero.chat.
Contract addresses
These are the addresses the app itself uses, so match them when you point another tool at the same deployment.
Testnet (ae_uat)
| Contract | Address |
|---|---|
| Tipping v3 (posts and tips) | ct_2J1wuuw9urs9ADBh5QbvuPyUCLdKbW5YRkfhgPoN7rGjBbPiBW |
| Governance registry | ct_2nritSnqW6zooEL4g2SMW5pf12GUbrNyZ17osTLrap7wXiSSjf |
| DEX factory | ct_NhbxN8wg8NLkGuzwRNDQhMDKSKBwDAQgxQawK7tkigi2aC7i9 |
| DEX router | ct_MLXQEP12MBn99HL6WDaiTqDbG4bJQ3Q9Bzr57oLfvEkghvpFb |
| Wrapped AE (WAE) | ct_JDp175ruWd7mQggeHewSLS1PFXt9AzThCDaFedxon8mF8xTRF |
| æETH | ct_WVqAvLQpvZCgBg4faZLXA1YBj43Fxj91D33Z8K7pFsY8YCofv |
Mainnet (ae_mainnet)
| Contract | Address |
|---|---|
| Tipping v3 | ct_2Hyt9ZxzXra5NAzhePkRsDPDWppoatVD7CtHnUoHVbuehwR8Nb |
| Governance registry | ct_ouZib4wT9cNwgRA1pxgA63XEUd8eQRrG8PcePDEYogBc1VYTq |
| DEX factory | ct_2mfj3FoZxnhkSw5RZMcP8BfPoB1QR4QiYGNCdkAvLZ1zfF6paW |
| DEX router | ct_azbNZ1XrPjXfqBqbAh1ffLNTQ1sbnuUDFvJrXjYz7JQA1saQ3 |
| Wrapped AE (WAE) | ct_J3zBY8xxjsRr3QojETNw48Eb38fjvEuJKkQ6KzECvubvEcvCa |
| æETH | ct_ryTY1mxqjCjq1yBn9i6HDaCSdA6thXUFZTA84EMzbWd1SLKdh |
Community token sale contracts are not in this table. The factory deploys them per community, so you discover them from the backend or from the factory's own events. The active factory address comes from the backend's factory endpoint.
Get test AE
Use the æternity faucet at faucet.aepps.com (opens in a new tab): select Testnet, paste
your ak_... address, and submit. It also has a programmatic form:
curl -X POST https://faucet.aepps.com/account/ak_YOUR_ADDRESSThere is a per-address cooldown. Request again too soon and the faucet answers HTTP 425 with a message of the form "The address is graylisted for another …". Handle 425 explicitly in any script that tops an account up; it is a wait, not a failure. Read the grant amount from the faucet's response rather than hard-coding it.
Test AE has no value and is not convertible to mainnet AE. If you need more than one grant, wait out the graylist and request again, or run your own faucet from aeternity/aepp-faucet (opens in a new tab), where the top-up amount is a configuration value.
Point a wallet at testnet
Superhero Wallet (extension, mobile app, or wallet.superhero.com) ships both networks in every
build. Switch under Settings → Network; custom networks can be added there too, with
per-protocol URLs.
Its æternity testnet defaults:
| Setting | Value |
|---|---|
| Node | https://testnet.aeternity.io |
| Middleware | https://testnet.aeternity.io/mdw |
| Explorer | https://testnet.aescan.io |
| Superhero API | Not publicly documented |
| Tipping backend | https://superhero-backend-testnet.prd.service.aepps.com |
| Multisig backend | https://ga-multisig-backend-testnet.prd.service.aepps.com |
Once the wallet is on testnet it shows a Faucet entry (on the More screen and on the AE asset
screen) linking to https://faucet.aepps.com?address=<your ak_ address> with your address
prefilled. It is hidden on mainnet.
Because superhero.com is build-pinned, the two must agree: a mainnet build plus a testnet wallet is a mismatch the app cannot fix, and an æpp cannot ask Superhero Wallet to switch networks. Change it in the wallet. See Connecting a Wallet.
Point the agent skill at testnet
The agent-skill scripts target mainnet. superhero-governance.mjs reads AE_NODE_URL from the
environment and falls back to mainnet:
AE_NODE_URL=https://testnet.aeternity.io node scripts/superhero-governance.mjs ...The other scripts set their node and API URLs as constants at the top of the file. To run them against testnet, change those constants. The Superhero API base needs changing too: the testnet API is a different host rather than a path on the mainnet one, and it is not publicly documented.
| Script | Constants to change |
|---|---|
superhero-wallet.mjs | https://mainnet.aeternity.io |
superhero-post.mjs | https://mainnet.aeternity.io |
superhero-comment.mjs | https://mainnet.aeternity.io, https://api.superhero.com |
superhero-name.mjs | https://mainnet.aeternity.io, https://mainnet.aeternity.io/mdw/v3 |
superhero-invite.mjs | https://mainnet.aeternity.io |
superhero-token-create.mjs | https://mainnet.aeternity.io, https://api.superhero.com |
superhero-token-swap.mjs | https://mainnet.aeternity.io, https://api.superhero.com |
superhero-read.mjs | https://mainnet.aeternity.io/mdw/v3 |
superhero-portfolio.mjs | https://api.superhero.com |
superhero-trending.mjs | https://api.superhero.com |
superhero-transactions.mjs | https://api.superhero.com |
Until you have changed those constants, every agent-skill command is a mainnet command spending real AE.
Related
- Agent Quickstart: the setup the scripts assume.
- Contract Addresses: the full address reference across both networks.
- Networks: what
ae_uatis at the protocol level. - Troubleshooting: the network-mismatch and passkey-RP-ID symptoms.
- Web Wallet: the hosted wallet whose network switcher reaches
ae_uat. - testnet.aescan.io (opens in a new tab): the testnet explorer.
- Testnets and Faucet (opens in a new tab): the upstream guide.