<?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>Plex Labs</title>
        <link>https://paragraph.com/@plex-labs</link>
        <description>Plex is a team of chain-native builders with backgrounds in quant trading and engineering. Currently, we're building Canto.</description>
        <lastBuildDate>Wed, 27 May 2026 03:45:28 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Plex Labs</title>
            <url>https://storage.googleapis.com/papyrus_images/e34679194aaceeb080dbd30317fb1b9a39770a0dd50a5c03dffd2ce9f81f89d1.jpg</url>
            <link>https://paragraph.com/@plex-labs</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[CSR - Redefining Developer Incentives
]]></title>
            <link>https://paragraph.com/@plex-labs/csr-redefining-developer-incentives</link>
            <guid>HeuGGLKqKbSty7ppPiKj</guid>
            <pubDate>Fri, 27 Jan 2023 20:27:20 GMT</pubDate>
            <description><![CDATA[Since the emergence of DeFi, experts have been discussing ways to incentivize the creation of public goods. Public goods, such as core infrastructure and services, play a crucial role in creating a more efficient ecosystem for users. However, their development has been hindered by the lack of proper financial incentives. Historically, protocols have accrued value through the launch of a governance token or by charging user protocol fees. However, these methods are misaligned with the nature o...]]></description>
            <content:encoded><![CDATA[<p>Since the emergence of DeFi, experts have been discussing ways to incentivize the creation of public goods. Public goods, such as core infrastructure and services, play a crucial role in creating a more efficient ecosystem for users. However, their development has been hindered by the lack of proper financial incentives.</p><p>Historically, protocols have accrued value through the launch of a governance token or by charging user protocol fees. However, these methods are misaligned with the nature of public goods. Governance tokens rely on speculation rather than usage to generate value, and user fees make accessing the protocol more expensive.</p><p>Builders who aim to create protocols for the common good, without relying on these methods, lack a viable way to be compensated for their work. Currently, they are limited to non-scalable and unsustainable options such as community grants.</p><p>In order to create an ecosystem that encourages builders to develop public goods, a new mechanism for incentivization must be introduced. Canto contributors have introduced <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://canto.mirror.xyz/QjMcVxG65ScvuK0uMQ9W7I0gyo77jrEUIKibxWz0ebI">Contract Secured Revenue (CSR)</a> to achieve this.</p><h3 id="h-what-is-csr" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">What is CSR?</h3><p>CSR is an opt-in module that allows a portion of the gas fee spent on a smart contract interaction to be collected in a CSR NFT designated by the smart contract developer. The CSR NFT’s owner can redeem the accumulated Canto at any time, and can specify how much of the available Canto they desire to withdraw.</p><p>Initially, 20% of the base fee will be allocated to the designated CSR NFT, but this can be adjusted through governance. An individual CSR NFT can accumulate fees from multiple smart contracts, but each smart contract can only direct its transaction fees to one CSR NFT.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7ea7e2ec2ad8df844ed761ce67c83cb567d236aaf1880315cad36e6a852790ea.png" alt="Gas fee without CSR vs with CSR" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Gas fee without CSR vs with CSR</figcaption></figure><p>We are excited for the launch of CSR because it enables developers to focus on maximizing good for the ecosystem by providing them with a sustainable form of compensation that does not involve playing token games or imposing protocol fees on users. Instead, developers can solely concentrate on promoting usage and enhancing their products.</p><p>Furthermore, unlike community grants, CSR scales with a protocol&apos;s growth. As the protocol becomes more successful and attracts more usage, the revenue generated from CSR will also increase.</p><h3 id="h-potential-applications-of-csr" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Potential Applications of CSR:</h3><p>We believe CSR opens up a new set of opportunities in protocol development, along with improving incentives for developers. Let’s dive into a few.</p><p><strong>CSR creates a new structure for financing and investing in protocols.</strong> CSR NFTs can be fractionalized and sold, allowing the community to support protocols they believe in. CSR benefits public goods specifically because they can directly generate revenue through gas fees, making them a much more appealing investment opportunity. Additionally, CSR NFTs can be wrapped in ways that allow free flowing customizability, such as adding governance powers, voting escrow and gauges, and any other complex token mechanism. Here is an example of how a CSR NFT’s ownership might be fractionalized:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1673d19695d1463bf4277664723e56804c5fd8cbed938c71bd03909cc888c7df.png" alt="Example of a fractionalized CSR NFT" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Example of a fractionalized CSR NFT</figcaption></figure><p>We expect this to drive a significant increase in capital investment for protocols and public goods projects. To determine the value of CSR NFTs, investors will have to consider various factors such as the projected price of Canto, the projected average cost of gas, the projected number of transactions on Canto, and the projected usage of the specific protocol.</p><p><strong>The use of CSR NFTs as collateral can open up a range of lending opportunities and enable liquidity.</strong> For example, a protocol can lock up a CSR NFT and allow the owner to borrow against the predicted future earnings of it. Interest rates for this type of loan will likely be high due to the level of risk, but well-established blue-chip protocols will have access to better rates and greater borrowing power. A new lending market centered around providing leverage for CSR NFTs is entirely possible. The broader impact of this will be an increase in liquidity across the ecosystem, especially for developers.</p><p><strong>CSR also provides an easy way to share compensation amongst a team working on a protocol.</strong> One CSR NFT can accrue revenue from multiple different smart contracts, allowing a team to more easily pool its revenue from multiple protocols. Furthermore, when Canto is withdrawn from a CSR NFT, the recipient can be specified, creating an easier means for sending and tracking compensation across multiple stakeholders.</p><p><strong>CSR lowers the barrier to entry for protocol development.</strong> CSR enables key pieces of infrastructure to generate revenue while also being free and publicly available to other users. This allows builders to utilize existing infrastructure to develop their own protocols at a much lower cost. Additionally, as teams no longer need to compete for liquidity, we will see an increase in the development of integrations and infrastructure across Canto. Teams can utilize freely available liquidity from FPI, and will be incentivized to build on top of existing FPI versus competing for liquidity. This will create an ecosystem where liquidity is less dispersed and used far more efficiently.</p><p>These are just a few of the endless possibilities created by CSR. We are excited to see how developers will implement CSR across a plethora of other use cases!</p><h3 id="h-how-to-use-csr" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">How to use CSR?</h3><p>After learning about various potential use cases for CSR, it might be helpful to give a general overview of how to implement CSR in your protocols. When a smart contract developer wants to enable CSR for a protocol, they need to register the desired smart contract with the CSR Module Store. The CSR Module Store is a Cosmos SDK module that holds a registry of all the deployed CSR contracts and CSR NFT IDs.</p><p>Since the CSR Module Store exists on the consensus layer (Canto Native), we need a way to interact with it on the Canto EVM during contract deployment. To solve this issue, contributors developed the Turnstile.sol smart contract which registers contracts on behalf of the CSR Module Store. To do this, contract deployment transactions need to call the register function from Turnstile.sol and specify the address of the CSR NFT (a new one is minted if not specified).</p><p>Once this is done correctly, the transaction flow for a smart contract registered with CSR will look like the following:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8e6d21127be15d0c0631e7f6f25fe559aa02bf7546a9e57ded5e3d449d88a9c2.png" alt="CSR Transaction Flow" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">CSR Transaction Flow</figcaption></figure><p>When a smart contract interaction occurs, the Ethermint module will process the transaction and check if that smart contract is registered in the CSR Module Store. If it is, 20% of the base fee paid will be sent to the CSR NFT.</p><p>To learn more about implementing CSR, check out the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.canto.io/evm-development/contract-secured-revenue">Canto documentation</a>. Contributors plan to release more documentation soon on using CSR to make it as easy as possible for developers to implement.</p><p>We are excited to see how CSR will impact the Canto ecosystem and are eager to see the protocols that will be launched with this technology! To read more about CSR <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/Canto-Improvement-Proposals/CIPs/blob/main/CIP-001.md">click here</a>.</p><hr><h2 id="h-about-plex" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">About Plex</h2><p>Plex is a group of builders with backgrounds in HFT, mechanism design, and software development. We are currently exploring the intersection of decentralized finance and social coordination. If interested in collaboration, please reach out at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Plex_Official">twitter.com/Plex_Official</a>.</p>]]></content:encoded>
            <author>plex-labs@newsletter.paragraph.com (Plex Labs)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/d4f3ae59fcb6ead03a8d8191b0f4512abb87b27d314a427312d31543f558ca84.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Canto: Year in Review 2022]]></title>
            <link>https://paragraph.com/@plex-labs/canto-year-in-review-2022</link>
            <guid>IMAULJPr1joElMexsjBq</guid>
            <pubDate>Fri, 06 Jan 2023 20:58:29 GMT</pubDate>
            <description><![CDATA[As we enter 2023, we’d like to take a moment to reflect on some of the key moments in the launch and development of Canto. Canto’s journey dates back to March of last year when several contributors got together and discussed the vision for Canto: a DeFi focused L1 powered by Free Public Infrastructure (FPI). Contributors saw issues with the existing incentives for liquidity providers, and realized that core DeFi infrastructure is optimal when operating as FPI funded by the network. At the tim...]]></description>
            <content:encoded><![CDATA[<p>As we enter 2023, we’d like to take a moment to reflect on some of the key moments in the launch and development of Canto.</p><p>Canto’s journey dates back to March of last year when several contributors got together and discussed the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://canto.mirror.xyz/STFv6-ZnOrsR6pJ7_JyFPt5JuhBXGQ3_lHNVEZAgUW8">vision for Canto</a>: a DeFi focused L1 powered by Free Public Infrastructure (FPI). Contributors saw issues with the existing incentives for liquidity providers, and realized that core DeFi infrastructure is optimal when operating as FPI funded by the network.</p><p>At the time, there was no other blockchain that operated in this way, and contributors saw an opportunity to create something new and innovative. So, along with other contributors, we decided to turn our thoughts into actions and began building the initial version of Canto.</p><p>Fast forward to July, contributors unveiled Canto to the public and announced the first major community event: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0x43617d5d3ab33bCC37F0fE29d969b0351514f377/p3qPb-KAetWoyGno4dHch3w2t06Vj505-WSwncOD1FU">Settlers of Canto</a>. This was Canto’s testnet event, and while it only ran for a single weekend, it was exciting to see tens of thousands of users interacting with Canto’s FPI. Importantly, we received valuable user feedback throughout the event and saw first hand the broader community join in on the discussion surrounding sustainable infrastructure and incentives.</p><p>Canto mainnet was launched 1 month later, and it began to quickly gain traction.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f91f82ddcf93de490f29d4358e6c173b080162c797d51d5c106d50feb72bcddb.png" alt="Canto&apos;s TVL over time (https://analytics.neobase.one/home)" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Canto&apos;s TVL over time (https://analytics.neobase.one/home)</figcaption></figure><p>In less than 1 month, Canto’s TVL grew to over $100M. 2 month’s later, Canto’s TVL reached $150M+.</p><p>However, while TVL growth is amazing, what’s been more meaningful to us is the growth of the Canto Ecosystem.</p><h3 id="h-canto-ecosystem" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Canto Ecosystem</h3><p>Since the launch of Canto, a primary focus of contributors has been growing the ecosystem. A blockchain cannot thrive without a strong community of builders. We’ve seen strong growth in the number of teams developing projects on Canto, and this number is increasing month over month.</p><p>NFTs have started to grow on Canto – projects such as <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/cantolongnecks">Canto Longnecks</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/CanToeNFT">CanToes</a> have been picking up traction. Canto Longnecks have already minted out and experienced over 1.3M $CANTO of trading volume on secondary markets such as <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://provenant.art/">provenant.art</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://alto.build/">Alto</a>.</p><p>We have also seen several projects being developed across DeFi, Gaming, Infrastructure, and other sectors. These projects include an auto-harvesting protocol, a decentralized naming service, and even an on-chain game of roulette.</p><p>The <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/theCOH_">Canto Online Hackathon</a>, which runs on a monthly basis, has also played a major role in growing the Canto ecosystem. It&apos;s been amazing to watch 35+ projects actively developed through the Hackathon, and we are excited to see the many more to come in 2023.</p><h3 id="h-free-public-infrastructure" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Free Public Infrastructure</h3><p>In the 5 months since launch, it has been exciting to see significant usage of Canto’s FPI.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/33982cca38cb59cbe7e87fab5fee9fb4f3a5fae4b7d8735c2f674810cba9f38c.png" alt="Trading Volume Over Time" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Trading Volume Over Time</figcaption></figure><p>The total trading volume across the Canto DEX’s 5 LP pairs has been over $650M. The best part is, this has saved users a significant amount of money because the Canto DEX has zero swap fees.</p><p>Assuming a fee of 0.3% for volatile pairs on most DEXs, and 0.05% for stable pairs, over $1M has been saved due to no swap fees over this period.</p><p>$NOTE, Canto’s unit of account, has also seen significant traction. In order to introduce Note into circulation, users must borrow it from the Canto Lending Market, and provide a stablecoin asset as collateral. Over the past 5 months, there has consistently been over $15M Note in circulation, and as of today, there is over $18M Note in circulation.</p><h3 id="h-key-canto-upgrades" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Key Canto Upgrades</h3><p>Since Canto’s launch, contributors have not lost sight of Canto’s vision, and have continued to improve Canto’s FPI. One of our key focuses has been engaging with users to understand their pain points. We have spoken with hundreds of users through platforms such as Twitter and Discord.</p><p>One of the most common issues users have brought up is that they have found it difficult to bridge assets onto the Canto network. To help users improve their bridging experience, contributors reached out to the team at Synapse Protocol, and Canto was successfully integrated with the protocol last month.</p><p>Additionally, after compiling specific feedback on the Canto FPI experience, we started working alongside other contributors to develop a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0x43617d5d3ab33bCC37F0fE29d969b0351514f377/kl1TTHTA97-2UX5C1pfKhY2x2aflRBP849rvBnCo2cU">second version of the interface for Canto’s FPI</a>. We rolled V2 out in December, and included features such as an interactive walkthrough on the bridging flow.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c8d29316809245c72a708510b2fa7161dcfd81aa96a409cff2f47981579573c4.png" alt="Synapse and Canto V2 Bridge" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Synapse and Canto V2 Bridge</figcaption></figure><p>Another initiative we began with several contributors in 2022 is the development of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://canto.mirror.xyz/QjMcVxG65ScvuK0uMQ9W7I0gyo77jrEUIKibxWz0ebI">CIP-1: Contract Secured Revenue (CSR)</a>. Ultimately, a network’s ability to attract developers is only as strong as the incentives it provides to them. We are excited by the possibilities of how CSR will change the way smart contract developers earn from their work, and provide incentives in a manner that aligns with Canto’s vision for Free Public Infrastructure. CSR is planning to launch very soon, stay tuned!</p><p>As a team, building Canto has been a transformative experience for us. We are thankful for the opportunity to work with amazing contributors who believe in the vision of Canto. 2022 has been a strong year for Canto, and we look forward to an even more prosperous year in 2023.</p><hr><h2 id="h-about-plex" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">About Plex</h2><p>Plex is a group of builders with backgrounds in HFT, mechanism design, and software development. We are currently exploring the intersection of decentralized finance and social coordination. If interested in collaboration, please reach out at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Plex_Official">twitter.com/Plex_Official</a>.</p>]]></content:encoded>
            <author>plex-labs@newsletter.paragraph.com (Plex Labs)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/d9dd8db85bc7b511119366c2d1913b80039ffc2d118436c502e8615e31c706d8.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Introducing V2 of Canto's Interface For its Free Public Infrastructure]]></title>
            <link>https://paragraph.com/@plex-labs/introducing-v2-of-canto-s-interface-for-its-free-public-infrastructure</link>
            <guid>Wt8Z8dfwp9qA97419krc</guid>
            <pubDate>Fri, 06 Jan 2023 19:57:14 GMT</pubDate>
            <description><![CDATA[Since the launch of Canto, the Plex team has been working on improvements for canto.io to provide a better user experience for the community. We&apos;ve updated all Canto FPI frontends, including the pages for Bridge, LP, Lending, Staking, and Governance. To ensure that these updates meet the needs of the Canto community, we’ve gathered feedback from users and used this feedback to guide our improvements. The following outlines some of the specific changes we’ve made.Canto BridgeThe Convert C...]]></description>
            <content:encoded><![CDATA[<p>Since the launch of Canto, the Plex team has been working on improvements for <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://canto.io/">canto.io</a> to provide a better user experience for the community. We&apos;ve updated all Canto FPI frontends, including the pages for Bridge, LP, Lending, Staking, and Governance. To ensure that these updates meet the needs of the Canto community, we’ve gathered feedback from users and used this feedback to guide our improvements.</p><p>The following outlines some of the specific changes we’ve made.</p><h3 id="h-canto-bridge" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Canto Bridge</h3><ul><li><p>The Convert Coin page has been deprecated.</p><ul><li><p>We’ve merged the Covert Coin webpage and the Canto Bridge into a singular bridging interface, where users can bridge from Ethereum through the Canto Bridge, and into the Canto EVM on the same webpage.</p></li></ul></li><li><p>A transactions tab has been added to track the status of funds that are being bridged.</p><ul><li><p>Users will be able to see funds that are currently being bridged, and all funds of theirs that have been bridged in the past.</p></li></ul></li><li><p>Capability to bridge directly to the Cosmos Hub.</p><ul><li><p>Users can now use the Canto Bridge to bridge directly to the Cosmos Hub, and no longer need to use Gravity Bridge to send funds from Canto → Cosmos Hub.</p></li></ul></li><li><p>Bridge In and Bridge Out are now individual tabs.</p><ul><li><p>The direction of bridging is now two separate tabs, making the flow of assets increasingly clear.</p></li></ul></li></ul><h3 id="h-canto-lp-interface" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Canto LP Interface</h3><ul><li><p>Supply LP tokens into the Canto Lending Market in the same modal as providing liquidity.</p><ul><li><p>We’ve made it easier to earn rewards for providing liquidity, by allowing users to also supply the LP tokens they receive to the Canto Lending Market on the same modal.</p></li></ul></li></ul><h3 id="h-canto-lending-market" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Canto Lending Market</h3><ul><li><p>Rewards for supplying assets are now more clear.</p><ul><li><p>Users can now more clearly see their accrued rewards from supplying in the Canto Lending Market.</p></li></ul></li></ul><h3 id="h-canto-staking" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Canto Staking</h3><ul><li><p>Search for validators by name.</p><ul><li><p>Users can more quickly find any validator of their choice through a search bar on the validators tab.</p></li></ul></li><li><p>Filter between active and inactive validators.</p><ul><li><p>Users can now filter between active and inactive validators, and avoid accidentally delegating to validators that are no longer active.</p></li></ul></li><li><p>Better overview of current staking positions.</p><ul><li><p>All current staking positions are displayed under the “my staking” tab. Users can now view all validators they are currently staked to and in the process of undelegating from in one page.</p></li></ul></li><li><p>Staking delegation modal includes separate tabs for delegating, undelegating, and redelegating Canto.</p></li></ul><h3 id="h-canto-governance" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Canto Governance</h3><ul><li><p>Improved proposal voting experience.</p><ul><li><p>Users can now see the impact their vote will have on the governance proposal, as well as an improved pie chart of the current voting status.</p></li><li><p>Proposal details are easier to view since they are now expanded further after being clicked.</p></li></ul></li></ul><p>Other than these specific changes, the frontends have also received changes in fonts and overall design for an enhanced experience.</p><p>We appreciate all of your feedback and will continue utilizing the community&apos;s feedback to improve Canto&apos;s FPI on an ongoing basis. Please feel free to report any feedback <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.google.com/forms/d/e/1FAIpQLSd7bzt8OPXLElLdYaP8E39bKyg_cczDa1ZhHfdLiD0hKV73Pw/viewform">here</a>.</p><hr><h2 id="h-about-plex" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">About Plex</h2><p>Plex is a group of builders with backgrounds in HFT, mechanism design, and software development. We are currently exploring the intersection of decentralized finance and social coordination. If interested in collaboration, please reach out at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Plex_Official">twitter.com/Plex_Official</a>.</p>]]></content:encoded>
            <author>plex-labs@newsletter.paragraph.com (Plex Labs)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/de413f636f65b6dfa2ba12734dc70b5e082b918fdefbccfb860359a2e918a95e.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Post-Mortem: Details & Mitigation of the GovShuttle Module Bug]]></title>
            <link>https://paragraph.com/@plex-labs/post-mortem-details-mitigation-of-the-govshuttle-module-bug</link>
            <guid>ES9V4QBpudWZqE3rPycx</guid>
            <pubDate>Fri, 06 Jan 2023 19:51:58 GMT</pubDate>
            <description><![CDATA[On September 18th, a bug in the GovShuttle module disrupted Canto Lending Market governance by not allowing proposals to be written to the governance contract on the Canto EVM. Specifically, upon the submission of governance proposal 16, a GovShuttle proposal intended to update comp speeds in the CLM caused some nodes to fail. The bug predominantly affected smaller validators and as a result did not pose a threat to the security of the Canto network. In the weeks since, the Plex team has cond...]]></description>
            <content:encoded><![CDATA[<p><strong>On September 18th, a bug in the GovShuttle module disrupted Canto Lending Market governance by not allowing proposals to be written to the governance contract on the Canto EVM. Specifically, upon the submission of governance proposal 16, a GovShuttle proposal intended to update comp speeds in the CLM caused some nodes to fail. The bug predominantly affected smaller validators and as a result did not pose a threat to the security of the Canto network.</strong></p><p>In the weeks since, the Plex team has conducted an extensive audit of the Canto codebase, and specifically our custom GovShuttle module. We are pleased to confirm we have identified the cause of the bug – non-determinism in the GovShuttle module – and mitigated it with the release of the v4.0.0 Canto validator binary.</p><p>Below, we provide a post-mortem of the bug in the interests of furthering the Cosmos SDK and Ethermint ecosystems and providing transparency to both Canto users and validators.</p><h2 id="h-timeline" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Timeline</h2><ul><li><p>September 18 – Block 804214</p><ul><li><p>On submission of proposal 16: a GovShuttle proposal intended to update comp speeds in CLM caused some nodes to fail.</p></li><li><p>Nodes that failed used a snapshot from block height &gt; 804214 originating from a node that did not fail in order to run their nodes again.</p></li></ul></li><li><p>October 18 – Block 1244562</p><ul><li><p>On execution of proposal 23: a GovShuttle proposal that passed in the voting stage did not append a lending market proposal to the mapContract .</p></li><li><p>All nodes were intact</p></li><li><p>Proposal appeared successful with no error messages</p></li></ul></li></ul><h2 id="h-description-of-issue" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Description of Issue:</h2><p>The <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/Canto-Network/Canto/blob/v3.0.0/x/govshuttle/keeper/proposals.go#:~:text=AppendLendingMarketProposal">AppendLendingMarket</a> function of the GovShuttle module is a function that is called on submission and execution of lending market proposals and is intended to append the proposal metadata to the mapContract on the Canto EVM. In Canto v3.0.0, the address of the mapContract is stored in the keeper using the following lines of code:</p><pre data-type="codeBlock" text="if nonce == 0 {
    *k.mapContractAddr, err = k.DeployMapContract(ctx,lm)
    if err != nil {
        return nil, err
        }
        return lm, nil
    }
"><code><span class="hljs-keyword">if</span> nonce <span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span> {
    <span class="hljs-operator">*</span>k.mapContractAddr, err <span class="hljs-operator">=</span> k.DeployMapContract(ctx,lm)
    <span class="hljs-keyword">if</span> err <span class="hljs-operator">!</span><span class="hljs-operator">=</span> nil {
        <span class="hljs-keyword">return</span> nil, err
        }
        <span class="hljs-keyword">return</span> lm, nil
    }
</code></pre><p>This code checks if the nonce of the GovShuttle is 0, and if so, sets the mapContractAddr to the deployed mapContract’s address. The GovShuttle nonce is only 0 if no lending market proposals have been submitted. On execution of the first lending market proposal, the GovShuttle will deploy the mapContract to the EVM and the nonce will increment by 1.</p><p>The following lines of code show the CallEVM function call that is used to append the lending market proposal metadata to the mapContract:</p><pre data-type="codeBlock" text="_, err = k.erc20Keeper.CallEVM(ctx, contracts.ProposalStoreContract.ABI, types.ModuleAddress, *k.mapContractAddr, true, &quot;AddProposal&quot;, sdk.NewIntFromUint64(m.GetPropId()).BigInt(), lm.GetTitle(), lm.GetDescription(), ToAddress(m.GetAccount()), ToBigInt(m.GetValues()), m.GetSignatures(), ToBytes(m.GetCalldatas()))
"><code><span class="hljs-keyword">_</span>, err <span class="hljs-operator">=</span> k.erc20Keeper.CallEVM(ctx, contracts.ProposalStoreContract.ABI, types.ModuleAddress, <span class="hljs-operator">*</span>k.mapContractAddr, <span class="hljs-literal">true</span>, <span class="hljs-string">"AddProposal"</span>, sdk.NewIntFromUint64(m.GetPropId()).BigInt(), lm.GetTitle(), lm.GetDescription(), ToAddress(m.GetAccount()), ToBigInt(m.GetValues()), m.GetSignatures(), ToBytes(m.GetCalldatas()))
</code></pre><p>Since this EVM call uses the keeper storage to determine the mapContractAddr, non-determinism between nodes was introduced. Nodes that persisted the keeper storage on their memory would have the correct mapContractAddr, whereas nodes who lost the keeper storage would use nil as the address value.</p><p>This means that the first lending market proposal would always be successful, while subsequent proposals would have an increasing likelihood of failure as time went on. Eventually, it is likely that all nodes would lose the GovShuttle keeper storage on memory and all nodes would use nil as the address value.</p><p>This explains the behavior of the bugs that occurred on mainnet. The first 2 lending market proposals, 7 and 8, were successful and caused no issues for any nodes. Proposal 7 set the address in the keeper storage using the code from snippet 1, and because proposal 8 followed shortly after, the address persisted in each node’s memory. All nodes had the same correct map contract address during this time.</p><p>However, proposals 16 and 18 caused some nodes to appHash and fail. These proposals were submitted 30 days after proposals 7 and 8. During this 30 day period, it is likely that some nodes lost their keeper storage in memory due to reboots. As a result, the nodes that persisted the correct mapContractAddr stayed up and nodes with nil value as the address failed.</p><p>The most recent lending market proposal (proposal 23) did not cause any nodes to appHash and was submitted successfully. On execution it did not append the proposal metadata to the mapContract as intended. As this was 60 days after the address was first written to the keeper storage, it is likely that all nodes were using the nil value at this point. It is also possible that the recent chain upgrade from v2.0.0 to v3.0.0 and the planned upgrade halt cleared the keeper storage for all nodes. Since all nodes were using the nil value as the address to write the proposal metadata to, no nodes failed and the proposal was not successfully written.</p><h2 id="h-resolution" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Resolution</h2><p>The fix for this bug was quite simple. The only code change required was to persist the mapContractAddr to the KV store. This ensures that the address stays consistent and prevents any non-determinism amongst nodes. </p><p>For more information on the custom GovShuttle module, you can review Canto <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.canto.io/technical-reference/governance">governance documentation</a> as well as our <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0xa02359af444C23cbFe66bf5675CB57B3E520D16F/fd5SWVJOXo0A1bN-4AehDgQeQjjQrMAsj6l4a2uBE3c">initial overview</a>.</p><hr><h2 id="h-about-plex" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">About Plex</h2><p>Plex is a group of chain-native builders with backgrounds in HFT, mechanism design, and software development. We are currently exploring the intersection of decentralized finance and social coordination. If interested in collaboration, please reach out at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Plex_Official">twitter.com/Plex_Official</a>.</p>]]></content:encoded>
            <author>plex-labs@newsletter.paragraph.com (Plex Labs)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/ee35fddec4add5303a590848280e870b9e78d84496dd1c073f57030c47430307.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Settlers of Canto Retrospective
]]></title>
            <link>https://paragraph.com/@plex-labs/settlers-of-canto-retrospective</link>
            <guid>0q2a3nGNYP9RUI785dWz</guid>
            <pubDate>Fri, 06 Jan 2023 19:36:01 GMT</pubDate>
            <description><![CDATA[We’d like to thank everyone for participating in our testnet this weekend. We originally expected to get <100 users, but ended up with far greater participation. We wanted to recap some of the highlights from this experience. Our thoughts below:Participation:26,000 unique settlers34,000 unique visitors to the testnet site43,000 transactions across the Canto DEX and Canto Lending MarketSettlers Feedback:The reception we received allowed us to test how Canto’s nodes and primitives responded to ...]]></description>
            <content:encoded><![CDATA[<p>We’d like to thank everyone for participating in our testnet this weekend. We originally expected to get &lt;100 users, but ended up with far greater participation. We wanted to recap some of the highlights from this experience. Our thoughts below:</p><h2 id="h-participation" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Participation:</h2><ul><li><p>26,000 unique settlers</p></li><li><p>34,000 unique visitors to the testnet site</p></li><li><p>43,000 transactions across the Canto DEX and Canto Lending Market</p></li></ul><h2 id="h-settlers-feedback" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Settlers Feedback:</h2><p>The reception we received allowed us to test how Canto’s nodes and primitives responded to a large volume of users. Additionally, thousands of settlers gave feedback through surveys, DMs, and messages in the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/+1I1JgueMSbU2NjRh">Settlers telegram</a>, allowing us to find issues in the UI/UX and rapidly iterate the protocols.</p><p>For example, one settler gave the following feedback:</p><blockquote><ol><li><p>Issue adding liquidity in the DEX LP page - i was adding CANTO + ETH - by default, CANTO was on the left side + ETH was on the right - i chose max ETH, and CANTO amount auto-populated as expected - but when i clicked &quot;add liquidity,&quot; some kind of JSON error message came up on the webpage; MetaMask was never triggered - so i switched the order of the assets; i.e., i made it so ETH was on the left and CANTO was on the right - all worked fine after doing that.</p></li><li><p>Issue supplying CANTOETHLP tokens on the lending page - when i got to the step of generating a tx to supply my LP tokens, I clicked &quot;max,&quot; and the total amount of LP tokens auto-populated - but then when i clicked the button to supply, the word &quot;canceled&quot; came up somewhere on the screen, and MetaMask wouldn&apos;t trigger - i tried again, and this time, i lopped off a bunch of decimal places at the end of the LP token amount - don&apos;t recall how many decimal places, but i think I left only 6 - after doing that, everything was fine + i was able to supply.</p></li></ol></blockquote><p>Other settlers gave feedback such as:</p><ul><li><p>a non-sticky cursor when entering values in modals</p></li><li><p>hypothetical borrow limits not changing when supplying to a non-collateralized asset</p></li><li><p>mobile UI/UX improvements</p></li><li><p>resizing issues with the webpage on certain browsers</p></li></ul><p>Using these insights, we were able to update our front ends to allow for more seamless interactions between users and Canto’s primitives.</p><h2 id="h-overall-reception" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Overall Reception:</h2><p>Universal accessibility and ease of use are core values of Canto’s primitives. We were happy to see that many settlers experienced this during the Settlers of Canto testnet. One settler commented:</p><blockquote><p>“It looks like a simple application united under one window. away from the complex structure of crypto is beautiful.”</p></blockquote><p>Another said:</p><blockquote><p>“I really like the way NOTE works. I also see very interesting the possibility of being able to add collateral LP tokens.”</p></blockquote><p>Settlers of Canto allowed us to thoroughly test our platform with thousands of real users. We were able to engage with our community and introduce Canto’s primitives in an interactive manner.</p><h3 id="h-will-testnet-contributors-join-the-genesis-block" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Will testnet contributors join the genesis block?</h3><p>Be sure to follow and turn on notifications for <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/CantoPublic">@CantoPublic</a>.</p><hr><h2 id="h-about-plex" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">About Plex</h2><p>Plex is a group of chain-native builders with backgrounds in HFT, mechanism design, and software development. We are currently exploring the intersection of decentralized finance and social coordination. If interested in collaboration, please reach out at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Plex_Official">twitter.com/Plex_Official</a>.</p>]]></content:encoded>
            <author>plex-labs@newsletter.paragraph.com (Plex Labs)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/9e130542085170a631da3e1e0573b4ffc5742f18e485f9e5f696d37965d3cc89.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Cross-Runtime Governance]]></title>
            <link>https://paragraph.com/@plex-labs/cross-runtime-governance</link>
            <guid>YLtHASn4OGXQbixXAaJa</guid>
            <pubDate>Fri, 06 Jan 2023 19:14:19 GMT</pubDate>
            <description><![CDATA[In order for Canto to implement network governance control over applications deployed to the EVM, a method of transporting and verifying information from Cosmos SDK governance is required. This is where Canto’s custom GovShuttle module comes into play. This module allows proposal information from SDK governance to be read and implemented by applications on the EVM.Passing information from SDK Module to EVM:The GovShuttle module is a Cosmos SDK module that unifies network and DApp governance. ...]]></description>
            <content:encoded><![CDATA[<p>In order for <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://canto.io/">Canto</a> to implement network governance control over applications deployed to the EVM, a method of transporting and verifying information from Cosmos SDK governance is required. This is where Canto’s custom GovShuttle module comes into play. This module allows proposal information from SDK governance to be read and implemented by applications on the EVM.</p><h3 id="h-passing-information-from-sdk-module-to-evm" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Passing information from SDK Module to EVM:</h3><p>The GovShuttle module is a Cosmos SDK module that unifies network and DApp governance. The module allows stakers of Canto to create and vote on governance proposals that can be transported to a proposal store contract called Port on Canto’s EVM. On initialization, GovShuttle’s keeper checks to see if the Port exists. If it hasn’t been deployed, the keeper will use the <code>DeployMapContract</code> function to deploy the Port.</p><pre data-type="codeBlock" text="if nonce == 0 {
  *k.mapContractAddr, err = k.DeployMapContract(ctx, lm)
  if err != nil {
    return nil, err
  }
  return lm, nil
}
"><code><span class="hljs-keyword">if</span> nonce <span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span> {
  <span class="hljs-operator">*</span>k.mapContractAddr, err <span class="hljs-operator">=</span> k.DeployMapContract(ctx, lm)
  <span class="hljs-keyword">if</span> err <span class="hljs-operator">!</span><span class="hljs-operator">=</span> nil {
    <span class="hljs-keyword">return</span> nil, err
  }
  <span class="hljs-keyword">return</span> lm, nil
}
</code></pre><p>This contract is wholly owned by the module itself and <em>cannot</em> be modified by any other account. Deployment of this contract is handled by the GovShuttle’s keeper and at its core utilizes the <code>Create</code> function in Geth.</p><p>After deployment of the Port, users have the option to submit special proposal types that are routed to the GovShuttle. On passing, the GovShuttle’s keeper calls a function called <code>AppendProposal</code> , which uses Geth’s <code>Call</code> function to add the proposal’s data to the Port. The Port can then propagate these proposals to DApps on the EVM.</p><pre data-type="codeBlock" text="func handleLendingMarketProposal(ctx sdk.Context, k *keeper.Keeper, p *types.LendingMarketProposal) error {
  err := p.ValidateBasic()
  if err != nil {
    return err 
  }
  _, err = k.AppendProposal(ctx, p)
  if err != nil {
    return err 
  }
  return nil 
}
"><code>func handleLendingMarketProposal(ctx sdk.Context, k <span class="hljs-operator">*</span>keeper.Keeper, p <span class="hljs-operator">*</span>types.LendingMarketProposal) <span class="hljs-function"><span class="hljs-keyword">error</span> </span>{
  err :<span class="hljs-operator">=</span> p.ValidateBasic()
  <span class="hljs-keyword">if</span> err <span class="hljs-operator">!</span><span class="hljs-operator">=</span> nil {
    <span class="hljs-keyword">return</span> err 
  }
  <span class="hljs-keyword">_</span>, err <span class="hljs-operator">=</span> k.AppendProposal(ctx, p)
  <span class="hljs-keyword">if</span> err <span class="hljs-operator">!</span><span class="hljs-operator">=</span> nil {
    <span class="hljs-keyword">return</span> err 
  }
  <span class="hljs-keyword">return</span> nil 
}
</code></pre><h3 id="h-reading-shuttled-data-in-evm" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Reading Shuttled Data in EVM:</h3><p>Reading a proposal written to the Port is as simple as querying the contract using the function <code>QueryProp</code>. This function takes in a proposal id as an argument and returns the corresponding proposal’s data. In doing so, contracts on Canto’s EVM can now read data from proposals passed from the Cosmos SDK. This allows any application to become a Free Public Good by integrating its governance directly into network governance with very little modification. Technically speaking this system can be generalized for any form of cross runtime information passing including additional proposal types allowing for a highly flexible, application-agnostic interface.</p><p><strong>Below is a visual representation of how this system works:</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/bda0078ea6ccc351dfbc957bc78e80dc0b8139dbd25e41f58ed3510ee0b8a27c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>By using GovShuttle and generalizing it further for additional data types, Canto stakeholders can govern an arbitrary number and type of applications on the EVM. This will allow our community to have the control and flexibility over <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://canto.mirror.xyz/STFv6-ZnOrsR6pJ7_JyFPt5JuhBXGQ3_lHNVEZAgUW8">Free Public Infrastructure</a> that is necessary for the stability and growth of Canto.</p><hr><h2 id="h-about-plex" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">About Plex</h2><p>Plex is a group of chain-native builders with backgrounds in HFT, mechanism design, and software development. We are currently exploring the intersection of decentralized finance and social coordination. If interested in collaboration, please reach out at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Plex_Official">twitter.com/Plex_Official</a>.</p>]]></content:encoded>
            <author>plex-labs@newsletter.paragraph.com (Plex Labs)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/a3ded574d47fe3907fa794a91eff78ffe26cbcc0d4cdb683edc7518d947db702.jpg" length="0" type="image/jpg"/>
        </item>
    </channel>
</rss>