<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[LightClients.org]]></title><description><![CDATA[Home of Kevlar, a light client for the Ethereum blockchain.]]></description><link>https://lightclients.org/</link><image><url>https://lightclients.org/favicon.png</url><title>LightClients.org</title><link>https://lightclients.org/</link></image><generator>Ghost 5.19</generator><lastBuildDate>Mon, 20 Apr 2026 01:22:21 GMT</lastBuildDate><atom:link href="https://lightclients.org/blog/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Docker support]]></title><description><![CDATA[<p>Released Kevlar v0.1.9 with two new provers, minor fixes and docker support. You don&apos;t have to spin up Kevlar every time on boot anymore, instead you can run Kevlar using docker which will start automatically at boot <code>docker run -p 8546:8546 --name kevlar shresthagrawal/kevlar</code></p>]]></description><link>https://lightclients.org/blog/docker-support/</link><guid isPermaLink="false">63508be50e99ec5ea20adf15</guid><category><![CDATA[Kevlar]]></category><category><![CDATA[Changelog]]></category><dc:creator><![CDATA[Shresth Agrawal]]></dc:creator><pubDate>Tue, 18 Oct 2022 08:36:00 GMT</pubDate><content:encoded><![CDATA[<p>Released Kevlar v0.1.9 with two new provers, minor fixes and docker support. You don&apos;t have to spin up Kevlar every time on boot anymore, instead you can run Kevlar using docker which will start automatically at boot <code>docker run -p 8546:8546 --name kevlar shresthagrawal/kevlar</code>.</p><p>Thanks to <a href="https://twitter.com/thefrozenfire">@thefrozenfire</a> for adding the Docker support!</p>]]></content:encoded></item><item><title><![CDATA[Inner workings of the RPC proxy]]></title><description><![CDATA[<p>After releasing Kevlar, we received several questions regarding the inner workings of the RPC proxy. Kevlar is made up of two main components: the sync client, and the RPC proxy. The RPC Proxy is implemented as a separate library, &#x201C;Patronum&#x201D; (<a href="https://github.com/shresthagrawal/patronum">github.com/shresthagrawal/patronum</a>).</p><p>Patronum takes as input</p>]]></description><link>https://lightclients.org/blog/inner-workings-of-the-rpc-proxy/</link><guid isPermaLink="false">635085400e99ec5ea20aded0</guid><category><![CDATA[Kevlar]]></category><category><![CDATA[Patronum]]></category><dc:creator><![CDATA[Shresth Agrawal]]></dc:creator><pubDate>Sat, 15 Oct 2022 19:46:00 GMT</pubDate><content:encoded><![CDATA[<p>After releasing Kevlar, we received several questions regarding the inner workings of the RPC proxy. Kevlar is made up of two main components: the sync client, and the RPC proxy. The RPC Proxy is implemented as a separate library, &#x201C;Patronum&#x201D; (<a href="https://github.com/shresthagrawal/patronum">github.com/shresthagrawal/patronum</a>).</p><p>Patronum takes as input a trusted blockHash from the sync client and some untrusted RPC endpoints. It exposes RPC endpoints such that every RPC response is verified against the trusted blockHash. Let&apos;s look into how Patronum verifies every RPC call using just a blockHash.</p><p>For simplicity, let&apos;s assume that all RPC calls are made for the current blockNumber. Regarding an RPC call about the block itself (eth_getBlockByNumber/Hash), we can fetch the block from the untrusted RPC and verify that the hash of the block matches the known trusted blockHash.</p><p>Once we have verified a block we have expanded our knowledge to everything in that block: stateRoot, transactionTrieRoot, transactionReciptRoot, previousBlockHash, etc. We will use this to verify other RPC calls.</p><p>For calls such as eth_getBalance, getCode, getTransactionCount, and getStorageAt, we can call the eth_getProof on the untrusted RPC to get the Merkle inclusion proof and verify it against the known stateRoot. Implementing eth_call and eth_estimateGas is the tricky part.</p><p>A simple solution is to simulate the call on a local EVM with a custom stateManager. Every time the stateManager is called for the nonce, balance, code, or contract storage, we call eth_getProof on the untrusted RPC and perform the Merkle inclusion proof to the known stateRoot.</p><p>This will be extremely slow for RPC calls accessing multiple states. Instead of loading the state one by one, per request, we load everything at the start and then simulate the call. This allows us to batch eth_getProof calls and reduce the number of necessary RPC interactions.</p><p>We call eth_createAccessList on the untrusted RPC to generate a list of the accounts and contract slots that will be accessed. Then, we batch-call eth_getProof for every item in the list, verify the proofs, load it into the stateManager, and simulate the call on the local EVM.</p><p>For eth_getTransactionRecipt, we fetch the block with all the transactions and verify the transactionTrieRoot. For calls regarding past blocks, we recursively roll back by verifying the previous block using the previousBlockHash present in the current block, and so on.</p><p>We were able to build a trustless RPC server on top of an untrusted RPC using just the blockHash that we obtained from the sync client. We do not need any custom RPC endpoints. Minor details have been left out for simplicity.</p><p>The exact implementation is available at <a href="https://github.com/shresthagrawal/patronum/blob/main/src/provider.ts">github.com/shresthagrawal/patronum/blob/main/src/provider.ts</a>. To complete the picture, we need to obtain the &#x201C;trusted blockHash&#x201D; in a trustless manner. For that, there are numerous methods, outlined in our paper <a href="https://arxiv.org/pdf/2209.08673.pdf">arxiv.org/pdf/2209.08673.pdf</a>.</p>]]></content:encoded></item><item><title><![CDATA[Announcing Kevlar]]></title><description><![CDATA[<p>Today, we are announcing &quot;Kevlar&quot; (<a href="https://github.com/shresthagrawal/kevlar">github.com/shresthagrawal/kevlar</a>), a tool that makes Metamask, or any RPC-based wallet, completely trustless! Kevlar first runs a light client to quickly sync with the beacon chain and then starts a local RPC proxy that you can add to your wallet.</p><p>Currently</p>]]></description><link>https://lightclients.org/blog/announcing-kevlar/</link><guid isPermaLink="false">635081a60e99ec5ea20ade8c</guid><category><![CDATA[Kevlar]]></category><category><![CDATA[News]]></category><dc:creator><![CDATA[Shresth Agrawal]]></dc:creator><pubDate>Fri, 14 Oct 2022 01:41:00 GMT</pubDate><content:encoded><![CDATA[<p>Today, we are announcing &quot;Kevlar&quot; (<a href="https://github.com/shresthagrawal/kevlar">github.com/shresthagrawal/kevlar</a>), a tool that makes Metamask, or any RPC-based wallet, completely trustless! Kevlar first runs a light client to quickly sync with the beacon chain and then starts a local RPC proxy that you can add to your wallet.</p><p>Currently most wallets rely on trusted full nodes which makes them extremely centralized. Kevlar lets you run a light-client-based RPC proxy on your device that can be added to any RPC-based wallet. Now every RPC call made by your wallet is verified using Merkle Inclusion proofs.</p><p>Kevlar supports two syncing methods: Light Sync, based on the sync protocol specified by the Ethereum specification, and Optimistic Sync, (100x faster) based on the construction from our recent work <a href="https://arxiv.org/abs/2209.08673">arxiv.org/abs/2209.08673</a>. Benchmarks can be accessed here <a href="https://github.com/shresthagrawal/poc-superlight-client">github.com/shresthagrawal/poc-superlight-client</a>.</p><p>Getting Kevlar up and running is as simple as <code>npm install -g @lightclients/kevlar &amp;&amp; kevlar</code>. By default, it uses the optimistic light client with predefined public RPC endpoints and provers. Command line instructions are available at <a href="https://github.com/shresthagrawal/kevlar#start-the-rpc-proxy">github.com/shresthagrawal/kevlar#start-the-rpc-proxy</a>.</p><p>Feel free to create a GitHub issue, or reach out to me, if you encounter any problems. We plan on adding full RPC support, ZK-based sync, and support for rollup chains, like Optimism and Arbitrum. Let&apos;s make blockchain wallets trustless, as they should be!</p><p>For those interested in learning more about the RPC proxy see <a href="https://lightclients.org/blog/inner-workings-of-the-rpc-proxy/">here</a>.</p>]]></content:encoded></item></channel></rss>