Tidepooltestnet

Bitcoin testnet4 bridge

Swap native testnet4 BTC (tBTC) and NEAR testnet tokens through Tidepool's testnet relayer: per-quote native segwit deposit addresses, no memo, status and refunds. Native BTC only, capped at 0.005 BTC per swap.

Testnet only, custodial, trusted relayer. This route is run by Tidepool as its own testnet service. It is not a NEAR, Omni Bridge or 1Click bridge, and the tBTC has no value. BTC is capped at 0.005 BTC per swap, payout or refund because the treasury is funded by small public faucets. Read Test bridges for what you are trusting.
Availability. The Bitcoin route appears in GET /v0/tokens (blockchain: "btc") and in /v0/health under bridges.chains.btc only while it is live. If the token is not listed, the route is not active on that deployment yet. Quotes that pay out BTC answer 503 while the treasury is too low.

Token

Like 1Click mainnet's native nep141:btc.omft.near, Tidepool lists native BTC only (no stablecoins on this chain).

WhatValue
ChainBitcoin testnet4, blockchain: "btc"
Native BTC8 decimals (satoshis), asset id nep141:btc.tp-omft.testnet
Treasury (payouts, refunds, sweep destination)tb1qy2tthlq2ntnjvk40payyuwpnzaf365h02ze0qr
Confirmations required1
Cap / minimum0.005 BTC (500,000 sats) / 0.0001 BTC (10,000 sats) per swap leg

Deposit model: per-quote addresses, no memo

Bitcoin needs no memo, and 1Click itself gives Bitcoin quotes a plain deposit address. Tidepool does the same: every BTC-origin quote with depositType: "ORIGIN_CHAIN" gets its own native segwit tb1q… depositAddress (a key derived from the quote id and the server master seed). Send the exact amountIn in satoshis to it from any testnet4 wallet.

  • depositMode is SIMPLE (the default). ANY_INPUT deposits are accepted, but an ANY_INPUT quote that pays out BTC is rejected.
  • POST /v0/deposit/submit with txHash and depositAddress is optional: the relayer polls public Esplora APIs and detects the deposit anyway.
  • After 1 confirmation the relayer sweeps every confirmed output of the deposit address to the treasury in one transaction (the treasury absorbs the miner fee, so the credited amount equals what you sent), mints the NEP-141 on NEAR and credits it to the verifier. The sweep appears in the swap's tidepool.explorer list.
  • Send the full amount in one transaction. A short deposit is refunded like on every other route.

The BTC cap and minimum

Any swap with a BTC leg is rejected at quote time with a 400 if the BTC amount (input or output) is above 0.005 BTC (500,000 sats) or below 0.0001 BTC (10,000 sats, so miner fees stay small next to the amount). It covers swaps, payouts and refunds. Also:

  • A payout of BTC is paid from the treasury, so quotes answer 503 if the treasury cannot cover the payout plus the miner fee.
  • ANY_INPUT quotes that pay out BTC are rejected.
  • Recipients and refundTo must be valid testnet addresses (tb1…, or legacy m…/n…/2…).

1. Get tBTC

The Tidepool faucet never drips BTC, to a wallet or to your intents balance (POST /v0/faucet with chain: "btc" answers 400 and names these links). Use a public testnet4 faucet:

Make sure the faucet is a testnet4 faucet (testnet3 coins are on a different chain). The address format is the same.

2. BTC → NEAR

const quote = await OneClickService.getQuote({
  dry: false, swapType: 'EXACT_INPUT', slippageTolerance: 100,
  originAsset: 'nep141:btc.tp-omft.testnet',
  destinationAsset: 'nep141:usdc.tidepool-sandbox.testnet',
  amount: '100000',                          // 0.001 BTC in satoshis
  depositType: 'ORIGIN_CHAIN',
  refundTo: 'tb1qYourTestnet4Address', refundType: 'ORIGIN_CHAIN',
  recipient: 'you.testnet', recipientType: 'DESTINATION_CHAIN',
  deadline: new Date(Date.now() + 60 * 60_000).toISOString(),
});
const { depositAddress, amountIn } = quote.quote;
// Send amountIn satoshis to depositAddress on testnet4, then (optional):
await OneClickService.submitDepositTx({ txHash: '<btc txid>', depositAddress });
// Poll GET /v0/status?depositAddress=...

Give the quote a generous deadline: testnet4 blocks take about 10 minutes, but can be slower or faster. Runnable: RECIPIENT=you.testnet npm run btc-deposit in tidepool-examples (it needs BTC_PRIVATE_KEY_WIF, a testnet4 key with a little tBTC, and prints the mempool.space links).

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:btc.tp-omft.testnet",
  "depositType": "ORIGIN_CHAIN",
  "destinationAsset": "nep141:usdc.tidepool-sandbox.testnet",
  "amount": "100000",
  "refundTo": "tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx",
  "refundType": "ORIGIN_CHAIN",
  "recipient": "user.testnet",
  "recipientType": "DESTINATION_CHAIN",
  "deadline": "2030-01-01T00:00:00.000Z"
}'
{
  "correlationId": "c91a0e71-80c9-4689-be4f-b71b69c89a3a",
  "timestamp": "2026-10-30T16:28:51.397Z",
  "quoteRequest": {
    "dry": true,
    "swapType": "EXACT_INPUT",
    "slippageTolerance": 100,
    "originAsset": "nep141:btc.tp-omft.testnet",
    "depositType": "ORIGIN_CHAIN",
    "destinationAsset": "nep141:usdc.tidepool-sandbox.testnet",
    "amount": "100000",
    "refundTo": "tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx",
    "refundType": "ORIGIN_CHAIN",
    "recipient": "user.testnet",
    "recipientType": "DESTINATION_CHAIN",
    "deadline": "2030-01-01T00:00:00.000Z"
  },
  "quote": {
    "amountIn": "100000",
    "amountInFormatted": "0.001",
    "amountInUsd": "77.4130",
    "minAmountIn": "100000",
    "amountOut": "77083295",
    "amountOutFormatted": "77.083295",
    "amountOutUsd": "77.0646",
    "minAmountOut": "76312462",
    "timeEstimate": 60
  },
  "signature": "ed25519:4oHbZYrC7HKWjHi9Y2xSc4XDEpFPDPh4PdsygwkWZ1KMC96Atohxa6MLcVQLUpFQuFh6EGLe3K9aWf2ioEHAwv6m"
}

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 → BTC

Quote with destinationAsset: 'nep141:btc.tp-omft.testnet', recipient: 'tb1qYourAddress' and recipientType: 'DESTINATION_CHAIN', then deposit on NEAR as usual. The verifier ft_withdraws the bridged token to the relayer, which pays out on testnet4 from the treasury; you receive exactly the quoted amount and the treasury pays the miner fee. Payouts are signed first and the signed transaction is recorded before it is broadcast, so a crash or retry re-broadcasts the same bytes and never pays twice.

Refunds

Same reasons as every route (DEADLINE_PASSED, PARTIAL_DEPOSIT, …). A refund with refundType: "ORIGIN_CHAIN" is paid from the treasury to refundTo on testnet4 in the amount you sent.

Limits

  • Testnet4 resets are rare but possible; after one the balances are gone and the route has to be bootstrapped again.
  • Confirmation time. A deposit is only credited after 1 confirmation, so a swap can wait on the next block. Payouts are broadcast as soon as the swap settles on NEAR and then need a block to confirm.
  • Fees. The relayer pays miner fees from the treasury (at least 2 sat/vB, following the half-hour estimate of mempool.space). The fee is not deducted from your swap.
  • One treasury-signed transaction at a time. Payouts share the treasury's coins and are serialized (unconfirmed change is tracked, so back-to-back payouts work).
  • Unreachable destinations. If a payout keeps being rejected, the swap stays in PROCESSING with a note and needs operator attention.
  • Public APIs. The relayer reads and broadcasts through the public mempool.space, blockstream.info and mempool.ninja testnet4 Esplora APIs (override: BTC_API_URLS), with failover, a shared read cache and exponential backoff on 429. Public hosts rate-limit shared cloud IPs, so a deposit address is only polled every 20 seconds (every 2 minutes once its quote has expired) and rate limits can still delay a swap by a few minutes. GET /v0/health reports bridges.chains.btc.ok: false while the treasury cannot be read.

Mapping to mainnet 1Click

Same request and response fields, blockchain: "btc", a plain depositAddress and no memo. Mainnet's asset is nep141:btc.omft.near (8 decimals); on Tidepool it is nep141:btc.tp-omft.testnet. Take the asset id from GET /v0/tokens of the environment you are calling. Mainnet has no 0.005 BTC cap and uses real mainnet addresses (bc1…).

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.

On this page