<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Christoph Michel on Medium]]></title>
        <description><![CDATA[Stories by Christoph Michel on Medium]]></description>
        <link>https://medium.com/@cmichel?source=rss-56a971659c6f------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/2*ST_CwmLVA4n_qzFEydEm2A.jpeg</url>
            <title>Stories by Christoph Michel on Medium</title>
            <link>https://medium.com/@cmichel?source=rss-56a971659c6f------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 04:52:24 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@cmichel/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Code4rena — First 1M$ stats]]></title>
            <link>https://cmichel.medium.com/code4rena-first-1m-stats-be1d3fccd2a8?source=rss-56a971659c6f------2</link>
            <guid isPermaLink="false">https://medium.com/p/be1d3fccd2a8</guid>
            <category><![CDATA[bug-bounty]]></category>
            <category><![CDATA[security]]></category>
            <category><![CDATA[audit]]></category>
            <category><![CDATA[ethereum]]></category>
            <dc:creator><![CDATA[Christoph Michel]]></dc:creator>
            <pubDate>Sat, 07 May 2022 22:29:33 GMT</pubDate>
            <atom:updated>2022-05-07T22:29:33.943Z</atom:updated>
            <content:encoded><![CDATA[<h3>Code4rena — First 1M$ stats</h3><p>After 14 months of grinding <a href="https://code4rena.com/">Code4rena</a> audit contests I’m the first person to hit 1M$ in awards and take the number one spot on the <a href="https://web.archive.org/web/20220503203405/https://code4rena.com/leaderboard">leaderboard</a>. 🥳</p><figure><img alt="Leaderboard Number One" src="https://cdn-images-1.medium.com/max/960/0*HuFsf2I6XUotZS6g.png" /></figure><p>I also tracked my hours worked on Code4rena over the same time period, so for the first time, we can look at some interesting auditor stats.</p><h4>General Stats</h4><ul><li>I participated in <strong>97 of the 108 EVM contests</strong>. I stopped after the 108th contest as I was confident that I would hit 1M$ in awards once the judging phase for the pending ones was done. (Some of these contests are still pending judging at the time of writing.) Code4rena’s audit contests allow for participation of varying degrees but for the vast majority of contests, I treated it as a standard audit and read the entire code base instead of just a few of the contracts in scope.</li><li>I audited <strong>395,626 lines of Solidity code</strong>. Determined by running this command on my C4 contest directory, which excludes <em>most</em> of the out-of-scope interfaces and external libraries:</li><li>find . -name &#39;*.sol&#39; -type f -not -regex &#39;.*/test.*&#39; -not -regex &#39;.*/interface.*&#39; -not -regex &#39;.*/node_modules.*&#39; -not -regex &#39;.*/openzeppelin.*&#39; -not -regex &#39;.*/@openzeppelin.*&#39; -not -regex &#39;.*/mock.*&#39; | sort -n | xargs wc -l &amp;&gt; c4.log</li><li>That’s ~4,000 LOC on average per contest which feels too much on the higher end. There are several short 3-day contests with ~1,000 LOC — the filter above is definitely missing some contracts that are out of scope.</li><li>I found <strong>900 issues</strong> in total, <strong>168 high-severity issues</strong> (76 of which are unique issues only found by myself).</li></ul><h4>Time-weighted Stats</h4><p>I worked <strong>951 hours</strong> on Code4rena since its inception in February 2021. On average, that’s an hourly rate of 1057.80$. However, this rate does not say much about how my hourly rate evolved over the past 14 months. It gets more interesting when we average the awards I earned per month and plot it against the hours worked.</p><figure><img alt="Awards and hours worked per month" src="https://cdn-images-1.medium.com/max/1024/0*N7tK4oI-dl-M7JHq.png" /></figure><p>The hours worked (blue line) went up consistently until they dropped at the beginning of this year. In the beginning, the awards earned (red line) were proportional to the hours worked until the huge drop in awards in November 2021.</p><h4>Where does the drop in awards come from?</h4><p>Part of it is because of a tracking error as I also developed the smart contracts for Code4rena as part of their governance working group during November / December / January. This time was also tracked as Code4rena time and I can’t distinguish it from my time spent on the audit contests. The other explanation I have is that Code4rena just became a lot more competitive during this time and people started farming low severity issues which lead to an overhaul of the rules in February. Secureum’s Epoch 0 started in October 2021 which brought in a lot of new wardens (auditors) and I published my <a href="https://cmichel.io/how-to-become-a-smart-contract-auditor/">how to become a smart contract auditor blog post</a>. You can see it from this “wardens per contest” chart:</p><figure><img alt="Wardens per contest" src="https://cdn-images-1.medium.com/max/1024/0*HiR24E__DNe947up.png" /></figure><p>In the beginning, we averaged 10 wardens per contest, then it was around 25 towards the end of 2021, and the recent contests see as high as 59 wardens submitting at least one bug or gas optimization. 👀 This is great for the sponsors who receive an insane amount of value but bad for the auditors as they all compete for the same pot and the pot size has not significantly increased since inception.</p><p>Let’s look at the first “awards earned &amp; hours worked” chart again in a different way — by dividing these values we get the hourly rate (averaged per month).</p><figure><img alt="Hourly rate" src="https://cdn-images-1.medium.com/max/1024/0*KaYfqGWbHht6_y5z.png" /></figure><p>It started very high at 2000$/h and I stayed above 1000$/h for most of 2021 until the big drop in November 2021. Afterwards, I was and still am averaging 500$/h.</p><blockquote>❕ Most of March and April’s contests have <strong>not</strong> been judged yet which means the hourly rate for these months will still go up once the judging is done. The charts will be updated in the future.</blockquote><p>This is still a very decent hourly rate but it’s possible to earn more doing traditional audits if you’re at the top. Having said that, I still prefer Code4rena to standard audits as it’s a lot more hands-off, less responsibility, less communication overhead for auditors, and neither do I need to join meetings or audit the fixes. I just read public code and submit bugs through a web interface without talking to any human, can’t get much better than that. 😁</p><h3>What’s next?</h3><p>I’ll take a break from C4 until some newly-discussed features have been implemented and I might try part-time bug bounties for 1–2 months as I’m curious what my average hourly rate would be there. Then I’d be the first to publicize an evidence-based comparison between audits, audit contests, and bug bounties.<br> The anecdotal advice is that bug bounties pay the best — judging from seeing a few large million $ payouts. At the same time, I also hear a lot of complaints about how protocols mistreat whitehats and down-play severity or simply don’t pay out. The earnings are therefore also a lot more volatile which is why I’ve always felt more comfortable doing audits. But I’m curious what payouts one can expect and how volatile they really are — is doing bug bounties for a month enough to get close to the expected payouts?</p><p>The charts have been created using the <a href="https://crates.io/crates/plotters">plotters crate</a> and the source code is <a href="https://github.com/MrToph/c4-stats">available here</a>.</p><p>Originally published at <a href="https://cmichel.io/code4rena-first-1m-stats/">https://cmichel.io/code4rena-first-1m-stats/</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=be1d3fccd2a8" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Goals for 2022]]></title>
            <link>https://cmichel.medium.com/goals-for-2022-2c6546dfba70?source=rss-56a971659c6f------2</link>
            <guid isPermaLink="false">https://medium.com/p/2c6546dfba70</guid>
            <dc:creator><![CDATA[Christoph Michel]]></dc:creator>
            <pubDate>Sun, 02 Jan 2022 13:01:13 GMT</pubDate>
            <atom:updated>2022-01-02T13:01:13.133Z</atom:updated>
            <content:encoded><![CDATA[<p>Following the tradition of <a href="https://cmichel.io/goals-2021">previous years</a>, I’ll revisit my old goals and see what I achieved, and set new goals for 2022.</p><p>Before we dive into the review, I can already say that 2021 has financially been my best year so far by a huge margin. I’m also still healthy, so it has been a pretty great year overall.</p><h4>Reviewing 2021’s goals</h4><blockquote>Dive into decentralized finance security auditing</blockquote><p>✅ I started full-time auditing (&amp; some bug bounties) already in February/March and am still doing it. Initially, I did part-time audits for Quantstamp and <a href="https://code4rena.com/">Code4rena</a> (C4) but then transitioned into doing C4 full-time as I enjoyed the way of working there more: non-committal, work how much I want, no baby-sitting of customers that don’t have their shit together (code still missing for the booked time slots, promised documentation not delivered or insufficient, etc.), no re-audits that can drag on forever. The reward was also a lot higher, in the end, I didn’t miss a single (EVM) contest and made it to #1 on the leaderboard. 🥳</p><p>I tried to give back by blogging/tweeting about Ethereum hacks, being a mentor on <a href="https://secureum.xyz/">Secureum’s bootcamp</a> and answering DMs I received about how to get started as an auditor. My impression is that there has been a huge influx of security people in the past 2 months, 2022 will be interesting.</p><figure><img alt="Leaderboard C4" src="https://cdn-images-1.medium.com/max/1024/0*JYmzsJOmdq_tAUJX.png" /></figure><blockquote>Get back to a bi-weekly blog-post consistency.</blockquote><p>❌ Failed again. This year I worked more than ever before — I maybe took ~10 days off, on all other days I’ve always been working for at least a couple of hours (including weekends). I didn’t have the energy anymore to write two posts every month. I also started posting with my anon and dividing the time between them is still a struggle.</p><p>The biggest series I started on this blog was <a href="https://cmichel.io/categories/replaying-eth">Replaying ETH hacks</a>. I’d like to continue with it.</p><blockquote>Get back to a daily routine</blockquote><p>✅ I more or less achieved this goal. I still go to bed late at night and sleep 8–9 hours and wake up at noon. However, I stopped my digital nomad life that I’ve been living for the past 3 years and it’s much less stressful. Previously, I moved to a new city every 1–3 months and lived out of Airbnbs working on shitty chairs. I now have a base, bought my own furniture &amp; decoration, joined a local gym. I developed a nice routine here. I’ll only start travelling again when governments reduce their covid travel restrictions but I doubt we’ll see this any time soon.</p><blockquote>Be open to throwing away these goals if they become irrelevant, my priorities change, or other better opportunities come along.</blockquote><p>✅ This was the best goal I set myself. Crypto moves too fast to set any specific goals. The meta changes too fast and if you want to be successful you need to adapt quickly. NFTs went from zero to every single creator talking and having an opinion on them in less than a year. Both big corporations and huge celebrities got into NFTs.</p><h4>Goals for 2022</h4><blockquote>Get to 100k$ cash flow per month</blockquote><p>I’ve been in crypto since 2017 and the biggest reason why I’m still not rich / financially independent is that I didn’t have enough cash to invest in 2017. Back then I was living in a country where you pay close to 50% in taxes and where a software engineering salary of 60k EUR per year was considered great. I bought ETH for 300$ and while I’m still holding them and this investment did more than 10x, it’s still not a significant amount of money if you only bought 1 ETH per month.</p><p>The lesson I learned is that if you’re not earning at least 100k$ per year, don’t even bother investing. Focus on making 100k$ first (or take on more risk with the small investments than I did).</p><p>My goal is to get to a cash flow of 100k$ <em>per month</em> that I can use to invest. The cash flow may come from anywhere, previous investments, or simply from work. Over time, the part coming from work ideally goes to zero. It’s an absurdly ambitious goal for me but it’s not impossible. If you reframe it as a single 1M$ bug bounty per year, it actually sounds easy to pull off. 😁</p><blockquote>Develop or contribute to a protocol</blockquote><p>Auditing is nice and pays well but it also fries your brain as you have to concentrate non-stop for hours. Whereas developing a protocol is very easy and I can do it while I’m tired all while listening to music and watching Netflix. For me, a 50:50 split between smart contract security and development would be ideal. The goal is to contribute to a promising DAO as a protocol dev or even develop my own protocol. (I’ll do this with my anon, so please don’t ask me about what I’m building.)</p><p>On a related note, I don’t see myself ever going back to traditional non-DAO employment. With Code4rena, Immunefi, Spearbit I have three great ways to work in security in a decentralized manner: It’s <em>truely flexible</em> about the workload (compared to what “flexible work hours” means in traditional companies) and I don’t have anyone to report to or join weekly meetings.</p><p>I’ve never been happier with my work arrangements.</p><blockquote>Networking</blockquote><p>As I get closer to my financial independence goals, earning more money becomes less important and making new connections with like-minded people takes priority. I met many smart and kind people last year, I hope to continue this trend and maybe start an alpha-sharing group with them.</p><blockquote>New gym PRs</blockquote><p>I recently joined a gym after doing home workouts for 3 years while travelling and gyms being closed. I want to set new personal records (PRs), my previous ones are (for 5x5, so not technically a 1-rep max PR):</p><ul><li>Bench press: 90kg</li><li>Deadlift: 140kg (issue was my grip)</li><li>Squat: 100kg</li></ul><blockquote>Be open to throwing away these goals if they become irrelevant, my priorities change, or other better opportunities come along.</blockquote><p>As always, be flexible. Jump on the NFT trend, on the OHM fork trend, but also get off of it quickly again. Even better, build on the trend. 🙂</p><p>You might notice that I didn’t include the <em>“write two posts per month on my blog”</em> goal anymore. It’s because I prefer building rep on my anon account. I believe being anonymous is the future (for me) and while throwing away 5 years of rep on my real name to start over was a hard pill to swallow, it’s the right thing to do. The best time to go anon was when you started posting with your real name, the second-best time is now.</p><p>Part of the reasons why I think it’s the future and I’m willing to go this step:</p><ul><li>it’s more fun if nobody knows your real identity</li><li>cancel culture is still a thing and doesn’t seem to get better. I noticed I’m self-censoring because I can already predict the outrage if I post something controversial, and I don’t want to deal with the negativity, so I don’t post too controversial things at all and stick mostly to technical blog posts.</li><li>safety risk: you become a target if you receive a large bug bounty or you’re on the leaderboard</li><li>the laws around crypto are still unclear and regulators are either unwilling to learn how blockchains work or have ulterior motives. They create laws that are technically impossible to comply with. Not linking every transaction to your name for eternity and publicly broadcasting what you do on social media is the obvious move.</li></ul><p>I will also stop with my <a href="https://cmichel.io/progress-report-november-2021/">monthly progress reports</a> after 5 years of writing them each month. I don’t see any value in them anymore except for nostalgia reasons. But don’t be disappointed, I will of course still cover exploits on this blog and my main Twitter.</p><p>I wish you reading this a happy new year and the strength to consistently work on your goals. 🎉</p><p>Originally published at <a href="https://cmichel.io/goals-2022/">https://cmichel.io/goals-2022/</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2c6546dfba70" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Progress Report — November 2021]]></title>
            <link>https://cmichel.medium.com/progress-report-november-2021-affe7f33ef62?source=rss-56a971659c6f------2</link>
            <guid isPermaLink="false">https://medium.com/p/affe7f33ef62</guid>
            <category><![CDATA[progress-report]]></category>
            <dc:creator><![CDATA[Christoph Michel]]></dc:creator>
            <pubDate>Wed, 01 Dec 2021 08:57:47 GMT</pubDate>
            <atom:updated>2021-12-01T08:57:47.037Z</atom:updated>
            <content:encoded><![CDATA[<h3>Progress Report — November 2021</h3><p>I post a progress report showing what I did and how my products performed each month. Last month’s report can be seen <a href="https://cmichel.io/progress-report-october-2021">here</a>.</p><h4>What did I do</h4><figure><img alt="Productive Hours in November" src="https://cdn-images-1.medium.com/max/1024/0*jj7uTUEwIttxQWd7.png" /></figure><p><em>Hours worked on </em><strong><em>side-projects</em></strong><em> in November</em></p><p>I worked <strong>130</strong> <em>productive</em> on side projects hours last month. I noticed this includes C4 but it probably shouldn’t be considered a side-project of mine anymore.</p><p>To make these progress reports a bit more interesting, from now on I’ll post my favourite song, TV show, and article I read last month.</p><ul><li><strong>Article of the Month</strong>: <a href="https://workshop.neodyme.io/index.html">Neodyme’s Solana Security Workshop</a></li><li><strong>Song of the Month:</strong></li></ul><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fblue-sea-697d.quartiers047.workers.dev%3A443%2Fhttps%2Fopen.spotify.com%2Fembed%2Ftrack%2F2FQRZLR31e3423Nmrgv0Pv%3Futm_source%3Doembed&amp;display_name=Spotify&amp;url=https%3A%2F%2Fblue-sea-697d.quartiers047.workers.dev%3A443%2Fhttps%2Fopen.spotify.com%2Ftrack%2F2FQRZLR31e3423Nmrgv0Pv&amp;image=https%3A%2F%2Fblue-sea-697d.quartiers047.workers.dev%3A443%2Fhttps%2Fi.scdn.co%2Fimage%2Fab67616d00001e02c5c99315111b580f37efb689&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=spotify" width="456" height="80" frameborder="0" scrolling="no"><a href="https://medium.com/media/62c76ff588b130a9b9bf5f61fa499323/href">https://medium.com/media/62c76ff588b130a9b9bf5f61fa499323/href</a></iframe><ul><li><strong>TV series of the Month</strong>: <a href="https://trakt.tv/shows/mushoku-tensei-jobless-reincarnation/seasons/1">Mushoku Tensei: Jobless Reincarnation</a></li></ul><h4>What was worked on</h4><p><strong>This month is the 5 year anniversary of writing my monthly progress reports</strong>. The first one can be seen <a href="https://cmichel.io/progress-report-november-2016">here</a>. It’s incredible how many failed side projects I had over the years. If I calculate the opportunity costs of my market rate times the hours spent on these side projects, not a single one of them made sense. Neither have I gone back and read a single one of these progress reports (except the first one now). Working on these projects was still more fun than client work but I need to rethink all of this on my new year’s goal post.</p><p>Anyway, what did I do this month?</p><ul><li><a href="https://workshop.neodyme.io/index.html">Solved the Solana Security Workshop challenges</a>. My solutions can be found <a href="https://github.com/MrToph/neodyme-breakpoint-workshop">here</a></li><li>Learned some more Rust and how useful the From trait is after looking at a codebase that heavily uses it.</li><li>lots of other smaller things, helping out here and there</li></ul><h4>Platform Growth</h4><h4>Website</h4><p>Sessions went up to <strong>8,538</strong> on my website.</p><figure><img alt="Website Traffic" src="https://cdn-images-1.medium.com/max/1024/0*tIjw8hPPcWlvx-dx.png" /></figure><p>I did <strong>not</strong> stick to my bi-weekly schedule of releasing a blog post. Still, at least I managed to write a single post.</p><ol><li><a href="https://cmichel.io/replaying-ethereum-hacks-rari-fuse-vusd-price-manipulation/">Replaying Ethereum Hacks — Rari Fuse VUSD Price Manipulation</a></li></ol><h4>Subscribers</h4><p>My <a href="https://twitter.com/cmichelio">twitter</a> followers increased by <em>251</em> to <strong>2002</strong>.</p><h4>Sales</h4><h4>Learn EOS Development</h4><p>I sold 7 books last month. 👀</p><h4>What’s next</h4><ul><li>I’ll be doing <a href="https://adventofcode.com/2021">Advent of Code 2021</a> to learn Rust. I already did the exact same thing last year but stopped after <a href="https://github.com/MrToph/adventofcode-2020/">day 11</a>. Let’s see when I stop this time because of too much work. 😢</li></ul><p>Originally published at <a href="https://cmichel.io/progress-report-november-2021/">https://cmichel.io/progress-report-november-2021/</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=affe7f33ef62" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Replaying Ethereum Hacks — Rari Fuse VUSD Price Manipulation]]></title>
            <link>https://cmichel.medium.com/replaying-ethereum-hacks-rari-fuse-vusd-price-manipulation-d3aa9e574f64?source=rss-56a971659c6f------2</link>
            <guid isPermaLink="false">https://medium.com/p/d3aa9e574f64</guid>
            <category><![CDATA[eth]]></category>
            <category><![CDATA[security]]></category>
            <category><![CDATA[ethereum]]></category>
            <dc:creator><![CDATA[Christoph Michel]]></dc:creator>
            <pubDate>Fri, 05 Nov 2021 17:08:04 GMT</pubDate>
            <atom:updated>2021-11-05T17:08:04.029Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5Ig3aM6cbR9qE9BplrjrDw.png" /></figure><h3>Replaying Ethereum Hacks — Rari Fuse VUSD Price Manipulation</h3><p>A few days ago, pool 23 of Rari’s Fuse platform <a href="https://twitter.com/RariCapital/status/1455569653820973057">was exploited</a>. In this episode of the <em>Replaying Ethereum Hacks</em> series, we will look at what happened and replay the exploit by implementing it from scratch.</p><ul><li><a href="https://etherscan.io/address/0xa3f447feb0b2bddc50a44ccd6f412a5f98619264">Attacker Address</a></li><li><a href="https://etherscan.io/tx/0x89d0ae4dc1743598a540c4e33917efdce24338723b0fabf34813b79cb0ecf4c5">Price Manipulation TX</a></li><li><a href="https://etherscan.io/tx/0x8527fea51233974a431c92c4d3c58dee118b05a3140a04e0f95147df9faf8092">Fuse inflated deposit &amp; borrow TX</a></li></ul><h4>Background</h4><p>Rari’s Fuse protocol is an isolated lending market creator. Anyone can create their own lending platform by specifying <em>arbitrary tokens</em> that can then be used as collateral or borrowed. When creating a pool, it deploys a fresh instance of <a href="https://compound.finance">Compound.finance</a>’s contracts (Comptroller, CTokens). The idea of creating isolated pools is that the <strong>risk stays within the pool</strong> and does not spill over to lenders or borrowers of other pools. General issues of a <em>permissionless</em> token listing lending protocol include:</p><ul><li>A listed malicious token’s price can be pumped liquidating its borrowers, seizing collateral tokens that might be more valuable</li><li>A listed malicious token’s price can be pumped and used as collateral to borrow more valuable tokens</li></ul><p>The second issue is exactly what happened with <strong>Fuse pool 23</strong>, except that the token wasn’t even malicious, given enough capital, manipulating prices works with any token.</p><blockquote>Note that this is not an issue of Rari’s Fuse protocol per se, it’s the nature of a permissionless lending protocol that requires participants to do their own due diligence on the pools they enter.</blockquote><p>Pool 23 was operated by <a href="https://twitter.com/VesperFi/status/1455567032536248324">Vesper</a> and included the following assets: VUSD, USDC, WBTC, DAI, ETH and others. The attacker was able to <strong>manipulate the price of VUSD</strong> (denominated in USDC) which was so high that the attacker&#39;s collateral value even overflowed the UI.</p><figure><img alt="Vesper Pool Assets" src="https://cdn-images-1.medium.com/max/1024/0*ihL2CGs_4PErXe-l.png" /></figure><p>As anyone can create a pool for any tokens, Rari Fuse uses UniswapV3’s <strong>TWAP oracle</strong> by default to price its assets.</p><blockquote>Using Chainlink here wouldn’t have helped because Chainlink doesn’t list any long-tail assets like VUSD.</blockquote><h4>Exploit</h4><p>The heart of the exploit is about manipulating UniswapV3’s TWAP oracle of the VUSD &lt;&gt; USDC pair which is used to price VUSD within Rari&#39;s Fuse pool 23. By inflating the price, VUSD can be provided as collateral and then any other asset <em>of that pool</em> can be borrowed.</p><p>The VUSD &lt;&gt; USDC pool had about 500k$ of liquidity and the initial USDC per VUSD price was 0.988964. The attacker used 232k USDC to buy all available VUSD in the pool, bringing the VUSD price practically to infinity.</p><blockquote>Due to UniswapV3’s <em>max tick limit</em> of 887271, the max price for this pair is 3.4 * 10^50. A tick corresponds to the exponent of the price equation; price at tick i: 1.0001^i. (For efficiency reasons, UniswapV3 often deals with the <em>square root</em> of the price instead of the price itself.)</blockquote><p>Note that this is a <em>time-weighted</em> oracle which means the TWAP after executing the trade will <strong>not</strong> change, time (blocks) must first pass before this higher price is incorporated. Therefore, this attack does not work with <em>flashloans</em>, the attackers must <strong>provide their own capital</strong> and keep it for several blocks for the TWAP to change. This puts some of the attacker’s capital at risk. Unfortunately, the TWAP changes very quickly when the current price is at the maximum. Here’s a plot of the TWAP prices (Pool 23 used a time window of 600 seconds) at the end of each block, starting with block 13537922 where the price manipulation transaction was included:</p><figure><img alt="USDC/VUSD TWAP price" src="https://cdn-images-1.medium.com/max/1024/0*Dh3rcUsZwlf-ebKD.png" /></figure><p>One block after the manipulation (block-time delta of 37 seconds), the TWAP already changed from 0.98 to 1293.031076 and it increases exponentially. Even if the next block was minted at the average block speed of 13 seconds instead, the TWAP would have increased to 18.0, still enough to exploit the pool. This makes it very difficult to protect against this attack as the manipulation transaction can be sent through flashbots and the arbitrage opportunity cannot be picked up (and undo the price change) by others, except by sheer luck. When the next block is minted, the TWAP is already manipulated and the attacker is likely to make a profit from the exploit. Here, the attacker waited even longer with their second transaction, included at block 13537932 (+10), increasing the price to 1,960,630,954,978.808896 USDC / VUSD.</p><pre># USDC/VUSD TWAP (600s time window) after each block<br>Block 13537922 Price: 0.988964<br>Block 13537923 Price: 1293.031076<br>Block 13537924 Price: 16091.047672<br>Block 13537925 Price: 28793.048286<br>Block 13537926 Price: 34953.698466<br>Block 13537927 Price: 243088.923366<br>Block 13537928 Price: 7977279.941027<br>Block 13537929 Price: 215644807.583917<br>Block 13537930 Price: 690402294.848451<br>Block 13537931 Price: 1017552049.183367<br>Block 13537932 Price: 1960630954978.808896</pre><p>Finally, they deposited the received VUSD as collateral into the Fuse pool at this highly-inflated price and borrowed all other pool assets against it.</p><h4>Why is it easy to manipulate UniswapV3’s TWAP?</h4><p>There has been a lot of discussion regarding using the geometric mean as a TWAP (which UniswapV3 uses) vs arithmetic mean (which UniswapV2 uses), but this is not the issue here. The UniswapV3 prices are generally easier to manipulate than UniswapV2 because of the <strong>concentrated liquidity</strong> feature that makes sure that most liquidity is provided at a small range around the “real price” (external market price). Because of this, an attacker can burn through this range order with an <em>average execution price close to the real price</em>. The attacker does not lose much value on the trade due to the low slippage, they benefit from the capital efficiency like any other trader.</p><p>We haven’t seen this with UniswapV2’s TWAP before because, there, liquidity is provided across the entire price spectrum. This leads to an extremely high slippage loss &amp; initial capital requirement when trying to drastically change the price.</p><h4>Implementation</h4><p>Now that we know how the attack works, let’s implement it. Let’s first have a look at what the attacker did (wrong) in this <a href="https://dashboard.tenderly.co/tx/mainnet/0x89d0ae4dc1743598a540c4e33917efdce24338723b0fabf34813b79cb0ecf4c5/logs">price manipulation transaction</a>.</p><ol><li>They were funded by a 100 ETH tornado cash withdrawal. They used part of this ETH to buy USDC on the WETH &lt;&gt; USDC pair.</li><li>They used a <a href="https://etherscan.io/address/0xb652fc42e12828f3f1b3e96283b199e62ec570db#code">VUSD Minter</a> contract which mints VUSD if you provide any of DAI, USDC or USDT.</li><li>They then created a UniswapV3 LP position close to the minimum tick range (-88760, -88760 + TICK_SPACING = -88750)</li></ol><figure><img alt="Attacker LP Mint" src="https://cdn-images-1.medium.com/max/1024/0*d6mCPApGTrlc62E9.png" /></figure><ol><li>They traded 232k USDC (token1) to 222k VUSD (token0) buying up the entire VUSD liquidity and driving the price to the max tick 887271.</li></ol><figure><img alt="Attacker Swap" src="https://cdn-images-1.medium.com/max/1024/0*N9LvMMcAawMoFt9a.png" /></figure><p>Instead of using a Minter contract in step 2, we can make it easier for ourselves and just buy VUSD in the pool that we’re going to manipulate anyway. I spent a long time thinking about why step 3, providing a tiny LP position, is required. Initially, I thought the max price (or tick) can only be reached if there’s actual liquidity at that price that we can trade into, and therefore we create a small position there. But if you look closely, you can see that the current tick <em>after</em> the trade is at +MAX_TICK but the LP position is at -MAX_TICK.</p><p>After more testing, it turns out that step 2) and step 3) <strong>are not even needed</strong> and the attacker simply didn’t know what they were doing and provided liquidity at the wrong end. (It’s also not even necessary to provide it at the correct end.)</p><p>Our price manipulation attack is therefore <strong>much more efficient</strong>: we also first buy USDC, but then simply buy up all VUSD. Another interesting technical detail is that the attacker perfectly calculated the trade amount required to buy up all liquidity and I first couldn’t figure out how to do this. When trying to buy the entire VUSD pool balance (VUSD.balanceOf(pool)) the swap reverts. This is probably because not all tokens in the pool are tradeable, there might still be some unclaimed fees in it.</p><p>After more testing, I figured out a way to buy all pool liquidity without having to specify neither an exact input nor an exact output amount. This is done by calling the swap function directly on the pool with an amount set to infinity and a <em>price limit</em> at the max tick. We essentially instruct the contract to do a limit buy order, buying all liquidity up to this price.</p><pre>function buyAllVUSD() internal {<br>    // we won&#39;t actually be able to buy up the entire VUSD.balanceOf(pool) balance, it&#39;ll be slightly less. I assume this is due to fees still in the contract or something<br>    // instead we use the sqrtPriceLimit at a max tick to search and buy up all liquidity up to this tick, s.t., in the end the new price will be at max tick<br>    // the sqrtPriceLimitX96 used here will end up being the sqrtPrice &amp; currentTick of pool.slot0(), so pump it up to the maximum<br>    pool.swap(<br>        address(this), // receiver<br>        false, // zeroToOne (swap token0 to token1?)<br>        type(int256).max, // amount<br>        UniswapMath.getSqrtRatioAtTick(UniswapMath.MAX_TICK - 1), // sqrtPriceLimit<br>        &quot;&quot; // callback data<br>    );<br>}</pre><p>The pool then performs a callback into our contract where we need to settle the trade:</p><pre>function uniswapV3SwapCallback(<br>    int256 amount0Delta,<br>    int256 amount1Delta,<br>    bytes calldata<br>) external {<br>    // Uniswap always does callback to its msg.sender, so we only receive the callbacks we started<br>    // still need to check that it originated from the v3 pool<br>    require(msg.sender == address(pool));<br>    // negative means we received, positive means we need to pay<br>    require(<br>        amount0Delta &lt;= 0 &amp;&amp; amount1Delta &gt; 0,<br>        &quot;should have swapped USDC to VUSD&quot;<br>    );<br>    USDC.transfer(address(pool), uint256(amount1Delta));<br>}</pre><p>And that’s it. ✨ Now we wait for one block for the VUSD TWAP to increase, deposit VUSD as collateral and borrow WBTC for a profit. The full attack contract code <a href="https://github.com/MrToph/replaying-ethereum-hacks/blob/74ce67155fec5dac563e04faf9548de67f9f00f3/contracts/rari-fuse/Attacker.sol#L63">can be seen here</a>.</p><p>Originally published at <a href="https://cmichel.io/replaying-ethereum-hacks-rari-fuse-vusd-price-manipulation/">https://cmichel.io/replaying-ethereum-hacks-rari-fuse-vusd-price-manipulation/</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d3aa9e574f64" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to become a smart contract auditor]]></title>
            <link>https://cmichel.medium.com/how-to-become-a-smart-contract-auditor-e1db27470e5d?source=rss-56a971659c6f------2</link>
            <guid isPermaLink="false">https://medium.com/p/e1db27470e5d</guid>
            <category><![CDATA[auditing]]></category>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[security]]></category>
            <category><![CDATA[blockchain-development]]></category>
            <dc:creator><![CDATA[Christoph Michel]]></dc:creator>
            <pubDate>Sat, 30 Oct 2021 08:31:29 GMT</pubDate>
            <atom:updated>2021-10-30T08:32:38.897Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ToWbCtFWLFtvvugk6-yzpQ.jpeg" /></figure><p>From time to time, I receive messages asking me for advice on how to get started as a smart contract security auditor. While there are already articles written about this topic, most of them are just a collection of security-related articles which they throw at beginners, overwhelming them. I’ll provide a path that I would take if I had to do it all over again. This will be ETH specific (or more general EVM-specific) as most auditing work is currently still in this ecosystem.</p><p>At the end, I’ll also go over frequently asked questions that are related to auditing and getting your first job.</p><h4>Who made me the expert?</h4><p>Who am I and why should you even listen to me?</p><p>I’m currently an independent security researcher who has worked at traditional auditing firms before, so I know both sides. You don’t need to listen to me but if you reached out to me, you probably have your own reasons why you think my advice is valuable. At the time of writing, I’m currently ranked #1 auditor at <a href="https://code423n4.com/leaderboard">Code4rena</a>, how much weight you want to give to this ranking is again up to you.</p><h4>Learn programming</h4><p>I expect that you already know how to code, any language is fine. If not, learning how to code should be your first step as auditing code requires being able to read it. In my opinion, being a developer is a prerequisite, otherwise, you’re spending too much time trying to make sense of the syntax and the semantics of the <em>individual</em> instructions. It’d be like trying to read Nietzsche while being illiterate. Become literate first. This is definitely the step that takes the most time to learn, learning the security aspects happens a lot faster.</p><p>If you have no prior programming experience, be mentally prepared that it’ll take you years before your reviews will be useful. I’d start with JavaScript, it’s the most beginner-friendly and versatile language. If it turns out you don’t actually like being an auditor, the transition to being a frontend, backend or smart contract developer is easy. The syntax of Solidity and JavaScript are also somewhat similar.</p><h4>Learn ETH blockchain &amp; Solidity basics</h4><p>So you know how to code now but don’t know anything about Ethereum and Solidity yet. The quickest way to learn a new language is by using it in practice, by writing code in it — reading only the docs does not make the knowledge stick (and for some reason, even after all these years I still find the Solidity docs confusing and unstructured). There’s no better way to combine learning Solidity with learning about ETH security than solving CTFs.</p><blockquote>CTFs (Capture The Flags / War games) are security challenges where vulnerable code is presented and you need to write a smart contract to exploit the vulnerability.</blockquote><p>These are the three CTFs I personally solved to learn Solidity and the language:</p><ul><li><a href="https://cmichel.io/damn-vulnerable-de-fi-solutions/">Damn Vulnerable DeFi</a></li><li><a href="https://cmichel.io/ethernaut-solutions/">Ethernaut</a></li><li><a href="https://cmichel.io/capture-the-ether-solutions/">Capture The Ether</a></li></ul><p>The Ethernaut and Capture The Ether challenges often overlap and some vulnerabilities only apply to old Solidity versions. You won’t see them in modern code anymore; be aware of that.</p><blockquote>These CTFs were originally made to be run against an Ethereum testnet for which it’s hard to get any ETH funds and the development experience is very cumbersome. I recommend an alternative approach of using modern testing frameworks &amp; forking to solve these challenges, it’s described in my <a href="https://cmichel.io/ethernaut-solutions/">Ethernaut Solutions post</a>. You can clone my GitHub repo to start with the same setup.</blockquote><p>There are also CTFs that are a lot harder, like <a href="https://cmichel.io/paradigm-ctf-2021-solutions/">Paradigm’s CTF</a>. Scoring well in these shows that you know what you’re doing and they are great for getting hired, especially if you’re unknown. All major auditing firms reached out to me after my <a href="https://cmichel.io/paradigm-ctf-2021-solutions/">solutions blog post</a> with the call-to-action at the end.</p><h4>Become familiar with the most used smart contracts</h4><p>There are certain contracts, patterns or even algorithms that you will see over and over again during your auditing career. It’s good to become familiar with them and deeply understand how they work and their nuances.</p><ul><li>Token contracts: The most used token standards are <a href="https://eips.ethereum.org/EIPS/eip-20">EIP20</a> for fungible tokens, and <a href="https://eips.ethereum.org/EIPS/eip-721">EIP721</a> for NFTs. There are many more, but these two are all you need to know in the beginning. It’s important to understand that the original ERC20 standard evolved a lot and there are tokens that do <em>not</em> comply with the final EIP20 (most notably USDT), which does <em>not</em> return a success boolean among other issues. You should also understand that tokens can have different decimals and they’re to be interpreted as a floating-point number with the decimals precision, i.e., 1e18 TOKENS (= 10**18 TOKENS) ~ 1.0 TOKENS for a token with 18 decimals. You&#39;ll encounter a lot of bugs where some computed token amount is in the wrong number of decimals.</li><li>Proxies: Ethereum contracts are <em>not</em> upgradeable. If you want to update the code, you need to deploy a new contract. However, that means that the storage which still resides in the original contract is also lost. Thus proxies implement the idea to separate the storage from the logic. There are many different proxy implementations, have a look at the <a href="https://docs.openzeppelin.com/contracts/4.x/api/proxy">OpenZeppelin Proxy</a>. You should understand how delegatecall is essential for building proxies.</li><li>MasterChef: The <a href="https://github.com/sushiswap/sushiswap/blob/271458b558afa6fdfd3e46b8eef5ee6618b60f9d/contracts/MasterChef.sol">MasterChef</a> is a staking contract where users deposit liquidity pool (LP) tokens and receive rewards proportional to their time * stakeAmount. This contract has been forked a lot but the main reason why it&#39;s important to understand is that its reward algorithm appears in many different places. Paradigm calls it the <a href="https://www.paradigm.xyz/2021/05/liquidity-mining-on-uniswap-v3/">Billion-dollar algorithm</a>. You should understand how it works and why it&#39;s needed in a blockchain setting (cannot update all users at the same time).</li><li>Compound: I’d say <a href="https://compound.finance/docs">Compound</a> is the basis for all decentralized peer-to-peer lending protocols. You should know it as a lot of DeFi primitives interact with lending protocols in some way. The code is also cleaner than Aave’s and it’s a great example of what good documentation looks like. Its Governor &amp; TimeLock contracts are used as governance contracts of many other protocols as well. You should notice the similarities between the MasterChef reward algorithm and the way debt is accrued for the user through borrowIndex.</li><li>UniswapV2: While Uniswap is already on V3, <a href="https://github.com/Uniswap/v2-core/blob/27f6354bae6685612c182c3bc7577e61bc8717e3/contracts/UniswapV2Pair.sol">Uniswap V2</a> is significantly simpler, less gas-golfed, and still the basis for understanding automated market makers (AMMs) in general. You should also understand how LP tokens (more generally, <em>share</em> tokens that give you a fair share of an underlying balance) work.</li></ul><h4>Learn the finance basics</h4><p>There will be a time when you’re auditing a DeFi project that uses a lot of traditional finance terms and you don’t understand anything. When you look these terms up, you’ll get definitions that refer to even more terms that you don’t know. I, therefore, found it really helpful to go through a basic finance course that does not assume anything and actually explains the <em>intent</em> of why one would use this specific financial instrument.</p><p>I recommend <a href="https://www.khanacademy.org/economics-finance-domain/core-finance/derivative-securities">Khan Academy’s Options, swaps, futures, MBSs, CDOs, and other derivatives</a> chapter where you’ll learn the terminology of options, shorting, futures (~perpetual contracts). From there, you can further expand and go deeper into the individual topics.</p><h4>Getting real experience</h4><p>At this point, your training is over and you’ll just keep reading more code and exploit post mortems to get better. Whenever the theory part gets too boring, you should try finding issues in real code, this could be <a href="https://immunefi.com">bug bounties on Immunefi</a> or <a href="https://code423n4.com/">audit contests on Code4rena</a>. The great advantage here is that they are <em>permissionless</em>. You can be anonymous, there’s no need to pass a job interview, the payouts are purely skill-based. Receiving an actual bug bounty is a great addition in case you want to apply to auditing firms.</p><h3>FAQ</h3><p>I recently held an AMA on <a href="https://secureum.xyz/">Secureum’s bootcamp</a> and received many interesting questions to which I’ll share my answers here.</p><h4>How do you stay up-to-date with security?</h4><p>Be on Twitter for real-time notifications, but if you only want to read one aggregated piece each week, subscribe to the <a href="https://blockthreat.substack.com/">BlockThreat Newsletter</a> by <a href="https://twitter.com/_iphelix">iphelix</a>.</p><h4>What’s the compensation?</h4><p>I’m not an expert on this but I’d say hourly rates for auditors are roughly:</p><ul><li>Junior: 100$/h</li><li>Experienced: 100$-250$/h</li><li>Top Auditors: 250$-1000$/h</li></ul><p>I’d categorize compensation into two categories:</p><ol><li>Fixed: You get paid a fixed (hourly) salary for your work</li><li>Skill-based: The more or higher-severity bugs you find, the bigger your compensation.</li></ol><p>If you are a junior I’d recommend joining an auditing firm, if you’re on the other side of the bell curve, it’ll be more lucrative to seek opportunities with the latter compensation model. Note that top bug bounty hunters can earn much more with payouts in the millions for critical vulnerabilities.</p><h4>How long does it take to review a codebase?</h4><p>Scoping audits is always a tough task and in my opinion, you only get better at it with experience. But to give a rule of thumb: Let’s say you can audit 200 lines of code per hour (which is a standard assumption among some auditors afaik) — adjust that parameter down if the code is complex, math-heavy or if the documentation is bad. You then take the lines of code and divide it by 200 LOC/h, then you get the hours required to audit the code for a single person. If you’re an independent auditor you should also add 5h-10h for compiling the report and all the biz-dev work, plus answering questions. Then you multiply it by your hourly rate.</p><h4>How do you know when to stop looking for bugs?</h4><p>That’s a good question. I could always spend more time on the code and it would increase the likelihood of me finding bugs. But at some point, there’s the point of <em>diminishing returns</em>, where it’s not reasonable to spend any more time on the code.</p><p>Alexander Schlindwein was asked the same question regarding bug bounties but I think it applies to audits as well:</p><blockquote>The approach which works best for me is to set myself the goal of fully understanding the system to the point where I could reimplement it from scratch without being allowed a look at the original codebase. Not from remembering the code, but from having understood what the application is supposed to do. If you have examined a project that far and have not found a bug, the chances of finding one by continuing is low. <a href="https://medium.com/immunefi/interview-with-legendary-bug-bounty-hunter-alexander-schlindwein-cced9c73c02a">Interview</a></blockquote><p>Realistically, I often stop before reaching that point due to time constraints and opportunity costs when I think my limited time is better spent elsewhere.</p><h4>Can you be an auditor but not a developer?</h4><p>In my opinion, auditors’ and developers’ skills mostly overlap. I’d even say being an auditor has made me a better developer. You’ve probably heard of this myth of a 10x engineer but it’s just someone who has worked on a lot of similar projects before and can copy-paste from their previous work such that assembling a new protocol happens a lot quicker compared to someone with no prior code to draw upon. I’ve probably seen ~100 Solidity codebases by now and know exactly where to look and copy code from if I had to build a new protocol. On the other side, a protocol dev knows more about areas like proper deployments, managing the day-to-day on-chain tasks, monitoring, etc. They also have better muscle memory for the syntax from actually typing out the code whereas I’m mostly reading it.</p><h4>What tools do you use when auditing?</h4><p>I don’t use any tools that directly perform vulnerability analysis. I only use the great “Solidity Visual Developer” VSCode extension that highlights storage variables and function parameters which makes it easier to have some context when reading a new codebase.</p><h4>What makes a good auditor?</h4><p>Besides the technical skills like knowing many types of exploits, knowing the EVM well, or having seen issues of similar protocols, a personality trait that I think is useful: <em>conscientiousness</em> — I feel like some auditors don’t even try to find all bugs and just want to be done with their job as quickly as possible. This is more likely to happen if the incentives are not aligned and you get paid a fixed salary as is often the case with traditional auditing firms. So you want to hire people that are conscientious, who take their job seriously and take pride in their work.</p><h4>Do I need to know math?</h4><p>I see more and more math-heavy DeFi protocols, so being good at math is definitely a plus.</p><h4>What does your auditing process look like?</h4><p>My auditing process is pretty straightforward. First I read the documentation. Then I read the code from top to bottom, I order the contracts in a way that makes sense for me: for example, I read the base class contract first before I read the derived class contract. I don’t use any tools, but I heavily take notes and scribble all over the code. 😃 I’m using the “Solidity Visual Developer” extension which comes with the @audit, @audit-info, @audit-ok, @audit-issue markers which I all use to categorize my notes. After having read the entire codebase once, I revisit my notes and resolve any loose ends or things I didn&#39;t understand earlier. Afterwards, I create my audit report out of these notes.</p><h4>Can you easily audit projects on other blockchains? Are newer chains more secure?</h4><p>I looked into Solana which uses Rust and I have to say that the Rust learning curve is quite steep even for me and the non-conventional Solana blockchain model also needs some time getting used to. I think the safety guarantees that languages like Rust/Haskell give you will catch some low-hanging bugs but so will audits. The more interesting bugs are economic ones / wrong logic / unforeseen attack vectors.</p><p>Some reasons why I think that ETH sees so many exploits is that</p><ol><li>the most innovative and therefore usually complex and untested protocols are still on ETH</li><li>the cross-contract function invocation model is great for re-entrancy bugs</li><li>special treatment of ETH instead of being just another ERC20 token</li><li>no built-in contract upgradeability, instead we got several complicated proxy and module patterns to work around this limitation</li><li>ETH’s open-source culture is much stronger than on any other chain and it’s much harder to find bugs in closed-source systems</li><li>ETH is still where the money is which attracts more eyeballs.</li></ol><p>As you can see, there are some blockchain layer decisions that influence security which other blockchains have solved better. It’s not really about the smart contract language itself but more about understanding how the blockchain works and the implications regarding security. That’s the bigger hurdle to auditing a new chain, usually, this information is scattered across blog posts or not even documented at all and you have to look at the code or hope to find a core dev on Discord/Telegram.</p><p>Originally published at <a href="https://cmichel.io/how-to-become-a-smart-contract-auditor/">https://cmichel.io/how-to-become-a-smart-contract-auditor/</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e1db27470e5d" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Progress Report — September 2021]]></title>
            <link>https://cmichel.medium.com/progress-report-september-2021-d2c91c562984?source=rss-56a971659c6f------2</link>
            <guid isPermaLink="false">https://medium.com/p/d2c91c562984</guid>
            <category><![CDATA[progress-report]]></category>
            <dc:creator><![CDATA[Christoph Michel]]></dc:creator>
            <pubDate>Sat, 02 Oct 2021 18:35:36 GMT</pubDate>
            <atom:updated>2021-10-02T18:35:36.527Z</atom:updated>
            <content:encoded><![CDATA[<h3>Progress Report — September 2021</h3><p>I post a progress report showing what I did and how my products performed each month. Last month’s report can be seen <a href="https://cmichel.io/progress-report-august-2021">here</a>.</p><h4>What did I do</h4><figure><img alt="Productive Hours in September" src="https://cdn-images-1.medium.com/max/1024/0*drPyXGrphgLRlNPz.png" /></figure><p><em>Hours worked on </em><strong><em>side-projects</em></strong><em> in September</em></p><p>I worked <strong>139</strong> <em>productive</em> on side projects hours last month.</p><p>To make these progress reports a bit more interesting, from now on I’ll post my favourite song, TV show, and article I read last month.</p><ul><li><strong>Article of the Month</strong>: I finally read the <a href="https://slatestarcodex.com/2014/07/30/meditations-on-moloch/">Moloch post</a> after which MolochDAO is named. It’s very hyped but it’s justified, go read it if you haven’t. Disclaimer: I stopped reading at part VI — the “Gnon” part.</li><li><strong>Song of the Month:</strong></li></ul><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fblue-sea-697d.quartiers047.workers.dev%3A443%2Fhttps%2Fopen.spotify.com%2Fembed%2Ftrack%2F260NTvdAfmSAIQntVYeB4d&amp;display_name=Spotify&amp;url=https%3A%2F%2Fblue-sea-697d.quartiers047.workers.dev%3A443%2Fhttps%2Fopen.spotify.com%2Ftrack%2F260NTvdAfmSAIQntVYeB4d&amp;image=https%3A%2F%2Fblue-sea-697d.quartiers047.workers.dev%3A443%2Fhttps%2Fi.scdn.co%2Fimage%2Fab67616d00001e0225aca042d8e69f437569f403&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=spotify" width="456" height="80" frameborder="0" scrolling="no"><a href="https://medium.com/media/7e149f5e51fd23273060eb39927ca270/href">https://medium.com/media/7e149f5e51fd23273060eb39927ca270/href</a></iframe><ul><li><strong>TV series of the Month</strong>: <a href="https://trakt.tv/shows/squid-game">Squid Game</a></li></ul><h4>What was worked on</h4><ul><li>I participated in all <a href="https://code423n4.com">C4</a> contests again. I received the biggest single-contest payout so far for <a href="https://twitter.com/code423n4/status/1441482318288338947">Notional Finance</a></li><li>I started learning Solana because I don’t want to think twice before sending a transaction (fees), better UX, and great developer adoption. The developer documentation is horrible though. Reminds me of the early EOS days that made me write a book to fix it. I did Paulx’s tutorial and created <a href="https://github.com/MrToph/solana-paulx-escrow">integration tests for it</a>. It’s nice to write the contracts and tests in the same language and be able to share code between them.</li><li>I bought more NFTs (on Solana; none of the valuable ones, I dislike their art and would rather be right than make money. Might buy a Galactic Gecko, I like their artwork.)</li><li>I started reading books again. Read Dostoevsky’s “Notes from Underground”. Can recommend it, the first part is hilarious, the second part can be skipped. Also, read Cedric Villani’s “Birth of a Theorem” to gain insights into how a Field Medalist winner’s works. But there were not many insights in it for me, just that he was obsessed with the math problem he worked on (Landau damping) and thought about it every waking minute. It’s still a nice read though.</li></ul><h4>Platform Growth</h4><h4>Website</h4><p>Sessions stayed at <strong>5,836</strong> on my website.</p><figure><img alt="Website Traffic" src="https://cdn-images-1.medium.com/max/1024/0*Oe5dBO9Bgw9mEavj.png" /></figure><p>I guess I’m not doing this blog post thing anymore.</p><h4>Subscribers</h4><p>My <a href="https://twitter.com/cmichelio">twitter</a> followers increased by <em>91</em> to <strong>1427</strong>.</p><h4>Sales</h4><h4>Learn EOS Development</h4><p>I sold 3 books last month.</p><h4>Trading</h4><p>My EOS trading bot seems to be done. It didn’t make any money this month. I should check if it crashed. 🙃 Update: No, it did not. Just saw that it did 5 EOS last month — who cares. I should write an NFT sniping bot instead. It’d be more interesting to see.</p><h4>What’s next</h4><p>I have a blog post planned on how to become a smart contract auditor as I’ve been asked this a lot recently. I might also dive deeper into Rust &amp; Solana.</p><p>Originally published at <a href="https://cmichel.io/progress-report-september-2021/">https://cmichel.io/progress-report-september-2021/</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d2c91c562984" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Progress Report — August 2021]]></title>
            <link>https://cmichel.medium.com/progress-report-august-2021-7177f22e6e8a?source=rss-56a971659c6f------2</link>
            <guid isPermaLink="false">https://medium.com/p/7177f22e6e8a</guid>
            <category><![CDATA[progress-report]]></category>
            <dc:creator><![CDATA[Christoph Michel]]></dc:creator>
            <pubDate>Thu, 02 Sep 2021 19:44:36 GMT</pubDate>
            <atom:updated>2021-09-02T19:44:36.978Z</atom:updated>
            <content:encoded><![CDATA[<h3>Progress Report — August 2021</h3><p>I post a progress report showing what I did and how my products performed each month. Last month’s report can be seen <a href="https://cmichel.io/progress-report-july-2021">here</a>.</p><h4>What did I do</h4><figure><img alt="Productive Hours in August" src="https://cdn-images-1.medium.com/max/1024/0*MryNPgH0SR4Rrg9E.png" /></figure><p><em>Hours worked on </em><strong><em>side-projects</em></strong><em> in August</em></p><p>I worked <strong>68</strong> <em>productive</em> on side projects hours last month.</p><p>To make these progress reports a bit more interesting, from now on I’ll post my favourite song, TV show, and article I read last month.</p><ul><li><strong>Article of the Month</strong>: <a href="https://starkware.co/developers-community/stark101-onlinecourse/">STARK 101 — Build your own STARK prover from scratch</a>. I haven’t finished the tutorial yet but so far I’m loving it. I also highly recommend reading <a href="https://vitalik.ca/general/2021/01/26/snarks.html">this</a> and <a href="https://dankradfeist.de/ethereum/2020/06/16/kate-polynomial-commitments.html">this</a> if you’re interested in ZK-snarks.</li><li><strong>Song of the Month</strong>: <a href="https://open.spotify.com/track/5p0g8oO4utxbvtqyeUnQnK">Dopplereffekt — Die Reisen</a></li><li><strong>TV series of the Month</strong>: Didn’t watch anything worth mentioning.</li></ul><h4>What was worked on</h4><p>Not much to report this month as I had some personal events to attend as you can see from my “Hours worked” chart.</p><ul><li>Participated in all <a href="https://code423n4.com/">C4</a> contests again.</li><li>After buying my first NFT last month, I further developped my NFT addiction and minted a <a href="https://opensea.io/collection/mutant-ape-yacht-club">MAYC</a>. The announcement and minting was at 3AM local time, luckily I still haven’t fixed my sleep schedule.</li></ul><h4>Platform Growth</h4><h4>Website</h4><p>Sessions went down <strong>5,859</strong> on my website.</p><figure><img alt="Website Traffic" src="https://cdn-images-1.medium.com/max/1024/0*HhMHjH7NYmhHyO3G.png" /></figure><p>I did <strong>not</strong> stick to my bi-weekly schedule of releasing a blog post. It’s just not a priority at the moment as there are too many other rewarding things I’m working on.</p><h4>Subscribers</h4><p>My <a href="https://twitter.com/cmichelio">twitter</a> followers increased by <em>88</em> to <strong>1336</strong>.</p><h4>Sales</h4><h4>Learn EOS Development</h4><p>I sold 4 books last month.</p><h4>Trading</h4><p>My trading bot still somehow made ~30 EOS last month.</p><h4>What’s next</h4><p>I should at least write the next part of my <a href="https://cmichel.io/categories/replaying-eth">Replaying ETH Hacks series</a> at some point.</p><p>Originally published at <a href="https://cmichel.io/progress-report-august-2021/">https://cmichel.io/progress-report-august-2021/</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7177f22e6e8a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Progress Report — July 2021]]></title>
            <link>https://cmichel.medium.com/progress-report-july-2021-cbb16a9162fc?source=rss-56a971659c6f------2</link>
            <guid isPermaLink="false">https://medium.com/p/cbb16a9162fc</guid>
            <dc:creator><![CDATA[Christoph Michel]]></dc:creator>
            <pubDate>Sun, 01 Aug 2021 22:46:20 GMT</pubDate>
            <atom:updated>2021-08-01T22:46:20.597Z</atom:updated>
            <content:encoded><![CDATA[<h3>Progress Report — July 2021</h3><p>I post a progress report showing what I did and how my products performed each month. Last month’s report can be seen <a href="https://cmichel.io/progress-report-june-2021">here</a>.</p><h4>What did I do</h4><figure><img alt="Productive Hours in July" src="https://cdn-images-1.medium.com/max/1024/0*9M8ncp-WNQPLt4nD.png" /></figure><p><em>Hours worked on </em><strong><em>side-projects</em></strong><em> in July</em></p><p>I worked <strong>106</strong> <em>productive</em> on side projects hours last month.</p><p>To make these progress reports a bit more interesting, from now on I’ll post my favourite song, TV show, and article I read last month.</p><ul><li><strong>Article of the Month</strong>: <a href="https://sre.google/sre-book/being-on-call/">“Being On-Call” — Google SREs</a>. Super interesting to read about all the processes in place</li><li><strong>Song of the Month</strong>: <a href="https://open.spotify.com/track/6jJgS7nbhfKK9ilv2KhdQc">Ahzumjot — Lass uns scheinen</a></li><li><strong>TV series of the Month</strong>: <a href="https://trakt.tv/shows/manifest/seasons/1">Manifest S01</a></li></ul><h4>What was worked on</h4><ul><li>I participated in all C4 contests again. New awards came in and I didn’t score that well in July, my lead as <a href="https://code423n4.com/leaderboard/">#1 on the leaderboard</a> is slowly shrinking. It’s a combination of me missing issues, more competition, the competition getting better, and the judging / awarding still evolving and lacking clear rules on the verifiability of exploits, assigning proper severity, and deduplicating issues. Overall, it’s great as it forces me to stay on top of my game and keep improving.</li><li>Participated in my first NFT drop, got metadata sniped on OpenSea upon reveal.</li></ul><figure><img alt="aa" src="https://cdn-images-1.medium.com/max/542/0*oQoUEpyQkROgfg-y.jpg" /></figure><ul><li>Could be the universe trying to tell me to stick to DeFi.</li></ul><h4>Platform Growth</h4><h4>Website</h4><p>Pageviews stayed at around <strong>8,000</strong> on my website.</p><figure><img alt="Website Traffic" src="https://cdn-images-1.medium.com/max/1024/0*__uhD9YdNlAsWKph.png" /></figure><p>I did <strong>not</strong> stick to my bi-weekly schedule of releasing a blog post. I did not write a single new blog post last month, I’ve been busy with other work on the weekends.</p><p>I was mentioned on Sam’s <a href="https://shouldiusespotpriceasmyoracle.com/">shouldiusespotpriceasmyoracle.com</a>.</p><h4>Subscribers</h4><p>After crossing the 1000 followers threshold on my <a href="https://twitter.com/cmichelio">twitter account</a> last month, this month saw no stop and my follower count increased to <strong>1248</strong>.</p><h4>Sales</h4><h4>Learn EOS Development</h4><p>I sold 4 books last month.</p><h4>Trading</h4><p>I thought about shutting down my arbitrage bot on EOS but it’s 100% hands-off and I didn’t update it in half a year, so I see no reason to. At last, I still made 35 EOS last month.</p><h4>What’s next</h4><ul><li>I have some personal things to take care of, August will be a slower month work-wise.</li></ul><p>Originally published at <a href="https://cmichel.io/progress-report-july-2021/">https://cmichel.io/progress-report-july-2021/</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cbb16a9162fc" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Progress Report — June 2021]]></title>
            <link>https://cmichel.medium.com/progress-report-june-2021-caf5f20f8497?source=rss-56a971659c6f------2</link>
            <guid isPermaLink="false">https://medium.com/p/caf5f20f8497</guid>
            <dc:creator><![CDATA[Christoph Michel]]></dc:creator>
            <pubDate>Fri, 02 Jul 2021 00:32:22 GMT</pubDate>
            <atom:updated>2021-07-02T00:32:22.990Z</atom:updated>
            <content:encoded><![CDATA[<h3>Progress Report — June 2021</h3><p>I post a progress report showing what I did and how my products performed each month. Last month’s report can be seen <a href="https://cmichel.io/progress-report-may-2021">here</a>.</p><h4>What did I do</h4><figure><img alt="Productive Hours in June" src="https://cdn-images-1.medium.com/max/1024/0*NgTVDzTmm69RwKkR.png" /></figure><p><em>Hours worked on </em><strong><em>side-projects</em></strong><em> in June</em></p><p>I worked <strong>101</strong> <em>productive</em> on side projects hours last month.</p><p>To make these progress reports a bit more interesting, from now on I’ll post my favourite song, TV show, and article I read last month.</p><ul><li><strong>Video of the Month</strong>: <a href="https://www.youtube.com/watch?v=lXq0eU8viFQ">FlashBots: How to make $1m per month as a Solidity developer</a></li><li><strong>Song of the Month</strong>: <a href="https://open.spotify.com/track/6A4jzwplzPnfirS4xrSZip">Bluestaeb — Valle de Rodalquilar</a></li><li><strong>TV series of the Month</strong>: <a href="https://trakt.tv/shows/dave/seasons/2">Dave S02</a></li></ul><h4>What was worked on</h4><ul><li>I participated in <em>all</em> C4 contests again. Results for some of the old ones are in and I’m glad to say that I’m still <a href="https://code423n4.com/leaderboard/">#1 on the leaderboard</a></li><li>released a CLI tool that scrapes a website for ETH addresses: <a href="https://www.npmjs.com/package/scrape-eth">scrape-eth</a></li></ul><h4>Platform Growth</h4><h4>Website</h4><p>Sessions went down a lot to only <strong>6,833</strong> on my website. Not sure why.</p><figure><img alt="Website Traffic" src="https://cdn-images-1.medium.com/max/1024/0*HP0n73XSvzToLWSC.png" /></figure><p>Maybe, it’s because I did <strong>not</strong> stick to my bi-weekly schedule of releasing a blog post. I missed all of them … I was just really busy with other work.</p><h4>Subscribers</h4><p>My <a href="https://twitter.com/cmichelio">twitter</a> followers increased by <em>10</em> to <strong>600</strong>! 🎉 Someone asked for resources to learn about ETH hacks in a more practical way and a lot of people liked <a href="https://twitter.com/cmichelio/status/1405841810019209218">my replaying ETH series</a>. Once you’re across the 1000 followers threshold, it grows really fast.</p><h4>Sales</h4><h4>Learn EOS Development</h4><p>I sold 7 books last month.</p><h4>Trading</h4><p>I made 16 EOS last month trading crypto. 😅 I should just shut the bot down.</p><h4>What’s next</h4><p>I’m getting more interested in running arbitrage and liquidation bots again with all the MEV talk popping up recently. I’ll probably have to pick up Go and Rust.</p><p>Originally published at <a href="https://cmichel.io/progress-report-june-2021/">https://cmichel.io/progress-report-june-2021/</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=caf5f20f8497" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Progress Report — May 2021]]></title>
            <link>https://cmichel.medium.com/progress-report-may-2021-15d85eac06e0?source=rss-56a971659c6f------2</link>
            <guid isPermaLink="false">https://medium.com/p/15d85eac06e0</guid>
            <category><![CDATA[progress-report]]></category>
            <dc:creator><![CDATA[Christoph Michel]]></dc:creator>
            <pubDate>Tue, 01 Jun 2021 19:25:20 GMT</pubDate>
            <atom:updated>2021-06-01T19:25:20.177Z</atom:updated>
            <content:encoded><![CDATA[<h3>Progress Report — May 2021</h3><p>I post a progress report showing what I did and how my products performed each month. Last month’s report can be seen <a href="https://cmichel.io/progress-report-april-2021">here</a>.</p><h4>What did I do</h4><figure><img alt="Productive Hours in May" src="https://cdn-images-1.medium.com/max/1024/0*ayc5pkOZctdQBqjZ.png" /></figure><p><em>Hours worked on </em><strong><em>side-projects</em></strong><em> in May</em></p><p>I worked <strong>102</strong> <em>productive</em> on side projects hours last month.</p><p>To make these progress reports a bit more interesting, from now on I’ll post my favourite song, TV show, and article I read last month.</p><ul><li><strong>Article of the Month</strong>: <a href="https://yield.is/YieldSpace.pdf">Yield Space</a></li><li><strong>TV series of the Month</strong>: <a href="https://trakt.tv/shows/my-hero-academia/seasons/5">Boku no Hero Academia S05</a></li></ul><h4>What was worked on</h4><ul><li>I participated in <em>all</em> C4 contests again. Results for some of the old ones are in and I’m glad to say that I’m still <a href="https://code423n4.com/leaderboard/">#1 on the leaderboard</a></li></ul><figure><img alt="CodeArena Leaderboard" src="https://cdn-images-1.medium.com/max/1024/0*YLsCvveR5_bvN-fK.png" /></figure><ul><li><em>CodeArena Leaderboard May 31st</em></li><li>Many hacks happened last month, I researched how some of them work and posted my analysis on Twitter or in a dedicated blog post</li><li>worked on a CLI tool that scrapes a website for ETH addresses. I’d often like to have a look at what contracts a frontend interacts with but don’t want to click on all the buttons for Metamask to pop up. I think it’s useful for all security auditors, bounty hunters, and hackers. I’ll release it this month.</li></ul><h4>Platform Growth</h4><h4>Website</h4><p>Sessions went up at <strong>9,969</strong> on my website.</p><figure><img alt="Website Traffic" src="https://cdn-images-1.medium.com/max/1024/0*W6BlGiibVHNBKfLi.png" /></figure><p>I stuck to my bi-weekly schedule of releasing a blog post with two posts about major hacks.</p><ol><li><a href="https://cmichel.io/eos-vault-sx-hack/">EOS vaults.sx hack</a></li><li><a href="https://cmichel.io/bsc-pancake-bunny-exploit-post-mortem/">BSC PancakeBunny Exploit Post Mortem</a></li></ol><h4>Subscribers</h4><p>My <a href="https://twitter.com/cmichelio">Twitter</a> followers increased by <em>135</em> (!) to <strong>959</strong>. My EOS hack analysis Twitter post gained huge momentum in the EOS ecosystem, as well as tweeting about the other hacks, and Code423n4 praise. I could hit 1000 followers next month!</p><h4>Sales</h4><h4>Learn EOS Development</h4><p>I sold 3 books last month.</p><h4>Trading</h4><p>I made 103 EOS last month trading crypto.</p><h4>What’s next</h4><ul><li>Keep doing the same (C4, hack analysis, bug bounties), it was a great month.</li></ul><p>Originally published at <a href="https://cmichel.io/progress-report-may-2021/">https://cmichel.io/progress-report-may-2021/</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=15d85eac06e0" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>