<?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>Velodrome Development Journal</title>
        <link>https://paragraph.com/@velodrome</link>
        <description>Velodrome Finance Development and Engineering Journal</description>
        <lastBuildDate>Thu, 04 Jun 2026 17:01:31 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[Relay Attack Incident Report]]></title>
            <link>https://paragraph.com/@velodrome/relay-attack-incident-report</link>
            <guid>r2PwfAmC2CxiKEKzwoOD</guid>
            <pubDate>Tue, 17 Jun 2025 21:26:28 GMT</pubDate>
            <description><![CDATA[On 11th of June, Aerodrome and Velodrome Relays were the target of griefing attacks. As a sign of continuous commitment towards better security and full transparency the collective is sharing the incident report on that day.]]></description>
            <content:encoded><![CDATA[<p>On 11th of June, Aerodrome and Velodrome Relays were the target of griefing attacks.</p><p>As a sign of continuous commitment towards better security and full transparency the collective is sharing the incident report on that day.</p><br><div data-type="customButton" href="https://bafkreiajjy2pk6dmawhq2lkqxkeepo2fdsuuzz5eyqzp6e56ku7abfyyqa.ipfs.w3s.link" class="center-contents"><a class="email-subscribe-button" href="https://bafkreiajjy2pk6dmawhq2lkqxkeepo2fdsuuzz5eyqzp6e56ku7abfyyqa.ipfs.w3s.link">Download the Report</a></div><br>]]></content:encoded>
            <author>velodrome@newsletter.paragraph.com (Velodrome Engineering)</author>
        </item>
        <item>
            <title><![CDATA[Slipstream]]></title>
            <link>https://paragraph.com/@velodrome/slipstream</link>
            <guid>HsAmQHYjjE1A5h6zoArt</guid>
            <pubDate>Sat, 23 Mar 2024 09:47:28 GMT</pubDate>
            <description><![CDATA[In this article we delve into the technical details of Slipstream, Velodrome's concentrated liquidity pools, including the challenges we faced in implementing a friendly user experience without compromising on decentralization.]]></description>
            <content:encoded><![CDATA[<p>In this article we delve into the technical details of Slipstream, Velodrome's concentrated liquidity pools, including the challenges we faced in implementing a friendly user experience without compromising on decentralization.</p><p>While we continue working on the documentation and refining app screens for Slipstream, we hope this write-up will engage and inspire developers who share our values to join us in building the next generation of 100% onchain products everyone will love to use.</p><h2 id="h-why-build-slipstream-in-house"><strong>Why build Slipstream in-house?</strong></h2><p>Concentrated liquidity pools (clAMM) have proven to be a highly effective design for delivering low slippage onchain swaps. Early on we understood that, combined with Velodrome's liquidity engine, clAMM pools would have the potential to capture a growing share of volume on the Optimism network.&nbsp;</p><p>After careful consideration, we decided Velodrome would be best served if we designed a personalized implementation of clAMM for several reasons:</p><ul><li><p>Buying an existing solution was too costly and contradicted our promise to token holders of sharing 100% of protocol rewards.</p></li><li><p>We couldn't find an efficient, decentralized AMM implementation that suited our product needs.</p></li><li><p>We believed we could create a concentrated liquidity solution requiring less maintenance, making it more user-friendly and sustainable.</p></li></ul><h2 id="h-the-layers-cost">The layers cost</h2><div data-type="twitter" tweetid="1734195642656838137"> 
  <div class="twitter-embed embed">
    <div class="twitter-header">
        <div style="display:flex">
          <a target="_blank" href="https://twitter.com/cooper_kunz">
              <img alt="User Avatar" class="twitter-avatar" src="https://storage.googleapis.com/papyrus_images/9d97a8749d6163f8de006a08db863b9b.jpg">
            </a>
            <div style="margin-left:4px;margin-right:auto;line-height:1.2;">
              <a target="_blank" href="https://twitter.com/cooper_kunz" class="twitter-displayname">Cooper</a>
              <p><a target="_blank" href="https://twitter.com/cooper_kunz" class="twitter-username">@cooper_kunz</a></p>
    
            </div>
            <a href="https://twitter.com/cooper_kunz/status/1734195642656838137" target="_blank">
              <img alt="Twitter Logo" class="twitter-logo" src="https://paragraph.xyz/editor/twitter/logo.png">
            </a>
          </div>
        </div>
      
    <div class="twitter-body">
      we just need one more layer of abstraction bro and i promise users will love it and still be able to be their own bank. all it takes is just one more abstraction it'll all make sense i swear bro just one more
      
      
       
    </div>
    
     <div class="twitter-footer">
          <a target="_blank" href="https://twitter.com/cooper_kunz/status/1734195642656838137" style="margin-right:16px; display:flex;">
            <img alt="Like Icon" class="twitter-heart" src="https://paragraph.xyz/editor/twitter/heart.png">
            17
          </a>
          <a target="_blank" href="https://twitter.com/cooper_kunz/status/1734195642656838137"><p>2:57 PM • Dec 11, 2023</p></a>
        </div>
    
  </div> 
  </div><p>Every layer of composability in DeFi incurs fees. This is rarely openly discussed, but that's <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://tokenbrice.xyz/crv-vs-velo/"><u>how protocols make money</u></a>.</p><p>If Velodrome were to acquire a license from a third party to operate the concentrated liquidity pools, this would cost the protocol a share of the fees the pools generated, on top of the cost of licensing its use.</p><p>Any new deployment of the same pools would then also require additional costs and leave Velodrome at feature parity with competing protocols owning the same license – all of this at the expense of the overall product experience.&nbsp;</p><p>In terms of operations, Velodrome would depend on the security and development speed of the vendor, which would lock them in a difficult position if other partners of the vendor get priority with updates.</p><p>So far Velodrome has managed to build robust functionality into just one layer. It charges zero fees for:</p><ul><li><p>Incentives</p></li><li><p>Relay, also known as compounder/convertor</p></li><li><p>Best-in-class voting dashboard</p></li><li><p>Slipstream (and yes, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/velodrome-finance/slipstream/commit/66a0853b47776307565e52ea1ed7f13e45441036"><u>we’ve removed the protocol fees</u></a>)</p></li></ul><p>All features that in other ecosystems are often operated as independent layers, each extracting its own fee.</p><p>With the introduction of Slipstream, non-staked liquidity is subject to a special fee, which has a 10% default value and can go up to 50%. All of these fees are bundled with existing pool fees and directed to voters.</p><h2 id="h-building-a-true-decentralized-exchange"><strong>Building a true decentralized exchange&nbsp;</strong></h2><p>Most decentralized exchanges continue to run on Web2 infrastructure. With the launch of Velodrome v2, we've transitioned entirely onchain while maintaining competitive UX and efficient product updates, setting us apart as potentially the largest decentralized AMM product today. Our<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/velodrome-finance/sugar/"> <u>onchain API</u></a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://velo.drome.eth.limo"><u>IPFS web app</u></a> contribute to this achievement.&nbsp;</p><blockquote><p>Note: the decentralization of the protocol operations via open governance remains a top priority and is planned to take place later this year.</p></blockquote><p>During Slipstream's R&amp;D phase, prioritizing decentralization was a challenge. We initially considered forking an implementation and automating staking and rewards functionality. However, our commitment to decentralization led us to fork the most proven open-source concentrated liquidity implementation and push ourselves to rebuild staking from the ground up.</p><p>On Velodrome, liquidity providers receive emissions while trading fees generated by a pool are distributed to those who voted for the very same pool.</p><p>While designing Slipstream, we faced two main functional challenges: how to stream VELO incentives to liquidity providers in a capital-efficient way by taking advantage of all the features of concentrated liquidity, as well as how to fetch all the fees that were owed to the gauge for distribution to the voters.&nbsp;&nbsp;</p><p>For the first issue, a variable known as <code>RewardGrowthGlobalX128</code> was introduced, similar to that of <code>FeeGrowthGlobalX128</code>. This variable represents the reward growth of emissions collected per unit of liquidity for the entire life of the pool, and makes calculating rewards simple as we can compare the current value to a historical snapshot to determine what portion of rewards are owed to the user.</p><p>The second issue arises from the fact that liquidity deposits in Slipstream are not fungible by definition. Consequently, fees that should be awarded to voters must be collected separately for each position.This issue was remedied by repurposing the <code>collectProtocol</code> function to bulk collect all fees attributable to the gauge. Thus, on every swap, we would calculate the gauge’s share of the fees (proportional to the amount of liquidity staked) and then, once per week, would pull all the fees into the gauge. Fees levied on unstaked liquidity are collected in the same way.</p><p>Today we're happy to say that Slipstream adds no overhead to the protocol’s maintenance and does not compromise Velodrome’s decentralization.</p><h2 id="h-designing-user-friendly-concentrated-liquidity"><strong>Designing user-friendly concentrated liquidity</strong></h2><p>Velodrome is designed to reward liquidity providers. With Slipstream, VELO emissions flow exclusively to the liquidity staked within the price range boundaries of the pool's active trading price. In the context of concentrated liquidity, this could create an even larger <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://arxiv.org/pdf/2111.09192.pdf"><u>competitive advantage for professional market makers using concentrated pools</u></a>.</p><p>To reduce the constant need for re-balancing a deposit to remain within the incentivized price range, we've redesigned the minimal price range boundaries (tick space) based on the liquidity factors.</p><p>We came up with the following generally available choices for the concentrated pool types:</p><ul><li><p>For stable token pools, use a price range boundary of 0.5% (tick space 50) for tokens like USDC, DAI, LUSD</p></li><li><p>For volatile token pools, use a price range boundary of 2% (tick space 200) for tokens like OP and WETH</p></li></ul><p>In addition to these, two more options are available on demand:</p><ul><li><p>For highly correlated tokens like stable coins and liquid staked tokens, a price range boundary of 0.01% (tick space 1) is available</p></li><li><p>For emerging tokens like AERO and VELO, a price range boundary of 20% (tick space 2000) is available to reduce liquidity pool re-balance needs</p></li></ul><p>Finally, the pool fee was also redesigned to be adjusted independently from the pool type. Fees can now reflect partner protocols’ needs and can be adjusted based on the market's volatility. To reduce operational overhead, we are working on a dynamic fee module that will adjust itself on demand.</p><h2 id="h-keeping-the-web-app-intuitive"><strong>Keeping the web app intuitive</strong></h2><p>Slipstream brought some design and user-experience challenges–particularly with respect to the liquidity deposit flow, which has been redesigned probably three times by now.</p><p>While we were very happy with the intuitiveness of Velodrome v2’s existing flow, the introduction of concentrated liquidity, where a pool can have multiple deposits—both staked and unstaked—forced us to reconsider how we display deposits and let users manage them. With Slipstream we've added a simple (and hopefully straightforward) way for everyone to add and create new liquidity pools that should scale across any new potential pool implementations.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0107a6200240e88a9e45f962839cb34d.gif" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAASCAIAAAC1qksFAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAFNklEQVR4nG2UXW/aZhTH3bUBEhJIIObVwcY2NtjYGBsbDAbbBKjBJJBCQhLy1qRJk7VZunRd12lT12ZVVVVrb7dunTTtatrFrjZpF7vfp5j2CXqxq911IkYV6yb99Og80l/nf855XgBngJyGqBvvPeztnh6cPhC1K3YQdwZICyhR8CIcKda8CJfTOwileBHOj2W8CI+mNShRGBV7YMYN0SFSjouXcX7eFaacARIY9+GuYFwodSFKQTnVi3CXPJgNxG0gPgYSMzDnghgQE1wQM0dKXoSbDCedwcQYSLggxg0xDh/h8BGTQWoySLnCA7wIP3tegeU6MLB5ojDCKHJDTGs5QS9ma+o5et5gsDSNMAzK8bFMGudFIpMjxaqgt0vNpXwdiXIIoyXlBprWAkQmSGT9WMaPZUJENkTKbogeGDgDBDAJtevrL569fP7w+dmdsy8+evz0zudHS7vHvf1eqW4kCwYlm2xhiS/1RH01U/p4eefL08+eXb2VxDL5xubu+2fN9ZsFo6+aW/OtXdXcivGVGF+egZmBgQNEHSAaDVGLle7awmaRVRcKzZ2FrRKV3zTWbm/dvNG9Wo7nanTBTCktXu0IapcvrvDqQanJElJxcWf/9NHqwb3F/sli/2R594P6yhGeLuPpEQO7B4lFUlI8rzCKltbM3OV+dbk/v7zb3Dhe3ukV6rVErskWlwStJ+ob8vx1vfmuvni30eOInFRbM3s3BlNiS3i6jLIllC3F+PJoB5gDRJ3TsHsGmfXhEYSBI0kM5YiYQGACncjiSIqEWQpNJdB0DGGIKEdhPI0JfEIOwWyQyEYoxRr9WwzPwO5BHCCmm32js8fKdcAZBiYhwBYaBGOBweqOAFMRwBEB3NGLs5g9QNj8QyYCpB3E7SD+Jhi9tcNbNOaaG3PNFWvLzZVrhWqXyzdIXi1UuySv5itLOFuKp4qvHj95/f1367UreKZ8yRWZ8OFTQcIZIKzUVqIgkQ0R2SAhuiF61Aa46JpzuOHpSHIiQIIIH8DFMJkjeB2hlFhKD5MyRitfr+/9enSaT5chSkEoBUT4wUMbjFv3YyIYFWBaRRgtRMohUo5QSlI2UVYbGthcYQDwHXcOf/v59/bWrfVrd+OSGSYViCqFSQWmVYgqjeOyDcv5iUJKabP5VphUYny10t5PKW2IKsVFQ2teRVkdplWYVuOiUescFYzN4RmMTYSAS/5lvfv0ycv55trazgmrDFKMEokXI/EiRBZgWoNpNYDLKKsrxiYhGAFcxlKVXHUVptVzcT4uGmbvuNreHxoA40FgPEjlGgmpTkhNttjB+ep5Ldp/ULFUBUtVYFpDWf1NQEl1K35DKt9OF9vDv8gxAwGA7ccffvnzj1cHJ588fv6N2TuGGZ0QjLfA+aqor/DFDszocrW/uncvV+3DjF5u7bU2ThNSHeerlmbj8H5n+8MZmDvvwO63u0KTQeodT4ySjKRsWtlxvhobwdpaJVt+lGRaMkoyKckc1RSM/nxrzx1OTAUJ4OJUCAAuvPj2p7/+ft3eOD66/ajRPYRpzZoG9m8yepfNt2BaIwSj0t7nih2Y1hJSvdzaIwTD0iSkulLfzlX70xDtADEAsPsAwL2yc/ve2Vet1cOD0/tKY5sQjLhkjkIK9bhksvlWMt8ihTqbb13uHon6CpaqiPpKvXtkNTToLLuwffxg/fqnU0Hy3OCC54Ij4ABRYGrOM8fOIqlZmPFHOR/C+hDWH+X+F1+U9yIciPC+aAZEeOsBWfgxMUzKMKU4A4QDRP8BVEhZ6VFaUOYAAAAASUVORK5CYII=" nextheight="1080" nextwidth="1920" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">Liquidity Deposit Flow on Velodrome Finance</figcaption></figure><p>This opens up flexibility not just for basic (also called constant product or v2) pools, where all deposits cover all of a single price range (zero to <em>infinite</em>), but for any new type of pools, including concentrated pools, which can have multiple deposits, each responsible for a specific price range.</p><p>We've also made it easy to add or withdraw liquidity at any time, even if the existing deposit is staked, all reported in real-time by our dashboard fetching data directly onchain. We believe we can make the app even faster, so another engineering challenge for us is to keep optimizing the RPC reads further on to reduce even more the screens loading and refreshing time, and thus the number of RPC calls and costs.</p><p>To keep the web app light, most of the underlying math around ticks and Q96 notation values was also moved onchain, which helps maintain high precision in deposit estimates while adding a single new dependency: the charting library (which you will see soon as part of the liquidity distribution chart in the deposit screen).</p><p>We have a strict policy on the third-party libraries added to the web app, so it really makes us sleep better at night knowing our dependencies footprint is minimal.</p><p>Finally, we are happy to say that v3 of the web app had a net zero impact on the codebase size:</p><pre class="dont-break-out text-sm md:text-base"><code>169 files changed, 3879 insertions(+), 3837 deletions(-)</code></pre><h2 id="h-a-note-on-security"><strong>A note on security</strong></h2><p>Slipstream is a fork of Uniswap v3. And we've tried to do our best and build on top of the good things our friends brought onchain. The challenge here was to make only strictly necessary changes to the existing implementation due to the complexity and risk of introducing any regressions or potential security issues.</p><p>We went with the most stable version built on Solidity v0.7.6 and for every one line of code, we've added two more in tests. Overall, from approx.</p><pre class="dont-break-out text-sm md:text-base"><code>407 files changed, 35986 insertions(+), 5192 deletions(-)</code></pre><p>the tests folder shows</p><pre class="dont-break-out text-sm md:text-base"><code>195 files changed, 25886 insertions(+), 1984 deletions(-)</code></pre><p>We achieved this by maintaining the existing test coverage (both regular and invariant) and extending it to include coverage for the new features. The strong test coverage was very welcome and helped a lot with <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/spearbit/portfolio/blob/master/pdfs/Velodrome-Spearbit-Security-Review-Nov23.pdf"><u>the audit from our friends at Spearbit</u></a>.</p><p>On top of our features, we've also made changes to support popular community requests, such as:</p><ul><li><p>NoDeletageCall <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/Uniswap/v3-core/pull/327#issuecomment-813462722"><u>removal</u></a></p></li><li><p>Universal Router optional support for permit2 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://warpcast.com/moo/0xba3198f8"><u>in favor of ERC20 allowances</u></a></p></li><li><p>Universal Router unspent ETH refund, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://jeiwan.net/posts/public-bug-report-uniswap-swaprouter/"><u>audited by Jeiwan himself</u></a></p></li><li><p>Ability to create a pool when minting with the position manager</p></li><li><p>Position manager unspent ETH on deposits refund</p></li><li><p>Return of the emissions if a gauge has no staked liquidity</p></li></ul><h2 id="h-closing-notes"><strong>Closing notes...</strong></h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/cbf8d5e886f2b92b47dc978820c88116.gif" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAASCAIAAAC1qksFAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAGf0lEQVR4nDWUf1CT5wHH3xLz5v3943nzvm/y5s1v8gOQLRBCUKQgDiWAKLmilIJCKggpRSESiIJCA5GI2DKiOFGol7XWa+0Pbq3Vzh56dXZUrrP1bt52vXVz186pteXUrbu1twu93X3v+fP53vf5fO6Bzr48s3Dlg/nzcx/85s3583OX3n3nzVdmE6PRlVYbjZMsRTMkw5A0xwAB8DzgNYKkEUTAAoqgSZyiKFYUdRpRpgiKxEkcxTEEQxEMVsLKVJTQpffm/nLrs5uL124ufrx47cqhvX0dz2xtrPI1V1e6bHZAM5Io8UCQNDKggaTV85xA4hRDA1mr18smq8XhsK/Uag0cEBiaoymWxCkMxVWwarkAhq5fvfzd3b/fuf3F11/+eajr+SxJ8tptxfb0qkxHuTtXK+octkyNqHNl5xpkgz09c/nGzDx3gdudn+PK83gKS0rWFxautZjtHODVQKBplqZZkqAwlFTBKujm9U/+/fCbx0v3vrz1mdtsNAO2qcBzYW/P/EC4ubT4ydXFG33V+XkFVZWb1qwuyvescrs83rwCt8uTlZVjtTjMJptBb7GlO60Wm6Q1qDmBpgFF0ssFOAzD0M0/XP/h+0f/enj/8dLdUo+71Go6E2z59PDIjcOj3dW+bOfPjXqLKIiSRifwIs8JgAYMDWiKVQOeplkMwWCFUqlQYihO4hRNAxInURjFEEwFq1YoVkCff/rJj/95+OjBP3/87+P4/r4NRvlEoOFMsOX68MC5XR1vh0PZRhOKYCIvioIGsBxDUgzNsBTL0IBMgaUAyxlkk0E28ZygBmqaYn9CjcBIquDG4sIP3y89enD30Xd373z91+ORPQc3+96PhE63NB+oqb46PPheJMzglEFvLvB4vXnespK1655ct9pbIPDi/6cIGlEnaXRWs81stOi0Bp4TUvoxLEMz0OLC1cdL97+991Uq39w5M/3LntqKwTr/K13B8p9lhX3rbiWOzMajTruDpVi9Vi/wAmBYlqIBzaS8RHBEqUKUKoakMATDUw9FUkRqJUXQKci//+jK0oN/fHvvq9tf/HHx8vmpWGRmIjp34qXpgXBtceEev28hPvy3374TH+pLN6dnOlfmZudkODOt5nRZMjlsmXrZIGv1smSyWpx2W6bVbDPIlhRtIACWo0gKunLp4v07tz+evzj36+kLZ2denozFwh0Xzp4a2NV6bHiwbUt1/NnGyxNjc8njrdsb3C6Pr2z96oJCtyvPoLe4snM1omQyWkzGlEJajU4nGYzGdK1GVqvFFDAGQBfenfvTrc9jvZ3x3s7p8Why6lA8suvUeDSZGJ19MTYS6mjYUDJ7KHr64PBUrN9msWIoTlEsw7AAqDnAEzjJMCyBE/hyUBTDUBxFUqcKVqU0fev1szcWfre/uz0W7jjyQvjo6MCRwZ7Jkf7k0fhQV1ukNbCpyNtYXtoTaHz95MTMxIhB0tEUTeEUgZMYiiMwAithFaxSwSoEQZe7AcMAAidRFFMoVkDJ07ML1+ZDwWd31vsP7u0c6Xs+3t813NsxOdJ/+MCeYEPt9pI1Hb7SHVurB0PtyaOjTXVP5eW6XVlZBE6mpSmUSiVJpPQnCIrjeFGUtFq9pNWrOUHSypJWgqYTiYvvz40O7Wutq+nf1RLpbBkMBfd3t4WDzeGdjScT8XOJlz48NpmcmjiVGHsreaLOv7mosKi2xu92uasrNjrtziegJ1ILlCrAApIgFArF8j8HYyjGq3noxbGDr72aPHE80dLwVEtdTU+wOZXnAj3BpnCweepI7NzMr06NRqfGY2PRA3t7Qs+1Bdtag2XryrbUbt3Z2p7hzEhLUxA4gSKYUW8EgEMQFEUxiqSUyzVQdHDwWGLyWGKyL7R7U1lJsOnp9u1bOwL13e1N3W1NXa3bQm2BybHRN5In+7q76rY8PbCvf/zweE11TXdXyGF3QhCEoTiOEyRBOe0ZPC9qRIkkSBhW8Wq+yOuFIr29Y/HYSHQoHovWbqzcvKE0UO8P1Pt3NNY21/t3twVqKzeYZMMz/o07GmrVQC0CdV62y6KTjbLBJBt+UiUtTQFYkG6xla4traqsqvD5VhWsatq2rbq8HArt7nxhcP++SLi/v29zRUVhjusXhd6SfPf6NQXF+XnlRWvWej06QVO6yhuo8+dkZTAYAVQqmedpnNTxPIEgMAzDSpjACYEXzHoDYAEHOJpmVjoycjKz/gcSr+CRfXqZGQAAAABJRU5ErkJggg==" nextheight="280" nextwidth="500" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>We'd like to say thank you to everyone on the team for the incredible work we've put into this release, and to our partners who trusted us and supported our vision.</p><p>If the problem-solving challenges we're sharing resonate with you; you feel excited about building onchain products for the next billion users; and you enjoy working with small, dedicated teams, please reach out!</p><p>We'd be happy to hear from developers with front-end experience who will complement our team and help us lead Velodrome to be the Superchain MetaDex.</p><p></p>]]></content:encoded>
            <author>velodrome@newsletter.paragraph.com (Velodrome Engineering)</author>
            <category>dev</category>
            <category>concentrated-liquidity</category>
            <category>decentralization</category>
            <enclosure url="https://storage.googleapis.com/papyrus_images/15701cf9602cf9c4593c15157be3e53d.webp" length="0" type="image/webp"/>
        </item>
        <item>
            <title><![CDATA[Velodrome V2]]></title>
            <link>https://paragraph.com/@velodrome/v2</link>
            <guid>ufwRPLKbs3yDDjraVkNI</guid>
            <pubDate>Tue, 16 May 2023 14:08:44 GMT</pubDate>
            <description><![CDATA[This is a technical introduction into the design of the Velodrome V1 and its token emissions, and the challenges we faced in rolling out the new V2 of the protocol with respect to it's initial design goals, end-users experience and long-term maintenance.]]></description>
            <content:encoded><![CDATA[<h2>What is Velodrome?</h2><p>Quick recap of how the protocol works. Let's start with a simplified visual representation.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/db6ee1f434b21a9f50cbc749bbfe0635.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAJCAIAAADcu7ldAAAACXBIWXMAAAsTAAALEwEAmpwYAAABcUlEQVR4nM1QTUsCARScfxEtqeDZNBAFZQ918CSd1JToIB5EwZs3j57rB3gQIYm+YEtdFXHVbdFdXT92QdNII/TQqT8QBcZWSGVYXaI5PHiPGebNAH8Dmj7KZo8B6PX614tOpwPg9a4FAgGHw/GJX04l2/XzaplqCTTHJb838Pu3g8EdABbLikajUalUAMzm1XlmLBYD0BKo625ZrKUGcqnXzgMYj8e/yzSdTgF0+dSVzEhNGoDT6Xz5wKIkKOwPe5W+zIwuKyKfAeDz+bRaLUmaFHs+IzfyLHu4yICiKABtIdPi0xKfBuByrZtMhFqt9ng26bPYZMTf3dYnI752cQrA7d4wGJbsdjsASUhL9ZwkKqo3JBJ78fjubLXZlBmJhOaNBUEAwJVObgbcqM8Ne5VONT1L/K4A6YPMarWSpBGA0bhMEISJUBAKbYXD4S/zFQpxuZmTxGynkWXZAwDRaPSn7f8XPDLMU6n0UCzeL+Q9A5w6m/Jq1YT1AAAAAElFTkSuQmCC" nextheight="510" nextwidth="1735" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Velodrome is a protocol designed to enable token swaps by attracting liquidity. The protocol rewards liquidity providers (<strong>LPs</strong>) with VELO token emissions (from the <strong>Minter</strong>), which are distributed to liquidity pools proportionally to the votes each pool receives (casted on a weekly basis by <strong>Voters</strong>). Liquidity providers must stake their deposited liquidity (in a <strong>Gauge</strong>) to receive VELO tokens. VELO holders can lock their tokens to vote on the distribution of emissions. </p><p>The protocol is 100% immutable, so changes to the protocol mechanics are not supported. As a result, the Minter will distribute tokens based on the same rules in perpetuity.</p><h2>New version requirements</h2><p>Velodrome V2 will enable major features such as the concentrated liquidity support, dynamic fees, dynamic emissions rate and Relay, that will enhance Velodrome's performance and user experience. </p><p>Developing the best possible version of these features, however, required redesigning the protocol from the ground up.</p><p>Since immutable code cannot be changed, Velodrome V2 contracts are designed to interact with V1 to introduce new functionality (e.g., concentrated liquidity) and enable periodic maintenance tasks.</p><p>Velodrome V2 will still be 100% immutable, but it will come with:</p><ul><li><p>a liquidity pool factory registry, which allows us to add new liquidity pool types (eg. concentrated, multi-tokens, custom pools)</p></li><li><p>updatable gauges factory, to allow us support maintenance for these new pool type gauges and reward contracts</p></li><li><p>updatable rewards/bribes factory, to allows us in case of a security incident, to provide quick and long-term maintenance</p></li></ul><h2>The architecture of the V2 emissions</h2><p>To help understand the V2 emissions design, here's a simplified visual representation of the V1 and V2 changes (dotted lines).</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c4e8077b63cde74805ff421c85a9e092.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAgCAIAAABLpRWEAAAACXBIWXMAAAsTAAALEwEAmpwYAAABcElEQVR4nKWRsUsCYRjG372/xMXF4XAwF12aBYWglnPQxT0QdQuX839wMdKDmqRIRIIk8eBC+j7TuFOzvDy/E/VSuejCpDTUE7ln+nieH8/78n4AK4rH4yfHR2Asm81mFFMUZbVawZQymUwud25EVPFNRyyZmwIA08Gz9iECQKm0UsayLADoWkefvgCAQs52LFcbZaWLJwq/kZAkpPaw3MRgSqehUDAYNFHAcRejd4TQ9UYiHA5PZAGhyzVZJBJxOp3Lzr7D8Y+IRg/tdvv2PSRJQoVCOp3meb5evysWizPX6/X6adrlcgEAIWhIqrKMNVKbDESls+507M/P5fP5ZDLJMMzM8tM0kTDHXRmNJ+1HWb4HgGw26/P55qbbvbcgKIoyKlDbla9xUx8Jah8PezWlh/VBAwACgYPfEaSif75pmkiEh3H/adoXut0CAFgslu3nWcjj8fy9U6nUcrRj01yt1m0sFjMi5NdyIpFYtr4BSSizLti+FKIAAAAASUVORK5CYII=" nextheight="3078" nextwidth="1097" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>To allow the new functionality, Velodrome V2 will issue a new VELO token, convertible 1-to-1 with V1 token.</p><p>Both versions will operate in parallel to minimize disruptions and keep the emissions running according to the expected schedule.</p><p>With the old token captured and locked in perpetuity, the new token will take over naturally and follow the same emissions schedule and operational purpose.</p><p>As you can see in the diagram, once the voters switch to using the new V2 voter, the rest of the mechanics are identical to V1.</p><p>The process for migrating tokens from V1 to V2 will be as seamless as possible for end-users and partners. Their VELO tokens and locked positions (veNFTs) will be easily convertible to V2 versions.</p><h3>V1 token convertor</h3><p>To allow our users to redeem the V1 tokens for V2s, we designed a special liquidity pool, called <strong>$VELO V1-V2 Convertor Pool</strong>, that will accept V1 tokens for V2 tokens at a 1-to-1 rate. </p><p>The pool can be used as a regular pool by our routers or partner aggregators, thus facilitating a seamless conversion of new tokens. Similarly, holders of V1 locked positions will be able to convert their veNFTs to a V2 equivalent with the same vesting time and underlying locked token balance.</p><p>The V2 tokens will be provided directly by the new minter contract, via a management contract, called the <strong>SinkManager</strong>.</p><h3>Capturing V1 tokens</h3><p>Since V1 token will be emitted in perpetuity, the migration process will leverage Velodrome's existing mechanics to capture and lock all V1 tokens:</p><ol><li><p>The SinkManager contract will receive all V1 tokens and V1 veNFTs from <em>the convertor</em>. </p></li><li><p>The SinkManager will lock the V1 tokens and merge the V1 veNFTs into a single veNFT. </p></li><li><p>The SinkManager will use this veNFT to vote in perpetuity for a dummy pool created with tokens owned exclusively by the same contract.</p></li><li><p>The SinkManager will capture 100% of the emissions directed at the dummy pool and continue locking them into its veNFT. </p></li></ol><p>By locking converted tokens and capturing all emissions controlled by its veNFT, the SinkManager's share of voting power will trend towards 100%, <strong>ensuring that V1 token emissions remain contained within the contract</strong>.</p><p>Once live, protocols will direct voting rewards (bribes) to V2 gauges, which will incentivize V1 token and lock holders to migrate their positions to V2 as early as possible.</p><h3>V2 emissions</h3><p>The V2 minter contract will follow the same schedule as the V1 minter, with a theoretical start of 15M tokens in the first epoch and decaying at a rate of 1% per epoch. In other words, V2 tokens will be emitted at the same rate of V1 tokens.</p><p>However, <strong>the first week emissions for V2 will be slightly higher, since the lock rate will be close, but not identical to the one registered in V1</strong>.</p><p>This is an expected outcome, and was accepted by our audit partners. It will also serve as a minor incentive for users and partners migrating early to V2.</p><h2>Next steps</h2><p>This is probably the most technical part about the way Velodrome V2 works and the efforts the whole team took in order to make it still one of the most accessible DeFi protocols, despite the complexity.</p><p>If you're a partner, we will be reaching out to you to help with the development challenges or any support guidance.</p><p>If you're a user or a protocol, please keep an eye on the official migration announcements. The new app will provide a step-by-step walkthrough for migrating your tokens and liquidity positions. </p><p>For more questions, please reach out to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="http://discord.gg/velodrome">our dev team on Discord</a>, we'll be happy to answer any questions.</p>]]></content:encoded>
            <author>velodrome@newsletter.paragraph.com (Velodrome Engineering)</author>
            <category>velodrome</category>
            <category>v2</category>
            <category>migration</category>
            <category>velo</category>
            <category>venft</category>
        </item>
        <item>
            <title><![CDATA[Governance Delegation in AMMs]]></title>
            <link>https://paragraph.com/@velodrome/governance-delegation-in-amms</link>
            <guid>41ApGQ2bhhFQeXe3FoGy</guid>
            <pubDate>Tue, 28 Feb 2023 14:38:38 GMT</pubDate>
            <description><![CDATA[The Sleeping DeFi in the Governance Tokens!]]></description>
            <content:encoded><![CDATA[<p>Delegation for AMM liquidity pools, or simply the LP delegation, is the second planned feature that didn’t make it into Velodrome V2.</p><p>LP delegation would give owners of tokens in liquidity pools (LPs) the ability to vote to delegate their votepower to participate in governance for their relevant protocols. This feature would be particularly relevant to Optimism, where governance plays a large role in the ecosystem’s developments, including grants for emerging protocols.</p><p>The LP delegation idea came to us after reflecting on our <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://gov.optimism.io/t/ready-gf-phase-1-proposal-velodrome-finance/3736">Governance Fund 1st Phase Proposal</a>, one of the toughest secured grant by any project on Optimism so far.</p><p>Velodrome faced a contentious debate, leading to over one hundred replies and thousands of views back in November. The discussion thread went through multiple lockups due to the heated arguments it hosted. We even <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://opensea.io/assets/optimism/0x323e5d23bb4e8903f374205f1ddcd2f98d83a317/20">deployed and minted NFTs to major OP holders</a> to encourage participation.</p><p>While <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://snapshot.org/#/opcollective.eth/proposal/0xfeb1832a75e2ef47dea4b08509a16e4e9176e9d2a962c9466c5d345b37428384">we won the grant through voting</a>, enabling our Tour de OP program, we became sharply aware of the importance of governance when participating in a voter-led system.</p><p>LP delegation would unlock voting power for tens of millions of OP in liquidity pools across DEXs on Optimism. However, due to current limitations, and still an early development stage of alternative solutions, we have postponed any implementation until an optimal solution is available.</p><p>We’re happy to share our findings: why LP delegation matters, its shortcomings, and its potential implementation details.</p><h2>How Delegation works</h2><p>The basic ERC20 token delegation, which was introduced by <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://docs.compound.finance/v2/governance/#delegate">Compound</a> and popularized by <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://docs.openzeppelin.com/contracts/4.x/api/token/erc20#ERC20Votes">OpenZeppelin</a>, gives <em>voting power</em> to each token holder, where 1 unit of a token equals 1 unit of voting power. The full voting power of one address can be <em>delegated</em> to another address of choice. The voting power is then used to create, vote, and pass proposals for the relevant protocol.</p><h2>Why do we need token delegation</h2><p>Staying up to date with developments and governance proposals in a fast-growing ecosystem such as Optimism is a tall ask. Delegation allows token holders to grant their voting power to representatives committed to staying engaged, while maintaining the ownership of their tokens.</p><blockquote><p>Imagine you have a trusted friend called Jack who happens to work with the Optimism Foundation as well as the largest protocol on Optimism. You know Jack is active in the Optimism Governance and that he will use your voting power in the best interest of the ecosystem. By delegating your OP token voting power to Jack you are indirectly contributing to the good of Optimism!</p></blockquote><h2>Delegation for Liquidity Providers</h2><p>Liquidity providers are at the core of Velodrome and they are handling large amounts of tokens supporting delegation. Once they deposit these tokens into our smart contracts (eg. OP tokens and VELO tokens into the <code>vAMM-OP/VELO</code> liquidity pool), the tokens are moved from the wallet into the smart contract and any previously delegated amounts will also reflect this change, where the smart contract address will reflect the sum of all deposited tokens voting power!</p><blockquote><p>You can easily identify when the delegation changes take place in your account, by reviewing the events of a transaction. Just lookup for the <code>DelegateVotesChanged</code> events in the <em>Logs</em> tab on Etherscan.</p></blockquote><p>The smart contracts handling the liquidity pools do not provide any means to delegate the deposited voting power. Currently, <strong>millions of OP and other governance tokens deposited in Velodrome, or any other DEXes, sit unused</strong>.</p><h2>To delegate or not to delegate</h2><p>Currently, as a liquidity provider interested in participating in governance, you have the following sub-optimal options:</p><ol><li><p>Keep your tokens in the wallet without providing liquidity:</p><ul><li><p>miss out on passive revenue from liquidity incentives and fees when applicable</p></li><li><p>vote directly in governance decisions, which may have an influence on the value of your tokens</p></li><li><p>delegate voting power and thus still play a passive role in governance</p></li><li><p>potentially avoid taxable events until selling the tokens.</p></li></ul></li><li><p>Deposit tokens into liquidity pools, but withdraw before governance snapshots:</p><ul><li><p>earn passive revenue, most of the time</p></li><li><p>can vote on governance decisions</p></li><li><p>are potentially subject to taxable events from the transfer of the tokens</p></li><li><p>are subject to the time &amp; cost of extra transactions for every deposit and withdrawal</p></li><li><p>are subject to pricing fluctuations and impermanent loss</p></li><li><p>must remain highly engaged because voting snapshot times are very precise and take place often</p></li></ul></li><li><p>Deposit tokens into liquidity pools:</p><ul><li><p>earn passive revenue</p></li><li><p>forego participation in governance voting</p></li><li><p>potentially avoid taxable events from token transfers</p></li></ul></li></ol><hr><p>No single option is perfect for users, while protocols effectively force token holders to take one of the two sides:</p><ol><li><p>Actively engage in protocol governance</p></li><li><p>Provide liquidity to benefit from incentives and support DeFi needs</p></li></ol><p>LP delegation could solve this!</p><h2>Introducing LP Delegation</h2><p>The ideal LP delegation model would enable liquidity pool smart contracts to automatically delegate the deposited token voting power to a chosen representative or token owner.</p><p>Unfortunately, none of the currently available technical solutions are optimal to meet our criteria.</p><h3>1. Generic delegation support for liquidity pools</h3><p>Given how OpenZeppelin’s <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://docs.openzeppelin.com/contracts/4.x/api/token/erc20#ERC20Votes">ERC20Votes</a> work, we’d only be able to delegate the full balance of the liquidity in a pool.</p><p>This would require a governor implementation or some other trusted party to then call <code>Pair::delegate(address delegatee)</code> to delegate the underlying token amounts.</p><h3>2. Partial sub-delegation</h3><p>To overcome the limitations of the <code>ERC20Votes</code>, we would need an additional solution that splits the delegated amount based on the<br>share of the pooled tokens of every liquidity provider. In which case, our smart contracts would still delegate the full available balance to the partial delegation smart contract and let it handle the actual distribution to sub-delegates.</p><p>We found this partial delegation implemented in the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://github.com/w1nt3r-eth/liquid-delegator">liquid-delegator</a>, a joint project announced by <strong>WINTΞR</strong> and supported by multiple organizations.</p><div data-type="twitter" tweetId="1625974356240384000" > 
  <div class="twitter-embed embed">
    <div class="twitter-header">
        <div style="display:flex">
          <a target="_blank" href="https://twitter.com/w1nt3r_eth">
              <img alt="User Avatar" class="twitter-avatar" src="https://pbs.twimg.com/profile_images/1490848301624684546/7E5Qix04_normal.png" />
            </a>
            <div style="margin-left:4px;margin-right:auto;line-height:1.2;">
              <a target="_blank" href="https://twitter.com/w1nt3r_eth" class="twitter-displayname">WINTΞR 💙💛</a>
              <p><a target="_blank" href="https://twitter.com/w1nt3r_eth" class="twitter-username">@w1nt3r_eth</a></p>
    
            </div>
            <a href="https://twitter.com/w1nt3r_eth/status/1625974356240384000" target="_blank">
              <img alt="Twitter Logo" class="twitter-logo" src="https://paragraph.xyz/editor/twitter/logo.png" />
            </a>
          </div>
        </div>
      
    <div class="twitter-body">
      Agora is looking for a Solidity wizard <img class="twitter-emoji" draggable="false" alt="🧙" src="https://twemoji.maxcdn.com/v/14.0.2/72x72/1f9d9.png"/> who wants to build the next version of protocols powering the largest DAOs.<br /><br />You'll be working with ENS, Uniswap, Optimism, Nouns, and a bunch of other communities with $$B in TVL. And also with me :)<br /><br />RT plz<br /><br />
      
      
        <a class="twitter-card-link" href="https://t.co/rQDlCM4rai" target="_blank">
          <div class="twitter-media twitter-summary-large-image">
            <img src="https://pbs.twimg.com/card_img/1630271393270038529/3kcAW0FR?format=jpg&name=1200x627" >
            <div class="twitter-summary-card-text">
              <span>w1nt3r.mirror.xyz</span>
              <h2>Zero to Governance</h2>
              <p>One day, cleaning up your garage, you discover an old hard drive. You plug it into your fancy new MacBook and start looking through the files. One of them makes your heart rate go up — it's an...</p>
            </div>
          </div>
        </a>
       
    </div>
    
     <div class="twitter-footer">
          <a target="_blank" href="https://twitter.com/w1nt3r_eth/status/1625974356240384000" style="margin-right:16px; display:flex;">
            <img alt="Like Icon" class="twitter-heart" src="https://paragraph.xyz/editor/twitter/heart.png">
            82
          </a>
          <a target="_blank" href="https://twitter.com/w1nt3r_eth/status/1625974356240384000"><p>9:44 PM • Feb 15, 2023</p></a>
        </div>
    
  </div> 
  </div><h2>Challenges &amp; Limitations</h2><p>Our team went back-and-forth documenting the outcome of either of the proposed solutions and the limitations these bring.</p><h3>1. Generic delegation support for liquidity pools</h3><p>With the generic delegation and all the liquidity pool voting power being delegated to one voter, we faced some challenging questions to answer:</p><ul><li><p>Who determines the voter for the tokens? In an ideal scenario, the pool providers would be able to vote to determine the voter. We have not found a straightforward answer nor a technical solution to this.</p></li><li><p>Should the Velodrome Emergency Council determine this delegated voter? We were not convinced the interests of the council are aligned with those of the liquidity providers.</p></li><li><p>How do we align the interests of the liquidity providers and the beneficiary voter?</p></li><li><p>How do we generally limit the risk of liquidity providers withdrawing their tokens from our pools because of delegation concerns?</p></li><li><p>Finally, how do we convince partner protocols there’s no risk of having a too strong influence on protocol proposals (especially in the case of a security matter)?</p></li></ul><h3>2. Partial sub-delegation</h3><ul><li><p>Partial delegation is not yet audited nor officially in use, representing a security risk.</p></li><li><p>Sub-delegation for major custodians (eg. Coinbase Custody) is still an open question.</p></li><li><p>As a sub-delegate, the voter needs to vote through the <code>liquid-delegator</code>. This requires custom integrations into governance tools (technically speaking, using the current implementation, you need the path of vote delegation for each sub-delegation, eg. <code>[pool address =&gt; pool provider address =&gt; sub-delegate address]</code>). This could also become gas-intensive for a sub-delegate who receives delegations from many users.</p></li><li><p>Finally, the limitations on the final delegated amount will be heavily influenced by the way liquidity pools balance the claimable tokens for an LP due to volatility.</p></li></ul><h2>Conclusion</h2><p>As great as LP delegation would be in giving value to our protocol participants and partners, Velodrome V2 will not support it out-of-the-box because of the challenges and the limitations we found.</p><p>But with Velodrome V2, we are introducing the flexibility to deploy new types of liquidity pools (we recently announced the concentrated liquidity pools that will benefit from this flexible protocol design). This means that we can continue our research on LP delegation and present a release once we are happy with our and our partners’ progress in this direction.</p><p>In the meantime, if you want to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://gov.optimism.io/t/infrastructure-dependencies-nominations-for-rpgf2/4637/147">support existing work</a> or learn more about LP delegation or just share your concerns, join us on our <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://discord.gg/velodrome">Discord</a>. Special thanks to our <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://github.com/pegahcarter">Carter Carlson</a> for helping with this research, and to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://twitter.com/charliecfeng">Charlie Feng</a> for all the feedback!</p>]]></content:encoded>
            <author>velodrome@newsletter.paragraph.com (Velodrome Development Journal)</author>
        </item>
        <item>
            <title><![CDATA[A call for ENS adoption!]]></title>
            <link>https://paragraph.com/@velodrome/a-call-for-ens-adoption</link>
            <guid>dFbwpXaNDjnstEi2UJqV</guid>
            <pubDate>Mon, 20 Feb 2023 16:35:55 GMT</pubDate>
            <description><![CDATA[Yo, we tried giving an ENS name to all our smart contracts!]]></description>
            <content:encoded><![CDATA[<p>Velodrome V2 is much more than an upgrade. We redesigned the protocol entirely from the ground up to ensure we deliver a significantly improved end-user experience, developer-friendly features, and a generally more secure and simplified architecture at the smart-contract level. </p><p>One of our top goals for V2 is to move the protocol entirely on-chain. To do so, we&apos;re taking important steps to make it possible to run it as a fully decentralized public good. We&apos;ll be covering our approach in the upcoming weeks.</p><p>In this first publication, we&apos;ll start with one of the planned features that didn&apos;t make it into Velodrome V2 due to technical limitations. This is a deep-dive into the <em>Ethereum Name Service</em> (ENS) , how it works, and why its current implementation on a Layer 2 network like Optimism didn&apos;t align with our objectives.</p><p>We aim to cover this topic and engage with enthusiasts and partners to help build and support the efforts to improve the services available on Optimism. We will also be working with ENS and our partners to see how we can help make it happen in the near future.</p><h2>Let&apos;s name our contracts!</h2><p>Among our key planned features was assigning ENS names to all our contracts to make them human-readable and overall safer to interact with (e.g., <code>router-v1.optimism.velodrome.eth</code> instead of the unwieldy <code>0x9c12939390052919aF3155f41Bf4160Fd3666A6f</code>). </p><p>Intelligible contract names allow:</p><ul><li><p>users to quickly verify a smart contract by reading its name</p></li><li><p>security researchers and developers to search for any contract by a name</p></li><li><p>development teams to transparently release and communicate new contracts versions to all partners</p></li></ul><p>ENS is for Ethereum addresses what DNS is for the Internet: instead of typing <code>ping 8.8.8.8</code> to reach out to another computer on internet, you can just do <code>ping dns.google</code>, which is easier to remember and maintain.</p><p>Most readers will be familiar with the significantly improved user experience of interacting with a <code>&lt;YOUR NAME&gt;.eth</code> name directly instead of an error-prone raw address.</p><figure src="https://storage.googleapis.com/papyrus_images/281a98dd52df5083e742015cfe0586be.jpg" blurDataURL="data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAEAAQDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAf/xAAfEAACAgAHAQAAAAAAAAAAAAABAgARAwQFBwgTISL/xAAVAQEBAAAAAAAAAAAAAAAAAAACA//EABoRAAICAwAAAAAAAAAAAAAAAAACM3EBAwT/2gAMAwEAAhEDEQA/AKnxyxWbaHRq+VD5gKo9AHc9AXZiIg0xrRXpma8n/9k=" float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/281a98dd52df5083e742015cfe0586be.jpg" blurDataURL="data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAEAAQDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAf/xAAfEAACAgAHAQAAAAAAAAAAAAABAgARAwQFBwgTISL/xAAVAQEBAAAAAAAAAAAAAAAAAAACA//EABoRAAICAwAAAAAAAAAAAAAAAAACM3EBAwT/2gAMAwEAAhEDEQA/AKnxyxWbaHRq+VD5gKo9AHc9AXZiIg0xrRXpma8n/9k=" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>However, we couldn&apos;t find any of the available services for intelligible contract names on Optimism to offer the technical support we need to meet our core goals. </p><h2>Contracts claiming their own ENS</h2><p>Technically, assigning an ENS name requires two steps:</p><ul><li><p>assign a name to an address</p></li><li><p>claim the assigned name from an address</p></li></ul><p>The second step is actually what makes it possible to resolve an address to a name.</p><p>Since an address can have multiple names, and anybody can assign a name to a contract, claiming is required to resolve which name is attached to an address.</p><p>Based on these rules, we established the following list of requirements for our factory (the <code>PairFactory.sol</code>) to give names to all the contracts it deploys:</p><ol><li><p>First we give the factory a sub-domain it will <em>operate</em>, eg. <code>pairs.optimism.velodrome.eth</code>, which would use the <code>Registry::setSubnodeRecord()</code></p></li><li><p>Have the factory create a new name and assign it to the new pair address using the same pair symbol</p><ul><li><p>store the Factory reverse-registrar (which also comes with the registry) address and have a function to allow updating it in a permissioned way</p></li><li><p>dynamically reverse-resolve the sub-domain provided in the first step</p></li><li><p>use the same <code>Registry::setSubnodeRecord()</code> with the stored registry address and the operating sub-domain to assign newly deployed contracts new sub-domains (eg., <code>vAMM-VELO-OP.pairs.optimism.velodrome.eth</code>)</p></li></ul></li><li><p>Add a permissioned function that will let the pair claim the newly assigned name by resolving the reverse of its own address, this would use <code>ReverseRegistrar::setName()</code></p></li></ol><blockquote><p>Note, the first step is also easily done via the ENS app and allows us to keep the main name <code>velodrome.eth</code> safely in our multisig.</p></blockquote><h2>The challenges with ENS integration</h2><p>While ENS on Optimism offers functions to register and transfer the names, we didn&apos;t find the on-chain support for resolving names or reverse-resolve addresses to names.</p><p>Since we are on a Layer 2 network, the ENS support for Optimism is the next thing we started looking into. At the end, our research led us to the following list of blockers:</p><ul><li><p>ENS documentation confirms that <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out dont-break-out dont-break-out" href="https://docs.ens.domains/dapp-developer-guide/ens-l2-offchain">Layer 2 support is at best a prototype at the moment</a>. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out dont-break-out dont-break-out" href="https://github.com/stevegachau/optimismresolver">OptiNames</a> or a similar deployment to support the Layer 2, at the moment requires an off-chain service (which would go against our initial design goal of striving to build a decentralized protocol).</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out dont-break-out dont-break-out" href="https://docs.ens.domains/contract-developer-guide/resolving-names-on-chain">ENS node hashes</a> and generally the support for direct and reverse address lookups needs an official implementation</p></li></ul><p>Sadly, the work we estimated to get all these external features done, would seriously divert the time and resources from our core goals. This motivated us to share all the details in this article with the community.</p><h2>Conclusion</h2><p>We found that ENS on Optimism serves limited use-cases at its current stage, and we hope to see the ENS Foundation will consider any of the following feedback:</p><ol><li><p>The lack of on-chain support for resolving addresses is something crucial to help the developers adopt and develop on top of the service. We believe this will increase the adoption of ENS for critical to the community products like Etherscan and Metamask. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://github.com/OpenZeppelin/openzeppelin-contracts/issues/397">We need an official smart-contract implementation</a> to support the developer&apos;s needs.</p></li><li><p>The Layer 2 support, while still being a work-in-progress, is an absolute requirement to help test and experiment with the new product development and adoption of ENS across the Ethereum eco-system and other Layer 1 networks. Especially now, where <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://optimism.mirror.xyz/fLk5UGjZDiXFuvQh6R_HscMQuuY9ABYNF7PI76-qJYs">OP Stack</a> and cross-chain apps are leading the narrative.</p></li></ol><p>Despite the unsuccessful journey, we look forward to a future where on-chain addresses will have names!</p><p>We believe in a future where users don&apos;t have to pay/use external services to simulate a transaction at a potential cost of their privacy, and instead trust the ENS names as we trust DNS when connecting to another computer today. We want to send funds by typing our friends&apos; names into the wallets, and where Etherscan doesn&apos;t label the contracts based on what other Web2 services have to say.</p><p>If you&apos;re interested in learning how <u>you</u> can help, come ping our team in our <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="http://discord.gg/velodrome">Discord</a>, or directly <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://twitter.com/ZoomerAnon/">Zoomer on Twitter</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://warpcast.com/stas">Stas on Farcaster</a>.</p>]]></content:encoded>
            <author>velodrome@newsletter.paragraph.com (Velodrome Development Journal)</author>
            <category>ens</category>
            <category>v2</category>
            <category>smart-contracts</category>
        </item>
        <item>
            <title><![CDATA[Intro]]></title>
            <link>https://paragraph.com/@velodrome/intro</link>
            <guid>VSSU6f1De8KLIMhUkzim</guid>
            <pubDate>Thu, 09 Feb 2023 19:01:32 GMT</pubDate>
            <description><![CDATA[Velodrome Finance announcing the development team publication]]></description>
            <content:encoded><![CDATA[<p>Hi there fellow Optimists and Cyclists,</p><p>with the release of the Velodrome V2, we would like to start sharing all kind of development updates, R&amp;D and ideas that made it and didn&apos;t make it into the upcoming release.</p><p>The publication will be focused on engineering topics, but we will do our best to make it interesting and accessible for anybody curious to learn more about how Velodrome Finance is being designed and built.</p><p>Some of the upcoming topics we will be writing about include: governance, voting power delegation, L2 ENS, RPC performance, dApp integrations and optimizations and building a fully on-chain protocol.</p><p>Until soon 🚴💨✨</p>]]></content:encoded>
            <author>velodrome@newsletter.paragraph.com (Velodrome Development Journal)</author>
            <category>genesis</category>
            <category>dev</category>
            <category>velodrome</category>
            <enclosure url="https://storage.googleapis.com/papyrus_images/5308224efac2f719ff16a14c188feae1.jpg" length="0" type="image/jpg"/>
        </item>
    </channel>
</rss>