Getting Started
Using Testnet

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 build

If 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 dev

See 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

SettingMainnet (ae_mainnet)Testnet (ae_uat)
Backend / APIhttps://api.superhero.comNot publicly documented
WebSockethttps://api.superhero.comNot publicly documented
Nodehttps://mdw.wordcraft.funhttps://testnet.aeternity.io
Middlewarehttps://mdw.wordcraft.fun/mdwhttps://testnet.aeternity.io/mdw
Explorerhttps://aescan.iohttps://testnet.aescan.io
Compilerhttps://v7.compiler.aepps.comhttps://v7.compiler.aepps.com
DEX backendhttps://dex-backend-mainnet.prd.service.aepps.comhttps://dex-backend-testnet.prd.service.aepps.com
Governance APIhttps://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)

ContractAddress
Tipping v3 (posts and tips)ct_2J1wuuw9urs9ADBh5QbvuPyUCLdKbW5YRkfhgPoN7rGjBbPiBW
Governance registryct_2nritSnqW6zooEL4g2SMW5pf12GUbrNyZ17osTLrap7wXiSSjf
DEX factoryct_NhbxN8wg8NLkGuzwRNDQhMDKSKBwDAQgxQawK7tkigi2aC7i9
DEX routerct_MLXQEP12MBn99HL6WDaiTqDbG4bJQ3Q9Bzr57oLfvEkghvpFb
Wrapped AE (WAE)ct_JDp175ruWd7mQggeHewSLS1PFXt9AzThCDaFedxon8mF8xTRF
æETHct_WVqAvLQpvZCgBg4faZLXA1YBj43Fxj91D33Z8K7pFsY8YCofv

Mainnet (ae_mainnet)

ContractAddress
Tipping v3ct_2Hyt9ZxzXra5NAzhePkRsDPDWppoatVD7CtHnUoHVbuehwR8Nb
Governance registryct_ouZib4wT9cNwgRA1pxgA63XEUd8eQRrG8PcePDEYogBc1VYTq
DEX factoryct_2mfj3FoZxnhkSw5RZMcP8BfPoB1QR4QiYGNCdkAvLZ1zfF6paW
DEX routerct_azbNZ1XrPjXfqBqbAh1ffLNTQ1sbnuUDFvJrXjYz7JQA1saQ3
Wrapped AE (WAE)ct_J3zBY8xxjsRr3QojETNw48Eb38fjvEuJKkQ6KzECvubvEcvCa
æETHct_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_ADDRESS

There 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:

SettingValue
Nodehttps://testnet.aeternity.io
Middlewarehttps://testnet.aeternity.io/mdw
Explorerhttps://testnet.aescan.io
Superhero APINot publicly documented
Tipping backendhttps://superhero-backend-testnet.prd.service.aepps.com
Multisig backendhttps://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.

ScriptConstants to change
superhero-wallet.mjshttps://mainnet.aeternity.io
superhero-post.mjshttps://mainnet.aeternity.io
superhero-comment.mjshttps://mainnet.aeternity.io, https://api.superhero.com
superhero-name.mjshttps://mainnet.aeternity.io, https://mainnet.aeternity.io/mdw/v3
superhero-invite.mjshttps://mainnet.aeternity.io
superhero-token-create.mjshttps://mainnet.aeternity.io, https://api.superhero.com
superhero-token-swap.mjshttps://mainnet.aeternity.io, https://api.superhero.com
superhero-read.mjshttps://mainnet.aeternity.io/mdw/v3
superhero-portfolio.mjshttps://api.superhero.com
superhero-trending.mjshttps://api.superhero.com
superhero-transactions.mjshttps://api.superhero.com

Until you have changed those constants, every agent-skill command is a mainnet command spending real AE.

Related