17.8 years

That's how long the 50 BTC reward from Bitcoin's block 1 has been sitting unspent, according to the script below.

It's a timely question. On November 13, 2026, two mining rewards from September 2010, 50 BTC each, moved for the first time in more than 16 years (Decrypt and The Block covered it; Whale Alert flagged the first move at 04:08 UTC). Each spend paid 1,110 satoshis in fees, and a later transaction combined coins from both wallets.

If you try to check a wallet like that with an address search, you can get a confusing answer. Many 2009 and 2010 coinbase outputs paid a raw public key (P2PK), not an address. Explorers can derive an address from the key, but the cleanest question to ask is about the output itself: was txid:vout spent, and when?

The script

It uses the public Esplora API (Blockstream's by default, mempool.space works too) and Node 18+'s built-in fetch. No key, no dependencies.

// outspend.mjs: was one output spent, and how long did it sit first? // usage: node outspend.mjs <txid> <vout> const API = process.env.ESPLORA || 'https://blockstream.info/api'; const [txid, vout = '0'] = process.argv.slice(2); const get = async (p) => { const r = await fetch(API + p); if (!r.ok) throw new Error(`${p}: HTTP ${r.status}`); return r.json(); }; const day = (t) => new Date(t * 1000).toISOString().replace('T', ' ').slice(0, 16) + ' UTC'; const tx = await get(`/tx/${txid}`); const out = tx.vout[Number(vout)]; console.log(`${out.value / 1e8} BTC · ${out.scriptpubkey_type} · created ${day(tx.status.block_time)} (block ${tx.status.block_height})`); const sp = await get(`/tx/${txid}/outspend/${vout}`); if (!sp.spent) { const yrs = (Date.now() / 1000 - tx.status.block_time) / (365.25 * 86400); console.log(`unspent, still there after ${yrs.toFixed(1)} years`); } else { const s = await get(`/tx/${sp.txid}`); const yrs = (s.status.block_time - tx.status.block_time) / (365.25 * 86400); console.log(`spent ${day(s.status.block_time)} after ${yrs.toFixed(1)} years, fee ${s.fee} sat`); for (const o of s.vout) console.log(` -> ${(o.value / 1e8).toFixed(8)} BTC ${o.scriptpubkey_type}`); } 

Two runs

Block 1's coinbase:

$ node outspend.mjs 0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098 0 50 BTC · p2pk · created 2009-01-09 02:54 UTC (block 1) unspent, still there after 17.8 years 

And output 0 of the transaction in block 170, the 10 BTC Satoshi Nakamoto sent Hal Finney in the first person-to-person bitcoin transaction:

$ node outspend.mjs f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16 0 10 BTC · p2pk · created 2009-01-12 03:30 UTC (block 170) spent 2010-11-16 20:39 UTC after 1.8 years, fee 0 sat -> 10.00000000 BTC p2pkh 

Note the output types. Both started as p2pk: a payment to a public key, with no address in the script. When the block 170 coins moved, they went to a p2pkh output, the address format most wallets show.

What to do with it

  • Watch a list of old outputs: loop over txid:vout pairs and alert when spent flips to true. That is roughly what whale-tracking bots do.
  • Read the spend, not just the flag. Friday's two spends split 50 BTC into about 49.99 + 0.01 and 49 + 1. The split, the fee and any later consolidation are the only facts the chain gives you. Ownership and intent are not on it.
  • Don't hammer a public API. Add a delay between requests, or run your own Esplora or Electrum server.

Sources

  • Decrypt, "Dormant Bitcoin Wallets Wake Up After 16 Years, Moving $6.9 Million" (Nov 13, 2026)
  • The Block, "From $6 to $6.9 million: Two dormant Bitcoin addresses wake up to move 100 BTC after more than 16 years" (Nov 13, 2026)
  • Esplora HTTP API docs: https://github.com/Blockstream/esplora/blob/master/API.md