Solana devnet bridge
Swap between Solana devnet and NEAR testnet through Tidepool's testnet relayer, with 1Click-style deposit addresses, status and refunds. Native SOL (capped at 0.005 SOL) plus Tidepool test USDC and USDT.
GET /v0/tokens (blockchain: "sol") and in /v0/health under bridges.chains.sol only while it is live. If the tokens are not listed, the route is not active on that deployment yet.Tokens
| What | Value |
|---|---|
| Chain | Solana devnet, blockchain: "sol" |
| Native SOL | 9 decimals, asset id nep141:sol.tp-omft.testnet, no contractAddress |
| Test USDC (6 decimals, classic SPL) | mint 7pafEGXSmR35rLKNaD6inpfLYuEnRX9DyBc1c7M8r4Xr, asset id nep141:sol-d48c1adc423a64867ac91ed2e1c0df76da323235.tp-omft.testnet |
| Test USDT (6 decimals, classic SPL) | mint H9ERDhrU8KDeXkMna2Lw6hYJT3LSyhvypiktDc6zmoeJ, asset id nep141:sol-4c5179da74eb695eb57e01b787c4937157cf2833.tp-omft.testnet |
| Relayer / treasury | BEijzwSQpWxbgQQ5NfBePxUzHgLoc2vrApPe8G4St55Q (mint authority of both test mints) |
The SPL asset id is nep141:sol-<keccak256(mint pubkey bytes)[12..]>.tp-omft.testnet, the same naming rule 1Click uses on mainnet. These are Tidepool's own mints, not Circle or Tether tokens.
The SOL cap (0.005 SOL)
Any swap with a SOL leg is rejected at quote time with a 400 if the SOL amount (input or output) exceeds 0.005 SOL (5,000,000 lamports). It covers SOL swaps, payouts and refunds. Why: the relayer's SOL comes from rate-limited devnet airdrops, so a small cap keeps one user from draining it. Also:
- A SOL leg must be at least
0.00089088 SOL(the rent-exempt minimum for an empty account) for payouts to a new address and for fixed-size deposits. ANY_INPUTquotes that pay out to a Solana address in SOL are rejected (the amount is not known at quote time).- If you deposit more than you quoted, the excess is returned to
refundToin full: that return of your own deposit is not blocked by the cap. - USDC and USDT legs are not capped.
1. Get tokens
curl -X POST https://www.usetidepool.tech/v0/faucet -H 'content-type: application/json' \
-d '{"chain":"sol","address":"YourSolanaAddress"}'This mints 100 test USDC and 100 test USDT to your associated token accounts (our backend creates the accounts and pays the rent, so a fresh wallet works). The same faucet is in the dropdown on the Faucet page. To get the bridged USDC, USDT and 0.05 test SOL into your NEAR intents balance instead, call it with {"accountId":"alice.testnet","mode":"intents","assets":["sol"]}; that test SOL lives only inside the verifier. The faucet does not drip native SOL: get devnet SOL from your own RPC provider or a faucet. (The public api.devnet.solana.com RPC faucet is currently closed.)
2. Solana → NEAR
const quote = await OneClickService.getQuote({
dry: false, swapType: 'EXACT_INPUT', slippageTolerance: 100,
originAsset: 'nep141:sol.tp-omft.testnet',
destinationAsset: 'nep141:usdc.tidepool-sandbox.testnet',
amount: '2000000', // 0.002 SOL in lamports
depositType: 'ORIGIN_CHAIN', refundTo: 'YourSolanaAddress', refundType: 'ORIGIN_CHAIN',
recipient: 'you.testnet', recipientType: 'DESTINATION_CHAIN',
deadline: new Date(Date.now() + 30 * 60_000).toISOString(),
});
// quote.quote.depositAddress is a base58 Solana address. Send SOL there with SystemProgram.transfer.
// For an SPL origin, send the tokens to that address's associated token account (the ATA of depositAddress + mint).
await OneClickService.submitDepositTx({ txHash: '<signature>', depositAddress: quote.quote.depositAddress });Each deposit address is an ed25519 key derived from the quote id and the server master seed; no on-chain program is involved. The relayer sweeps the deposit into the treasury (the deposit key signs, the relayer pays the fee), mints the matching NEP-141 to the Tidepool root and credits it to the verifier with ft_transfer_call. The swap then settles like any NEAR-only swap. Deposits are credited at confirmed commitment.
Runnable: SOL_SECRET_KEY='[...]' RECIPIENT=you.testnet npm run sol-deposit in tidepool-examples.
Full quote request and response
The request below sets every required field (plus depositMode: "MEMO" where this route needs it). It is a dry quote, so nothing is created. The response is the real, complete body from the live deployment on 2026-10-30; prices move, so your amounts will differ. Optional fields such as appFees or referral are in Swap types.
curl -X POST https://www.usetidepool.tech/v0/quote -H 'content-type: application/json' -d '{
"dry": true,
"swapType": "EXACT_INPUT",
"slippageTolerance": 100,
"originAsset": "nep141:sol.tp-omft.testnet",
"depositType": "ORIGIN_CHAIN",
"destinationAsset": "nep141:usdc.tidepool-sandbox.testnet",
"amount": "5000000",
"refundTo": "13QkxhNMrTPxoCkRdYdJ65tFuwXPhL5gLS2Z5Nr6gjRK",
"refundType": "ORIGIN_CHAIN",
"recipient": "user.testnet",
"recipientType": "DESTINATION_CHAIN",
"deadline": "2030-01-01T00:00:00.000Z"
}'{
"correlationId": "7ba6d81b-efdf-43b0-9700-2b185df56fd8",
"timestamp": "2026-10-30T16:28:49.192Z",
"quoteRequest": {
"dry": true,
"swapType": "EXACT_INPUT",
"slippageTolerance": 100,
"originAsset": "nep141:sol.tp-omft.testnet",
"depositType": "ORIGIN_CHAIN",
"destinationAsset": "nep141:usdc.tidepool-sandbox.testnet",
"amount": "5000000",
"refundTo": "13QkxhNMrTPxoCkRdYdJ65tFuwXPhL5gLS2Z5Nr6gjRK",
"refundType": "ORIGIN_CHAIN",
"recipient": "user.testnet",
"recipientType": "DESTINATION_CHAIN",
"deadline": "2030-01-01T00:00:00.000Z"
},
"quote": {
"amountIn": "5000000",
"amountInFormatted": "0.005",
"amountInUsd": "0.4753",
"minAmountIn": "5000000",
"amountOut": "473325",
"amountOutFormatted": "0.473325",
"amountOutUsd": "0.4732",
"minAmountOut": "468591",
"timeEstimate": 60
},
"signature": "ed25519:5bPktYF3JrtMxh5YUpW5VPXK6c3XRrgijp4o2kMG6wFgKiP31RyvYHsjm9B3xfR4JkDTSMSzUMZrG6pFKg91qsfY"
}With "dry": false and a deadline between a minute and a day ahead, the quote also carries depositAddress, deadline and timeWhenInactive. See Quotes and pricing and the status response for what comes back after the deposit.
3. NEAR → Solana
Quote with a Solana destinationAsset, recipient: 'YourSolanaAddress' and recipientType: 'DESTINATION_CHAIN', then deposit on NEAR as usual. The verifier ft_withdraws the bridged token to the relayer, which pays out on Solana: for SPL it creates your associated token account if needed and sends the tokens (transferChecked, or mintTo if the treasury is short); for SOL it sends a system transfer. Payouts are signed first and the signature is recorded before sending, so a crash or retry never pays twice (the signature status is checked first).
Refunds
Same reasons as every route (DEADLINE_PASSED, PARTIAL_DEPOSIT, …). A refund with refundType: "ORIGIN_CHAIN" is signed by the deposit key and returned to refundTo on Solana. SOL refunds return the full deposit; the relayer pays the fee.
Limits
- Devnet resets. If devnet is reset, mints and balances are gone. The mint keypairs are kept, so the same addresses can be re-created.
- Rent. New SOL accounts need
0.00089088 SOL; a new token account costs about0.00204 SOL, paid by the relayer for payouts. - Associated token accounts, classic SPL only. Token-2022 mints are not supported.
- RPC. The relayer uses a configured devnet RPC and fails over to
api.devnet.solana.com; devnet congestion can delay a swap. - Treasury SOL. The relayer tops itself up from devnet airdrops when it can. If SOL is short, SOL payouts quote a
503.
Mapping to mainnet 1Click
Same request and response fields, blockchain: "sol", and the same asset id rule (nep141:sol.omft.near, nep141:sol-5ce3bf3a31af18be40ba30f721101b4341690186.omft.near for USDC, nep141:sol-c800a4bd850783ccb82c2b2c7e84175443606352.omft.near for USDT). Switch the base URL and swap the asset ids. Mainnet has no 0.005 SOL cap and uses real Solana addresses.
Verified flows
These ran end to end on the live Tidepool testnet against Solana devnet (real devnet transactions, real NEAR testnet settlement) on 2026-10-28:
- SOL → NEAR USDC (0.002 SOL): Solana deposit tx, NEAR settlement tx.
- NEAR USDC → Solana USDC payout (5 USDC): NEAR deposit tx, Solana payout tx.
PARTIAL_DEPOSITrefund (quoted 0.003 SOL, sent 0.002 SOL): Solana deposit tx, Solana refund tx. Final statusREFUNDED.- Over the cap: a 0.006 SOL quote is rejected with
400("SOL is capped at 0.005 SOL ... per swap"), before any deposit address is issued.
Community-built · not affiliated with NEAR. Tidepool is community-built and not affiliated with NEAR, Defuse or 1Click. Testnet only; test tokens have no value. Built by @realchriswilder.
Ethereum Sepolia bridge
Swap between Ethereum Sepolia (chain id 11155111) and NEAR testnet through Tidepool's testnet relayer, with 1Click-style deposit addresses, status and refunds.
Stellar testnet bridge
Swap between Stellar testnet and NEAR testnet through Tidepool's testnet relayer, with 1Click-style MEMO deposits, status and refunds. Native XLM (capped at 100 XLM) plus Tidepool test USDC and USDT.