<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[bitcoin++'s Insider Edition]]></title><description><![CDATA[bitcoin++ is an international bitcoin dev conference series. "Insider Edition" is our newsroom covering what's happening in and across the bitcoin++ universe and beyond.]]></description><link>https://insider.btcpp.dev</link><image><url>https://substackcdn.com/image/fetch/$s_!Y_ng!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30eeeceb-d343-4c5d-93d2-4da0d7357725_650x650.png</url><title>bitcoin++&apos;s Insider Edition</title><link>https://insider.btcpp.dev</link></image><generator>Substack</generator><lastBuildDate>Tue, 03 Nov 2026 14:27:07 GMT</lastBuildDate><atom:link href="https://insider.btcpp.dev/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[btcplusplus LLC]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[hello@btcpp.dev]]></webMaster><itunes:owner><itunes:email><![CDATA[hello@btcpp.dev]]></itunes:email><itunes:name><![CDATA[~nifty~]]></itunes:name></itunes:owner><itunes:author><![CDATA[~nifty~]]></itunes:author><googleplay:owner><![CDATA[hello@btcpp.dev]]></googleplay:owner><googleplay:email><![CDATA[hello@btcpp.dev]]></googleplay:email><googleplay:author><![CDATA[~nifty~]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[New Security Policy — Last Week in Bitcoin (Oct 26 - Nov 01)]]></title><description><![CDATA[Hi Insiders.]]></description><link>https://insider.btcpp.dev/p/new-security-policy-last-week-in</link><guid isPermaLink="false">https://insider.btcpp.dev/p/new-security-policy-last-week-in</guid><dc:creator><![CDATA[Tuma (I WILL NEVER DM YOU)]]></dc:creator><pubDate>Mon, 02 Nov 2026 15:03:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!1zTq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec7f58c-4a32-419f-b80a-78c2a7765b80_1600x900.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hi Insiders. This is Tuma, open-source reporter from the Insider Edition.</em></p><p><em>In this week&#8217;s update we feature Nut November, the month-long hackathon of the Cashu ecosystem coming back for the second edition.</em></p><p><em>We also cover several news from the Bitcoin ecosystem. A new BTCPay Server vulnerability has been discovered, Fedimint is experimenting with the Ark protocol through Bark, Librer&#237;a de Satoshi is rebranding to ISMOS, and the updated security policy in Bitcoin Core.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1zTq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec7f58c-4a32-419f-b80a-78c2a7765b80_1600x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1zTq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec7f58c-4a32-419f-b80a-78c2a7765b80_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1zTq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec7f58c-4a32-419f-b80a-78c2a7765b80_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1zTq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec7f58c-4a32-419f-b80a-78c2a7765b80_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1zTq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec7f58c-4a32-419f-b80a-78c2a7765b80_1600x900.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1zTq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec7f58c-4a32-419f-b80a-78c2a7765b80_1600x900.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2ec7f58c-4a32-419f-b80a-78c2a7765b80_1600x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:347184,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://insider.btcpp.dev/i/223152949?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec7f58c-4a32-419f-b80a-78c2a7765b80_1600x900.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1zTq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec7f58c-4a32-419f-b80a-78c2a7765b80_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1zTq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec7f58c-4a32-419f-b80a-78c2a7765b80_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1zTq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec7f58c-4a32-419f-b80a-78c2a7765b80_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1zTq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ec7f58c-4a32-419f-b80a-78c2a7765b80_1600x900.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h1><strong>Highlights from the Bitcoin developer ecosystem</strong></h1><p><em>I spent 10+ hours in open-source developer calls in the Bitcoin ecosystem last week. Here is what caught my eye</em>:</p><ul><li><p><a href="https://nutnovember.org/">Nut November</a> &#8212; the month-long hackathon of the Cashu ecosystem &#8212; comes back for its second edition.</p><ul><li><p>During the monthly call, on Thursday 29th, Cashu developers announced the second edition of Nut November, a month-long hackathon focused on Cashu.</p></li><li><p>The event features 6 different prizes. Other than the best overall, developers can participate to win a prize for the most difficult technical challenge, the craziest experiment, the best design, and the best tool for value4value. A special prize will also be awarded to first-time contributors to the Cashu ecosystem.</p></li><li><p>At the time of writing, the prize-pool amounts to more than 1 milion sats. It is possible to contribute directly to the pool on the hackathon website.</p></li></ul></li></ul><div><hr></div><h1><strong>A BIPs Update</strong></h1><p><em>In the last days there was some movement in the <a href="https://github.com/bitcoin/bips">BIP repository</a>. Specifically, one new BIP has been assigned a number by BIP maintainer <a href="https://github.com/murchandamus">Murchandamus</a>.</em></p><h2><strong>Numbered BIPs</strong></h2><p><em>A list of recently published BIPs</em></p><h3><strong>BIP333: BIP324 One-Byte Message Type ID Alias Assignment</strong></h3><p><strong>Authors</strong>: <a href="https://github.com/ajtowns">Anthony Towns</a></p><p><strong>Assigned On</strong>: October 28th, 2026</p><p><strong>Layer</strong>: Peer Services</p><p><a href="https://github.com/bitcoin/bips/pull/2301">PR2301</a> introduces BIP333, which defines a new <code>set324alias</code> message that permits peers using <a href="https://github.com/bitcoin/bips/blob/master/bip-0324.mediawiki">BIP324</a> &#8212; version 2 of the P2P encrypted transport protocol &#8212; to assign one-byte message type ID aliases to improve bandwidth usage for their outbound messages. BIP324 assigns one-byte IDs via a fixed table, requiring centralized coordination and introducing risks of conflicts. This new proposal allows peers to choose their own one-byte IDs at runtime for their own outgoing messages.</p><div><hr></div><h1>Other News from the Bitcoin World</h1><ul><li><p><strong>BTCPay Server Vulnerability</strong>: On Sunday, November 1st, the BTCPay Server team <a href="https://x.com/BtcpayServer/status/2117020340815819262">warned users</a> that they were receiving reports of hot wallets being drained. The team recommended to shut down instances to prevent loss of funds</p><ul><li><p>The vulnerability <a href="https://x.com/BtcpayServer/status/2117106238123123008">was confirmed</a> this morning, November 2nd. The BTCPay Server team identified an attack vector targeting instances of the software running versions v2.4.1 and older. At the time of writing, no details about the vulnerability were released.</p></li><li><p>According to the team, users running v2.4.7 &#8212; the latest release &#8212; seems not to be affected by the vulnerability, since no credible report has been produced. The team recommends keeping instances up-to-date with the latest security releases.</p></li></ul></li><li><p><strong>Fedimint &lt;&gt; Bark</strong>: Fedimint creator Eric Sirion <a href="https://x.com/EricSirion/status/2115903835621171395">published</a> a video demoing a Fedimint Lightning Gateway based on Bark &#8212; the Ark implementation by Second.</p><ul><li><p>A Federation usually needs to run a Lightning Node to connect its users to the Lightning Network. This experiment demonstrated the possibility to run a Federation&#8217;s Gateway based on a simple Ark wallet.</p></li></ul></li><li><p><strong>Librer&#237;a de Satoshi is now ISMOS</strong>: From the largest technical education organization focused on teaching Bitcoin to Spanish-speaking individuals, Librer&#237;a de Satoshi is evolving into a global, full developer pipeline that aims to bootstrap careers in the freedom tech and open-source as ecosystem, called ISMOS. Check out my <a href="https://x.com/btcinsider__/status/2116214127173525790">latest article</a> about ISMOS.</p></li><li><p><strong>Security policy update in Bitcoin Core</strong>: Following the wave of LLM-assisted vulnerability reports, Bitcoin Core developers <a href="https://groups.google.com/g/bitcoindev/c/70VSp_ARD5Q">decided</a> to update the security policy of the reference implementation.</p><ul><li><p>The update covers those vulnerabilities that are deemed &#8220;easily discoverable&#8221; thanks to the help of LLM-assisted tools. For this specific case, security patches will be releases as soon as possible and the fix backported to any maintained version.</p></li><li><p>The new rule has already been applied. Three vulnerabilities have been fixed and disclosed right away &#8212; namely <a href="https://github.com/bitcoin/bitcoin/pull/36665">PR3665</a>, <a href="https://github.com/bitcoin/bitcoin/pull/36667">PR36667</a>, and <a href="https://github.com/bitcoin/bitcoin/pull/36669">PR36669</a>. Since these fixes have been merged after v32.0 had already been tagged, the major release was never published. Instead, <a href="https://github.com/bitcoin/bitcoin/releases/tag/v32.1">v32.1</a> &#8212; containing those fixes &#8212; has been officially published this week.</p></li></ul></li></ul><div><hr></div><h1>More from BTC++ Insider Edition</h1><h3>News Hour</h3><ul><li><p><a href="https://x.com/btcinsider__/status/2116214009187959182">BTC++ News Hour</a>: Check out our Friday livestream, where Matthew Vuk and I discuss the most interesting news of the week from the Bitcoin developer ecosystem. This time, we hosted <a href="https://x.com/Dulce_xyz">Dulce Villarreal</a> to discuss the recent rebranding of Librer&#237;a de Satoshi to <a href="https://x.com/ISMOSxyz">ISMOS</a>.</p></li></ul><h3>Videos</h3><ul><li><p><a href="https://x.com/btcinsider__/status/2114779092163682619">James Pierog &#8212; BTC++ Insider Interviews</a>: James Pierog &#8212; co-founder and CEO of Glimpse &#8212; talks to the Insider about the motivations behind building a prediction market on Bitcoin.</p></li><li><p><a href="https://x.com/btcinsider__/status/2115093267876581447">Jesse Shrader &#8212; BTC++ Insider Interviews</a>: Jesse Shrader &#8212; Amboss co-founder &#8212; explains to the Insider why he believes embracing stablecoins can benefit Bitcoin and the Lightning Network, and why he&#8217;s excited about Wavelength.</p></li><li><p><a href="https://x.com/btcinsider__/status/2115141482042855544">Dario Nakamoto &#8212; BTC++ Insider Interviews</a>: Dario Nakamoto of Lightning Labs explains to the Insider how Wavelength works and how VTXOs carry Taproot Assets, secured by the Ark policy tree.</p></li><li><p><a href="https://x.com/btcinsider__/status/2115443479702872137">Alessandro Grasso &#8212; BTC++ Insider Interviews</a>: Alessandro Grasso &#8212; Career Service Specialist of Blox Space &#8212; talks to the Insider about how the Turin hub channels the city&#8217;s Bitcoin ecosystem by connecting local talent with the companies hiring them.</p></li><li><p><a href="https://x.com/btcinsider__/status/2115503866573701624">Birk &#8212; BTC++ Insider Interviews</a>: Birk &#8212; COO of the RGB Association &#8212; explains to the Insider how RGB brings digital assets and private contracts to Bitcoin through client-side validation and off-chain, UTXO-based transfers.</p></li><li><p><a href="https://x.com/btcinsider__/status/2115852654295257339">Dario Zeugmaster&#8212; BTC++ Insider Interviews</a>: Cashu developer Dario demos live to the Insider tap-to-pay UX on Nucula: open hardware for &#8220;everything that used to have a coin slot.&#8221; Vending machines, laundromats, ticketing.</p></li></ul><h3>Articles</h3><ul><li><p><a href="https://insider.btcpp.dev/p/fail-does-not-fail-the-process-this">&#127875; FAIL does not fail the process - This Week in Bitcoin Core #64</a></p></li><li><p><a href="https://x.com/btcinsider__/status/2116214127173525790">Librer&#237;a de Satoshi is now ISMOS</a></p></li></ul><div><hr></div><p><em>Looking for an opportunity to join up with some bitcoin devs in person? Join us in</em> <a href="https://btcpp.dev/seoul?code=TUMA20">Seoul</a> <em>this November 5-6 to talk about privacy in Bitcoin!</em></p>]]></content:encoded></item><item><title><![CDATA[🎃 FAIL does not fail the process - This Week in Bitcoin Core #64]]></title><description><![CDATA[A ghostly FAIL haunts stderr, and the process lives on &#128123;]]></description><link>https://insider.btcpp.dev/p/fail-does-not-fail-the-process-this</link><guid isPermaLink="false">https://insider.btcpp.dev/p/fail-does-not-fail-the-process-this</guid><dc:creator><![CDATA[kevkevin]]></dc:creator><pubDate>Fri, 30 Oct 2026 14:17:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Y_ng!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30eeeceb-d343-4c5d-93d2-4da0d7357725_650x650.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hello &#128075; folks, I&#8217;m Kevkevin. I&#8217;m an open-source developer and reporter for Insider Edition. Happy Halloween &#127875;! The scariest thing this week was a memory bug, and Bitcoin Core moved fast to put it to rest.</p><p><code>32.1</code> came out quickly because of security fixes. <a href="https://bitcoincore.org/en/2026/10/28/disclose-tcp-oom/">CVE-2026-117350</a> let a peer exhaust a node&#8217;s memory by sending TCP urgent data on anything other than Linux. It was reported on 2026-10-23, and <code>32.1</code>, <code>31.2</code>, <code>30.4</code>, and <code>29.5</code> were all out by 2026-10-28.</p><p>On the merge side, the fuzz targets got a reachability tracker. A missed goal leaves a ghostly <code>FAIL</code> on stderr, but the process still exits zero unless <code>FUZZ_ENFORCE_REACHABILITY=1</code>. And <code>-acceptnonstdtxn=1</code> on test nets now checks only consensus flags, so non-standard scripts can be relayed and mined.</p><h4>Merged PR&#8217;s</h4><h5>Every week, several changes are officially added to Bitcoin Core. This week, 27 changes were merged. Here are some I found interesting this week.</h5><ul><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/36098">fuzz: add corpus reachability checks</a></strong> by <strong><a href="https://github.com/HowHsu">Hao Xu</a></strong></p></li></ul><p>A <code>ReachabilityGoal</code> is identified by the <code>std::source_location</code> of its declaration: file, line, and column. <code>RegisterReachabilityGoal</code> runs before any input, and <code>ObserveReachabilityGoal</code> ORs a hit into that goal for the life of the process. The tracker destructor writes one line per goal, <code>PASS</code> or <code>FAIL reachability goal "..."</code>, with the file, line, and column.</p><p><code>FUZZ_ENFORCE_REACHABILITY</code> is read in the constructor. Unset or <code>0</code> leaves enforcement off, so a miss is only that line. <code>1</code> makes a miss call <code>std::_Exit(EXIT_FAILURE)</code> after flushing stderr. Any other value aborts immediately. The instrumented targets include <code>cmpctblock</code>, <code>p2p_handshake</code>, <code>package_eval</code>, <code>process_message</code>, <code>tx_pool</code>, <code>utxo_snapshot</code>, and <code>validation_load_mempool</code>. He replayed the current qa-assets corpora for those targets with <code>FUZZ_ENFORCE_REACHABILITY=1</code>.</p><ul><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/29843">policy: Allow non-standard scripts with -acceptnonstdtxn=1 (test nets only)</a></strong> by <strong><a href="https://github.com/ajtowns">Anthony Towns</a></strong></p></li></ul><p><code>-acceptnonstdtxn=1</code> now also skips non-mandatory script checks. The option stays test-net only. <code>MemPoolAccept::PolicyScriptChecks</code> used to call <code>CheckInputScripts</code> with <code>STANDARD_SCRIPT_VERIFY_FLAGS</code> unconditionally. The flag set is now <code>STANDARD_SCRIPT_VERIFY_FLAGS</code> when <code>require_standard</code> is set, and <code>m_all_consensus_script_flags</code> when it is not. Those are the flags that may be enforced as consensus for some chain state, so a transaction that could become consensus-invalid is still rejected.</p><p><code>CheckInputScripts</code> takes <code>CheckInputScriptsFor::Mempool</code> or <code>::Block</code>. A script failure on the mempool path is <code>TX_NOT_STANDARD</code> and <code>mempool-script-verify-flag-failed</code>. On the block path it is <code>TX_CONSENSUS</code> and <code>block-script-verify-flag-failed</code>. In <code>p2p_segwit.py</code>, spending a higher-version witness output is now accepted on the node with <code>-acceptnonstdtxn</code>.</p><h5>There are always changes being updated and reviewed in real-time. Here are some notable PR&#8217;s that are still up and looking for reviews.</h5><ul><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/36437">orphanage: Fix orphan reconsideration disconnect hole, add 1p1c invariant harness</a></strong> by <strong><a href="https://github.com/instagibbs">Gregory Sanders</a></strong></p></li></ul><p>The first commit adds <code>p2p_1p1c_liveness</code>, an end-to-end fuzz target for parent and child relay. It drives a real <code>PeerManager</code> with real messages and validation. If an honest peer announces the child of an acceptable parent and child, the child has to reach the mempool within a bounded time, whatever the other peers do. Known liveness holes are flags on the target that turn the check off once that hole is open.</p><p>The second commit hands reconsideration to a remaining announcer when the marked announcement is erased, and removes the flag for this hole. The follow-up that fills the remaining holes is #36506. On the channel he said v33 is the target for that follow-up.</p><blockquote><p>With that flag turned off, the target finds this bug on master from an empty corpus in under an hour on one core.</p></blockquote><h4>IRC meeting notes</h4><h5>Every week on Thursday, there is an IRC meeting. Here are some short notes from that meeting.</h5><pre><code><code>--- Topic 1 ---
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: #topic Fuzzing WG Update (eugenesiegel, marcofleon)
&#120306;&#120322;&#120308;&#120306;&#120315;&#120306;&#120320;&#120310;&#120306;&#120308;&#120306;&#120313;: no update from my side

--- Topic 2 ---
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: #topic QML GUI WG Update (johnny9dev)
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: Merged in our integration test fixtures
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: We're working through some multi wallet management improvements and threading
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: Once those are in well be ready to focus in building up the staging branch.
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: That's all for now.

--- Topic 3 ---
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: #topic QA WG Update (brunoerg)
&#120303;&#120319;&#120322;&#120315;&#120316;&#120306;&#120319;&#120308;: just uploaded the results of a mutation testing for src/node/blockstorage.cpp, there are some interesting cases, in case anyone wants to see: https://mutanthub.space/projects/bitcoin/bitcoin/code/src/node/blockstorage.cpp?ref=4fe28722a572793da7614734a0c9cc8e1adc751a
&#120303;&#120319;&#120322;&#120315;&#120316;&#120306;&#120319;&#120308;: That's all
&#120326;&#120302;&#120315;&#120304;&#120326;: brunoerg these are some interesting mutations. I feel like this might actully be something an LLM might be good at writing fixes for.

--- Topic 4 ---
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: that's all for the working groups! anything else to discuss?
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: i think it's pretty impressive how we managed to crank out all those releases this week, kudos to everyone helping out
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: as per https://bitcoincore.org/en/2026/10/28/disclose-tcp-oom/ : going from first report on 2026-10-23 to finishing release on 2026-10-28 must be a record?
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: stickies-v +1, good work to everyone including builders for being available to get it done

--- Topic 5 ---
&#120326;&#120302;&#120315;&#120304;&#120326;: just curious, what exactly is the merge policy or is there one.
&#120326;&#120302;&#120315;&#120304;&#120326;: I've submitted some small patches over the years, but never really been clear on that
&#120326;&#120302;&#120315;&#120304;&#120326;: and the user docs on contributing doesn't really say anything of use
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: afaik it's not documented explicitly no, it's also really hard to quantify that in exact non-gameable criteria
&#120326;&#120302;&#120315;&#120304;&#120326;: got it
&#120326;&#120302;&#120315;&#120304;&#120326;: in othere projects, there's sort of a two maintaner ack policy sometimes
&#120326;&#120302;&#120315;&#120304;&#120326;: wasn't sure what it might be in core since I've never observed any pattern
&#120323;&#120302;&#120320;&#120310;&#120313;&#120305;: yancy: there is _some_ reasoning in CONTRIBUTING.md, under "Decision Making" Process
&#120326;&#120302;&#120315;&#120304;&#120326;: vasild yeah, I've read that. I was just looking for feedback on if there was or wasn't a ACK merge policy, and it doesn't sound like there is.
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: PRs can sit around for a long time for various reasons
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: including lack of attention by reviewers
&#120326;&#120302;&#120315;&#120304;&#120326;: for sure. Shame reviewers :P
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: can't remember the last time i saw a pr that was RFM and then not merged reasonably quickly; it's always lack of review/consensus in my experience

--- Topic 6 ---
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: despite how quickly and seemingly smooth this release went, i wonder if there are things we can do to make it easier / more automated, so we can continue to quickly publish releases when necessary
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: e.g. i think one unnecessary point of friction is that release notes are reviewed in the PR, and then again during a release. the release is often months after a PR was merged, so almost no one still has good context on that change. i feel like it makes more sense to just only review release notes in the first PR, and then the final release notes is a purely mechanistic aggregation of all those excerpts
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: this might require some more (llm-lintable) rules on release notes in PRs, e.g. make sure they are assigned to an appropriate category, are complete, etc
&#120323;&#120302;&#120320;&#120310;&#120313;&#120305;: stickies-v: +1

--- Topic 7 ---
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: eugenesiegel looking to get some eyes on #36437 which sets up a 1p1c fuzz harness for follow up work to improve robutness(up to a limit)
&#120306;&#120322;&#120308;&#120306;&#120315;&#120306;&#120320;&#120310;&#120306;&#120308;&#120306;&#120313;: instagibbs: might not have time to review soon (trying to add a feature to fuzzamoto), but after that's done I can
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: cool, v33 is target for follow up which fixes the most egregious issues with few loc
</code></code></pre><p><a href="https://www.erisian.com.au/bitcoin-core-dev/log-2026-10-29.html">Read the full meeting</a></p><h4>Releases</h4><ul><li><p><a href="https://bitcoincore.org/en/releases/32.1/">32.1</a> and <a href="https://bitcoincore.org/bin/bitcoin-core-31.2/">31.2</a> were released 2026-10-27. Signed binaries for 32.1 are in <a href="https://bitcoincore.org/bin/bitcoin-core-32.1/">bitcoincore.org/bin/bitcoin-core-32.1</a>. This was a quick security release for<a href="https://bitcoincore.org/en/2026/10/28/disclose-tcp-oom/"> CVE-2026-117350</a>, with fixes <a href="https://github.com/bitcoin/bitcoin/pull/36665">#36665</a> and <a href="https://github.com/bitcoin/bitcoin/pull/36667">#36667</a> by Antoine Poinsot.</p></li><li><p><a href="https://bitcoincore.org/bin/bitcoin-core-30.4/">30.4</a> and <a href="https://bitcoincore.org/en/releases/29.5/">29.5</a> were released 2026-10-28. Both binary directories are up, with checksums.</p></li></ul><blockquote><p>Thank you for reading. Be sure to tune in again next week for your updates on Bitcoin Core!</p></blockquote><p>If there are any comments, suggestions, or errors, do not hesitate to reach out or comment.</p>]]></content:encoded></item><item><title><![CDATA[Payjoin <> CISA — Last Week in Bitcoin (Oct 19 - 25)]]></title><description><![CDATA[Hi Insiders.]]></description><link>https://insider.btcpp.dev/p/payjoin-cisa-last-week-in-bitcoin</link><guid isPermaLink="false">https://insider.btcpp.dev/p/payjoin-cisa-last-week-in-bitcoin</guid><dc:creator><![CDATA[Tuma (I WILL NEVER DM YOU)]]></dc:creator><pubDate>Mon, 26 Oct 2026 15:00:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dxpd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7885b8e1-3148-48e0-8903-f4a807a92450_1600x900.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hi Insiders. This is Tuma, open-source reporter from the Insider Edition.</em></p><p><em>In this week&#8217;s update we feature the current work to add support for splicing and dual-funding to taproot channels in the BOLTs specifications.</em></p><p>We also cover several news from the Bitcoin ecosystem. Fabian Jahr is teaming with Payjoin to integrate that protocol with Cross-Input Signature Aggregation (CISA), Core developer l0rinc is working to remove <code>AssumeUTXO</code> , Wavelength is now available on Mainnet, and more.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dxpd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7885b8e1-3148-48e0-8903-f4a807a92450_1600x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dxpd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7885b8e1-3148-48e0-8903-f4a807a92450_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dxpd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7885b8e1-3148-48e0-8903-f4a807a92450_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dxpd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7885b8e1-3148-48e0-8903-f4a807a92450_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dxpd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7885b8e1-3148-48e0-8903-f4a807a92450_1600x900.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dxpd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7885b8e1-3148-48e0-8903-f4a807a92450_1600x900.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7885b8e1-3148-48e0-8903-f4a807a92450_1600x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:347184,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://insider.btcpp.dev/i/222185158?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7885b8e1-3148-48e0-8903-f4a807a92450_1600x900.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dxpd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7885b8e1-3148-48e0-8903-f4a807a92450_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dxpd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7885b8e1-3148-48e0-8903-f4a807a92450_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dxpd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7885b8e1-3148-48e0-8903-f4a807a92450_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dxpd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7885b8e1-3148-48e0-8903-f4a807a92450_1600x900.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h1><strong>Highlights from the Bitcoin developer ecosystem</strong></h1><p><em>I spent 10+ hours in open-source developer calls in the Bitcoin ecosystem last week. Here is what caught my eye</em>:</p><ul><li><p>Lightning developers are working to add support for splicing and dual-funding transactions in taproot channels</p><ul><li><p>During the monthly meeting, on Monday 19th, Lightning developers discussed the ongoing effort to add support for splicing and dual-funding transaction in taproot channels. The work is currently reviewable in <a href="https://github.com/lightning/bolts/pull/1324">PR1324</a> in the BOLTs repository.</p></li><li><p>Taproot Lightning channels were introduced last May as a way to improve privacy, security, and flexibility of the system. In particular, the new taproot channels use <a href="https://bitcoinops.org/en/topics/musig/#musig2">MuSig2</a> key aggregation to combine two keys into one, with the multisig output becoming a single P2TR key, and tapscript trees capabilities.</p></li><li><p>The new update to the specifications aims to add nonces in various messages of the peer protocol to allow creating musig2 partial signatures during dual-funding and splicing. It also allows to omit the <code>prevtx</code> field when using taproot, since that field had to be included to prevent transaction malleability when using pre-segwit inputs.</p></li></ul></li></ul><div><hr></div><h1><strong>A BIPs Update</strong></h1><p><em>In the last days there was some movement in the <a href="https://github.com/bitcoin/bips">BIP repository</a>. Specifically, one new BIP has been published by BIP maintainer <a href="https://github.com/murchandamus">Murchandamus</a>.</em></p><h2><strong>Published BIPs</strong></h2><p><em>A list of recently published BIPs</em></p><h3><strong>BIP139: Wallet Metadata Backup Format</strong></h3><p><strong>Authors</strong>: <a href="https://github.com/pythcoiner">Pyth</a></p><p><strong>Published On</strong>: October 24th, 2026</p><p><strong>Layer</strong>: Applications</p><p><a href="https://github.com/bitcoin/bips/blob/master/bip-0139.md">BIP139</a> specifies a standard way to store various type of metadata, such as account descriptors, keys, labels, PSBTs, and more, allowing compatibility between different wallet implementations, simpler wallet migration, and easier recovery processes.</p><div><hr></div><h1>Other News from the Bitcoin World</h1><ul><li><p><strong>AssumeUTXO Removal</strong>: Bitcoin Core develoepr l0rinc <a href="https://x.com/L0RINC/status/2113158239969755551">announced</a> a draft proposal to remove the <code>AssumeUTXO</code> feature from the Bitcoin reference implementation. This comes after in-person discussions during the Core Dev meeting.</p><ul><li><p><code>AssumeUTXO</code> allows a new user bootstrapping a node to import the UTXO set from an external source to start transacting right away, while the classic Initial Block Download (IBD) starts in the background.</p></li><li><p>According to l0rinc, this feature adds several layers of complexity around the codebase, making porposed changes difficult to implement. Moreover, the feature does not seem to be widely used by noderunners.</p></li><li><p>L0rinc&#8217;s provided a reference implementation of what the removal of <code>AssumeUTXO</code> would look like in <a href="https://github.com/bitcoin/bitcoin/pull/36598">PR36598</a>. However, he stated that discussion on whether to remove the feature is still ongoing between maintainers.</p></li></ul></li><li><p><strong>Payjoin + CISA = PISA</strong>: Fabian Jahr <a href="https://x.com/fjahr/status/2113633246097617212">announced</a> PISA, a new integration between Payjoin and CISA.</p><ul><li><p>Jahr shared a video explaining how PISA could increase privacy on-chain &#8212; breaking the common ownership heuristic used in chain analysis &#8212;, while at the same time saving in fees.</p></li><li><p>To send a payment, both Alice and Bob can provide an input, as in a classical Payjoin transaction. Once Alice gets back the transaction with Bob&#8217;s input and signatures, she can leverage CISA so as to aggregate their signatures into one single signature.</p></li><li><p>To make it work, Jahr modified Bitcoin Core to include <a href="https://github.com/bitcoin/bips/pull/2212">BIP460</a>, the soft work that would bring CISA to Bitcoin. Thus, the provided <a href="https://github.com/bitcoin-pisa">test implementation</a> is available only on regtest.</p></li></ul></li><li><p><strong>Bitcoin Design &lt;&gt; AI</strong>: The Bitcoin Design Community &#8212; supported by Spiral &#8212; <a href="https://www.bitcoindesignuxr.xyz/">is launching</a> a research initiative to understand how the <a href="https://bitcoin.design/guide/">Bitcoin Design Guide</a> should evolve so that it can be easily leveraged by AI agent.</p><ul><li><p>The Bitcoin Designer Community is specifically looking for builders of Bitcoin and Lightning wallet to understand how AI is used in their workflows, if the Guide is ready for the AI-driven development age, and which could be the areas where it could be improved.</p></li></ul></li><li><p><strong>Wavelength on Mainnet</strong>: Lightning Labs <a href="https://x.com/lightning/status/2113637153070542859">announced</a> that Wavelength &#8212; their implementation of the Ark protocol &#8212; was finally available on mainnet. Wavelength was announced in July, promising fast integration of Bitcoin payments in any application.</p></li><li><p><strong>Bitcoin-backed Dollars on Cashu</strong>: Ducat &#8212; a Bitcoin-native credit and stablecoin protocol &#8212; <a href="https://x.com/Ducatstable/status/2114036739492725051">announced</a> that they had launched a Bitcoin-backed dollar stablecoin built on top of the Cashu protocol. Ducat&#8217;s mint would allow users to deposit their UNIT stablecoin and receive newly minted ecash tokens.</p></li></ul><div><hr></div><h1>More from BTC++ Insider Edition</h1><h3>News Hour</h3><ul><li><p><a href="https://x.com/btcinsider__/status/2113675778961686605">BTC++ News Hour</a>: Check out our Friday livestream, where Matthew Vuk and I discuss the most interesting news of the week from the Bitcoin developer ecosystem. This time, we hosted Brandon Black &#8212; known in cyberspace as reardencode &#8212; to talk about <a href="https://rbitcoin.org/">rbitcoin</a>, a Bitcoin full-node implementation in Rust.</p></li></ul><h3>Videos</h3><ul><li><p><a href="https://x.com/btcinsider__/status/2112559480097370437">Aleksei Moskvin &#8212; BTC++ Insider Interviews</a>: Alksei Moskving of [[alloc]init] talks to the Insider about the Shielded Bitcoin metaprotocol: private transfers on Bitcoin L1, encrypted notes, and wallet recovery from a seed phrase.</p></li><li><p><a href="https://x.com/btcinsider__/status/2112932354989670479">Alex Bragin &#8212; BTC++ Insider Interviews</a>: Alex Bragin &#8212; CTO at Jan3 &#8212; talks to the Insider about his commitment to Liquid, finally coming to resolution as peg-out functionality is restored.</p></li><li><p><a href="https://x.com/btcinsider__/status/2112967154907730429">Michael from Boltz &#8212; BTC++ Insider Interviews</a>: Michael &#8212; Former CTO at Boltz &#8212; talks to the Insider about why he shut down the swap service, how AI changed the risk equation, and why he&#8217;s still optimistic about the future of software.</p></li><li><p><a href="https://x.com/btcinsider__/status/2113269140194771365">Jussi Tiira &#8212; BTC++ Insider Interviews</a>: Jussi Tiira of the Finnish Bitcoin Association talks to the insider about his quest to educate Finnish MPs about Bitcoin.</p></li><li><p><a href="https://x.com/btcinsider__/status/2113329538704838815">Rene Pickhardt &#8212; BTC++ Insider Interviews</a>: Lightning researcher Rene Pickhardt talks to the Insider about Lightning&#8217;s scaling limits, on-chain bottlenecks and the case for multiparty channels.</p></li></ul><h3>Articles</h3><ul><li><p><a href="https://insider.btcpp.dev/p/were-reimplementing-private-broadcast">We&#8217;re reimplementing private broadcast - This Week in Bitcoin Core #63</a></p></li></ul><div><hr></div><p><em>Looking for an opportunity to join up with some bitcoin devs in person? Join us in</em> <a href="https://btcpp.dev/seoul?code=TUMA20">Seoul</a> <em>this November 5-6 to talk about privacy in Bitcoin!</em></p>]]></content:encoded></item><item><title><![CDATA[We're reimplementing private broadcast - This Week in Bitcoin Core #63]]></title><description><![CDATA[The build notes point at the table]]></description><link>https://insider.btcpp.dev/p/were-reimplementing-private-broadcast</link><guid isPermaLink="false">https://insider.btcpp.dev/p/were-reimplementing-private-broadcast</guid><dc:creator><![CDATA[kevkevin]]></dc:creator><pubDate>Fri, 23 Oct 2026 14:53:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MJw8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hello &#128075; folks, I&#8217;m Kevkevin. I&#8217;m an open-source developer and reporter for Insider Edition. Last week I reviewed several pull requests from the Bitcoin Core repo. One merge this week puts the functional-test dependencies in one table in <code>test/README.md</code>. pip, apt, brew, winget, pkg, pkgin, and pkg_add each get a row. The columns are Python, sqlite3, zmq, capnp, and lsof. Under pip the ZMQ module is <code>pyzmq</code>. Under apt it is <code>python3-zmq</code>. The FreeBSD, NetBSD, OpenBSD, macOS, MSVC Windows, and Unix build notes point at that table.</p><p>Another merge changes what <code>Assert</code>, <code>Assume</code>, and <code>CHECK_NONFATAL</code> print when the condition is false. The old line was the condition by itself, so <code>pindex != nullptr</code> read as if that were the state the node had observed. <code>StrFormatFailedCheck</code> wraps it. The report is <code>`pindex != nullptr` check failed</code>.</p><p>Thursday&#8217;s #bitcoin-core-dev meeting took the fuzzing and QML working groups, a second Windows code signer, and a stateless rewrite of private broadcast. <code>v32.0</code> is tagged. The final binaries are not in the download directory.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MJw8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MJw8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MJw8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MJw8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4>Merged PR&#8217;s</h4><h5>Every week, several changes are officially added to Bitcoin Core. This week, 40 changes were merged. Here are some I found interesting this week.</h5><ul><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/35395">doc: Improve test suite dependencies documentation</a></strong> by <strong><a href="https://github.com/hebasto">Hennadii Stepanov</a></strong></p></li></ul><p>The per-OS test-suite install snippets in the FreeBSD, NetBSD, OpenBSD, macOS, and MSVC Windows build notes are gone. Each file now links to one table in <code>test/README.md</code>, and <code>doc/build-unix.md</code> gets the same link. The table has a row for each package manager (pip, apt, brew, winget, pkg, pkgin, and pkg_add) and the package name for Python, sqlite3, zmq, capnp, and lsof. Under pip the ZMQ module is <code>pyzmq</code>. Under apt it is <code>python3-zmq</code>.</p><p>If an optional dependency is not installed, the tests that need it are skipped, not failed. The from-source <code>pycapnp</code> recipe is gone, and the pip row is the named <code>pycapnp.</code></p><ul><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/35461">util: Clarify the assertion message in assertion failures (Assert, Assume, etc.)</a></strong> by <strong><a href="https://github.com/optout21">optout</a></strong></p></li></ul><p>A message of <code>Internal bug detected: pindex != nullptr</code> does not say whether that comparison held. <code>StrFormatFailedCheck</code> now wraps the condition, so a failed <code>Assert</code>, <code>Assume</code>, or <code>CHECK_NONFATAL</code> reports <code>`pindex != nullptr` check failed</code>.</p><p><code>NONFATAL_UNREACHABLE</code> now honors the same abort flag as <code>CHECK_NONFATAL</code>. Both go through the new <code>internal_non_fatal_helper</code>, which aborts if <code>G_ABORT_ON_FAILED_ASSUME</code> is set (a debug build) and otherwise throws <code>NonFatalCheckError</code>. <code>util_check_tests</code>, <code>util_not_null_tests</code>, and <code>rpc_misc.py</code> expect the new text.</p><h5>There are always changes being updated and reviewed in real-time. Here are some notable PR&#8217;s that are still up and looking for reviews.</h5><ul><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/36608">Reimplement private broadcast as node state-less jobs + package relay support</a></strong> by <strong><a href="https://github.com/instagibbs">Gregory Sanders</a></strong></p></li></ul><p>Private broadcast on master drives its attempts from node state, and that has already produced a series of careful fixes. This PR replaces it with jobs that do not consult addrman, the mempool, or <code>-onlynet</code>. A job is one broadcast of one transaction. It resolves DNS seed names through Tor, then delivers over BIP324 v2 connections on its own proxy streams, which do not show up in <code>getpeerinfo</code>.</p><p>The same job runs inside <code>bitcoind -privatebroadcast</code> or in the standalone <code>bitcoin-privbcast</code>. Part 4 adds one-parent-one-child package relay. The logic is about 4,600 net lines outside consensus, with the rest tests and documentation. He is asking for a concept ACK and a decision on whether parts 1 through 3 are the v33 goal.</p><blockquote><p>The primary failure mode of the in-master private broadcast is that it relies on node state for operation, and this has led to a number of &#8220;careful coding&#8221; fixes.</p></blockquote><h4>IRC meeting notes</h4><h5>Every week on Thursday, there is an IRC meeting. Here are some short notes from that meeting.</h5><pre><code><code>--- Topic 1 ---
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: #topic Fuzzing WG Update (eugenesiegel, marcofleon)
&#120314;&#120302;&#120319;&#120304;&#120316;&#120307;&#120313;&#120306;&#120316;&#120315;: no update from me
&#120306;&#120322;&#120308;&#120306;&#120315;&#120306;&#120320;&#120310;&#120306;&#120308;&#120306;&#120313;: currently just working on getting bedrock into shape so we can run fuzzamoto with it. some faults I added found some really minor database consistency issues
&#120306;&#120322;&#120308;&#120306;&#120315;&#120306;&#120320;&#120310;&#120306;&#120308;&#120306;&#120313;: like e.g. a node having a power loss at a super specific point during -reindex prevents the node from starting up again. should things like that be fixed?
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: if it's a loud failure, i wouldn't personally consider that worth spending a lot of energy or complexity on
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: silent consensus failures/money losing behaviour is a different thing of course
&#120326;&#120302;&#120315;&#120304;&#120326;: might it also be OS disk corruption?
&#120306;&#120322;&#120308;&#120306;&#120315;&#120306;&#120320;&#120310;&#120306;&#120308;&#120306;&#120313;: I don't think it's a disk corruption issue, just things not being persisted in the proper order. It wasn't clear to me what guarantees the codebase should have when there's no consensus failure or money loss
&#120303;&#120319;&#120322;&#120315;&#120316;&#120306;&#120319;&#120308;: perhaps it depends on how complex the fix would be?
&#120306;&#120322;&#120308;&#120306;&#120315;&#120306;&#120320;&#120310;&#120306;&#120308;&#120306;&#120313;: I think the fixes are pretty small. I don't think it's likely that anybody will run into these issues though

--- Topic 2 ---
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: #topic QML GUI WG Update (johnny9dev)
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: We're working through the feedback from last week
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: We've got a PR to clarify storage choices during onboarding
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: Priority is getting the staging branch ready
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: I am increasingly interested in making a pruned wallet setup work and have started looking into txindex and compact block filters
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: You mean pruned rescans?
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: Yeah, pruned rescans. Block retrieval. I think that becomes a high priority for the QML project once the staging branch is settled
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: eugenesiegel: worth at least opening an issue for those. May be a symptom of a bug that could open up more serious inconsistencies. As far as I know we should always be able to recover from a crash
&#120288;&#120322;&#120319;&#120304;&#120309;[&#120314;]: One argument is that a change this large should merge very early in a release cycle, right after branch-off, so the new GUI would only be considered for v34. The new GUI has better testing and more eyes, and I'm uncomfortable releasing the old GUI while hardly anyone is looking at it. Maybe we should talk about getting it into v33
&#120309;&#120306;&#120303;&#120302;&#120320;&#120321;&#120316;: it seems premature until the staging branch is ready
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: My current view is that we'll have the PR by the end of the year. Likely end of November or early December
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: I'm not sure merging a huge amount of new code is necessarily safer, so I don't think we should feel time pressure because of that
&#120288;&#120322;&#120319;&#120304;&#120309;[&#120314;]: Sure, let's revisit when the staging branch is available
&#120309;&#120306;&#120303;&#120302;&#120320;&#120321;&#120316;: agree

--- Topic 3 ---
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: #topic QA WG Update (brunoerg)
&#120303;&#120319;&#120322;&#120315;&#120316;&#120306;&#120319;&#120308;: no updates this week

--- Topic 4 ---
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: #topic another windows code signer (achow101)
&#120302;&#120304;&#120309;&#120316;&#120324;&#120813;&#120812;&#120813;: Windows code signing is done by only me, which is a single point of failure. If anyone is interested in being a code signer, message me
&#120302;&#120304;&#120309;&#120316;&#120324;&#120813;&#120812;&#120813;: Needs to be someone who currently builds, or will commit to building, all releases and release candidates shortly after tagging

--- Topic 5 ---
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: #topic Reimplement private broadcast as node state-less jobs + package relay support (#36608) (instagibbs)
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: I've been working on a node state-less variant of private broadcast. I think it's mature enough to be considered as a replacement for v33. It makes some opinionated decisions so the privacy properties are easier to reason about
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: It's a feature swap on the same sendrawtransaction path, with 1p1c package relay support, plus a standalone tool that is a thin wrapper around the same job
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: Roughly +4,600 net lines of logic, all outside consensus. The rest is tests and documentation. In-master net_processing private broadcast goes away
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: Short term I'm looking for concept and approach ACKs, and a general buy-in that we want this for v33. Also: do we want the standalone tool, or should it fold into bitcoin-util? And should package relay be a follow-up PR?
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;_: I haven't looked in depth, but I'm not sure a 17k line PR is realistic for v33. Conceptual feedback on the previous branch doesn't look addressed
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: I responded to those comments. It's ~4.6k lines net of logic. The rest is tests
&#120304;&#120307;&#120310;&#120306;&#120313;&#120305;&#120320;: This overlaps my multiprocess p2p work. I'll take a look
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: This is a big lift for a single feature, but it's more attractive if it comes with a better architecture
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: Maybe it's two releases, but I don't think it has to be. I think it's a removal of risk
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: I agree with the approach: fix the node-state leaks structurally, then consider carving out exceptions for UX, instead of the opposite
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;_: Can we quantify the remaining risks? There were several private-broadcast fixes in v32. What gaps are left, given it's experimental and the guarantees were softened?
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: The risk is sharing node state, which leaks in dozens of ways. The part to debate is the addrman-less design. addrman is heavily attacker-influenced, and there are tradeoffs
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: We can't guarantee perfect privacy. If private broadcast is supposed to provide any limited guarantee against an adversary, separating it from node state is a requirement
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;_: Private broadcast already protects a user's privacy against linkinglion. Default broadcast exposes the transaction origin even with BIP324
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: Current private broadcast can expose origin too, if someone cares enough to attack. I don't think we should offer a feature branded as privacy that doesn't hold up to that bar
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: We can continue off-channel
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: On the tool: I don't see why we need a new binary. bitcoin-util is fine. A separate tool is a small cost and a useful canary against reintroducing node state. On the split: package relay can be a follow-up, but the swap itself should not be split, or master ends up with two implementations
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: I started with the tool so I wouldn't re-add node state to the jobs, then reused that library inside the node
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: agreed with darosior on not splitting the swap

--- Topic 6 ---
&#120307;&#120302;&#120315;&#120318;&#120322;&#120302;&#120312;&#120306;: v32.0 has been tagged
&#120307;&#120302;&#120315;&#120318;&#120322;&#120302;&#120312;&#120306;: The security policy update is merged: https://github.com/bitcoin-core/bitcoincore.org/pull/1281
&#120307;&#120302;&#120315;&#120318;&#120322;&#120302;&#120312;&#120306;: PR to enrol Core in the Anthropic OSS scanner: https://github.com/anthropics/oss-scanner/pull/1018
</code></code></pre><p><a href="https://www.erisian.com.au/bitcoin-core-dev/log-2026-10-22.html">Read the full meeting</a></p><h4>Releases</h4><ul><li><p><code>v32.0</code> is tagged: <a href="https://github.com/bitcoin/bitcoin/releases/tag/v32.0">github.com/bitcoin/bitcoin/releases/tag/v32.0</a> (tagged by sedited). The final binaries are not published yet.</p></li></ul><blockquote><p>Thank you for reading. Be sure to tune in again next week for your updates on Bitcoin Core!</p></blockquote><p>If there are any comments, suggestions, or errors, do not hesitate to reach out or comment.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://insider.btcpp.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">bitcoin++'s Insider Edition is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[More Offchain Protocols — Last Week in Bitcoin (Oct 12 - 18)]]></title><description><![CDATA[Hi Insiders.]]></description><link>https://insider.btcpp.dev/p/more-offchain-protocols-last-week</link><guid isPermaLink="false">https://insider.btcpp.dev/p/more-offchain-protocols-last-week</guid><dc:creator><![CDATA[Tuma (I WILL NEVER DM YOU)]]></dc:creator><pubDate>Mon, 19 Oct 2026 14:03:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!70lo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e80517a-0148-4109-87f5-2b4603f5a8d1_1600x900.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hi Insiders. This is Tuma, open-source reporter from the Insider Edition.</em></p><p><em>In this week&#8217;s update we feature current effort to add support for recurring payments with BOLT12 in LDK.</em></p><p><em>We also cover the announcement of two new offchain protocols on Bitcoin, namely Zark by Lx DEV, a statechain with a blinded co-signer and zero-knowledge proofs, and LayerTree by Lightning Labs,</em> a non-custodial scaling solution which allows multiple users to share a Bitcoin UTXO.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!70lo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e80517a-0148-4109-87f5-2b4603f5a8d1_1600x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!70lo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e80517a-0148-4109-87f5-2b4603f5a8d1_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!70lo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e80517a-0148-4109-87f5-2b4603f5a8d1_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!70lo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e80517a-0148-4109-87f5-2b4603f5a8d1_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!70lo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e80517a-0148-4109-87f5-2b4603f5a8d1_1600x900.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!70lo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e80517a-0148-4109-87f5-2b4603f5a8d1_1600x900.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8e80517a-0148-4109-87f5-2b4603f5a8d1_1600x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:347184,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://insider.btcpp.dev/i/221127614?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e80517a-0148-4109-87f5-2b4603f5a8d1_1600x900.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!70lo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e80517a-0148-4109-87f5-2b4603f5a8d1_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!70lo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e80517a-0148-4109-87f5-2b4603f5a8d1_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!70lo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e80517a-0148-4109-87f5-2b4603f5a8d1_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!70lo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e80517a-0148-4109-87f5-2b4603f5a8d1_1600x900.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h1><strong>Highlights from the Bitcoin developer ecosystem</strong></h1><p><em>I spent 10+ hours in open-source developer calls in the Bitcoin ecosystem last week. Here is what caught my eye</em>:</p><ul><li><p>LDK contributors are working on adding support for BOLT12 recurrence in the Lightning Implementation.</p><ul><li><p>During the biweekly call, on Monday 12th, LDK contributors discussed the latest updates to the Lightning implementation. One of the most interesting things devs are working on right now is adding support BOLT12 recurrence in LDK Node.</p></li><li><p>Developer <a href="https://github.com/shaavan">Shashwat Vangani</a> is currently working on <a href="https://github.com/lightningdevkit/ldk-node/pull/1119">PR1119</a> in LDK Node, which builds on the previous work done in <a href="https://git.rust-bitcoin.org/lightningdevkit/rust-lightning/pulls/4882">rust-lightning</a> &#8212; which introduced protocol primitives, message handling, and payment flow.</p></li><li><p>This PR introduces the management whole recurrent payment workflow to LDK Node, such as persistence of recurrent payment state, updates, scheduling, and APIs for applications to manage recurrence.</p></li></ul></li></ul><div><hr></div><h1><strong>A BIPs Update</strong></h1><p><em>There was no newsworthy update in the last days in the <a href="https://github.com/bitcoin/bips">BIP repository</a>. We&#8217;ll provide new updates as soon as a new BIP gets published or gets assigned a number.</em></p><div><hr></div><h1>Other News from the Bitcoin World</h1><ul><li><p><strong>Zark</strong>: Lx Dev <a href="https://x.com/lxdev_/status/2110041930050494909">announced</a> a new protocol for private, offchain Bitcoin transfers called Zark. The protocol is based on the statechain paradigm and leverages zero-knowledge proofs to improve users&#8217; privacy.</p><ul><li><p>The protocol&#8217;s coordination relies on a co-signer. This entity is blinded, which means that it signs a UTXO transfer without getting to know the specific details about the transfer itself. Users need to trust the co-signer to delete the keyshares belonging to a previous owner.</p></li><li><p>Users can prove their ability to spend, receive, and withdraw coins using zero-knowledge proof. This means that inside the protocol the amount of leaked information about previous owners &#8212; such as payout addresses &#8212; is highly reduced, improving privacy.</p></li><li><p>Lx Dev published an <a href="https://hackmd.io/@januszgrze/HJlHensozl">extensive overview</a> of Zark, which dives into how the protocol works and which are the trade-offs to be taken into account.</p></li></ul></li><li><p><strong>LayerTree</strong>: Lightning Labs <a href="https://x.com/lightning/status/2110812651882217677">announced</a> LayerTree, a new non-custodial scaling solution on Bitcoin, which allows multiple users to share a Bitcoin UTXO.</p><ul><li><p>Ownership is recorded offchain into a Merkle-sum tree in which each leaf represent a user&#8217;s balance, and Each node of the tree holds a hash of its children, up to the root. The shared UTXO commits to the root of this tree.</p></li><li><p>The protocol cannot work on Bitcoin as it is today. According to Lightning Labs CTO Olaoluwa Osuntokun, LayerTree needs covenant to work. Interestingly enough, no specific opcode is needed, but the protocol could work with any of the proposals already drafted.</p></li><li><p>Lightning Labs published a full <a href="https://layertree.tech/">website</a>, which allows users to interactively understand how the protocol works.</p></li></ul></li><li><p><strong>Post-quantum Shielded CSV</strong>: Jonas Nick <a href="https://x.com/n1ckler/status/2110024510552576017">reported</a> that a research group from Imperial College had published a <a href="https://arxiv.org/pdf/2609.32015">paper</a> introducing a post-quantum version of ShieldedCSV, called Compact ShieldedCSV. Unlike ShieldedCSV &#8212; where the nullifier carries a signature &#8212; Compact&#8217;s nullifiers carry no signature, only something called a &#8220;degriefer&#8221;.</p></li></ul><div><hr></div><h1>More from BTC++ Insider Edition</h1><h3>News Hour</h3><ul><li><p><a href="https://x.com/btcinsider__/status/2111140017129345146">BTC++ News Hour</a>: Check out our Friday livestream, where Matthew Vuk and I discuss the most interesting news of the week from the Bitcoin developer ecosystem. This time, we hosted our first guest, Lx Dev CEO Janusz, to talk about Zark.</p></li></ul><h3>Videos</h3><ul><li><p><a href="https://x.com/btcinsider__/status/2110370044798488657">Pim Keer &#8212; BTC++ Insider Interviews</a>: Pim Kerr, PhD Researcher at the Security and Privacy Group of TU Wien, talks to the Insider about the work his research group is doing to formalize and prove the security of the Ark protocol.</p></li><li><p><a href="https://x.com/btcinsider__/status/2110475737006285170">Pietro Valese &#8212; BTC++ Insider Interviews</a>: Pietro Valese, Lab Manager at BitPolito, talks to the Insider about what BitPolito is and what it is doing to connect students and the Bitcoin industry.</p></li><li><p><a href="https://x.com/btcinsider__/status/2111094813747494971">TheMhv &#8212; BTC++ Insider Interviews</a>: TheMhv, Vinteum fellow and Cashu contributor talks to the insider about his work on the Cashu Development Kit (CDK), new NUTs, and the importance of meeting the people you work with in real life.</p></li></ul><h3>Articles</h3><ul><li><p><a href="https://insider.btcpp.dev/p/the-prefill-was-already-there-this">The prefill was already there - This Week in Bitcoin Core #62</a></p></li></ul><div><hr></div><p><em>Looking for an opportunity to join up with some bitcoin devs in person? Join us in</em> <a href="https://btcpp.dev/seoul?code=TUMA20">Seoul</a> <em>this November 5-6 to talk about privacy in Bitcoin!</em></p>]]></content:encoded></item><item><title><![CDATA[The prefill was already there - This Week in Bitcoin Core #62]]></title><description><![CDATA[Separate from the mempool count]]></description><link>https://insider.btcpp.dev/p/the-prefill-was-already-there-this</link><guid isPermaLink="false">https://insider.btcpp.dev/p/the-prefill-was-already-there-this</guid><dc:creator><![CDATA[kevkevin]]></dc:creator><pubDate>Fri, 16 Oct 2026 14:02:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MJw8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hello &#128075; folks, I&#8217;m Kevkevin. I&#8217;m an open-source developer and reporter for Insider Edition. Last week I reviewed several pull requests from the Bitcoin Core repo. One merge this week changes the compact-block reconstruction log. When a peer prefills a transaction this node already has, in the mempool or in the extrapool, that prefill is now its own count and its own byte size. The old line folded the extrapool into the mempool number. The new one reports prefill, mempool, extrapool, and the transactions that still had to be requested as four separate numbers.</p><p>Another merge removes <code>-persistmempoolv1</code>. That option wrote <code>mempool.dat</code> in the legacy format so a node could downgrade to v26 or earlier. Those releases are unsupported. The file is always written in the current format, with a random XOR key. A v1 file still loads.</p><p>Thursday&#8217;s #bitcoin-core-dev meeting was not held. stickies-v left a reminder that many people could not attend. Later, eugenesiegel asked about startup failures after power loss, and nkaretnikov pointed at the missing-undo report and the chainstate rewrite discussion. <code>v32.0rc4</code> is tagged, and the binaries are up. Final <code>v32.0</code> is not.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MJw8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MJw8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MJw8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MJw8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4>Merged PR&#8217;s</h4><h5>Every week, several changes are officially added to Bitcoin Core. This week, 22 changes were merged. Here are some I found interesting this week.</h5><ul><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/35724">cmpctblock: Improve logging of </a></strong><code>cmpctblock</code><strong><a href="https://github.com/bitcoin/bitcoin/pull/35724"> message reconstruction statistics [part of prefill series]</a></strong> by <strong><a href="https://github.com/davidgumberg">David Gumberg</a></strong></p></li></ul><p>The compact-block reconstruction log used to fold extrapool hits into the mempool number. On a successful <code>FillBlock</code> it now prints four separate counts with byte sizes: prefilled, from mempool, from extrapool, and requested. A second debug line reports redundant prefills, meaning prefilled transactions the node already had in its mempool or extrapool.</p><p>These stats are only collected when <code>cmpctblock</code> debug logging is on, otherwise they stay zero. At trace level, every requested txid is now logged in one line, not only when fewer than five were missing.</p><ul><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/36294">mempool: Remove -persistmempoolv1 option</a></strong> by <strong><a href="https://github.com/fjahr">Fabian Jahr</a></strong></p></li></ul><p><code>-persistmempoolv1</code> wrote <code>mempool.dat</code> in the old v1 format, without the XOR key, so a node could downgrade to v26 or earlier. v26 has been end of life since April 2025, so the option is gone. <code>DumpMempool</code> always writes the current format with a fresh obfuscation key, and a v1 file still loads.</p><p><code>mempool_compatibility.py</code> now tests against v31.0, the last release with the flag. <code>mempool_persist.py</code> also checks that <code>importmempool</code> rejects a truncated file.</p><h5>There are always changes being updated and reviewed in real-time. Here are some notable PR&#8217;s that are still up and looking for reviews.</h5><ul><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/36540">mempool: remove time-based transaction expiry</a></strong> by <strong><a href="https://github.com/ismaelsadeeq">Abubakar Sadiq Ismail</a></strong></p></li></ul><p>Evicting by age can drop a transaction that could still be mined, so this PR (fixing #33510) deletes <code>CTxMemPool::Expire</code> and the two-week default. <code>LimitMempoolSize</code> now only trims to the size limit, and <code>LoadMempool</code> no longer skips old saved transactions.</p><p><code>-mempoolexpiry</code> stays as a hidden option that only logs a warning if set. The <code>entry_time</code> index and <code>mempool_expiry.py</code> are removed.</p><blockquote><p>Time-based mempool expiry has been removed, and the <code>-mempoolexpiry</code> startup option no longer has any effect (a warning is logged if it is set).</p></blockquote><h4>IRC meeting notes</h4><h5>Every week on Thursday, there is an IRC meeting. Here are some short notes from that meeting.</h5><pre><code><code>--- Topic 1 ---
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: reminder: there's no IRC meeting today as many won't be able to attend

--- Topic 2 ---
&#120306;&#120322;&#120308;&#120306;&#120315;&#120306;&#120320;&#120310;&#120306;&#120308;&#120306;&#120313;: there are a few obscure cases where power loss can prevent a node from being able to startup, nothing serious. how should these be handled, should I make an issue to track them? Some of these might have already been reported by the LLM audits. I've run into a number of them while fuzzing + emulating power loss with the bedrock hypervisor
&#120315;&#120312;&#120302;&#120319;&#120306;&#120321;&#120315;&#120310;&#120312;&#120316;&#120323;: eugenesiegel: this reminded me of #25539 which i assume was reported by you as well
&#120315;&#120312;&#120302;&#120319;&#120306;&#120321;&#120315;&#120310;&#120312;&#120316;&#120323;: there was also a mention of power loss in this recent discussion #35298
</code></code></pre><p><a href="https://www.erisian.com.au/bitcoin-core-dev/log-2026-10-15.html">Read the full meeting</a></p><h4>Releases</h4><ul><li><p>The <code>v32.0rc4</code> binaries are now published: <a href="https://bitcoincore.org/bin/bitcoin-core-32.0/test.rc4/">bitcoincore.org/bin/bitcoin-core-32.0/test.rc4</a> (tagged by sedited).</p></li></ul><blockquote><p>Thank you for reading. Be sure to tune in again next week for your updates on Bitcoin Core!</p></blockquote><p>If there are any comments, suggestions, or errors, do not hesitate to reach out or comment.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://insider.btcpp.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">bitcoin++'s Insider Edition is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Making Taproot Annexes Standard — Last Week in Bitcoin (Oct 05 - 11)]]></title><description><![CDATA[Hi Insiders.]]></description><link>https://insider.btcpp.dev/p/making-taproot-annexes-standard-last</link><guid isPermaLink="false">https://insider.btcpp.dev/p/making-taproot-annexes-standard-last</guid><dc:creator><![CDATA[Tuma (I WILL NEVER DM YOU)]]></dc:creator><pubDate>Mon, 12 Oct 2026 14:03:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!hUsu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32882c1f-a867-4bec-84b0-bbadaf96b554_1600x900.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hi Insiders. This is Tuma, open-source reporter from the Insider Edition.</em></p><p><em>In this week&#8217;s update we feature the latest news from Marmot &#8212; with the team working on bringing multi-device to the protocol &#8212; and the implementation of efficient animated QR codes in Cashu.</em></p><p><em>We also cover the effort by Robin Linus to make taproot annexes standard in Bitcoin Core, an attack to Second that resulted in 0.75 bitcoin stolen, and the latest patch release for Core-lightning.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hUsu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32882c1f-a867-4bec-84b0-bbadaf96b554_1600x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hUsu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32882c1f-a867-4bec-84b0-bbadaf96b554_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hUsu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32882c1f-a867-4bec-84b0-bbadaf96b554_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hUsu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32882c1f-a867-4bec-84b0-bbadaf96b554_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hUsu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32882c1f-a867-4bec-84b0-bbadaf96b554_1600x900.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hUsu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32882c1f-a867-4bec-84b0-bbadaf96b554_1600x900.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/32882c1f-a867-4bec-84b0-bbadaf96b554_1600x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:347184,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://insider.btcpp.dev/i/220007584?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32882c1f-a867-4bec-84b0-bbadaf96b554_1600x900.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hUsu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32882c1f-a867-4bec-84b0-bbadaf96b554_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hUsu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32882c1f-a867-4bec-84b0-bbadaf96b554_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hUsu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32882c1f-a867-4bec-84b0-bbadaf96b554_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hUsu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32882c1f-a867-4bec-84b0-bbadaf96b554_1600x900.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h1><strong>Highlights from the Bitcoin developer ecosystem</strong></h1><p><em>I spent 10+ hours in open-source developer calls in the Bitcoin ecosystem last week. Here is what caught my eye</em>:</p><ul><li><p>Marmot protocol specifications are now stable and the team if focusing on the next features, such as multi-device.</p><ul><li><p>During the monthly community call, on Tuesday 6th, Marmot developers discussed the latest improvements in the protocol for secure, private messaging and in the White Noise application and gave an update on the next steps.</p></li><li><p>Marmot specifications are quite stable now and the Marmot Development Kit (MDK) is nearly on par with them. The team solved a bug that did not allow a group to have more than 50 users and is currently working on making media upload faster and more efficient and focusing on how to make Marmot itself more private.</p></li><li><p>Devs are now focusing on one of the most requested, multi-device &#8212; i.e. the possibility to have the same chats, with the same messages, on multiple devices. This is one of the most complex features to work on, given the decentralized nature of the protocol. The team is currently <a href="https://github.com/marmot-protocol/marmot/blob/master/ideas/multi-device.md">gathering ideas</a> on that and is working toward a draft specification.</p></li></ul></li><li><p>Cashu developers are implementing efficient animated QR codes thanks to a discussion at the bitcoin++ conference in Berlin.</p><ul><li><p>During the weekly call, on Wednesday 7th, CDK developers discussed <a href="https://github.com/cashubtc/cdk/pull/2646">PR2646</a> which aims to add binary fountain token transport, a way to make animated QR codes more efficient.</p></li><li><p>This new feature comes from a <a href="https://x.com/Egge21M/status/2107144980418437252">discussion</a> between Cashu developer Egge and Fedimint contributor Joschisan during the Berlin bitcoin++ conference. Joschisan had previously implemented custom, efficient fountain QR codes in Fedimint.</p></li><li><p>The feature is also being implemented in <a href="https://github.com/cashubtc/cashu-ts/pull/1309">cashu-ts</a> &#8212; the TypeScript implementation of the Cashu protocol &#8212; and an <a href="https://github.com/cashubtc/nuts/pull/456">upgrade to the NUT-16 specification</a> is currently under discussion. Moreover, Egge published the <a href="https://github.com/Egge21M/nut-fountain">nut-fountain repository</a> which includes a TypeScript implementation and a playground to test the new feature in the browser.</p></li></ul></li></ul><div><hr></div><h1><strong>A BIPs Update</strong></h1><p><em>There was no newsworthy update in the last days in the <a href="https://github.com/bitcoin/bips">BIP repository</a>. We&#8217;ll provide new updates as soon as a new BIP gets published or gets assigned a number.</em></p><div><hr></div><h1>Other News from the Bitcoin World</h1><ul><li><p><strong>Making taproot annex standard</strong>: Robin Linus &#8212; BitVM creator and developer working on Shielded CSV (now Glass Coins) &#8212; decided to open a <a href="https://github.com/bitcoin/bitcoin/pull/36466">pull request</a> to make <a href="https://bitcoinops.org/en/topics/annex/">taproot annexes</a> standard in Bitcoin Core.</p><ul><li><p>A taproot annex is an optional field in the witness structure of taproot inputs that can be used to store additional data. This field still hasn&#8217;t a clear use-case and was reserved for future updates.</p></li><li><p>Glass Coins need to post data to the main chain, as a requirement to prevent double-spending in the client-side validated protocol. Linus&#8217; idea would be to leverage the annex for that specific purpose. However, Bitcoin Core does not relay annexes by default. Linus&#8217; PR aims to change that, allowing Bitcoin Core nodes to relay them.</p></li><li><p>As <a href="https://x.com/reardencode">Rearden</a> pointed out, however, two implementations already relay the annex by default, namely LibreRelay and rbitcoin.</p></li></ul></li><li><p><strong>Bark Hacked</strong>: Second <a href="https://x.com/secondhq/status/2108065406665805992">revealed</a> that the company had been hacked on Monday 5th. An attacker exploited a bug in the Ark Server&#8217;s boarding flow and managed to steal 0.75 bitcoin of Second&#8217;s own liquidity. No users&#8217; funds were stolen.</p><ul><li><p>The attacker was able to exploit a bug that allowed him to board the Ark Server using only his own signature. Usually, the process requires a co-signature from the Server itself. Thus, the attacker was able to exit the ark protocol with the funds, while at the same time spending his VTXOs through Second&#8217;s Lightning gateway.</p></li><li><p>No funds from Second&#8217;s users were stolen, thanks the design of the Ark protocol. In fact, users&#8217; VTXOs sit on a pre-signed exit path that no one else &#8212; server included &#8212; can spend.</p></li><li><p>An interesting thing about this attack was that the liquidity used to perform it was linked to the <a href="https://x.com/blinkbtc/status/2106429174931939487">hack that hit Blink</a> couple of weeks ago.</p></li></ul></li><li><p><strong>Upgrade Core-lightning</strong>: The Core-lightning team released a new patch version, <a href="https://github.com/ElementsProject/lightning/releases/tag/v26.06.9">v26.06.9</a>, that fixes a vulnerability that could lead to a loss of funds. The team suggested an immediate upgrade for node operators running version v26.06.8 and lower.</p></li></ul><div><hr></div><h1>More from BTC++ Insider Edition</h1><h3>News Hour</h3><ul><li><p><a href="https://x.com/btcinsider__/status/2108602732710162438">BTC++ News Hour</a>: Check out our Friday livestream, where Matthew Vuk and I discuss the most interesting news of the week from the Bitcoin developer ecosystem.</p></li></ul><h3>Articles</h3><ul><li><p><a href="https://insider.btcpp.dev/p/the-comma-is-the-limit-this-week">The comma is the limit - This Week in Bitcoin Core #61</a></p></li></ul><h3>Bitcoin++ &#8212; Payments Edition Livestream</h3><ul><li><p><a href="https://insider.btcpp.dev/i/218910601/day-1">Day 1</a>: Check out the <a href="https://x.com/i/broadcasts/1pJdRDwrEvvKW">livestream</a> for the first day of the Berlin event!</p></li><li><p><a href="https://insider.btcpp.dev/i/218910601/day-1">Day 2</a>: Check out the <a href="https://x.com/i/broadcasts/1AKEmvLVqgvKL">livestream</a> for the second day of the Berlin event!</p></li></ul><div><hr></div><p><em>Looking for an opportunity to join up with some bitcoin devs in person? Join us in</em> <a href="https://btcpp.dev/seoul?code=TUMA20">Seoul</a> <em>this November 5-6 to talk about privacy in Bitcoin!</em></p>]]></content:encoded></item><item><title><![CDATA[The comma is the limit - This Week in Bitcoin Core #61]]></title><description><![CDATA[This week the cap sits on the address...]]></description><link>https://insider.btcpp.dev/p/the-comma-is-the-limit-this-week</link><guid isPermaLink="false">https://insider.btcpp.dev/p/the-comma-is-the-limit-this-week</guid><dc:creator><![CDATA[kevkevin]]></dc:creator><pubDate>Fri, 09 Oct 2026 14:04:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MJw8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hello &#128075; folks, I&#8217;m Kevkevin. I&#8217;m an open-source developer and reporter for Insider Edition. Last week I reviewed several pull requests from the Bitcoin Core repo. The merge with the most review this week puts the IPC connection cap on the bind address itself. There is no new global <code>-ipcmaxconnections</code>. <code>-ipcbind</code> takes the number after a comma: <code>-ipcbind=unix:/path/to.sock,max-connections=8</code>. Each listener defaults to 16 simultaneous clients, and will not go above 256.</p><p>The next merge by review activity is <code>util::NotNull</code>. The standard library has no type for a smart pointer that is not null. This one checks at construction, deletes assignment from <code>nullptr</code>, and refuses raw pointers. Call sites that used to <code>Assert</code> before a dereference now get that check from the type.</p><p>Thursday&#8217;s #bitcoin-core-dev meeting, chaired by stickies-v, went through the working groups. Kernel logging landed as a struct instead of a formatted string, and the script-evaluation tracer is up for review. L0rinc left a note on an opt-in pruned assumevalid mode. The QML work is moving functions off the GUI thread. mutanthub can take a request for a mutation run on a pull request. The <code>v32.0rc3</code> binaries are up. <br><br>The channel agreed to skip next week&#8217;s meeting (I suspect because of TabConf). After it ended, Sedited said to keep testing the release candidate.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MJw8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MJw8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MJw8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MJw8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4>Merged PR&#8217;s</h4><h5>Every week, several changes are officially added to Bitcoin Core. This week, multiple changes were merged. Here are some I found interesting this week.</h5><ul><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/35037">ipc: support per-address max-connections options on -ipcbind</a></strong> by <strong><a href="https://github.com/enirox001">Enoch Azariah</a></strong></p></li></ul><p>Instead of a global <code>-ipcmaxconnections</code>, the IPC connection cap now lives on the address itself: <code>-ipcbind=unix:/path/to.sock,max-connections=8</code>. A global number can&#8217;t give two sockets different limits, and the inline form leaves room for more options later. Each listener defaults to 16 clients and tops out at 256. Extra clients can still <code>connect</code>, but they wait in the backlog until an accepted client disconnects.</p><p>Startup also checks the file descriptor budget before binding. Each <code>-ipcbind</code> costs one listening socket plus its connection slots, and the total has to stay at or under 257, otherwise init fails with &#8220;Too many IPC file descriptors requested&#8221;.</p><ul><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/34844">util: Add </a></strong><code>util::NotNull&lt;SmartPtrType&gt;</code> by <strong><a href="https://github.com/maflcko">MarcoFalke</a></strong></p></li></ul><p><code>std::reference_wrapper</code> covers a raw pointer that can&#8217;t be null, but smart pointers had no equivalent short of an <code>Assert</code> at every use. <code>util::NotNull</code> <code>Assert</code>s the pointer at construction, deletes construction and assignment from <code>nullptr</code>, and rejects raw pointers. <code>NotNullUniquePtr&lt;T&gt;</code> and <code>NotNullSharedPtr&lt;T&gt;</code> are the shorthands, and <code>get()</code> still <code>Assume</code>s the pointer is non-null in case it was moved from.</p><p>The first users drop their manual checks: <code>CDBWrapper::DBContext()</code>, <code>CoinsViewOverlay</code>&#8216;s thread pool, <code>CNode::m_transport</code>, and <code>CTxMemPool::GetChangeSet()</code>.</p><h5>There are always changes being updated and reviewed in real-time. Here are some notable PR&#8217;s that are still up and looking for reviews.</h5><ul><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/35641">kernel: Add script evaluation tracer</a></strong> by <strong><a href="https://github.com/sedited">sedited</a></strong></p></li></ul><p>This is the PR sedited asked for review on in the kernel update. alexanderwiederin is already calling it from <a href="https://github.com/sedited/rust-bitcoinkernel/pull/230">rust-bitcoinkernel #230</a> for an experimental BIP440 integration.</p><p>The kernel C header gets a callback for the script interpreter&#8217;s state on each step. It is compiled only with <code>-DENABLE_SCRIPT_TRACE=ON</code>. Otherwise the hooks are stubs. Evaluation is split into frames. RAII records a start frame and an end frame for every run, and each instruction gets its own frame. The <code>ScriptError</code> from <code>script_pubkey_verify</code> is on those frames so the error code is visible in the trace. The same frames are a way to check that the interpreter did what a script test thinks it did, including under fuzzing.</p><blockquote><p>This adds a callback hook to the kernel library C header for getting the current script evaluation state on each script evaluation step.</p></blockquote><h4>IRC meeting notes</h4><h5>Every week on Thursday, there is an IRC meeting. Here are some short notes from that meeting.</h5><pre><code><code>&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: There are no pre-proposed meeting topics this week. Any last minute ones to add?
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: let's get going with the working groups!

--- Topic 1 ---
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: #topic Fuzzing WG Update (eugenesiegel, marcofleon)
&#120314;&#120302;&#120319;&#120304;&#120316;&#120307;&#120313;&#120306;&#120316;&#120315;: no official update from me, but know that high quality fuzzing is occurring
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: we will continue sleeping soundly

--- Topic 2 ---
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: #topic Kernel WG Update (sedited)
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: Merged #34374, which gives kernel users a more flexible logging interface by providing a struct instead of a formatted string.
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: It also got rid of reliance on the logging module.
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: other than that I'm looking for review on #35641. alexanderwiederin is using it over here https://github.com/sedited/rust-bitcoinkernel/pull/230 for experimental BIP440 integration.
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: that's all.

--- Topic 3 ---
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: #topic Benchmarking WG Update (l0rinc)
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: Copying from above: &lt;l0rinc&gt; I can't make today's meeting, but wanted to share https://github.com/bitcoin/bitcoin/issues/36476: an opt-in pruned assumevalid mode that downloads blocks without witnesses, buffers them in memory, then deserializes and connects them without writing blocks or undo data to disk. Early tests bring pruned IBD on a 2 GB Pi 4 from ~22 days to under a week (3 days on an earlier prototype), which could make low-end devices practical again.
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: oh thanks, I missed that!

--- Topic 4 ---
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: #topic QML GUI WG Update (johnny9dev)
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: We got a lot of really good feedback from testing last week. The preview build should be updated and I have been cleaning up the project board.
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: the focus right now is finalizing some UX, moving every function off of the gui thread and adding regression tests around that, and then finalizing the feature set for the staging/upstream to bitcoin/bitcoin
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: thats all
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: thanks for the updates!

--- Topic 5 ---
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: #topic QA WG Update (brunoerg)
&#120311;&#120316;&#120315;&#120302;&#120321;&#120302;&#120304;&#120312;: nice work (kernel and ibd)
&#120303;&#120319;&#120322;&#120315;&#120316;&#120306;&#120319;&#120308;: mutanthub now has a dedicated page to request a mutation analysis for a pull request - https://mutanthub.space/projects/bitcoin/bitcoin/requests#request-a-run
&#120303;&#120319;&#120322;&#120315;&#120316;&#120306;&#120319;&#120308;: so if you'd like a mutation testing run for your PR, please request there
&#120303;&#120319;&#120322;&#120315;&#120316;&#120306;&#120319;&#120308;: that's all
&#120311;&#120316;&#120315;&#120302;&#120321;&#120302;&#120304;&#120312;: (and gui)
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: anything else to discuss?
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: no meeting next week?
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: sgtm
&#120320;&#120313;&#120310;&#120323;&#120815;&#120319;__: yup
&#120320;&#120313;&#120310;&#120323;&#120815;&#120319;__: sgtm too
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: grazie a tutti
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: #endmeeting
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: and keep testing the release candidate!
</code></code></pre><p><a href="https://achow101.com/ircmeetings/2026/bitcoin-core-dev.2026-10-08_16_00.html">Read the full meeting</a></p><h4>Releases</h4><ul><li><p>The <code>v32.0rc3</code> binaries are now published: <a href="https://bitcoincore.org/bin/bitcoin-core-32.0/test.rc3/">bitcoincore.org/bin/bitcoin-core-32.0/test.rc3</a> (tagged by fanquake).</p></li></ul><blockquote><p>Thank you for reading. Be sure to tune in again next week for your updates on Bitcoin Core!</p></blockquote><p>If there are any comments, suggestions, or errors, do not hesitate to reach out or comment.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://insider.btcpp.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">bitcoin++'s Insider Edition is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Payments Edition — Last Week in Bitcoin (Sep 28 - Oct 04)]]></title><description><![CDATA[Hi Insiders.]]></description><link>https://insider.btcpp.dev/p/payments-edition-last-week-in-bitcoin</link><guid isPermaLink="false">https://insider.btcpp.dev/p/payments-edition-last-week-in-bitcoin</guid><dc:creator><![CDATA[Tuma (I WILL NEVER DM YOU)]]></dc:creator><pubDate>Mon, 05 Oct 2026 14:01:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!BMPv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd055aee8-2402-47ab-985e-9d2bd745c6f9_1600x900.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hi Insiders. This is Tuma, open-source reporter from the Insider Edition.</em></p><p><em>In this week update we feature the most interesting things happened during Bitcoin++ Payment Edition in Belrin. During the three-days conference, developers met to discuss how to make Bitcoin payments better for everyone.</em></p><p><em>We also cover some interesting news from the Bitcoin ecosystem. Notably, we discuss Peter Todd joining MARA Foundation, an interesting deep dive by Vinteum, and Blink Wallet&#8217;s post-mortem on the recent attack to their users.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BMPv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd055aee8-2402-47ab-985e-9d2bd745c6f9_1600x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BMPv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd055aee8-2402-47ab-985e-9d2bd745c6f9_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BMPv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd055aee8-2402-47ab-985e-9d2bd745c6f9_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BMPv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd055aee8-2402-47ab-985e-9d2bd745c6f9_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BMPv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd055aee8-2402-47ab-985e-9d2bd745c6f9_1600x900.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BMPv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd055aee8-2402-47ab-985e-9d2bd745c6f9_1600x900.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d055aee8-2402-47ab-985e-9d2bd745c6f9_1600x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:347184,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://insider.btcpp.dev/i/218910601?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd055aee8-2402-47ab-985e-9d2bd745c6f9_1600x900.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BMPv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd055aee8-2402-47ab-985e-9d2bd745c6f9_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BMPv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd055aee8-2402-47ab-985e-9d2bd745c6f9_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BMPv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd055aee8-2402-47ab-985e-9d2bd745c6f9_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BMPv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd055aee8-2402-47ab-985e-9d2bd745c6f9_1600x900.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h1><strong>Highlights from Bitcoin++ &#8212; Payments Edition</strong></h1><p><em>I spent last week at Bitcoin++ Payments Edition in Berlin. The first day of talks will be live-streamed starting from Thursday, October 8th, at 5PM UTC.</em></p><h3>Day 1</h3><ul><li><p><a href="https://btcpp.dev/whois/renepickhardt">Rene Pickhardt</a> kicked-off the Berlin conference by talking about his experience in working on Lightning.</p></li><li><p><a href="https://btcpp.dev/whois/callebtc">Calle</a> gave a talk describing how they are working towards federaing Cashu ecash, so as not to rely on a single mint.</p></li><li><p><a href="https://btcpp.dev/whois/swedishfrenchpress">Erik Cativo</a>, the designer behind several Cashu applications, talked about how they built the <a href="https://numopay.org/">Numo</a> point-of-sale app by working closely with the merchant using it.</p></li><li><p><a href="https://btcpp.dev/whois/stevenroose">Steven Roose</a>, CEO at Second, described how Bark &#8212; their implementation of the Ark protocol &#8212; can make self-custodial Bitcoin payments easier.</p></li><li><p><a href="https://btcpp.dev/whois/allenf32">Allen Farrington</a> came back to Berlin for a sequel talk on the fiat payment stack. This time, he talked about how the different layers of Bitcoin can improve payment technology.</p></li></ul><h3>Day 2</h3><ul><li><p><a href="https://btcpp.dev/whois/alalmoskvin">Aleksei Moskvin</a> and <a href="https://btcpp.dev/whois/mschofnegger">Markus Schofnegger</a>, researchers at [[alloc]init], talked about Shielded Bitcoin, the new metaprotocol that promises ZCash-style private Bitcoin payments on-chain with no consensus change needed.</p></li><li><p><a href="https://btcpp.dev/whois/setavenger">Setor</a>, the developer behind BilndBit, talked about how is product is trying to balance UX and privacy for silent payments.</p></li><li><p><a href="https://btcpp.dev/whois/tnull">Elias Rohrer</a> gave a talk about <a href="https://www.projectloupe.org/">Loupe</a>, the AI-assisted security scanning suite used in several projects across the Bitcoin ecosystem.</p></li><li><p><a href="https://btcpp.dev/whois/jestopher-btc">Jesse Shrader</a> examined the technologies and opportunities behind cross-currency payments on Bitcoin using Lightning.</p></li><li><p><a href="https://btcpp.dev/whois/niftynei">Niftynei</a> moderated a panel with Calle, <a href="https://btcpp.dev/whois/joschisan">Joschisan</a>, <a href="https://btcpp.dev/whois/michael1011">Michael</a>, and Elias, where the devs discussed their different experiences with LLMs and tried to understand if Bitcoin can survive the current AI onslaught.</p></li></ul><h3>Day 3</h3><ul><li><p><a href="https://btcpp.dev/whois/stutxo">Stutxo</a> gave a talk on how to make Bitcoin magical internet money again, thanks to the ongoing effort of several projects.</p></li><li><p><a href="https://btcpp.dev/whois/pim-keer">Pim Keer</a> presented a protocol for accountable Chaumian ecash, which protects users from token overissuance while maintaining unlinkability.</p></li><li><p><a href="https://btcpp.dev/whois/pool2win">Jungly</a> described the P2Poolv2 Share Chain, a way to make miner payouts non-custodial.</p></li><li><p><a href="https://btcpp.dev/whois/evd0kim">Ilya Evdokimov</a> presented Zerosats, an experiment that aims to make Bitcoin transactions private while keeping the base chain maximally transparent.</p></li><li><p><a href="https://btcpp.dev/whois/lightrider5">Lightrider</a> talked about his 7-years long experience in accepting Bitcoin as a payment method.</p></li><li><p>Niftynei moderated the final panel with <a href="https://btcpp.dev/whois/liam-eagen-31c7ef20">Liam Eagen</a>, <a href="https://btcpp.dev/whois/georgetsagk">George</a>, <a href="https://btcpp.dev/whois/matthewvuk2">Matthew Vuk</a>, and Markus Schofnegger, exploring which should be the future Bitcoin stack for payments.</p></li></ul><div><hr></div><h1><strong>A BIPs Update</strong></h1><p><em>There was no newsworthy update in the last days in the <a href="https://github.com/bitcoin/bips">BIP repository</a>. We&#8217;ll provide new updates as soon as a new BIP gets published or gets assigned a number.</em></p><div><hr></div><h1>Other News from the Bitcoin World</h1><ul><li><p><strong>Peter Todd &lt;&gt; MARA Foundation</strong>: MARA Foundation recently <a href="https://x.com/MARAFoundation_/status/2105659425054748922">announced</a> that Peter Todd had joined them as Lead Maintainer of Slipstream, a private mempool service that allows direct submission of transactions to MARA&#8217;s mining pool. Todd&#8217;s involvement with Slipstream is mainly due to the use of the service as a proving ground for different proposals in the Bitcoin R&amp;D space.</p></li><li><p><strong>Vinteum&#8217;s Deep Dive on Privacy</strong>: Vinteum &#8212; the organization behind open-source Bitcoin development in Brasil &#8212; <a href="https://www.vinteum.org/blog/inside-a-vinteum-deep-dive-how-private-are-bitcoin-transactions-really">published</a> an interesting deep dive on how chain analysis work, with the aim to understand how private are Bitcoin transactions.</p></li><li><p><strong>Blink Wallet Attack Post-mortem</strong>: Blink recently <a href="https://x.com/blinkbtc/status/2106429174931939487">published</a> the post-mortem for the attack that affected their wallet and that resulted in 6.61 bitcoin stolen from their users. It seems that the attacker leveraged a flaw in their admin tools to gain access to 35 accounts. All affected users were made whole, and the company put a <a href="https://www.blink.sv/en/bounty-terms">bounty</a> as high as 50% of the recovered funds.</p></li></ul><div><hr></div><h1>More from BTC++ Insider Edition</h1><h3>Articles</h3><ul><li><p><a href="https://insider.btcpp.dev/p/v320-is-around-the-corner-this-week">v32.0 is around the corner - This Week in Bitcoin Core #60</a></p></li><li><p><a href="https://insider.btcpp.dev/p/shielded-bitcoin-and-pipes-facts">Shielded Bitcoin &amp; PIPEs: 12 Questions &amp; Answers</a></p></li></ul><div><hr></div><p><em>Looking for an opportunity to join up with some bitcoin devs in person? Join us in</em> <a href="https://btcpp.dev/seoul?code=TUMA20">Seoul</a> <em>this November 5-6 to talk about privacy in Bitcoin!</em></p>]]></content:encoded></item><item><title><![CDATA[v32.0 is around the corner - This Week in Bitcoin Core #60]]></title><description><![CDATA[This week -maxfeerate is just a limit...]]></description><link>https://insider.btcpp.dev/p/v320-is-around-the-corner-this-week</link><guid isPermaLink="false">https://insider.btcpp.dev/p/v320-is-around-the-corner-this-week</guid><dc:creator><![CDATA[kevkevin]]></dc:creator><pubDate>Fri, 02 Oct 2026 14:01:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MJw8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hello &#128075; folks, I&#8217;m Kevkevin. I&#8217;m an open-source developer and reporter for Insider Edition. Last week I reviewed several pull requests from the Bitcoin Core repo. <br><br>The merge with the most review this week is the wallet fee ceiling. <code>-maxtxfee</code> is a total fee, an amount, and the default is 0.10 BTC. The wallet was using that amount as the upper bound on the fee rate. #29278 adds<code>-maxfeerate</code>, a rate, default 0.10 BTC/kvB (10,000 sat/vB). The wallet will not create a transaction above that rate, and broadcast rejects one the same way.<br><br>The next merge by review activity is a Guix time-machine update. On riscv64, <code>guix shell</code> failed because <code>python-lief</code> 0.17.5 does not support that system. The pin moves to Guix <code>60f6956a</code>, and that build works again.</p><p>Thursday&#8217;s #bitcoin-core-dev meeting, chaired by abubakarsadiq, went through the working groups, a mutation-testing site, and a proposal for automated review on pull requests. In the channel, fanquake tagged <code>v32.0rc3</code>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MJw8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MJw8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MJw8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MJw8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>Merged PR&#8217;s</strong></h4><h5><strong>Every week, several changes are officially added to Bitcoin Core. This week, </strong>multiple <strong>changes were merged. Here are some I found interesting this week.</strong></h5><ul><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/29278">Wallet: Add </a></strong><code>maxfeerate</code><strong><a href="https://github.com/bitcoin/bitcoin/pull/29278"> wallet startup option</a></strong> by <strong><a href="https://github.com/ismaelsadeeq">ismaelsadeeq</a></strong></p><p>Abubakar Sadiq Ismail (ismaelsadeeq) merged the fix for #29220. <code>-maxtxfee</code> stays the absolute cap on the fee of one wallet transaction (default 0.10 BTC, and it still lives under debug/test options). <code>-maxfeerate</code> is a wallet startup option, in BTC/kvB. The default is <code>CFeeRate{COIN / 10}</code>, 0.10 BTC/kvB, 10,000 sat/vB.<br></p><p><code>CreateTransactionInternal</code> already refused a fee above <code>m_max_tx_fee</code>. It now also refuses when <code>current_fee</code> is above <code>m_max_tx_fee_rate.GetFee(tx_vsize)</code>. That error is <code>MAX_FEE_RATE_EXCEEDED</code>. The absolute cap still returns <code>MAX_FEE_EXCEEDED</code>.<br></p><p>Broadcast takes both limits. <code>SubmitTxMemoryPoolAndRelay</code> passes <code>m_max_tx_fee</code> and <code>m_max_tx_fee_rate</code> into <code>broadcastTransaction</code>. The node test-accepts the transaction, then fails if the base fee is above <code>-maxtxfee</code>, or above what <code>-maxfeerate</code> allows for the transaction&#8217;s vsize. The strings are split. An absolute-fee failure is &#8220;Fee exceeds maximum configured by user (maxtxfee)&#8221;. A rate failure is &#8220;Fee rate exceeds maximum configured by user (maxfeerate)&#8221;.<br></p><p>Startup treats the two options differently. <code>-maxfeerate</code> below <code>-minrelaytxfee</code> is an error, so the wallet cannot be configured to build transactions that will sit under the relay floor. <code>-maxtxfee</code> set so that a 1 kvB transaction at that absolute fee would be under <code>-minrelaytxfee</code> is a warning: some transactions at the relay floor will not fit under the absolute cap, and the wallet will refuse to create them.</p></li><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/36233">guix: Update time-machine to 60f6956aeffa7f30285745bd0ea615e9acfc74f8</a></strong> by <strong><a href="https://github.com/hebasto">hebasto</a></strong><br>Hennadii Stepanov (hebasto) fixed #36232. On master, a Guix build on a RISC-V host failed with <code>package python-lief@0.17.5 does not support riscv64-linux</code>. The unsupported package is an indirect dependency. <code>python-lief</code> pulls in <code>python-scikit-build-core</code>, which pulls in <code>python-cattrs</code>, which pulls in <code>python-msgspec</code>. <code>python-msgspec</code> had <code>(supported-systems (list "x86_64-linux" "aarch64-linux"))</code>.<br><br>The time-machine commit is Guix <code>60f6956aeffa7f30285745bd0ea615e9acfc74f8</code>. That includes Guix commit <code>b35905695afd</code>, which updates <code>python-msgspec</code> and drops the system allowlist. Along with that pin, <code>git-minimal</code> goes from 2.52.0 to 2.54.0, <code>linux-headers</code> from 6.1.166 to 6.1.172, <code>python-lief</code> from 0.17.5 to 0.17.6, and <code>python-minimal</code> from 3.11.14 to 3.12.12.<br><br><code>python-lief</code> and <code>nsis-x86_64</code> also pull in packages whose tests fail when they are built natively on riscv64: <code>python-psutil</code>, <code>python-pytest-xprocess</code>, and <code>python-sh</code> through <code>python-lief</code>, and <code>python-psutil</code> through <code>nsis-x86_64</code>. Those tests are skipped for now.</p></li></ul><h5><strong>There are always changes being updated and reviewed in real-time. Here are some notable PR&#8217;s that are still up and looking for reviews.</strong></h5><ul><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/36277">net: always complete all initial private broadcast connections</a></strong> by <strong><a href="https://github.com/andrewtoth">andrewtoth</a></strong></p><p>Andrew Toth (andrewtoth). Open, not a draft, mergeable, on the 32.0 milestone. This is the one to read while <code>v32.0rc3</code> is out and <a href="https://github.com/bitcoin/bitcoin/milestone/84">milestone 84</a> still has open pull requests. It is an alternative to #34707.<br></p><p>Private broadcast is supposed to open three connections. If the node stops once the transaction shows up in its own mempool, or once the transaction is a mempool conflict, the missing connection is itself a signal. An observer who can see which connections completed can line that up with acceptance. The same class of timing leak is described on #34707 and on #29415.<br></p><p>This PR keeps the three initial sends. A transaction that comes back, or that conflicts in the mempool, is <code>MarkResolved</code> rather than <code>Remove</code>, so the node does not treat that as &#8220;stop talking.&#8221; Disconnects are tracked, and a retry has to go through <code>TryGrantRetry</code>, so a stale failure does not turn into an extra connection on top of the original three.</p><blockquote><p>always send 3 times regardless if the tx is received in our mempool or is otherwise invalid</p></blockquote></li></ul><div><hr></div><h4><strong>IRC meeting notes</strong></h4><h5><strong>Every week on Thursday, there is an IRC meeting. Here are some short notes from that meeting.</strong></h5><pre><code>--- Topic 1: Fuzzing ---
&#120302;&#120303;&#120322;&#120303;&#120302;&#120312;&#120302;&#120319;&#120320;&#120302;&#120305;&#120310;&#120318;: #topic Fuzzing WG Update (eugenesiegel, marcofleon)
&#120306;&#120322;&#120308;&#120306;&#120315;&#120306;&#120320;&#120310;&#120306;&#120308;&#120306;&#120313;: I'm not sure if marcofleon is here, but no update from my side
&#120314;&#120302;&#120319;&#120304;&#120316;&#120307;&#120313;&#120306;&#120316;&#120315;: no update this week
&#120314;&#120302;&#120319;&#120304;&#120316;&#120307;&#120313;&#120306;&#120316;&#120315;: possibly next

--- Topic 2: Kernel ---
&#120302;&#120303;&#120322;&#120303;&#120302;&#120312;&#120302;&#120319;&#120320;&#120302;&#120305;&#120310;&#120318;: #topic Kernel WG Update (sedited)
&#120302;&#120303;&#120322;&#120303;&#120302;&#120312;&#120302;&#120319;&#120320;&#120302;&#120305;&#120310;&#120318;: I think @sedited is not here, so I will move on.

--- Topic 3: Benchmarking ---
&#120302;&#120303;&#120322;&#120303;&#120302;&#120312;&#120302;&#120319;&#120320;&#120302;&#120305;&#120310;&#120318;: #topic Benchmarking WG Update (l0rinc, andrewtoth)
&#120313;&#120812;&#120319;&#120310;&#120315;&#120304;: nothing from my side, but want to present something next week
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;_: I haven't had an update in this WG in a while. I think I can be removed as lead.
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;_: I will still actively review speedup PRs and benchmark, but I don't really have regular updates to give.
&#120302;&#120303;&#120322;&#120303;&#120302;&#120312;&#120302;&#120319;&#120320;&#120302;&#120305;&#120310;&#120318;: alright, if l0rinc also has no update, it can be archived.

--- Topic 4: QML GUI ---
&#120302;&#120303;&#120322;&#120303;&#120302;&#120312;&#120302;&#120319;&#120320;&#120302;&#120305;&#120310;&#120318;: #topic QML GUI WG Update (johnny9dev)
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: Pseudorandom has completed a comprehensive overhaul of the UX
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: Its looking good and were close to a design we think will work for release
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: Will start getting more feedback on it.
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: If anyone is interested in trying its in the qt6 branch of the project
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: That's all for this week
&#120302;&#120303;&#120322;&#120303;&#120302;&#120312;&#120302;&#120319;&#120320;&#120302;&#120305;&#120310;&#120318;: thanks @johnny9dev
&#120324;&#120310;&#120313;&#120313;&#120304;&#120313;-&#120302;&#120319;&#120312;: are there pre-built bins johnny9dev?
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: willcl-ark: by the end of the day bitcoincore.app will have them

--- Topic 5: QA / mutation testing ---
&#120302;&#120303;&#120322;&#120303;&#120302;&#120312;&#120302;&#120319;&#120320;&#120302;&#120305;&#120310;&#120318;: #topic QA WG Update (brunoerg)
&#120303;&#120319;&#120322;&#120315;&#120316;&#120306;&#120319;&#120308;: I've been working on a new project which is a collaborative mutation testing platform (https://mutanthub.space/). I've noticed that we have people using different tools and approaches to create mutants, different PRs addressing mutants (some overlaps), etc.
&#120303;&#120319;&#120322;&#120315;&#120316;&#120306;&#120319;&#120308;: So the idea of this new platform is that everything is centralized there and it becomes more collaborative.
&#120303;&#120319;&#120322;&#120315;&#120316;&#120306;&#120319;&#120308;: Anyone can submit surviving mutants, reproduce and evaluate them.
&#120303;&#120319;&#120322;&#120315;&#120316;&#120306;&#120319;&#120308;: For every surviving mutant, people can claim that a commit or PR kills it (so people can test it and/or avoid overlaps), as well as we can have discussions about mutants there.
&#120303;&#120319;&#120322;&#120315;&#120316;&#120306;&#120319;&#120308;: In the coming days, I will probably shutdown https://bitcoincore.space and https://secp256k1.space and centralize everything on mutanthub.
&#120303;&#120319;&#120322;&#120315;&#120316;&#120306;&#120319;&#120308;: feedback is welcome
&#120303;&#120319;&#120322;&#120315;&#120316;&#120306;&#120319;&#120308;: that's all
&#120302;&#120303;&#120322;&#120303;&#120302;&#120312;&#120302;&#120319;&#120320;&#120302;&#120305;&#120310;&#120318;: @brunoerg whats the process of submitting mutants?
&#120303;&#120319;&#120322;&#120315;&#120316;&#120306;&#120319;&#120308;: e.g. you can open any file from our source code (at https://mutanthub.space/projects/bitcoin/bitcoin/code), click on a specific line and suggest a mutant. Me as admin of the platform or any other people that wants to help in this process have to approve it (just to avoid trolls).
&#120303;&#120319;&#120322;&#120315;&#120316;&#120306;&#120319;&#120308;: we also have a feature that me and selected people can do bulk import from a json file.
&#120305;&#120327;&#120325;&#120327;&#120308;: The killed mutants are the ones where a fix has been pushed to the project?
&#120303;&#120319;&#120322;&#120315;&#120316;&#120306;&#120319;&#120308;: killed mutants are the ones that are detected by any of our tests
&#120303;&#120319;&#120322;&#120315;&#120316;&#120306;&#120319;&#120308;: considering the tests at the same commit point from where that mutant was created
&#120305;&#120327;&#120325;&#120327;&#120308;: ah i see, thanks for sharing it looks awesome

--- Topic 6: 32.0 milestone ---
&#120302;&#120303;&#120322;&#120303;&#120302;&#120312;&#120302;&#120319;&#120320;&#120302;&#120305;&#120310;&#120318;: Anything else to discuss?
&#120305;&#120327;&#120325;&#120327;&#120308;: Maybe just an ask there's still some items on the 32.0 milestone, it would be helpful if anyone has extra hands to look thee
&#120302;&#120303;&#120322;&#120303;&#120302;&#120312;&#120302;&#120319;&#120320;&#120302;&#120305;&#120310;&#120318;: https://github.com/bitcoin/bitcoin/milestone/84

--- Topic 7: fuzzamoto ---
&#120306;&#120322;&#120308;&#120306;&#120315;&#120306;&#120320;&#120310;&#120306;&#120308;&#120306;&#120313;: would people find it helpful if they could tag some sort of bot or add a label that says they want a fuzzamoto build on their PR (assuming fuzzamoto covers the code in the first place)
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: eugenesiegel remind me where is there a spot to look at scenarios covered
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: eugenesiegel: sounds useful to me
&#120306;&#120322;&#120308;&#120306;&#120315;&#120306;&#120320;&#120310;&#120306;&#120308;&#120306;&#120313;: instagibbs: scenarios here: https://github.com/oss-garage/fuzzamoto/tree/master/fuzzamoto-scenarios/bin but the ir scenario covers most of the p2p stuff
&#120306;&#120322;&#120308;&#120306;&#120315;&#120306;&#120320;&#120310;&#120306;&#120308;&#120306;&#120313;: I can vibe-code a bot ppl can ping and make it as un-invasive as possible, that's all from me
&#120306;&#120322;&#120308;&#120306;&#120315;&#120306;&#120320;&#120310;&#120306;&#120308;&#120306;&#120313;: instagibbs: no watering hole

--- Topic 8: AI review ---
&#120324;&#120310;&#120313;&#120313;&#120304;&#120313;-&#120302;&#120319;&#120312;: I'm wondering if there'd be interest in a limited trial of automated AI reviews on PRs. I've already been testing this in my mirror of bitcoin/bitcoin, and I feel the results are useful enough. If there is interest, I think we could start on PRs coming from contibutors outside the frequent-contributor group.
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: could we start with allowing people to call it in for their PR, so people can sample it
&#120324;&#120310;&#120313;&#120313;&#120304;&#120313;-&#120302;&#120319;&#120312;: My suspicion is that some (or all) PRs arrive with LLM assistance or review in some capacity, and that human reviewers will then download the branch and make another llm-assisted first pass review. An automated review could do some of that initial work once and make the findings available to everyone/the original author.
&#120324;&#120310;&#120313;&#120313;&#120304;&#120313;-&#120302;&#120319;&#120312;: instagibbs: that could also be an approach
&#120306;&#120322;&#120308;&#120306;&#120315;&#120306;&#120320;&#120310;&#120306;&#120308;&#120306;&#120313;: can we make it so that another person can't invoke it on your own PR if it's opt-in?
&#120324;&#120310;&#120313;&#120313;&#120304;&#120313;-&#120302;&#120319;&#120312;: If you want to see what the reviews are like first, then you can check new/recently-synced PRs here: https://git.fish.foo/bitcoin/bitcoin there should be a comment from "ralph" after some time with a review
&#120326;&#120302;&#120315;&#120304;&#120326;: I think that would be interesting upon request
&#120305;&#120327;&#120325;&#120327;&#120308;: what model is it using?
&#120324;&#120310;&#120313;&#120313;&#120304;&#120313;-&#120302;&#120319;&#120312;: I have to run out now, but will read all following messages when I get back. Happy to provide more details/links to bot code/prompts etc if folks want
&#120324;&#120310;&#120313;&#120313;&#120304;&#120313;-&#120302;&#120319;&#120312;: I had codex make a crazy "how it works" chart which is here, and has the models in use for each agent/pass: https://github.com/willcl-ark/nix/blob/master/pkgs/forgejo-review-bot/README.md
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;_: I think most of the value of LLM reviews is still having it be distilled by experienced contributors. So just posting the LLM output on a PR doesn't add much value IMO.
&#120302;&#120303;&#120322;&#120303;&#120302;&#120312;&#120302;&#120319;&#120320;&#120302;&#120305;&#120310;&#120318;: andrewtoth_: +1, I think it can be noise sometimes, so a dev should review the LLM reviews and post them.
&#120302;&#120303;&#120322;&#120303;&#120302;&#120312;&#120302;&#120319;&#120320;&#120302;&#120305;&#120310;&#120318;: #endmeeting
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: I think status quo could be greatly helped, especially in terms of new contributors, I'm not sure what the right system is but I am not sure everyone pretending to not meat proxy is the right way. Could we give willcl-ark a long leash to try something on a trial period and adapt as we go? something to discuss i guess
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: Obviously we wouldnt want multiple instances rampaging around
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;_: I think maybe new contributors are the least likely to benefit from non-distilled review output. LLM reviews are fuzzy and will generally always return a bunch of "issues" with the code that can be "improved". It still takes a human to tell it when to stop, and newer contributors won't know which threads to pull and which are false positives/noise.
&#120326;&#120302;&#120315;&#120304;&#120326;: less frequent contributors does not necessarily mean less skilled, but good point.
&#120326;&#120302;&#120315;&#120304;&#120326;: I guess maybe the original suggestion of outside the frequent-contributor group is better than new
&#120326;&#120302;&#120315;&#120304;&#120326;: anyway, I think something on request is interesting since there seems to be a lot of unknowns, so a trial like that would be nice
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: there's a whole spectrum of things we could do, we are not beholden to 2025 processes "just because".
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: andrewtoth_ Goose team at spiral does this
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: https://goose-docs.ai/blog/2026/07/30/issues-are-the-new-prs/
&#120314;&#120302;&#120307;&#120313;&#120304;&#120312;&#120316;: willcl-ark: I am not sure about directly putting the LLM review in the main repo. My hope is still that the repo discussions are from humans for humans. I want to read comments written in the indidual voice and language of the human author. But seeing the share of monotone claude-speak in the repo today, maybe that ship has sailed :(
&#120314;&#120302;&#120307;&#120313;&#120304;&#120312;&#120316;: My recommendation would be to add an anchor link to it (https://github.com/willcl-ark/nix/pull/1), so that it is easier to jump to it, for anyone who wants to, and also easy to ignore for anyone who does not want to.
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: I would definitely say that the author isn't liable to respond to the review, like they are in general required to respond to humans
&#120306;&#120322;&#120308;&#120306;&#120315;&#120306;&#120320;&#120310;&#120306;&#120308;&#120306;&#120313;: is the author required to respond to a human copy-pasting llm output though
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;_: I think adding this review to corecheck.dev or similar is better than having it in the main repo. That way it can still be pointed to when useful.
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: eugenesiegel no, which is why I think status quo is already bad
&#120303;&#120319;&#120322;&#120315;&#120316;&#120306;&#120319;&#120308;: andrewtoth_ I feel few people check corecheck
&#120306;&#120322;&#120308;&#120306;&#120315;&#120306;&#120320;&#120310;&#120306;&#120308;&#120306;&#120313;: andrewtoth_: you "can't", but you can guess I suppose
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;_: if it's people I've met, then I assume they are the ones copy-pasting. But otherwise I assume it's a bot behind the avatar.
&#120313;&#120812;&#120319;&#120310;&#120315;&#120304;: I like the idea of extending corecheck in a non-invasive, opt-in way with careful AI review - it's a lot easier to instruct new contributors to just check that instead of reexplaining the same concepts.
&#120313;&#120812;&#120319;&#120310;&#120315;&#120304;: My concern is that those reviews will be very opinionated/centralized by whoever writes the prompts, so we should probably have our preferences documented in Core
&#120313;&#120812;&#120319;&#120310;&#120315;&#120304;: and the code review prompt be something simple like "review this PR based on locally available docs" or if we want to force deeper work: 1) create an issue from this PR 2) implement this issue 3) compare these two implementations and add comments based on their differences
&#120313;&#120812;&#120319;&#120310;&#120315;&#120304;: But it would help reviewers a lot if the basics were already covered by robots (the bot could even ACK when it thinks there are no blockers) - given that human review is even more of a bottleneck than ever...
&#120314;&#120302;&#120325;&#120306;&#120305;&#120324;: happy to add AI review page to Corecheck if people think it's useful.
&#120326;&#120302;&#120315;&#120304;&#120326;: corecheck.dev is pretty nice for frequent contributors that know about the dashboard. New people are probably not going to look at it, even if the PR says look over there.
&#120313;&#120812;&#120319;&#120310;&#120315;&#120304;: drahtbot could automatically convert to draft for new contributors if the AI review finds any blockers - with a response on how to mitigate the problem
&#120313;&#120812;&#120319;&#120310;&#120315;&#120304;: if we end up using AI review, they should combine outputs from multiple models, not just the cheapest ones - which will likely cost thousands of dollars per month
&#120312;&#120302;&#120315;&#120327;&#120322;&#120319;&#120306;: instead of having people donate AI output tokens, they should donate AI API keys to specific developers who can prompt better and burn those tokens for more useful outputs.</code></pre><p>Read the <a href="https://achow101.com/ircmeetings/2026/bitcoin-core-dev.2026-10-01_16_00.html">full meeting</a></p><div><hr></div><h4><strong>Releases</strong></h4><ul><li><p><code>v32.0rc3</code> was tagged 2026-10-01 by fanquake. Signed git tag (<code>fbdd0f96</code>, commit <code>2633a1de</code>). Message: "Bitcoin Core 32.0 release candidate 3". No GitHub Release page. The bump is <a href="https://github.com/bitcoin/bitcoin/pull/36400">#36400</a>, on top of the backports in <a href="https://github.com/bitcoin/bitcoin/pull/36300">#36300</a>.</p></li></ul><div><hr></div><blockquote><p>Thank you for reading. Be sure to tune in again next week for your updates on Bitcoin Core!</p></blockquote><p><em>If there are any comments, suggestions, or errors, do not hesitate to reach out or comment</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://insider.btcpp.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">bitcoin++'s Insider Edition is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Shielded Bitcoin & PIPEs: 12 Questions & Answers]]></title><description><![CDATA[Twelve questions, misconceptions, and avenues for research the [[alloc] init] team is addressing in their pursuit of privacy on Bitcoin]]></description><link>https://insider.btcpp.dev/p/shielded-bitcoin-and-pipes-facts</link><guid isPermaLink="false">https://insider.btcpp.dev/p/shielded-bitcoin-and-pipes-facts</guid><dc:creator><![CDATA[~nifty~]]></dc:creator><pubDate>Wed, 30 Sep 2026 14:03:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!qB36!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e416dc1-4c01-4cee-8b37-e34868868e0f_1254x1254.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Since its publication last week, <a href="https://www.allocinit.xyz/">[[alloc] init]&#8217;</a>s Shielded Bitcoin <a href="https://www.allocinit.xyz/uploads/shielded-bitcoin.pdf">proposal</a>, along with <a href="https://eprint.iacr.org/2026/186">PIPEs v2 </a>published earlier this year, has generated plenty of excitement, along with a fair share of skepticism. Not surprising. The proposals use relatively novel cryptography to pursue something ambitious: private Bitcoin transfers, programmable vaults, and more expressive spending conditions without a Bitcoin soft fork, separate blockchain, or trusted operator set.</p><p>The problem is that the public discourse has started to blur together very different kinds of criticism. Some objections misunderstand how the architecture works. Some are frustrated that the vault mechanism wasn&#8217;t detailed in the paper. Spoiler: it&#8217;s being published in its own paper for good reason &#8211; as a separate contribution to Bitcoin research. Others point to genuine trust assumptions, engineering tradeoffs, or cryptographic risks. And others are flustered that it&#8217;s just not ready for production yet.</p><p>We sat down with <a href="https://btcpp.dev/whois/clarashik">Clara Shikhelman</a>, the protocol lead for Shielded Bitcoin at [[alloc] init], to answer the most important questions about Shielded Bitcoin and PIPEs &#8212; clarifying what the proposals claim, where the research stands today, and what still needs to be demonstrated.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qB36!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e416dc1-4c01-4cee-8b37-e34868868e0f_1254x1254.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qB36!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e416dc1-4c01-4cee-8b37-e34868868e0f_1254x1254.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qB36!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e416dc1-4c01-4cee-8b37-e34868868e0f_1254x1254.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qB36!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e416dc1-4c01-4cee-8b37-e34868868e0f_1254x1254.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qB36!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e416dc1-4c01-4cee-8b37-e34868868e0f_1254x1254.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qB36!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e416dc1-4c01-4cee-8b37-e34868868e0f_1254x1254.jpeg" width="1254" height="1254" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5e416dc1-4c01-4cee-8b37-e34868868e0f_1254x1254.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1254,&quot;width&quot;:1254,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:531432,&quot;alt&quot;:&quot;A Shielded Bitcoin walks down a PIPEs v2&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://insider.btcpp.dev/i/218049301?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e416dc1-4c01-4cee-8b37-e34868868e0f_1254x1254.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A Shielded Bitcoin walks down a PIPEs v2" title="A Shielded Bitcoin walks down a PIPEs v2" srcset="https://substackcdn.com/image/fetch/$s_!qB36!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e416dc1-4c01-4cee-8b37-e34868868e0f_1254x1254.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qB36!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e416dc1-4c01-4cee-8b37-e34868868e0f_1254x1254.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qB36!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e416dc1-4c01-4cee-8b37-e34868868e0f_1254x1254.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qB36!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e416dc1-4c01-4cee-8b37-e34868868e0f_1254x1254.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A Shielded Bitcoin walks down a PIPE v2</figcaption></figure></div><h2><strong><br>#1: Isn&#8217;t this just Zcash bolted onto Bitcoin?</strong></h2><p>There&#8217;s some truth there &#8212; and an important difference. Shielded Bitcoin deliberately draws from the body of privacy research pioneered by systems like Zcash: encrypted notes, nullifiers, and zero-knowledge proofs. Unlike Zcash, <strong>Shielded Bitcoin proposes BTC-denominated shielded notes, with Bitcoin providing publication, ordering, and settlement, and the underlying BTC secured through PIPEs-based L1 vaults. </strong>The shielded transfer rules do not become part of Bitcoin consensus, but there is no separate blockchain, consensus mechanism, or token either.</p><p>There&#8217;s an interesting parallel between Zcash, Shielded Bitcoin, and the underlying cryptography for each. In 2013, Pinocchio demonstrated that zero-knowledge proofs could be made practical for the first time. Three years later, Zcash became one of their first major production applications, using zk-SNARKs for shielded transactions. But the <strong>research lineage behind Zcash had actually begun with an ambition to bring stronger privacy to Bitcoin</strong>. As Zcash co-founder Eli Ben-Sasson put it when responding to Shielded Bitcoin last week, <em>&#8220;our original intent with Zerocash paper &#8230; was to bring privacy to Bitcoin.&#8221;</em> But Bitcoin could not verify the required proofs (and Witness Encryption barely existed at the time), so that research ultimately found its expression in a new blockchain where the cryptography could be incorporated into the consensus rules.</p><p>Zcash took ZKPs from theory to deployment. Shielded Bitcoin could provide that path for Witness Encryption on Bitcoin. <strong>If Witness Encryption can be made secure and practical, we don&#8217;t need to build a new blockchain to bring this kind of cryptographic privacy to Bitcoin.</strong> Instead of adding new opcodes to Bitcoin to verify new conditions (along with the security and consensus risks it introduces), PIPEs can put those conditions behind a Bitcoin signature &#8212; potentially enabling privacy and other new capabilities while leaving Bitcoin itself unchanged.</p><p>So yes, Shielded Bitcoin owes an intellectual debt to Zcash and the privacy research that came before it. <strong>The interesting part is that Witness Encryption may give us a path to bring that original vision back to Bitcoin.</strong></p><h2><strong>#2: What is Shielded Bitcoin if it&#8217;s not L1, an L2, or a sidechain?</strong></h2><p>This question comes down to being precise about semantics.</p><p>Let&#8217;s first clarify that Shielded Bitcoin is not part of Bitcoin consensus: Bitcoin nodes validate the underlying Bitcoin transactions, not Shielded Bitcoin&#8217;s private transfer rules. But Shielded Bitcoin also does not introduce another blockchain, consensus mechanism, sequencer, or validator set.</p><p><strong>A more accurate description is a Bitcoin metaprotocol</strong>. Protocol data is published to and canonically ordered by Bitcoin, while a separate indexer/explorer parses that data to derive the protocol state <em>deterministically</em>. <strong>Shielded Bitcoin&#8217;s state can be reconstructed from Bitcoin L1 history</strong> <strong>rather than being reliant on client-side state storage</strong> (i.e., in Shielded Bitcoin if you lose your state, you still keep your Bitcoin), while the underlying native BTC remains on Bitcoin L1. The protocol&#8217;s rules are not part of Bitcoin consensus itself, but describing the architecture as a conventional sidechain is misleading for essentially the opposite reason: there is no second chain or separate consensus system.</p><h2><strong>#3: Even if the transfers are private, isn&#8217;t privacy compromised by transaction metadata and fees?</strong></h2><p>Shielded transfers provide strong cryptographic privacy, but &#8212; as with any privacy protocol &#8212; the system&#8217;s boundaries require separate consideration. Peg-ins, peg-outs, carrier transactions, timing, network activity, and fee payments can expose metadata if handled naively.</p><p>These are known design problems with practical mitigation paths. Shielded Bitcoin is being designed to minimize these linkages through mechanisms including privacy-preserving peg-outs, atomic swaps, fresh addresses, and improved fee payment flows.</p><p>The important distinction is between privacy within the shielded system, which is enforced cryptographically, and privacy at its boundaries, which depends on how users enter, exit, and interact with Bitcoin. Our focus now is hardening those boundary mechanisms so the privacy properties of shielded transfers extend as far as practical into the surrounding Bitcoin workflow.</p><h2><strong>#4:</strong><em><strong> </strong></em><strong>Isn&#8217;t it a trusted bridge? Who controls it?</strong></h2><p>No. The proposed architecture is fully non-custodial: <strong>there is no company, committee, operator, federation, or other party that takes custody of users&#8217; Bitcoin or has ongoing control over whether it can be spent.</strong> There is no intermediary sitting between Alice and Bob deciding whether a transaction or withdrawal is permitted. At its simplest: it&#8217;s Alice, Bob, and cryptography in between.</p><p><strong>This objection tends to conflate two very different concepts: trusted setup and trusted operation</strong>. PIPEs does have trusted<em> </em>setup assumptions. Constructing a PIPE ciphertext involves a one-time 1-of-n multiparty computation (MPC) ceremony, and the ZK proof system may introduce its own setup assumptions. But those participants do not become custodians or operators. They aren&#8217;t required to remain online, process transactions, approve withdrawals, or exercise ongoing control over users&#8217; funds.</p><p>Instead, PIPEs is designed so that satisfying a specified cryptographic condition enables recovery of the signing key needed to spend the Bitcoin. <strong>Cryptography replaces the role that a trusted operator, committee, or multi-sig would otherwise play.</strong> Once the setup is complete, no setup participant is supposed to control the funds or participate in the user flow.</p><p>The current Shielded Bitcoin<a href="https://www.allocinit.xyz/uploads/shielded-bitcoin.pdf"> paper</a> does not include vault architecture and details for entry and exit (i.e., &#8220;peg&#8221; in and out). <strong>This separation is deliberate because the vault architecture is a substantial protocol design contribution in its own right, with applications beyond Shielded Bitcoin. </strong>We believe it warrants dedicated treatment as a separate contribution to Bitcoin research rather than being compressed into the privacy protocol paper. A forthcoming vault design paper is largely complete and will specify and analyze that architecture in detail. We look forward to putting it forward for community review and feedback.</p><h2><strong>#5: Don&#8217;t users still have to trust an indexer or maintain client-side state?</strong></h2><p><strong>No. Indexers are a synchronization convenience, not a trusted part of the protocol.</strong> Shielded Bitcoin transfer data is published to Bitcoin, allowing the protocol state &#8212; including the note tree, spent-nullifier set, and relevant roots &#8212; to be reconstructed by replaying that data in Bitcoin order.</p><p><strong>An indexer therefore acts more like a block explorer than an operator.</strong> It never has access to a user&#8217;s private keys, cannot spend their notes, and has no authority over protocol state. A malicious indexer can omit data, return stale information, or refuse service, but its responses can be independently verified against Bitcoin history. Efficient verified light-client synchronization remains an area of ongoing engineering.</p><p><strong>Users also do not need to preserve client-side state to recover their funds.</strong> The protocol state is reconstructible from Bitcoin L1 history; losing a wallet&#8217;s synchronized state does not mean losing the underlying protocol state.</p><p>This creates an important distinction from systems where users must preserve private state that cannot be recovered from Bitcoin. The relevant question isn&#8217;t whether an indexer or local state exists at all &#8212; it&#8217;s whether either must be trusted or preserved for correctness and recovery. In Shielded Bitcoin, neither needs to be.</p><h2><strong>#6: Without its own consensus, how can Shielded Bitcoin prevent double-spends or handle reorgs?</strong></h2><p><strong>Shielded Bitcoin does not have separate consensus, but it does have agreed-upon protocol rules defining what constitutes a valid Shielded Bitcoin transaction.</strong> Bitcoin provides the canonical publication and ordering of protocol data; Shielded Bitcoin deterministically applies its own validity rules to that ordered history.</p><p>Double-spends are prevented using nullifiers. When a note is spent, its corresponding nullifier is published, and the transfer proof demonstrates that the spend is valid. If the same nullifier appears again, the second spend is invalid under the Shielded Bitcoin protocol rules. Because everyone applies the same rules to the same Bitcoin-ordered data, they can independently reconstruct the same valid shielded state.</p><p>These are <strong>Shielded Bitcoin validity rules, not Bitcoin consensus rules</strong>. Bitcoin does not determine whether a shielded transfer is valid; it determines the canonical history over which Shielded Bitcoin&#8217;s rules are applied.</p><p>Bitcoin reorgs therefore naturally propagate into Shielded Bitcoin. If Bitcoin&#8217;s canonical history changes, the corresponding shielded state is rolled back and replayed against the new history. A proof referencing a root removed by the reorg may need to be reconstructed and republished. As with Bitcoin transactions generally, users can wait for additional Bitcoin confirmations when greater settlement confidence is required.</p><h2><strong>#7: Isn&#8217;t Witness Encryption novel and therefore risky?</strong></h2><p>Witness Encryption has been studied in cryptography since 2013, but unlike ZKPs, it has not yet crossed the gap from theoretical research to practical, production-grade cryptography. PIPEs should therefore not be treated as though it were a mature primitive with decades of battle testing behind it. <strong>The more useful question is whether a Witness Encryption construction can eventually be made secure and practical enough for this particular application.</strong> If proven so, it may become known as one of the most significant breakthroughs in applied cryptography since zero-knowledge proofs first became practical with Pinocchio in 2013 and later became widespread in blockchain tech in the 2020s.</p><p><strong>Our research is making steady progress toward a Witness Encryption construction that is both secure and practical.</strong> It&#8217;s not there yet, and we&#8217;re not claiming otherwise. We have been deliberately attacking our own cryptographic constructions through cryptanalysis, open challenges, security auditing with external researchers, and open collaboration with outside researchers. That process has already yielded successful attacks that we&#8217;ve since resolved. So the conclusion at this stage isn&#8217;t that witness encryption has been proven secure. It&#8217;s that its security remains important to harden, and we are focused on doing that systematically. Keep an eye on our <a href="https://x.com/allocinitxyz">X</a> for updates &#8211; and especially to get a chance at Bitcoin bounties we will offer as part of on-chain challenges; crack the scheme, and it&#8217;s yours!</p><h2><strong>#8: Isn&#8217;t the AADP Witness Encryption scheme broken?</strong></h2><p><strong>The original construction was successfully attacked, and we have since fixed the scheme to address every identified attack. </strong>The AADP Witness Encryption construction published in February 2026 (<a href="https://x.com/allocinitxyz/status/2019426029920743584?s=20">link</a>) was successfully attacked both through our own cryptanalysis and by researchers participating in [[alloc] init]&#8217;s Open Challenges (<a href="https://www.allocinit.xyz/posts/challenges">link</a>). These attacks demonstrated a method to make a parametric rank drop within AADP matrices larger than we expected earlier, which reduced the complexity of brute-forcing a correct key through an incorrect witness (<a href="https://www.allocinit.xyz/posts/commutator-attack">https://www.allocinit.xyz/posts/commutator-attack</a>). We have since revised the construction to address the identified attacks and plan to formalize those changes in upcoming publications.</p><p>The distinction between &#8220;broken and subsequently fixed&#8221; and &#8220;still broken&#8221; matters. <strong>Finding and fixing attacks is a normal and valuable part of cryptographic research (e.g., <a href="https://blog.blockstream.com/musig2-simple-two-round-schnorr-multisignatures/">MuSig2</a>, Signal&#8217;s <a href="https://cryspen.com/post/pqxdh/">PQXDH</a>), particularly at this stage of a new construction.</strong> But it would also be premature to treat an unpublished revision as though it had already received the scrutiny of the original proposal. The successful attacks are therefore neither evidence that the research has failed nor something to gloss over: they identified concrete weaknesses (the complexity of a parametric rank drop was reduced for sparse circuits), those specific attack vectors have been addressed, and the process of breaking, improving, and scrutinizing the construction continues.</p><h2><strong>#9: Don&#8217;t PIPEs require 338 TB? How could this possibly be practical?</strong></h2><p><strong>Subsequent research has reduced the ciphertext size from approximately 338 TB to roughly 10 TB under current parameters &#8212; a more than 30x reduction since the original construction.</strong> The 338 TB figure reflects the AADP construction published in February 2026 (<a href="https://x.com/allocinitxyz/status/2019411470232989918?s=20">here</a>), not the current state of the research. The ciphertext also does not need to be stored by each user. Because it can be public, storage can be outsourced or distributed across inexpensive, high-latency storage infrastructure without introducing an additional trust assumption.</p><p>While a substantial improvement, 10 TB is obviously still large. We do not present it as a production benchmark or promise, and reducing both ciphertext size and computational requirements even further remains an active area of research efforts. The claim that PIPEs &#8220;still requires 338 TB&#8221; is outdated. The broader question &#8212; whether PIPEs can ultimately become practical enough to deploy &#8212; remains open.</p><p><strong>&#8220;Practical&#8221; also depends on the use case. PIPEs are not intended to be decrypted for every transaction. Moving and managing Bitcoin </strong><em><strong>inside</strong></em><strong> a shielded system does not require decrypting a PIPE at all; </strong>decryption is primarily needed to exercise the unilateral L1 vault exit mechanism. Users requiring frequent entry or exit could also use cheaper mechanisms, such as atomic swaps. The relevant question, then, is not whether PIPE decryption is cheap enough for every Bitcoin transaction, but whether its cost and latency are practical for the specific operations that actually require it.</p><h2><strong>#10: Can&#8217;t a circuit bug secretly inflate the supply?</strong></h2><p>First, Shielded Bitcoin cannot alter Bitcoin&#8217;s total supply.</p><p><strong>The relevant risk is whether an implementation bug could create unbacked shielded claims against the BTC held in the system&#8217;s Bitcoin vaults.</strong></p><p>That risk should be taken seriously. A sufficiently severe bug in the ZK circuit or protocol implementation could cause an invalid state transition to be accepted. <strong>Mitigating this requires formal verification where possible, audit-friendly tooling, independent audits, adversarial testing, and extensive cryptographic review.</strong></p><p>The protocol constantly enforces two critical invariants to ensure supply integrity:</p><ol><li><p>Transfers within the shielded system cannot create value (and the supply is being checked using ZK proofs within the circuit during each encrypted note formation).</p></li><li><p>Shielded issuance cannot exceed the amount of BTC committed to the system. Because PIPEs require cryptographic proof during peg-out, Witness Encryption will not decrypt a key to allow a user to retrieve BTC on the L1 if the notes do not pass validity checks.</p></li></ol><p><strong>These invariants are designed to prevent inflation at both the shielded transfer and L1 settlement boundaries, significantly reducing the underlying risk. </strong>The most critical remaining risk lies in implementation: bugs that could undermine these guarantees. Preventing them requires rigorous testing, independent audits, formal verification where possible, and adversarial review. Zcash&#8217;s historical inflation vulnerability is a useful reminder of why these invariants deserve particularly aggressive scrutiny.</p><h2><strong>#11: Can Shielded Bitcoin and PIPEs become quantum-safe?</strong></h2><p><strong>Yes, the architecture is designed to be cryptographically adaptable</strong>, although post-quantum security ultimately also depends on Bitcoin itself becoming quantum-safe.</p><p><strong>For signatures, the key encrypted within PIPEs could move from Schnorr to a post-quantum signature scheme </strong>such as SHRINCS. <strong>For ZK proofs, the underlying proof system could similarly be replaced </strong>with one based on post-quantum-friendly assumptions, including hash-based constructions using functions such as Poseidon (created by our colleague Markus Schofnegger and others), while much of the circuit logic remains unchanged.</p><p>We&#8217;re also designing around &#8220;harvest now, decrypt later&#8221; risks, where ciphertext collected today could potentially be attacked by future quantum computers.<strong> There are meaningful efficiency and security tradeoffs to work through, but PIPEs and Shielded Bitcoin are not fundamentally locked into today&#8217;s cryptographic primitives. </strong>The primary external dependency is Bitcoin L1&#8217;s own path toward post-quantum signatures.</p><h2><strong>#12: Does Bitcoin need a soft fork for any of this?</strong></h2><p>No. Bitcoin continues to process ordinary Bitcoin transactions under its existing consensus rules, while Shielded Bitcoin applies its own metaprotocol rules to data published and ordered by Bitcoin. <strong>No new opcodes, consensus changes, or soft forks are required.</strong></p><p>But &#8220;no change to Bitcoin&#8221; shouldn&#8217;t be confused with &#8220;nothing else needs to be built.&#8221; There is a lot that needs to be formalized at the security level and built at the engineering level.</p><p>That is probably the most useful way to understand Shielded Bitcoin and PIPEs today. They are research proposals rather than finished products, and some of the hardest questions &#8212; particularly around Witness Encryption security, performance, and the vault boundary &#8212; remain open. At the same time, several common criticisms assume architectural properties the proposals don&#8217;t actually have, such as a separate blockchain, an independent consensus mechanism, or a federation that controls the underlying Bitcoin.</p><h3><strong>So the interesting debate isn&#8217;t whether the cryptography has been solved or whether Shielded Bitcoin is production-ready.</strong></h3><p>The more consequential question is: <strong>what becomes possible if the underlying cryptography can be made secure and practical? </strong>If PIPEs and Witness Encryption work, the implications extend far beyond Shielded Bitcoin. <strong>They could open an entirely new design space for Bitcoin:</strong> privacy, covenants, programmable vaults, non-interactive ZK verification, and new metaprotocols &#8212; without requiring Bitcoin itself to change.</p><p>That&#8217;s why we think our work is worth attacking, breaking, improving, and scrutinizing. There are hard problems left to solve, and the work should be judged by whether it survives that process. So attack it. Find the weaknesses. Suggest improvements. Build on it.</p><p><strong>We believe that PIPEs and Shielded Bitcoin are not only possible, but just the beginning of what we can build on Bitcoin. We still have a long way to go, and we plan to move forward carefully and steadily, one step at a time.</strong></p><p><br><em>Thanks to <a href="https://btcpp.dev/whois/clarashik">Clara Shikhelman</a> and the rest of the [[alloc] init] team for making themselves available for this FAQ. Clara has served as the Head of Research at Chaincode Labs since 2022, and now leads protocol research at <a href="https://www.allocinit.xyz/">[[alloc] init]</a> on Shielded Bitcoin, a proposal for private Bitcoin transactions.</em></p>]]></content:encoded></item><item><title><![CDATA[Private Bitcoin Payments — Last Week in Bitcoin (Sep 21 - 27)]]></title><description><![CDATA[Hi Insiders.]]></description><link>https://insider.btcpp.dev/p/private-bitcoin-payments-last-week</link><guid isPermaLink="false">https://insider.btcpp.dev/p/private-bitcoin-payments-last-week</guid><dc:creator><![CDATA[Tuma (I WILL NEVER DM YOU)]]></dc:creator><pubDate>Mon, 28 Sep 2026 14:01:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-pYh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5da7feb2-e070-41a0-b51b-019ef14e6a86_1600x900.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hi Insiders. This is Tuma, open-source reporter from the Insider Edition.</em></p><p><em>In this week&#8217;s update we feature some new NUT specifications currently being discussed for improving the Cashu protocol.</em></p><p><em>We also cover Shielded Bitcoin, a new protocol by [[alloc]init] to private bitcoin transactions, the new plugin by Second for simplifying accepting Bitcoin through BTCPayServer, Ben Carman&#8217;s work to include Lightning in the x402 specifications, and the latest maintenance release for Core-Lightning.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-pYh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5da7feb2-e070-41a0-b51b-019ef14e6a86_1600x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-pYh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5da7feb2-e070-41a0-b51b-019ef14e6a86_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-pYh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5da7feb2-e070-41a0-b51b-019ef14e6a86_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-pYh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5da7feb2-e070-41a0-b51b-019ef14e6a86_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-pYh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5da7feb2-e070-41a0-b51b-019ef14e6a86_1600x900.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-pYh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5da7feb2-e070-41a0-b51b-019ef14e6a86_1600x900.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5da7feb2-e070-41a0-b51b-019ef14e6a86_1600x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:347184,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://insider.btcpp.dev/i/217807720?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5da7feb2-e070-41a0-b51b-019ef14e6a86_1600x900.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-pYh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5da7feb2-e070-41a0-b51b-019ef14e6a86_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-pYh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5da7feb2-e070-41a0-b51b-019ef14e6a86_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-pYh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5da7feb2-e070-41a0-b51b-019ef14e6a86_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-pYh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5da7feb2-e070-41a0-b51b-019ef14e6a86_1600x900.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h1><strong>Highlights from the Bitcoin developer ecosystem</strong></h1><p><em>I spent 10+ hours in open-source developer calls in the Bitcoin ecosystem last week. Here is what caught my eye</em>:</p><ul><li><p>The Cashu ecosystem is working on implementing new features and proposing new NUT specifications.</p><ul><li><p>During the monthly community calls, on Thursday 24th, Cashu developers discussed the latest news from the ecosystem. In particular, they presented new additions to the NUT specifications.</p></li><li><p><a href="https://github.com/cashubtc/nuts/pull/433">PR433</a> introduces compact state filter, a concept similar to compact block filters (<a href="https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki">BIP158</a>) available on Bitcoin. This new feature aims to increase the privacy of the protocol by allowing a wallet to retrieve the information about the state of a token locally, without providing the mint with all the token identifiers. Instead, the mint would provide the wallet with filters containing the state of a token.</p></li><li><p><a href="https://github.com/cashubtc/nuts/pull/450">PR450</a> adds an optional NUT that allows a mint to publish a bid and an ask price on its own liquidity. Since there are several payment methods available for minting and melting &#8212; LN, on-chain, Bark &#8212;, this NUT would allow the mint to set different prices on the liquidity available on different payment methods, thus attracting liquidity where needed the most.</p></li></ul></li></ul><div><hr></div><h1>A BIPs Update</h1><p><em>In the last days there was some movement in the <a href="https://github.com/bitcoin/bips">BIP repository</a>. Specifically, one new BIP has been published by BIP maintainer <a href="https://github.com/murchandamus">Murchandamus</a>.</em></p><h2>Published BIPs</h2><p><em>A list of recently published BIPs</em></p><h3><strong>BIP138: Compact encryption scheme for non-seed wallet data</strong></h3><p><strong>Authors</strong>: <a href="https://github.com/pythcoiner">Pyth</a></p><p><strong>Published On</strong>: Sep 21st, 2026</p><p><strong>Layer</strong>: Applications</p><p>BIP138 specifies a compact encryption scheme for output descriptors, wallet policies, labels, and wallet backup metadata to allow users to store sensible information on untrusted media. The encryption key is derived from the public keys in the descriptor, allowing any keyholder to decrypt the data without additional secrets.</p><div><hr></div><h1>Other News from the Bitcoin World</h1><ul><li><p><strong>Shielded Bitcoin</strong>: <a href="https://www.allocinit.xyz/">[[alloc]init]</a> presented a new metaprotocol to make Bitcoin transactions more private, called Shielded Bitcoin. The proposal &#8212; presented in a <a href="https://www.allocinit.xyz/uploads/shielded-bitcoin.pdf">dedicated paper</a> by Clara Shikhelman, Misha Komarov, and Aleksei Moskvin &#8212; does not require neither changes to the Bitcoin consensus, nor operators or trusted third parties.</p><ul><li><p>A Shielded Bitcoin transaction is a blob of data included in an on-chain transaction through an <code>OP_RETURN</code> or other data-carrying fields. The transaction validation is demanded to an external node, called Indexer, which has also the task to update the state of an output.</p></li><li><p>Shielded Bitcoin uses a specific type of output, called note, which plays a similar role as a Bitcoin UTXO. However, while UTXOs are deleted from the set once they are consumed, notes are spent by posting a proof and nullifier. To check whether a note has been spent or not, a user checks if its nullifier has already been used or not.</p></li><li><p>For what concerns the peg, the protocol uses <a href="https://bitcoinops.org/en/newsletters/2026/02/20/#bitcoin-pipes-v2">Bitcoin PIPEs v2</a>. This is a witness encryption method that can be used to reproduce covenant semantics without changes to Bitcoin consensus. Basically, instead of locking a certain output behind a spending condition, it allows a user to specify those conditions on the key needed to move those funds, adding prerequisites on whether a valid signature can be produced or not.</p></li></ul></li><li><p><strong>Bark &lt;&gt; BTCPayServer</strong>: Second &#8212; the company behind the Ark implementation Bark &#8212; <a href="https://x.com/secondhq/status/2103176453491925159">announced</a> that their plugin for BTCPayServer was available for use in production.</p><ul><li><p>Historically, BTCPayServer has relied on Lightning to allow merchants to accept Bitcoin payments. That meant taking on all the difficulties of running a full Lightning node, such as channel management, liquidity, and maintenance.</p></li><li><p>The new Bark plugin allows merchants to accept Bitcoin without all of that. Users will now be able to run their self-hosted BTCPayServer instance without running a Lightning node behind and to accept self-custodial, instant Bitcoin payment in a simpler way.</p></li></ul></li><li><p><strong>Lightning &lt;&gt; x402</strong>: LDK maintainer Ben Carman <a href="https://x.com/benthecarman/status/2102777863607050456">announced</a> that Lightning had been officially included in the x402 specifications.</p><ul><li><p><a href="https://github.com/x402-foundation/x402">x402</a> is an open standard for native internat payments built on top of HTTP. It is currency-agnostic, which mean that it can support any payment rail, such as Bitcoin, stablecoins, and fiat. It is supported by some of the biggest corporations in the world, such as Amazon, Amex, Google, Mastercard, but also by come big companies in the wider crypto industry, such as Ripple, Coinbase, Solana.</p></li><li><p>Given the companies involved, it is not surprising that Bitcoin had not been added yet to the x402 standard. Ben Carman was able to close this gap, pushing for the <a href="https://github.com/x402-foundation/x402/pull/2861">inclusion of Lightining</a> in the specifications.</p></li></ul></li><li><p><strong>CLN Release</strong>: The Core-lightning team <a href="https://x.com/Core_LN/status/2102953514838425660">announced</a> the release of a new maintenance version of the Lightning node software, <a href="https://github.com/ElementsProject/lightning/releases/tag/v26.06.8">v26.06.8</a>. This version includes several fixes for bugs and vulnerabilities that were responsibly disclosed in the last weeks. Contrary to the previous version, no embargo was put on this release, making the source code available from the beginning. However, the team noted that some tests were withheld from publication to prevent attackers from reverse-engineering the vulnerabilities.</p></li></ul><div><hr></div><h1>More from BTC++ Insider Edition</h1><h3>Articles</h3><ul><li><p><a href="https://insider.btcpp.dev/p/silent-payments-finally-made-some">Silent Payments finally made some noise - This Week in Bitcoin Core #59</a></p></li></ul><h3>Videos</h3><ul><li><p><a href="https://x.com/btcinsider__/status/2103137388239462410">Russel O&#8217;Connor &#8212; BTC++ Insider Interviews | Part 1</a>: Russel O&#8217;Connor talks to the Insider about his current work in formal verification of mathematics and software.</p></li><li><p><a href="https://x.com/btcinsider__/status/2103227982638670313">Russel O&#8217;Connor &#8212; BTC++ Insider Interviews | Part 2</a>: Russel O&#8217;Connor lks to the Insider about SafeGDC, the new algorithm for modular inverse and how Bitcoin devs like Greg Maxwell, Pieter Wuille, and Peter Dettman implemented it in libsecp256k1 and how it was formally verified.</p></li><li><p><a href="https://x.com/btcinsider__/status/2103499767074746712">Russel O&#8217;Connor &#8212; BTC++ Insider Interviews | Part 3</a>: Russel O&#8217;Connor talks to the Insider about libsecp256k1, and the initial choices Satoshi made on the cryptography of Bitcoin.</p></li><li><p><a href="https://x.com/btcinsider__/status/2103590369292341580">Russel O&#8217;Connor &#8212; BTC++ Insider Interviews | Part 4</a>: Russel O&#8217;Connor talks to the Insider about why he chose to work on modular inverse and what he would like to work on next.</p></li></ul><div><hr></div><p><em>Looking for an opportunity to join up with some bitcoin devs in person? Join us in <a href="https://btcpp.dev/berlin26?code=TUMA20">Berlin</a> this October 1- 3 to talk about payments in Bitcoin!</em></p>]]></content:encoded></item><item><title><![CDATA[Silent Payments finally made some noise - This Week in Bitcoin Core #59]]></title><description><![CDATA[This week Silent Payments has some motion...]]></description><link>https://insider.btcpp.dev/p/silent-payments-finally-made-some</link><guid isPermaLink="false">https://insider.btcpp.dev/p/silent-payments-finally-made-some</guid><dc:creator><![CDATA[kevkevin]]></dc:creator><pubDate>Fri, 25 Sep 2026 14:03:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MJw8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hello &#128075; folks, I&#8217;m Kevkevin. I&#8217;m an open-source developer and reporter for Insider Edition. Last week I reviewed several pull requests from the Bitcoin Core repo. The most-reviewed merge this week is silent payments, and the PR still doesn't open a wallet. BIP352 take 2 is on master as protocol code: public keys, private keys, and the BIP test vectors as unit tests. Receiver labels are optional in the BIP, so they stay out. The wallet scan is a different pull request.<br><br>BIP352 is the silent-payment construction. The sender tweaks the receiver&#8217;s spend key with a shared secret from the sender&#8217;s input keys and the receiver&#8217;s scan key, and pays to that one-time output. The receiver recomputes the same tweak from the input public keys. #35301 keeps that logic off the wallet and off transaction objects, so the tests do not need a wallet backend. It replaces #28122 and is built on libsecp256k1 #1765. The tracking issue is #28536. Receiving is still draft #32966.</p><p>The next merge by review activity is <code>listrawtransactions</code>. <code>listtransactions</code> only emits transactions with an economic category, so a consolidation or a self-transfer never appears. The new RPC lists every wallet transaction once, with the net balance change and the fee when this wallet funded it.</p><p>Thursday&#8217;s #bitcoin-core-dev meeting had three topics: dergoegge is leaving full-time fuzzing work, the QML GUI group is still in design and staging, and the <code>v32.0rc2</code> binaries are up.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MJw8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MJw8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MJw8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MJw8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>Merged PR&#8217;s</strong></h4><h5><strong>Every week, several changes are officially added to Bitcoin Core. This week, </strong>multiple <strong>changes were merged. Here are some I found interesting this week.</strong></h5><ul><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/35301">Silent Payments: Implement bip352 (take 2)</a></strong> by <strong><a href="https://github.com/Eunovo">Eunovo</a></strong></p><p>Oghenovo Usiwoma (Eunovo) merged the second attempt at BIP352. The first attempt was #28122. This one is based on <a href="https://github.com/bitcoin-core/secp256k1/pull/1765">secp256k1 #1765</a> and tracked in <a href="https://github.com/bitcoin/bitcoin/issues/28536">#28536</a>.<br></p><p>The PR is only the BIP. It takes public and private keys directly, instead of a wallet backend and transactions, and the BIP test vectors are unit tests. Labels, which let one scan key from multiple addresses, are deferred. Nothing here wires silent payments into <code>CWallet</code>. That receiving work is still <a href="https://github.com/bitcoin/bitcoin/pull/32966">#32966</a>, and it is a draft.</p></li><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/35813">wallet, rpc: Add listrawtransactions RPC</a></strong> by <strong><a href="https://github.com/pablomartin4btc">pablomartin4btc</a></strong><br><code>listtransactions</code> returns sends to an external address and receives from outside the wallet. A consolidation or a self-transfer has no external party, so it is invisible. <code>listrawtransactions</code> returns every transaction the wallet knows about, each one once. The entry carries the net wallet balance change (<code>amount</code>) and, when this wallet funded the transaction, the <code>fee</code>. <code>count</code> and <code>skip</code> match <code>listtransactions</code>. Closes #34632.<br></p><p>#35009, by alfonsoromanz, was closed so this could be its own RPC, which is what achow101 asked for. The PR itself lists the follow-ups: a filter (<code>all</code> / <code>received</code> / <code>sent</code> / <code>self</code>) once the per-tx meaning is agreed, and a cleanup of <code>TransactionDescriptionString()</code> fields such as <code>replaced_by_txid</code> and <code>parent_descs</code> that still refer to <code>category</code>.</p></li></ul><h5><strong>There are always changes being updated and reviewed in real-time. Here are some notable PR&#8217;s that are still up and looking for reviews.</strong></h5><ul><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/36182">fees: return </a></strong><code>block_policy</code><strong><a href="https://github.com/bitcoin/bitcoin/pull/36182"> fee rate estimate when </a></strong><code>mempool_policy</code><strong><a href="https://github.com/bitcoin/bitcoin/pull/36182"> is not ready</a></strong> by <strong><a href="https://github.com/ismaelsadeeq">ismaelsadeeq</a></strong></p><p>The mempool fee estimator cannot always answer. Right after startup or a re-sync it has not tracked enough blocks. An empty or sparse mempool cannot fill the requested percentile. Recent blocks can cover too little of what was in the mempool. The mempool can still be loading. For a sparse mempool, Core used to return the fee floor (the higher of the minimum relay fee and the mempool minimum fee). That can sit far under the feerate those missing transactions would have implied.<br></p><p>This PR makes the mempool estimator return an error instead of flooring an unfilled percentile. The combined <code>estimatesmartfee</code> path starts from the block policy estimate and only lowers it when a mempool estimate exists. An error is returned only when block policy itself is unavailable. Calling <code>estimatesmartfee</code> with <code>fee_rate_estimator=mempool_policy</code> still returns the failure. The first commit renames the default mode from <code>none</code> to <code>auto</code>.<br></p><p>If the mempool fails to load (persistence off, or a missing or corrupt <code>mempool.dat</code>), init notifies the estimator and clears its mined-block window. Otherwise that window would still describe a mempool the node no longer has. Clearing it makes the estimator report insufficient data until the window refills, and the combined estimate uses block policy in the meantime.</p><blockquote><p>The mempool estimator now returns an error instead of flooring an unfilled percentile, so an empty/sparse mempool is treated like any other not-ready state rather than potentially silently underestimating.</p></blockquote></li></ul><div><hr></div><h4><strong>IRC meeting notes</strong></h4><h5><strong>Every week on Thursday, there is an IRC meeting. Here are some short notes from that meeting.</strong></h5><pre><code>&#120307;&#120311;&#120302;&#120309;&#120319;: There is one pre-proposed meeting topic this week. Any last minute ones to add?
&#120307;&#120311;&#120302;&#120309;&#120319;: Let's start with the WGs...

&#120307;&#120311;&#120302;&#120309;&#120319;: #topic Fuzzing WG Update (dergoegge, marcofleon)
&#120305;&#120306;&#120319;&#120308;&#120316;&#120306;&#120308;&#120308;&#120306;: After this week I won't be contributing here full time anymore (maybe in my spare time, but let's see), as I've accepted a job elsewhere
&#120305;&#120306;&#120319;&#120308;&#120316;&#120306;&#120308;&#120308;&#120306;: Most of my projects/work will be taken over by Brink's Marco and Eugene, so please direct any questions or review requests that you'd have for me towards them
&#120305;&#120306;&#120319;&#120308;&#120316;&#120306;&#120308;&#120308;&#120306;: I'll open PRs to remove myself as a security contact by the end of this week
&#120305;&#120306;&#120319;&#120308;&#120316;&#120306;&#120308;&#120308;&#120306;: It's been really great working with you all!
&#120307;&#120311;&#120302;&#120309;&#120319;: :/ sad
&#120324;&#120310;&#120313;&#120313;&#120304;&#120313;-&#120302;&#120319;&#120312;: :(
&#120321;&#120310;&#120308;&#120306;&#120319;&#120288;&#120302;&#120307;&#120310;&#120302;: dergoegge: very sad. only the best
&#120320;&#120321;&#120310;&#120304;&#120312;&#120310;&#120306;&#120320;-&#120323;: :( thanks for all your contributions. this project is in a much safer place because of it. have fun on the next thing!
&#120305;&#120327;&#120325;&#120327;&#120308;: Thanks for all your work on fuzzing!
&#120307;&#120311;&#120302;&#120309;&#120319;: I hope to still see you around somehow if possible. All the best! Is there still some update on the WG? I guess not since marcofleon isn't here...
&#120305;&#120306;&#120319;&#120308;&#120316;&#120306;&#120308;&#120308;&#120306;: No update otherwise
&#120311;&#120302;&#120315;&#120303;&#120820;&#120816;: Thanks for you work, sad to see you leave. Good luck on the new job
&#120307;&#120311;&#120302;&#120309;&#120319;: I hope the next one is a better update ;)

&#120307;&#120311;&#120302;&#120309;&#120319;: #topic QML GUI WG Update (johnny9dev)
&#120304;&#120307;&#120310;&#120306;&#120313;&#120305;&#120320;: :(
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: Nothing too significant this week. We're working through design, issues, and staging
&#120304;&#120307;&#120310;&#120306;&#120313;&#120305;&#120320;: dergoegge: Thank you for all of your hard work, dergoegge!
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: That's all for qml
&#120307;&#120311;&#120302;&#120309;&#120319;: brunoerg teased a yuge update last week but I guess he couldn't make it...
&#120307;&#120311;&#120302;&#120309;&#120319;: maybe later, moving on

&#120307;&#120311;&#120302;&#120309;&#120319;: #topic 32.0 release candidate testing (sedited)
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: yes, the 32.0rc2 binaries are now available for testing.
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: the umbrella issue over here: https://github.com/bitcoin/bitcoin/issues/36315 links to both the proposed release notes and the testing guide. If you find something, do use this for tracking.
&#120307;&#120311;&#120302;&#120309;&#120319;: sedited: that's it on that topic right?
&#120313;&#120812;&#120319;&#120310;&#120315;&#120304;: thanks for your work dergoegge
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: we've picked up a few pull more requests in the milestone for backporting https://github.com/bitcoin/bitcoin/milestone/84
&#120320;&#120310;&#120317;&#120302;: dergoegge: not a surprise, but still sad to see you go
&#120307;&#120311;&#120302;&#120309;&#120319;: l0rinc: you still want to give an update?
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: please do test, we've hadn't had a release note this long in a while!
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: that's all.
&#120313;&#120812;&#120319;&#120310;&#120315;&#120304;: fjahr: no, thanks
&#120307;&#120311;&#120302;&#120309;&#120319;: Anything else to discuss?
&#120307;&#120311;&#120302;&#120309;&#120319;: #endmeetingRead here for the <a href="https://achow101.com/ircmeetings/2026/bitcoin-core-dev.2026-09-17_16_00.html">full meeting</a></code></pre><p>Read the <a href="https://achow101.com/ircmeetings/2026/bitcoin-core-dev.2026-09-24_16_00.html">full meeting</a></p><div><hr></div><h4><strong>Releases</strong></h4><ul><li><p><code>v32.0rc2</code> was tagged 2026-09-18 by sedited</p></li></ul><div><hr></div><blockquote><p>Thank you for reading. Be sure to tune in again next week for your updates on Bitcoin Core!</p></blockquote><p><em>If there are any comments, suggestions, or errors, do not hesitate to reach out or comment</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://insider.btcpp.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">bitcoin++'s Insider Edition is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Quantum Lightning — Last Week in Bitcoin (Sep 14 - 20)]]></title><description><![CDATA[Hi Insiders.]]></description><link>https://insider.btcpp.dev/p/quantum-lightning-last-week-in-bitcoin</link><guid isPermaLink="false">https://insider.btcpp.dev/p/quantum-lightning-last-week-in-bitcoin</guid><dc:creator><![CDATA[Tuma (I WILL NEVER DM YOU)]]></dc:creator><pubDate>Mon, 21 Sep 2026 14:02:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3miW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e7b796-c232-4b85-8c28-d0389b77e790_1600x900.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hi Insiders. This is Tuma, open-source reporter from the Insider Edition.</em></p><p><em>In this week&#8217;s update we feature the latest releases for the Stratum V2 protocol. Maintainers focused mainly on hardening, refactoring and bug fixing, while also introducing support for BIP323.</em></p><p><em>We also cover several news from the developer ecosystem. Notably, we discuss a first working proof-of-concept for a post-quantum Lightning implementation, a new scaling protocol to bring self-custody to a huge number of users, and other interesting news.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3miW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e7b796-c232-4b85-8c28-d0389b77e790_1600x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3miW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e7b796-c232-4b85-8c28-d0389b77e790_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3miW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e7b796-c232-4b85-8c28-d0389b77e790_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3miW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e7b796-c232-4b85-8c28-d0389b77e790_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3miW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e7b796-c232-4b85-8c28-d0389b77e790_1600x900.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3miW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e7b796-c232-4b85-8c28-d0389b77e790_1600x900.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96e7b796-c232-4b85-8c28-d0389b77e790_1600x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:347184,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://insider.btcpp.dev/i/216710056?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e7b796-c232-4b85-8c28-d0389b77e790_1600x900.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3miW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e7b796-c232-4b85-8c28-d0389b77e790_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3miW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e7b796-c232-4b85-8c28-d0389b77e790_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3miW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e7b796-c232-4b85-8c28-d0389b77e790_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3miW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96e7b796-c232-4b85-8c28-d0389b77e790_1600x900.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h1><strong>Highlights from the Bitcoin developer ecosystem</strong></h1><p><em>I spent 10+ hours in open-source developer calls in the Bitcoin ecosystem last week. Here is what caught my eye</em>:</p><ul><li><p>The Stratum V2 published new releases for the Stratum protocol, the applications, and the new UI.</p><ul><li><p>During the weekly call, on Tuesday 15th, Stratum V2 developers announced that the new versions for the Stratum V2 libraries were ready to be published. The releases were published on Thursday 17th.</p></li><li><p><a href="https://github.com/stratum-mining/stratum/releases/tag/v1.12.0">v.1.12.0</a> is the new release for the protocol libraries. Developers focused on hardening and refactoring several parts of the protocol, introducing several breaking changes. Moreover, this release introduces <a href="https://github.com/bitcoin/bips/blob/master/bip-0323.mediawiki">BIP323</a>, which reserves 24 bits in the <code>nVersion</code> field as extra nonce space for miners.</p></li><li><p>Releases for <code>sv2-apps</code> and <code>sv2-ui</code> were also published. <code>sv2-apps</code> <a href="https://github.com/stratum-mining/sv2-apps/releases/tag/v0.8.0">v0.8.0</a> hardens the applications by fixing several issues found by <a href="https://www.projectloupe.org/about">Loupe</a> &#8212; the AI-assisted vulnerability scanner by Spiral &#8212;, improves the translation proxy (tProxy) and the Job Declaration Client (JDC), and adds supports for BIP323. <code>sv2-ui</code> <a href="https://github.com/stratum-mining/sv2-ui/releases/tag/v0.7.0">v0.7.0</a> mainly addresses vulnerabilities found by Loupe.</p></li></ul></li></ul><div><hr></div><h1>A BIPs Update</h1><p><em>In the last days there was some movement in the <a href="https://github.com/bitcoin/bips">BIP repository</a>. Specifically, one new BIP has been published by BIP maintainer <a href="https://github.com/murchandamus">Murchandamus</a>.</em></p><h2>Published BIPs</h2><p><em>A list of recently published BIPs</em></p><h3>BIP461: Deterministic ECDSA Signatures</h3><p><strong>Authors</strong>: <a href="https://github.com/liamgilligan">Liam Gilligan</a></p><p><strong>Published On</strong>: Sep 16th, 2026</p><p><strong>Layer</strong>: Applications</p><p><a href="https://github.com/bitcoin/bips/blob/master/bip-0461.md">BIP461</a> defines how to obtain deterministic ECDSA signatures. A signature is now encoded using the Distinguish Encoding Rule (DER), which results in two numbers <code>r</code> and <code>s</code> , treated as big-endian signed integers. Due to the sign, in case a <code>r</code> number has its most significant bit set to <code>1</code> , hence treated as negative, a null byte is added to keep it positive. BIP461 describes how to do low <code>r</code> grinding of an ECDSA signature, to avoid adding an additional byte to it. The described process is deterministic, following <a href="https://www.rfc-editor.org/info/rfc6979/">RFC6979</a>.</p><div><hr></div><h1>Other News from the Bitcoin World</h1><ul><li><p><strong>Quantum Lightning</strong>: Ahmet Kurt, a researcher from East Texas A&amp;M University, <a href="https://delvingbitcoin.org/t/pqln-post-quantum-security-for-the-bitcoin-lightning-networks-off-chain-surfaces/2893">posted</a> to Delving Bitcoin to present a first proof-of-concept for a quantum-secure implementation of the Lightning Network, called PQLN.</p><ul><li><p>Kurt published a <a href="https://arxiv.org/abs/2609.13781">paper</a>, which presents a hybrid post-quantum extension of Lightning that protects all the different layers composing it &#8212; gossip, onion routing, invoice, peer services &#8212; with the lattice-based standards ML-DSA and ML-KEM. The proposed changes don&#8217;t need any modification to the consensus layer of Bitcoin, since they are LN-specific.</p></li><li><p>As the author specifies, the huge cost for PQLN is bandwidth. A PQLN node on regtest needs to download 10 times and needs to store around 9 times more data than a legacy node. On the other hand, computation seems not to be the bottleneck, since the most expensive operation &#8212; ML-DSA signing &#8212; only takes 0.33ms.</p></li><li><p>A fork of rust-lightning that implements the new post-quantum approach <a href="https://github.com/ahmet-kurt/pq-rust-lightning">is already available on GitHub</a>.</p></li></ul></li><li><p><strong>Depot</strong>: John Law posted to Delving Bitcoin a <a href="https://delvingbitcoin.org/t/depots-theft-proof-self-custodial-bitcoin-for-billions-of-users/2892/9">proposal</a> for a new scaling protocol whose goal is to provide self-custodial Bitcoin to a large number of users. This new protocol is called Depot.</p><ul><li><p>The proposal builds upon three principles: it has a small, on-chain footprint, it allows user to participate even if they don&#8217;t have enough bitcoin to put a transaction on-chain, and it avoids creating more off-chain transactions than can be put on-chain before theft occurs.</p></li><li><p>An operator funds one Taproot output that can be used to create probabilistic off-chain Lightning channels for a high number of users. Each user buys channels though a LN payment, which can be used to make payments.</p></li><li><p>The security of the protocol depends on expiry management, expected values, and penalties that make griefing economically irrational. To be viable, the proposal would require new opcodes, such as <a href="https://github.com/bitcoin/bips/blob/master/bip-0119.mediawiki">OP_CTV</a> and <a href="https://github.com/bitcoin/bips/blob/master/bip-0348.md">OP_CSFS</a>.</p></li></ul></li><li><p><strong>Swaptopia</strong>: Grubles, researcher at Second, <a href="https://x.com/notgrubles/status/2100258700665495896">launched</a> Swaptopia, a new swap service to move funds between on-chain and Lightning. Swaptopia is built upon Bark &#8212; Second&#8217;s Ark implementation &#8212;, it&#8217;s self-custodial, and runs completely in the browser.</p><ul><li><p>To move funds from on-chain to Lightning, this service boards the Ark Server and send a Lightning payment for the specified amount. On the other hand, to move from Lightning to on-chain the service receives the payment and offboards the Ark Server, moving funds on-chain.</p></li></ul></li><li><p><strong>CLN Security Advisory</strong>: The Core-lightning team <a href="https://x.com/Core_LN/status/2099927317107839188">provided</a> a security advisory, suggesting operators running their nodes with experimental features enabled to switch-off that feature immediately. The advisory comes after reports from users of a possible loss of funds, and an investigation is currently ongoing.</p></li></ul><div><hr></div><h1>More from BTC++ Insider Edition</h1><h3>News Hour</h3><ul><li><p><a href="https://x.com/btcinsider__/status/2100993586720596032">BTC++ News Hour</a>: Check out our Friday livestream, where we discuss the most interesting news of the week from the Bitcoin developer ecosystem.</p></li></ul><h3>Articles</h3><ul><li><p><a href="https://insider.btcpp.dev/p/the-gui-doesnt-speak-rpc-this-week">The GUI doesn&#8217;t speak RPC - This Week in Bitcoin Core #58</a></p></li></ul><h3>Videos</h3><ul><li><p><a href="https://x.com/btcinsider__/status/2100283583055458376">Rob Hamilton &#8212; BTC++ Insider Interviews</a>: &#8220;CEO of Bitcoin&#8221; Rob Hamilton gives a shoutout to <a href="https://x.com/theinstagibbs">instagibbs</a> and explains how BIP-448 TEMPLATEHASH would benefit <a href="https://x.com/AnchorWatch">AnchorWatch</a></p></li><li><p><a href="https://x.com/btcinsider__/status/2099531700824834148">Naiyoma &#8212; BTC++ Insider Interviews | Part 1</a>: Developer Naiyoma tells us about Private Broadcast, which she reviewed in Bitcoin Core. It sends transactions over short-lived Tor or I2P connections to hide the origin IP.</p></li><li><p><a href="https://x.com/btcinsider__/status/2099921192740102505">Naiyoma &#8212; BTC++ Insider Interviews | Part 2</a>: Developer Naiyoma tells us how fingerprinting attacks can link a Bitcoin node&#8217;s clearnet and Tor identities, weakening privacy.</p></li></ul><div><hr></div><p><em>Looking for an opportunity to join up with some bitcoin devs in person? Join us in <a href="https://btcpp.dev/berlin26?code=TUMA20">Berlin</a> this October 1- 3 to talk about payments in Bitcoin!</em></p>]]></content:encoded></item><item><title><![CDATA[The GUI doesn't speak RPC - This Week in Bitcoin Core #58]]></title><description><![CDATA[This week the GUI doesn't speak RPC...]]></description><link>https://insider.btcpp.dev/p/the-gui-doesnt-speak-rpc-this-week</link><guid isPermaLink="false">https://insider.btcpp.dev/p/the-gui-doesnt-speak-rpc-this-week</guid><dc:creator><![CDATA[kevkevin]]></dc:creator><pubDate>Fri, 18 Sep 2026 15:20:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MJw8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hello &#128075; folks, I&#8217;m Kevkevin. I&#8217;m an open-source developer and reporter for Insider Edition. <br><br>Last week I reviewed several pull requests from the Bitcoin Core repo. This week there were multiple PR&#8217;s that dealt with a constraint that keeps showing up in wallet work: Bitcoin Core GUI does not speak RPC. <br><br>Descriptor import and <code>addhdkey</code> lived in the RPC layer, which is fine if you&#8217;re the <code>bitcoin-cli</code>, and a dead end if you&#8217;re the GUI trying to do multisig. This week both of those grew a real wallet interface.</p><p>Also: last week branch-off missed the calendar. This week, sedited tagged <code>v32.0rc1</code>. The <a href="https://github.com/bitcoin-core/bitcoin-devwiki/wiki/32.0-Release-Candidate-Testing-Guide">testing guide</a> is up. I do not see binaries on bitcoincore.org yet, and Thursday&#8217;s meeting was ten minutes of working groups plus a nudge to still review things for v32.<br></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MJw8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MJw8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MJw8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MJw8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>Merged PR&#8217;s</strong></h4><h5><strong>Every week, several changes are officially added to Bitcoin Core. This week, </strong>multiple <strong>changes were merged. Here are some I found interesting this week.</strong></h5><ul><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/34861">wallet: Add importdescriptors interface</a></strong> by <strong><a href="https://github.com/polespinasa">polespinasa</a></strong></p><p>This week, Pol Espinasa had his change merged, which tackled the fact that importing descriptors was RPC-only and the <strong>Bi</strong>tcoin Core GUI does not use that interface, so it could not offer descriptor import. This is what you need for more complex wallet setups like multisig. <br><br>The PR moves the core logic out of <code>ProcessDescriptorImport</code> and into <code>CWallet::ImportDescriptor</code>, then adds <code>interfaces::Wallet::importDescriptors()</code> so the GUI can call it directly. Results come back as <code>wallet::ImportDescriptorResult</code> with a <code>FailureReason</code> enum, and the RPC layer maps those back to JSON-RPC error codes. Pol already has a GUI menu on his fork to try it, and said he&#8217;ll open that against the GUI repo now that this is in.</p></li><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/35436">wallet: Add addHDkey interface</a></strong> by <strong><a href="https://github.com/pseudoramdom">pseudoramdom</a></strong><br>Same story, different RPC. <code>addhdkey</code> existed. The GUI still could not call it. Ram (pseudoramdom) moved the wallet logic into <code>CWallet::AddHDKey()</code>, introduced a generic <code>WalletError</code> with a machine-readable code plus a translated message, and added <code>interfaces::Wallet::addHDKey()</code> which generates a new HD key and returns the master xpub. The RPC still does argument parsing, and now also exposes the master fingerprint in hex. Pair this with <code>derivehdkey</code> and the GUI can produce a shareable xpub during multisig setup without going through RPC.</p></li></ul><h5><strong>There are always changes being updated and reviewed in real-time. Here are some notable PR&#8217;s that are still up and looking for reviews.</strong></h5><ul><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/36284">wallet: don't double discard output groups with avoidpartialspends</a></strong> by <strong><a href="https://github.com/fjahr">fjahr</a></strong></p><p>fjahr called this out in Thursday&#8217;s meeting as maybe still interesting for v32. Clean merge, not a draft. If you have review time this week, start here.</p><blockquote><p>With `-avoidpartialspends` or `avoid_reuse`, `GroupOutputs` puts every positive-value output into both the mixed and the positive-only map and runs `push_output_groups` on each, so a group rejected by the eligibility filters lands in `discarded_groups` twice. `AutomaticCoinSelection` then subtracts it twice and could fail with an insufficient funds error even when there would be enough confirmed coins to cover the payment.</p><p>Not a problem in a default wallet but it can happen with `sendtoaddress` from an `avoid_reuse` wallet, or with `-avoidpartialspends=1`.</p></blockquote></li></ul><div><hr></div><h4><strong>IRC meeting notes</strong></h4><h5><strong>Every week on Thursday, there is an IRC meeting. Here are some short notes from that meeting.</strong></h5><pre><code>&#120307;&#120311;&#120302;&#120309;&#120319;: There are no pre-proposed meeting topics this week. Any last minute ones to add?
&#120307;&#120311;&#120302;&#120309;&#120319;: Ok, let's do the WGs

--- Topic 1 ---
&#120307;&#120311;&#120302;&#120309;&#120319;: #topic QA WG Update (brunoerg)
&#120303;&#120319;&#120322;&#120315;&#120316;&#120306;&#120319;&#120308;: no update this week, will have a big one next week.

--- Topic 2 ---
&#120307;&#120311;&#120302;&#120309;&#120319;: #topic QML GUI WG Update (johnny9dev)
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: Opened issue #36289 to track the QML staging branch
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: Will use this issue to share my plan for merging gui-qml and help with organizing and prioritizing current issues that remain
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: We got another new contributor to the project this week, Andrea, and she has already fix a high priority issue for us
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: thats all for this week

--- Topic 3 ---
&#120307;&#120311;&#120302;&#120309;&#120319;: #topic Benchmarking WG Update (l0rinc, andrewtoth)
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;_: no update
&#120307;&#120311;&#120302;&#120309;&#120319;: That's it for the WGs afaict, anything else to discuss?
&#120307;&#120311;&#120302;&#120309;&#120319;: Anything of note from release testing?
&#120307;&#120311;&#120302;&#120309;&#120319;: There is still some stuff to review here: https://github.com/bitcoin/bitcoin/milestone/84
&#120307;&#120311;&#120302;&#120309;&#120319;: And maybe #36284 is interesting to still make into v32</code></pre><p>Read here for the <a href="https://achow101.com/ircmeetings/2026/bitcoin-core-dev.2026-09-17_16_00.html">full meeting</a></p><div><hr></div><h4><strong>Releases</strong></h4><ul><li><p><code>v32.0rc1</code> was tagged 2026-09-14 by sedited. Signed git tag exists.</p></li></ul><div><hr></div><blockquote><p>Thank you for reading. Be sure to tune in again next week for your updates on Bitcoin Core!</p></blockquote><p><em>If there are any comments, suggestions, or errors, do not hesitate to reach out or comment</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://insider.btcpp.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">bitcoin++'s Insider Edition is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Nayoma | Node Fingerprinting - BTC++ Inisder Interviews]]></title><description><![CDATA[Naiyoma tells us how fingerprinting attacks can link a Bitcoin node&#8217;s clearnet and Tor identities, weakening privacy.]]></description><link>https://insider.btcpp.dev/p/nayoma-node-fingerprinting-btc-inisder</link><guid isPermaLink="false">https://insider.btcpp.dev/p/nayoma-node-fingerprinting-btc-inisder</guid><dc:creator><![CDATA[Matthew]]></dc:creator><pubDate>Tue, 15 Sep 2026 18:00:52 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/215855036/24e1a897fb245e7a3d60d12726c8484c.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><span>Naiyoma tells us how fingerprinting attacks can link a Bitcoin node&#8217;s clearnet and Tor identities, weakening  privacy.<br><br>Read the thread by @danielabrozzoni on her research with Naiyoma </span><a href="https://delvingbitcoin.org/t/fingerprinting-nodes-via-addr-requests/1786"><span>here</span></a><span>.</span></p>]]></content:encoded></item><item><title><![CDATA[Naiyoma - BTC++ Insider Interviews]]></title><description><![CDATA[Naiyoma tells us about Private Broadcast, which she reviewed in Bitcoin Core.]]></description><link>https://insider.btcpp.dev/p/naiyoma-btc-insider-interviews</link><guid isPermaLink="false">https://insider.btcpp.dev/p/naiyoma-btc-insider-interviews</guid><dc:creator><![CDATA[Matthew]]></dc:creator><pubDate>Mon, 14 Sep 2026 16:22:14 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/215687966/eda4e119109cf49d8e08853ff5cee156.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Naiyoma tells us about Private Broadcast,  which she reviewed in Bitcoin Core. It sends transactions over short-lived Tor or I2P connections to hide the origin IP.</p><p>She talks about the Private Transactions June bugfix, and encourages you to run your own Tor node.</p>]]></content:encoded></item><item><title><![CDATA[New Bindings — Last Week in Bitcoin (Sep 07 - 13)]]></title><description><![CDATA[Hi Insiders.]]></description><link>https://insider.btcpp.dev/p/new-bindings-last-week-in-bitcoin</link><guid isPermaLink="false">https://insider.btcpp.dev/p/new-bindings-last-week-in-bitcoin</guid><dc:creator><![CDATA[Tuma (I WILL NEVER DM YOU)]]></dc:creator><pubDate>Mon, 14 Sep 2026 14:01:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!0-ek!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dddae3-091a-47fb-8d36-4a3ac2b5c627_1600x900.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Hi Insiders. This is Tuma, open-source reporter from the Insider Edition.</em></p><p><em>In this week&#8217;s update we feature the latest release, v3.1.0, of the bindings library for BDK, exposing the latest development to several programming languages.</em></p><p><em>We also cover the publication of BIP332, defining a new, opt-in P2P message, a a new BIP that has been assigned a number, BIP394, which defines a new output script descriptor, called </em><code>rawtr()</code><em> .</em></p><p><em>We finally discuss some other news from the Bitcoin developer ecosystem. In particular, we talk about a bug in the legacy gateway module in Fedimint, a blog post from Second on how to board an Ark using Payjoin, and a research from BlueWallet CTO on the security of non-custodial wallets on the App Store.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0-ek!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dddae3-091a-47fb-8d36-4a3ac2b5c627_1600x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0-ek!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dddae3-091a-47fb-8d36-4a3ac2b5c627_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0-ek!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dddae3-091a-47fb-8d36-4a3ac2b5c627_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0-ek!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dddae3-091a-47fb-8d36-4a3ac2b5c627_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0-ek!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dddae3-091a-47fb-8d36-4a3ac2b5c627_1600x900.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0-ek!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dddae3-091a-47fb-8d36-4a3ac2b5c627_1600x900.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96dddae3-091a-47fb-8d36-4a3ac2b5c627_1600x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:347184,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://insider.btcpp.dev/i/215631859?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dddae3-091a-47fb-8d36-4a3ac2b5c627_1600x900.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0-ek!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dddae3-091a-47fb-8d36-4a3ac2b5c627_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0-ek!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dddae3-091a-47fb-8d36-4a3ac2b5c627_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0-ek!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dddae3-091a-47fb-8d36-4a3ac2b5c627_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0-ek!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96dddae3-091a-47fb-8d36-4a3ac2b5c627_1600x900.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h1><strong>Highlights from the Bitcoin developer ecosystem</strong></h1><p><em>I spent 10+ hours in open-source developer calls in the Bitcoin ecosystem last week. Here is what caught my eye</em>:</p><ul><li><p>The BDK team released the latest version of their bindings, <a href="https://github.com/bitcoindevkit/bdk-ffi/releases/tag/v3.1.0">v3.1.0</a>, bringing the whole library to several programming languages</p><ul><li><p>During their weekly call, on Tuesday 8th, BDK contributors discussed the release of <code>bdk-ffi</code> v3.1.0, the library that allows to expose the Rust codebase to several other programming languages, such as Dart, Swift, Kotlin, Python, and react-native.</p></li><li><p>This release upgrades UniFFI &#8212; the bindings generator &#8212; to <a href="https://github.com/mozilla/uniffi-rs/releases/tag/v0.31.2">v0.31.2</a> and brings the bindings up-to-date with the <a href="https://github.com/bitcoindevkit/bdk_wallet/releases/tag/v3.1.0">latest release of the BDK Wallet libraries</a>, exposing several new methods, such as those to choose the coin selection algorithm, wallet signers, APIs to load wallet parameters, and more.</p></li><li><p><code>bdk-dart</code> &#8212; the library exposing BDK to Dart &#8212; has been upgraded to use the latests <code>bdk-ffi</code> library, and a new release candidate, <a href="https://github.com/bitcoindevkit/bdk-dart/releases/tag/v1.0.0-rc.4">v1.0.0-rc.4</a> has been published. This update brings the Dart bindings closer to a first stable release.</p></li></ul></li></ul><div><hr></div><h1>A BIPs Update</h1><p><em>In the last days there was some movement in the <a href="https://github.com/bitcoin/bips">BIP repository</a>. Specifically, one new BIP has been published and one has been assigned a number by BIP maintainer <a href="https://github.com/murchandamus">Murchandamus</a>.</em></p><h2>Published BIPs</h2><p><em>A list of recently published BIPs</em></p><h3>BIP332: Stale Tip Relay</h3><p><strong>Authors</strong>: <a href="https://github.com/ajtowns">Anthony Towns</a>, <a href="https://github.com/w0xlt">w0xlt</a>, <a href="https://github.com/pseudoramdom">Ram</a></p><p><strong>Published On</strong>: Sep 9th, 2026</p><p><strong>Layer</strong>: Peer Services</p><p><a href="https://github.com/bitcoin/bips/blob/master/bip-0332.md">BIP 332</a> defines a new, opt-in P2P message called <code>staletip</code> whose goal is to announce recent stale chain tips to peers. The message contains the block height at which a stale branch diverges (the fork point), a vector containing the block headers belonging to the stale branch, and a flag signaling willingness to serve that block data. This may be useful for monitoring the network health, since increases in the stale block rate may expose validation or relay bottlenecks, network partitions, or <a href="https://bitcoinops.org/en/topics/selfish-mining/">selfish mining</a> behavior.</p><h2>Numbered BIPs</h2><p><em>A list of BIPs that recently got assigned a number</em></p><h3><strong>BIP394: rawtr() Output Script Descriptors</strong></h3><p><strong>Authors</strong>: <a href="https://github.com/jeanpablojp">jeanpablojp</a></p><p><strong>Assigned On</strong>: Sep 9th, 2026</p><p><strong>Layer</strong>: Applications</p><p><a href="https://github.com/bitcoin/bips/pull/2251">PR2251</a> introduces BIP394, which defines a new output script descriptor, called <code>rawtr()</code> . The descriptor &#8212; that has been available in Bitcoin Core since <a href="https://github.com/bitcoin/bitcoin/releases/tag/v24.0.1">v24.0</a> but was never specified in a BIP &#8212; can be used to express a P2TR output directly by its output key. The key is used as the taproot output key without applying the <a href="https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki">BIP341</a> tweak. This is useful, for example, when the internal structure isn&#8217;t known, or the script tree hasn&#8217;t been revealed by the owner.</p><div><hr></div><h1>Other News from the Bitcoin World</h1><ul><li><p><strong>Fedimint Bug</strong>: The Fedimint team <a href="https://x.com/fedimint/status/2098803741298200618">announced</a> that they had found a bug in the legacy gateway module, the one responsible for integrating the federated ecash ecosystem with the Lightning Network.</p><ul><li><p>The team released <a href="https://github.com/fedimint/fedimint/releases/tag/v0.12.1">v0.12.1</a> to fix the issue and contacted all the reachable gateway operators to invite them to update their modules as soon as possible.</p></li><li><p>The issue only affects legacy gateway modules, those running the so-called LNv1, while those that had previously upgraded to LNv2 or those running an LDK backend can run safely. The team also point out that users&#8217; funds, federations, and ecash are not affected by the bug.</p></li></ul></li><li><p><strong>Boarding an Ark with Payjoin</strong>: Second, the company behind Bark, <a href="https://x.com/secondhq/status/2098054721210843167">posted</a> a thread explaining how to board and Ark using Payjoin, a feature that has been available for some time now. The same flow is also available to enter a Cashu mint. Second also provided a <a href="https://second.tech/blog/payjoin-boards-board-psbt/">full write-up</a> on the topic.</p></li><li><p><strong>App Store Research</strong>: BlueWallet CTO @overtorment <a href="https://kek.lol/research/appstore-wallets/">pubished</a> a report on the security of non-custodial wallets on the App Store.</p><ul><li><p>The research focused on finding traces of weak entropy and private key exfiltration by decompiling and analyzing code from different wallets.</p></li><li><p>@overtorment was able to decompile 494 wallets, 45 of which raised red flags. He identified 23 apps with critical vulnerabilites and 22 with high-severity one. The complete list can be found at the end of the report.</p></li></ul></li><li><p><strong>Bitcoin++ Insider Edition &#8212; News Hour</strong>: On Friday, the Insider team held its <a href="https://x.com/btcinsider__/status/2098455841565442528">first News Hour</a>, a livestream where we discussed the most important news of the week, interesting articles, and the latest insides from the developer ecosystem. This will become a weekly appointment, so don&#8217;t forget to tune in on Friday @ 5p UTC!</p></li></ul><div><hr></div><h1>More from BTC++ Insider Edition</h1><h3>Articles</h3><ul><li><p><strong><a href="https://insider.btcpp.dev/p/egge-wants-you-to-pay-with-bitcoin">Egge Wants You to Pay with Bitcoin</a></strong></p></li><li><p><strong><a href="https://insider.btcpp.dev/p/how-cache-optimization-not-broken">How cache optimization, not broken crypto, caused inflation on Liquid</a></strong></p></li><li><p><strong><a href="https://insider.btcpp.dev/p/temudandelion-this-week-in-bitcoin">temudandelion - This Week in Bitcoin Core #57</a></strong></p></li></ul><h3>Videos</h3><ul><li><p><strong><a href="https://insider.btcpp.dev/p/connor-aherne-btc-insider-interviews">Connor Aherne - BTC++ Insider Interviews</a></strong></p></li><li><p><strong><a href="https://insider.btcpp.dev/p/antoine-poinsot-btc-insider-interviews">Antoine Poinsot - BTC++ Insider Interviews</a></strong></p></li></ul><div><hr></div><p><em>Looking for an opportunity to join up with some bitcoin devs in person? Join us in <a href="https://btcpp.dev/berlin26?code=TUMA20">Berlin</a> this October 1- 3 to talk about payments in Bitcoin!</em></p>]]></content:encoded></item><item><title><![CDATA[How cache optimization, not broken crypto, caused inflation on Liquid]]></title><description><![CDATA[Steven Roose, the CEO of Second and an ex-Liquid team engineer at Blockstream, deep dives on what, exactly, happened that lead to the Liquid Network hack of almost 4,000 on Sept 6, 2026.]]></description><link>https://insider.btcpp.dev/p/how-cache-optimization-not-broken</link><guid isPermaLink="false">https://insider.btcpp.dev/p/how-cache-optimization-not-broken</guid><pubDate>Sat, 12 Sep 2026 13:55:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!yqTv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bd5e3ef-ddab-4017-b2a3-f289806cc0f2_2400x1042.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em><a href="https://btcpp.dev/whois/stevenroose">Steven Roose</a>, the CEO of <a href="https://second.tech/">Second </a>and an ex-Liquid team engineer at Blockstream, deep dives on what, exactly, happened that lead to the Liquid Network hack of almost 4,000 on Sept 6, 2026.</em><span><br><br>I worked for Blockstream as part of the Liquid team for about five years. I am quite certain that I speak for all my former colleagues that an inflation bug as we witnessed over the last few days was our greatest fear whenever we had to touch the complex section of code that implements Liquid&#8217;s Confidential Transactions.</span></p><p><span>This is a walk through what actually happened, at the level of the code. Which bugs existed, how they were exploited, and how an attacker managed to run away with 4000 Bitcoin.</span></p><h3><span>What Liquid is, and how the peg works</span></h3><p><span>Liquid is a federated sidechain to bitcoin. Instead of proof-of-work, eleven signatures are required to produce a valid block. These signatures are placed by the Liquid functionaries: around fifteen independent businesses running a specialized server, or HSM. The functionaries take turns to propose a block roughly every minute. As long as five functionaries remain honest, no invalid blocks can be produced.</span></p><p><span>The principal asset that circulates on Liquid is L-BTC, and it is meant to be backed one-to-one by bitcoin held in reserve. The reserve is held in a wallet managed by the same federation of 15 functionaries. Converting Bitcoin to L-BTC is a </span><em><span>peg-in</span></em><span>: you send Bitcoin to a federation-controlled address on the bitcoin mainchain, and, after enough confirmations, the same amount of L-BTC is credited to you in Liquid. Getting out is a </span><em><span>peg-out</span></em><span>: you destroy L-BTC on Liquid, and the federation releases the corresponding Bitcoin to you from reserve on the mainchain. Similarly, as long as five functionaries are honest, no one can take more money out of the system than they deserve. Or that was the idea.</span></p><h3><span>Confidential transactions, confidential assets, and range proofs</span></h3><p><span>On bitcoin, every output amount is public. On Liquid, amounts can be hidden. This feature is called </span><em><span>Confidential Transactions</span></em><span>. In a confidential transaction, the output amount field doesn&#8217;t hold a plain number. Instead, it carries a Pedersen commitment, or a curve point that binds the amount behind a blinding factor.  The Pedersen commitment hides the amount while still supporting arithmetic. A verifier who cannot see any individual amount can still add up the input commitments, add up the output commitments, and check that the two sides balance. That is the </span><em><span>balance proof</span></em><span>, and it ensures transactions always have balanced inputs and outputs. In other words, the balance proof confirms that no new Bitcoin were created in the confidential transaction.</span></p><p><em><span>Confidential Assets</span></em><span> extends the same idea to which asset an output holds, not just the amount. L-BTC, Tether USDt, and every other Liquid asset look alike in the blockchain; a per-output surjection proof ties each output&#8217;s asset back to the inputs.</span></p><p><span>Balance alone is not enough, and this is the crux of the whole incident. Pedersen commitments live in a finite group, so arithmetic wraps around in modulo. A commitment can encode a value so large it behaves like a negative number. If I am allowed to do that, I can build a transaction that balances on paper while minting money:</span></p><div class="callout-block" data-callout="true"><p><span>Imagine a transaction with an input of 1 L-BTC and two outputs: one of 100 L-BTC and one of &#8220;minus 99&#8221; L-BTC. The sums on both sides match up: </span><code>1 == 100-99</code><span>. You can discard the -99 L-BTC output but keep the 100 L-BTC one.</span></p></div><p><span>The thing that forbids this is the </span><em><span>range proof</span></em><span>. Every confidential output must carry a zero-knowledge proof that proves the hidden amounts lie in a sane, positive range and not in the wrap-around zone. Range proofs are what make hidden inflation impossible.</span></p><h3><span>The cache</span></h3><p><span>Range proofs are big &#8212; a few kilobytes each &#8212; and expensive to verify. Liquid nodes see the same proof more than once: once when a transaction arrives in the mempool, again when it appears in a block. Re-running the elliptic-curve verification every time is wasteful, so Elements remembers successful verifications in a cache. The idea is simple and, in bitcoin, entirely standard: verify a proof once, remember that this exact proof passed, and skip the math if you see it again.</span></p><p><span>A cache needs a key. For a signature or a proof, the key is a hash of everything the verification depended on. Get everything into the key and the cache is safe: two verifications collide only when they truly are the same check. Leave something out and you have a problem, because now two different checks can share a key and the cache will happily answer &#8220;already valid&#8221; for a check it never ran.</span></p><p><span>That single sentence is the entire vulnerability that got Liquid hacked. The details is which fields went missing, and when.</span></p><h3><span>The 2018 cache key change</span></h3><p><span>The original cache implementation was using an existing function that Bitcoin Core uses to cache transaction signatures. Due to an upstream change to that function, in commit </span><a href="https://github.com/ElementsProject/elements/commit/957216523881768d9bcd6c5092dd5d50495dcd4e"><span>9572165</span></a><span>, a custom cache key function is introduced for range proofs specifically. Here&#8217;s the relevant changes:</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;cpp&quot;,&quot;nodeId&quot;:&quot;8a9f1a0d-78f8-4b4a-824f-311161c4e53a&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-cpp">+    void ComputeEntry(uint256&amp; entry, const std::vector&lt;unsigned char&gt;&amp; proof, const std::vector&lt;unsigned char&gt;&amp; commitment)

+    {

+        CSHA256().Write(nonce.begin(), nonce.size()).Write(proof.data(), proof.size()).Write(commitment.data(), commitment.size()).Finalize(entry.begin());

+    }</code></pre></div><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;cpp&quot;,&quot;nodeId&quot;:&quot;b0a85fc7-890c-4c4b-bbce-c977b5a739ed&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-cpp">-    rangeProofCache.ComputeEntry(entry, uint256(), vchRangeProof, pubkey, vchAssetCommitment, scriptPubKey);

+    rangeProofCache.ComputeEntry(entry, vchRangeProof, vchValueCommitment);</code></pre></div><p><span>The new cache key is </span><code>SHA256(nonce || rangeproof || value-commitment)</code><span>. The asset commitment and the </span><code>scriptPubKey</code><span>, which were previously there, are gone. The verification function still received them and still verified against them, but the cache no longer remembered that it had. Two range proof checks with the same proof and the same value commitment, but a different asset or a different output script, now would hash to the same cache entry.</span></p><p><span>This design violates the requirement that all relevant fields for validation must be part of the cache key, so it&#8217;s definitely a bug. Let&#8217;s look at how it could be exploited.</span></p><p><span>If the value commitment was a Pedersen commitment to the value alone, it would require breaking the elliptic curve logarithm problem to create an identical commitment to a different value. That means that it is as hard as forging a bitcoin signature. However, because of how Confidential Transactions and Confidential Assets work, the value commitment that is used here, is actually made up of two parts: it contains a commitment to the value, but it&#8217;s also mixing in a asset-specific factor so that you can&#8217;t blend different assets.</span></p><p><span>The commitment contains an additional generator </span><code>H</code><span> that is calculated from the asset. Now, if we could invent a different asset with generator </span><code>-H</code><span>, we can create an identical value commitment for the same amount, but negative.</span></p><p><span>Choosing our own asset generator would also require breaking our crypto, but we don&#8217;t really have to. The validity of the asset generators is checked in what is called the asset &#8220;surjection proof&#8221;. But, this check only happens </span><em><span>after</span></em><span> the range proofs are checked. This means that I can just claim to have an output for asset generator </span><code>-H</code><span> and a value of 1 BTC. The rangeproof will pass and be stored in the cache. Afterwards, the surjection proof will fail and the transaction will be invalid.</span></p><p><span>But any node that actually validated this transaction, will have made an entry in its rangeproof cache and will now accept a rangeproof for -1 BTC under asset generator </span><code>H</code><span> which allows the same transaction to add an extra output for 1 BTC without having sufficient input value.</span></p><p><span>What this means in practice is that an attacker could cause inflation if he could make enough functionary nodes first validate (and reject!) an invalid transaction and then propose a block that has an inflationary transaction in it.</span></p><p><span>The Liquid network has some protections against this sort of behavior: users cannot send transactions directly to the functionaries. All transactions pass through &#8220;bridge nodes&#8221; that then relay them to the functionaries. While this protects the functionaries somewhat against outside attackers, it still means that anyone with privileged access to the inner network could have exploited this bug and confirmed an inflationary transaction.</span></p><p><span>Also, if for example a malicious functionary would perform this attack, the entire rest of the network would reject this block because they hadn&#8217;t seen the invalid tx preceding it. So while an inflationary exploit was possible, it was pretty hard to execute, would be noticed way faster and could only be performed by Liquid&#8217;s inner circle.</span></p><h3><span>Why variable sized fields should always have a prefix</span></h3><p><span>On 1 September 2026, five days before the attack, commit </span><a href="https://github.com/ElementsProject/elements/commit/c26d719c29a40da280a825b25657e9c3d8bc7d99"><span>c26d719</span></a><span> fixes the 2018 bug by putting the missing fields like the asset commitment back into the cache key:</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;cpp&quot;,&quot;nodeId&quot;:&quot;3b4aaa03-ed54-4166-a4a4-5bb7b5135e30&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-cpp">-void SignatureCache::ComputeEntryRangeProof(uint256&amp; entry, const std::vector&lt;unsigned char&gt;&amp; proof, const std::vector&lt;unsigned char&gt;&amp; commitment) const {

+void SignatureCache::ComputeEntryRangeProof(uint256&amp; entry, const std::vector&lt;unsigned char&gt;&amp; proof, const std::vector&lt;unsigned char&gt;&amp; commitment, const std::vector&lt;unsigned char&gt;&amp; asset_commitment, const CScript&amp; scriptPubKey) const {

     CSHA256 hasher = m_salted_hasher_range_proof;

-    hasher.Write(proof.data(), proof.size()).Write(commitment.data(), commitment.size()).Finalize(entry.begin());

+    hasher.Write(proof.data(), proof.size()).Write(commitment.data(), commitment.size()).Write(asset_commitment.data(), asset_commitment.size()).Write(scriptPubKey.data(), scriptPubKey.size()).Finalize(entry.begin());

 }</code></pre></div><p><span>Read that </span><code>Write</code><span> chain carefully. The key is now:</span></p><p><code>SHA256( nonce || proof || commitment || asset_commitment || scriptPubKey )</code></p><p><span>All four fields are present, which looks like exactly what you want. I wrote above that in the old key, only the range proof field was of variable length, and that&#8217;s why a collision could only happen for exactly the same range proof and value commitment. In this new cache key, two fields are of variable length and they are hashed without having a length prefix.</span></p><p><span>When you glue variable-length fields together without length prefixes, the boundaries between them stop being meaningful. Only the total byte string matters. If I can make the proof longer by the same number of bytes that I make the script shorter, and arrange the bytes in between them to line up, I can produce an identical concatenation for a completely different </span><code>(proof, commitment, asset, script)</code><span> tuple.</span></p><p><span>This implementation lets you create two </span><strong><span>identical</span></strong><span> cache keys for a </span><em><span>different</span></em><span> amount, asset, and script. If you can get a Liquid node to first parse a valid transaction and then an invalid one with a junk proof and a forged amount, but that is carefully crafted so that the cache key for this transaction matches exactly with the cache key of the first one, it won&#8217;t even validate the range proof because you convinced it that it has already done that before.</span></p><p><span>This is a commonly known pitfall in cryptography. Hashing structured data by raw concatenation is unsafe precisely because distinct structures can share a byte encoding. The 2016 signature cache in bitcoin gets away with concatenation because its fields are all fixed length. The moment two variable-length fields sit next to each other, concatenation is a trap.</span></p><p><span>I remember from my time at Blockstream that whenever we would introduce any new consensus-critical serialization, we would ask Russell O&#8217;Connor to review it. Russell has the reputation as the expert in spotting this kind of byte-shifting vulnerabilities.</span></p><p><span>Here is the field layout, from a diagram </span><a href="https://x.com/mononautical"><span>mononautical</span></a><span>, an engineer at Mempool.space, made </span>while going through the same rabbit hole. The cache key is <code>proof | amount | asset | script</code>. Feed it a genuine &#8220;primer&#8221; and a crafted &#8220;exploit&#8221; and the two produce the same 4,301 bytes with the field boundaries in different places:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yqTv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bd5e3ef-ddab-4017-b2a3-f289806cc0f2_2400x1042.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yqTv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bd5e3ef-ddab-4017-b2a3-f289806cc0f2_2400x1042.jpeg 424w, https://substackcdn.com/image/fetch/$s_!yqTv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bd5e3ef-ddab-4017-b2a3-f289806cc0f2_2400x1042.jpeg 848w, https://substackcdn.com/image/fetch/$s_!yqTv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bd5e3ef-ddab-4017-b2a3-f289806cc0f2_2400x1042.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!yqTv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bd5e3ef-ddab-4017-b2a3-f289806cc0f2_2400x1042.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!yqTv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bd5e3ef-ddab-4017-b2a3-f289806cc0f2_2400x1042.jpeg" width="1456" height="632" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1bd5e3ef-ddab-4017-b2a3-f289806cc0f2_2400x1042.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:632,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:&quot;Image&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="https://substackcdn.com/image/fetch/$s_!yqTv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bd5e3ef-ddab-4017-b2a3-f289806cc0f2_2400x1042.jpeg 424w, https://substackcdn.com/image/fetch/$s_!yqTv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bd5e3ef-ddab-4017-b2a3-f289806cc0f2_2400x1042.jpeg 848w, https://substackcdn.com/image/fetch/$s_!yqTv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bd5e3ef-ddab-4017-b2a3-f289806cc0f2_2400x1042.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!yqTv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bd5e3ef-ddab-4017-b2a3-f289806cc0f2_2400x1042.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Cache key format: the primer and the exploit serialise to the same 4301 bytes with different field boundaries</figcaption></figure></div><h3><span>How to print 4000 L-BTC</span></h3><p><span>The exploit ran in two steps, exactly as the layout predicts. I pulled the raw transactions from the explorer and reconstructed the cache keys byte for byte.</span></p><p><strong><span>Step one, the primer.</span></strong><span> In Liquid block 4,050,335 the attacker published two nearly identical transactions: </span><a href="https://blockstream.info/liquid/tx/271147100a94f6337b6c3db39b30c92d5b97ed91597307b6f721f73a15187ec5"><span>2711</span></a><code>7&#8230; </code>and <a href="https://blockstream.info/liquid/tx/71c93d4339fe8328981a2ec0dd23808d1ff104dc4c4cbcfc5c06fb2bb622f411"><span>71c93d</span></a><span>. Note that just one transaction would have sufficed. The second is presumably insurance.</span></p><p><span>Each has an output that is an </span><code>OP_RETURN</code><span> carrying a </span><em><span>genuine, valid range proof</span></em><span>, 4,166 bytes, verifiable in its own right. The clever part is the script on that output. It is a 69-byte </span><code>OP_RETURN</code><span> whose pushed data is not random: it embeds, byte for byte, the value commitment, asset generator and script head that the </span><strong><span>second</span></strong><span> transaction will need. When a node verifies this proof, it computes the cache key over </span><code>proof || commitment || asset || script</code><span> and stores a success. The primer&#8217;s only job is to plant that entry.</span></p><p><strong><span>Step two, the exploit.</span></strong><span> One block later, in 4,050,336, transaction </span><a href="https://blockstream.info/liquid/tx/f24a4b179b5cc7e88b25a763911f7cbdf2bf45d1d1b5ab611e94461cef0a183f"><span>f24a4b&#8230; </span></a><span>creates an output whose &#8220;range proof&#8221; is 4,234 bytes that would never pass as a valid range proof. But those 4,234 bytes are not random either: they are the primer&#8217;s 4,166-byte proof, followed by the primer&#8217;s 33-byte commitment, followed by the 33-byte asset generator, followed by the two script-header bytes </span><code>6a 43</code><span>. In other words, the exploit&#8217;s </span><em><span>proof field</span></em><span> has swallowed the primer&#8217;s proof, commitment, asset and script-head. The exploit&#8217;s own commitment, asset and a one-byte </span><code>6a</code><span> (</span><code>OP_RETURN</code><span>) script then follow in their proper places, as they were encoded in the primer&#8217;s </span><code>OP_RETURN</code><span> data.</span></p><p><span>Line up the two cache-key preimages and they are the same string:</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;26532d33-155a-4cbb-9c7a-17a9bbf9df28&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">primer:   &lt;4166B proof&gt; | &lt;33B comm&gt; | &lt;33B asset&gt; | &lt; 2B head&gt; | &lt;33B comm&gt; | &lt;33B asset&gt; | &lt;1B script&gt;

                                                     &#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472; 69B script &#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;

exploit:  &lt;4166B proof&gt; | &lt;33B comm&gt; | &lt;33B asset&gt; | &lt; 2B head&gt; | &lt;33B comm&gt; | &lt;33B asset&gt; | &lt;1B script&gt;

          &#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472; 4234B &#8220;proof&#8221; &#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;</code></pre></div><p><span>The exploit&#8217;s forged output collides with the primer&#8217;s cache entry, so the range proof checker short-circuits to &#8220;valid&#8221; and never looks at the invalid proof. That output hides a massive overflowing amount (the &#8220;negative&#8221; output from the balance-attack sketch earlier) and a sibling output credits the attacker with a large positive amount. The balance proof, which is real and which the attacker cannot fake, sums to zero. The range proof, </span><em><span>which should have stopped it</span></em><span>, was answered from cache.</span></p><h3><span>The chain split</span></h3><p><span>Interestingly, the attack did not fool most of the Liquid network. It only fooled nodes whose cache had been poisoned, and because the commit that introduced the buggy fix had not been included in an official Elements release yet, most of the network was not running this version of the Liquid node software. It looks like the Liquid federation decided to first deploy this bugfix release to the internal Liquid infrastructure. This is a common thing to do when deploying security fixes.</span></p><p><span>But it meant that most of the network actually rejected the attacker&#8217;s transaction. They didn&#8217;t have the cache key change, so no cache hit and they actually validated the range proof and rejected the transaction, as well as the block that the transaction was relayed in.</span></p><p><span>These nodes stalled at height 4,050,335: the last block before the exploit. The nodes running the vulnerable build, including the federation&#8217;s bridge nodes, accepted 4,050,336 and kept going.</span></p><p><span>You can still watch this split today. Blockstream&#8217;s explorer, </span><a href="https://blockstream.info/liquid/"><span>blockstream.info</span></a><span>, sits above height 4,051,000. mempool.space&#8217;s Liquid node, </span><a href="https://liquid.network/"><span>liquid.network</span></a><span>, is frozen at exactly </span><strong><span>4,050,335</span></strong><span>.</span></p><p><span>OrangeSurf </span><a href="https://github.com/orangesurf/liquid-transaction-replay-monitor"><span>published</span></a><span> the reproduction recipe: run a build that includes the vulnerable commit, </span><code>invalidateblock 4050335</code><span> to push the primer back into the mempool so the poisoned key gets re-inserted, then </span><code>reconsiderblock</code><span> and your node reorgs onto the federation&#8217;s inflated chain.</span></p><h2><span>Out the front door: PAK and SideSwap</span></h2><p><span>Inflating L-BTC is only half a heist. The attacker still had to convert unbacked L-BTC into real BTC, and Liquid does not let just anyone pull from the reserve. Peg-outs are gated by </span><em><span>PAK</span></em><span>, the Pegout Authorization Key system. Each peg-out output must carry a whitelist proof tying the destination to a registered key belonging to a trusted federation member. A peg-out to an unauthorized key is simply invalid as per Liquid&#8217;s consensus rules.</span></p><p><span>So the attacker needed a PAK holder to peg the coins out for them. Enter </span><em><span>SideSwap</span></em><span>, a Liquid member that runs a peg-out pass-through service: you send it L-BTC, it peg-outs under its own PAK key, and it forwards the resulting BTC to whatever mainchain address you give it. This is a useful product. It is also a good way to render the entire PAK system pointless.</span></p><p><span>In Liquid block 4,050,349, thirteen blocks after the exploit, the coins were pegged out. On the bitcoin side the federation released the reserve as designed: roughly 3,996 BTC landed at SideSwap&#8217;s whitelisted address </span><a href="https://mempool.space/address/bc1qgslsydz56d0ed6827hdemfmk5w2f6ldyc6wt7p"><span>bc1qgslsydz56d0ed6827hdemfmk5w2f6ldyc6wt7p</span></a><span>, which forwarded it on to the attacker&#8217;s address </span><a href="https://mempool.space/address/bc1ql4mfu6aundtkksxklfajs2h3t9nzcd6gyqjlte"><span>bc1ql4mfu6aundtkksxklfajs2h3t9nzcd6gyqjlte</span></a><span>.</span></p><p><span>Because the balance and PAK checks all passed, SideSwap&#8217;s node and every functionary treated it as an ordinary authorized withdrawal. Liquid&#8217;s own incident report confirms the shape: the validation failure was at the transaction level, before the peg-out, so nothing downstream had reason to object.</span></p><p><span>The part that should give every system designer pause: </span><strong><span>neither the peg-out mechanism nor SideSwap had either a built-in time delay or an upper limit on amounts.</span></strong><span> A single transaction that moved on the order of 4,000 BTC, roughly 400M USD at the time, went straight through: no waiting, no manual review, no velocity check. Before the incident the reserve held about 4,205 BTC. Nothing was in place to prevent 95% of that from leaving the system in about half an hour.</span></p><h3><span>The white hat and the negotiation</span></h3><p><span>Then the story takes a very unexpected turn. Bitcoin heists like this usually are followed by total silence in which the funds stay put, or by transactions showing the attacker is trying to obfuscate his trails and white-wash the coins.</span></p><p><span>Instead, a few hours after the drain, with a </span><a href="https://mempool.space/tx/c103de95817b43f2df635ec6f35ff126ca26a7c6d20570c4b01866b2b3e69a19"><span>transaction</span></a><span> paying 1,000 sats to the federation wallet, the attacker left a note in an </span><code>OP_RETURN</code><span>:</span></p><blockquote><p>&gt; we are whitehats. contact us on chain</p></blockquote><p><span>Blockstream replied from a known address: </span><code>&#8220;Please contact security@blockstream.com&#8221;,</code><span> then an encrypted message signed with their security key. The attacker agrees to send the funds back to the federation address but demands the bug be fixed first:</span></p><blockquote><p><span>&gt; Please fix the bug first. The chain is under risk at latest commit right now. Make sure every node is patched. Then we will transfer the money back safely after confirming the fix.</span></p></blockquote><p><span>Blockstream clear-signed </span><strong><span>&#8221;Yes, thank you,&#8221;</span></strong><span> and later &#8221;</span><strong><span>Bridge nodes are patched, safe to return the funds.&#8221;</span></strong><span> </span></p><p><span>On 7 September at 16:09 UTC, the attacker </span><a href="https://mempool.space/tx/a6d697a25266ce3c78774fd1d75f896b7af522ada209b0f6228ea497bc49a46d"><span>returned</span></a><span> exactly </span><strong><span>3,400 BTC</span></strong><span> to the federation&#8217;s wallet and kept about </span><strong><span>598.5 Bitcoin</span></strong><span> (roughly 15%) in his own wallet.</span></p><p><span>That 15% was not an accident, and the tone did not stay collegial. In a later message the attacker dropped his white-hat pose entirely:</span></p><blockquote><p><span>Your dereliction of duty is obvious that you allocated only $1.5M (maybe even 0) to secure $5B assets. [&#8230;] You SHALL pay 10% using your own money as bug bounty or you will cause all your holders a 15% loss for your irresponsibility and stinginess. [&#8230;] Anyway we are going to publish the private key to decrypt our conversations afterwards.</span></p></blockquote><p><span>Whatever you call someone who drains a chain, pegs it out through an unwitting third party, and then negotiates a bounty under threat, &#8220;white hat&#8221; is not a term I would use. As of writing, Liquid is still paused, the 3,400 BTC is back, and roughly 598 BTC is outstanding while the two sides argue over the difference.</span></p><p><span>The whole exchange is visible on the bitcoin mainchain, signed and verifiable; </span><a href="https://btcpp.dev/whois/sjors"><span>Sjors</span></a><span> published a </span><a href="https://gist.github.com/Sjors/9d24363e67529079cc2ae4305ff90fcd"><span>script and transcript</span></a><span>, that checks the PGP signatures against Blockstream&#8217;s published key, and there is a </span><a href="https://opreturn-chat.arvin.dev/"><span>readable viewer</span></a><span> where you can follow the entire conversation live.</span></p><h2><span>The real fix, and what it teaches</span></h2><p><span>The actual repair got </span><a href="https://github.com/ElementsProject/elements/commit/94000967f6dc05b1afd435e79b1bbc597e29f816"><span>shipped</span></a><span>, as part of Elements release v23.3.4. It stops hashing the cache-key fields by raw concatenation and serializes them through </span><code>CHashWriter</code><span> instead, which length-prefixes every field. Once each variable-length field is preceded by its length, the byte-shift trick is dead: a longer proof and a shorter script no longer produce the same encoding, because the lengths themselves are part of the hash. The release also adds a </span><code>-norangeproofcache</code><span> switch to turn the cache off entirely.</span></p><p><span>There are a few lessons here, and none of them are exotic.</span></p><p><strong><span>A cache key is a security boundary.</span></strong><span> The instant a verification result is memoized, the key that identifies it inherits the full weight of the check it replaces. Leave a field out and you have silently widened what counts as &#8220;the same&#8221;.</span></p><p><strong><span>Simple concatenation is not safe serialization</span></strong><span>. Gluing variable-length fields together without lengths or safe delimiters is a canonicalization bug waiting for someone with creativity to find a way to abuse it.</span></p><p><strong><span>Fixes deserve the same fear as features,</span></strong><span> especially security fixes under time pressure. The recent change was trying to make the key correct and ended up breaking it instead. The dangerous edit was the one that looked like a patch.</span></p><p><span>And, finally, </span><strong><span>defense in depth is not optional</span></strong><span> at the money layer. Bugs happen to all of us, but the loss was 4,000 BTC because a single peg-out with no limit could carry the entire reserve out in half an hour. The consensus bug is fixed. The question of why the pegouts have no delay and no ceiling is the one Blockstream and SideSwap still have to answer.</span></p><p></p><p><em><span>bitcoin++ Insiders Edition will be in Berlin, this coming October 1 &#8212; 3 at the upcoming payments edition bitcoin++ conference. Join us for three days of hacking, talks, and hands-on workshops. </span><a href="https://btcpp.dev/berlin26#tickets?code=insider"><span>Use code INSIDER for 20% off a ticket.</span></a></em></p>]]></content:encoded></item><item><title><![CDATA[temudandelion - This Week in Bitcoin Core #57]]></title><description><![CDATA[This week we change private broadcast to temudandelion...]]></description><link>https://insider.btcpp.dev/p/temudandelion-this-week-in-bitcoin</link><guid isPermaLink="false">https://insider.btcpp.dev/p/temudandelion-this-week-in-bitcoin</guid><dc:creator><![CDATA[kevkevin]]></dc:creator><pubDate>Fri, 11 Sep 2026 14:02:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MJw8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hello &#128075; folks, I&#8217;m Kevkevin. I&#8217;m an open-source developer and reporter for Insider Edition. Last week, I reviewed several pull requests from the <a href="https://github.com/bitcoin/bitcoin/pulls">Bitcoin Core</a> repo.<br><br>In the Bitcoin Core 31.0 release notes, the private broadcast feature promised that your IP would <strong>never be known</strong> to the recipients and that unrelated transactions would <strong>not be linked</strong>. In the weekly IRC meeting, there was discussion on whether Bitcoin Core can still back that.<br><br>Fankquake mentioned that privacy leaks had been reported to the security team, and they wanted broader threat model discussion before releasing v32.0. There was also discussion on renaming the flag; here are some of the options. (<code>-cloakedbroadcast</code>, <code>-oneshottorbroadcast</code>, <code>-notsoprivatebroadcast</code>, -<code>temudandelion)<br><br></code>Branch-off for v32.0 was supposed to be yesterday. But there is still no <code>32.x</code> branch and no v32 tag yet. Five items are still open on the <a href="https://github.com/bitcoin/bitcoin/milestone/84">32.0 milestone</a>.<br><br></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MJw8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MJw8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MJw8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MJw8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!MJw8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cee73e5-1dd4-4081-a559-6f40592a5154_1456x816.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>Merged PR&#8217;s</strong></h4><h5><strong>Every week, several changes are officially added to Bitcoin Core. This week, </strong>multiple <strong>changes were merged. Here are some I found interesting this week.</strong></h5><ul><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/35445">wallet, descriptor: Revert </a></strong><code>StringType::COMPAT</code><strong><a href="https://github.com/bitcoin/bitcoin/pull/35445"> for Miniscript expressions and drop the concept of a Descriptor ID that can be validated</a></strong> by <strong><a href="https://github.com/achow101">achow101</a></strong></p><p>achow101 closed a wallet compatibility hole that had already bitten once.<br></p><p>Miniscript keys were not handled <code>StringType::COMPAT</code> correctly when computing a Descriptor ID. To keep old wallets loading, Core had to keep hashing that ID the wrong way. This is the second time that happened, so this PR stops pretending the ID is something you can validate at all.<br></p><p>The value read from the database is now an opaque blob that only ties records to a ScriptPubKeyMan. <code>DescriptorID</code> is renamed to <code>CompatDescriptorHash</code> &#8212; still written, no longer checked against a recomputed hash. <code>importdescriptors</code> and <code>createwalletdescriptor</code> compare descriptor strings instead of hashes. Lookup in <code>m_spk_managers</code> goes from a map to <code>std::find_if</code> (log to linear). achow101&#8217;s take: those RPCs are not the hot path, and <code>importdescriptors</code> might rescan anyway.<br></p><p>The wallet backwards-compat test now includes 30.2 and 31.0 nodes plus a Miniscript wallet, so both directions get exercised. Fixes #35432. If you have a wallet with Miniscript in it from a previous release, this is the PR that is supposed to keep it loading.</p><p></p></li><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/36174">http: throttle send buffer when client stops draining</a></strong> by <strong><a href="https://github.com/pinheadmz">pinheadmz</a></strong></p><p>If a client stops reading the socket, Core used to keep dispatching requests and packing responses into <code>m_send_buffer</code> with no cap. After a complete request is parsed, before it goes to a worker, the server now checks that buffer. Already 32MiB sitting there (<code>MAX_BODY_SIZE</code>, open for bikeshedding) and the request stays as <code>m_req</code> instead of getting another worker. The misbehaving client does not get an unbounded send queue for free.<br></p><p>This was found and disclosed by the Red Team &#128997;. Same HTTP rewrite pinheadmz has been triaging agent findings on &#8212; last week he asked people to keep them coming before branch-off.</p></li></ul><h5><strong>There are always changes being updated and reviewed in real-time. Here are some notable PR&#8217;s that are still up and looking for reviews.</strong></h5><ul><li><p><strong><a href="https://github.com/bitcoin/bitcoin/pull/34374">kernel: use struct-based logging and simplify logging interface</a></strong> by <strong><a href="https://github.com/stickies-v">stickies-v</a></strong></p><p><a href="https://github.com/sedited">sedited</a> asked for comments in Thursday&#8217;s meeting. stickies-v just pushed after months of architecture thrash. It is open, not a draft, not Needs rebase. Last week&#8217;s prefetch PR (<a href="https://github.com/bitcoin/bitcoin/pull/36000">#36000</a>) is still open too if you have a second tab.</p><blockquote><p>tl;dr: kernel logging is cumbersome. This PR delivers log entries as a struct instead of a formatted string, and simplifies the kernel logging interface. Closes #34062.</p><p>Kernel logging has a few problems:</p><ul><li><p>callbacks operate on formatted strings, so users need to parse the string to get the timestamp, category, level, ... based on which options are set. This is cumbersome, brittle, and inefficient.</p></li><li><p>the filtering interface is not really intuitive, requiring users to call combinations of <code>btck_logging_set_level_category</code> and <code>btck_logging_enable_category</code> when they want to produce <code>debug</code> or <code>trace</code> logs.</p></li><li><p>the node logging infrastructure has quite a bit more functionality than is necessary for a library.</p></li></ul><p>This PR gives <code>bitcoinkernel</code> its own implementation of those hooks, so it no longer depends on <code>logging.cpp</code>, and upgrades the C API to deliver struct-based entries. Node logging is not changed.</p></blockquote></li></ul><div><hr></div><h4><strong>IRC meeting notes</strong></h4><h5><strong>Every week on Thursday, there is an IRC meeting. Here are some short notes from that meeting.</strong></h5><pre><code>&#120307;&#120311;&#120302;&#120309;&#120319;: There are no pre-proposed meeting topics this week. Any last minute ones to add?
&#120307;&#120311;&#120302;&#120309;&#120319;: Let's start with the WGs

--- Topic 1 ---
&#120307;&#120311;&#120302;&#120309;&#120319;: #topic QA WG Update (brunoerg)
&#120303;&#120319;&#120322;&#120315;&#120316;&#120306;&#120319;&#120308;: no update this week

--- Topic 2 ---
&#120307;&#120311;&#120302;&#120309;&#120319;: #topic QML GUI WG Update (johnny9dev)
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: First chunk of the staging branch was merged in
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: Establishes the qml foundational pieces
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: hebasto helped a ton with the final review
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: I have drafts for the next two chunks. Both will setup the wallet disabled version of the gui.
&#120309;&#120306;&#120303;&#120302;&#120320;&#120321;&#120316;: post-merge review is always welcome; especially from python people
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: Yeah everything can be updated. Nothing has to be finalized
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: I have a rough list of all of the chunks now and the order they should go in and I will create the tracking issue to "Upgrading Gui to Qml" with it.
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: Pseudoramdom is updating the designs to make them more desktop friendly and consistent in parallel and epicleafies is taking care of transaction and activity issues
&#120311;&#120316;&#120309;&#120315;&#120315;&#120326;&#120821;&#120305;&#120306;&#120323;: That's all for now

--- Topic 3 ---
&#120307;&#120311;&#120302;&#120309;&#120319;: #topic Benchmarking WG Update (l0rinc, andrewtoth)
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;: no update

--- Topic 4 ---
&#120307;&#120311;&#120302;&#120309;&#120319;: #topic Kernel WG Update (sedited)
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: don't have anything from my side, but stickies-v recently pushed to #34374 again and left a comment: https://github.com/bitcoin/bitcoin/pull/34374#issuecomment-5605856730
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: would be good to get some comments there.
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: that's all.

--- Topic 5 ---
&#120307;&#120311;&#120302;&#120309;&#120319;: That's it for the WGs afaict, anything to say about the release?
&#120307;&#120302;&#120315;&#120318;&#120322;&#120302;&#120312;&#120306;: I think we are looking pretty decent for branch off
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: branch-off should be today, but there are still a few things in the milestone https://github.com/bitcoin/bitcoin/milestone/84
&#120307;&#120302;&#120315;&#120318;&#120322;&#120302;&#120312;&#120306;: There does seem to be an outstanding thread in regards to private broadcast, which could be worth discussing now
&#120307;&#120302;&#120315;&#120318;&#120322;&#120302;&#120312;&#120306;: Re what's left on the milestone, if any of those miss, they should also all be fine to backport into 32.x
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: yes
&#120307;&#120311;&#120302;&#120309;&#120319;: What's the private broadcast thread?
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: Should we do privatebroadcast now or milestone?
&#120307;&#120302;&#120315;&#120318;&#120322;&#120302;&#120312;&#120306;: re private broadcast. Some privacy leaks have reported to the security team, and we'd like to facilitate a broader discussion about the threat model to know how to handle those
&#120307;&#120302;&#120315;&#120318;&#120322;&#120302;&#120312;&#120306;: I don't think there's too much to discuss on the milestone, other than, everything is looking for review
&#120307;&#120302;&#120315;&#120318;&#120322;&#120302;&#120312;&#120306;: (or if someone thinks something is missing)
&#120307;&#120311;&#120302;&#120309;&#120319;: fanquake: but is that something still relevant for the release, e.g. putting some warning in there, or is this a discussion unrelated to the release
&#120307;&#120302;&#120315;&#120318;&#120322;&#120302;&#120312;&#120306;: fjahr: I think it's both
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: my impression is the base assumption of the feature is "no worse privacy than only connecting through tor"
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;: there's one issue i think we should patch
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;: not sure what we are discussing here exactly though
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: so for release, we could suggest remediations such as preferred configurations, or soft enforce them in releases. as an example
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: what do you mean with preferred configurations instagibbs?
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;: I'm not sure having to speak cryptically in a public conversation is helpful. Otherwise we should have a private conversation somewhere else where we can discuss everything openly.
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: My understanding is there is more than one issue, and that it's not clear how far we want to go in patching them, and how to think about it consistently.
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: andrewtoth: i think we can discuss openly what privacy guarantees we want to provide users. Then the specific instances in which they are breached can be kept momentarily private like we do for security breaches.
&#120307;&#120302;&#120315;&#120318;&#120322;&#120302;&#120312;&#120306;: I think a situation where we need to ship a feature with a caveat of *maybe don't use it unless you configure it a certain way*, but we don't make that the default, is not great
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: sedited f.e. we could encourage people who want higher assurance that they run onlynet=onion, or similar. Or maybe this is again just pure communication about privacy model
&#120313;&#120310;&#120308;&#120309;&#120321;&#120313;&#120310;&#120312;&#120306;: yes, we could mention that private broadcast is still somewhat new/experimental and recommend to combine it with -onlynet=onion and -listen=0 if privacy is really needed instead of fully trusting it.
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: ^ less inbound influence, that sort of thing yes
&#120320;&#120310;&#120317;&#120302;: (I haven't followed the issues) is there much of a point to privatebroadcast if you're in -onlynet=onion -listen=0 ?
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: I think the idea was logical OR?
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: agree with sipa, there seems to be no point to the feature if that is the case.
&#120313;&#120310;&#120308;&#120309;&#120321;&#120313;&#120310;&#120312;&#120306;: sipa: correlating multiple connections originating from a node - any random outbound peer could do that.
&#120320;&#120310;&#120317;&#120302;: There is a small advantage still, namely that the receiver cannot correlate it with other traffic from you.
&#120320;&#120310;&#120317;&#120302;: Right.
&#120313;&#120310;&#120308;&#120309;&#120321;&#120313;&#120310;&#120312;&#120306;: *multiple transactions, not connections
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: I think this should be a binary choice. Either it works as advertised, or it doesn't and should be removed.
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: "as advertised" doing all the work
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;: so what are we advertising?
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: Yeah exactly, i agree with sedited but what guarantee are we aiming to provide
&#120307;&#120311;&#120302;&#120309;&#120319;: Depending on how easy to exploit the leak is, maybe documentation is not enough and we should enforce the settings until we have had the broader discussion. We should assume at least some users really need serious privacy if they use it and it seems risky no only use documentation.
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;: either we are talking about the guarantees we want to provide, or we are talking about some mitigation for something we can't disclose
&#120320;&#120310;&#120317;&#120302;: The 31.0 release notes make some promises.
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: Are shooting for "If you are not a reachable node, operating only on Tor, then we guarantee the transactions you broadcast won't be easily correlated with each other"?
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: If our privacy model is "honest but curious", then AFAIK we cover that. It's also about user expectations
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: but that;s hard to to communicate, and weaker
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: "what's honest but curious": they follow protocol, but write everything down, say
&#120307;&#120302;&#120315;&#120318;&#120322;&#120302;&#120312;&#120306;: The claims in https://bitcoincore.org/en/releases/31.0/ are "Their IP address (and thus geolocation) is never known to the recipients." &amp; "If the originator sends two otherwise unrelated transactions, they will not be linkable. This is because a separate connection is used for broadcasting each transaction. "
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: instagibbs: so, passive observer?
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: vs active probing, protcool violations
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: yeah, that seems very clear.
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: darosior they follow the stated protocol
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: whatever that means
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: the prior issue we had and fixed violated this
&#120320;&#120310;&#120317;&#120302;: There isn't even a well-defined "honest" behavior for nodes.
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: sipa handwaving here
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: if we can't guarantee what's in those release notes, then we should not ship the feature imo.
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: Making a difference between passive and active attackers here make sense, but i'm concerned it would be hard to translate into an actionable information for users, and end up being a footgun.
&#120320;&#120310;&#120317;&#120302;: Right, but "honest but curious" is trivially false, if every behavior is "honest". That's a term that's used in cryptographic protocol with a well-defined prescription of how honest parties operate. Bitcoin doesn't have any of those.
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: fanquake ok that note is wrong, two txs can be linked at the blockchain layer even with perfect impl
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: "not be linkable at the networking layer" maybe
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;: instagibbs "otherwise unrelated" though
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;: maybe that can be better defined
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: andrewtoth well, theyre all related :D but yes
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: sipa ok, then that. dont worry about my misuse of labels too much
&#120320;&#120310;&#120317;&#120302;: instagibbs: no, i literally don't understand what you mean
&#120320;&#120310;&#120317;&#120302;: like you seem to have an implicit understanding of what "an honest node" means, but i think there is no such thing, and i don't know what it ought to entail
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: What threshold are we aiming for to release this feature? That it prevents linkage at the network layer against a passive observer? Against an active one if you are not reachable? Against an active one if you are not reachable AND Tor-only? Against an active one no matter one?
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: maybe the answer is "no we have no common definitions of what we're promising"
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;: ideally the strongest, but it's hard to say whether we can do it or not. Some issues preventing that can be patched easily, some I've seen are very theoretical and don't seem plausible.
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: let's save the risk estimation for the security team, please
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: at least for now
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;: well then we want to keep the guarantees from v31 release notes?
&#120307;&#120311;&#120302;&#120309;&#120319;: We need to have some clarifying information though, the feature is called privatebroadcast so people will expect something just based on that
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;: yeah, this conversation is too difficult if everything is not on the table
&#120305;&#120327;&#120325;&#120327;&#120308;: +1
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: It's hard for me to see how we could give these guarantees completely as long as we have the mechanism embedded in net_processing, so plausibility may need to be discussed as part of the goal here. Are we happy to ship this feature if we give "reasonable" guarantees, i.e. kill the really low hanging fruits, on a "it's better than nothing" basis?
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: fjahr: +1 for expectations
&#120320;&#120310;&#120317;&#120302;: Maybe this needs a discussion at coredev, and a focus right now about what we can reasonable address by documentation clarification for 32?
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: ^ this
&#120321;&#120310;&#120308;&#120306;&#120319;&#120288;&#120302;&#120307;&#120310;&#120302;: fjahr: +1
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;: how can we focus on what we can reasonably address if we can't discuss the issues?
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: Yeah i was really still on the binary question of what threshold are we setting for ourselves (which necessarily entail not shipping it at all until it meets that threshold, instead of trying to address it with documentation).
&#120305;&#120327;&#120325;&#120327;&#120308;: If the security model has changed substantially since when the feature was shipped it should be disabled or renamed, but I do think something should ship which is better than the default
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: My favorite shed for the rename is -cloakedbroadcast /s
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;: i don't think we should disable it, it is better than the default way to broadcast.
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: (But i do think rename makes more sense than documenting a feature called "private X" with caveats "actually not private in scenarii x, y and z")
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: dzxzg issue is I'm not sure we agreed ahead of time
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: I'm confused, what's not clear about the release note there?
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: I dont read the docs
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: *ducks*
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: :D
&#120320;&#120310;&#120317;&#120302;: instagibbs: well, you or your agent
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: sedited: fair
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: the docs seem to match my expectation of the feature in my head so maybe less confusion than im letting on
&#120326;&#120302;&#120315;&#120304;&#120326;: I think the wording "never known" might give a false sense of security.
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: Ok since i don't think the status quo is desirable, i suggest we rename the feature for the upcoming release, with a name that does not give as much expectation as "private" broadcast, and make weaker claims in our release notes than we did for 31. This way we keep the option for now because it's better than the other broadcast, but also don't risk users depending on something we cannot guarantee.
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: ah the easy part, naming things
&#120307;&#120311;&#120302;&#120309;&#120319;: -betterthanthedefaultbroadcast it is
&#120320;&#120313;&#120310;&#120323;&#120815;&#120319;__: -broadcast++
&#120321;&#120310;&#120308;&#120306;&#120319;&#120288;&#120302;&#120307;&#120310;&#120302;: yancy: yes! given the current state of the discussion, it's VERY bold
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: I don't think it's a great situation, but i don't have a better idea for 32 literally on the day of branch off.
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;: a release not warning is not enough?
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;: *note
&#120306;&#120322;&#120308;&#120306;&#120315;&#120306;&#120320;&#120310;&#120306;&#120308;&#120306;&#120313;: -notsoprivatebroadcast
&#120320;&#120306;&#120305;&#120310;&#120321;&#120306;&#120305;: this will have to be backported anway, so we'll have a few weeks to discuss.
&#120313;&#120310;&#120308;&#120309;&#120321;&#120313;&#120310;&#120312;&#120306;: and when we fixed the known issues, do we rename it back to "private broadcast"?
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: lightlike: -evenbetterthandefaultbroadcast
&#120302;&#120315;&#120305;&#120319;&#120306;&#120324;&#120321;&#120316;&#120321;&#120309;: lightlike +1 - release note warning is better
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: I don't think a release note is nearly enough to compensate for the potential sense of security providing a feature called "private X" may give to users.
&#120321;&#120310;&#120308;&#120306;&#120319;&#120288;&#120302;&#120307;&#120310;&#120302;: how's "-veilbroadcast" since it's partial in privacy
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: release note warning should happen regardless
&#120305;&#120302;&#120319;&#120316;&#120320;&#120310;&#120316;&#120319;: Anyways, i don't have much to add on this topic.
&#120307;&#120311;&#120302;&#120309;&#120319;: The meeting is coming to a close in 5min, feel free to continue discussing renaming vs. release notes, but is there anything else anyone wanted to discuss/announce in the meeting?
&#120307;&#120311;&#120302;&#120309;&#120319;: I think renaming should be to some name that doesn't make any promises, like -oneshottorbroadcast then we don't have issues like this with naming
&#120307;&#120311;&#120302;&#120309;&#120319;: (if people want a renaming)
&#120305;&#120327;&#120325;&#120327;&#120308;: no strong feeling about what the name should be, but the point of renaming in my mind is less about the promises the name makes and more to catch people that haven't read release notes or new documentation and go on using private broadcast with the wrong expectations
&#120288;&#120322;&#120319;&#120304;&#120309;[&#120314;]: Isn't the point that the transaction appears to come from a node that isn't the sender?
&#120288;&#120322;&#120319;&#120304;&#120309;[&#120314;]: So, maybe "teleportbroadcast" or "strawmanbroadcast" or smth?
&#120288;&#120322;&#120319;&#120304;&#120309;[&#120314;]: surrogatebroadcast? :p
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: temudandelion
&#120288;&#120322;&#120319;&#120304;&#120309;[&#120314;]: heh
&#120310;&#120315;&#120320;&#120321;&#120302;&#120308;&#120310;&#120303;&#120303;&#120320;: im JOKING
&#120307;&#120311;&#120302;&#120309;&#120319;: Murch: sounds still fine, as long as it's more descriptive of the mechanism rather than making promises of an end result
&#120326;&#120302;&#120315;&#120304;&#120326;: shielded-broadcast is my bikeshed color
&#120307;&#120311;&#120302;&#120309;&#120319;: sipa about to suggest -minibroadcast
&#120307;&#120311;&#120302;&#120309;&#120319;: Ok, let's end the meeting with this :D
&#120307;&#120311;&#120302;&#120309;&#120319;: #endmeeting</code></pre><p>Read here for the <a href="https://achow101.com/ircmeetings/2026/bitcoin-core-dev.2026-09-10_16_00.html">full meeting</a></p><div><hr></div><h4><strong>Releases</strong></h4><ul><li><p>32.0 feature freeze was 2026-08-20. Branch-off / <code>v32.0rc1</code> was targeted for 2026-09-10 and has not landed. The <a href="https://github.com/bitcoin/bitcoin/milestone/84">32.0 milestone</a> still has 5 open items. Latest still <a href="https://github.com/bitcoin/bitcoin/releases/tag/v31.1">v31.1</a> / <a href="https://github.com/bitcoin/bitcoin/releases/tag/v30.3">v30.3</a> / <a href="https://github.com/bitcoin/bitcoin/releases/tag/v29.4">v29.4</a>.</p></li></ul><div><hr></div><blockquote><p>Thank you for reading. Be sure to tune in again next week for your updates on Bitcoin Core!</p></blockquote><p><em>If there are any comments, suggestions, or errors, do not hesitate to reach out or comment</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://insider.btcpp.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">bitcoin++'s Insider Edition is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>