<?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>ethui</title>
        <link>https://paragraph.com/@ethui</link>
        <description>An Ethereum toolkit</description>
        <lastBuildDate>Sat, 04 Apr 2026 02:09:01 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>ethui</title>
            <url>https://storage.googleapis.com/papyrus_images/9f94c90d5072bdcf43981c03de5567caffa91693cb3ce022233c27dad3378c7e.png</url>
            <link>https://paragraph.com/@ethui</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[ethui 1.13 - We're back]]></title>
            <link>https://paragraph.com/@ethui/ethui-1-13-we-re-back</link>
            <guid>NbQDTBk2CkJPlYsWMJh6</guid>
            <pubDate>Fri, 28 Feb 2025 16:18:40 GMT</pubDate>
            <description><![CDATA[We’re finally getting back in full force! 2025 will the year where we push hard to make ethui the most powerful and developer-friendly tool to use when building for web3. https://github.com/ethui/ethui/releases/tag/v1.12.0 The new release comes with some changes that have been brewing for some time:Revamped UIWe moved away from Mui’s Material UI into a shadcn based component library, and also took the chance to clean up and polish the entire UI. The end result is cleaner, snappier, and much m...]]></description>
            <content:encoded><![CDATA[<p>We’re finally getting back in full force!</p><p>2025 will the year where we push hard to make ethui the most powerful and developer-friendly tool to use when building for web3.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ethui/ethui/releases/tag/v1.12.0">https://github.com/ethui/ethui/releases/tag/v1.12.0</a></p><p>The new release comes with some changes that have been brewing for some time:</p><h2 id="h-revamped-ui" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Revamped UI</h2><p>We moved away from <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mui.com/material-ui/">Mui’s Material UI</a> into a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ui.shadcn.com/">shadcn</a> based component library, and also took the chance to clean up and polish the entire UI. The end result is cleaner, snappier, and much more enjoyable to use (and the code is greatly simplified too).</p><p>Specific adjustments have also been made for macOS users to get more of the native feel they’re expecting.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d0b105aae3b0a15adab22265529fb9d590ba0b7a663ff199d4af5817160c99d9.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e9da2686eb5710d6e6a9366528d0ec474fd5ded01d763bd008ce57f734cc232a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-proxy-contracts-are-now-support" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Proxy contracts are now support</h2><p>The contract explorer tool now supports all major standards for proxy contracts, by allowing you to interact with proxies using their implementation’s ABI rather than the proxy itself.</p><p>This work was built as a separate <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ethui/proxy-detect">proxy-detect</a> crate, which is itself a re-implementation of an <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/abipub/evm-proxy-detection">existing Typescript package</a>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/bb94485a1997d34719e7d5519daa12e214b4d884221ad6cb502c9bd1e12520ab.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-remote-anvil-instances" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Remote anvil instances</h2><p>A lot of changes and optimizations have been built to enable a rather powerful use case: you can now host your own <code>anvil</code> instances remotely, even using non-standard chain IDs, and ethui will properly sync with them in realtime, just like it did previously with local ones.</p><p>We at Subvisual have been using this feature internally across our web3 projects, by hosting our own private testnet for each project, and using ethui to connect to it.</p><h2 id="h-safer-and-faster-anvil-interactions" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Safer and faster anvil interactions</h2><p>Whenever you interact with an <code>anvil</code> chain, all your transactions will now be impersonated by default, all thanks to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://book.getfoundry.sh/reference/anvil/#custom-methods">anvil’s cheatcodes</a>, which we’ve incorporated into our transaction flow.</p><p>This means you can now use <code>Fast Mode</code> and skip dialogs and password checks, even when using your actual password-protected HD Wallet to test a contract.</p><p>Since you never end up decrypting your private key, or signing any message, this ends up as an even safer way than the default behavior.</p><h1 id="h-new-website-and-docs" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">New website &amp; docs</h1><p>Previously, the only written documentation were these blog posts. We’ve now compiled some of the main features and highlights into our own website:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethui.dev/docs">https://ethui.dev/docs</a></p><h2 id="h-become-a-user-contributor" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Become a user / contributor</h2><p>The new release can be downloaded from <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://ethui.dev/">our website</a>, or directly from <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ethui/ethui/releases/tag/v1.13.0">github’s releases</a>. You can also <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ethui/ethui">build directly from source</a>.</p><p>As always, feedback and contributions are most welcome!</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ethui/ethui/releases/tag/v1.13.0">https://github.com/ethui/ethui/releases/tag/v1.13.0</a></p>]]></content:encoded>
            <author>ethui@newsletter.paragraph.com (ethui)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/d9b93ef86fbb300889f203e8f928dfadbeb932e291fa1d4b28e0cf617dbd82b2.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[ethui 1.7 - forms]]></title>
            <link>https://paragraph.com/@ethui/ethui-1-7-forms</link>
            <guid>EVcTFkfHdTMmBfS3YxYI</guid>
            <pubDate>Wed, 08 May 2024 19:57:55 GMT</pubDate>
            <description><![CDATA[The new release brings along a very special feature: Contract interactions are now much easier thanks to our new form interaction tool. https://github.com/ethui/ethui/releases/tag/v1.7.0 ethui already allowed you, since a very early 0.3 version, to interact with arbitrary contracts as if you were on etherscan. This had the benefit of working fully locally, in private anvil chains, and more importantly, without requiring you to publish or verify your solidity source code anywhere One problem r...]]></description>
            <content:encoded><![CDATA[<p>The new release brings along a very special feature: Contract interactions are now much easier thanks to our new form interaction tool.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ethui/ethui/releases/tag/v1.7.0">https://github.com/ethui/ethui/releases/tag/v1.7.0</a></p><p>ethui already allowed you, since a very early 0.3 version, to interact with arbitrary contracts as if you were on etherscan. This had the benefit of working fully locally, in private anvil chains, and more importantly, without requiring you to publish or verify your solidity source code anywhere</p><p>One problem remained though. That interaction was awkward at best. Similarly to etherscan’s UI, you’re forced to juggle inline arrays and tuples anytime you want to interact with something slightly more complex.</p><h2 id="h-ethuiform" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">@ethui/form</h2><p>This <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.npmjs.com/package/@ethui/form">new package</a>, built primarily for our app, but usable by anyone on their own projects, renders a dynamic form based on a given ABI input.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ethui/demos/raw/main/1.7.0-form.mp4?loop=true&amp;autoplay=true?controls=true">https://github.com/ethui/demos/raw/main/1.7.0-form.mp4?loop=true&amp;autoplay=true?controls=true</a></p><p>The new form allows for much more complex use cases where it wouldn’t be feasible to manipulate complex fields in a single text box. We’re already using it internally to test merkle-tree based transactions, where a long proof must be submitted.</p><p>This is additionally powered by a second package, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.npmjs.com/package/@ethui/abiparse">@ethui/abiparse</a>, which handles some of the tedious work of parsing your raw input into valid transaction parameters.</p><p>As you may notice in the video, you can now type “1 ether”, or other subunits, and have it parsed into the correct <code>uint256</code> amount.</p><p>Ironically, this whole feature was initially a side-quest for what we were originally trying to achieve….</p><h2 id="h-transaction-editing" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Transaction editing</h2><p>After this release, the transaction preview dialog is now a transaction editing dialog, where you can see a similar form as the one in the contract interaction tool, and tweak your transaction params before actually submitting</p><p>Why, you ask? Well, in many cases, it’s a convenient way to see the simulation update in real-time, and provide you with information of how it would react to slightly different params.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ethui/demos/raw/main/1.7.0-tx-review.mp4?autoplay=true&amp;loop=true&amp;controls=true">https://github.com/ethui/demos/raw/main/1.7.0-tx-review.mp4?autoplay=true&amp;loop=true&amp;controls=true</a></p><h2 id="h-whats-next" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What’s next?</h2><p>Next up, we plan to redirect our attention back to indexing, taking the chance that reth has now released <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/gakonst/status/1786426191240679729">Execution Extensions</a>, which could make our work much more pleasant and efficient</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ethui/ethui">https://github.com/ethui/ethui</a></p>]]></content:encoded>
            <author>ethui@newsletter.paragraph.com (ethui)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/b76ded93864f3036b68585c41236eb2e1ed2785872cb4e6b0a71889ccc2a7844.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[ethui 1.6 - A new beginning]]></title>
            <link>https://paragraph.com/@ethui/ethui-1-6-a-new-beginning</link>
            <guid>SNFOYIIPQzDKVOo1TW0R</guid>
            <pubDate>Wed, 03 Apr 2024 18:55:48 GMT</pubDate>
            <description><![CDATA[The past few weeks have been particularly busy, but also quiet. Nonetheless, a new release is finally here. https://github.com/ethui/ethui/releases/tag/v1.6.0A new name?Long story short: a cease & desist from a project that has recently registered a trademark that created a conflict with our name. Being an open-source tool, and a rather young one at that, and without any legal structure in place we didn’t have any legal structure in place, it became a good opportunity for a change. It’s also ...]]></description>
            <content:encoded><![CDATA[<p>The past few weeks have been particularly busy, but also quiet. Nonetheless, a new release is finally here.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ethui/ethui/releases/tag/v1.6.0">https://github.com/ethui/ethui/releases/tag/v1.6.0</a></p><h2 id="h-a-new-name" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">A new name?</h2><p>Long story short: a cease &amp; desist from a project that has recently registered a trademark that created a conflict with our name. Being an open-source tool, and a rather young one at that, and without any legal structure in place we didn’t have any legal structure in place, it became a good opportunity for a change.</p><p>It’s also a good opportunity to do away with the “Wallet” part of the name. That quickly became a confusing bit, since our goal is not necessarily to be a direct competitor in the wallet space.</p><p>Our value proposition, at least for the moment, is not for the average user, but for the developers and power users who want better tooling to interface with the Ethereum ecosystem.</p><p>In short, we want to provide a powerful UI for Ethereum development and interaction (or any EVM-capable chain). So the name <code>ethui</code> came along.</p><h2 id="h-what-does-this-mean" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What does this mean?</h2><p>Not much, other than the name change itself.</p><ul><li><p><code>ethui.eth</code> is now our canonical ENS address (<code>iron-wallet.eth</code> is still ours, and both point to the same address, for backward compatibility)</p></li><li><p><code>https://iron-wallet.xyz</code> is now <code>https://ethui.dev</code></p></li><li><p>the new release of both the app and the browser extension went through the obligatory Find/Replace process</p></li></ul><p>As a side effect, if you’ve used a previous version of Iron Wallet, you may have to manually port your config over to the new version, or start again from the onboarding process. This should be as easy as:</p><pre data-type="codeBlock" text="# for linux
cd ~/.config
mv iron-wallet ethui

# for macos
cd ~/Library/Application\ Support
mv iron-wallet ethui
"><code># <span class="hljs-keyword">for</span> linux
cd <span class="hljs-operator">~</span><span class="hljs-operator">/</span>.config
mv iron<span class="hljs-operator">-</span>wallet ethui

# <span class="hljs-keyword">for</span> macos
cd <span class="hljs-operator">~</span><span class="hljs-operator">/</span>Library<span class="hljs-operator">/</span>Application\ Support
mv iron<span class="hljs-operator">-</span>wallet ethui
</code></pre><h2 id="h-what-about-concrete-progress" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What about concrete progress?</h2><p>Of course, we have a few of those, too!</p><h3 id="h-faster-alchemycom-sync" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Faster Alchemy.com sync</h3><p>The previous sync logic was somewhat poorly built, resulting in a huge delay between first adding a wallet, and seeing its mainnet transaction history.</p><p>The <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ethui/ethui/pull/609">new approach</a> speeds up the process considerably, while also prioritizing data requested explicitly by the UI.</p><h3 id="h-improved-simulations" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Improved simulations</h3><p>Transaction previews now show additional information such as ERC20 transfers, and the number of past known transactions to that address, which should help catch unintended transactions such as phishing attempts.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3883ef23f6c23d6f067a043b60aa391e096827b0e3cbc88087eab5f88d4e1291.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-improved-contract-interactions" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Improved contract interactions</h3><p>The built-in explorer and contract interaction tool now supports many broad use cases and argument types that were previously tricky to parse. This is largely thanks to the great work done in the recent <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/alloy-rs/core/tree/main/crates/dyn-abi">alloy-dyn-abi crate</a>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d2a1b87d8c1b29afe02930f2329ea2b3f0b9ca63f1b3f748c9e03c4d1ac70fa7.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-better-wallet-onboarding" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Better wallet onboarding</h3><p>The previous onboarding flow was limited, especially when it comes to wallet setup. Since wallet needs vary from user to user, it’s important to make the possibilities clear from the start.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3ec93a1affa899ae7c4827e7dcf0dca871abe31bf01accb0861903136c7b4a5c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>The new flow directly allows you to create as many wallets of as many types as you need, right from the start.</p><h3 id="h-icons-all-around" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Icons all around</h3><p>We added <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://effigy.im/">Effigy avatars</a>, chain icons, and token icons for well-known currencies, to enrich the UI and more easily identify things at a glance</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1e9dafed8d9bab5b0012e9261781b758399060ee727b83d9cbe63a88ce6b8385.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>There are many other incremental improvements, performance optimizations, and bug fixes, that you can check out on the release history.</p><p>Check out the wallet, or dive directly into the source code to contribute or make a feature request!</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethui.dev/">https://ethui.dev/</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ethui/ethui">https://github.com/ethui/ethui</a></p>]]></content:encoded>
            <author>ethui@newsletter.paragraph.com (ethui)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/daa82f0a713a1020a1b3159209929883dffa7ee97baa73483cfb505993e92940.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[ethui 1.1.1 - Ledger & Devtools]]></title>
            <link>https://paragraph.com/@ethui/ethui-1-1-1-ledger-devtools</link>
            <guid>NZiCzKDDOJGTaoOL3RZ3</guid>
            <pubDate>Fri, 17 Nov 2023 18:43:59 GMT</pubDate>
            <description><![CDATA[Recently, during ETH Lisbon, we quietly released 1.0.0. This was not your typical newsworthy 1.0 release, but rather a breaking-change for a tedious bugfix. This time, we’ve got some juice. Iron Wallet 1.1.1 brings three major functionalities, read on for the updates, or download the latest release: https://github.com/iron-wallet/iron/releases/tag/v1.1.1Ledger supportOne of the few things still forcing me to use other wallets was the need to use my hardware wallet—no more. Now USB ledgers are...]]></description>
            <content:encoded><![CDATA[<p>Recently, during <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethlisbon.org/">ETH Lisbon</a>, we quietly released 1.0.0. This was not your typical newsworthy 1.0 release, but rather a breaking-change for a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/iron/pull/482">tedious bugfix</a>.</p><p>This time, we’ve got some juice.</p><p>Iron Wallet 1.1.1 brings three major functionalities, read on for the updates, or download the latest release:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/iron/releases/tag/v1.1.1">https://github.com/iron-wallet/iron/releases/tag/v1.1.1</a></p><h2 id="h-ledger-support" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Ledger support</h2><p>One of the few things still forcing me to use other wallets was the need to use my hardware wallet—no more.</p><p>Now USB ledgers are fully supported as a signer on the wallet.</p><p>Keep in mind that it’s a fresh new feature, so some behaviors may be finicky, but since Ledgers themselves provide security, this is a safe feature to expose and iterate on.</p><p>When comparing to MetaMask’s ledger support, a few key advantages stand out:</p><ul><li><p>Easier to add multiple addresses (although you currently need to input the raw derivation path. We’ll improve that UX soon)</p></li><li><p>Transactions are not immediately rejected if you start one without having your ledger available. Instead, the review dialog will wait until your device is ready (unlocked &amp; with the Ethereum app open)</p></li></ul><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/video-demos/raw/main/1.1.0-ledger.mp4?controls=true&amp;autoplay=true&amp;loop=true">https://github.com/iron-wallet/video-demos/raw/main/1.1.0-ledger.mp4?controls=true&amp;autoplay=true&amp;loop=true</a></p><h2 id="h-devtools-panel" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Devtools panel</h2><p>One of the things we’ve wanted for a long time was the ability to debug RPC calls from a browser tab the same way we debug network requests: by having full access to them in the browser’s devtools, scoped to each tab.</p><p>That’s finally available today:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/video-demos/raw/main/1.1.0-devtools.mp4?controls=true&amp;autoplay=true&amp;loop=true">https://github.com/iron-wallet/video-demos/raw/main/1.1.0-devtools.mp4?controls=true&amp;autoplay=true&amp;loop=true</a></p><p>This task was also the result of our bounties published at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethlisbon.org/">ETH Lisbon</a>. congrats to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/PolpEdu">@PolpEdu</a> for getting the work going and winning our bounty!</p><h2 id="h-onboarding-flow" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Onboarding flow</h2><p>From now on, when running the Wallet for the first time, you’ll be greeted with a small setup screen that will walk you through some necessary steps. This includes mainly setting up an alchemy.com API key (required for mainnet indexing), and setting up the browser extension)</p><p>Like the previous feature, this was also spearheaded by a first-time contributor, our apprentice <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/pferreira101">Pedro Ferreira</a>!</p><h2 id="h-live-on-gitcoin-19" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Live on Gitcoin 19</h2><p>The latest Gitcoin round is now live, and Iron Wallet is up in the Web3 Open source category. so if the project has been of use to you, consider supporting it.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://explorer.gitcoin.co/#/round/424/0xd4cc0dd193c7dc1d665ae244ce12d7fab337a008/0xd4cc0dd193c7dc1d665ae244ce12d7fab337a008-94">https://explorer.gitcoin.co/#/round/424/0xd4cc0dd193c7dc1d665ae244ce12d7fab337a008/0xd4cc0dd193c7dc1d665ae244ce12d7fab337a008-94</a></p><p>Or just go say hi to us in DevConnect &amp; <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/walletuncon">WalletUncon</a>. We don’t bite.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://iron-wallet.xyz/">https://iron-wallet.xyz/</a></p>]]></content:encoded>
            <author>ethui@newsletter.paragraph.com (ethui)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/6996e8db6fcf92bc0cac291685328dcefccf0b934033b08d8331bdcdc449d317.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[ethui 0.7.0 - ETH Lisbon]]></title>
            <link>https://paragraph.com/@ethui/ethui-0-7-0-eth-lisbon</link>
            <guid>LXGPt3nUptJLqSzRjo9H</guid>
            <pubDate>Thu, 02 Nov 2023 22:42:20 GMT</pubDate>
            <description><![CDATA[The past couple of months have been focused on ironing out (pun very much intended) a lot of bugs and nuances in the application, and making the new version feel as smooth and intuitive as possible. Along the way, there are some great quality-of-life features now available in 0.7.0. Read on to know more! https://github.com/iron-wallet/iron/releases/tag/v0.7.0First of all - ETH Lisbon & BountiesThe event starts tomorrow, hosting hundreds of builders for 48 hours of non-stop hacking. We’ll be t...]]></description>
            <content:encoded><![CDATA[<p>The past couple of months have been focused on ironing out (pun very much intended) a lot of bugs and nuances in the application, and making the new version feel as smooth and intuitive as possible.</p><p>Along the way, there are some great quality-of-life features now available in 0.7.0. Read on to know more!</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/iron/releases/tag/v0.7.0">https://github.com/iron-wallet/iron/releases/tag/v0.7.0</a></p><h1 id="h-first-of-all-eth-lisbon-and-bounties" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">First of all - ETH Lisbon &amp; Bounties</h1><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethlisbon.org/">The event</a> starts tomorrow, hosting hundreds of builders for 48 hours of non-stop hacking. We’ll be there. Iron will have a workshop on the first day, and we invite participants to use it when building their own projects.</p><p>Additionally, we also snuck in a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethlisbon.iron-wallet.xyz">few bounties ourselves,</a> so if you’re looking to hack something that can directly contribute to the next release, this is your chance to be paid along the way.</p><h3 id="h-future-bounties" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Future bounties</h3><p>ETH Lisbon will be a testing ground for this model. We have plans to open up additional bounties, for various levels and skill sets, on platforms such as <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.onlydust.xyz/">OnlyDust</a>.</p><h1 id="h-whats-new-in-070" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What’s new in 0.7.0?</h1><h3 id="h-http-api" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">HTTP API</h3><p>One of the long-running tasks we discussed early on was the ability to interact with the wallet in a headless/automated way.</p><p>You now have access to a set of HTTP endpoints for some select features:</p><ul><li><p>Submitting transactions (going through the same confirmation flow as a browser interaction would)</p></li><li><p>Simulating transactions</p></li><li><p>Querying the name &amp; ABI of contracts found within your filesystem</p></li></ul><p>As a basic example, here’s how you would simulate a transaction:</p><pre data-type="codeBlock" text="curl \
  -H &quot;Content-Type: application/json&quot; \
  -d &apos;{&quot;chainId&quot;: 31337, &quot;request&quot;: {
    &quot;from&quot;: &quot;0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266&quot;,
    &quot;to&quot;: &quot;0x5fbdb2315678afecb367f032d93f642f64180aa3&quot;,
    &quot;data&quot;: &quot;0x6a627842000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266&quot;,
    &quot;gasLimit&quot;: 669107
}}&apos; \
  http://localhost:9003/iron/transactions/simulate | jq
"><code>curl \
  -H <span class="hljs-string">"Content-Type: application/json"</span> \
  -d '<span class="hljs-punctuation">{</span><span class="hljs-attr">"chainId"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">31337</span><span class="hljs-punctuation">,</span> <span class="hljs-attr">"request"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
    <span class="hljs-attr">"from"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"</span><span class="hljs-punctuation">,</span>
    <span class="hljs-attr">"to"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"0x5fbdb2315678afecb367f032d93f642f64180aa3"</span><span class="hljs-punctuation">,</span>
    <span class="hljs-attr">"data"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"0x6a627842000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266"</span><span class="hljs-punctuation">,</span>
    <span class="hljs-attr">"gasLimit"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">669107</span>
<span class="hljs-punctuation">}</span><span class="hljs-punctuation">}</span>' \
  http<span class="hljs-punctuation">:</span><span class="hljs-comment">//localhost:9003/iron/transactions/simulate | jq</span>
</code></pre><p>You specify the target chain, and the transaction parameters (as you would for a regular transaction). This can be coupled with tools such as <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://book.getfoundry.sh/cast/">cast</a> to provide automatic ABI encoding, although that’s something we intend to provide in the future. As a result, you get a response that includes all details about the execution:</p><pre data-type="codeBlock" text="{
  &quot;simulationId&quot;: 1,
  &quot;gasUsed&quot;: 151346,
  &quot;blockNumber&quot;: 4,
  &quot;success&quot;: true,
  &quot;trace&quot;: [
    {
      &quot;callType&quot;: &quot;CALL&quot;,
      &quot;from&quot;: &quot;0x0000000000000000000000000000000000000000&quot;,
      &quot;to&quot;: &quot;0x0000000000000000000000000000000000000000&quot;,
      &quot;value&quot;: &quot;0x0&quot;
    }
  ],
  &quot;logs&quot;: [
    {
      &quot;address&quot;: &quot;0x5fbdb2315678afecb367f032d93f642f64180aa3&quot;,
      &quot;topics&quot;: [
&quot;0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef&quot;,
&quot;0x0000000000000000000000000000000000000000000000000000000000000000&quot;,
&quot;0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266&quot;,
&quot;0x0000000000000000000000000000000000000000000000000000000000000005&quot;
      ],
      &quot;data&quot;: &quot;0x&quot;
    }
  ],
  &quot;exitReason&quot;: &quot;Stop&quot;,
  &quot;returnData&quot;: &quot;0x&quot;
}
"><code><span class="hljs-punctuation">{</span>
  <span class="hljs-attr">"simulationId"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">1</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"gasUsed"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">151346</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"blockNumber"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">4</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"success"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">true</span></span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"trace"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>
    <span class="hljs-punctuation">{</span>
      <span class="hljs-attr">"callType"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"CALL"</span><span class="hljs-punctuation">,</span>
      <span class="hljs-attr">"from"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"0x0000000000000000000000000000000000000000"</span><span class="hljs-punctuation">,</span>
      <span class="hljs-attr">"to"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"0x0000000000000000000000000000000000000000"</span><span class="hljs-punctuation">,</span>
      <span class="hljs-attr">"value"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"0x0"</span>
    <span class="hljs-punctuation">}</span>
  <span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"logs"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>
    <span class="hljs-punctuation">{</span>
      <span class="hljs-attr">"address"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"0x5fbdb2315678afecb367f032d93f642f64180aa3"</span><span class="hljs-punctuation">,</span>
      <span class="hljs-attr">"topics"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>
<span class="hljs-string">"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"</span><span class="hljs-punctuation">,</span>
<span class="hljs-string">"0x0000000000000000000000000000000000000000000000000000000000000000"</span><span class="hljs-punctuation">,</span>
<span class="hljs-string">"0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266"</span><span class="hljs-punctuation">,</span>
<span class="hljs-string">"0x0000000000000000000000000000000000000000000000000000000000000005"</span>
      <span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>
      <span class="hljs-attr">"data"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"0x"</span>
    <span class="hljs-punctuation">}</span>
  <span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"exitReason"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Stop"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"returnData"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"0x"</span>
<span class="hljs-punctuation">}</span>
</code></pre><p>This is already being used internally by Iron to power the transaction review dialog, where you can debug the outgoing logs before confirming a transaction.</p><h3 id="h-transaction-view" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Transaction View</h3><p>The UI now includes full details of a past transaction, with a JSON view included that shows you the decoded calldata, as long as an ABI for that contract is known.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/92f874aada1ec8cbd8509a1768ea7726a08424903d839b7d377d4e1f984f7c3d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-fast-mode" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Fast mode</h3><p>As you can see in the sidebar on the previous screenshot, you can easily toggle the new “Fast mode”.</p><p>What is “Fast mode” you now ask? It toggles the ability to skip transaction &amp; signature confirmations. This only affects anvil networks + plaintext wallets, for security reasons, but it does allow for very fast feedback loops when building a website, while still allowing the ability to debug specific transactions when needed.</p><h2 id="h-and-much-more" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">And much more</h2><p>This release is by far our largest in terms of work hours and merged contributions. Most of those are the quiet type, such as bugfixes, and incremental UI improvements.</p><p>But don’t let that fool you, see the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/iron/releases">changelog</a> for yourself. And do try out the wallet!</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://github.com/iron-wallet/iron">http://github.com/iron-wallet/iron</a></p>]]></content:encoded>
            <author>ethui@newsletter.paragraph.com (ethui)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/0d195bce65ed917316f87758e5ed00dc66823128d3fffa147158c572ad5a2947.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[ethui 0.6.0 - Going multi-chain]]></title>
            <link>https://paragraph.com/@ethui/ethui-0-6-0-going-multi-chain</link>
            <guid>muAksZX6AZbWAdcFmCm1</guid>
            <pubDate>Mon, 28 Aug 2023 05:59:04 GMT</pubDate>
            <description><![CDATA[Since our Rust x Eth talk was canceled by the airline gods, we bring you the next best thing: A fresh new release. https://github.com/iron-wallet/iron/releases/tag/v0.6.0 0.6.0 brings a bunch of new features, as well as several performance and bundle size improvements to the browser extension. Read on for the main highlightsBut first, a big thank you!To all those who contributed to the ongoing Gitcoin #GG18, where Iron Wallet is performing way better than we could ever anticipate ❤️Multi-chai...]]></description>
            <content:encoded><![CDATA[<p>Since our <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://rusteth.paradigm.xyz/">Rust x Eth</a> talk was canceled by the airline gods, we bring you the next best thing: A fresh new release.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/iron/releases/tag/v0.6.0">https://github.com/iron-wallet/iron/releases/tag/v0.6.0</a></p><p>0.6.0 brings a bunch of new features, as well as several performance and bundle size improvements to the browser extension. Read on for the main highlights</p><h2 id="h-but-first-a-big-thank-you" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">But first, a big thank you!</h2><p>To all those who contributed to the ongoing <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://explorer.gitcoin.co/#/round/424/0x222ea76664ed77d18d4416d2b2e77937b76f0a35/0x222ea76664ed77d18d4416d2b2e77937b76f0a35-31">Gitcoin #GG18</a>, where Iron Wallet is performing way better than we could ever anticipate ❤️</p><h2 id="h-multi-chain-routing" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Multi-chain routing</h2><p>A big limitation of most wallets is the existence of a single global connection: you can only be in a single chain, and account, across all the dApps you&apos;re using.</p><p>Developers face this daily: developing on MetaMask + <code>anvil</code> means we can&apos;t keep a separate <code>mainnet</code> workflow on a separate tab, unless we&apos;re okay with dealing with constant popups asking us to switch back and forth. With the growth of L2s, this is increasingly a user-facing problem too.</p><p>For Iron, that ends today.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/video-demos/raw/main/0.6.0-chain-affinity.mp4?controls=true&amp;autoplay=true&amp;loop=true">https://github.com/iron-wallet/video-demos/raw/main/0.6.0-chain-affinity.mp4?controls=true&amp;autoplay=true&amp;loop=true</a></p><p>With the new chain router, each domain name stays connected to whichever chain it wants. You can still manually switch individual ones through the &quot;Connections&quot; page of the wallet, and you can opt-in to the previous behavior by setting domains to use the &quot;Global&quot; network.</p><h3 id="h-eip-6963" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">EIP-6963</h3><p>We now support the recent Multi Injected Provider Discovery spec. This one was courtesy of the folks over at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/wagmi-dev">wagmi</a>, who authored <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/wagmi-dev/mipd">mipd</a> and made the work as trivial as it could possibly be.</p><p>This EIP is fairly new, and its effects won&apos;t be fully felt until most major wallets and SDKs support it, but it will eventually allow multiple extension providers to co-exist in the same browser.</p><p>This was a big limitation for Iron and other extensions and imposes a big blocker to wallet diversity</p><h2 id="h-livenet-contract-tracking" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Livenet contract tracking</h2><p>Via a new form in the Contracts tab, and the Etherscan API key you can now include in the settings, you’re now able to manually add arbitrary contracts for each network.</p><h2 id="h-lazy-extension-connections" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Lazy extension connections</h2><p>Our old version of the &quot;Connections&quot; tab would display every single browser tab, regardless of whether the Web3 connection was used or not.</p><p>This caused visual noise, resource waste, and was also a source of confusion for some users. It is now fixed, by ensuring the connection is lazily set up. Only pages that actually trigger a Web3 request will show up.</p><h2 id="h-some-chromium-nonsense-finally-dealt-with" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Some chromium nonsense finally dealt with 🎉</h2><p>It’s a good feeling when a long-standing bug is finally squashed. Especially when it turns out to be the browser itself at fault.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/iron/pull/356">https://github.com/iron-wallet/iron/pull/356</a></p><p>The bug in question is also considered in the MetaMask codebase, and would cause the Iron extension to sporadically fail to communicate with the desktop app. The workaround has been applied, and provider connections are now fully stable.</p><h2 id="h-whats-next" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What’s next?</h2><p>Building. and then some more building. Hoping that next release is when we finally get to focus on transaction simulations!</p>]]></content:encoded>
            <author>ethui@newsletter.paragraph.com (ethui)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/afd58cefeb97499e6c448723db41459e692b054985dee2a78edd470a2b7c1dd4.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[ethui 0.5.0 - Impersonation]]></title>
            <link>https://paragraph.com/@ethui/ethui-0-5-0-impersonation</link>
            <guid>YrX1Uxc3ESLMo52RfrCn</guid>
            <pubDate>Fri, 11 Aug 2023 21:22:03 GMT</pubDate>
            <description><![CDATA[The latest release includes a lot of improvements to the UI, and also one of the main base features we were building towards: account impersonation. There are also a few backend performance improvements that we stealth-released in 0.4.0 a few weeks ago. https://github.com/iron-wallet/iron/releases/tag/v0.5.0Account impersonationI’m a big fan of impersonator.xyz. But most of our development work is done locally, through Foundry tests and anvil nodes, where this external tool can’t be reached. ...]]></description>
            <content:encoded><![CDATA[<p>The latest release includes a lot of improvements to the UI, and also one of the main base features we were building towards: <strong>account impersonation</strong>.</p><p>There are also a few backend performance improvements that we stealth-released in 0.4.0 a few weeks ago.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/iron/releases/tag/v0.5.0">https://github.com/iron-wallet/iron/releases/tag/v0.5.0</a></p><h2 id="h-account-impersonation" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Account impersonation</h2><p>I’m a big fan of impersonator.xyz. But most of our development work is done locally, through Foundry tests and anvil nodes, where this external tool can’t be reached.</p><p>But in fact, the job done by this tool is surprisingly simple. It’s nothing more than a glorified <code>anvil_impersonateAccount</code> , but needing to go through the WalletConnect Protocol and an awkward experience of manually pasting URLs. Mainly because the wallets we use are not prepared for such behaviors, primarily needed by developers and security researchers.</p><p>In fact, it’s eye-opening to learn that a surprising number of people in the space are not even aware that impersonation is a possibility, and of what can be done with it: locally reproduce the UI state of someone else’s account.</p><p>This is an incredibly powerful feature for anyone working on a protocol frontend, where it’s crucial to have reproducibility of whatever bugs our users report.</p><p>The only caveat, as you may have guessed, is that this has minimal use for websites that require signing a message at connection time.</p><p>But for those that don’t, such as Uniswap, here’s what you can do:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/video-demos/raw/main/0.5.0-impersonator.mp4?autoplay=true&amp;loop=true&amp;controls=true">https://github.com/iron-wallet/video-demos/raw/main/0.5.0-impersonator.mp4?autoplay=true&amp;loop=true&amp;controls=true</a></p><h2 id="h-new-logo" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">New logo</h2><p>This was quietly released during the crazy EthCC week but is only now being made official, and broadly available in all components (extension icon, taskbar icon, and overall branding).</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/cfd15c128448b89e7d6cc2f7ae2eade6d1f5887a63853a6d25453e3ee8ae470f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-revamped-ui" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Revamped UI</h2><p>Our lead front-end has been focused on providing as much of a desktop-native experience as possible. That includes improving on the UI itself and going through the slow &amp; painful process of doing OS-level improvements.</p><p>The new sidebar makes for a much more compact and comfortable design. And those of you running macOS may notice some additional tweaks that make Iron feel increasingly more like a native macOS / Linux app rather than a website.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c19878519799b605860bd27116919a140697567a782b508aee69145d21b3d3e9.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-onboarding-flow" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Onboarding flow</h2><p>If you now open the wallet for the first time, you’ll be greeted with a new onboarding flow, where you’ll have the opportunity to go through some basic settings that are crucial to know about, and were previously hidden away (unless you’ve been following all these posts)</p><p>This flow will still suffer more iterations in the future, and we hope this can help reduce the barrier to first getting started with the app.</p><h2 id="h-whats-next" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What’s next?</h2><p>The impersonation feature is an important milestone, as it means we’re 50% done with our goal of providing the main features we showcased at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethglobal.com/showcase/prank-wallet-cgnb3">ETHGlobal Lisbon</a>. The second part (transaction simulation) will expand even more the possibilities of what you can do.</p><p>We also plan to be in <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://rusteth.paradigm.xyz/">San Francisco with fellow ETH / Rust developers</a>, so hit us up if you’re there! We’d be happy to hear any constructive feedback, and get our product in as many developer hands as possible.</p>]]></content:encoded>
            <author>ethui@newsletter.paragraph.com (ethui)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/c6e68a3cebde2d1efa86ec822f1791f305cca0e35415c5ca4d3c9c77c4d11717.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Instant Foundry ABI explorer]]></title>
            <link>https://paragraph.com/@ethui/instant-foundry-abi-explorer</link>
            <guid>6qOMWhr3ptuIuYkVOA2v</guid>
            <pubDate>Fri, 04 Aug 2023 17:14:00 GMT</pubDate>
            <description><![CDATA[While working on mainnet, a lot of people rely on Etherscan to view & interact with contracts. That’s in large part due to their built-in explorer, which gives us a handy way to Read/Write to any contract that has previously been verified. For local development (via Foundry, Hardhat, or others) you’re out of options though. Wether you’re writing the contracts, or the UI for your protocol, the ability to explore and interact with your local contracts similarly to Etherscan would be a killer fe...]]></description>
            <content:encoded><![CDATA[<p>While working on mainnet, a lot of people rely on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/">Etherscan</a> to view &amp; interact with contracts. That’s in large part due to their built-in explorer, which gives us a handy way to Read/Write to any contract that has previously been verified.</p><p>For local development (via <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://getfoundry.sh/">Foundry</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://hardhat.org/">Hardhat</a>, or others) you’re out of options though.</p><p>Wether you’re writing the contracts, or the UI for your protocol, the ability to explore and interact with your local contracts similarly to Etherscan would be a killer feature.</p><p>So we did it. And this is how.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/video-demos/raw/main/0.4.1-forge-abis.mp4?controls=true&amp;autoplay=true&amp;loop=true">https://github.com/iron-wallet/video-demos/raw/main/0.4.1-forge-abis.mp4?controls=true&amp;autoplay=true&amp;loop=true</a></p><h2 id="h-filesystem-tracking" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Filesystem tracking</h2><p>The magic happens in our <code>iron-forge</code> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/iron/tree/3a33e1c2f70c169f34d7a9f6b5b365b1f457f7ba/crates/forge">crate</a>.</p><p>Since this behavior relies on filesystem monitoring, we make opt-in rather than opt-out. This is due to potential concerns users may have with us snooping into their filesystem, and because we need to give control over which path to scan:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/50bb9f1092348a9daf8eca52becdf8bba6b4b26ce5d9f703d3e7a38a8dc7fd81.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Enabling the ABI watcher, along with a watch path, will cause Iron to listen to filesystem events under that path.</p><p>We’re interested only in events related to Foundry’s compilation outputs. By default, those have the format <code>&lt;project&gt;/out/&lt;Contract&gt;.sol/&lt;Contract&gt;json</code></p><p>So whenever a file matching such a path is modified/deleted, we immediately update our in-memory index.</p><p>We also do some additional parsing, to ensure the file is of the expected format (and not a false-positive), and to extract ABI information.</p><h2 id="h-on-chain-bytecode" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">On-chain bytecode</h2><p>Iron already was anvil-aware since the very first version.</p><p>We track all transaction traces, to not only construct your account state (balances, transaction history) but also to detect newly deployed smart contracts.</p><p>Doing this via traces allows us to detect not only plain contract deploy transactions but also internal ones triggering new `CREATE` and `CREATE2` opcodes. With <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/gakonst/ethers-rs">`ethers-rs`</a>, this becomes trivial:</p><pre data-type="codeBlock" text="async fn expand_trace(trace: Trace, provider: &amp;Provider&lt;Http&gt;) -&gt; Result&lt;Vec&lt;Event&gt;&gt; {
    let events = match trace {
        // detecting contract deploys
        Trace {
            action: Action::Create(Create { from, value, .. }),
            result: Some(Res::Create(CreateResult { address, .. })),
            ..
        } =&gt; {
            // a contract deploy was detected!
            ContractDeployed {
                address,
                code: provider.get_code(address, None).await.ok(),
            }
            .into(),
        }
        
        // other detectors...
"><code>async fn expand_trace(trace: Trace, provider: <span class="hljs-operator">&#x26;</span>Provider<span class="hljs-operator">&#x3C;</span>Http<span class="hljs-operator">></span>) <span class="hljs-operator">-</span><span class="hljs-operator">></span> Result<span class="hljs-operator">&#x3C;</span>Vec<span class="hljs-operator">&#x3C;</span>Event<span class="hljs-operator">></span><span class="hljs-operator">></span> {
    let events <span class="hljs-operator">=</span> match trace {
        <span class="hljs-comment">// detecting contract deploys</span>
        Trace {
            action: Action::Create(Create { <span class="hljs-keyword">from</span>, value, .. }),
            result: Some(Res::Create(CreateResult { <span class="hljs-keyword">address</span>, .. })),
            ..
        } <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            <span class="hljs-comment">// a contract deploy was detected!</span>
            ContractDeployed {
                <span class="hljs-keyword">address</span>,
                code: provider.get_code(<span class="hljs-keyword">address</span>, None).await.ok(),
            }
            .into(),
        }
        
        <span class="hljs-comment">// other detectors...</span>
</code></pre><p>Notice we also run <code>eth_getCode</code>. This is used to later match on-chain contracts with the corresponding ABIs we compiled above. But how can we do that if all we have is bytecode?</p><h2 id="h-matching-abis-naive-version" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Matching ABIs - Naive version</h2><p>What Etherscan does is something too complex for our use case: they expect to have the full source code, exact compiler version used, and full constructor arguments given during deployment. By running the exact same compilation &amp; deployment process, they should end up with the same bytecode, thus verifying that the ABI for the given source does indeed match the contract.</p><p>Instead, we started with a much simpler solution: we already have the final bytecode from the Foundry output:</p><pre data-type="codeBlock" text="{
  &quot;abi&quot;: [
     ...
  ],
  &quot;bytecode&quot;: {
    &quot;object&quot;: &quot;0x60a06040523480156...&quot;,
  },
  &quot;deployedBytecode&quot;: {
    &quot;object&quot;: &quot;0x60806040523480156...&quot;,
  }
 }
"><code>{
  "abi": [
     ...
  ],
  <span class="hljs-string">"bytecode"</span>: {
    "<span class="hljs-selector-tag">object</span>": <span class="hljs-string">"0x60a06040523480156..."</span>,
  },
  "deployedBytecode": {
    "<span class="hljs-selector-tag">object</span>": <span class="hljs-string">"0x60806040523480156..."</span>,
  }
 }
</code></pre><p>The <code>deployedBytecode</code> the field should match the on-chain code we got from <code>eth_getCode</code>, right?</p><p><strong>Narrator</strong>: it would not.</p><p>Oh... how so?</p><h2 id="h-many-different-bytecodes" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Many different bytecodes</h2><p>You may have heard about Initialization bytecode and Runtime bytecode (or other variations of those names).</p><p>That&apos;s because, to deploy a contract on EVM, a snippet of bytecode is executed, which will return the runtime code to the EVM. Constructor arguments also need to be included somehow, even though they&apos;re not stored as part of the final bytecode itself.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://monokh.com/posts/ethereum-contract-creation-bytecode">This great article</a> provides a complete explanation of this process if you&apos;re curious.</p><p>When Foundry builds our contracts, it doesn&apos;t have any context of what the constructor arguments will be. And similarly, it doesn&apos;t know the final value of <code>immutable</code> slots, since those depend on those same arguments.</p><p>Here&apos;s a complete example of a small contract, and its corresponding output bytecode:</p><pre data-type="codeBlock" text="pragma solidity ^0.8.13;

contract Immutable {
    uint256 constant foo2 = 100;
    uint256 immutable foo;

    constructor(uint256 _foo) {
        foo = _foo;
    }

    function get() external view returns (uint256) {
        return foo;
    }
}
"><code><span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.13;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Immutable</span> </span>{
    <span class="hljs-keyword">uint256</span> <span class="hljs-keyword">constant</span> foo2 <span class="hljs-operator">=</span> <span class="hljs-number">100</span>;
    <span class="hljs-keyword">uint256</span> <span class="hljs-keyword">immutable</span> foo;

    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> _foo</span>) </span>{
        foo <span class="hljs-operator">=</span> _foo;
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">get</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>) </span>{
        <span class="hljs-keyword">return</span> foo;
    }
}
</code></pre><pre data-type="codeBlock" text="0x6080604052348015600f57600080fd5b506004361060285760003560e01c80636d4ce63c14602d575b600080fd5b7f000000000000000000000000000000000000000000000000000000000000000060405190815260200160405180910390f3fea26469706673582212206f04587d461cb9f9fe7b19bf7852e50cc53895de0dac97be2d89329df50e452c64736f6c63430008140033
"><code></code></pre><p>Notice the suspicious string of <code>00</code>s somewhere in there? Those correspond to the 256-bits where the value for <code>foo</code> will eventually go, once the <code>constructor</code> is executed.</p><p>This is a nice trick by Solidity to create more gas-optimized contracts, but it does mess a bit with our ability to match against on-chain bytecode.</p><p>In the end, it turns out a simple &amp; elegant solution already existed on the Foundry codebase itself (thanks to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/msolomon44">Matt Solomon</a> who shared it):</p><pre data-type="codeBlock" text="pub fn diff_score(a: &amp;[u8], b: &amp;[u8]) -&gt; f64 {
    let cutoff_len = usize::min(a.len(), b.len());
    if cutoff_len == 0 {
        return 1.0;
    }

    let a = &amp;a[..cutoff_len];
    let b = &amp;b[..cutoff_len];
    let mut diff_chars = 0;
    for i in 0..cutoff_len {
        if a[i] != b[i] {
            diff_chars += 1;
        }
    }
    diff_chars as f64 / cutoff_len as f64
}
"><code>pub fn diff_score(a: <span class="hljs-operator">&#x26;</span>[u8], b: <span class="hljs-operator">&#x26;</span>[u8]) <span class="hljs-operator">-</span><span class="hljs-operator">></span> f64 {
    let cutoff_len <span class="hljs-operator">=</span> usize::min(a.len(), b.len());
    <span class="hljs-keyword">if</span> cutoff_len <span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span> {
        <span class="hljs-keyword">return</span> <span class="hljs-number">1.0</span>;
    }

    let a <span class="hljs-operator">=</span> <span class="hljs-operator">&#x26;</span>a[..cutoff_len];
    let b <span class="hljs-operator">=</span> <span class="hljs-operator">&#x26;</span>b[..cutoff_len];
    let mut diff_chars <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
    <span class="hljs-keyword">for</span> i in <span class="hljs-number">0</span>..cutoff_len {
        <span class="hljs-keyword">if</span> a[i] <span class="hljs-operator">!</span><span class="hljs-operator">=</span> b[i] {
            diff_chars <span class="hljs-operator">+</span><span class="hljs-operator">=</span> <span class="hljs-number">1</span>;
        }
    }
    diff_chars <span class="hljs-keyword">as</span> f64 <span class="hljs-operator">/</span> cutoff_len <span class="hljs-keyword">as</span> f64
}
</code></pre><p>This will compare two bytecode snippets, and compute how different they are. Since contract logic is typically large enough to out-weight the bytecode length of all immutables, it&apos;s sufficient to consider any contract with a difference of &lt; 10% to be a match. As described in the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/foundry-rs/foundry/blob/02e430c20fb7ba1794f5cabdd7eb73182baf4e7e/common/src/contracts.rs#L96-L114">original code</a>, this should only be expected to fail for contracts that are essentially only immutable variables, which are unlikely to be found in real-world usage.</p><h1 id="h-next-up" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Next up</h1><p>One glaring omission we don’t support yet are Proxy contracts. Those will be a challenge on their own, but one we expect to tackle pretty soon. Stay tuned!</p>]]></content:encoded>
            <author>ethui@newsletter.paragraph.com (ethui)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/2a8cfc26dcf5148f3bcff701d6020ce2f12f70fefc4e062036a314ac60c346ba.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[ethui 0.3.1 - Mainnet]]></title>
            <link>https://paragraph.com/@ethui/ethui-0-3-1-mainnet</link>
            <guid>ifOvqmOwr6lZ6fwmRiy1</guid>
            <pubDate>Wed, 05 Jul 2023 15:24:10 GMT</pubDate>
            <description><![CDATA[We’ve been casting a fresh batch of features, and are now ready to announce the third release of Iron Wallet. This release is focused on supporting live networks, particularly Ethereum mainnet. While our main target is developer tooling, we also believe it’s crucial to support regular interactions and use Iron as our daily driver for Ethereum. This release is what finally allows for that https://github.com/iron-wallet/iron/releases/tag/v0.3.1HD Walletshttps://github.com/iron-wallet/video-demo...]]></description>
            <content:encoded><![CDATA[<p>We’ve been casting a fresh batch of features, and are now ready to announce the third release of Iron Wallet.</p><p>This release is focused on supporting live networks, particularly Ethereum mainnet.</p><p>While our main target is developer tooling, we also believe it’s crucial to support regular interactions and use Iron as our daily driver for Ethereum. This release is what finally allows for that</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/iron/releases/tag/v0.3.1">https://github.com/iron-wallet/iron/releases/tag/v0.3.1</a></p><h1 id="h-hd-wallets" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">HD Wallets</h1><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/video-demos/raw/main/0.3.0-hd-wallet-setup.mp4?autoplay=true&amp;controls=true&amp;loop=true">https://github.com/iron-wallet/video-demos/raw/main/0.3.0-hd-wallet-setup.mp4?autoplay=true&amp;controls=true&amp;loop=true</a></p><p>The most critical feature to allow us to migrate from other wallets into Iron is the ability to import the same seed phrase, so we get access to the same set of addresses.</p><p>This one is important to get right because a big part of the security aspects hinges on how well we protect this secret.</p><p>That’s why we took the time to investigate how other wallets implement this, and what our own approach should be. What cryptographic primitives should we favor? What attack vectors should we look out for?</p><p>After a period of research, where we dug into the codebases of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/MetaMask">MetaMask</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/floating/frame">Frame.sh</a>, and other wallets, we arrived at an implementation that uses state-of-the-art cryptographic primitives (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://en.wikipedia.org/wiki/Argon2">Argon2</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.cryptopp.com/wiki/XChaCha20Poly1305">XChaCha20Poly1305</a>), as well as OS-level memory protection, provided mainly by the Rust <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.rs/secrets/latest/secrets/">secrets</a> crate.</p><p>On this iteration, we held off on allowing users to generate their own seed within the app. That feature will be dealt with on its own later, as it has its own security concerns to take into account.</p><p>For now, though, the setup flow already looks comfortable enough to migrate existing seeds:</p><h2 id="h-transaction-indexing" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Transaction indexing</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a6e95323bd25a3700e5509ff83bc21aec413bcc7f7e866c5a36fb826ab949204.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Getting real-time and historical data from blockchains is a real problem. Blockchains are great for reaching consensus on state, but terrible at allowing arbitrary queries to that same state. Simple operations such as “Give me the transaction history for this wallet” or “What ERC20 tokens am I holding?” are actually complex to implement, because they mostly rely on 3rd party indexers or bespoke clients to crunch the data for you</p><p>In this first iteration, we rely on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://alchemy.com/">alchemy.com</a> as our data provider for live networks.</p><p>You first need to add an Alchemy API key to your wallet settings. After that, transaction and asset indexing should happen automatically and periodically for all your connected wallets.</p><p>There are two main points for improvement here in the future:</p><ul><li><p>Support for additional providers. We do not want vendor lock-in</p></li><li><p>Better heuristics for updating addresses, while being mindful of rate limits</p></li></ul><h2 id="h-new-version-notices" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">New version notices</h2><p>A simple but effective feature: from now on, the UI will notify you of new releases as soon as they happen!</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c8dd857cdbe6684174aaa0f446a856b903cf67837757318d6f6f49432a11473d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-future-plans-and-branding" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Future plans and branding</h2><p>We’re already actively working on the next batch of updates, including transaction <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/iron/pull/275">simulation</a>. But a lot of the recent work has been done outside of Github: we’ve been working with one of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://subvisual.com">Subvisual’s</a> designers to finally improve our branding and image.</p><p>Expect news here on the very next release, particularly in the form of a brand-new logo. Our Minecraft placeholder has run its course.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/iron">https://github.com/iron-wallet/iron</a></p>]]></content:encoded>
            <author>ethui@newsletter.paragraph.com (ethui)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/56a45dbd3dacd795cf60ee9c569e872ad3a243af93e6123fb1c894635fab61dc.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[ethui 0.2.0 - UI level-up]]></title>
            <link>https://paragraph.com/@ethui/ethui-0-2-0-ui-level-up</link>
            <guid>dN3NcfsiQWlEWoJVlxZG</guid>
            <pubDate>Thu, 01 Jun 2023 11:50:14 GMT</pubDate>
            <description><![CDATA[Gm. Around a week after the first public release, here’s a new batch of updates. This time, the focus is a significantly improved UI, but there are also some interesting updates regarding secure wallets. https://github.com/iron-wallet/iron/releases/tag/v0.2.1Address AliasesYou can now right-click any address and assign it an alias. This should greatly improve readability, and help you understand which accounts or contracts you’re interacting with. (#203) https://github.com/iron-wallet/video-d...]]></description>
            <content:encoded><![CDATA[<p>Gm.</p><p>Around a week after the first public release, here’s a new batch of updates. This time, the focus is a significantly improved UI, but there are also some interesting updates regarding secure wallets.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/iron/releases/tag/v0.2.1">https://github.com/iron-wallet/iron/releases/tag/v0.2.1</a></p><h2 id="h-address-aliases" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Address Aliases</h2><p>You can now right-click any address and assign it an alias. This should greatly improve readability, and help you understand which accounts or contracts you’re interacting with. (#203)</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/video-demos/raw/main/0.2.0-alias.mp4?autoplay=true&amp;loop=true&amp;controls=true">https://github.com/iron-wallet/video-demos/raw/main/0.2.0-alias.mp4?autoplay=true&amp;loop=true&amp;controls=true</a></p><h2 id="h-command-bar" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Command Bar</h2><p><code>Ctrl+K</code> will likely be the main navigation tool within the app. Quick network &amp; account switching is now a breeze. (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/iron/pull/182">#182</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/iron/pull/207">#207</a>)</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/video-demos/raw/main/0.2.0-kbar.mp4?autoplay=true&amp;loop=true&amp;controls=true">https://github.com/iron-wallet/video-demos/raw/main/0.2.0-kbar.mp4?autoplay=true&amp;loop=true&amp;controls=true</a></p><h2 id="h-secure-wallets-json-keystore" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Secure wallets (JSON Keystore)</h2><p>The initial release only supported a single wallet type: a plaintext mnemonic, meant purely for testing purposes and not fit for storing actual funds.</p><p>Two steps were missing to enable asset security and confidence when interacting with mainnet: secure wallets, and an external indexer.</p><p>This is the first step towards that. While JSON Keystores are not the most popular, they’re a solid foundation on the way to broader support. Having this means we now have first-class support for multiple types of wallets (essential for good abstractions), proper logic for handling wallet unlock through dialogs, and a lot of the foundations needed to properly store secrets in memory (more on this in a future, more technical, blog post).</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/video-demos/raw/main/0.2.0-json-keystore.mp4?autoplay=true&amp;loop=true&amp;controls=true">https://github.com/iron-wallet/video-demos/raw/main/0.2.0-json-keystore.mp4?autoplay=true&amp;loop=true&amp;controls=true</a></p><h2 id="h-copy-to-clipboard" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Copy to clipboard</h2><p>A small but effective detail. Clicking on various elements (addresses, ETH amounts, transaction hashes, …) will now copy its raw value to your clipboard.</p><h2 id="h-viem-and-smaller-bundle" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Viem &amp; smaller bundle</h2><p>We migrated from <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.ethers.org/v5/">ethers.js</a> to the newer <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://viem.sh/">viem.sh</a>. This significantly reduces the UI’s bundle size of the UI build. (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/iron/pull/204">#204</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/iron/pull/205">#205</a>).</p><h2 id="h-whats-next" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What’s next</h2><p>Here are some of the main highlights of what we’re already working on:</p><ul><li><p>mainnet data indexing. initially through <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.alchemy.com/">alchemy.com</a> but other providers to come later</p></li><li><p>Support for encrypted mnemonic wallets</p></li><li><p>A proper logo</p></li></ul><p>All updates will be done via <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/iron-wallet.eth">Mirror</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/iron">Github</a>, so keep an eye out, and feel free to create issues if anything comes up!</p>]]></content:encoded>
            <author>ethui@newsletter.paragraph.com (ethui)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/4595fb83fb5aebe73fa70d284549e93c9e2f39ddc28c554c3f9199bb5c7fc651.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Announcing ethui]]></title>
            <link>https://paragraph.com/@ethui/announcing-ethui</link>
            <guid>VuMfiV4SD41FMa6H4Hqu</guid>
            <pubDate>Thu, 25 May 2023 10:29:59 GMT</pubDate>
            <description><![CDATA[We are launching a developer-centric crypto wallet to give web3 developers the tools they deserve. https://github.com/iron-wallet/iron/releases/tag/v0.1.0TL;DRIf you’re a developer or any type of Ethereum power user, this will likely interest you. Iron is a crypto wallet built, from the ground up, with development & debugging in mind. It bundles together features that, as of now, exist only as loose CLI tools and 3rd party websites and, guess what? It all runs locally on your device, with ful...]]></description>
            <content:encoded><![CDATA[<p>We are launching a developer-centric crypto wallet to give web3 developers the tools they deserve.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/iron/releases/tag/v0.1.0">https://github.com/iron-wallet/iron/releases/tag/v0.1.0</a></p><h1 id="h-tldr" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">TL;DR</h1><p>If you’re a developer or any type of Ethereum power user, this will likely interest you.</p><p>Iron is a crypto wallet built, from the ground up, with development &amp; debugging in mind. It bundles together features that, as of now, exist only as loose CLI tools and 3rd party websites and, guess what? It all runs locally on your device, with fully open-source code.</p><p>The initial version is already incredibly more powerful than alternatives as a companion to the<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://getfoundry.sh/"> Foundry</a> toolkit. Read on for the list of current features and to get updated on what’s next.</p><p>Our aim is to make this as community-driven as possible, so your feedback and suggestions are the most important thing right now.</p><h1 id="h-yet-another-wallet" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Yet another wallet?</h1><p>This project was born out of frustrations with existing tooling.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1f0de23e6e6041fdeafc6439330186e2f61ddce9d0aa55f6328c95c1052e7662.png" alt="Yes, we&apos;re aware of the irony" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Yes, we&apos;re aware of the irony</figcaption></figure><p>When working with diverse teams, where not everyone is an EVM expert – think frontend developers, product managers, or newcomers to the blockchain space – it becomes clear that a lot of tooling already exists, but often in a very loose and low-level way, accessible mostly to the experts.</p><p>We want to address this problem by making all of these tools accessible directly from the wallet, with the speed and intuitiveness we’ve come to expect from other tools. Our wallet is what sits between us and a blockchain. As developers, we need it to be helpful, not a hindrance.</p><p>The current offering of wallets is unfortunately subpar in several ways. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://metamask.io/">MetaMask</a> suffers from various UX issues, and from being stuck in the browser’s sandbox. Snaps are mostly a band-aid with a fair number of limitations themselves. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://frame.sh/">Frame</a> proves the advantage of an OS-level wallet and brings the welcome addition of OmniChain routing, but the advantages mostly stop there.</p><p>Not to throw any shade on projects such as MetaMask – huge respect for their team and for all their contributions, a lot of which are powering this project as well – but we can and should do better on what comes to developer tools.</p><h2 id="h-what-does-it-do" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What does it do?</h2><p>First of all, in good ol’ Rust fashion, it’s blazingly fast. Here’s a NFT minting demo running on <code>anvil</code>:</p><div data-type="youtube" videoId="dq-lue-9Z9E">
      <div class="youtube-player" data-id="dq-lue-9Z9E" style="background-image: url('https://i.ytimg.com/vi/dq-lue-9Z9E/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=dq-lue-9Z9E">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><p>Other than basic wallet features, the bulk of the work so far was focused on a tight integration with <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://getfoundry.sh/">Foundry</a>, specifically:</p><ol><li><p>Instant detection of chain restarts/reverts. Fully re-syncs local data (transaction history, balances, and most importantly, nonces);</p></li><li><p>Instant detection of smart contract deploys. This works via transaction traces, so even internal transaction deploys are indexed;</p></li><li><p>Filesystem monitoring, to automatically index known ABIs found within foundry projects;</p></li><li><p>Built-in contract explorer &amp; interaction UI (built from same ABIs);</p></li><li><p>No password-protection or confirmation popups when using anvil with a development wallet;</p></li></ol><div data-type="youtube" videoId="cKFzV7HKd7c">
      <div class="youtube-player" data-id="cKFzV7HKd7c" style="background-image: url('https://i.ytimg.com/vi/cKFzV7HKd7c/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=cKFzV7HKd7c">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><p>It also provides a native desktop experience (e.g. keyboard shortcuts, minimize to system tray, contextual menus) and most importantly … dark mode!</p><h2 id="h-soon" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Soon</h2><p>There are two key features we want to launch on the next iteration:</p><ul><li><p>Support for encrypted (not plaintext) wallets. Initially from a JSON keystore file, but with other formats, such as GPG &amp; hardware wallets, soon to come. The initial work for this is <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/iron/pull/185">nearly ready</a>;</p></li><li><p>Integration with a 3rd party indexer for mainnet/testnet data.</p></li></ul><p>Next up, there’s the project we hacked at<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethglobal.com/showcase/prank-wallet-cgnb3"> ETHGlobal Lisbon</a>: the ability to impersonate wallets, and locally simulate transactions, and inspect for side effects before actually submitting. This is powered by the<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/bluealloy/revm"> REVM</a>. It provides the same capabilities as<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://tenderly.co/"> Tenderly</a> and<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://impersonator.xyz/"> Impersonator</a>, right from your wallet.</p><p>There’s also a lot of work to be done on standards, both implementing them — looking at you,<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-6963"> EIP-6963</a> — and working on improved ones.</p><p>There’s a lot more to be done after this, but we’re not committed to any specific roadmap, especially because we want help from the community on deciding what’s important.</p><h2 id="h-whos-building-this" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Who’s building this?</h2><p>I’ve (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://linktr.ee/naps62">@naps62</a>) started this as a side project over the past couple of months.</p><p>I’m a blockchain developer with over a decade of coding experience: building products, mentoring teams, and obsessing over type safety. I am also an Associate Security Researcher at<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://spearbit.com/"> Spearbit</a>.</p><p>Both<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.lightshift.capital/"> Lightshift Capital</a> and the<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://subvisual.com/"> Subvisual</a> community have provided tons of help in the form of time, code contributions and feedback. There were many contributions and helpful discussions from various peers, but a shoutout in particular to<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/gabrielgpoca"> @gabrielgpoca</a> and<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/pvgo80"> @pvgo</a>.</p><h1 id="h-can-i-help" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Can I help?</h1><p>Of course! All help is welcome.</p><p>The next set of features will mainly be informed by community feedback. The project is and will always be free, open-source and community-drive. The most important step right now is to hear from you, whether that’s through a feature request, a bug fix, or just a message to one of us.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/iron-wallet/iron">https://github.com/iron-wallet/iron</a></p>]]></content:encoded>
            <author>ethui@newsletter.paragraph.com (ethui)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/a1d789104d179090ccb685c1e562886fdae3309b9419e65bef9f1e4a9c83abd2.png" length="0" type="image/png"/>
        </item>
    </channel>
</rss>