Skip to main content

Faucet

A faucet dispenses small amounts of Convex Coins on test networks, so you can experiment without acquiring coins. On the public testnet you rarely call it directly — the SDKs use it to fund new accounts for you (see the Quick Start). This page covers requesting funds explicitly.

Availability

  • Public testnet — a faucet is available. The current endpoint is https://mikera1337-convex-testnet.hf.space.
  • Local peer — when you run your own peer for development, you control funding directly (see Local Testnets).
  • Production (Protonet, peer.convex.live)no faucet. Coins must be acquired legitimately (transfer from another account, an exchange, or network rewards).

A peer may also have its faucet disabled. A faucet request to such a peer is refused with 403 Forbidden — treat that as "no faucet on this network".

Security note: any service offering free production coins is a scam. Faucets exist only for testing.

Requesting funds

Amounts are always in copper (1 CVM = 1,000,000,000 copper). 0.1 CVM — 100,000,000 copper — is plenty for most testing.

TypeScript

import { Convex, KeyPair } from '@convex-world/convex-ts';

const convex = new Convex('https://mikera1337-convex-testnet.hf.space');

// Fund a new account on creation: pass a faucet amount to createAccount
const keyPair = KeyPair.generate();
const account = await convex.createAccount(keyPair.accountKey, 100_000_000); // 0.1 CVM

// Top up an existing account
await convex.faucet(account.address, 100_000_000);

Python

from convex_sdk import Convex, KeyPair

convex = Convex('https://mikera1337-convex-testnet.hf.space')

# Faucet-sponsored account creation (the peer's faucet pays the juice)
key_pair = KeyPair()
account = convex.create_account(key_pair)

# Request funds for an account
convex.request_funds(100_000_000, account) # 0.1 CVM

# Or top up only when needed: requests funds until the balance reaches min_balance
convex.topup_account(account, min_balance=10_000_000)

Account creation is faucet-sponsored

Creating an account costs juice, which must be paid by an already-funded account. On the public testnet the peer's faucet account sponsors creation, so createAccount / create_account work from a fresh key with no funds. On production there is no faucet, so a new account must be created and funded by an existing account.

Handling an unavailable faucet

If the faucet is disabled or the peer refuses the request, the call fails (HTTP 403 Forbidden). Handle it as "no faucet here" rather than a transient error:

from convex_sdk.exceptions import ConvexAPIError

try:
convex.request_funds(100_000_000, account)
except ConvexAPIError as e:
print(f'Faucet unavailable: {e}') # likely a production peer or a disabled faucet

Best practices

  • Request only what you need — 0.1 CVM covers most testing; you rarely need whole coins.
  • Reuse funded accounts — cache a funded test account across sessions rather than re-funding each run; topup_account (Python) makes this easy.
  • Don't depend on faucet availability in scripts — treat a 403 as expected on production or restricted peers.

See Also