Skip to main content
The faucet program mints cUSDC, the devnet collateral token, to any wallet that asks, at most once per cooldown. The drip instruction exists only in the devnet build; on mainnet the collateral is real USDC. In the app, the button reads “Get 1000 cUSDC”.
As of 10 Oct 2026 the cUSDC faucet drips 1,000 cUSDC (drip_amount = 1_000_000_000) with a 24 h cooldown (cooldown_seconds = 86_400). Amounts are in base units, and cUSDC has 6 decimals.

Accounts

FaucetState PDA

One per mint. As of 10 Oct 2026 only cUSDC has one (9U5jPkt46MhtqGt22yWQuKTUDKNUZXEZBekJNJuSMt1N).

mint_authority PDA

Holds no data. It is the cUSDC mint authority (HGtoCZ8VWGJvW5yiBai7VZictfrs3h7tmvFFJUoumoNw) and signs the mint_to inside drip.

DripRecord PDA

One per wallet, created on its first drip. The recipient pays its rent (0.0007366 SOL on devnet as of 10 Oct 2026).

Instructions

initialize(drip_amount: u64, cooldown_seconds: i64)

Creates the FaucetState for a mint. Whoever calls it first for a mint becomes that faucet’s authority. It doesn’t touch the mint itself. Before anyone can drip, the mint’s current authority must hand minting to the faucet’s PDA:
Accounts: mint_authority, faucet_state, mint, authority, system_program.

drip() (devnet build only)

Mints drip_amount to the signer’s token account. Fails with CooldownNotElapsed if that wallet’s last drip was less than cooldown_seconds ago. The cooldown is per wallet: DripRecord is keyed by the recipient, who must also sign. The recipient pays the transaction fee and, on a first drip, the DripRecord rent. recipient_ata must already exist, hold this mint and be owned by the recipient. Accounts, in order: faucet_state, mint_authority, mint, drip_record, recipient_ata, recipient (signer), token_program, system_program.

update_params(drip_amount: u64, cooldown_seconds: i64) (faucet authority)

Replaces both values.

transfer_authority(new_authority: Pubkey) (faucet authority)

Replaces authority.

Errors

TypeScript

This drips to the provider’s wallet. provider is set up as in SDK setup, and the IDL is published in continuum-docs/idl.

Operator funding

On devnet the operator funds the CLP from the faucet. It sets drip_amount to the target and cooldown_seconds to 0 with update_params, drips once, then restores both values. It then sends the cUSDC to the global vault with a plain SPL transfer. That transfer bypasses admin_fund, so GlobalClp.total_deposits stays at 0 on devnet. Mainnet has no faucet, and the admin must hold real USDC.

See also

Devnet info

Cluster, RPC and faucet usage.

Quickstart

A first mint that starts at the faucet.