Testnet
Testnet status (offline since 2026-04-25), how to test on mainnet as a chaosnet instead, and the testnet endpoints and faucet API kept for when it returns.
The BitBadges testnet (bitbadges-2) is offline. This page records its status, the recommended substitute, and the endpoint and faucet shapes so they are ready when it returns.
Testnet has been offline since 2026-04-25 to reduce hosting costs while usage was minimal. Read-only checks on 2026-09-07 found DNS failures for the RPC, LCD, and EVM RPC hosts, HTTP 403 for the site, and HTTP 503 for the testnet API, and the SDK's NETWORK_CONFIGS.testnet is marked disabled: true. To ask for a relaunch, contact the team.
Test on Mainnet Instead
Mainnet operates as a chaosnet: fully live, with experiments recorded on the same network as production assets.
- The public EVM RPC returned
eth_gasPrice: 0on 2026-09-07. Query current fees before transacting; this is not a permanent zero-fee guarantee. - Transact with worthless assets such as
CHAOS(badges:49:chaosnet) instead of real-value coins. - Contracts, transactions, and integrations run against the real network. Use dedicated accounts and test assets; state changes and any configured payments are real.
Every example in these docs targets mainnet. See Network for endpoints and Supported Denoms for CHAOS.
What Testnet Was
A separate environment isolated from production, with its own chain, database, API, and site. Nothing carried over between the two: not profiles, tokens, settings, or anything else. Third-party integrations such as claim plugins behaved the same in both.
Differences from production:
- Some features were unavailable: off-chain balances managed by BitBadges were not hosted on a CDN, BADGE credits could not be bought, no push notifications, and more.
- Some restrictions were relaxed: no API keys required, a more lenient faucet.
- Performance differed from production.
Endpoints (Offline)
| Surface | URL |
|---|---|
| Site | https://testnet.bitbadges.io |
| BitBadges API | https://api.bitbadges.io/testnet (append the normal routes) |
| CometBFT RPC | https://rpc-testnet.bitbadges.io |
| WebSocket | wss://rpc-testnet.bitbadges.io/websocket |
| LCD (REST) | https://lcd-testnet.bitbadges.io |
| EVM JSON-RPC | https://evm-rpc-testnet.bitbadges.io |
| Cosmos chain ID | bitbadges-2 |
| EVM chain ID | 50025 |
Faucet API (Offline)
The faucet gave free BADGE for testing and bot development. No API key and relaxed CORS. Kept here as the contract for when testnet returns; do not call it as a live step today.
POST https://api.bitbadges.io/testnet/api/v0/faucetRequest:
{
"address": "bb1p0rrel3365scadq5k9pv0x0zp9j22js6dnw70d"
}The address must be a bb1 bech32 address. Use the SDK's convertToCosmosAddress() to convert from Ethereum or other formats.
Response: 200 with an empty body on success (tokens are queued and arrive shortly). 500 with a JSON error otherwise:
| Error | Cause |
|---|---|
Already_airdropped | The address already received faucet tokens |
Invalid_request._Origin_not_found. | The request origin could not be determined |
Behavior:
- Amount: 1000
ubadgeper request. - Limit: one airdrop per address, lifetime. For more, use another address or ask on Discord.
- Processing: asynchronous queue; tokens can take a few seconds.
- Authentication: none on testnet.
curl -X POST https://api.bitbadges.io/testnet/api/v0/faucet \
-H "Content-Type: application/json" \
-d '{"address": "bb1p0rrel3365scadq5k9pv0x0zp9j22js6dnw70d"}'// Using fetch directly
const response = await fetch('https://api.bitbadges.io/testnet/api/v0/faucet', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ address: 'bb1p0rrel3365scadq5k9pv0x0zp9j22js6dnw70d' })
});
if (!response.ok) {
const error = await response.json();
console.error('Faucet error:', error);
}Bot bootstrap pattern:
import { GenericEvmAdapter, NETWORK_CONFIGS } from 'bitbadges';
// Generate a new bot wallet
const adapter = await GenericEvmAdapter.fromMnemonic(
process.env.BOT_MNEMONIC!,
NETWORK_CONFIGS['testnet'].evmRpcUrl
);
// Fund it (one-time)
await fetch('https://api.bitbadges.io/testnet/api/v0/faucet', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ address: adapter.address })
});
// Wait briefly for tokens to arrive
await new Promise(r => setTimeout(r, 5000));
// Now ready to sign and broadcast transactionsOn mainnet there is no faucet; acquire BADGE through normal channels.