Timechain
Search Donate
Sponsors
Cake Wallet, private Bitcoin and Monero walletSideShift.ai, no-signup crypto exchangeOrangeRock, non-custodial bitcoin spot and perps tradingBraiins Hashpower, buy and sell Bitcoin hashrateLayer Two Labs, drivechains for Bitcoin
S15 · E14 · 1:52:46

S15 E14: Nicolas Dorier on BTCPay, NBitcoin, TumbleBit & Coding Bitcoin in C#

8 Jan 2024 · by Vlad Costea · 12 min read
Published at block 824,906
MP3 (209 MB)

The audio keeps playing while you browse the site.

Read the transcript15,870 words, every line links to the minute it was said

Ask this episode

Embed this episode

Paste this on your site or blog. It is a small player that streams from here: no trackers, no cookies, no ads.

Preview the player

Nicolas Dorier is the guy who told BitPay that his faith was broken and that he would make them obsolete, then actually shipped the software. Six years into BTCPay Server, the self-hosted, zero-fee payment processor still feels less like a product and more like an open protocol: Tesla briefly wired it in during their Bitcoin-accepting window, custodial wallets quietly sit on top of the same stack, and half the FOSS payment scene still measures itself against Nicolas’s tower of C# libraries.

This Season 15 conversation is the origin story I had been chasing since I stole a BTCPay hoodie in Riga and got drafted into MCing a post-Baltic Honeybadger afterparty as penance. We talk SegWit activation before it was cool, why BTCPay was really a SegWit2x protest, TumbleBit and the Stratis detour, Programming the Blockchain in C#, colored coins versus Ordinals, and a Final Fantasy digression that somehow explains how you keep shipping a payment processor for the better part of a decade.

Emperor of the 404 Page

Every bitcoiner eventually learns that Nicolas has the best hair in Bitcoin. He will not argue the point. The BTCPay 404 page immortalized it, and the man who designed the logo (his wife, a few months into the project) somehow made a mark that looks like mountains if you are polite and like something else if you are French.

I showed up to the call wearing the hoodie Pavlenex swears I stole. In Riga there was a box of contributor merch. I tried a T-shirt, hated the vibe, put on the hoodie, asked if it looked good, and watched Pavlenex and Kukks negotiate my soul: keep the hoodie, MC our next event. Fair trade. Paying that debt with interviews feels cleaner than returning cotton.

Nicolas’s early BitcoinTalk archaeology is even funnier. Forty-five pages of posts he does not remember. A dead proposal for “memorable” addresses in the address-reuse era. Open-company API daydreams that never quite became a payment processor. The useful trivia that survived: Wallet of Satoshi runs BTCPay in the backend, and Bitrefill leans on NBXplorer, the UTXO tracker that sits under the same stack. Most people only know the top floor. Nicolas built the basement first.

NBitcoin, Then Layers, Then a Castle

Before BTCPay, Nicolas lived in the protocol basement. NBitcoin started as a learning project: copy Bitcoin into C#, grow a library, chase whatever the community was inventing. Then came NBXplorer. Then apps that needed a reliable way to watch UTXOs. Then BTCPay itself. He describes it as a tower: each floor depends on the one below, and someday he might build something on top of BTCPay. For now the castle is enough.

Competitors who promise a “simpler BTCPay for businesses” get a knowing smile. It always starts simple. One merchant asks for one tiny button. Six years later you are drowning in features and trying to make the complexity feel small again. LNBits, Swiss challengers, whoever ships next: same gravity well.

He also reminded me that open source is permissionless by design. Maybe LNBits eats BTCPay someday. He does not know. He does not have time to audit every rival. The beauty, in his words, is that nobody gets to declare which experiment is legitimate. You ship. The market keeps score.

Kukks Wanted Ethereum. Pavlenex Wanted U2F.

I pulled up GitHub archaeology on air because Nicolas’s memory of early contributors is gloriously foggy.

On February 12, 2018, Andrew “Kukks” filed issue #50: Ethereum is the second largest coin, so maybe integrate it? Nicolas replied the same day. Ethereum is too different, full nodes are heavy, BTCPay is unlikely to support it. Kukks offered to try anyway. Rockstar Dev pointed him at Nicolas’s Litecoin template video. The plot twist years later: Kukks became the person peeling altcoin support out of BTCPay core and into community-maintained plugins. The Ethereum tourist became the shitcoin bouncer. I screenshot the issue into their internal chat mid-podcast. Roots matter.

Pavlenex arrived one month later with issue #53: U2F via Ledger or Trezor on top of existing 2FA. Tamer ask. Same gravitational pull. His first GitHub identity was BitcoinShirt before the rename. Two first issues, fifty and fifty-three, and the pair became inseparable parts of the project I later interviewed in S11 E1.

Plugins are how BTCPay scales people, not just features. As the core grows, coordination gets harder. Plugins let mad scientists (Kukks’s unofficial title) ship NFC payments half-baked, watch who installs them, then promote winners into core with proper review. The trade-off is real: a LN Bank plugin bug burned users because fewer eyes review extensions. Core has had scary bugs too. Nicolas’s ethic is brutal honesty about risk, not theater about perfection.

SegWit2x Made BTCPay

Ask most people why BTCPay exists and you get the BitPay KYC story. Nicolas sharpened it. BitPay was in the SegWit2x camp, trying to migrate merchants onto a fork without explaining that they were leaving Bitcoin. That, plus the broader 2017 panic, is what “kicked in” the project.

He is blunt about the only time he truly feared for Bitcoin’s future: around May 2017, before BCH fully detonated. He sold some coins. Price later ripped. Twitter historians can call him weak hands. He calls it the only crash that actually scared him as a protocol person, not a price person.

On activation mechanics he was cooler. Prefer SegWit itself, BIP 148 preferred and BIP 149 acceptable on the old developer preference lists, but not religious about the soft-fork ritual. Completely against SegWit2x and the New York Agreement theater. He even spun up a dusty site called BIP-EXDS so developers could PGP-sign their preferences. Few used it. The gesture still reads like Nicolas: build a tool, even if the room is empty.

Jeff Garzik comes up as the SegWit2x architect who also shipped the infamous activation bug and later chased VeriBlock into altcoin oblivion. Nicolas doubts the bug was intentional self-sabotage. Garzik had other bad ideas afterward. Intentional or not, the New York Agreement fell apart, BCH had its meme season, and BTCPay kept compounding while CoinDesk still treated conflicts of interest as optional footnotes.

The Book, Hidden Wallet, and Mistakes on Mainnet

Before BTCPay was a brand, Nicolas was a Microsoft-certified trainer teaching companies how to write .NET. Programming the Blockchain in C# was the natural next lecture: teach Bitcoin the way he taught enterprise code, with diagrams, challenges, and skin in the game.

Adam “nopara73” Ficsor read it, moved it onto GitBook, and showed up in Tokyo around 2015 while Nicolas was in a tiny coworking space. Adam was building Hidden Wallet on Avalonia, years before the Wasabi rename. Nicolas was not sure Avalonia would survive. Adam never blinked. One year, then a year and a half of grinding before the first public Wasabi release, always focused on killing centralized mixers instead of chasing shiny side quests. That focus, Nicolas says, is why Wasabi worked. Legal scaffolding mattered too: tumbler liability terrified Nicolas when he was in the TumbleBit world; Adam found a structure that has held. For Adam’s own telling of that arc, see S13 E2.

The teaching story that stuck: in Tokyo, while training a Digital Garage team he had not yet joined, Nicolas made five students each hand him about ten dollars, sent them bitcoin to keys they generated, and told them the endgame was getting the money back. Abstract exercises lose people. Risking a few bucks does not. His line, which Adam later quoted back at the world: mistakes on mainnet are more memorable.

Indonesian, Japanese, and Korean translations of the book just appeared as pull requests, sometimes with zero comments. One day he wants to write Programming BTCPay Server in C#. Most days BTCPay itself eats the calendar.

Stratis, TumbleBit, and Name Hygiene

Yes, they brushed against Stratis. Nicolas calls every altcoin a shitcoin by default, then grants Stratis’s .NET crew actual respect as serious engineers. Collaboration shape: Nicolas on TumbleBit backend and Bitcoin support; they wanted a pretty Avalonia (or Electron) wallet UI and a full Bitcoin node in .NET. He never believed the full-node performance story. Sync was too slow. Liquidity for tumblers never showed up because nobody wanted the legal liability of being the tumbler. Wasabi later solved the social and legal puzzle better.

What he regrets is branding gravity. Stratis’s site and Crunchbase made him look like a core Stratis guy when he was a contractor on the Bitcoin side of a tumbler integration. In hindsight he should have been harsher about name association. The silver lining: library feedback from that era still improved NBitcoin and NBXplorer for the Bitcoin projects that mattered.

He will not spend scarce hours reverse-engineering every altcoin whitepaper. Even inside BTCPay there is code he did not write and cannot babysit. Andrew Poelstra and Jonas Nick talks go over his head until someone ships a library he can poke. That is how a payments engineer learns cryptography: through APIs, not vibes.

Colored Coins Were Ordinals With Worse Memes

Open Assets, Counterparty, Mastercoin/Omni, Rare Pepes: Nicolas worked colored coins when they were still a chapter in his book, complete with diagrams for issuing and transferring assets. Ordinal inscriptions feel new to people who arrived in 2023. To him they are another wave of the same tokenization itch, and he is not excited, because the previous waves starved.

He did tweet that the fee spike looked inorganic: mempool full, a bot story, sudden emptiness, sudden restart. Either hype that burns out like Ethereum NFTs, or deliberate spam with motives he finds mysterious. He is annoyed. He still does not want Bitcoin Core to wage a holy war. Miners and individual node policies can filter if they want. Stratum V2 pushing choice to hashers would kill a lot of pool drama. Paying high fees is, paradoxically, a vote that Bitcoin block space is worth buying. If you hate the price, outbid them.

His darker joke: someone should port the Ordinals stack to Litecoin and market it as the superior low-fee canvas so the circus migrates. Someone already did Litecoin Ordinals. Almost nobody cares, which is the punchline. He even floated apologizing to Ethereum for years of trash talk, because Ethereum absorbed the NFT pressure while Bitcoin enjoyed cheaper fees. He will not store savings there. He will gladly let other people pay rent on someone else’s casino.

Fungibility as a kill-switch for inscriptions does not convince him. Even confidential assets on Liquid hide amounts and asset types while leaving a transaction graph. Dedicated people will always find ways to embed non-fungible meaning if arbitrary data can land on-chain. Inevitable, annoying, not worth a Core crusade.

And HODLing? Holding money is using money. Savings change how you talk to a boss who threatens to fire you. Motion is not the only utility.

Local Bitcoin Service Providers, Not Another SaaS Cult

Ask Nicolas about the next two years and he shrugs toward the bug tracker. Day by day. Review PRs. Answer merchants who actually use the thing. He is not a merchant himself, so critical users are gold.

Two directions light him up. First, Nostr-adjacent tooling: Nostr Wallet Connect style protocols, Prism-like tip splitting for streamers and podcasters, recurring micro-support payments. Ignore Nostr long enough and you miss a whole combinatorial explosion when those standards meet BTCPay invoices.

Second, hyperbitcoinization as a local problem. Conference Twitter is not retail. Shopkeepers will not watch a BTCPay podcast unless a human they trust walks them through it. Nicolas wants tooling for local Bitcoin service providers: people who handhold merchants, earn a living spreading Bitcoin on the ground, and are not the classic Lightning service provider that skims every payment from a handful of wallets.

The spicy variant is stable channels (DLC-shaped agreements) between merchant and local provider so the merchant need not eat BTC volatility and need not trust Tether, which he bluntly calls a shitcoin that can freeze or rug. Price goes up, merchant pays the provider; price goes down, reverse. Settle often. Keep it local and technically boring.

The merchant app vision fits the same thesis: keys on the merchant device, Lightning plumbing rented from a local provider, ability to switch providers if one dies, so a busted LSP cannot steal merchant funds. Full nodes stay with the service layer. Retail gets sovereignty without pretending every cafe runs Bitcoin Core under the espresso machine.

IVPN and Cryptosteel, two Season 15 sponsors, already pay through BTCPay. Satochip was still on Coinbase Commerce when we checked live. Nicolas offered French-language conversion help. Spreading the word is half the job.

Final Fantasy Explains the Patience

I asked his favorite Final Fantasy. Seven or eight, maybe seven first. Then we fell into a twenty-minute spiral: Chocobos, Knights of the Round, Fort Condor, grinding the Midgar snake until the game breaks, Shinra as corporate Bitcoin metaphor versus Sephiroth as the actual final boss, whether Remake will sanitize the villains. He once beat weapons in the desert for a gold Chocobo. That is the same temperament that keeps NBXplorer green and BTCPay answering tickets.

He joked that Tomb Raider frustration (wanting boobs, getting polygons) is how a generation learned to hack consoles and write code. PlayStation RAM dongles. Curiosity as career.

I thanked him. He signed off like someone who still has a PR queue.

BTCPay’s promise in this episode is the same promise that made me keep the hoodie: make BitPay-shaped middlemen optional, keep merchants on actual Bitcoin, and build the boring infrastructure until the drama of 2017 looks like a bad spin-off nobody replays.

Listen to Nicolas Dorier on Spotify, Apple Podcasts, YouTube & More!

Watch on YouTube

Time stamps:

00:00:00 – Intro: BitPay obsolete, BTCPay at six years
00:01:48 – Best hair in Bitcoin and the 404 page
00:03:07 – Stealing the BTCPay hoodie in Riga
00:04:23 – Wife-designed logo (mountains vs French interpretation)
00:05:43 – BitcoinTalk archaeology and dead address standards
00:08:19 – Wallet of Satoshi and NBXplorer under Bitrefill
00:09:54 – NBitcoin layers: library, explorer, then BTCPay
00:11:06 – “Simpler than BTCPay” competitors and software gravity
00:15:31 – Kukks issue #50: please add Ethereum (2018)
00:16:32 – Kukks later removing altcoins into plugins
00:18:48 – Pavlenex issue #53: U2F with Ledger and Trezor
00:21:29 – 2017 scaling fear, selling before BCH, anti-SegWit2x
00:23:31 – SegWit preference list: BIP 148 / BIP 149
00:24:42 – BIP-EXDS and BitPay pushing 2x on merchants
00:26:07 – BTCPay as a SegWit2x reaction
00:27:20 – When the 2x fork effort collapsed
00:28:33 – Developers vs companies vs miners in the war
00:30:56 – Jeff Garzik, the activation bug, VeriBlock
00:35:31 – Newbie confusion, CoinDesk, and who actually cared
00:37:24 – Programming the Blockchain in C# and Microsoft trainer roots
00:39:24 – Adam nopara73, Hidden Wallet, Avalonia, Wasabi focus
00:40:36 – Tumbler legal risk and Wasabi’s structure
00:41:33 – Stratis, TumbleBit, and the .NET full node detour
00:43:28 – Regretting name association with a shitcoin pump
00:46:14 – Library feedback that still helped Bitcoin tooling
00:48:24 – No time for altcoin tourism; learn via libraries
00:51:58 – Poelstra, Nick, and understanding crypto by using code
00:53:28 – Plugins, Kukks the mad scientist, NFC, LN Bank risk
00:58:05 – “Mistakes on mainnet are more memorable”
01:01:01 – Book tour: translations, Open Assets, colored coins chapter
01:03:59 – Rockstar Dev’s pandemic contributor streams
01:06:17 – Ordinals as recycled colored-coin energy
01:08:31 – Inorganic fee spikes, spam framing, miner choice
01:10:57 – Outbid them; Litecoin Ordinals; thanking Ethereum for the NFT dump
01:14:28 – Teleburning NFTs onto Bitcoin and collector markets
01:17:03 – Fungibility, confidential assets, and why spam is hard to kill
01:19:40 – Why not Monero/Zcash; HODLing as behavioral money use
01:22:30 – Future focus: BTCPay daily work and Nostr Wallet Connect
01:24:19 – Prism-style splits and combinatorial tooling
01:26:53 – Local Bitcoin service providers for retail merchants
01:28:55 – Stable channels / DLCs instead of Tether for merchants
01:30:24 – Merchant app: keys local, switchable LSP infrastructure
01:32:38 – Sponsors already on BTCPay; Satochip still on Coinbase
01:35:06 – Favorite Final Fantasy and the long game digression
01:39:21 – Bitcoin as Shinra, Sephiroth as the real boss
01:48:41 – Grinding FF explains BTCPay patience
01:50:18 – Tomb Raider, PlayStation hacks, why their generation codes
01:52:34 – Closing

Verify this episode

This is the SHA-256 fingerprint of the MP3 as published here, timestamped in the Bitcoin blockchain with OpenTimestamps. If one byte of the file changes, the fingerprint changes.

SHA-256
03d5db0293e12915c4e12be4d2ffb1198355d0542abbe2c633221a3bb9035710
Proof
2023-12-31_s15_e14_nicolas_dorier_on_btcpay__nbitcoin__tumblebit__coding_bitcoin_in_c.mp3.ots · all episode hashes (proof)
Status
Anchored in Bitcoin block 974,312
How to check it yourself
  1. Download the MP3 and the proof into the same folder.
  2. Run sha256sum 2023-12-31_s15_e14_nicolas_dorier_on_btcpay__nbitcoin__tumblebit__coding_bitcoin_in_c.mp3 (on a Mac: shasum -a 256 2023-12-31_s15_e14_nicolas_dorier_on_btcpay__nbitcoin__tumblebit__coding_bitcoin_in_c.mp3). The result must match the SHA-256 above.
  3. Install the OpenTimestamps client (pip install opentimestamps-client) and run ots verify 2023-12-31_s15_e14_nicolas_dorier_on_btcpay__nbitcoin__tumblebit__coding_bitcoin_in_c.mp3.ots. It hashes the MP3 again and checks the proof against your own Bitcoin node, then prints the block and the date the file existed by. Without a node, ots info 2023-12-31_s15_e14_nicolas_dorier_on_btcpay__nbitcoin__tumblebit__coding_bitcoin_in_c.mp3.ots shows the block height to look up in any block explorer.

Share: X · Email · Link

Related

Comments

Comments run on my own server. No ads, no trackers.

0:000:00