Testnet Faucet
Test Primer (tPR) is a test token on Ethereum Sepolia, Robinhood Chain testnet and LitVM LiteForge, free from the faucet below.
Claim tPR
Getting test gas
Claiming costs gas, so you'll need some first. These are third-party faucets, not ours.
| Network | Gas token | Where to get it |
|---|---|---|
| Ethereum Sepolia | SepoliaETH | Google Cloud, Alchemy, pk910 PoW |
| Robinhood Chain testnet | ETH | faucet.testnet.chain.robinhood.com |
| LitVM LiteForge | zkLTC | testnet.litvm.com |
Networks
Both contracts are deployed at identical addresses on all three chains.
| Network | Chain ID | RPC | Explorer |
|---|---|---|---|
| Ethereum Sepolia | 11155111 |
https://ethereum-sepolia-rpc.publicnode.com |
sepolia.etherscan.io |
| Robinhood Chain testnet | 46630 |
https://rpc.testnet.chain.robinhood.com |
explorer.testnet.chain.robinhood.com |
| LitVM LiteForge | 4441 |
https://liteforge.rpc.caldera.xyz/http |
liteforge.explorer.caldera.xyz |
Contracts
| tPR token | 0x86452FD759D38a1d9a1d622942f1e7C5f7A288dD |
| Faucet | 0x12C683a2b8F0E477D077a8aCb1b382bAA65D7D7a |
Both are source-verified on Sourcify and on each chain's explorer: tPR (Sepolia) · tPR (RHC) · Faucet (Sepolia) · Faucet (RHC)
Sourcify does not index LitVM LiteForge (chain 4441), so the LiteForge deployments are not source-verified yet. The bytecode is identical to the verified Sepolia and RHC deployments, built from the same commit.
Token details
tPR is a line-for-line clone of the PR contract on Robinhood Chain. Only the name, symbol and supply differ; the logic is identical.
| Name / symbol | Test Primer / tPR |
| Decimals | 18 |
| Total supply | 100,000,000,000 tPR (fixed) |
| Mintable | No — same as PR |
| EIP-2612 | Gasless approvals (permit) |
| EIP-3009 | x402 ready — transferWithAuthorization, receiveWithAuthorization, cancelAuthorization |
| EIP-1271 | Contract wallets supported on the *WithAuthorization methods |
| Burnable | Yes, including gasless burnWithAuthorization |
Claiming from a script
claim is a plain contract call — no need for the front end:
# Sepolia
cast send 0x12C683a2b8F0E477D077a8aCb1b382bAA65D7D7a \
"claim(address)" 0x86452FD759D38a1d9a1d622942f1e7C5f7A288dD \
--rpc-url https://ethereum-sepolia-rpc.publicnode.com \
--private-key $PRIVATE_KEY
# Robinhood Chain testnet
cast send 0x12C683a2b8F0E477D077a8aCb1b382bAA65D7D7a \
"claim(address)" 0x86452FD759D38a1d9a1d622942f1e7C5f7A288dD \
--rpc-url https://rpc.testnet.chain.robinhood.com \
--private-key $PRIVATE_KEY
Useful read-only calls:
# When can this address next claim? (0 = never claimed, claim now)
cast call $FAUCET "nextClaimTime(address,address)(uint256)" $TPR $YOUR_ADDRESS --rpc-url $RPC
# How much tPR is left in the faucet?
cast call $FAUCET "faucetBalance(address)(uint256)" $TPR --rpc-url $RPC
# Drip amount, cooldown, enabled
cast call $FAUCET "tokens(address)(uint256,uint256,bool)" $TPR --rpc-url $RPC
Faucet rules
| Drip | 1,000 tPR per claim |
| Cooldown | 24 hours per address, per token, per chain |
| Daily cap | None currently |
| Minimum balance | None currently |
The faucet takes a token → config mapping, so more test tokens can be added without redeploying. Only tPR is configured today.
Need a larger allocation? Get in touch rather than looping the faucet.
Common errors
Failed claims revert with a typed error. The front end decodes these; if you're calling directly:
| Error | Meaning |
|---|---|
CooldownActive(uint256) |
Already claimed. The value is when you can claim next. |
TokenNotEnabled() |
Token not configured here. Check the address and the chain. |
InsufficientCallerBalance() |
Your address is below the minimum native balance required. |
DailyCapExceeded() |
Daily allowance used up. Try again later. |
EnforcedPause() |
The faucet is paused. |
ERC20InsufficientBalance(...) |
The faucet itself is out of tPR. Let us know. |