Crypto testing is separate from the Dino USD sandbox. Dino's /v1/sandbox/faucet adds cash test balance for din_test_ keys; it does not mint SOL, USDC, or any chain asset.
Use public Solana devnet tooling for chain-level tests, then use Dino's /v1/crypto/* API shape when you are ready to integrate governed payouts.
#What to test where
| Layer | Test with | Notes |
|---|---|---|
| Cash wallet, policy, checkout, proxy cards | Dino sandbox + din_test_ + /v1/sandbox/faucet | USD-only test balance |
| Solana wallet plumbing | Solana devnet | Use external SOL and token faucets |
| Governed USDC payout API shape | Dino /v1/crypto/payout-intents | Use spending keys for create/read; team keys or dashboard for approvals |
| Production settlement | Mainnet custody / BYOK setup | Requires real controls and operator review |
#Devnet setup
- Create a devnet wallet with your normal Solana tooling.
- Fund it with devnet SOL from a public faucet.
- Mint or request devnet token balances for local testing when your test harness needs SPL token transfers.
- Keep devnet addresses and mainnet addresses clearly separated in environment variables and logs.
Useful external resources:
External faucets change over time. If one is unavailable, use another Solana devnet faucet or your provider's faucet.
#Custody vs BYOK
Dino supports two mental models for crypto integrations:
- Workspace custody: Dino tracks a workspace USDC balance and payout intents move through Dino policy, approval, and webhooks.
- BYOK / external wallet: your system owns wallet operations and uses Dino for governed request / approval semantics where supported.
For public integrations, design around the API contract, not a specific wallet implementation detail. The crypto payout API currently advertises workspace_custodial for new payout creation.
#Payout test harness
The example under examples/crypto-payout-quickstart uses raw REST calls:
cd examples/crypto-payout-quickstart
cp .env.example .env
bun run start
It creates a payout intent with an idempotency key, prints the resulting status, and shows the approval boundary when human or team-key approval is required.