<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>zakura - Announcements</title>
    <subtitle>Zcash Full Node</subtitle>
    <link rel="self" type="application/atom+xml" href="https://zakura.com/announcements/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://zakura.com/announcements/"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-08-31T00:00:00+00:00</updated>
    <id>https://zakura.com/announcements/atom.xml</id>
    <entry xml:lang="en">
        <title>Release: Zakura 1.3.0</title>
        <published>2026-08-31T00:00:00+00:00</published>
        <updated>2026-08-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Zakura Developers
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zakura.com/announcements/zakura-1-3-0/"/>
        <id>https://zakura.com/announcements/zakura-1-3-0/</id>
        
        <content type="html" xml:base="https://zakura.com/announcements/zakura-1-3-0/">&lt;figure class=&quot;article-hero&quot;&gt;
  &lt;img class=&quot;hero-day&quot; src=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;images&#x2F;zakura-1-3-0-art-v1.png&quot; width=&quot;2400&quot; height=&quot;1260&quot; alt=&quot;Zakura 1.3.0 paired with Common on a pale gridded blueprint: the solid pink zakura flower logo above the version number 1.3.0 on the left, a double-headed equivalence arrow in the centre, and a wireframe blueprint drawing of the same flower above the word COMMON on the right.&quot;&gt;
  &lt;img class=&quot;hero-night&quot; src=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;images&#x2F;zakura-1-3-0-art-dark-v1.png&quot; width=&quot;2400&quot; height=&quot;1260&quot; alt=&quot;Zakura 1.3.0 paired with Common on a dark navy gridded blueprint: the solid pink zakura flower logo above the version number 1.3.0 on the left, a double-headed equivalence arrow in the centre, and a wireframe blueprint drawing of the same flower above the word COMMON on the right.&quot;&gt;
&lt;&#x2F;figure&gt;
&lt;p&gt;We have released &lt;strong&gt;Zakura &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&#x2F;releases&#x2F;tag&#x2F;v1.3.0&quot;&gt;&lt;code&gt;1.3.0&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt;, our largest update yet. This is the first release built on &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;common&quot;&gt;Common&lt;&#x2F;a&gt;, the accelerated cryptography stack we &lt;a href=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;announcements&#x2F;zakura-common&#x2F;&quot;&gt;recently announced&lt;&#x2F;a&gt;, directly translating to improved transaction and block processing time for all users.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;This release also features a brand new consensus engine built for speed and security.&lt;&#x2F;strong&gt; Currently located within our experimental P2Pv2 stack, its architecture addresses security issues by targeting vulnerabilities at their root causes. It is also designed in anticipation of higher throughput, and supports better integration with &lt;code&gt;lightwalletd&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Several features requested by explorers, indexers, infrastructure operators and users migrating from &lt;code&gt;zcashd&lt;&#x2F;code&gt; have been integrated into this release. We recommend that all node operators update for better performance and security, and we recommend miners update for reduced orphan rates.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;experimental-consensus-engine&quot;&gt;Experimental Consensus Engine&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;announcements&#x2F;zakura-1-1-1&#x2F;#security&quot;&gt;Earlier releases&lt;&#x2F;a&gt; of Zakura closed P2P vulnerabilities one at a time. Most of these issues were due to underlying architectural problems that would require a new proof-of-work consensus engine to truly resolve. So, we built it.&lt;&#x2F;p&gt;
&lt;p&gt;In our redesign, every byte communicated must be verifiable, useful, and within a node&#x27;s work budget. This is the same kind of design philosophy underlying light clients. In fact, our new implementation is naturally &lt;strong&gt;light client first.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;verified-header-chain&quot;&gt;Verified Header Chain&lt;&#x2F;h3&gt;
&lt;p&gt;Zakura&#x27;s experimental consensus engine downloads and verifies headers and tracks competing consensus branches in a bounded, authenticated DAG, selecting the best eligible chain. It verifies each header&#x27;s proof-of-work, difficulty and contextual rules before the node acts on it. Then, it authenticates every block body against the verified header chain.&lt;&#x2F;p&gt;
&lt;figure class=&quot;diagram-figure&quot;&gt;
&lt;svg class=&quot;diagram&quot; viewBox=&quot;0 0 660 222&quot; xmlns=&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2000&#x2F;svg&quot; role=&quot;img&quot;
     aria-label=&quot;A directed graph of block headers. Two finalized headers on the left, drawn solid, lead into a best chain of headers running left to right to the tip; two short unselected forks branch off the best chain, and older headers to the left are compacted.&quot;&gt;
  &lt;!-- older, compacted history --&gt;
  &lt;circle class=&quot;ah-mut&quot; cx=&quot;22&quot; cy=&quot;115&quot; r=&quot;3&quot;&#x2F;&gt;
  &lt;circle class=&quot;ah-mut&quot; cx=&quot;36&quot; cy=&quot;115&quot; r=&quot;3&quot;&#x2F;&gt;
  &lt;circle class=&quot;ah-mut&quot; cx=&quot;50&quot; cy=&quot;115&quot; r=&quot;3&quot;&#x2F;&gt;
  &lt;!-- best chain --&gt;
  &lt;path class=&quot;flow&quot; d=&quot;M80 115 H580&quot;&#x2F;&gt;
  &lt;!-- unselected forks --&gt;
  &lt;path class=&quot;link&quot; d=&quot;M280 115 L330 62&quot;&#x2F;&gt;
  &lt;path class=&quot;link&quot; d=&quot;M380 115 L432 168&quot;&#x2F;&gt;
  &lt;!-- finality boundary --&gt;
  &lt;path class=&quot;link-d&quot; d=&quot;M230 40 V196&quot;&#x2F;&gt;
  &lt;!-- finalized headers (solid) --&gt;
  &lt;circle class=&quot;acc-bg&quot; cx=&quot;80&quot;  cy=&quot;115&quot; r=&quot;13&quot;&#x2F;&gt;
  &lt;circle class=&quot;acc-bg&quot; cx=&quot;180&quot; cy=&quot;115&quot; r=&quot;13&quot;&#x2F;&gt;
  &lt;!-- tracked, non-finalized headers (outlined) --&gt;
  &lt;circle class=&quot;node-acc&quot; cx=&quot;280&quot; cy=&quot;115&quot; r=&quot;13&quot;&#x2F;&gt;
  &lt;circle class=&quot;node-acc&quot; cx=&quot;380&quot; cy=&quot;115&quot; r=&quot;13&quot;&#x2F;&gt;
  &lt;circle class=&quot;node-acc&quot; cx=&quot;480&quot; cy=&quot;115&quot; r=&quot;13&quot;&#x2F;&gt;
  &lt;circle class=&quot;node-acc&quot; cx=&quot;580&quot; cy=&quot;115&quot; r=&quot;13&quot;&#x2F;&gt;
  &lt;!-- forks (not selected) --&gt;
  &lt;circle class=&quot;node&quot; cx=&quot;330&quot; cy=&quot;62&quot;  r=&quot;12&quot;&#x2F;&gt;
  &lt;circle class=&quot;node&quot; cx=&quot;432&quot; cy=&quot;168&quot; r=&quot;12&quot;&#x2F;&gt;
  &lt;!-- labels --&gt;
  &lt;text class=&quot;mut t-sm&quot;   x=&quot;130&quot; y=&quot;158&quot; text-anchor=&quot;middle&quot;&gt;finalized&lt;&#x2F;text&gt;
  &lt;text class=&quot;kick&quot;       x=&quot;500&quot; y=&quot;90&quot;  text-anchor=&quot;middle&quot;&gt;BEST CHAIN&lt;&#x2F;text&gt;
  &lt;text class=&quot;acc b t-sm&quot; x=&quot;580&quot; y=&quot;158&quot; text-anchor=&quot;middle&quot;&gt;tip&lt;&#x2F;text&gt;
  &lt;text class=&quot;mut t-xs&quot;   x=&quot;330&quot; y=&quot;44&quot;  text-anchor=&quot;middle&quot;&gt;fork&lt;&#x2F;text&gt;
  &lt;text class=&quot;mut t-xs&quot;   x=&quot;432&quot; y=&quot;196&quot; text-anchor=&quot;middle&quot;&gt;fork&lt;&#x2F;text&gt;
  &lt;!-- caption --&gt;
  &lt;text class=&quot;mut t-sm&quot;   x=&quot;330&quot; y=&quot;216&quot; text-anchor=&quot;middle&quot;&gt;Every header is verified before it enters the DAG.&lt;&#x2F;text&gt;
&lt;&#x2F;svg&gt;
&lt;&#x2F;figure&gt;
&lt;p&gt;The engine separates the block body downloading logic between catch-up and chain tip, without duplicating consensus logic. The catch-up downloader optimizes for raw throughput, while the chain tip downloader balances throughput with latency. Both of them use the same verified header chain.&lt;&#x2F;p&gt;
&lt;p&gt;This architecture addresses many P2P security vulnerabilities &lt;em&gt;by design&lt;&#x2F;em&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Unverified headers and unauthenticated bodies cannot steer expensive work.&lt;&#x2F;li&gt;
&lt;li&gt;The engine is fork-aware and persists the header chain atomically across crashes.&lt;&#x2F;li&gt;
&lt;li&gt;All peer-supplied data is authenticated and tracked.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;As an example, the redesign could allow two Zakura peers to gossip blocks after proof-of-work verification but &lt;em&gt;before&lt;&#x2F;em&gt; every zk-SNARK proof finishes verifying, reducing orphan rates significantly.&lt;&#x2F;p&gt;
&lt;p&gt;The bounded header DAG makes block reorganization safer and the fork-choice rules explicit. This matters in the context of attacks like selfish mining, especially because Zcash&#x27;s difficulty adjustment algorithm is applied every block. We plan to harden these rules in later releases; if adopted, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zips.z.cash&#x2F;zip-0218&quot;&gt;ZIP-218&lt;&#x2F;a&gt;&#x27;s difficulty adjustment changes would reduce this risk.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;experimental-support&quot;&gt;Experimental Support&lt;&#x2F;h3&gt;
&lt;p&gt;The new engine is disabled by default for Mainnet. If you want to enable it, you must add&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;p2p_stack = &amp;quot;dual&amp;quot;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;to your Zakura configuration. It is enabled for Testnet by default.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;serving-light-clients-on-p2pv2&quot;&gt;Serving Light Clients (on P2Pv2)&lt;&#x2F;h2&gt;
&lt;p&gt;The verified-commitment-tree (VCT) fast sync in our P2Pv2 stack already allows a new node to reach the chain tip quickly. It achieves this by skipping historical node commitment trees. However, current &lt;code&gt;lightwalletd&lt;&#x2F;code&gt; architectures expect all full nodes to maintain historic frontiers and full subtrees. This meant that &lt;code&gt;lightwalletd&lt;&#x2F;code&gt; was unable to serve queries from P2Pv2-synced nodes. (As mentioned, this stack is still experimental and disabled by default.)&lt;&#x2F;p&gt;
&lt;p&gt;We consider this a design flaw of &lt;code&gt;lightwalletd&lt;&#x2F;code&gt; itself. Beyond some historic distance, it should be sufficient to maintain frontiers of full subtrees or a fixed block interval, such as every 10,000 blocks.&lt;&#x2F;p&gt;
&lt;p&gt;Nevertheless, we updated Zakura so that it could produce these exact queries for historic data without significant disk space costs. This was achieved with a combination of offline checkpoints and online recomputation: the node ships a small checkpointed list of tree frontiers at historic blocks, and to answer a query, we replay the block bodies from the nearest frontier and rebuild the tree.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to our new Common cryptography stack, this replay is very quick, which means &lt;code&gt;lightwalletd&lt;&#x2F;code&gt; operators should have seamless functionality from &lt;em&gt;all&lt;&#x2F;em&gt; Zakura archive nodes.&lt;&#x2F;p&gt;
&lt;p&gt;Speaking of Common...&lt;&#x2F;p&gt;
&lt;h2 id=&quot;running-on-common&quot;&gt;Running on Common&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Zakura Common&lt;&#x2F;strong&gt; speeds up the shielded cryptography a full node relies on. Verifying a shielded zk-SNARK is &lt;a href=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;announcements&#x2F;zakura-common&#x2F;&quot;&gt;between 4x and 8x faster&lt;&#x2F;a&gt;, and Sinsemilla hashing, which builds the Orchard and Ironwood note commitment trees, is more than 21x faster.&lt;&#x2F;p&gt;
&lt;p&gt;Nodes touch this cryptography almost everywhere they handle shielded transactions, and so this speedup shows up across the board:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Safer mempool operation.&lt;&#x2F;strong&gt; Nodes can validate mempool transactions at lower latency, which makes exposing a node&#x27;s mempool to the public much safer.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Verifying blocks and transactions.&lt;&#x2F;strong&gt; Every shielded proof the node checks, in each block it accepts and each transaction it relays, is verified faster.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Syncing the commitment tree.&lt;&#x2F;strong&gt; Building the Orchard note commitment tree during sync is about twice as fast, using our new &lt;a href=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;engineering&#x2F;position-weighted-sinsemilla&#x2F;&quot;&gt;weighted fixed-length Sinsemilla evaluator&lt;&#x2F;a&gt; and a one-time 3.75 MiB table. Ironwood&#x27;s tree uses the same code and inherits the speedup.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Building blocks.&lt;&#x2F;strong&gt; Miners assembling a block template with shielded transactions spend less time on the cryptography, so &lt;code&gt;getblocktemplate&lt;&#x2F;code&gt; returns sooner.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Relaying and propagating.&lt;&#x2F;strong&gt; Faster verification means transactions and blocks relay and propagate with less delay, helping to reduce orphan rates for miners.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;We also cache Sapling bundle verification now. These proofs and signatures are verified once when they arrive over the mempool and not re-verified when they appear in a block. This extends the &lt;a href=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;announcements&#x2F;zakura-1-2-0-orphan-rate&#x2F;#caching-proof-verification-results&quot;&gt;caching we shipped&lt;&#x2F;a&gt; in 1.2.0 to the last remaining shielded pool.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;rpc-changes&quot;&gt;RPC Changes&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;getchaintips&lt;&#x2F;code&gt; is answered natively.&lt;&#x2F;strong&gt; Operators used to send this call to the &lt;code&gt;zcashd&lt;&#x2F;code&gt; compatibility sidecar, where it scanned the whole block index under a global lock and could stall every other RPC for seconds. Zakura reads only the forks it is tracking, so the cost depends on how many live forks there are, not on the height of the chain. It reports only the tips that are still live (the best chain, the non-finalized forks, recently invalidated branches, and the selected header chain when some block bodies are missing), never &lt;code&gt;zcashd&lt;&#x2F;code&gt;&#x27;s &lt;code&gt;valid-headers&lt;&#x2F;code&gt; or &lt;code&gt;unknown&lt;&#x2F;code&gt; statuses, so the two nodes list different tips.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;getpeerinfo&lt;&#x2F;code&gt; reports peer software.&lt;&#x2F;strong&gt; The response now includes each peer&#x27;s advertised software identifier (&lt;code&gt;subver&lt;&#x2F;code&gt;) and protocol version. This was requested to better support explorers.&lt;&#x2F;li&gt;
&lt;li&gt;Several long-term deprecated endpoints have been removed. See the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&#x2F;blob&#x2F;v1.3.0&#x2F;CHANGELOG.md#removed&quot;&gt;changelog&lt;&#x2F;a&gt; for more details.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;p2p-network-service-discovery&quot;&gt;P2P Network Service Discovery&lt;&#x2F;h2&gt;
&lt;p&gt;Huge thanks to &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;x.com&#x2F;distractedm1nd&quot;&gt;@distractedm1nd&lt;&#x2F;a&gt; for contributing P2P service discovery into Zakura! This lets applications advertise the extra services they provide over the P2P network, so a wallet can discover nodes that serve additional functionality, such as PIR or &lt;code&gt;lightwalletd&lt;&#x2F;code&gt; interfaces.&lt;&#x2F;p&gt;
&lt;p&gt;We hope that future wallets can connect directly to the Zcash P2P network, instead of bundling every single service type into their software. Thus, we believe this is a step in the right direction.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;security&quot;&gt;Security&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A peer can no longer force a large allocation&lt;&#x2F;strong&gt; by declaring a near-maximal byte-vector length in a short message. The allocation is bounded before the message is rejected.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Malformed headers are rejected before hashing.&lt;&#x2F;strong&gt; Block and checkpoint verification now reject an invalid header version or an unrepresentable timestamp before computing the header&#x27;s hash. This closes a gap for in-memory headers, such as block proposals, that never pass through the parser.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Dependency hygiene.&lt;&#x2F;strong&gt; Dependencies were updated to address published advisories, and many were removed outright to reduce supply-chain surface.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;other-operator-facing-changes&quot;&gt;Other operator-facing changes&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Expired RPC TLS certificates are flagged at startup.&lt;&#x2F;strong&gt; &lt;code&gt;zakurad&lt;&#x2F;code&gt; now logs a warning naming the certificate file and the date it fails on, instead of opening the listener silently and failing client handshakes later.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Bounded &lt;code&gt;&#x2F;metrics&lt;&#x2F;code&gt; on public listeners.&lt;&#x2F;strong&gt; Network Prometheus counters are no longer labeled by peer address, so their cardinality stays bounded on long-lived public listeners.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Faster block verification.&lt;&#x2F;strong&gt; Contextual block verification drops redundant UTXO copies and shares immutable UTXO maps, and transaction-verifier and mempool reads no longer queue behind the serialized state write buffer.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Misconfigured networks fail at load time.&lt;&#x2F;strong&gt; Custom-network parameters that could panic block validation at a later height, such as overflowing funding-stream numerators or non-P2SH funding and lockbox addresses, are now rejected when the configuration is read.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Removed the unsupported &lt;code&gt;copy-state&lt;&#x2F;code&gt; debugging command.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;crate-consumers&quot;&gt;Crate Consumers&lt;&#x2F;h2&gt;
&lt;p&gt;If you build against Zakura&#x27;s published crates, note two changes. The dependency graph now resolves the Zakura cryptography crates in place of their upstream equivalents, and &lt;code&gt;zakura-rpc&lt;&#x2F;code&gt; removed a set of deprecated type aliases and constructors. RPC endpoints and wire formats are unchanged; the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&#x2F;blob&#x2F;v1.3.0&#x2F;CHANGELOG.md&quot;&gt;changelog&lt;&#x2F;a&gt; lists the exact replacements.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;end-of-support&quot;&gt;End of Support&lt;&#x2F;h2&gt;
&lt;p&gt;This release shortens the end-of-support window from 40 to 31 days. Mainnet &lt;code&gt;zakurad&lt;&#x2F;code&gt; nodes running 1.3.0 halt at height &lt;strong&gt;3,501,339&lt;&#x2F;strong&gt; (estimated &lt;strong&gt;2026-09-30&lt;&#x2F;strong&gt;); upgrade warnings begin three days earlier.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;updating&quot;&gt;Updating&lt;&#x2F;h2&gt;
&lt;p&gt;You can update using our &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&#x2F;releases&#x2F;tag&#x2F;v1.3.0&quot;&gt;signed release binaries&lt;&#x2F;a&gt; or by upgrading the &lt;code&gt;zakura&lt;&#x2F;code&gt; crate to &lt;code&gt;1.3.0&lt;&#x2F;code&gt; via Cargo. See the &lt;a href=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;download&#x2F;&quot;&gt;download page&lt;&#x2F;a&gt; for installation and verification instructions.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Zakura Common: High Performance Zcash Cryptography</title>
        <published>2026-08-29T00:00:00+00:00</published>
        <updated>2026-08-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Zakura Developers
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zakura.com/announcements/zakura-common/"/>
        <id>https://zakura.com/announcements/zakura-common/</id>
        
        <content type="html" xml:base="https://zakura.com/announcements/zakura-common/">&lt;figure class=&quot;article-hero&quot;&gt;
  &lt;img class=&quot;hero-day&quot; src=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;images&#x2F;zakura-common-art-v2.jpg&quot; width=&quot;2400&quot; height=&quot;1260&quot; alt=&quot;Technical drawing of the zakura flower inked on gridded paper: five outlined petals over construction circles and dashed radial guides, golden-ratio dimension lines labeled 61.8, 100, and 161.8, and a pink five-spoke stamen, with the zakura brush wordmark above the word COMMON to the right.&quot;&gt;
  &lt;img class=&quot;hero-night&quot; src=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;images&#x2F;zakura-common-art-dark-v2.jpg&quot; width=&quot;2400&quot; height=&quot;1260&quot; alt=&quot;Blueprint of the zakura flower in white line art on a dark gridded field: five outlined petals over construction circles and dashed radial guides, golden-ratio dimension lines labeled 61.8, 100, and 161.8, and a pink five-spoke stamen, with the zakura brush wordmark above the word COMMON to the right.&quot;&gt;
&lt;&#x2F;figure&gt;
&lt;p&gt;Our team is excited to release &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;common&quot;&gt;&lt;strong&gt;Zakura Common&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;, a large collection of cryptography and protocol libraries for the Zcash ecosystem. These libraries are being developed to accelerate our full node Zakura, and to improve wallet performance for everyday users.&lt;&#x2F;p&gt;
&lt;p&gt;The optimizations in this release are among the most significant in Zcash&#x27;s history. Our benchmark hardware reports:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Mobile proof generation is more than &lt;strong&gt;14x faster.&lt;&#x2F;strong&gt; (Desktop is more than 5x faster.)&lt;&#x2F;li&gt;
&lt;li&gt;Sinsemilla hashing is more than &lt;strong&gt;21x faster.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Trial decryption is more than &lt;strong&gt;1.5x faster.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;zk-SNARK verification is between &lt;strong&gt;4x and 8x faster.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;In discussions about scaling Zcash we often mention goals like sub-second confirmation times. But all users today spend over three seconds just waiting for their wallets to create a transaction. Zakura Common&#x27;s highly optimized cryptography allows a user to instead wait less than 200ms in many cases — practically imperceptible.&lt;&#x2F;p&gt;
&lt;p&gt;Wallets using this new stack will sync much faster. Full nodes running Zakura additionally benefit from reduced orphan rates and faster transaction propagation; our network can already handle the 25-second block times proposed for NU7, but with these optimizations we can go even further.&lt;&#x2F;p&gt;
&lt;p&gt;None of our improvements require a network upgrade and all of them are publicly available today, under the standard MIT &#x2F; Apache 2.0 dual license. &lt;strong&gt;Zakura has completely switched to this new stack in its upcoming &lt;code&gt;1.3.0&lt;&#x2F;code&gt; release, and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tachyon.z.cash&#x2F;&quot;&gt;Tachyon&lt;&#x2F;a&gt; has too.&lt;&#x2F;strong&gt; We&#x27;ll be writing about this in separate announcements.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zakura-common-1-0&quot;&gt;Zakura Common 1.0&lt;&#x2F;h2&gt;
&lt;p&gt;The root of our work is contained in the &lt;strong&gt;Zakura Common&lt;&#x2F;strong&gt; monorepo, &lt;strong&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;common&quot;&gt;&lt;code&gt;zakura-core&#x2F;common&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt;, which contains modified forks of &lt;code&gt;librustzcash&lt;&#x2F;code&gt; and several other crates as well.&lt;&#x2F;p&gt;
&lt;p&gt;In some cases, our performance improvements derive from well-known techniques in the broader cryptography and compiler worlds, but in others they stem from novel ideas our team &lt;a href=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;engineering&#x2F;&quot;&gt;has developed&lt;&#x2F;a&gt; just for Zcash.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;These results aren&#x27;t all from one big optimization.&lt;&#x2F;strong&gt; Each headline component did substantially improve. But Amdahl&#x27;s law is real. Once you optimize one component, some other serial process becomes a bottleneck. Much of our effort was spent on constant factor improvements to things that would normally be considered asymptotically efficient.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;zakura-core-wallet-libraries&quot;&gt;&lt;code&gt;zakura-core&#x2F;wallet-libraries&lt;&#x2F;code&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;We are also developing a separate &lt;strong&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;wallet-libraries&quot;&gt;&lt;code&gt;zakura-core&#x2F;wallet-libraries&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt; repository that contains Rust crates useful for shielded wallets or other integrations. Zakura, being a full node, does not depend on these libraries.&lt;&#x2F;p&gt;
&lt;p&gt;These libraries integrate directly with our Zakura Common stack, and thus inherit many of the performance benefits we&#x27;ve discussed. Longer term, they will contain our &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Private_information_retrieval&quot;&gt;PIR&lt;&#x2F;a&gt; work.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;next-steps&quot;&gt;Next Steps&lt;&#x2F;h2&gt;
&lt;p&gt;Zakura Common speeds up full nodes and wallets significantly compared to the legacy &lt;code&gt;librustzcash&lt;&#x2F;code&gt; stack. We&#x27;re inviting wallets to switch to our cryptography libraries so that they can enjoy the performance benefits on today&#x27;s Zcash network.&lt;&#x2F;p&gt;
&lt;p&gt;As mentioned, Zakura&#x27;s &lt;code&gt;1.3.0&lt;&#x2F;code&gt; release is forthcoming and will switch to Zakura Common.
We&#x27;ll be blogging about that soon.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Release: Zakura 1.2.0, 87% faster full block processing</title>
        <published>2026-08-14T00:00:00+00:00</published>
        <updated>2026-08-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Zakura Developers
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zakura.com/announcements/zakura-1-2-0-orphan-rate/"/>
        <id>https://zakura.com/announcements/zakura-1-2-0-orphan-rate/</id>
        
        <content type="html" xml:base="https://zakura.com/announcements/zakura-1-2-0-orphan-rate/">&lt;p&gt;We have released &lt;strong&gt;Zakura &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&#x2F;releases&#x2F;tag&#x2F;v1.2.0&quot;&gt;&lt;code&gt;1.2.0&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt;, a performance release. Since &lt;code&gt;zcashd&lt;&#x2F;code&gt; reached end of support, the network has seen elevated orphan rates. This release removes the largest cause we found: nodes were performing redundant proof verification during block acceptance. On full Ironwood blocks with regular transactions, block processing time on our benchmark machines drops from 2.5 seconds to 0.32 seconds. For median block times, that is nearly a 5% reduction in wasted work.&lt;&#x2F;p&gt;
&lt;p&gt;We recommend that all node operators update. Mining pools benefit the most: the work removed here directly affects miner revenue.&lt;&#x2F;p&gt;
&lt;p&gt;This release also adds streaming block-range backfill to the indexer gRPC service (thanks to &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;maxdesalle&quot;&gt;@maxdesalle&lt;&#x2F;a&gt;) and hardens the indexer RPC listeners.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;evidence-something-was-wrong-on-the-network&quot;&gt;Evidence something was wrong on the network&lt;&#x2F;h2&gt;
&lt;p&gt;We &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;x.com&#x2F;evansforbes&#x2F;status&#x2F;2051350281967870267&quot;&gt;profiled orphan rates on Zebra 4.3.0&lt;&#x2F;a&gt; months ago. Mainnet orphan rates were around 0.1%, and our simulated, far more decentralized testnet was around 1%.&lt;&#x2F;p&gt;
&lt;p&gt;Since &lt;code&gt;zcashd&lt;&#x2F;code&gt; reached end of support, there has been evidence of repeated performance regressions. Outlier block times increased, with far more 10+ minute blocks than statistically expected, and on July 31st the network&#x27;s orphan rate reached nearly 1%, far above the old 0.1% to 0.2% baseline. Our first fixes patched peer connectivity after the upgrade and removed disconnects on slow blocks, which appears to have reduced the initial spikes of 10+ minute blocks. Even so, the baseline orphan rate settled around 0.3%, with spikes to 1% on days with many quarter-filled blocks. Zakura treats orphan rate as a core performance metric, so we kept investigating.&lt;&#x2F;p&gt;
&lt;p&gt;Re-running the same analysis now, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;x.com&#x2F;evansforbes&quot;&gt;Evan&lt;&#x2F;a&gt; saw orphan rates on Zakura of 3.2% with 75-second blocks and 42% with 20-second blocks.&lt;&#x2F;p&gt;
&lt;p&gt;Every proof was being verified twice: once when the transaction arrived over mempool gossip, and again when it arrived inside the block that included it. Measured on one machine with matched block sizes, a block&#x27;s Halo2 batch weights summed to exactly the block&#x27;s Orchard action count plus the mempool&#x27;s. This slowed block processing, and with it the miner&#x27;s switch to the new block.&lt;&#x2F;p&gt;
&lt;p&gt;Zebra used to avoid this duplication with a proof-check cache, and our distributed tests traced the regression to that cache&#x27;s removal in Zebra 4.3.1 (&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ZcashFoundation&#x2F;zebra&#x2F;pull&#x2F;10494&quot;&gt;Zebra #10494&lt;&#x2F;a&gt;) as part of a critical &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ZcashFoundation&#x2F;zebra&#x2F;security&#x2F;advisories&#x2F;GHSA-3vmh-33xr-9cqh&quot;&gt;security fix&lt;&#x2F;a&gt;: the old cache stored the verdict &lt;code&gt;valid(transaction, height, block time, spent outputs)&lt;&#x2F;code&gt; under a key that did not determine that proposition.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;caching-proof-verification-results&quot;&gt;Caching proof verification results&lt;&#x2F;h2&gt;
&lt;p&gt;Zakura &lt;code&gt;1.2.0&lt;&#x2F;code&gt; caches the stateless proof verification itself rather than the verdict. Verifying a single Halo2 item against a verifying key is a pure function of its inputs, so a cache hit is bit-identical to the computation it replaces. &lt;strong&gt;Nothing else is skipped.&lt;&#x2F;strong&gt; On a cache hit, transaction verification still runs end to end at the block&#x27;s own height, with the block&#x27;s time and the block&#x27;s spent outputs. The cache key commits to the full transaction, so a malleated transaction cannot reuse a cache hit.&lt;&#x2F;p&gt;
&lt;p&gt;The flow now looks like this:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;text&quot; class=&quot;language-text &quot;&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;Before: receive block -&amp;gt; verify every proof again -&amp;gt; finish block checks -&amp;gt; update template

After:  verify each proof once, in the mempool
                           |
        receive block -&amp;gt; reuse the proof results -&amp;gt; run every block check -&amp;gt; update template
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The change is &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&#x2F;pull&#x2F;597&quot;&gt;Zakura #597&lt;&#x2F;a&gt;. It moves the duplicated work out of the critical path between receiving a block and updating the miner&#x27;s block template.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;benchmarking-the-update&quot;&gt;Benchmarking the update&lt;&#x2F;h2&gt;
&lt;p&gt;In our globally distributed full block experiments, this duplication was the single largest contributor to the orphan rates we were seeing. These runs use an internal testnet of 77 to 80 nodes with CPU miners and deliberately compressed block-time bands, so the absolute numbers describe that environment, not Mainnet. The runs also include fixes that keep CPU miners from finishing a solution on a stale block.&lt;&#x2F;p&gt;
&lt;p&gt;In the 25-second band, the orphan rate fell from roughly 30% to about 3.6%. In the 75-second band, we measured 1.57%.&lt;&#x2F;p&gt;
&lt;p&gt;That puts 25-second blocks back in a safe range. Both block propagation and CPU time can still improve, and more CPU improvements are coming next week.&lt;&#x2F;p&gt;
&lt;p&gt;Operators with dashboards can watch the cache directly through the new &lt;code&gt;zakura.consensus.halo2.cache.hit&lt;&#x2F;code&gt;, &lt;code&gt;miss&lt;&#x2F;code&gt;, &lt;code&gt;insert&lt;&#x2F;code&gt;, and &lt;code&gt;evict&lt;&#x2F;code&gt; counters and the &lt;code&gt;zakura.consensus.halo2.cache.size&lt;&#x2F;code&gt; gauge.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;indexer-block-range-streaming&quot;&gt;Indexer block-range streaming&lt;&#x2F;h2&gt;
&lt;p&gt;Indexers backfilling history through the indexer gRPC service previously paid one unary request per block, and each &lt;code&gt;GetBlock&lt;&#x2F;code&gt; read the block&#x27;s raw bytes from storage, fully deserialized every transaction, then re-serialized the block back to the bytes it started from.&lt;&#x2F;p&gt;
&lt;p&gt;Zakura &lt;code&gt;1.2.0&lt;&#x2F;code&gt; adds &lt;code&gt;GetBlockRange&lt;&#x2F;code&gt;, proposed and contributed by &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;maxdesalle&quot;&gt;@maxdesalle&lt;&#x2F;a&gt;. It streams a height range of finalized blocks in ascending order and serves them from the stored raw bytes, without that round trip. The stream covers only blocks committed to the finalized state and ends cleanly at the finalized tip, matching the existing contract for finalized history. Serving block ranges requires building with the &lt;code&gt;indexer&lt;&#x2F;code&gt; compile-time feature.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;security&quot;&gt;Security&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Indexer RPC listeners are hardened.&lt;&#x2F;strong&gt; Mutual TLS is now required for indexer RPC listeners on non-loopback addresses, indexer connections and streams are bounded, and blocks without a coinbase height are rejected before state preparation.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Protocol services enforce their frame caps.&lt;&#x2F;strong&gt; Zakura protocol services now enforce their declared frame caps for inbound and outbound application frames, rather than declaring them and accepting larger ones.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;other-improvements&quot;&gt;Other improvements&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Chain work is stored at its exact width.&lt;&#x2F;strong&gt; Block work and cumulative chain work are now kept at their full 256-bit width, so valid hard targets are representable instead of failing conversion. Fork choice and the committed chain history root are unchanged for Mainnet and Testnet, and no database migration is required.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Maximum block time activates per network.&lt;&#x2F;strong&gt; The maximum-block-time activation height is now a per-network parameter. Configured networks and Regtest activate the MTP-plus-90-minutes rule at height 2 instead of inheriting the public Testnet height, generated local networks activate it after their seed chain, and Regtest accepts a &lt;code&gt;max_block_time_start_height&lt;&#x2F;code&gt; config field. Mainnet and public Testnet behavior is unchanged.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;end-of-support-halt&quot;&gt;End-of-support halt&lt;&#x2F;h2&gt;
&lt;p&gt;Zakura &lt;code&gt;1.2.0&lt;&#x2F;code&gt; keeps the 40-day support window introduced in &lt;code&gt;1.1.1&lt;&#x2F;code&gt;. Mainnet nodes running this release halt at height &lt;strong&gt;3,495,707&lt;&#x2F;strong&gt; (~2026-09-23). Upgrade warnings keep their three-day lead and begin ~2026-09-20.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;updating&quot;&gt;Updating&lt;&#x2F;h2&gt;
&lt;p&gt;You can update using our &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&#x2F;releases&#x2F;tag&#x2F;v1.2.0&quot;&gt;signed release binaries&lt;&#x2F;a&gt; or by upgrading the &lt;code&gt;zakura&lt;&#x2F;code&gt; crate to &lt;code&gt;1.2.0&lt;&#x2F;code&gt; via Cargo. See the &lt;a href=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;download&#x2F;&quot;&gt;download page&lt;&#x2F;a&gt; for installation and verification instructions.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Release: Zakura 1.1.1</title>
        <published>2026-08-10T00:00:00+00:00</published>
        <updated>2026-08-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Zakura Developers
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zakura.com/announcements/zakura-1-1-1/"/>
        <id>https://zakura.com/announcements/zakura-1-1-1/</id>
        
        <content type="html" xml:base="https://zakura.com/announcements/zakura-1-1-1/">&lt;p&gt;We have released &lt;strong&gt;Zakura &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&#x2F;releases&#x2F;tag&#x2F;v1.1.1&quot;&gt;&lt;code&gt;1.1.1&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt;, a security and performance release. Last week we published &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&#x2F;blob&#x2F;main&#x2F;CHANGELOG.md#110---2026-08-05&quot;&gt;&lt;code&gt;1.1.0&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; but did not blog about it at the time; this post discusses all of the changes.&lt;&#x2F;p&gt;
&lt;p&gt;We recommend that all node operators update immediately. This release closes block-propagation attacks that could eclipse a node during sync, let a peer repeatedly gossip invalid blocks without being penalized, or leave a mining backend working from a stale chain tip. These fixes have been introduced in coordination with Zebra.&lt;&#x2F;p&gt;
&lt;p&gt;In addition, this release provides substantial speedups for indexer consumers (thanks to &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;maxdesalle&quot;&gt;@maxdesalle&lt;&#x2F;a&gt;), improves nodes behind NATs network connectivity, and substantially extends the end-of-support window. Further, RPC changes now allow operators to more easily learn about EOS halt dates and supported block heights.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;security&quot;&gt;Security&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ZcashFoundation&#x2F;zebra&#x2F;security&#x2F;advisories&#x2F;GHSA-qhr3-cvch-5fh2&quot;&gt;Far-ahead blocks no longer get an honest peer banned.&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt; A peer was previously banned for serving a block whose height exceeded the sync lookahead limit. The ban was assigned to the peer that answered the block request, even though the far-ahead height came from whichever peer supplied the hash in an earlier &lt;code&gt;FindBlocks&lt;&#x2F;code&gt; response—usually a different peer. An attacker could exploit that mismatch to get honest peers banned and eclipse a node during sync. Such blocks are still dropped without restarting sync. Peers that serve blocks with no valid height or that fail consensus verification are still scored, without blaming peers for invalid ancestors. The Zakura team reported this issue.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Peer-controlled singleton responses no longer stall near-tip sync.&lt;&#x2F;strong&gt; Zakura previously discarded a one-block &lt;code&gt;FindBlocks&lt;&#x2F;code&gt; response while protecting against a legacy &lt;code&gt;zcashd&lt;&#x2F;code&gt; quirk that can append an unrelated hash. A peer could therefore suppress the node&#x27;s only unknown block, producing a zero-length sync sample that falsely made the node appear close to tip and could let &lt;code&gt;&#x2F;ready&lt;&#x2F;code&gt; report success while it remained behind. The only unknown hash in a qualifying short response is now downloaded, allowing the node to keep advancing. Maakai123 reported this issue in &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ZcashFoundation&#x2F;zebra&#x2F;issues&#x2F;10603&quot;&gt;Zebra #10603&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ZcashFoundation&#x2F;zebra&#x2F;security&#x2F;advisories&#x2F;GHSA-8hh2-hrf2-cqf4&quot;&gt;Peers that gossip invalid blocks are scored and banned.&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt; Zakura inherited security bugs that allowed a peer to keep supplying invalid blocks over the same connection. Inbound cleanup now recognizes the router&#x27;s rejections and bans the responsible peer. The Zakura team reported this issue.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ZcashFoundation&#x2F;zebra&#x2F;security&#x2F;advisories&#x2F;GHSA-g95h-hw6g-pvgv&quot;&gt;Coinbase-height malleation can no longer poison the newest block.&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt; A V5 or later coinbase &lt;code&gt;scriptSig&lt;&#x2F;code&gt; is authorizing data and is therefore excluded from the block hash. A peer could rewrite the height in an otherwise canonical block body and still answer a request for that hash. When the block built on Zakura&#x27;s own chain tip but claimed a height other than one above the tip, the poisoned body was discarded as a benign old block—unattributed, unscored, and not requeued. That delayed the newest block until the next discovery round and left a mining backend issuing work on an obsolete tip. The height check now runs on both block-download paths, sync and block gossip. Each path scores the supplying peer for a ban and immediately re-requests the hash under its own bounded retry budget. This issue was reported by Sangsoo at Ottersec as part of a security audit commissioned by the Zakura team.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Logging is hardened against escape attacks.&lt;&#x2F;strong&gt; Zakura now handles untrusted log content more defensively across peer-message logging and operator filtering tools.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Dependency hygiene.&lt;&#x2F;strong&gt; The unmaintained &lt;code&gt;structopt&lt;&#x2F;code&gt; (RUSTSEC-2022-0104) and &lt;code&gt;rustls-pemfile&lt;&#x2F;code&gt; (RUSTSEC-2025-0134) dependencies and their advisory-flagged transitive trees are removed, and CI now verifies the &lt;code&gt;doctl&lt;&#x2F;code&gt; and &lt;code&gt;rustup-init&lt;&#x2F;code&gt; binaries it downloads against pinned checksums before executing them.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Misbehavior scores apply promptly.&lt;&#x2F;strong&gt; Batched peer misbehavior scores reach the address book every five seconds instead of every 30, so threshold bans become visible to the listener and peer set faster. We aim to make this instant with more testing.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;rpc-parity-for-pruned-nodes&quot;&gt;RPC parity for pruned nodes&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;getblockchaininfo&lt;&#x2F;code&gt; now reports &lt;code&gt;pruneheight&lt;&#x2F;code&gt;,&lt;&#x2F;strong&gt; the lowest height at and above which every block body is retained. As in &lt;code&gt;zcashd&lt;&#x2F;code&gt;, the field is only present when &lt;code&gt;pruned&lt;&#x2F;code&gt; is true. Zakura prunes raw transaction data rather than whole blocks, so blocks below this height keep their headers, transaction IDs, and consensus state, and the genesis block is never pruned.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;The &lt;code&gt;pruned&lt;&#x2F;code&gt; flag now reports configuration, not history.&lt;&#x2F;strong&gt; A node configured with &lt;code&gt;storage_mode.pruned&lt;&#x2F;code&gt; previously reported &lt;code&gt;pruned: false&lt;&#x2F;code&gt; until it first deleted block data, which took at least 10,000 blocks on Mainnet. As in &lt;code&gt;zcashd&lt;&#x2F;code&gt;, the field now reports whether blocks are subject to pruning.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;New &lt;code&gt;getdeprecationinfo&lt;&#x2F;code&gt; RPC.&lt;&#x2F;strong&gt; It reports Zakura&#x27;s Mainnet end-of-support height and an estimated halt time with a 24-hour safety margin. When the chain tip is unavailable, the estimate starts from the latest network checkpoint.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Operators with dashboards keyed on the read-request metric label &lt;code&gt;is_pruned&lt;&#x2F;code&gt; should note it is now &lt;code&gt;pruning_info&lt;&#x2F;code&gt;, since the request also reports the prune height.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;peer-connectivity&quot;&gt;Peer connectivity&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The default connection budget is rebalanced.&lt;&#x2F;strong&gt; The inbound connection limit rises from 100 to 300 while the outbound limit drops from 300 to 150. This is important for ensuring good connectivity of the p2p network and allowing new nodes to enter.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Outbound replenishment is restored to the configured peer set size.&lt;&#x2F;strong&gt; The crawler&#x27;s dial budget targeted a share of the outbound connection limit, in order to not saturate all nodes inbound limits. Now that we&#x27;ve fixed the inbound&#x2F;outbound ratio, we now target the crawler to filling 80% of the outbound budget.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Restarted nodes find peers faster.&lt;&#x2F;strong&gt; The peer address disk cache grows from 75 to 300 addresses, and the first cache write is retried every 20 seconds instead of waiting the full 5-minute update interval, so a cold-started node caches its peers soon after finding them.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Native discovery is more careful about what it shares.&lt;&#x2F;strong&gt; &lt;code&gt;zakurad&lt;&#x2F;code&gt; now shares a discovery record with other peers only after confirming that record&#x27;s owner directly, and answers each peer&#x27;s &lt;code&gt;GetPeers&lt;&#x2F;code&gt; requests from a bounded per-peer record set that is stable for a ten-minute window—so repeated requests, however they vary their filters, no longer walk further through the local discovery book. Records learned second-hand still serve as local dial hints, so bootstrap reach is unchanged.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;correct-answers-from-fast-synced-nodes&quot;&gt;Correct answers from fast-synced nodes&lt;&#x2F;h2&gt;
&lt;p&gt;This release fixes RPC behavior that could mislead wallets talking to a node bootstrapped with verified-commitment-trees (VCT) fast sync:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;z_gettreestate&lt;&#x2F;code&gt; and &lt;code&gt;z_getsubtreesbyindex&lt;&#x2F;code&gt; no longer fabricate emptiness.&lt;&#x2F;strong&gt; For heights a fast-synced node has no data for, &lt;code&gt;z_gettreestate&lt;&#x2F;code&gt; returned a JSON &lt;code&gt;null&lt;&#x2F;code&gt; treestate and &lt;code&gt;z_getsubtreesbyindex&lt;&#x2F;code&gt; an empty list. Clients following the lightwalletd contract read an absent treestate as the &lt;em&gt;empty&lt;&#x2F;em&gt; tree, so a wallet could derive a birthday anchor asserting an empty commitment tree deep in the chain with no error raised. Both now return a typed archive-mode error, and verbose &lt;code&gt;getblock&lt;&#x2F;code&gt;&#x2F;&lt;code&gt;getblockheader&lt;&#x2F;code&gt; preserve that explanation. Re-indexing the relevant data, along with a better LWD contract are planned for subsequent releases.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Databases from the original VCT fast sync are rejected at startup.&lt;&#x2F;strong&gt; A Mainnet database written by the original VCT fast sync (below database format version 28.0.1) is missing the historical Sprout anchors needed to verify JoinSplits that spend a historical Sprout root. The in-place repair that used to backfill them has been removed; discard the database and resync, or restore a snapshot taken with a current release.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;The 71 MB embedded repair artifact is gone.&lt;&#x2F;strong&gt; The &lt;code&gt;zakurad validate-vct-sprout-history&lt;&#x2F;code&gt; subcommand and the embedded artifact it audited no longer apply due to EOS heights, guaranteeing every affected user has a patched upgrade.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;New historical-treestate audit tooling.&lt;&#x2F;strong&gt; The &lt;code&gt;zakurad audit-historical-treestates&lt;&#x2F;code&gt; command opens an existing state database read-only and inventories the authenticated roots and anchor frontiers needed to reconstruct the Sapling, Orchard, and Ironwood note commitment trees omitted by VCT fast sync. &lt;code&gt;--scan-block-bodies&lt;&#x2F;code&gt; checks that the whole absent range is retained. With &lt;code&gt;--walk&lt;&#x2F;code&gt;, the command instead validates the bodies it replays, derives trees across the requested range, and checks every sampled result against the authenticated root already stored for that height; &lt;code&gt;--verify-subtrees&lt;&#x2F;code&gt; compares replayed subtree roots with stored rows above the last checkpoint. This is audit and performance-measurement tooling, not an in-place database repair.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Read-only tools can inspect older databases.&lt;&#x2F;strong&gt; A read-only RocksDB secondary no longer tries to open column families that an older database does not have, so audit and inspection commands can examine it without first upgrading or modifying it.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The audit command does not yet restore historical-tree RPC serving. In the range where a VCT fast-synced database has no per-height trees, the RPCs continue to return the typed archive-mode errors described above. Reconstructing trees also requires retained block bodies, so a pruned database cannot derive trees below its retention height.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;other-fixes&quot;&gt;Other fixes&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Indexer gRPC subscriptions tolerate slow consumers.&lt;&#x2F;strong&gt; Tip and mempool subscriptions now apply backpressure with a 60-second send timeout instead of being dropped the moment their buffer fills, so a briefly slow consumer no longer triggers rapid re-subscribe cycles.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;A queued-block index leak is fixed.&lt;&#x2F;strong&gt; Dequeuing one fork sibling un-indexed another block at the same height, preventing it from being pruned and leaking entries in the block queue and its known-UTXO cache.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Mined-block broadcasts no longer wait for disconnected peers.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;The P2P user agent is consistent.&lt;&#x2F;strong&gt; Every transport mode now advertises the &lt;code&gt;zakurad&lt;&#x2F;code&gt; release version without an internal networking crate version.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Higher ZIP 317 block-production weight cap.&lt;&#x2F;strong&gt; The cap rises from 4 to 10, allowing high-fee transactions to receive up to ten times the conventional weight during block-template transaction selection. This changes miners&#x27; transaction ranking, not transaction or block consensus validity.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;building-from-source&quot;&gt;Building from source&lt;&#x2F;h2&gt;
&lt;p&gt;Zakura now builds with GCC 15&#x2F;16 without the &lt;code&gt;CXXFLAGS=&quot;-include cstdint&quot;&lt;&#x2F;code&gt; workaround, via RocksDB 10.4.2 (&lt;code&gt;rocksdb&lt;&#x2F;code&gt; 0.24). The bundled &lt;code&gt;librocksdb-sys&lt;&#x2F;code&gt; now always runs &lt;code&gt;bindgen&lt;&#x2F;code&gt;, so &lt;strong&gt;&lt;code&gt;libclang&lt;&#x2F;code&gt; is required at build time&lt;&#x2F;strong&gt; (in addition to &lt;code&gt;protoc&lt;&#x2F;code&gt; and a C++ compiler) even when linking a system RocksDB. Install &lt;code&gt;libclang-dev&lt;&#x2F;code&gt; (Debian&#x2F;Ubuntu), &lt;code&gt;clang&lt;&#x2F;code&gt; (Arch), or the equivalent for your platform.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;end-of-support-halt&quot;&gt;End-of-support halt&lt;&#x2F;h2&gt;
&lt;p&gt;The end-of-support window is extended from 18 to 40 days after the estimated release height. Mainnet nodes running this release halt at height &lt;strong&gt;3,484,507&lt;&#x2F;strong&gt; (~2026-09-15) instead of ~2026-08-24. Upgrade warnings keep their three-day lead and begin ~2026-09-12.&lt;&#x2F;p&gt;
&lt;p&gt;Next EOS update will be in our v1.2.0 release, expected later this week.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;updating&quot;&gt;Updating&lt;&#x2F;h2&gt;
&lt;p&gt;You can update using our &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&#x2F;releases&#x2F;tag&#x2F;v1.1.1&quot;&gt;signed release binaries&lt;&#x2F;a&gt; or by upgrading the &lt;code&gt;zakura&lt;&#x2F;code&gt; crate to &lt;code&gt;1.1.1&lt;&#x2F;code&gt; via Cargo. See the &lt;a href=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;download&#x2F;&quot;&gt;download page&lt;&#x2F;a&gt; for installation and verification instructions.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Release: Zakura 1.0.5</title>
        <published>2026-07-28T00:00:00+00:00</published>
        <updated>2026-07-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Zakura Developers
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zakura.com/announcements/zakura-1-0-5/"/>
        <id>https://zakura.com/announcements/zakura-1-0-5/</id>
        
        <content type="html" xml:base="https://zakura.com/announcements/zakura-1-0-5/">&lt;p&gt;We have released &lt;strong&gt;Zakura &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&#x2F;releases&#x2F;tag&#x2F;v1.0.5&quot;&gt;&lt;code&gt;1.0.5&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt;, a stability and performance release. It significantly improves restoration of p2p connectivity after long blocks, fixes two failures that could prevent a fresh node from syncing, improves peer discovery, and significantly reduces CPU overhead in address-book and metrics processing.&lt;&#x2F;p&gt;
&lt;p&gt;We recommend that all node operators update.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;This release also mitigates an issue discovered yesterday on Testnet that affects both Zakura and Zebra.&lt;&#x2F;strong&gt; We identified a bug that prevents nodes from reconnecting to honest peers after a large chain reorganization. After discussion with the Zcash Foundation, both of our teams agreed to fix the issue in parallel releases ahead of the NU6.3 network upgrade.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;peer-discovery-and-recovery&quot;&gt;Peer discovery and recovery&lt;&#x2F;h2&gt;
&lt;p&gt;Zakura&#x27;s default P2P stack now recovers more deliberately when its peer set becomes depleted:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Periodic crawls replenish outbound connections.&lt;&#x2F;strong&gt; When fewer than 27% of the configured outbound connection slots are active, Zakura queues enough connection attempts to reach that target while still respecting the configured hard limit.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Liveness stall detection waits longer.&lt;&#x2F;strong&gt; The threshold at which stall tracking begins—and peers can consequently be disconnected—rises from Zebra&#x27;s 6 minutes to 20 minutes. We believe this will help reduce the frequency of very high-latency Mainnet blocks.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Peer discovery returns a larger sample.&lt;&#x2F;strong&gt; Refreshed &lt;code&gt;GetAddr&lt;&#x2F;code&gt; responses now contain approximately half of the eligible address book instead of one quarter, still capped at 1,000 addresses and protected by the existing ten-minute response cache.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Bans remove every address for the affected IP.&lt;&#x2F;strong&gt; A peer can advertise multiple ports for one canonical IP. Banning that peer now removes every matching address-book entry so stale aliases cannot interfere with later connection management.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;fresh-sync-reliability&quot;&gt;Fresh-sync reliability&lt;&#x2F;h2&gt;
&lt;p&gt;This release fixes two independent failures in the path from genesis to the network tip:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Verified-commitment-tree fast sync completes its handoff.&lt;&#x2F;strong&gt; At the exact handoff height, the header-authentication lane cannot produce a database row for the Sapling, Orchard, and Ironwood roots. The commit path now uses the reviewed roots embedded in the release at that height. Heights below the handoff still require authenticated database roots, and heights above it cannot use the embedded data.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Legacy genesis sync no longer livelocks under ordinary peer-set saturation.&lt;&#x2F;strong&gt; Zakura &lt;code&gt;1.0.4&lt;&#x2F;code&gt; attempted to route historical block downloads only to peers advertising the full chain. This had a live-lock, and is removed in &lt;code&gt;v1.0.5&lt;&#x2F;code&gt;. We will re-introduce this with more fixes in a subsequent release.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;address-book-and-performance&quot;&gt;Address book and performance&lt;&#x2F;h2&gt;
&lt;p&gt;We identified the address book and its related metrics as performance bottlenecks through several independent signals. Live profiles indicated that nodes with metrics disabled still spent 30% of their CPU time in metrics code. The address book also contained ordering errors and several &lt;code&gt;O(N)&lt;&#x2F;code&gt; operations. We found timeouts and sleeps delaying time-sensitive work that appeared to exist only to avoid contention while these operations held locks.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The address-book get, update, and ban operations are now &lt;code&gt;O(log(N))&lt;&#x2F;code&gt; or &lt;code&gt;O(1)&lt;&#x2F;code&gt;.&lt;&#x2F;strong&gt; We now maintain direct address, priority, and per-IP indexes. Batched address changes also publish metrics once per batch instead of rebuilding the same summary after every accepted entry.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Fix metrics growth from disconnected peers.&lt;&#x2F;strong&gt; The &lt;code&gt;zakura.net.connection.state&lt;&#x2F;code&gt; Prometheus gauge is now aggregated by command rather than carrying a per-peer &lt;code&gt;addr&lt;&#x2F;code&gt; label. Previously, disconnected peers left zero-valued time series behind indefinitely, allowing &lt;code&gt;&#x2F;metrics&lt;&#x2F;code&gt; and Prometheus cardinality to grow throughout long syncs. Operators whose dashboards query this gauge by &lt;code&gt;addr&lt;&#x2F;code&gt; should update those queries.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;other-improvements&quot;&gt;Other improvements&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mined blocks are not advertised twice when gossip events race.&lt;&#x2F;strong&gt; A completed or newly submitted mined-block event now takes priority over the committed-tip fallback when both are ready.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Public mempool testing tools.&lt;&#x2F;strong&gt; We added a load-testing harness for Mainnet and Testnet that verifies transactions gossip correctly.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;end-of-support-halt&quot;&gt;End-of-support halt&lt;&#x2F;h2&gt;
&lt;p&gt;Zakura &lt;code&gt;1.0.5&lt;&#x2F;code&gt; retains the &lt;code&gt;1.0.4&lt;&#x2F;code&gt; support window. It supports Ironwood (NU6.3) activation and reaches end of support roughly eleven days afterward, by which point the first post-Ironwood release will be available.&lt;&#x2F;p&gt;
&lt;p&gt;The first post-Ironwood release will have a substantially longer EOS.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;updating&quot;&gt;Updating&lt;&#x2F;h2&gt;
&lt;p&gt;You can update using our &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&#x2F;releases&#x2F;tag&#x2F;v1.0.5&quot;&gt;signed release binaries&lt;&#x2F;a&gt; or by upgrading the &lt;code&gt;zakura&lt;&#x2F;code&gt; crate to &lt;code&gt;1.0.5&lt;&#x2F;code&gt; via Cargo. See the &lt;a href=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;download&#x2F;&quot;&gt;download page&lt;&#x2F;a&gt; for installation and verification instructions.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Release: Zakura 1.0.4</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Zakura Developers
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zakura.com/announcements/zakura-1-0-4/"/>
        <id>https://zakura.com/announcements/zakura-1-0-4/</id>
        
        <content type="html" xml:base="https://zakura.com/announcements/zakura-1-0-4/">&lt;p&gt;We have released &lt;strong&gt;Zakura &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&#x2F;releases&#x2F;tag&#x2F;v1.0.4&quot;&gt;&lt;code&gt;1.0.4&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt;, a performance and stability release. Typical blocks now verify about 20% faster. This release also fixes bugs in the experimental P2P v2 stack, including authentication of verified-commitment-tree (VCT) fast-sync data. We also harden the default P2P networking code like in our previous two releases.&lt;&#x2F;p&gt;
&lt;p&gt;We recommend that miners and RPC operators update to take advantage of these significant performance improvements.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;faster-block-execution&quot;&gt;Faster block execution&lt;&#x2F;h2&gt;
&lt;p&gt;Zakura verifies signatures and proofs in batches. Near the chain tip, a partially filled batch often waited for a 100 ms timer before its cryptographic work could begin. We now immediately process these batches at block boundaries, while retaining the existing size and time triggers and leaving mempool batching unchanged.&lt;&#x2F;p&gt;
&lt;p&gt;In a mainnet block-processing experiment, steady-state latency fell from 681 to 591 ms per block, saving about 90 ms. This roughly 20% improvement applies to live sync as well as catch-up, with no measurable regression when verifying blocks concurrently.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;p2p-v2-authentication-and-reliability&quot;&gt;P2P v2 authentication and reliability&lt;&#x2F;h2&gt;
&lt;p&gt;This release contains the largest reliability pass on Zakura&#x27;s experimental P2P v2 stack since launch:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;VCT fast-sync data is now authenticated.&lt;&#x2F;strong&gt; During checkpoint sync in the P2P v2 stack, we use additional data committed in block N+1&#x27;s header to authenticate the commitment-tree data needed to execute block N. We now authenticate that additional data in the P2P layer. This prevents a malicious peer from stalling P2P v2 checkpoint sync with incorrect data. Cached data written under the previous rules is refreshed automatically during the upgrade.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Connections recover after temporary failures.&lt;&#x2F;strong&gt; Healthy peers can reopen block sync, header sync, discovery, and legacy-gossip services after cooldowns instead of remaining unusable until they reconnect. Closing an old service session can also no longer disconnect a newer session on the same peer connection.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Peer discovery finds new v2 nodes faster.&lt;&#x2F;strong&gt; Zakura now advertises usable addresses, safely connects to peers learned through discovery, refreshes their records, and discards them when they expire.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Block sync recovers missing downloads.&lt;&#x2F;strong&gt; If a block falls out of the download queue while later blocks are still pending, Zakura requests it again instead of buffering later blocks indefinitely and stalling sync.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;p2p-and-sync-hardening&quot;&gt;P2P and sync hardening&lt;&#x2F;h2&gt;
&lt;p&gt;The inherited P2P stack remains the default networking path for live consensus nodes. Zakura &lt;code&gt;1.0.4&lt;&#x2F;code&gt; further hardens it against malformed responses and difficult network conditions:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Malformed chain extensions no longer disrupt sync.&lt;&#x2F;strong&gt; Legacy chain sync rejects peers that echo the requested block locator inside their advertised extension.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Duplicate blocks no longer leave checkpoint sync with a permanent stall.&lt;&#x2F;strong&gt; A normal resubmission of an already queued block can no longer trigger a stale verifier reset after completed blocks have left the queue.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Historical sync avoids pruned peers.&lt;&#x2F;strong&gt; Block requests prefer peers that advertise the full chain, reducing delays from asking pruned peers for bodies they are unlikely to retain. We remain connected to pruned nodes during live sync. This was already handled in P2P v2 and is now also handled in legacy P2P.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Local &lt;code&gt;zcashd&lt;&#x2F;code&gt; sidecars connect reliably under inbound load.&lt;&#x2F;strong&gt; A sidecar could previously time out while waiting behind a large queue of public connections. Zakura now accepts queued connections in bounded, faster bursts and begins configured sidecar handshakes immediately, while retaining rate limits for public peers.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;other-improvements&quot;&gt;Other improvements&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Faster Orchard and Ironwood block template refreshes.&lt;&#x2F;strong&gt; Like the Sapling prover in &lt;code&gt;1.0.2&lt;&#x2F;code&gt;, the Orchard and Ironwood proving keys used for shielded coinbase transactions are now prepared once per process and reused, instead of being recomputed for every &lt;code&gt;getblocktemplate&lt;&#x2F;code&gt; refresh.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;CI is substantially faster.&lt;&#x2F;strong&gt; In representative runs, a merge to &lt;code&gt;main&lt;&#x2F;code&gt; uses roughly one-seventh as many runner-minutes and completes about three times faster. A pull request uses about 30% fewer runner-minutes and completes roughly three times faster. Final release builds run five times faster.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;The experimental Elasticsearch exporter is removed.&lt;&#x2F;strong&gt; External service behavior no longer runs inside the finalized-state commit path. Operators who used the exporter should contact the Zakura maintainers so we can prioritize a safer indexing API around their requirements.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Unused binaries are removed.&lt;&#x2F;strong&gt; The &lt;code&gt;block-template-to-proposal&lt;&#x2F;code&gt; and &lt;code&gt;search-issue-refs&lt;&#x2F;code&gt; binaries and their runtime dependencies are gone. The supported &lt;code&gt;zakura-checkpoints&lt;&#x2F;code&gt; tool remains.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Rust crate APIs now enforce authenticated VCT data.&lt;&#x2F;strong&gt; This is a breaking change for crate consumers: &lt;code&gt;zakura-chain&lt;&#x2F;code&gt; moves to &lt;code&gt;3.0.0&lt;&#x2F;code&gt;, while &lt;code&gt;zakura-network&lt;&#x2F;code&gt; and &lt;code&gt;zakura-state&lt;&#x2F;code&gt; move to &lt;code&gt;5.0.0&lt;&#x2F;code&gt;. Removing the developer binaries moves &lt;code&gt;zakura-utils&lt;&#x2F;code&gt; to &lt;code&gt;2.0.0&lt;&#x2F;code&gt;. These changes do not affect node operators.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;end-of-support-halt&quot;&gt;End-of-support halt&lt;&#x2F;h2&gt;
&lt;p&gt;Zakura &lt;code&gt;1.0.4&lt;&#x2F;code&gt; retains the &lt;code&gt;1.0.3&lt;&#x2F;code&gt; support window. It supports Ironwood (NU6.3) activation and reaches end of support roughly eleven days afterward, by which point the first post-Ironwood release will be available.&lt;&#x2F;p&gt;
&lt;p&gt;The first post-Ironwood release will have a substantially longer EOS.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;updating&quot;&gt;Updating&lt;&#x2F;h2&gt;
&lt;p&gt;You can update using our &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&#x2F;releases&#x2F;tag&#x2F;v1.0.4&quot;&gt;signed release binaries&lt;&#x2F;a&gt; or by upgrading the &lt;code&gt;zakura&lt;&#x2F;code&gt; crate to &lt;code&gt;1.0.4&lt;&#x2F;code&gt; via Cargo. See the &lt;a href=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;download&#x2F;&quot;&gt;download page&lt;&#x2F;a&gt; for installation and verification instructions.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Release: Zakura 1.0.3</title>
        <published>2026-07-22T00:00:00+00:00</published>
        <updated>2026-07-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Zakura Developers
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zakura.com/announcements/zakura-1-0-3/"/>
        <id>https://zakura.com/announcements/zakura-1-0-3/</id>
        
        <content type="html" xml:base="https://zakura.com/announcements/zakura-1-0-3/">&lt;p&gt;We have released &lt;strong&gt;Zakura &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&#x2F;releases&#x2F;tag&#x2F;v1.0.3&quot;&gt;&lt;code&gt;1.0.3&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt;, a security and stability release. It marks the &lt;a href=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;zcashd&#x2F;&quot;&gt;&lt;code&gt;zcashd&lt;&#x2F;code&gt; compatibility mode&lt;&#x2F;a&gt; as stable for the Ironwood (NU6.3) network upgrade. It also addresses some security issues, continues to harden the inherited P2P stack, and fixes edge cases in mempool behavior.&lt;&#x2F;p&gt;
&lt;p&gt;All node operators should update both their Zakura and &lt;code&gt;zcashd&lt;&#x2F;code&gt; compatibility binaries.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zcashd-compatibility-mode&quot;&gt;&lt;code&gt;zcashd&lt;&#x2F;code&gt; compatibility mode&lt;&#x2F;h2&gt;
&lt;p&gt;As with our &lt;a href=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;announcements&#x2F;zakura-1-0-2&#x2F;&quot;&gt;last release&lt;&#x2F;a&gt;, this release fixes several bugs in &lt;a href=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;zcashd&#x2F;&quot;&gt;&lt;code&gt;zcashd&lt;&#x2F;code&gt; compatibility mode&lt;&#x2F;a&gt;, thanks to battle-testing from partners. Most importantly, the managed &lt;code&gt;zcashd&lt;&#x2F;code&gt; process could previously fail to follow the NU6.3 network upgrade on mainnet even though the underlying &lt;code&gt;zakura&lt;&#x2F;code&gt; process did, leaving the &lt;code&gt;zcashd&lt;&#x2F;code&gt; wallet stalled.&lt;&#x2F;p&gt;
&lt;p&gt;After extensive compatibility and network-upgrade testing, Zakura &lt;code&gt;1.0.3&lt;&#x2F;code&gt; pins &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;valargroup&#x2F;zcashd&#x2F;releases&#x2F;tag&#x2F;v1.1.0&quot;&gt;&lt;code&gt;valargroup&#x2F;zcashd&lt;&#x2F;code&gt; 1.1.0&lt;&#x2F;a&gt; for both managed installations and the split-container Docker image, and we now consider the compatibility mode stable and ready for Ironwood.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;p2p-mempool-and-sync-hardening&quot;&gt;P2P, mempool, and sync hardening&lt;&#x2F;h2&gt;
&lt;p&gt;We continue to harden the legacy P2P stack inherited from Zebra, which remains the default networking path for live consensus nodes:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Peer banning is now O(1).&lt;&#x2F;strong&gt; Adding and evicting retained bans previously became more expensive as the ban list filled, because each operation copied or shifted the existing list. Membership checks, insertions, and evictions now take constant time.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Equivalent IP representations can no longer bypass enforcement.&lt;&#x2F;strong&gt; IPv4 and IPv4-mapped IPv6 addresses are now treated as the same peer when applying bans, inbound rate limits, and per-IP connection limits.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Malformed block-discovery responses no longer disrupt sync.&lt;&#x2F;strong&gt; There were several ways a peer could reply with hashes that would disrupt the node&#x27;s active sync attempt. These responses are now rejected.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This release also fixes two cases where the mempool and outbound gossip state could disagree:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mempool gossip no longer silently drops legitimate transactions.&lt;&#x2F;strong&gt; When the mempool was at capacity, valid transactions could be silently dropped from outbound gossip and never announced to peers. The gossip flow no longer permanently omits them when it falls behind.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;The mempool no longer gossips transactions whose parents were removed.&lt;&#x2F;strong&gt; When an expired transaction caused its descendants to be removed, only the directly expired transaction was previously reported to the gossip layer. All removed descendants are now cleared from pending gossip as well.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;We also harden consensus state and syncing behavior:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Corrupt history-tree caches now fail closed.&lt;&#x2F;strong&gt; Malformed bytes, caches from the wrong network, and invalid caches that are empty or predate Heartwood now produce clean errors instead of crashing the node. The valid database format is unchanged.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Mainnet checkpoints are updated, and refreshing them is now automated.&lt;&#x2F;strong&gt; Zakura &lt;code&gt;1.0.3&lt;&#x2F;code&gt; extends checkpoint sync from height 3,358,006 to 3,418,406. Checkpoint and verified-commitment-tree frontier refreshes now run through an automated pipeline: an offline export produces a provenance record that CI verifies, refreshed data is checked against its expected digests before landing in reviewable draft pull requests, and pre-release checks confirm that checkpoints, frontiers, and provenance stay consistent.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;security-ghsa-x93j-mj2f-q338&quot;&gt;Security (GHSA-x93j-mj2f-q338)&lt;&#x2F;h2&gt;
&lt;p&gt;In coordination with the Zcash Foundation, Zakura &lt;code&gt;1.0.3&lt;&#x2F;code&gt; extends the hardening for &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ZcashFoundation&#x2F;zebra&#x2F;security&#x2F;advisories&#x2F;GHSA-x93j-mj2f-q338&quot;&gt;GHSA-x93j-mj2f-q338&lt;&#x2F;a&gt; that shipped in &lt;code&gt;1.0.2&lt;&#x2F;code&gt;. Rejected non-finalized block hashes are now drained before known-block checks, allowing an honest block body with the same hash to be retried immediately instead of waiting for another state request to process the rejection.&lt;&#x2F;p&gt;
&lt;p&gt;The issue allowed a remote, unauthenticated peer that won a block-propagation race to deliver a rejected block body sharing its header hash with a valid block. A stale rejection could then prevent the valid block&#x27;s children from being accepted, stalling the node for roughly 2,000 blocks. The issue could not cause a crash, state corruption, consensus divergence, or acceptance of an invalid chain.&lt;&#x2F;p&gt;
&lt;p&gt;During this release cycle we built a hotfix release path, rehearsed it against private staging infrastructure, and hardened the checklist and process documentation that a security release follows.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;security-ghsa-2p4c-3q4q-p463&quot;&gt;Security (GHSA-2p4c-3q4q-p463)&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ZcashFoundation&#x2F;zebra&#x2F;security&#x2F;advisories&#x2F;GHSA-2p4c-3q4q-p463&quot;&gt;GHSA-2p4c-3q4q-p463&lt;&#x2F;a&gt; was reported to the Zcash Foundation by &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;x.com&#x2F;craftsoldier&quot;&gt;craftsoldier&lt;&#x2F;a&gt;. &lt;strong&gt;Zakura had already mitigated the reported issues in &lt;code&gt;1.0.2&lt;&#x2F;code&gt;.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The report found that Zebra&#x27;s mempool exposed nodes to a denial-of-service attack involving transactions as large as 2 MB, and that peers were not banned in many real-world error paths. An attacker could repeatedly submit transactions containing large numbers of invalid Orchard proofs. When batch verification failed, the verifier entered a slow path that checked each proof individually, causing substantial CPU load. Because the offending peer was not banned, the attacker could sustain this load and delay block processing.&lt;&#x2F;p&gt;
&lt;p&gt;Zakura proactively addressed these issues as part of the mempool-hardening work released in &lt;code&gt;1.0.2&lt;&#x2F;code&gt;. Among other changes, Zakura now bans peers that submit invalid Orchard proofs and rejects transactions larger than a configurable limit (250,000 bytes by default) from the mempool.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;rpc-and-indexer-reliability&quot;&gt;RPC and indexer reliability&lt;&#x2F;h2&gt;
&lt;p&gt;Zakura deployments can run a separate read-only database for RPC and indexing. This release closes several synchronization races in that path: subscriptions resume from the read-only database&#x27;s known chain tips, streamed blocks use bounded backpressure instead of being dropped, and a lagging read-only instance can fetch the finalized blocks needed to bridge a gap. Catch-up handoffs, retries, and stream timeouts are also bounded, so RPC availability recovers cleanly after restarts or delays.&lt;&#x2F;p&gt;
&lt;p&gt;Verbose block-header metadata now stays bound to the block that was originally resolved, even if the best chain reorganizes during the request.&lt;&#x2F;p&gt;
&lt;p&gt;This release also cleans up user-facing text: &lt;code&gt;getrawtransaction&lt;&#x2F;code&gt; now reports &lt;code&gt;Transaction not found in mempool or best chain&lt;&#x2F;code&gt;, and remaining references to Zebra in logs, errors, RPC responses, CLI help, and operator tooling now say Zakura. We thank &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;dismad&quot;&gt;@dismad&lt;&#x2F;a&gt; for suggesting the clearer RPC wording and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ambimorph&quot;&gt;@ambimorph&lt;&#x2F;a&gt; for &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&#x2F;issues&#x2F;327&quot;&gt;reporting the stale branding&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;other-improvements&quot;&gt;Other improvements&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;disable_pow&lt;&#x2F;code&gt; now applies to native header sync.&lt;&#x2F;strong&gt; Header sync now honors &lt;code&gt;disable_pow = true&lt;&#x2F;code&gt; on configured testnets, matching the block-verification paths that already honored it.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;The &lt;code&gt;zakura-chain&lt;&#x2F;code&gt; public API is slimmer.&lt;&#x2F;strong&gt; Unused public errors, constants, and helper methods have been removed to keep the library API focused. This is a breaking change for crate consumers; it does not affect node operators.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Transaction digests are faster.&lt;&#x2F;strong&gt; Fixed ZIP-244 hashes for absent transaction bundles are now cached. In an Ironwood-only benchmark, computing the authorizing-data digest was 2.8% faster, and computing the transaction ID and authorizing-data digest together was 5.6% faster.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Tests are more deterministic.&lt;&#x2F;strong&gt; Acceptance tests now wait for observable readiness instead of fixed sleeps, removing avoidable test latency, and &lt;code&gt;zakurad&lt;&#x2F;code&gt; test binaries no longer hit a log-capture race that could corrupt tracing span bookkeeping.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Header sync groundwork continues.&lt;&#x2F;strong&gt; We added a specification for a fork-aware header chain engine, preparing for the next stage of native header sync.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;end-of-support-halt&quot;&gt;End-of-support halt&lt;&#x2F;h2&gt;
&lt;p&gt;Zakura &lt;code&gt;1.0.3&lt;&#x2F;code&gt; supports Ironwood (NU6.3) activation and reaches end of support roughly eleven days after it, by which point the first post-Ironwood release will be available.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;updating&quot;&gt;Updating&lt;&#x2F;h2&gt;
&lt;p&gt;You can update using our &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&#x2F;releases&#x2F;tag&#x2F;v1.0.3&quot;&gt;signed release binaries&lt;&#x2F;a&gt; or by upgrading the &lt;code&gt;zakura&lt;&#x2F;code&gt; crate to &lt;code&gt;1.0.3&lt;&#x2F;code&gt; via Cargo. See the &lt;a href=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;download&#x2F;&quot;&gt;download page&lt;&#x2F;a&gt; for installation and verification instructions.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Release: Zakura 1.0.2</title>
        <published>2026-07-20T00:00:00+00:00</published>
        <updated>2026-07-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Zakura Developers
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zakura.com/announcements/zakura-1-0-2/"/>
        <id>https://zakura.com/announcements/zakura-1-0-2/</id>
        
        <content type="html" xml:base="https://zakura.com/announcements/zakura-1-0-2/">&lt;p&gt;We have released &lt;strong&gt;Zakura &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&#x2F;releases&#x2F;tag&#x2F;v1.0.2&quot;&gt;&lt;code&gt;1.0.2&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt;, a stability and performance release. It makes the &lt;a href=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;zcashd&#x2F;&quot;&gt;&lt;code&gt;zcashd&lt;&#x2F;code&gt; compatibility mode&lt;&#x2F;a&gt; substantially more reliable, and fixes a number of other bugs. We recommend that all node operators update.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zcashd-compatibility-mode&quot;&gt;&lt;code&gt;zcashd&lt;&#x2F;code&gt; compatibility mode&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;zcashd&#x2F;&quot;&gt;&lt;code&gt;zcashd&lt;&#x2F;code&gt; compatibility mode&lt;&#x2F;a&gt; runs a real &lt;code&gt;zcashd&lt;&#x2F;code&gt; process with the Zakura node as its only peer, so software that still speaks the old RPC interface keeps working. Its most visible problem, &lt;code&gt;zcashd&lt;&#x2F;code&gt; occasionally stalling behind the chain tip, turned out to have three distinct causes, and this release fixes all of them:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Block announcements are no longer dropped.&lt;&#x2F;strong&gt; An announcement to a momentarily busy &lt;code&gt;zcashd&lt;&#x2F;code&gt; was silently skipped with no retry, and on nodes that mine locally, queued announcements were canceled before ever reaching the wire. Announcements are now queued and delivered as soon as &lt;code&gt;zcashd&lt;&#x2F;code&gt; is ready.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Zakura no longer disconnects its own &lt;code&gt;zcashd&lt;&#x2F;code&gt;.&lt;&#x2F;strong&gt; Under heavy load, Zakura&#x27;s denial-of-service protection could randomly disconnect the operator&#x27;s own &lt;code&gt;zcashd&lt;&#x2F;code&gt;, and per-IP connection limits could stretch one disconnect into a multi-second blackout. The configured &lt;code&gt;zcashd&lt;&#x2F;code&gt; is now never disconnected: its requests are still shed under load, and protection for every other peer is unchanged.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Supervision is more complete.&lt;&#x2F;strong&gt; Zakura now shuts down its managed &lt;code&gt;zcashd&lt;&#x2F;code&gt; process when it exits, enables the complete legacy wallet RPC surface by default (with &lt;code&gt;-allowdeprecated=none&lt;&#x2F;code&gt; as the opt-out), works when Zakura itself runs pruned, and reports an actionable error when &lt;code&gt;zcashd&lt;&#x2F;code&gt; requests a block body that pruning has dropped.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;other-improvements&quot;&gt;Other improvements&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mempool hardening.&lt;&#x2F;strong&gt; The mempool now favors protecting miners and RPC operators, with trade-offs chosen to preserve every real usage pattern we have seen. Transactions larger than a configurable limit (250,000 bytes by default) are now rejected, many kinds of rejection are faster and cheaper, and peer penalties follow the root cause of what actually went wrong, limiting what a malicious peer can do. We also avoid an edge case where peers can get banned at the NU6.3 upgrade boundary.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Faster block template refreshes.&lt;&#x2F;strong&gt; The bundled Sapling proving parameters are now parsed once per process and the prover is shared, instead of being re-parsed on every &lt;code&gt;getblocktemplate&lt;&#x2F;code&gt; refresh, and mempool metrics are maintained incrementally rather than recomputed from a full mempool scan after every change.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Faster transparent signature checks.&lt;&#x2F;strong&gt; Signature-hash components that are shared across a transaction&#x27;s inputs are now computed once and reused for every transparent signature check, instead of being recomputed per signature.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Pruned nodes no longer advertise blocks they cannot serve.&lt;&#x2F;strong&gt; Responses to legacy peers no longer include blocks whose bodies pruning has dropped.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Peer addresses stay out of logs by default.&lt;&#x2F;strong&gt; Peer activity logs and metrics keep using redacted, privacy-preserving peer IDs; operators who need raw addresses in their trace files can opt in with the new &lt;code&gt;network.expose_peer_addresses&lt;&#x2F;code&gt; setting.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Sync fixes.&lt;&#x2F;strong&gt; Early-chain difficulty validation now applies the proof-of-work limit correctly at the averaging-window boundary, and header sync now schedules only forward ranges from the durable verified tip instead of backfilling backward.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;sprout-history-repair-in-experimental-fast-sync&quot;&gt;Sprout history repair in experimental fast sync&lt;&#x2F;h3&gt;
&lt;p&gt;Fresh verified-commitment-tree (VCT) fast sync, part of Zakura&#x27;s experimental P2P stack, did not persist the chain&#x27;s historical Sprout note-commitment history. An affected node runs normally until a transaction spends against a historical Sprout anchor, which the node can then no longer validate against its local state. Only mainnet databases created by fast sync over the experimental transport are affected, and the experimental stack is off by default.&lt;&#x2F;p&gt;
&lt;p&gt;Zakura &lt;code&gt;1.0.2&lt;&#x2F;code&gt; fixes the bug and repairs affected databases automatically. At startup, Zakura restores the missing history from a reviewed copy of the mainnet Sprout history, distributed as exact-versioned crates.io packages, and validates it before writing any repaired state. The repair is crash-safe: an interruption restarts it rather than skipping it, and an affected database refuses to run until its repair completes.&lt;&#x2F;p&gt;
&lt;p&gt;You can also audit the result yourself: a new read-only command, &lt;code&gt;zakurad validate-vct-sprout-history&lt;&#x2F;code&gt;, checks the historical Sprout anchors of any mainnet database, archive or pruned, against the reviewed history. And if you would rather not repair in place, redownloading a &lt;a href=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;snapshots&#x2F;&quot;&gt;snapshot&lt;&#x2F;a&gt; or resyncing from genesis also produces a correct database.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;end-of-support-halt&quot;&gt;End-of-support halt&lt;&#x2F;h2&gt;
&lt;p&gt;Zakura &lt;code&gt;1.0.2&lt;&#x2F;code&gt; supports Ironwood (NU6.3) activation and reaches end of support roughly ten days after it, by which point the first post-Ironwood release will be available. Nodes still on &lt;code&gt;1.0.1&lt;&#x2F;code&gt; reach end of support roughly one week after activation: they will begin warning about the required update a few days beforehand and then halt. We recommend updating now rather than during the activation window.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;updating&quot;&gt;Updating&lt;&#x2F;h2&gt;
&lt;p&gt;You can update using our &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&#x2F;releases&#x2F;tag&#x2F;v1.0.2&quot;&gt;signed release binaries&lt;&#x2F;a&gt; or by upgrading the &lt;code&gt;zakura&lt;&#x2F;code&gt; crate to &lt;code&gt;1.0.2&lt;&#x2F;code&gt; via Cargo. See the &lt;a href=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;download&#x2F;&quot;&gt;download page&lt;&#x2F;a&gt; for installation and verification instructions.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Release: Zakura 1.0.1</title>
        <published>2026-07-17T00:00:00+00:00</published>
        <updated>2026-07-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Zakura Developers
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zakura.com/announcements/zakura-1-0-1/"/>
        <id>https://zakura.com/announcements/zakura-1-0-1/</id>
        
        <content type="html" xml:base="https://zakura.com/announcements/zakura-1-0-1/">&lt;p&gt;We have released &lt;strong&gt;Zakura &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&#x2F;releases&#x2F;tag&#x2F;v1.0.1&quot;&gt;&lt;code&gt;1.0.1&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt;, a security release. It fixes three issues that our team discovered in upstream &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ZcashFoundation&#x2F;zebra&quot;&gt;Zebra&lt;&#x2F;a&gt; and that affect Zakura &lt;code&gt;1.0.0&lt;&#x2F;code&gt;. We recommend that all node operators update immediately.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;security-fixes&quot;&gt;Security fixes&lt;&#x2F;h2&gt;
&lt;p&gt;This release includes the following fixes. All three issues are denial-of-service vectors: an attacker could degrade or stall a node&#x27;s block validation or mining. &lt;strong&gt;Our teams consider these kinds of issues high severity for miners.&lt;&#x2F;strong&gt; But none of them can lead to loss of user funds, crashes, state corruption, or consensus divergence.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Quadratic block processing time&lt;&#x2F;strong&gt; (&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ZcashFoundation&#x2F;zebra&#x2F;security&#x2F;advisories&#x2F;GHSA-4g24-549m-hp75&quot;&gt;GHSA-4g24-549m-hp75&lt;&#x2F;a&gt;). Transparent transactions in blocks were verified with an algorithm whose running time grows quadratically, which an adversary could exploit to stall block validation without mining a malicious block themselves. In our measurements, the stall could last nearly 52 seconds on fast hardware.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Remote validation poisoning&lt;&#x2F;strong&gt; (&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ZcashFoundation&#x2F;zebra&#x2F;security&#x2F;advisories&#x2F;GHSA-g7c4-2w6c-cr3r&quot;&gt;GHSA-g7c4-2w6c-cr3r&lt;&#x2F;a&gt;). Nodes did not track which peers sent them transactions that violate consensus rules, including transactions with invalid proofs. Orchard proofs, for example, are verified in batches, and proofs from all sources feed into a shared verification pipeline; a malicious peer could therefore poison batches with invalid proofs without being identified or penalized. A failed batch forces block processing onto an expensive fallback path, allowing sustained degradation of a node&#x27;s block validation performance, on the order of tens of seconds.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Oversized block templates&lt;&#x2F;strong&gt; (&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ZcashFoundation&#x2F;zebra&#x2F;security&#x2F;advisories&#x2F;GHSA-95m2-vx53-v2jw&quot;&gt;GHSA-95m2-vx53-v2jw&lt;&#x2F;a&gt;). The &lt;code&gt;getblocktemplate&lt;&#x2F;code&gt; RPC could produce block templates that violated the allowed block size, because parts of the serialized block, such as the header, were not counted toward it. An adversary could provoke this deliberately to stall mining on a targeted node, for example one producing blocks for a mining pool.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;coordinated-disclosure&quot;&gt;Coordinated disclosure&lt;&#x2F;h3&gt;
&lt;p&gt;Our team discovered these issues in Zebra prior to the initial release of Zakura, which inherited them. We performed our &lt;code&gt;1.0.0&lt;&#x2F;code&gt; release as planned and began coordinated disclosure with the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zfnd.org&#x2F;&quot;&gt;Zcash Foundation&lt;&#x2F;a&gt; immediately afterward. Zebra fixes these issues in version &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zfnd.org&#x2F;zebra-6-1-0-release&#x2F;&quot;&gt;&lt;code&gt;6.1.0&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;, released alongside Zakura &lt;code&gt;1.0.1&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;We thank the Zcash Foundation for responding promptly and coordinating these fixes with our team.&lt;&#x2F;p&gt;
&lt;p&gt;Our team also privately disclosed these vulnerabilities to Shielded Labs at the same time. However, due to time constraints and differing priorities, they are not part of this coordinated software release.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;end-of-support-halt&quot;&gt;End-of-support halt&lt;&#x2F;h2&gt;
&lt;p&gt;Anticipating that these issues would need to be remediated immediately after launch, we shipped &lt;code&gt;1.0.0&lt;&#x2F;code&gt; with its EOS halt set just one week after release. &lt;code&gt;1.0.0&lt;&#x2F;code&gt; nodes will begin warning about the required update within days and will halt shortly afterward. Zakura &lt;code&gt;1.0.1&lt;&#x2F;code&gt; reaches end of support roughly one week after Ironwood (NU6.3) activates.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;other-improvements&quot;&gt;Other improvements&lt;&#x2F;h2&gt;
&lt;p&gt;This release also contains performance and stability improvements:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Initial sync now runs in bounded memory.&lt;&#x2F;strong&gt; During initial sync, blocks download faster than they can be verified, and the backlog was held as fully decoded blocks, which are several times larger than their wire encoding. Memory use therefore grew with the chain itself. The backlog is now kept in serialized form and decoded only as blocks enter verification, which turns the sync look-ahead budget (1.5 GiB by default) into a real memory bound. Memory use is also tracked through the sync pipeline and exported as metrics, so a syncing node&#x27;s memory behavior can be watched on a dashboard rather than inferred from RSS.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Fewer ways for initial sync to stall.&lt;&#x2F;strong&gt; Header ranges that time out are now retried indefinitely, briefly avoiding the peers that failed them, and bookkeeping at checkpoint boundaries no longer leaves verification capacity sitting idle. Heights whose blocks add no Sapling commitments are no longer mistaken for gaps in sync coverage, and pruned nodes (which have dropped old block bodies) no longer invent metadata for blocks they no longer store.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Stricter with untrusted bytes.&lt;&#x2F;strong&gt; ZIP-244 transaction IDs, and therefore the block hash, don&#x27;t commit to signatures, proofs, or transparent unlocking scripts, so a block body with the correct hash can still carry altered authorizing data. Block bodies from cache or from peers are now also checked against the authorizing-data root, and a body with the right hash but the wrong authorizing data is rejected as permanently invalid instead of retried. Oversized &lt;code&gt;FindBlocks&lt;&#x2F;code&gt; responses from legacy peers are rejected before they touch state lookups, and invalidating a block now removes every fork built on it, not just one of them.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;updating&quot;&gt;Updating&lt;&#x2F;h2&gt;
&lt;p&gt;You can update using our &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&#x2F;releases&#x2F;tag&#x2F;v1.0.1&quot;&gt;signed release binaries&lt;&#x2F;a&gt; or by upgrading the &lt;code&gt;zakura&lt;&#x2F;code&gt; crate to &lt;code&gt;1.0.1&lt;&#x2F;code&gt; via Cargo. See the &lt;a href=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;download&#x2F;&quot;&gt;download page&lt;&#x2F;a&gt; for installation and verification instructions.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Introducing Zakura</title>
        <published>2026-07-15T00:00:00+00:00</published>
        <updated>2026-07-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Zakura Developers
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://zakura.com/announcements/introducing-zakura/"/>
        <id>https://zakura.com/announcements/introducing-zakura/</id>
        
        <content type="html" xml:base="https://zakura.com/announcements/introducing-zakura/">&lt;div class=&quot;announcement-brand&quot;&gt;
  &lt;img class=&quot;flower&quot; src=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;zakura-flower-v1.svg&quot; alt=&quot;&quot;&gt;
  &lt;img class=&quot;wordmark&quot; src=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;assets&#x2F;zakura-text-v1.svg&quot; alt=&quot;&quot;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&quot;&gt;Zakura&lt;&#x2F;a&gt; is a new full node implementation for the
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;z.cash&#x2F;&quot;&gt;Zcash&lt;&#x2F;a&gt; network, built for scale. It is free and open-source software. &lt;strong&gt;Today, we&#x27;re releasing &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zakura-core&#x2F;zakura&#x2F;releases&#x2F;tag&#x2F;v1.0.0&quot;&gt;&lt;code&gt;1.0.0&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-s-zakura&quot;&gt;What&#x27;s Zakura?&lt;&#x2F;h2&gt;
&lt;p&gt;Forked from &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ZcashFoundation&#x2F;zebra&quot;&gt;Zebra&lt;&#x2F;a&gt;, Zakura
is a consensus-compatible Zcash full node. Its initial release already supports
Ironwood (NU6.3), which activates later this month; our teams are largely
responsible for Ironwood&#x27;s implementation and coordination.&lt;&#x2F;p&gt;
&lt;p&gt;Zakura is a collaboration between &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;valargroup.dev&#x2F;&quot;&gt;Valar Group&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tachyon.z.cash&#x2F;&quot;&gt;Project Tachyon&lt;&#x2F;a&gt;. Our teams are building the next generation of Zcash&#x27;s protocol, and Zakura will be ground zero for integrating it into the real network.&lt;&#x2F;p&gt;
&lt;p&gt;This first release brings major improvements over existing Zcash node software:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;&#x2F;strong&gt;: Blockchain sync is nearly 5× faster than Zebra.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Pruning and snapshots&lt;&#x2F;strong&gt;: Native block pruning with configurable retention cuts disk usage substantially. We also publish &lt;a href=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;snapshots&#x2F;&quot;&gt;snapshots&lt;&#x2F;a&gt; (~11 GB pruned) that let you bootstrap a node 680× faster than syncing over the standard P2P network.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;zcashd&lt;&#x2F;code&gt; compatibility&lt;&#x2F;strong&gt;: A &lt;a href=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;zcashd&#x2F;&quot;&gt;compatibility mode&lt;&#x2F;a&gt; reproduces the legacy &lt;code&gt;zcashd&lt;&#x2F;code&gt; RPC interface, so existing wallets and integrations keep working.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Experimental P2P layer&lt;&#x2F;strong&gt;: We are building a new P2P transport layer for Zakura nodes, currently off by default. The goals: sub-&lt;code&gt;500ms&lt;&#x2F;code&gt; worst-case block propagation, mempool aggregation (used in Tachyon), and a future-proofed gossip protocol with strict DoS resistance built in.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;figure class=&quot;announcement-figure&quot;&gt;
  &lt;img src=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;images&#x2F;full-sync-time.png&quot; alt=&quot;Full node sync time comparison: Zebra 20 hours 46 minutes, Zakura block sync 4 hours 20 minutes, Zakura archive snapshot 37 minutes 9 seconds, and Zakura pruned snapshot 1 minute 50 seconds.&quot; width=&quot;2051&quot; height=&quot;1332&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
  &lt;figcaption&gt;Zakura block sync finishes in 4h 20m versus Zebra&#x27;s 20h 46m in this run; snapshots reduce bootstrap time further, down to 37m 9s for archive and 1m 50s for pruned.&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;announcement-figure&quot;&gt;
  &lt;img src=&quot;https:&#x2F;&#x2F;zakura.com&#x2F;images&#x2F;full-sync-speed-zakura-vs-zebra.png&quot; alt=&quot;Full node sync speed comparison showing Zakura reaching the benchmark height much sooner than Zebra.&quot; width=&quot;2682&quot; height=&quot;1421&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
  &lt;figcaption&gt;Zakura syncs mainnet from the network far faster than Zebra in this trace, reaching the chain tip while Zebra is still in the sandblasting range.&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;why-fork&quot;&gt;Why fork?&lt;&#x2F;h2&gt;
&lt;p&gt;Our dream is for Zcash to support the world&#x27;s payments. Mastercard and Visa handle more than 50k transactions per second; &lt;strong&gt;that&#x27;s our floor&lt;&#x2F;strong&gt;. With Zcash&#x27;s existing cryptography, that volume would demand over 500MB&#x2F;s of throughput from the node. The current stack won&#x27;t get us there.&lt;&#x2F;p&gt;
&lt;p&gt;The cryptography our teams are developing closes much of that gap. Tachyon&#x27;s recursive proofs bring the requirement down to 100MB&#x2F;s, and Valar Group is developing &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Private_information_retrieval&quot;&gt;PIR&lt;&#x2F;a&gt; solutions that let wallet software support unbounded TPS, up from the 1 TPS ceiling of today&#x27;s stack.&lt;&#x2F;p&gt;
&lt;p&gt;But cryptography is only part of the solution. We need consensus node software capable of high-performance networking at this scale. That&#x27;s why we&#x27;re building Zakura.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;maintainers&quot;&gt;Maintainers&lt;&#x2F;h2&gt;
&lt;p&gt;Zakura is maintained by Sean Bowe and Dev Ojha, veteran protocol engineers.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sean Bowe&lt;&#x2F;strong&gt; is a cofounder of Zcash and the cryptographic engineer leading Project Tachyon. Hired in 2015 at Electric Coin Co., the company that launched Zcash the following year, he has been responsible for the network&#x27;s zk-SNARK cryptography implementations at launch and in every network upgrade in the decade since, coauthoring several academic papers to support that work.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Dev Ojha&lt;&#x2F;strong&gt; is a legendary cryptographic engineer who cofounded Osmosis and now leads Valar Group, bringing frontier PIR-based cryptography (among other things) to Zcash. His team is largely responsible for the major engineering and performance work in this initial Zakura release.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Both Project Tachyon and Valar Group are funded by private ZEC donations.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
