<?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:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Michael Sutton on Medium]]></title>
        <description><![CDATA[Stories by Michael Sutton on Medium]]></description>
        <link>https://medium.com/@michaelsuttonil?source=rss-f5e97dd1bbe0------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*xyA9SMDqksgdQNTl.jpg</url>
            <title>Stories by Michael Sutton on Medium</title>
            <link>https://medium.com/@michaelsuttonil?source=rss-f5e97dd1bbe0------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 10 Nov 2026 21:31:31 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@michaelsuttonil/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Kaspa Covenants++ “Toccata” Hard-Fork Outlook]]></title>
            <link>https://medium.com/@michaelsuttonil/kaspa-covenants-toccata-hard-fork-outlook-a4d81a40900c?source=rss-f5e97dd1bbe0------2</link>
            <guid isPermaLink="false">https://medium.com/p/a4d81a40900c</guid>
            <category><![CDATA[zero-knowledge-proofs]]></category>
            <category><![CDATA[blockdag]]></category>
            <category><![CDATA[kaspa]]></category>
            <dc:creator><![CDATA[Michael Sutton]]></dc:creator>
            <pubDate>Fri, 03 Apr 2026 02:11:54 GMT</pubDate>
            <atom:updated>2026-04-05T08:49:18.647Z</atom:updated>
            <content:encoded><![CDATA[<p>As we approach the final stretch of covenants++ and zk opcode development, it feels like the right time to lay out what the coming hard fork brings, and how the next 2.5 months are expected to unfold.</p><p>Fittingly, we begin by crowning this effort with its proper musical tone -- <strong>“Toccata”</strong> -- in keeping with our harmonic tradition.</p><p>Initiated by <a href="https://medium.com/u/4c486de0af36">Ori Newman</a> as an effort to introduce covenants into Kaspa’s script engine, partly in the context of the OP_CAT discussion in BTC circles, this hard fork has since expanded well beyond covenants themselves. At a high level, Toccata now brings two new programmability paths to Kaspa:</p><ul><li>a brand new compiler for utilizing these script capabilities directly on L1, namely <a href="https://github.com/kaspanet/silverscript">Silverscript</a></li><li>the infrastructure for a zk layer built over those same covenant foundations</li></ul><h3>The dual landscape</h3><p>Kaspa’s programmability landscape is now taking a clearer shape, and it has a dual form.</p><p>The first pillar is <strong>native L1 covenant programming</strong>, aimed at peer-to-peer oriented applications -- including surprisingly complex stateful multi-contract flows -- even though the model itself remains grounded in local UTXO computation. This is the world of direct script-engine programmability on Kaspa itself. On this side, core is actively finalizing <strong>Silverscript</strong> -- initiated by Ori Newman, myself, IzioDev, and Manyfest -- to make it easier and safer to deploy complex covenants directly on Kaspa L1.</p><p>The second pillar is <strong>based zk applications</strong>: zk verification opcodes, sequencing commitment access, and the partitioned sequencing commitment architecture of <a href="https://github.com/kaspanet/kips/pull/36">KIP-21</a>. Together with covenants -- now expressive enough to implement the L1 side of a based zk settlement protocol -- these provide the foundation for building based zk applications over Kaspa, including canonical bridging. For background, see the research posts on <a href="https://research.kas.pa/t/on-the-design-of-based-zk-rollups-over-kaspas-utxo-based-dag-consensus/208">based zk rollups over Kaspa</a> and the <a href="https://research.kas.pa/t/l1-l2-canonical-bridge-entry-exit-mechanism/258">L1-L2 canonical bridge entry/exit mechanism</a>.</p><p>This is also a significant milestone on the road to <strong>vprogs</strong> (<a href="https://github.com/kaspanet/research/blob/main/vProgs/vProgs_yellow_paper.pdf">yellowpaper</a>), where the long-term destination is synchronously composable verifiable programs. We are not there yet. The current focus is on standalone based zk applications, which communicate via L1 proof-based bridging rather than synchronous composition.</p><p>A key part of that broader direction arriving in this hard fork is the partitioned sequencing commit scheme. It matters even for standalone apps, because for an app model to make practical sense, proving costs have to scale roughly with the app’s own activity rather than with overall DAG activity.</p><p>In parallel, the <a href="https://github.com/kaspanet/vprogs">vprogs repo</a>, primarily developed by Hans Moog, is already implementing the runtime layer for these apps. It carries the vprogs name because of where it is aiming to go after this hard fork, but its immediate role is to provide a highly optimized, parallel-centric execution environment for based computation over Kaspa.</p><p>Kaspa core will make it a primary effort to make both of these programmability systems approachable in practice: through compilers, SDKs, and runtimes, and by helping external developers navigate the decision process of choosing the right tools.</p><h3>Already in</h3><p>A substantial part of the hard fork is already in place:</p><ul><li>extended script-engine opcode support -- the main covenants backbone (<a href="https://github.com/kaspanet/kips/pull/32">KIP-17</a>)</li><li>covenant IDs, allowing easy lineage management as a consensus + engine feature (<a href="https://github.com/kaspanet/kips/pull/35">KIP-20</a>)</li><li>zk opcodes with a zk-verifier precompile subsystem (<a href="https://github.com/kaspanet/kips/pull/31">KIP-16</a>), authored and implemented by Alexander Safstrom, who is also developing SDK support around this area; currently supporting:<br>- a flexible Groth16 verifier, allowing arbitrary parameters and verification keys<br>- a RISC Zero STARK verifier, already implemented and activated on testnet 12, with the remaining decision being whether to activate it on mainnet</li><li>sequencing commitment access opcode, enabling based applications, i.e. zk systems that fully follow L1 sequencing and cannot add or drop transactions</li></ul><p>In parallel to the protocol and tooling work, key PoC milestones from the <a href="https://gist.github.com/michaelsutton/5bd9ab358f692ee4f54ce2842a0815d1">initial hard-fork kickoff gist</a> are already behind us, including inline zk covenants and based zk covenants with a KAS canonical bridge. Implemented by Maxim, these PoCs were instrumental in driving and validating the shape of the hard fork as it matured.</p><h3>Finalized these days</h3><p><strong>Expected feature freeze: April 15, 2026</strong></p><p>The following items are being finalized now:</p><ul><li>final script-engine pricing policies (implemented; KIP pending)</li><li><a href="https://github.com/kaspanet/kips/pull/36">KIP-21</a>, authored by myself and implemented by Maxim Biryukov, now fully implemented with strong performance, and currently pending thorough review</li><li>subnet and gas commitment support, complementing KIP-21</li></ul><h3>Why the mainnet hard-fork date moved to ~June 5–20, 2026</h3><p>The hard fork was originally targeted for <strong>May 5, 2026 (</strong><em>partly for Crescendo symbolism</em>). However, as Kaspa’s dual programmability landscape came into focus, it became clear that the sequencing commitment architecture had to be finalized correctly before activation, especially for the zk-oriented path.</p><p>Once zk circuits and runtimes bind to a sequencing commitment hashing structure, later structural changes become breaking changes. So we prefer to take this extra time and lock in the right design from the start.</p><p><a href="https://github.com/kaspanet/kips/pull/36">KIP-21</a> is already future-compatible with the CD commitment scheme that will be required by vprogs. It also enables an important property for the current roadmap: a zk application only needs to prove work proportional to its own activity. That is crucial both for the current standalone zk-app roadmap and for future vprogs.</p><h3>The road from feature freeze to mainnet</h3><p>Right after feature freeze, we plan to restart the dedicated testnet, <strong>TN12</strong>, as a clean network containing all final features. This will not try to simulate complex hard-fork activation paths or DB upgrades. It is simply a clean restart with the full final feature set, still over a dedicated branch in the <em>rusty-kaspa</em> repo.</p><p>From there, the main engineering effort shifts to merging the long-lived pending branch, with all the accumulated months of work, back into master. This is where the remaining integration work happens: final auditing, closing each and every todo, perfecting hard-fork activation logic, and handling DB upgradability correctly.</p><p>The end goal is for the master branch to fully support both pre-activation and post-activation logic in one coherent codebase.</p><p>Once that is in place, we will schedule a test hard fork over the long-term <strong>TN10</strong>, in order to simulate a full mainnet-style transition. That rehearsal is the key step. Once it happens to our satisfaction, we can finalize the mainnet date and hardcode it.</p><p>For miners and the ecosystem, the operational story should remain simple: upgrade nodes, and everything that already works should keep working. Node requirements are expected to stay in roughly the same range, with possibly something like <strong>20–50% more disk space usage</strong>.</p><p>This hard fork also brings new utility, which means new SDKs and APIs will increasingly target the new developer audience. At the same time, classic Kaspa APIs should continue working without change. So we are not in a rush to make every new SDK perfect before the hard fork itself -- that will remain ongoing work.</p><p>Toccata marks the point where Kaspa’s high-frequency monetary base layer meets programmability in two layered forms: native L1 covenant systems, and based zk systems built on top of the same foundations.</p><p>The remaining work is not about expanding scope further, but about freezing the right interfaces, rehearsing the transition properly, and bringing this to mainnet in a way the ecosystem can rely on, while keeping the underlying L1 lean, sound, and stable.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a4d81a40900c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Unveiling the “Crescendo” Hard-Fork roadmap — 10BPS and more]]></title>
            <link>https://medium.com/@michaelsuttonil/unveiling-the-crescendo-hard-fork-roadmap-10bps-and-more-6072329e177f?source=rss-f5e97dd1bbe0------2</link>
            <guid isPermaLink="false">https://medium.com/p/6072329e177f</guid>
            <category><![CDATA[high-bp]]></category>
            <category><![CDATA[blockdag]]></category>
            <category><![CDATA[cryptocurrency]]></category>
            <category><![CDATA[kaspa]]></category>
            <dc:creator><![CDATA[Michael Sutton]]></dc:creator>
            <pubDate>Mon, 19 Aug 2024 21:47:27 GMT</pubDate>
            <atom:updated>2024-08-19T21:47:27.470Z</atom:updated>
            <content:encoded><![CDATA[<h3>Unveiling the “Crescendo” Hard-Fork roadmap — 10BPS and more</h3><p><em>This post was written with the help of coderofstuff, Shai Wyborski and others</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Pi9FcixYHJtUybsDrhnsrg.png" /></figure><p>With the successful deployment of the Rusty Kaspa (RK) node software (<a href="https://medium.com/@michaelsuttonil/kaspa-on-rust-first-stable-release-636938596441">stable release</a>), and its broad adoption by Kaspa’s P2P network and mining community (~<a href="https://www.kaspalytics.com/app/mining/rust-migration">97%</a> of Kaspa blocks are mined via RK nodes), the core open-source development team is now starting to prepare for a hard-fork¹ that will, among other things, increase the block rate of the network from 1 to 10 blocks-per-second (BPS)². In this post, I outline the tentative roadmap for the upcoming hard-fork, hereby named the <strong>Crescendo Hard-Fork</strong>, what it will likely include, and the process of deploying it.</p><h4>Overview</h4><p>At a high level, here’s how we envision the steps needed to implement such an acceleration on Kaspa’s main network. The process involves the following iterative phases:</p><ul><li><strong>Launch &amp; stabilize:</strong> Launch a testnet with the desired block rate and related network settings, and work on stabilizing it. This has been accomplished with <a href="http://rustforce1.kaspa.org:8080/">TN11</a>, the existing 10-BPS Kaspa testnet, which has been operational since January 7, 2024. (<em>Done</em>)</li><li><strong>Identify bottlenecks:</strong> Iteratively identify processing bottlenecks and make performance optimizations to lower the hardware specifications required for running a node. (<em>Done</em>)</li><li><strong>Iterative improvement</strong>: Repeat the above until the minimal specs are affordable enough and low enough to satisfy the decentralization required for the mainnet. (<strong><em>We are here</em></strong>, getting close to the convergence of this optimization loop. Approximate timeline: ~2 months from now.)</li><li><strong>Enhanced user experience</strong>: Once performance requirements are settled, perfect the node software to the level of user experience required by mainnet operators. That is, some minor problems that can be neglected in a testnet setting need to be addressed here (~3 months from now). (<em>Next</em>)</li><li><strong>Additional features</strong>: Implement any additional hardfork features and deploy them on TN11. (Target timeline: ~4–5 months from now. Some features might be excluded <em>to fit the timeline</em>.)</li><li><strong>Feature freeze.</strong></li><li><strong>Hardfork version:</strong> Implement the hardfork transitioning version</li><li><strong>Deploy transition testnet</strong>: Deploy the transition version on TN10 (1 BPS testnet) to simulate the mainnet transition.</li><li><strong>Mainnet deployment</strong> with hardfork transitioning activated 1–2 months later</li></ul><h4>A more detailed walkthrough</h4><p>Currently, RK developers are busy with preparing a mainnet version that is focused on introducing many mempool features whose necessity was detailed by the KRC-20 beta launch. These include delicate features such as RBF (replace-by-fee) and a fee estimation API, both of which require careful work with ecosystem developers.</p><p>After this version is released³, focus will shift to creating a performance oriented version meant to stabilize TN11 nodes. This version will be used to align TN11 participants behind a version which hopefully solves all current processing bottlenecks and provides a smooth operation of the network as a whole.<br>The main bulk of work would be to merge the following existing PRs:</p><ul><li><a href="https://github.com/kaspanet/rusty-kaspa/pull/494">Computing GHOSTDAG on higher levels only on-demand</a> while creating a pruning proof. This is a significant yet delicate PR that still requires a thorough review before merging.</li><li><a href="https://github.com/kaspanet/rusty-kaspa/pull/495">Parallel input validation</a>, introduces finer granularity when processing transactions by validating inputs in parallel.</li><li>Upgrading the <a href="https://github.com/kaspanet/kips/blob/master/kip-0009.md">KIP9 formula</a> on TN11 to its final form (TN11 was launched with a premature version of KIP9).</li><li><a href="https://github.com/kaspanet/rusty-kaspa/pull/487">An implementation of KIP10</a>, compounding addresses, allowing microtransactions with KIP9, <a href="https://research.kas.pa/t/auto-compounding-additive-addresses-kip10-draft/168">see here</a>.</li><li><a href="https://github.com/kaspanet/rusty-kaspa/pull/513">An improved logic for transaction sampling</a> while building block templates</li></ul><p>After these features are merged, TN11 will be rolled out with this new version, and run under maximum load for a few weeks. This will allow us to understand the system requirements required to run such a node. If the minimal system requirements are deemed too high, some parameters (such as difficulty adjustment window size and sample rates, finality depth, etc) will have to be adjusted, followed by a few more weeks of testing. Alternatively, further performance cycles might be considered.</p><p>During the testing period, work will resume on some other features including:</p><ul><li>Improving and perfecting the IBD process, addressing some edge-cases in the new node sync process that are extremely rare on mainnet, but will be exacerbated with higher BPS and shorter pruning periods.</li><li>Improvements of finality rules and new node headers-proof validation process (<a href="https://github.com/kaspanet/kips/pull/10/files">KIP7</a>, <a href="https://github.com/kaspanet/kips/pull/13/files">KIP8</a>).</li><li>Cryptographic receipts (<a href="https://github.com/kaspanet/kips/blob/master/kip-0006.md">KIP6</a>), a modification that allows a much smaller and simpler proof that an arbitrarily old transaction was confirmed.</li><li>Enabling transaction payloads, which will streamline specifications such as KRC-20.</li></ul><p>Once all of the above is completed, we can start with the process of writing a mainnet version of this hard-fork. This version will have to include the logic for transitioning from the current protocol parameters to the new ones. This is an intricate process that will have to be heavily tested and involves making some crucial decisions such as when the HF will go into effect, and whether it should be done gradually or in one hit.</p><p>We emphasize that the plan outlined above is tentative. The purpose of this post is not to present a finalized, set-in-stone roadmap, but to highlight that the 10BPS hard-fork is the next major focus for the core team and that significant effort will be devoted to meeting this target. Above all, our guiding principles remain unchanged: network security and stability, and allowing sufficient time for the ecosystem to adapt. In the same spirit, we note that while the above details pertain to the responsibilities of the core developers, the broader ecosystem — including wallet developers, pools, exchanges, block explorers, and others — will also need to make adjustments, and should actively engage in this effort by testing their software components in the 10-BPS testnet.</p><p>¹In our context, “hard-fork” refers to a community-agreed and scheduled change in the consensus protocol, rather than a contentious fork resulting from disagreements within the network.</p><p>²None of the changes included in this hard-fork will affect user funds or the emission schedule. The increase to 10 BPS will result in ten times more rewards, but the reward per block will be reduced by the same factor, maintaining the same emission rate per second.</p><p>³A mempool-focused mainnet <em>release candidate</em> version is expected by the end of this week (~August 25th).</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6072329e177f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Kaspa on Rust — First Stable Release]]></title>
            <link>https://medium.com/@michaelsuttonil/kaspa-on-rust-first-stable-release-636938596441?source=rss-f5e97dd1bbe0------2</link>
            <guid isPermaLink="false">https://medium.com/p/636938596441</guid>
            <category><![CDATA[parallel-computing]]></category>
            <category><![CDATA[p2p]]></category>
            <category><![CDATA[rust]]></category>
            <category><![CDATA[kaspa]]></category>
            <category><![CDATA[cryptocurrency]]></category>
            <dc:creator><![CDATA[Michael Sutton]]></dc:creator>
            <pubDate>Mon, 13 May 2024 16:46:22 GMT</pubDate>
            <atom:updated>2024-05-13T16:46:22.831Z</atom:updated>
            <content:encoded><![CDATA[<h3>Kaspa on Rust — First Stable Release</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*U_7ZWR95feyO9MvTSgCnNQ.png" /></figure><p>We are excited to announce the first stable Rusty Kaspa (RK) node <a href="https://github.com/kaspanet/rusty-kaspa/releases/tag/v0.14.1">Release</a> (version 0.14.1).</p><p>This is a significant milestone for the Kaspa network, as it marks the point where we shift to a new improved and optimized engine, which can now be built upon and accelerated to its limits.</p><p>Approx. 2 years ago, when I first proposed the Rust Rewrite, I dreamed of unleashed performance and superb code quality. Today I can say that the new codebase is of highest quality possible, and that the set of individuals contributing to it is now an elite group of people, forming a decentralized and world-spread core development force.</p><p>Currently, as part of the open beta announced a few weeks ago, RK nodes already comprise ~1/4 of the P2P network, and as much as <a href="https://www.kaspalytics.com/app/mining/rust-migration">29%</a> of the hashrate is mined through them.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YPK4C7A7_eSQR7p-IsWpYQ.png" /><figcaption>Rust nodes already comprise ~1/4 of the Kaspa network. Source: <a href="https://kas.fyi/">kas.fyi</a></figcaption></figure><p><em>Going forward, this stable release signifies the point at which we recommend RK as the main software to be running the network.</em></p><p>Switching to RK is crucial for major network-wide future advances such as accelerating mainnet to 10-BPS (10-BPS testnet-11 runs solely on RK nodes), upgrading to Dagknight, supporting smart-contract opcodes, etc. However, it also provides the following immediate benefits to node maintainers:</p><ul><li><em>Near-constant storage</em>: Unlike golang nodes which only prune transaction data, RK nodes constantly prune headers as well, hence node disk usage is <em>lower</em> and <em>nearly constant</em>.</li><li><em>Fast sync times</em>: RK heavily utilizes parallelism to accelerate header and block processing. This is mostly notable during IBD where RK nodes enjoy increased processing throughput and are significantly faster.</li><li><em>RPC software stack</em>: RPC interfaces have an enhanced design and will be extended in the near future (with a fully-featured <a href="https://github.com/kaspanet/rusty-kaspa/pull/401">transaction index</a> being a notable example)</li></ul><h3>Transition strategy &amp; technical details</h3><p>We aim for a gradual process where more and more nodes slowly switch to RK. The following provides detailed instructions for the upgrade based on <em>your </em>specific use case:</p><ul><li><em>Rust open beta participants</em>: Version <a href="https://github.com/kaspanet/rusty-kaspa/releases/tag/v0.14.1">0.14.1</a> contains several stability fixes for issues that have been reported over the beta testing period. It is highly recommended that you upgrade to this version <em>as soon as you can</em> for the reliable operation of your node (if you upgraded to 0.14.1 RC during the last week, there’s no need to take any action)</li><li><em>Golang node maintainers</em>: Pick a <a href="https://www.calculator.net/random-number-generator.html?slower=0&amp;supper=7&amp;ctype=1&amp;s=4130&amp;x=Generate">random number</a> between 0–7. Wait this amount of days before you switch your node to RK. Note that RK uses a completely different database, so you&#39;ll need to resync the new RK node from the network. If possible, keep the former golang node up and running in parallel to the new node for a stability period.</li><li><em>Golang archive node maintainers:</em> RK supports a robust archival mode, but a full archive migration process was not deployed yet. If you wish to keep your archive continuous, keep the golang node for now, a DB migration process will be implemented and announced.</li><li><em>Mining Pools</em>: Pool operators who haven’t experimented yet with the RK node should begin this process and should allocate a small hashrate percentage to be mined through it. Hashrate should then gradually shift entirely to RK nodes. Large pools should coordinate the timing and hashrate percentage with the core development group.</li><li><em>Exchanges (and other transaction confirmation service providers)</em>: Test the RK node in your test environments. It should work as a drop-in replacement to current golang node as it implements the same gRPC API. Get comfortable with running the node and maintaining it. Then gradually move your services to run over it. If you use kaspawallet golang CLI wallet at your backend services, upgrade to latest version (<a href="https://github.com/kaspanet/kaspad/releases/tag/v0.12.17">0.12.17</a>) which was just released and is compatible with RK nodes. See the following point as well —</li><li><em>Wallet developers</em>: Follow <a href="https://github.com/kaspanet/kips/blob/master/kip-0009.md#wallets">KIP9</a> simplified instructions (disallow sub 0.2 KAS payments; make sure change is above 0.2 KAS by selecting larger/additional inputs if needed). Test your wallets over the RK node. A long term guide with a detailed wallet reference implementation for fully adapting wallets to KIP9 will be published in the coming weeks.</li><li><em>Normal users (who only access their wallet via web or mobile app)</em>: <strong>No action needed</strong>. Be patient with wallet developers if minor problems occur when making very small payments.</li></ul><p>The RK node has a CLI interface which is mostly identical to golang nodes. The following lists any (breaking) CLI changes:</p><ul><li>RPC defaults to localhost (127.0.0.1) so is not accessible externally. To restore golang-like behavior add --rpclisten=0.0.0.0</li><li>UPnP is supported and <em>on </em>by default. This means nodes can be visible publicly even if launched behind a router. To disable UPnP add --disable-upnp</li><li>Config file format has a slightly different structure, see <a href="https://github.com/kaspanet/rusty-kaspa?tab=readme-ov-file#running-the-node">Using a configuration file</a></li><li>Configurable RAM cache usage: Node maintainers who wish to increase (or decrease) their RAM usage can set --ram-scale=1.0 to a number higher (or lower) than 1.0 respectively. This increases sync and overall node performance by using additional RAM.</li></ul><h3>Kaspa Next Generation (KNG) &amp; WASM SDK</h3><p>A rich software stack has already been built over the RK codebase. Subsequent announcements will focus on each of them separately. Here we only bring a brief summary.</p><p><strong><em>KNG</em></strong>: Kaspa NG (KNG) — A feature-rich desktop solution that integrates the RK P2P node as well the ability to connect to the public P2P node infrastructure. KNG includes a Rusty Kaspa wallet implementation, node and network performance metrics, and a real-time Block-DAG visualizer. <br>KNG makes it easy for any desktop user to contribute to the network topology decentralization by powering up the local P2P node without any extensive knowledge.</p><p><strong><em>WASM SDK</em></strong>: The WASM SDK enables the Rusty Kaspa framework to work within the WASM32 environment, making it accessible from JavaScript and TypeScript. This adaptation allows the RK framework to be used in web browsers, Node.js environments (such as Electron and NW.js), and Chrome browser extensions. The SDK includes essential tools for handling network-focused cryptographic functions, interacting with the RK peer-to-peer (P2P) nodes via WebSocket RPC, and creating wallets.</p><p>I would like to personally thank everyone who has contributed to the development and testing of this enormous project, no matter how large or small your contribution has been, and to <a href="https://medium.com/u/400d0e2aab3b">Yonatan Sompolinsky</a>, for dreaming about 10-BPS and beyond, and being a true inspiration. None of this would be possible without the above-mentioned community of developers and enthusiasts that had formed around this effort ❤️</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=636938596441" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Kaspa Security Patch and Hard Fork — September 2022]]></title>
            <link>https://medium.com/@michaelsuttonil/kaspa-security-patch-and-hard-fork-september-2022-12da617b0094?source=rss-f5e97dd1bbe0------2</link>
            <guid isPermaLink="false">https://medium.com/p/12da617b0094</guid>
            <category><![CDATA[hard-fork]]></category>
            <category><![CDATA[security]]></category>
            <category><![CDATA[kaspa]]></category>
            <category><![CDATA[consensus]]></category>
            <dc:creator><![CDATA[Michael Sutton]]></dc:creator>
            <pubDate>Fri, 30 Sep 2022 11:16:41 GMT</pubDate>
            <atom:updated>2022-09-30T11:16:41.194Z</atom:updated>
            <content:encoded><![CDATA[<h3>Kaspa Security Patch and Hard Fork — September 2022</h3><h4><em>Summary of events leading to Kaspad </em><a href="https://github.com/kaspanet/kaspad/releases/tag/v0.12.7"><em>version 0.12.7</em></a></h4><p>The attack vector described below resembles some similarity to the <a href="https://en.bitcoin.it/wiki/Transaction_malleability">bitcoin transaction malleability</a> issue, but is actually a bit different and even reverse in some sense. Exploiting this vector would require intrinsic knowledge of our consensus and codebase, but nonetheless we decided to be precaution and fix this issue as soon as possible despite the short-term hassle. Finding this issue and fixing it is another advantage of the code rewrite to rust acting as an audit process. All solutions below were already gradually applied through the above mentioned version. The final hard-fork kicked in at September 28, 2022, 09:20 UTC at DAA score <em>27905000</em>.</p><p><strong>Background</strong>:</p><p>Transactions include a per-input <em>sig_op_count </em>field indicating the number of signature operations required to verify the spending of that input. This field is used when calculating the overall mass of a transaction since signature verification is the most costly operation in the transaction verification process.</p><p><strong>Problem </strong>(discovered by <a href="https://medium.com/u/4c486de0af36">Ori Newman</a> during the Rust rewrite at September 12th):</p><p>Transaction hash (as well as <em>transaction id</em>), do not include the <em>sig_op_count </em>field in the hashing process. This means that the Merkle root of all transactions is unaffected by this field, and as a result, nor does the block hash.</p><p><strong>Attack vector #1</strong>:</p><p>A malicious node can easily manipulate <em>sig_op_count </em>to render the block mass too high without affecting the block hash, so that nodes receiving <em>this version</em> of the block will mark this hash as invalid, while others receiving the original block will consider it valid and will mine over it. Even if the recipients of the modified block get the correct block data eventually, it will hash the same, and the block will not be re-checked and will remain invalid. Which will immediately result in a net-split.</p><p><strong>Attack vector #2</strong>:</p><p>A malicious node manipulates <em>sig_op_count </em>with a small change, where it’s still under valid mass, but different from the real number of signatures. The block passes “body in isolation” validation, but when considered by virtual resolver a few things can happen: (i) if it’s a candidate to be a chain block it gets disqualified from chain since the validation logic discovers that it lied about the number of sigs; (ii) when merged by a chain block, this tx will not verify correctly (tx sig engine will expect the wrong number of signatures). This attack vector does not lead to a net-split, however it can lead to a <em>chain</em>-split since nodes disqualify each other’s blocks from being chain blocks.</p><p><strong>Permanent solution</strong> (<strong>#1</strong>):</p><p>Hard fork such that <em>sig_op_count </em>does get included in the transaction hashing process.</p><p>Problem:</p><p>HF code must be published at least a week in advance. Leaking this vulnerability to anyone tracking us closely and actually increasing the threat of a net-split in the intermediate period.</p><p><strong>Added solution (#2)</strong>:</p><p>In the HF version, we made the following changes <em>immediately </em>apply (aka “the security patch”):</p><p>1. Ignore <em>sig_op_count </em>when calculating mass</p><p>2. Ignore wrong <em>sig_op_count </em>when validating transactions against past UTXO</p><p>This means that as long as we get a majority to adapt this version very fast, then only non-upgraded nodes are vulnerable to the net-split attack.</p><p>However this opens the door to possible data spamming by sending txs with many transactions (since no <em>sig_op_count </em>limit until the HF kicks in). This is not too bad since every signature still increases the number of bytes in the signature payload, a quantity which remains under mass limit.</p><p>Note: #2 includes some components that can be used to net-split non-upgraded nodes from upgraded ones, however, unlike the permanent solution (#1), this will happen only as a result of an actual attack, so the strategy was to cover as much details as possible during this “sensitive” period.</p><p><strong>Added solution (#3)</strong>:</p><p>In the pre-HF changes, we limited the number of <em>actual sig_ops </em>and limited the overall number of tx inputs per block with relatively large constants.</p><p>Explanation: since #2 still includes the possibility for an attacker to net-split the minority which did not upgrade, we can temporarily add other constraints that will limit the block mass and thus limit possible spamming. These constraints are already implicitly respected by previous versions, so only a deliberate attacker could have used them.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=12da617b0094" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>