<?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>Will McTighe</title>
        <link>https://paragraph.com/@will-mctighe</link>
        <description>Building Web3 Analytic</description>
        <lastBuildDate>Wed, 08 Apr 2026 21:33:50 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Will McTighe</title>
            <url>https://storage.googleapis.com/papyrus_images/d6fb47f413ff6d46ed077aa344df4b5bf2c1ad0764be514ceeddcae2196191ec.png</url>
            <link>https://paragraph.com/@will-mctighe</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[What DeFi Retail Investors Need to Understand About Impermanent Loss]]></title>
            <link>https://paragraph.com/@will-mctighe/what-defi-retail-investors-need-to-understand-about-impermanent-loss</link>
            <guid>yxPV8zI3UBfBEEiYjl1o</guid>
            <pubDate>Fri, 27 May 2022 02:44:30 GMT</pubDate>
            <description><![CDATA[TL:DR; passive retail LPs, could be losing A LOT of $$$ due to impermanent loss so they NEED to understand it.Alice the Liquidity ProviderPut yourself in the shoes of Alice, a long term believer in Crypto. Alice bought a lot of ETH and USDC early on and wanted to support these growing protocols, so she deposited her assets in Uniswap as a Liquidity Provider (LP) back in 2018. She left them there as she watched the price of ETH 5x. Alice was delighted (as we all would be!), she had 5x’d her mo...]]></description>
            <content:encoded><![CDATA[<p><strong><em>TL:DR; passive retail LPs, could be losing A LOT of $$$ due to impermanent loss so they NEED to understand it.</em></strong></p><h2 id="h-alice-the-liquidity-provider" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Alice the Liquidity Provider</h2><p>Put yourself in the shoes of Alice, a long term believer in Crypto. Alice bought a lot of ETH and USDC early on and wanted to support these growing protocols, so she deposited her assets in Uniswap as a Liquidity Provider (LP) back in 2018. She left them there as she watched the price of ETH 5x. Alice was delighted (as we all would be!), she had 5x’d her money on ETH right? WRONG. She had actually lost up to 25% of her capital vs. HODLing and not LPing.</p><p>Alice believed the same misconception that many of us do. She believed that providing liquidity in an AMM was like HODLing her asset with interest from transaction fees. Alice believed she would ride the upside when her tokens increased in value. And she did, but a lot less than if she had HODLed.</p><p>Alice could be you, or me, and the reason she lost money is because she didn’t understand impermanent loss. And it is not Alice’s fault. Impermanent loss is a deeply technical concept that most people don’t see in their day-to-day. There are many great technical explanations of impermanent loss like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://medium.com/auditless/how-to-calculate-impermanent-loss-full-derivation-803e8b2497b7">this</a> but in this blog, we wanted to provide a more practical explanation.</p><h2 id="h-what-is-impermanent-loss-il" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What is Impermanent Loss (IL)?</h2><p><strong>Impermanent loss occurs when the prices of your tokens diverge whilst in a liquidity pool</strong>. It would be more appropriate to call it divergence loss.</p><p>It occurs because AMM liquidity pools have to maintain a fixed ratio (often 50% / 50%) of tokens (e.g. ETH-USDC) in a pool. For example, if we want to deposit 1 ETH @ $3,000, we will also have to deposit 3000 USDC @ $1 - $3,000 of each token.</p><p>Assuming no transaction fees (for now), IL can roughly be defined as:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a1ab60a2fd27b32e5a85e23dd0d2dca23baa2ae31bfdd7c652739eade604e8d0.png" alt="Impermanent loss is the difference in value between holding your assets and then LPing them" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Impermanent loss is the difference in value between holding your assets and then LPing them</figcaption></figure><p>By LPing, Alice’s payoff is maximized when the relative price of her tokens remains roughly constant, as you can see in Figure 1. The x axis shows the amount of price deviation. In other words, as prices change, Alice’s payoff begins to suffer. It is only at 0% price change (no divergence!) that Alice reaches the maximum payoff. Note that with transaction fees, the curve in Figure 1 will be shifted upwards.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0eba565ad327c2a4068fe523995c1dcb3fe5df1fd9ef7a37762ef3ae16849447.png" alt="Figure 1: Impermanent Loss Curve under Uniswap&apos;s trading function without transaction fees" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Figure 1: Impermanent Loss Curve under Uniswap&apos;s trading function without transaction fees</figcaption></figure><h2 id="h-how-does-impermanent-loss-occur" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">How does impermanent loss occur?</h2><p><strong>TL:DR; When relative prices change, the # of each token changes so when we withdraw, we get back a different # of each token than we deposited.</strong></p><ol><li><p>When we deposit tokens (e.g. ETH + USDC) in a liquidity pool, we receive LP tokens.</p></li><li><p>LP tokens give us the right to a proportion of the assets in the liquidity pool.</p></li><li><p>Liquidity pools are required by their trading function (e.g. Uniswap uses the Constant Product Market Maker, x * y = k) to keep a constant ratio of each asset (i.e. 50% ETH, 50% USDC).</p></li><li><p>When the relative price of assets change, the number of each token in the pool changes to keep that constant ratio.</p></li><li><p>When we withdraw, we get back a different number of ETH and USDC than we deposited, which, excluding fees, will be worth less.</p></li></ol><p>Let’s look at an example of this process below.</p><h3 id="h-eth-usdc-example-no-transaction-fees" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">ETH-USDC Example (No Transaction Fees)</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b6aaa116457ce1a0e2d9db8dbc543e35af178a71be3dbb0ccfa790c76d002f26.png" alt="Figure 2: Impermanent Loss in Numbers" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Figure 2: Impermanent Loss in Numbers</figcaption></figure><ul><li><p><strong>Scene-setting</strong> - in this example, the price of ETH doubles from $100 to $200, and USDC remains constant at $1. We start with $1,000 of assets, $500 of ETH (5 ETH @ $100) and $500 USDC (500 USDC @ $1). The AMM uses the Uniswap constant product trading function.</p></li><li><p>The <strong>HODL Scenario</strong> is straightforward, we now own $1,500 of assets, $1,000 of ETH, (5 ETH @ $200) and $500 USDC, the same as before.</p></li><li><p>In the <strong>LP Scenario</strong>, the pool must hold 50% of each asset, so as the ETH price increases, the pool sells ETH and adds USDC. This means we can withdraw $1414: $707 of ETH (3.54 ETH @ $200) and $707 USDC (707 USDC @ $1).</p></li><li><p>Other AMMs, such as Balancer can hold a different ratio of assets in each pool. Take their <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.balancer.fi/#/pool/0x0b09dea16768f0799065c475be02919503cb2a3500020000000000000000001a">60% WETH, 40% DAI pool</a> for example. This ratio is defined by their trading function.</p></li></ul><p>Impermanent loss as a % of pool TVL is a rough approximation for what fees should be, over a fixed time period, for an LP to be profitable.</p><h2 id="h-why-is-it-important" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Why is it important?</h2><p><strong>TL:DR;…</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/598f7dbd27a53e4cfa12c760976415852fa3f33f4ac361f56705d39534c6e99b.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>If impermanent loss is greater than transaction fees on average, then it is not rational to provide liquidity, assuming no other benefits (e.g. liquidity mining, hedging). It can be hard to notice though because your assets may be increasing in absolute value, but losing relative value (to HODL).</p><p>How can LPing remain profitable?</p><ol><li><p><strong>Become more sophisticated / active</strong> - easier said than done when you’re competing with institutional market makers!</p></li><li><p><strong>Protocol liquidity incentives</strong> can make up for impermanent loss.</p></li></ol><p>This is important because Crypto needs profitable market making to retain composability. For example, Axie Infinity gave many people access to capital because they could swap AXS for ETH. They could only do this because LPs provided AXS-ETH. If the LPs didn’t think it would be profitable for them, then they wouldn’t LP their tokens, reducing composability.</p><p><em>Well aren’t liquidity incentives enough?</em> Yes in the short term, but that is not a long term viable solution. It is a cash plug, like VC funding for unprofitable SaaS businesses. The question remains whether there will be a space for passive LPs in Crypto Market Making.</p><h3 id="h-how-bad-is-it" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">How bad is it?</h3><p><strong>TL:DR; not bad for small price changes, very bad for large price changes. If ETH 5x’s vs. USDC, you lose 25% of your capital vs. HODL.</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/cb3a61078a3bf56cf1b092d0e6c4102f171ff02756d9054e1fa74e37847c82fe.png" alt="Figure 3 " blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Figure 3</figcaption></figure><p>The key takeaway is that impermanent loss is very small for small deviations in price (barely noticeable for +/- 5%) but starts to get quite large (1% of profit) as relative prices move +/- 25%. With meaningful price drift, these losses can be quite large.This takes us onto the next obvious question...</p><h2 id="h-for-which-token-pairs-is-impermanent-loss-most-likely" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">For which token pairs is impermanent loss most likely?</h2><p><strong>TL:DR; when token prices are volatile and uncorrelated - shitcoin + token (e.g. APE-ETH) and token + stablecoin (e.g. ETH-USDC) pairs.</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/526a33eb0268f42866729abe6d4d78feefe3ed2e2d0ae79f3dfb9e4e2a88fac4.png" alt="Tokens = deep liquidity tokens (e.g. ETH, BTC, SOL); Shitcoins = early stage / low liquidity tokens" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Tokens = deep liquidity tokens (e.g. ETH, BTC, SOL); Shitcoins = early stage / low liquidity tokens</figcaption></figure><p><strong>Most impermanent loss?</strong></p><ul><li><p><strong>Shitcoin + token (e.g. LOOKS-ETH)</strong> pairs with a highly volatile token that increases/decreases in magnitudes of value.</p></li></ul><p><strong>Second most impermanent loss?</strong></p><ul><li><p><strong>Token + stablecoin pairs (e.g. ETH-USDC)</strong> with a fixed value stablecoin, and a token that changes in value. IL is much lower than for shitcoin + token pairs, given the price movement.</p></li></ul><p>Existing AMMs use higher fees for more volatile assets to compensate LPs for the higher IL risk.</p><h3 id="h-how-do-i-check-my-impermanent-loss" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">How do I check my impermanent loss?</h3><p>Our simple <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.google.com/spreadsheets/d/1d1I97IRxqsns7w5QJGNn58TccMb3bbVrcHz1xzPlIu4/edit#gid=176440463">google sheet</a>, or if you want a better UX, tools like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dailydefi.org/tools/impermanent-loss-calculator/">DailyDefi</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://whiteboardcrypto.com/impermanent-loss-calculator/">WhiteboardCrypto</a>.</p><h2 id="h-so-what-should-i-do" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">So what should I do?</h2><p><strong><em>TL:DR; don’t passively LP assets indefinitely without thinking about it.</em></strong></p><p>Like every investment strategy, providing liquidity has a specific payoff function. There is no free lunch, and in AMMs, if the relative price goes up or down a lot, we can lose money. If it stays roughly constant, we can make a lot of money. We just want DeFi retail users to understand that. There are several strategies to managing this risk including Uniswap V3, Perps, Option Vaults &amp; our favorite, RMMs like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://primitive.xyz/">Primitive</a>.</p><p><em>Want to talk more about on-chain market making and derivatives? Please reach out!</em></p>]]></content:encoded>
            <author>will-mctighe@newsletter.paragraph.com (Will McTighe)</author>
        </item>
        <item>
            <title><![CDATA[Tutela - an Ethereum and Tornado Cash Anonymity Detection Tool]]></title>
            <link>https://paragraph.com/@will-mctighe/tutela-an-ethereum-and-tornado-cash-anonymity-detection-tool</link>
            <guid>Xms9SvK3OxXj7VPozFyu</guid>
            <pubDate>Tue, 08 Feb 2022 21:09:04 GMT</pubDate>
            <description><![CDATA[Tutela is an Ethereum and Tornado Cash anonymity detection tool, built as a response to a Tornado Cash Community Grant. It allows Ethereum and Tornado Cash users to see when they potentially revealed themselves on-chain by:Linking their distinct Ethereum addressesLinking their Tornado Cash deposits and withdrawalsSince our last update, we’ve added three new features:Diff2Vec, a Machine Learning approach to clustering Ethereum addresses to find more potentially connected Ethereum addresses.A h...]]></description>
            <content:encoded><![CDATA[<p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://tutela.xyz">Tutela</a> is an Ethereum and Tornado Cash anonymity detection tool, built as a response to a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://torn.community/t/funded-bounty-anonymity-research-tools/1437/23">Tornado Cash Community Grant</a>. It allows Ethereum and Tornado Cash users to see when they potentially revealed themselves on-chain by:</p><ol><li><p>Linking their distinct Ethereum addresses</p></li><li><p>Linking their Tornado Cash deposits and withdrawals</p></li></ol><p>Since our <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0xCb4B8F4810188fCBe96C06ccf8A763eb49f56a29/53FgqDUq-xjtyozgydYzM9Ms9lNY-D-rNT8iupoMHNY">last update</a>, we’ve added three new features:</p><ol><li><p><strong>Diff2Vec, a Machine Learning</strong> <strong>approach</strong> <strong>to clustering Ethereum addresses</strong> to find more potentially connected Ethereum addresses.</p></li><li><p><strong>A history of potentially revealing transactions for each address</strong>, so users can see when they may have compromised their privacy.</p></li><li><p>A <strong>live data feed</strong> updating with new Ethereum and Tornado Cash transactions.</p></li></ol><p>For the nitty gritty details you can check out the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://arxiv.org/pdf/2201.06811.pdf">Tutela white paper</a>.</p><h3 id="h-diff2vec-a-machine-learning-algorithm" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Diff2Vec, a Machine Learning Algorithm</h3><p>Initial users gave us feedback that often no Ethereum addresses were associated with their input address. This makes sense because we were only using the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/WillMcTighe/status/1475564100717621252">deposit address reuse (DAR) heuristic</a> to link Ethereum addresses. DAR searches for very specific behavior (e.g. interacting with centralized exchanges), meaning that most Ethereum addresses show no results - it found c.2.5m Ethereum clusters from &gt;180m Ethereum addresses.</p><p>To supplement DAR, we implemented Diff2Vec. It projects each Ethereum address to a point in a low-dimensional vector space based on who it transacts with. In this vector space, <em>addresses belonging to the same entity should be close together in Euclidean distance</em>. This allows Tutela to show k-results for every input address. The potential downside is that it is highly unlikely all k-results are connected to the input address. There is a tradeoff between quality and quantity.</p><h3 id="h-transaction-reveal-data" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Transaction Reveal Data</h3><p>We’ve recently added a new piece of functionality - a <strong>history of potentially revealing transactions for each address</strong>. This shows when a user potentially made revealing transactions and the type of reveal. More on the different Ethereum reveals <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/WillMcTighe/status/1475564099568381960">here</a> and Tornado Cash reveals <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/WillMcTighe/status/1475540231403323393">here</a>.</p><p>After clicking the transactions tab on the landing page, a user can input an Ethereum address to see historical potentially revealing transactions over time.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/07a8eae32fcd3a5e388806de726eb2ab9c56c09332810f1fa1cea19951fbf59e.png" alt="Figure 1: Tutela transaction page when searching an Ethereum address. This address is also a Tornado Cash user." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Figure 1: Tutela transaction page when searching an Ethereum address. This address is also a Tornado Cash user.</figcaption></figure><p>Figure 1 shows the potential reveals by this address. On the left hand side, the user is given raw statistics about potential revealing behavior. On the right hand side, the user is shown when the annotated reveals occurred.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/eeba5fabaf8d87eafb3c70a65da941567398876c7fd2acfb546af71057b5f5f6.png" alt="Figure 2: History of Potentially Revealing Transactions" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Figure 2: History of Potentially Revealing Transactions</figcaption></figure><p>By scrolling down (Figure 2), the user can see the transaction hashs associated with these reveals and look them up on Etherscan.</p><h2 id="h-analysis-how-accurate-is-tutela" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Analysis - How Accurate is Tutela?</h2><h3 id="h-ethereum-clustering" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Ethereum Clustering</h3><p>We can measure the quality of address clusters using a “test set” of known clustered addresses. It is hard to find “ground truth” data in this space but we obtained a data set from (Beres’ et al., 2021) where 1,028 clusters of addresses (average size of 4.0 ± 3.6 Externally Owned Addresses (EOA) per cluster) are derived from ENS names. Admittedly, this is not an unbiased test set but does suffice as a good measure of Tutela’s generalization.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8cad78adbbdcb3a231c62920169b31cf241d51ed1b47682c9a09190d4717dc99.png" alt="Figure 3: Plot of the recall of held-out address clusters through ENS reveals using deposit address reuse (DAR), diff2vec (NODE), and the combination of both (BOTH). A higher recall represents a better heuristic." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Figure 3: Plot of the recall of held-out address clusters through ENS reveals using deposit address reuse (DAR), diff2vec (NODE), and the combination of both (BOTH). A higher recall represents a better heuristic.</figcaption></figure><p>We are interested in “recall” or the ability of a heuristic or algorithm to recover the clusters in the test set. We do not consider precision on purpose as it does not make sense to penalize a model for finding clusters outside of those in the test set.</p><p>DAR alone has a recall of 39.4% with NODE (Diff2Vec) at 37.8%, two percent lower than DAR. However, as shown above, when DAR and NODE are combined, total recall increases to 44.8%. This suggests that the types of clusters found by DAR and NODE have diversity.</p><h3 id="h-tornado-cash-anonymity-set-auditor" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Tornado Cash Anonymity Set Auditor</h3><p>In October 2021 there were 97.3k Tornado Cash equal user deposits, Tutela found 42.8k were potentially compromised: 18.6K from the address match reveal, 102 from the unique gas price reveal, 18.9K from the linked ETH address reveal, 16.2K from the multi-denomination reveal, and 358 from the TORN mining reveal (with overlap between reveals).</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6c91d0d25ba65dcf0f10253432139931c6d4b1c7057e1143392aa8461605d940.png" alt="Figure 4: Plot of the percentage of compromised versus uncompromised (pink) deposits by pool." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Figure 4: Plot of the percentage of compromised versus uncompromised (pink) deposits by pool.</figcaption></figure><p>By pool, we find the anonymity set is reduced by 37% (± 15%) on average. Figure 4 shows the uncompromised anonymity sets by pool. We find that some of the pools could be heavily compromised (such as the cDAI and WBTC pools), whereas other pools are less effected (e.g. USDC). In summary, while many of the Tornado Cash heuristics are simple, they are quite powerful. These findings could help Tornado Cash developers and users alike, measure and understand the degree user privacy offered.</p><h2 id="h-limitations" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Limitations</h2><p>Heuristics are not perfect measures. In return for simplicity, there will always be false positives in practice, e.g., addresses in a cluster that should not be there, or faithful Tornado Cash transactions labeled as compromised.</p><p>For the Ethereum heuristics, picking proper hyperparameters is the challenge. In DAR, the algorithm is very sensitive to the choice of two thresholds. If the thresholds are too small, no clusters will be found; If the thresholds are too big, clusters will be low quality, containing many addresses they should not. Currently, the best practice is to tune these by hand.</p><p>Similarly in NODE (Diff2Vec), the choice of hyperparameters impacts performance. In particular, we must choose a “neighborhood” size to look when summarizing the behavior of a single node/wallet. Too small and we may lose sight of the bigger picture but too large and we may lose granularity on this wallet’s actions.</p><p>Running DAR or NODE on Ethereum is computationally expensive, requiring both a large RAM and storage. In particular, NODE is very costly and difficult to parallelize — we are unable to update it live due to its resource constraints. As of now, the NODE algorithm is trained on data up to October 2021 and will remain static.</p><p>On the other hand, the Tornado Cash heuristics are much simpler than the Ethereum ones, and more deterministic. However, given that only a small subset of Ethereum addresses are Tornado Cash users, they have limited applicability to the majority of potential Tutela users.</p><h2 id="h-what-next" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What Next?</h2><p>This is it for <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://tutela.xyz/">Tutela</a>! What a journey it has been! We’ve learned a lot and had the opportunity to work with amazing people. Shoutout to the LambdaClass team for their critical contributions to the development of the Tornado Cash heuristics.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/mike_h_wu">Mike</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/kaili_jenner">Kaili</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/WillMcTighe">I</a> will continue to maintain Tutela as far as the Tornado Cash Community deems appropriate. Now we’re turning our attention onto building the next thing! If you want to connect with us - feel free to hit us up on Twitter! @willmctighe @mike_h_wu @kaili_jenner</p><h3 id="h-references" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">References</h3><p>Ferenc Beres, Istvan A Seres, Andras A Benczur, and Mikerah Quintyne-Collins. 2021. Blockchain is watching you: Profiling and deanonymizing ethereum users. In 2021 IEEE International Conference on Decentralized Applications and Infrastructures (DAPPS), pages 69–78. IEEE.</p>]]></content:encoded>
            <author>will-mctighe@newsletter.paragraph.com (Will McTighe)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/5bd0dab84beeff8c58f52a9d8b3e80a1f7bc0f50c00cd85eb68b714b13da6165.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Tutela — Tornado Cash Pool Anonymity Set Auditor]]></title>
            <link>https://paragraph.com/@will-mctighe/tutela-tornado-cash-pool-anonymity-set-auditor</link>
            <guid>A0m0si4c7hIMx8r2HlG6</guid>
            <pubDate>Sun, 30 Jan 2022 02:31:18 GMT</pubDate>
            <description><![CDATA[In late October, in response to the Tornado Cash (TC) Anonymity Research Tools Grant, we began building Tutela, an anonymity detection tool, to help Ethereum users to check: 1.) if their Ethereum addresses can be linked; and 2.) if their Tornado Cash transactions are compromised. Since our last update 8 weeks ago, we’ve received incredibly helpful user feedback and have added functionality like ENS searching and showing Tornado Cash interactions for all input addresses! If you have feedback, ...]]></description>
            <content:encoded><![CDATA[<p>In late October, in response to the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://torn.community/t/funded-bounty-anonymity-research-tools/1437">Tornado Cash (TC) Anonymity Research Tools Grant</a>, we began building <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://tutela.xyz/">Tutela</a>, an anonymity detection tool, to help Ethereum users to check:</p><p>1.) if their Ethereum addresses can be linked; and</p><p>2.) if their Tornado Cash transactions are compromised.</p><p>Since our last update 8 weeks ago, we’ve received incredibly helpful user feedback and have added functionality like ENS searching and showing Tornado Cash interactions for all input addresses! If you have feedback, we’d love to hear about it in the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/EVCCUYdMna">Tutela Discord Channel</a>.</p><p>Our latest tool is the Tornado Cash Anonymity Pool Auditor. It allows you to see a more accurate anonymity set of each Tornado Cash Pool than the headline numbers. Before diving into it, a quick recap on blockchain privacy, Tornado Cash and TC Pool Anonymity Sets.</p><h2 id="h-blockchain-privacy" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Blockchain Privacy</h2><p>Currently, there is very little transaction privacy for Ethereum users. On Etherscan, we can clearly see the value of transactions, their contents and the sender/receiver. For greater adoption this has to change — it is not acceptable in Web2 for others to be able to see our salaries, online purchase history or charitable donations! Similarly, businesses don’t want you to know who their suppliers are and how much they are being paid.</p><h2 id="h-tornado-cash" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Tornado Cash</h2><p>Tornado Cash is a mixer protocol that helps Ethereum users have some transaction privacy by breaking the connection between two addresses. It is called a mixer because <strong>you mix your funds with those of others</strong>.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/federicocarrone">Federico</a>, Founder of LambdaClass and a collaborator on Tutela, provides an excellent summary of how Tornado Cash works <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/federicocarrone/status/1473665998519742475">here</a>. I will provide a brief recap:</p><p>1. In all Tornado Cash Pools apart from <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://torn.community/t/proposal-to-deploy-tornado-cash-nova/1911">Nova</a>, you can deposit a fixed amount of ETH in their pools (e.g., 1 ETH, 10 ETH, 100 ETH). With that deposit, you receive a note, which you can later use to withdraw your deposit to any address.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/dd1f0e7792b0a692fd550120b7eb11bdb80798efeaf6abd6eafe6910354fa4bd.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>2. Your anonymity is defined by the number of equal user deposits in a given pool. <strong>This is the Anonymity Set</strong>. In the example above, D’s withdrawal could have come from A, B or C, so the <strong>anonymity set is 3</strong> and the <strong>probability of correctly guessing the deposit / withdrawal connection is 1/3</strong>*.</p><p>3. The more people that deposit in the pool, the greater the number of people that a withdrawal could have come from. If you <strong>add a 4th deposit</strong> above, the probability of being correctly detected <strong>decreases to 1/4.</strong></p><p>4. However, there are lots of ways users can compromise their privacy. If you can <strong>link A’s deposit to E’s withdrawal</strong>, then the <strong>pool’s anonymity set decreases from 3 to 2.</strong> This means the <strong>probability of correctly guessing your deposit / withdrawal connection increases to 1/2</strong> because any withdrawal could only have come from B or C’s deposits.</p><p>5. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/federicocarrone">Federico</a>’s team at Lambda School and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://istvanseres.web.elte.hu/">István</a> have codified 5 ways that Tornado Cash users can misuse the protocol to link their deposits and withdrawals and reduce the anonymity sets of Tornado Cash pools. More on them on below.</p><p><em>* For the nerdy details, this is simple combinatorics. The number of possible combinations in this example is 3</em><strong><em>C</em></strong><em>1 = 3. It assumes only 1 deposit and withdrawal per entity. Combinatorics is also why you should withdraw to multiple addresses — it meaningfully increases the set of possible deposit / withdrawal combinations and improves your privacy!</em></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a9a29678b82290e7691e918ad933ea6980754f4aa9e914a49d42561a64eca825.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-five-tornado-cash-reveals" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Five Tornado Cash Reveals</h2><p>Remaining anonymous using Tornado Cash requires you to not make obvious mistakes that could reveal yourself. Here are 5 that could reduce your anonymity:</p><ol><li><p><strong>Address Match Reveal — Reuse of Deposit Address for Withdrawal</strong></p></li></ol><p>If a user deposits from an address and that address withdraws from the same pool, this deposit and withdrawal are assumed to be linked. There are cases when this may not be true but in general, these users are likely TORN yield farmers who do not care about privacy. We believe this heuristic is relatively deterministic.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e58a65fc42cb1be4e0e4b6a900c9f8f83f7fe63ac93e22b96a1291fbfedeea14.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>2. <strong>Unique Gas Price Reveal</strong></p><p>This involves using the same unique gas price for a deposit and a withdrawal to different addresses. Many wallets like Metamask have gas price recommendation systems. However, if the user manually sets the amount of gas to pay, that amount will remain the default price that the wallet will use for other transactions, irrespective of the address used. Given this heuristic maps a unique deposit to a unique withdrawal, we believe it is deterministic.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f444da0ab0a0a1ef9158b814add9493216fd0d8501c5dec3c197d6bf6343564a.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>3. <strong>Linked Address Reveal — Transactions outside Tornado Cash</strong></p><p>This heuristic looks at all the interactions between deposit and withdrawal addresses outside of Tornado Cash. If addresses have interacted more than 3 times, they are assumed to be owned by the same entity. This heuristic is probabilistic and can produce false positives, so we added the &gt;3 interactions constraint to limit these. More interactions increases the likelihood that addresses are linked.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/440f1373c09e894db6776dabc2bce46d35d1de642a26682e9d5426cd2ad3ed09.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>4. <strong>Multi-Denomination Reveal</strong></p><p>If your deposit address mixes a specific set of denominations and your withdrawal address withdraws them all (e.g. if you mix 1x 10 ETH, 1x 1 ETH, 1x 0.1 ETH in order to get 11.1 ETH), then you could reveal yourself if no other wallet has mixed this exact denomination set. This is a probabilistic heuristic given multiple addresses have deposited and withdrawn the same combinations.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e5770c72384264fc669cb114ea588e701df3bcd01b07cf2ae91f97dc3708d8aa.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>5. <strong>TORN Mining Reveal — Careless Usage of Tornado Cash Anonymity Mining</strong></p><p>Anonymity mining was an incentive scheme to increase the anonymity set in TC Pools (number of deposits). TC rewarded participants a fixed amount of anonymity points (AP) based on how long they left their assets in a pool.</p><p>After withdrawing assets, users can claim Anonymity Points. The amount withdrawn is recorded in the transaction. If a user uses an address to claim all of their anonymity points, you can calculate the exact amount of time their assets were in the pool and then potentially link their deposit and withdrawal addresses.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/741f7f008a9faca9181b83226bbab67d4d17810f5cf17679848f3630e47dea23.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-tornado-cash-anonymity-set-auditor" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Tornado Cash Anonymity Set Auditor</h2><h2 id="h-overview" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Overview</strong></h2><p>The Tornado Cash Anonymity Set Auditor, computes the above heuristics for each Tornado Cash pool to determine how many potentially compromised deposits there are in each pool.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/46f553ea84a66e9c1c6283f3d3398bfc0ba1e16350aa12aca797b5de492281e0.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>Try this yourself, by simply selecting the Tornado Cash Pool you are interested in from the drop down list on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://tutela.xyz/">Tutela’s search page</a>.</p><h2 id="h-results" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Results</h2><p>Using the 10 ETH pool as an example, you’ll see that the Tornado Cash app, shows 28,188 equal user deposits as of late December.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f50d101263c87ce4eda49abde6e011a5f282f0be402e927038cbe89b758c8f55.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>Searching the 10 ETH pool address in Tutela returns that 8,060 deposits are potentially compromised by the five reveals above. The discrepancy in the number of equal user deposits is because our current dataset is from October. We will be introducing live updates shortly.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8bb7d4400f89045fccea3e99010affd82fa7e801e335afc1c290600d8f532c87.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-worried-youve-compromised-yourself-on-chain" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Worried you’ve compromised yourself on-chain?</h2><p>There are two ways to check this:</p><p>1. <strong>Ethereum addresses</strong> — input your address / ENS on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://tutela.xyz/">Tutela</a> and it will show ethereum addresses clustered using the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://medium.com/@wmctighe_4577/an-introduction-to-tutela-v1-an-ethereum-and-tornado-cash-anonymity-tool-a210e15be79a">ethereum deposit address reuse reveal</a> and your Tornado Cash deposits, withdrawals and reveals — shown like the below.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/84cb200bb76fbe278a9a2aa6def5c017901797db8957c7368e7f483b9c95eb19.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>2. <strong>Tornado Cash Pools</strong> — input your deposit/withdrawal address at the bottom of the Tornado Cash Pool Address results page (shown two images above) to see if it has been linked in that pool. We don’t make these compromised transactions public without searching to protect the identities of Tornado Cash Users.</p><p>Worried about your privacy? We don’t store your IP addresses (use a VPN anyway please!) or have any permanent search storage. Check for yourself, our code base is publicly available <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://github.com/TutelaLabs/tutela-app">here</a>.</p><h2 id="h-what-next-machine-learning-and-tx-reveal-data" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What Next? Machine Learning and Tx Reveal Data</h2><p>Our next article will provide details of our application of Diff2Vec, a ML algorithm, to the entire set of Ethereum transactions. This also clusters Ethereum addresses and can help everyday users to understand what the likes of Chainalysis can find out about them. Excitingly, this may be the first public application of Diff2Vec at scale!</p><p>We recently built out functionality to display Ethereum transaction data to show you when you revealed yourself and a live data feed, so will post on this next time!</p><h2 id="h-project-contributors" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Project Contributors:</h2><p>- <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/WillMcTighe">Will McTighe</a>, a Stanford MBA, is managing this team effort.</p><p>- <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/mike_h_wu">Mike Wu</a>, a Stanford PhD in AI, is leading the clustering and ML analysis.</p><p>- <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/kaili_jenner">Kaili Wang</a>, a 4th year computer science major at Stanford, is leading front-end development.</p><p>- <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/bax1337">Dr. Nick Bax</a>, a Stanford PhD graduate who has traced funds related to several hacks and recently published on tracing the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://medium.com/@nbax/tracing-the-wannacry-2-0-monero-transactions-d8c1e5129dc1">WannaCry 2.0 malware</a> Monero transactions. Nick leads the identification of heuristics.</p><p>- <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://istvanseres.web.elte.hu/">István A. Seres</a>, an applied mathematician, leads defining heuristics and the research part of the project.</p><p>- <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://federicocarrone.com/">Federico Carrone</a>, Founder of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://lambdaclass.com/">LambdaClass</a>, is in charge of a team of computer scientists, computer engineers and data scientists (mathematicians, physicists, engineers) who work on Zero Knowledge proof cryptography.</p><p>- Tomas De Mattey, a UNTreF Grad, project manages the Lambda team.</p><p>- Manuel Puebla, a UBA Mathematics grad, supports the Tornado Cash heuristics research.- Herman Obst Demaestri, a UBA engineer, leads Tornado Cash heuristics development.</p><p>- Mariano Nicolini, a UBA physics grad, supports Tornado Cash heuristics development.</p><p>- Pedro Fontana, a UBA Mathematics grad, supports Tornado Cash heuristics development.</p>]]></content:encoded>
            <author>will-mctighe@newsletter.paragraph.com (Will McTighe)</author>
        </item>
    </channel>
</rss>