Documentation

Testnet Faucet

Test Primer (tPR) is a test token on Ethereum Sepolia, Robinhood Chain testnet and LitVM LiteForge, free from the faucet below.

tPR is not PR. It has no value, is not tradeable, and can not be bridged to or exchanged for mainnet PR token in any way. See PR Token for the real thing.

Claim tPR

Drip
…
Cooldown
…
Faucet balance
…
View faucet contract →

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:

bash
# 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:

bash
# 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.