Cooldown and Limits
The faucet enforces rate limiting to prevent abuse while remaining open access.
Cooldown period
- Duration: 24 hours per wallet per network
- Scope: Each wallet address has an independent cooldown on each network
- Check: The faucet contract exposes
getRemainingCooldown(address)which returns the seconds remaining before the next request is allowed
Drip amount
Each request mints a fixed amount of testnet DS Tokens. The drip amount is configured per-network in the faucet contract and is displayed on the faucet page before you submit.
What the UI shows
| State | Display |
|---|---|
| Ready to request | Request button is enabled |
| Cooldown active | Timer showing remaining hours/minutes |
| Cooldown unknown | "24-hour cooldown policy" informational message |
| Request pending | Loading spinner, button disabled |
Programmatic usage
You can check the cooldown status directly on-chain:
interface IFaucet {
function getRemainingCooldown(address wallet) external view returns (uint256 seconds);
function requestTokens(address recipient) external;
}
import { createPublicClient, http } from "viem";
import { sepolia } from "viem/chains";
const client = createPublicClient({
chain: sepolia,
transport: http(),
});
const remaining = await client.readContract({
address: "0xFAUCET_ADDRESS",
abi: ["function getRemainingCooldown(address) view returns (uint256)"],
functionName: "getRemainingCooldown",
args: ["0xYOUR_WALLET"],
});
console.log(`Cooldown remaining: ${remaining} seconds`);
note
Direct calls to requestTokens() require the caller to have the appropriate permissions. The sandbox faucet UI routes requests through the BC Labs Gateway, which handles the privileged transaction submission.