<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Privacy chronicles of Ethereum</title>
        <link>https://paragraph.com/@privacy-chronicles-of-ethereum</link>
        <description>These posts are focus on my privacy work at Ethereum. They represent my own views and experiences. I will try to read it personally in order to avoid overcomplicating ideas with AI editors.</description>
        <lastBuildDate>Thu, 12 Nov 2026 07:18:20 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Privacy chronicles of Ethereum</title>
            <url>https://img.paragraph.com/cdn-cgi/image/format=auto/https://storage.googleapis.com/papyrus_images/2135e442d0975bf174ead403253cc5155038de2d7902e8de834a95f9f41ea7f9.jpg</url>
            <link>https://paragraph.com/@privacy-chronicles-of-ethereum</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[lean zkWormholes Explainer]]></title>
            <link>https://paragraph.com/@privacy-chronicles-of-ethereum/lean-zkwormholes-explainer</link>
            <guid>XKQYxTByNXWGvSmkesrt</guid>
            <pubDate>Fri, 04 Sep 2026 22:37:13 GMT</pubDate>
            <description><![CDATA[Privacy is an important part of the Ethereum roadmap (strawmap.org) and everyone is talking about it. At the PSE we were exploring different approaches to achieve privacy in order to find the right one that could, in the long future, be implemented on the L1 as a native privacy feature. We were interested in a particular approach that would maintain Ethereum's CROPS (Censorship Resistance, Open-source, Privacy and Security). In this article we will explore this approach that has been renamed ...]]></description>
            <content:encoded><![CDATA[<p>Privacy is an important part of the Ethereum roadmap (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://strawmap.org">strawmap.org</a>) and everyone is talking about it. At the PSE we were exploring different approaches to achieve privacy in order to find the right one that could, in the long future, be implemented on the L1 as a native privacy feature. We were interested in a particular approach that would maintain <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethereum.org/foundation/mandate/">Ethereum's CROPS</a> (Censorship Resistance, Open-source, Privacy and Security). In this article we will explore this approach that has been renamed "lean zkWormholes".</p><div data-type="twitter" tweetid="2074033310875975719">
  <div class="twitter-embed embed">
    <div class="twitter-header">
        <div style="display:flex">
          <a target="_blank" href="https://twitter.com/VitalikButerin">
              <img alt="User Avatar" class="twitter-avatar" src="https://img.paragraph.com/cdn-cgi/image/format=auto/https://storage.googleapis.com/papyrus_images/3c41fc6917d326c85e511a3f4ff4446c765834bce7ef928e3ed340acf917bce9.jpg">
            </a>
            <div style="margin-left:12px;margin-right:auto;line-height:1.2;">
              <a target="_blank" href="https://twitter.com/VitalikButerin" class="twitter-displayname">vitalik.eth</a>
              <p style="margin-top:2px;line-height:1;"><a target="_blank" href="https://twitter.com/VitalikButerin" class="twitter-username">@VitalikButerin</a></p>
    
            </div>
            <a href="https://twitter.com/VitalikButerin/status/2074033310875975719" target="_blank">
              <svg class="twitter-logo" width="20" height="20" viewBox="0 0 24 23" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path d="M0.256759 0L9.36588 12.1823L0.200012 22.0873H2.26348L10.289 13.4158L16.7728 22.0873H23.7935L14.1723 9.21978L22.7043 0H20.6409L13.2506 7.98633L7.27889 0H0.258127H0.256759ZM3.29035 1.52002H6.51495L20.7571 20.5673H17.5325L3.29035 1.52002Z" fill="currentColor"></path>
              </svg>
            </a>
          </div>
        </div>
      
    <div class="twitter-body">
      If we want to make the Lean Ethereum consensus chain aggressively more "lean", and add strong validator privacy (ZK-unlink deposit from staking activity from withdrawal, and re-anonymize stakers every day), here is a path:<br>
      
      
        <a class="twitter-card-link" href="https://t.co/Gdee7tE53R" target="_blank">
          <div class="twitter-media twitter-summary">
            <img src="https://img.paragraph.com/cdn-cgi/image/format=auto/https://storage.googleapis.com/papyrus_images/bdb2ca22fd354c3cac6031661b2a34f1bc6b168771d342a8221058f5c1535914.png">
            <div class="twitter-summary-card-text">
              <span>ethresear.ch</span>
              <h2>The Extremely Lean Chain</h2>
              <p>Special thanks to Emile, Potuz, Anders Elowsson for initial feedback and review. The goal of this post will be to show how the Ethereum consensus chain, in the context of “Lean” upgrades (single-slot...</p>
            </div>
          </div>
        </a>
       
    </div>
    
     <div class="twitter-footer">
          <a target="_blank" href="https://twitter.com/VitalikButerin/status/2074033310875975719" style="margin-right:16px; display:flex; align-items:center;">
            <svg class="twitter-heart" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg">
              <path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"></path>
            </svg>
            2,454
          </a>
          <a target="_blank" href="https://twitter.com/VitalikButerin/status/2074033310875975719"><p>7:30 AM • Jul 6, 2026</p></a>
        </div>
    
  </div> 
  </div><h1 id="h-what-are-zkwormholes" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What are zkWormholes?</h1><p>Ethereum addresses are created following these steps:</p><ol><li><p>Pick a secret Elliptic Curve (EC) key $$s$$ </p></li><li><p>Generate a public key $$pubK = G^s$$ </p></li><li><p>Hash it using keccak $$h=keccak(pubK)$$ </p></li><li><p>Slice the first 12 bytes and keep the last 20 bytes $$addr = slice_{12}(h)$$  </p></li></ol><p>In order to move funds from that address you have to sign a transaction with your key and the validator will perform the hashing and slicing to retrieve the address and authenticate it with the respective on-chain address. </p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-7503">zkWormholes</a> use "burn addresses" where a user sends funds (native ETH or tokens) to an unspendable address generated by the following steps:</p><ol><li><p>Chose a random secret $$s$$  or $$s | domain$$  </p></li><li><p>Hash it using keccak $$h=keccak(s)$$ </p></li><li><p>Slice the first 12 bytes and keep the last 20 bytes $$addr = slice_{12}(h)$$ </p></li></ol><p>As you can see there is not elliptic curve secret key capable of signing messages that will expose an elliptic curve public key. This means the address is unspendable, only the address generator knows this fact and the rest of the on-chain observers only see a normal-looking Ethereum address. When a user generates a burn address and sends funds to it, he is privately burning funds without disclosing it to the public observers.</p><p>After sending funds to the burn address, the user can generate a zk proof that they know secret $$s$$  that generates the burn address that received $$N$$ tokens without showing which burn address it is. The user can present this zk proof to a smart contract and mint new tokens to a fresh non-related Ethereum address, basically teleporting the funds from the burn address into the new fresh address.</p><p>It is worth pointing out that for this mechanism to work with native ETH, L1 changes (e.g. an EIP like EIP-7503) are required to be implemented. The zkWormholes mechanism can be used with other ERC20 tokens where the and burn and mint functions can be properly adapted. There is already a production private transfer protocol called <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://(https://worm.cx/)">WORM</a> which uses zkWormholes in Ethereum mainnet. </p><figure float="none" data-type="figure" class="img-center"><img src="https://img.paragraph.com/cdn-cgi/image/format=auto/https://storage.googleapis.com/papyrus_images/c8b8570dab06a44ba1cff0b7463c38bc8ac523851f6abe4405143ef352a3c11d.png" blurdataurl="data:image/png;base64,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" nextheight="1024" nextwidth="1536" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><h1 id="h-why-zkwormholes-are-important-for-crops" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Why zkWormholes are important for CROPS?</h1><p>Censorship Resistance, Open-source, Privacy and Security (CROPS) are the crucial values for Ethereum in order to build a permissionless neutral world computer according to the Ethereum Foundation. In order to achieve privacy, a private transfer solution is required at the protocol level to covers anonymity, confidentiality and plausible deniability. The latter means the ability of users to hide the fact that they are using a private transfer solution at all. </p><p>Without plausible deniability, external organisations and governments can censor and block addresses that have interacted with any protocol they do not like. A clear example of it is the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://home.treasury.gov/news/press-releases/jy0916">OFAC ban</a> of all Ethereum addresses that ever interacted with the Tornado Cash contracts. </p><p>To achieve true CROPS, a plausible deniability private transfer solution is required and zkWormholes look like a strong candidate for it. There are another explorations like EVM bytecode obfuscation that rely on statistics rather than traditional cryptography, but are still in research and prototyping phase. For more information about it check out <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.mirageprivacy.com/">Mirage</a>.</p><h1 id="h-what-are-the-challenges" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What are the challenges?</h1><p>zkWormholes are not perfect and as some readers might have noticed by now, they could bring a huge security vulnerability in two different scenarios.</p><h2 id="h-scenario-1" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Scenario 1: </h2><p>A burn address looks exactly the same as an Ethereum address but it is generated differently by computing $$addr = slice_{12}(keccak(s))$$  where $$s$$ is a random secret only known to the address creator. The number of Ethereum possible addresses (spendable and burn) is $$2^{160}$$ because each address is 20 bytes (160 bits) long.</p><p>According to the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://en.wikipedia.org/wiki/Birthday_problem">birthday problem</a>, an attacker can theoretically find two different secrets $$s$$ and $$s'$$ that would produce the same 160 bits address $$addr$$ in around $$2^{160/2} = 2^{80}$$ tries. If the attacker succeeds,  he would be able to mint "burned" tokens twice by presenting a zk proof with $$s$$ and another zk proof with $$s'$$ . The attacker will need a large enough computer that can compute $$2^{80}$$ hashes in a reasonable time frame and also a considerable amount of funds to be burn in a single transaction. These two requirements make the attack feasible only for wealthy stakeholders but not less important from a security perspective. Just imagine if some entity would be able to double ETH without anyone noticing it.</p><h2 id="h-scenario-2" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Scenario 2:</h2><p>We can have additional steps to secure the generation process of secret $$s$$ with Proof of Work difficulty (as stated in the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-7503">EIP-7503 rationale section</a>) or longer secrets stored along side the transaction (data storage or Elliptic curve nonces). </p><p>Even though these solutions look promising, at the end of the day the collision problem persists because the Ethereum addresses are 20 bytes (160 bits) long and we have two different algorithms that can run in parallel in order to find the same address in around $$2^{80}$$ tries. </p><p>A malicious user could generate a normal Ethereum public address with its respective private key $$addr = slice_{12}(keccak(G^{s}))$$  that would also be an be computed as burn address with secret $$s$$ resulting in $$addr = slice_{12}(keccak(s))$$ . Here, the user will have control of the address' assets and will be able to prove to the minter contract that the address is a burn address allowing him to mint new tokens and move the "burned" tokens after it.</p><br><p>To summarize, zkWormholes using standard Ethereum addresses have a 80 bits of collision security. To increase this security, we need a new address longer than 20 bytes and we will lose the plausible deniability property because a burn transaction will be different than a normal transaction. A L1 protocol change from 20 bytes to 32 bytes will be needed if we wanted to keep the unlinkability and plausible deniability properties. EF's researchers wrote a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethresear.ch/t/wormholes-and-the-cost-of-plausible-deniability/23728">technical post</a> explain this issue in more detail. If you are a little bit lost on why the 20 bytes long addresses are a problem in zkWormholes but not in normal Ethereum setup you can check out <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethresear.ch/t/wormholes-and-the-cost-of-plausible-deniability/23728/13">my comment</a> on the post.</p><h1 id="h-what-is-the-proposed-solution" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What is the proposed solution?</h1><p>So zkWormholes are not possible in Ethereum L1? Not quite. At the end of the "<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out fancy-title" href="https://ethresear.ch/t/wormholes-and-the-cost-of-plausible-deniability/23728">Wormholes and the cost of plausible deniability</a>" post of the EF's researchers there is a possible path to implement zkWormholes at the protocol level by leveraging the validators public keys. The authors wrote a new proposal: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-8222">Lean Staking EIP-8222</a>.</p><p>The Ethereum protocol currently runs in two layers: the execution layer where the applications live (smart contracts, dApps, transfers) and the consensus layer where the validator logic lives (Proof of stake, BLS signatures, consensus, etc). In the former we use 20 bytes long Ethereum addresses and in the later we use 48 bytes long validator public keys. The current roadmap points to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://leanroadmap.org/">leanEthereum</a>, a set of upgrades aiming to the consensus layer, and it is possible to fix the $$2^{80}$$ collision problem at that layer.</p><p>Users who want to perform a private-only transfer will use the validator deposit path to deposit into the zkWormhole and will exit with the validator withdrawal path without ever joining the validator set. The EIP proposes to change the current validator deposit and withdraw logic into a more privacy-preserving logic that will allow validators and private transfers users share the same entering and exiting lane.</p><p>As you can see by now Lean Staking is informally called lean zkWormholes because it tries to adapt the consensus layer deposit and withdraw paths (lean) with zkWormholes.</p><br><h1 id="h-what-is-my-opinion-on-zkwormholes" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What is my opinion on zkWormholes</h1><p>I am passionate about zkWormholes because of their plausible deniability property but at the same time have some concerns if it is shipped. The following points are strictly my opinion and can change with new arguments or research:</p><ul><li><p><strong>Good: </strong>plausible deniability makes Ethereum more permissionless. It will harder for any entity to map down your activity and censor you depending on if you have used a privacy protocol or not.</p></li><li><p><strong>Good: </strong>zkWormholes can give pausible deniability to existing privacy protocols. They can be combined with other approaches (Railgun, Hinkal, Privacy Pools -- note-based shielded pools, Zama, Fhenix, Tongo -- homomorphic encryption) as a entry point method in order to enable plausible deniability. </p></li><li><p><strong>Bad: </strong>the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-8222">lean Staking</a> proposal is still in research phase and it could take years to be shipped to Ethereum L1 as native private transfers. There are some protocols like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://worm.cx/">WORM</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zerc20.io/">zERC20</a> already offering zkWormholes solutions at the application layer.</p></li><li><p><strong>Bad:</strong> Compliance might get messy. Today private transfers protocols offer compliance in different ways, some use Proof Of Innocence and others use Global Auditor keys. Integration of native private transfers in Ethereum L1 might cause some governments and stakeholders to censor and block all Ethereum activity because they would not be able to distinguish users. Today, without plausible deniability, this can happen only with addresses that have interact with specific protocols (e.g. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://home.treasury.gov/news/press-releases/jy0916">Tornado Cash OFAC ban</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://es.tradingview.com/news/coinpedia:d071f7109094b:0-circle-freezes-12-6-million-in-zama-s-cusdc-contract-zachxbt/">Zama USDC freeze</a>, etc.). </p></li></ul><br><p>Thank you for your time reading this post. It took me a while to write it. If you are interested in learning about the Private Transfers ecosystem in Ethereum, check our dashboard here: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://private-transfers.pse.dev/">https://private-transfers.pse.dev/</a></p><p>If you liked this post, follow me for more privacy related content. My X (former Twitter) is <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/NicoSerranoP">@NicoSerranoP</a>.</p><br><p>Cover photo by <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://unsplash.com/@hubblespacetelescope?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">NASA Hubble Space Telescope</a> on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://unsplash.com/photos/an-image-of-a-black-hole-in-the-sky-17hchodU6sA?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>]]></content:encoded>
            <author>privacy-chronicles-of-ethereum@newsletter.paragraph.com (Nicolas Serrano)</author>
            <category>ethereum</category>
            <category>privacy</category>
            <category>zkwormholes</category>
            <category>private-transfers</category>
            <category>leanethereum</category>
            <enclosure url="https://img.paragraph.com/cdn-cgi/image/format=auto/https://storage.googleapis.com/papyrus_images/d98369126bab99342ecee234f2b49b79444b7acf3ca0cfcb2124410f126f8880.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Auditor viewing keys in privacy systems]]></title>
            <link>https://paragraph.com/@privacy-chronicles-of-ethereum/auditor-viewing-keys-in-privacy-systems</link>
            <guid>bxU1NZ3bxOMvLefalnSg</guid>
            <pubDate>Fri, 31 Jul 2026 23:30:48 GMT</pubDate>
            <description><![CDATA[There are multiple privacy protocols deployed on Ethereum at the moment. End users have been using them for a while on the permissionless L1. The incoming wave of institutions to Ethereum will require privacy components. It is worth analyzing one of their key requirements: auditor keys.]]></description>
            <content:encoded><![CDATA[<h2 id="h-introduction" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Introduction</h2><p>There are multiple privacy protocols deployed on Ethereum at the moment (Privacy Pools, Railgun, Zama, Hinkal, etc.) and many more on the production pipeline (Mirage, Bermuda, Redact, etc.). End users have been using them for a while on the permissionless L1. The incoming wave of institutions to Ethereum will require privacy components. It is worth analyzing one of their key requirements: auditor keys.</p><p>Institutions will come on-chain in two ways: to use what the Ethereum ecosystem has to offer (e.g. DeFi, borderless transfers, decentralized voting) or to offer a product to the Ethereum ecosystem (e.g. Real World Assets (RWA), stablecoins transfers, etc.). In this post we will focus solely on the latter scenario where is important that institutions provide product or services following regulations that enforce user data privacy.</p><br><h2 id="h-the-challenge" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The challenge</h2><p>Usually regulations ask for two things: end users data privacy and guardrails to prevent malicious actors. Institutions trying to comply lean towards the ability to examine data if a user is under investigation. Today this already happens in traditional digital systems (web2). Let's consider a bank that offers digital transfers through their mobile or web application. End user data is privately stored in the bank system infrastructure. Only the system administrator can see the transactions happening and can stop them or freeze accounts if required by law enforcement.</p><p>A similar on-chain product to the previous example is a permissioned private transfer protocol deployed and controlled by a particular institution. The following benefits over traditional systems would be:</p><ul><li><p>24/7 system availability guaranteed by the underlying chain (e.g. Ethereum mainnet)</p></li><li><p>Global accessibility and scalability while maintaining security through the Ethereum protocol.</p></li><li><p>Exposure to other protocols and tools on the Ethereum ecosystem (e.g. DeFi)</p></li></ul><p>The on-chain protocol can comply with the end user data privacy and the malicious actors gatekeeping by using different compliance methods but the most compelling one for institutions is selective disclosure through auditor keys.</p><br><h2 id="h-the-solution" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The solution</h2><p>Selective disclosure means that specific private data can be revealed in case law enforcement or auditors want to view it. This allows to maintain end user data private from on-chain observers and allow the administration entity to actively cooperate with regulators or law enforcement. There are two types of selective disclosure: voluntary selective disclosure or involuntary selective disclosure. Every development team implements it's own version but there are common patterns visible across different protocols.</p><p>Voluntary selective disclosure uses a public key pair per user. The protocol encrypts the transaction/interaction of a particular user using his own public key. This key is called a viewing key, it is separate from the spending key which allows the user to spend the funds. In case regulators ask access for a particular transaction or user's balance, the user has to actively collaborate with the protocol administrator and the regulator to reveal the requested data by providing his viewing key. This approach respects user privacy over regulations which is beneficial for most users but it can allows bad actors to refuse collaboration and continue using the protocol.</p><p>Involuntary selective disclosure uses a global viewing key. In every private transaction/interaction, the protocol encrypts the data with the user viewing key and with the global viewing key. These two ciphertexts are published on-chain so the user can find transfers related to him and the auditor can check all private transfers without users' explicit consent. This approach puts regulation and law enforcement over users individual data privacy because there is a global viewing key that allow access to all transactions from the protocol deployment date to the current date.&nbsp;</p><p>Any form of selective disclosure is more appealing to institutions than other compliance mechanisms like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://proofofinnocence.com/">Private Proof Of Innocence</a> because it is similar on how traditional digital systems work. Institutions do not want to risk themselves in nascent innovation and prefer common already proved methods. Given that how can we make selective disclosure as private as possible?</p><br><h2 id="h-approaches" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Approaches</h2><ol><li><p><strong>Voluntary selective disclosure using zk proofs:</strong> on the design above the user shares his private viewing key to auditors so they can check a specific transaction or set of transactions. The problem is that the auditor with the viewing key can see all user's transactional history. It is not bounded to a specific transaction. This can be solved by using zero knowledge (zk). Each transaction will encrypt the data with the user own public viewing key and when an auditor ask him to selective disclose a specific transaction, the user will download the encrypted object, decrypt it using his private viewing key and encrypt it with the auditor public viewing key. He will share the new encrypted object plus a zk proof that the decrypt-encrypt process was performed correctly. Using this approach the user will keep ownership of his transaction history while the auditor will be able to check a specific part of that history.</p></li><li><p><strong>Involuntary selective disclosure through DKG:</strong> the described involuntary selective disclosure uses a single global viewing key pair that is stored by the auditor, administrator or any stakeholder depending on the protocol. This allows the auditor to check all transactions therefore user privacy could be rugged if the auditor shares any information with a third party. The centralization problem can be solved by splitting the private key between N parties. That way the transactions can only be decrypted if k parties agree on doing so (k &lt; N). The ability to see all transactions is split between the N parties and they would need to collude in order to perform a decryption. This problem is called threshold encryption and the Distributed Key Generation (DKG) process generates a shared private key that no single individual have seen. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://stoffelmpc.com/">Stoffel</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://shutter.network/">Shutter Network</a> are projects offering the infrastructure and development tooling to abstract away the complexity of threshold encryption and DKG.</p></li></ol><br><h2 id="h-conclusion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Conclusion</h2><p>Privacy is coming to institutions willing to go on-chain. I believe most of them will choose the global auditor viewing key mechanism in order to meet regulation and compliance. The discussion about the tradeoffs of this approach needs to happen sooner than later, otherwise we might end up with on-chain privacy solutions integrating a global viewing key that could affect end users privacy. I invite you to comment on this post or start a conversation in social media. In the crypto space the best approach to build long-lasting useful products is to build in public. If you liked this article please follow me in X (former Twitter): <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/NicoSerranoP"><strong>https://x.com/NicoSerranoP</strong></a><strong> </strong>for future posts and discussions.</p><br><br><p>Cover photo by <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://unsplash.com/@ries_bosch?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Ries Bosch</a> on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://unsplash.com/photos/a-bunch-of-keys-that-are-on-a-hook-5Dp7XJxILTk?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>]]></content:encoded>
            <author>privacy-chronicles-of-ethereum@newsletter.paragraph.com (Nicolas Serrano)</author>
            <category>privacy</category>
            <category>ethereum</category>
            <category>compliance</category>
            <category>institutions</category>
            <enclosure url="https://img.paragraph.com/cdn-cgi/image/format=auto/https://storage.googleapis.com/papyrus_images/5d2d93939d7cbb59118664843459440990fe2d3b17df00f6b7647ba1b395f201.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Privacy in lending protocols]]></title>
            <link>https://paragraph.com/@privacy-chronicles-of-ethereum/privacy-in-lending-protocols</link>
            <guid>qYCkUuaQ9uRzF6ZKczrl</guid>
            <pubDate>Fri, 03 Jul 2026 03:58:10 GMT</pubDate>
            <description><![CDATA[Intro Ethereum, the world permissionless computer, is becoming popular among users who want to regain control over their finance and digital data. Nowadays every interaction with Ethereum is public and anybody can monitor what other users are doing. Privacy is a crucial component for building a trustless computer used worldwide and not a global panopticon that would enable total surveillance. At the PSE team we worked in different aspects of on-chain privacy. My most recent role involved eval...]]></description>
            <content:encoded><![CDATA[<h2 id="h-intro" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Intro</h2><p>Ethereum, the world permissionless computer, is becoming popular among users who want to regain control over their finance and digital data. Nowadays every interaction with Ethereum is public and anybody can monitor what other users are doing. Privacy is a crucial component for building a trustless computer used worldwide and not a global panopticon that would enable total surveillance.</p><p>At the PSE team we worked in <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://pse.dev/blog/pse-roadmap-2025">different aspects of on-chain privacy</a>. My most recent role involved evaluating and benchmarking private transfers protocols (you can see a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://private-transfers.pse.dev/">dashboard</a> here). In my opinion private transfers are the atomic operation required to bring privacy on-chain but I was wondering what would be the next steps after users are able to successfully perform private transfers.</p><h2 id="h-lending-protocols" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Lending protocols</h2><p>My crypto experience started with learning about decentralized ledgers (Bitcoin, Ethereum, Polygon, etc.), investing into multiple assets (BTC, ETH, etc.) and later on learning cool stuff that I could do with those assets. One of the most revolutionary one was permissionless lending.</p><p>In a nutshell, a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://aave.com/help/aave-101/introduction-to-aave">lending protocol</a> allows a user to deposit collateral (e.g. ETH) and borrow any asset (e.g. USDT). This is called a lending position. The collateral value (ETH) would have to always be greater than the borrowed amount in order to protect the lenders assets (USDT). The user would be able to use USDT in anything he wants. The happy path would be the collateral increasing in value, because the user would still need to return only the borrowed amount and nothing more. The worst case path would be the collateral decreasing in value, because the protocol would sell the collateral in order to cover the borrowed amount. This action is called liquidation.</p><p>Now the question is how would a private lending position work? It would depend on the private transfer protocol and its tradeoffs. Let me expand with the most popular and production ready private transfers categories:</p><h2 id="h-notes-based-private-transfers-for-lending-protocols" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Notes-based private transfers for lending protocols</h2><p>Notes-based private transfers use UTXOs (Unspent Transaction Output) like Bitcoin. Every time a user receives a private value, a note is assigned to him. In order to spend it he generates a ZK proof showing note ownership and also a nullifier that invalidates the note from being used again (prevent double spending). On the on-chain layer, these protocols keep funds in a shielded pool smart contract. Every transaction sends ZK proofs to the contract and the private state is updated.</p><p>To integrate notes-based private transfers protocols with a standard lending protocol (e.g. Aave or Morpho), the protocol needs to publicly deposit collateral funds and borrow assets. If multiple users want to use the lending protocol, the shielded pool contract will have different positions to its name. One contract will be the owner of several positions with different collaterals and different borrowed assets. This would create a huge liquidation risk that could affect conservative and risky users.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://blog.waku.org/2024-04-26-railgun-case-study/">Another approach</a> to do this would be to deploy one contract per position. The user would send a request to interact with the lending protocol and the notes-based protocol will deploy a single smart contract that would control the position. The risk will be isolate to each smart contract so users will not be affected by the decisions of other users. The tradeoff here is that the position itself will be public and visible. Nobody will know the position owner but everybody will be able to check the data and conclude the position strategy. In some cases the metadata (position amount, chosen assets, timing, etc.) could leak the owner identity.</p><h2 id="h-homorphic-encryption-based-private-transfers-for-lending-protocols" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Homorphic-encryption-based private transfers for lending protocols</h2><p>Homomorphic-encryption (HE) based private transfers usually involve confidential transactions where the amount and balances are hidden but the sender and recipient are visible on-chain. These protocols could use simple HE schemes (e.g. Tongo Cash) or co-processors (e.g. Zama and Fhenix) to perform operations that sends tokens from one account into another.</p><p>To integrate HE-based private transfers protocols with a standard lending protocol, the former will need to be updated in order to understand and execute HE operations. For example a user would deposit a confidential wrapped token (cUSD) and borrow any available public asset. The position collateral amount will be private and the liquidation mechanisms would need to perform HE comparison operations (e.g. lessThan) in order to execute a liquidation if required. </p><p>There is progress on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.zama.org/post/onboard-the-next-trillions-in-defi-with-confidential-lending">modifying and adapting lending protocols to use confidential tokens</a> but it is not as straight forward as the other categories because the lending protocol is required to be adapted. In my opinion, private lending using HE will be the cleaner way to hide your position and strategies from on-chain observers.</p><h2 id="h-stealth-addresses-private-transfers-for-lending-protocols" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Stealth addresses private transfers for lending protocols</h2><p>Stealth addresses are single-use addresses that recipients will generate so senders can send assets to those unlinkable addresses. The recipient will later on be able to deploy smart accounts into those addresses and move the received assets around.</p><p>An integration of stealth addresses protocols with standard lending protocols would be straight forward. The smart accounts deployed on the stealth addresses are normal smart contracts that can interact with DeFi protocols like lending ones. If one of these smart accounts interact with the lending protocol, the unlinkability property will be intact but the position data will be public. This is the same tradeoff as notes-based protocols.</p><h2 id="h-conclusion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Conclusion</h2><p>As you can see, there are multiple challenges and tradeoffs in implementing private lending protocols for end users that would like to have their position private from the on-chain observers. There are multiple teams and organizations tackling  these challenges and the only comment I can be sure of saying is: Privacy is coming.</p><p>If you liked this article please follow me in X (former Twitter): <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/NicoSerranoP">https://x.com/NicoSerranoP</a> . I am planning on writing more about Ethereum and the privacy layer. Thank you very much for reaching the end, I apologize in advance for not describing other interesting private transfers categories but in future writeups I will highlight them.</p><br><p>Cover photo by <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://unsplash.com/@niharbhagat?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Nihar Bhagat</a> on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://unsplash.com/photos/little-free-library-filled-with-books-on-a-street-B4p46KlvkXs?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p><br>]]></content:encoded>
            <author>privacy-chronicles-of-ethereum@newsletter.paragraph.com (Nicolas Serrano)</author>
            <category>privacy</category>
            <category>lending</category>
            <category>defi</category>
            <category>ethereum</category>
            <enclosure url="https://img.paragraph.com/cdn-cgi/image/format=auto/https://storage.googleapis.com/papyrus_images/4168c1c38e0b6aca929894a6b13c3dc53f8d3a2411379cb9d7df404b88654de4.jpg" length="0" type="image/jpg"/>
        </item>
    </channel>
</rss>