<?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>carlosbeltran.eth</title>
        <link>https://paragraph.com/@carlosbeltran-2</link>
        <description>cofounder @madfinance.lens</description>
        <lastBuildDate>Thu, 27 Aug 2026 02:58:32 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>carlosbeltran.eth</title>
            <url>https://storage.googleapis.com/papyrus_images/121fe4423535de50c138555dd11f83f604f6cd7fa6ce2601c134b5ff62335106.png</url>
            <link>https://paragraph.com/@carlosbeltran-2</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[Crypto social will spawn entirely new networks]]></title>
            <link>https://paragraph.com/@carlosbeltran-2/crypto-social-will-spawn-entirely-new-networks</link>
            <guid>xXd11n64DDopT0b8xJlg</guid>
            <pubDate>Wed, 08 Nov 2023 13:11:55 GMT</pubDate>
            <description><![CDATA[And I think they will fuel the next bull run. Social activity + mobile feeds + onchain media = maximum degeneracy.Our public onchain activity will be bundled into social feeds that are easy to digest and take actions on. We won’t just be users, but integral parts of the value creation - where every like, share, and comment moves the needle. We&apos;ll move away from conventional advertising towards innovative business models that offer more effective, transparent, and rewarding distribution. ...]]></description>
            <content:encoded><![CDATA[<h2 id="h-and-i-think-they-will-fuel-the-next-bull-run-social-activity-mobile-feeds-onchain-media-maximum-degeneracy" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">And I think they will fuel the next bull run. Social activity + mobile feeds + onchain media = maximum degeneracy.</h2><p>Our public onchain activity will be bundled into social feeds that are easy to digest and take actions on.</p><p>We won’t just be users, but integral parts of the value creation - where every like, share, and comment moves the needle.</p><p>We&apos;ll move away from conventional advertising towards innovative business models that offer more effective, transparent, and rewarding distribution.</p><p>I’ve been building in crypto social since Lens was on testnet - and I’ve never been more hyped than I am now.</p><h2 id="h-tldr" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">TLDR;</h2><ul><li><p>innovation in web2 platforms has stagnated and there is an appetite for new consumer social experiences, with the tech stack to support</p></li><li><p>onchain is the new online, with digital ownership driving the shift from passive consumption to active participation</p></li><li><p>protocols like Lens and Farcaster are catalysts for the emergence of high-definition social networks which utilize onchain data to accurately measure and incentivize engagement</p></li><li><p>builders will be competing to be the preferred client, with less competition at the protocol layer to offer monetization + cross-chain functionality</p></li><li><p>MadFi Social Clubs</p></li></ul><h3 id="h-there-is-an-appetite-for-new-consumer-social-experiences" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">there is an appetite for new consumer social experiences</h3><p>Traditional social media platforms are in a state of decay. Other than copying each other’s features, there’s not much incentive for them to innovate; their bottom line is to maintain our attention long enough to show us another ad. I think TikTok was the pinnacle of web2 social media - the culmination of a decade of perfecting the highly addictive feed + algorithm model.</p><p>I think we’ve had enough of that, and the generation of kids after me definitely don’t want anything to do with Facebook. They want something new. Rage against the machine.</p><p>There’s never been a better time to build a consumer application.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/549eba7cafc40edfac35a6026ddfb99cab8fa2807cad0391e2be8448de2bc02e.png" alt="Podcast Linked: https://open.spotify.com/episode/32El1BXQm3PzLU871JMtfG?si=3ad10326724d493b" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Podcast Linked: https://open.spotify.com/episode/32El1BXQm3PzLU871JMtfG?si=3ad10326724d493b</figcaption></figure><p>Moreover, I think we finally have the tech stack to build crypto-native apps that feel like normal apps. It was a big theme at Paradigm Venture’s “Consumer Crypto Hackathon” in NYC two weeks ago. The two biggest unlocks in my opinion were</p><ul><li><p>Managed wallets + social login + PWA with Privy</p></li><li><p>Paymaster to sponsor user transactions on Base</p></li></ul><p>With these abstractions, users don’t deal with connecting their wallet, switching networks, or approving transactions.</p><p>I’ll also say that crypto social applications won’t replace traditional social media. We can simply view web2 social as top-of-the-funnel distribution channels, with crypto social focused on converting those users to onchain media, where they join the new internet being built.</p><h3 id="h-onchain-is-the-new-online" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">onchain is the new online</h3><p>This basically means more and more of what we do on the internet will go on some blockchain or data availability layer and will be linked back to our crypto wallets.</p><p>This is <strong>digital ownership</strong>, and it’s paving the way for new business models and new feelings of psychological ownership that will create stickier products than those of the last generation. Gamers understand this.</p><p>“Anything on the internet that can be an NFT, will be an NFT” is a line I read a few years ago, and it’s starting to materialize as we’re adding the word <strong>onchain</strong> before everything on the internet</p><ul><li><p>onchain <em>music</em></p></li><li><p>onchain <em>media</em></p></li><li><p>onchain <em>games</em></p></li><li><p>onchain <em>ads</em></p></li></ul><p>If we can assume this trend won’t slow down and more of what we consume online is collectable, interoperable, and programmed to handle the exchange of value - then we can also assume that our online behavior will change as a result of this. We’ll go from doom-scrolling to actively engaging with and promoting content that we align with - simply because of the effects of ownership. We’ll have skin in the game.</p><h3 id="h-high-def-social-graphs-will-utilize-onchain-data-to-measure-incentivize-engagement" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">high-def social graphs will utilize onchain data to measure + incentivize engagement</h3><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://lens.xyz/">Lens</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://farcaster.network/">Farcaster</a> are both crypto social protocols that offer social graphs, infra a framework for building social applications. They help solve the cold-start problem by giving builders access to a growing network. Just like slack is built on company graphs, Facebook on college graphs, Discord on gamer groups - building on top of these existing graphs means not starting from scratch.</p><p>But crypto social opens the door to an entirely different type of network, one that’s grounded not in click-bait, hype, or propaganda, but in economic interactions on the blockchain. Here, the use of onchain data - like asset ownership, product engagement, and transaction patterns - becomes the foundation.</p><p>We have a design space where activities such as promoting content, securing sponsorships, purchasing NFTs, and experimenting with new protocols are all data points and building blocks of a rich, high-definition social graph that blurs the lines between brands/sponsorships/creators/superfans/followers.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9c168a71c8c32059eaa4df663cd364fadbfed21c251e97f6ab983471e7b18eb1.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-stiff-competition-to-become-the-next-big-social-media-app" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">stiff competition to become the next big social media app</h3><p>One interesting observation in the Lens ecosystem is that everyone is building clients + developer tooling on top of the Lens social graph. We have several general-purpose mobile apps, and some focused on video and music. And I’m sure there’s clones of every type of app on Farcaster, DeSo, etc.</p><p>It’ll also be interesting to see whether value accrues horizontally across the ecosystem, or vertically with a single client capturing the majority of traffic and being the entry point for onchain social interactions.</p><p>Regardless, I think there will be an opportunity to build the monetization protocol for these applications, transcending basic 1% mint fees to include premium content, sponsored posts, and onchain rewards.</p><h2 id="h-what-could-crypto-social-look-like" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What could crypto social look like?</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/505d1e6dbf83fe413e2e07ac9266b94117611f789ee1bf9dd2afde9fef791244.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><ul><li><p>Earning loyalty points on your favorite creator every time you interact with their most important social posts, and using them towards a free month of premium content</p></li><li><p>Social clubs with niche feeds; community-generated content pays out in USDC</p></li><li><p>Crypto subscriptions as real-time money streams</p></li><li><p>Creating an onchain social post that promotes your creator’s new opensea collection, and you get 5% commission on all sales made from your post</p></li><li><p>Members from your social club collaborate to promote one person’s drop, and 20% of the sales get automatically distributed back to contributing members based on loyalty points</p></li></ul><p>At <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://madfi.xyz">MadFi</a>, we’ve been building and experimenting with crypto social for over a year. From a self-serve ad platform, to sponsored posts and crypto subscriptions. With our next release, our features are coming together for a more cohesive consumer app.</p><h3 id="h-madfi-social-clubs-find-your-favorite-content-join-a-social-club-and-earn-rewards-for-using-crypto-social" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">MadFi Social Clubs - Find your favorite content, join a social club, and earn rewards for using crypto social</h3><ul><li><p><strong>For creators</strong>: reward your most engaged followers with loyalty points, and offer your premium content to paying subscribers. Want access to behind-the-scenes FriesGPT development updates from <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://hey.xyz/u/jessyjeanne">@jessyjeanne</a>? You need at least 500 loyalty points to view the gated posts. Subscribers get early feature access.</p></li><li><p><strong>For DAOs</strong>: incentivize community generated content via a Campaign. Top 3 voted on posts go onchain and the creators earn 5 USDC + loyalty points. Loyalty points translate to future revenue-share distributions. For helping <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.dorg.tech/">dOrg</a> land their next client through my social post, I should get a 10% commission from the first invoice.</p></li><li><p><strong>For NFT communities</strong>: social clubs as way to organize the social feed into hyper-relevant content and sponsorship opportunities. Members have access to all onchain social post modules available on MadFi to monetize their content and their IP. I want a feed of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://avengedsevenfold.io/home">DeathbatsClub</a> members’ rock-related digital collectables so I can share with my friend groups and earn commission on every sale that happens through my onchain social post.</p></li></ul><p>Part two goes in-depth with <strong>MadFi Social Clubs</strong>, out next week.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://madfi.xyz/">https://madfi.xyz/</a></p>]]></content:encoded>
            <author>carlosbeltran-2@newsletter.paragraph.com (carlosbeltran.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/1302cb3c01f350f67ab124473dae2ff3a8771bb377f538ccce8576013fc7a4e3.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[What is ClubSpace?]]></title>
            <link>https://paragraph.com/@carlosbeltran-2/what-is-clubspace</link>
            <guid>wbGfIMNhGB6L5LnKz8Vc</guid>
            <pubDate>Wed, 01 Feb 2023 17:01:42 GMT</pubDate>
            <description><![CDATA[ClubSpace combines the features of Twitter Spaces and radio stations, with the added ability to promote music NFTs and interact on web3 social.Artists can use it to host live listening parties for their new songs - created on open protocols like Decent.xyz - and share them on Lens. Listeners can tune in to the live live audio stream, engage with connected Lens profiles, and purchase the host&apos;s new music NFT. Additionally, ClubSpace offers other features to help artists maximize their ear...]]></description>
            <content:encoded><![CDATA[<h2 id="h-clubspace-combines-the-features-of-twitter-spaces-and-radio-stations-with-the-added-ability-to-promote-music-nfts-and-interact-on-web3-social" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">ClubSpace combines the features of Twitter Spaces and radio stations, with the added ability to promote music NFTs and interact on web3 social.</h2><p>Artists can use it to host live listening parties for their new songs - created on open protocols like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decent.xyz">Decent.xyz</a> - and share them on Lens. Listeners can tune in to the live live audio stream, engage with connected Lens profiles, and purchase the host&apos;s new music NFT. Additionally, ClubSpace offers other features to help artists maximize their earning potential. More information about these features will be shared in the coming weeks.</p><p>As it stands there are few avenues for web3 musicians to promote their music. A musician can only tweet their mint link so many times before it gets stale. One of the major benefits of the legacy industry is that signed artists get a lot of support around the marketing and promotion of their music. In web3 it is all DIY and there are so few ways to leverage the platforms available to increase this marketing reach. Clubspace has partnered with Decent.xyz and is working on integrating other platforms to allow musicians to leverage web3 radio for the promotion and marketing of their newly minted music.</p><p>Clubspace provides a number of benefits for musicians looking to promote their music:</p><ol><li><p><strong>Monetize</strong>: Clubspace allows artists to earn money from their music by monetizing their spaces through sponsored Party Favors, ticketed spaces, and of course drop mints</p></li><li><p><strong>Build a following on web3 social</strong>: By showcasing their music on Clubspace musicians can attract new fans and build a dedicated following on Lens</p></li><li><p><strong>Connect with other musicians</strong>: Clubspace allows curators and musicians to feature a diverse range of music, providing opportunities for musicians to network and collaborate with others in their field</p></li><li><p><strong>Gain exposure</strong>: By appearing on Clubspace, musicians can gain exposure to new audiences</p></li></ol><h2 id="h-features-of-a-live-space" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Features of a live space</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5b09dfc9e0b74962315577409a1ae39eb204d807119d101ed1c80b4cb44118f1.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><strong>Featured Drop</strong> – The core feature of a space is to promote your latest music NFT drop. We currently only support Decent.xyz, but plan to integrate other open protocols such as Sound and Zora.</p><p><strong>Connected Audience</strong> – Everyone that is connected and listening in live will be shown in the audience, with their Lens profile or ENS data shown. Clicking on the PFPs will bring up a drawer window with their information, and a follow button to follow them on Lens.</p><p><strong>Live Audio Player</strong> - Along the bottom edge of your screen you will see the song that is currently playing from the live playlist.</p><p><strong>Party Favor</strong> - The party favor is Clubspace’s version of a POAP.  By attending a space, listeners can claim a token proving their attendance!</p><p><strong>Host Mic</strong> - The microphone feature allows the host to pop in and speak to the audience.  When the mic is on, the music playing will automatically lower in volume so that the host can speak over it; and when muted, the music turns back up!</p><p><strong>Scheduled Spaces</strong> – The schedule spaces feature allows you to reserve a time slot ahead of time for your Clubspace ‘space.’  You can preload all the details for your upcoming show and then just pop in when it’s show time!</p><p><strong>Sponsored Party Favors</strong> – Coming Soon!</p><p><strong>Sound.xyz Integration</strong> – Coming Soon!</p><p><strong>Ticketed Spaces</strong> – Coming Soon!</p><p>ClubSpace builds on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://lens.xyz">Lens Protocol</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://spinamp.xyz">Spinamp</a>, and open NFT protocols like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decent.xyz">Decent</a> to provide the live listening experience.</p><h3 id="h-lens-protocol" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Lens Protocol</h3><p>Lens Protocol is a decentralized, open-source, blockchain-based protocol that empowers content creators to own and monetize their digital identities, content, and communities on the Polygon blockchain. It enables users to create, exchange and manage digital assets, such as tokens, in a trustless and decentralized way. With the Lens Protocol, content creators can finally have control over how their content is used and the ability to monetize their work without the need for centralized entities. The Lens Protocol brings renewed hope for a new era of social media, where content creators are in charge and can truly express themselves without fear of losing control of their digital identities.</p><p>If you don’t have a Lens handle, please fill out our <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.google.com/forms/d/e/1FAIpQLScv9oNhMQ2RlQqC3hIPsfyJUFILg--sT71U06_Phvx1s2jbzw/viewform?usp=sf_link">creators waitlist</a>.</p><h3 id="h-decentxyz" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Decent.xyz</h3><p>Decent provides a set of tools for artists to construct blockchain contracts that secure revenue, foster community expansion, and incentivize collector involvement. With the Decent Protocol, they aim to create a future where NFTs will transcend digital collectibles to become the foundation for innovative web3 applications. With the Creator HQ as a no-code platform for creators, and developer-friendly SDK and tooling, Decent empowers artists and creators to launch NFT projects effortlessly.</p><p><strong>How to mint an Editions NFT through Decent:</strong></p><ol><li><p>Connect your wallet at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://hq.decent.xyz/">hq.decent.xyz</a></p></li><li><p>Launch Editions contract</p></li><li><p>Fill out the fields to customize your contract</p></li><li><p>Select “Confirm Selections” and carefully review your inputs (these cannot be changed)</p></li><li><p>Deploy contract</p></li><li><p>Select the contract on your admin dashboard at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://hq.decent.xyz/">hq.decent.xyz</a> to update metadata, add airdrop wallets, and more</p></li></ol><p>Decent will automatically create a collection page for releases and will aggregate them into the Explore page. If you need further support with minting on Decent.xyz visit their <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://learn.decent.xyz/">knowledge base</a>.</p><h3 id="h-spinamp" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Spinamp</h3><p>Spinamp is a music aggregator and player. It allows users to stream music, collect and trade music NFTs, and discover new music. The platform aims to disrupt the traditional music industry and give power back to the artists by allowing them to monetize their music in new ways. It also allows users to own a piece of their favorite artist&apos;s work and gain access to exclusive content, experiences, and merchandise.</p><p>When creating a ClubSpace, you will need a playlist you have made on Spinamp or the link to an existing Spinamp playlist.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.spinamp.xyz/playlist/bloXYrXRHpyIl3qoK10o">https://app.spinamp.xyz/playlist/bloXYrXRHpyIl3qoK10o</a></p><h2 id="h-how-to-create-a-space-on-clubspace" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">How to create a space on ClubSpace</h2><p>The process of creating a space is pretty straightforward</p><ul><li><p>First, you must have a Lens handle to host a space and have a Spinamp playlist created or a link to one that you like</p></li><li><p>Once on the Clubspace homepage, you will begin by connecting your wallet.</p></li><li><p>You will then click “Login with Lens”</p></li><li><p>If you are whitelisted, you can click “Create a Space”</p></li><li><p>Select the Spinamp playlist you wish to use for the live space</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/146b79b10c36ce9822d03e473f85ceeeb77c2f9771a3825898d757553582e929.png" alt="Select your Spinamp playlist or paste the link to one" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Select your Spinamp playlist or paste the link to one</figcaption></figure><ul><li><p>Next, you will select the Decent NFT that you wish to feature. Please note this NFT must be either an <strong>Edition</strong> or a <strong>Crescendo</strong> minted through Decent (other integrations coming soon)</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5de1787a373d3dc4710bd8d955b7154673b4b9aca8fa63dc215eb28dce90b36d.png" alt="Choose the NFT you would like to feature" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Choose the NFT you would like to feature</figcaption></figure><ul><li><p>Next, you will be prompted to create a Lens post - the unique link to your space will automatically be included in your post. This step is optional but highly recommended for visibility</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a257070a234aac7475ed455268e17c06fef9cb8e0bbee56197d52288ed4d565e.png" alt="Optionally create a Lens post which will include the link to your space" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Optionally create a Lens post which will include the link to your space</figcaption></figure><ul><li><p>If you would like to schedule a ‘space’ for the future, you can do so as well. When users visit the link to your scheduled space, they’ll see a countdown timer to the start time</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/67c08e7332e4de37f0dfb4a420c2cee316fd7376de4a41706ce37bb3d67969ec.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><ul><li><p>Finally, you can create a Party Favor NFT to reward attendees (or in the future, select from a sponsored Party Favors to earn extra revenue). A Party Favor NFT is a POAP for attendees of the space.  We encourage you to get creative with these NFTs! If you are not bullish on Party Favors you can skip this step.</p></li></ul><p><strong>The live ClubSpace URL includes your Lens handle (ex: joinclubspace.xyz/live/[handle].lens)</strong></p><p>If you’d like to understand how to use ClubSpace for your next music NFT drop - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/imthatcarlos">send me a DM on twitter</a>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b603977c740be68e4728ab889ef2017bb004602bc4409c6c52f42e091f9bf717.gif" 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>]]></content:encoded>
            <author>carlosbeltran-2@newsletter.paragraph.com (carlosbeltran.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/b94f5a9ecaea208934db417648ce11d86098ddc723ca1420511138be5e9ce067.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Mad Finance | the ad protocol for web3 social 💸]]></title>
            <link>https://paragraph.com/@carlosbeltran-2/mad-finance-the-ad-protocol-for-web3-social</link>
            <guid>O4wDd8eJNnmalxSPwmUY</guid>
            <pubDate>Tue, 14 Jun 2022 03:26:08 GMT</pubDate>
            <description><![CDATA[Traditional ad networks are ready for disruptionThe main financial engine of a web2 social app is its ad network; scrolling through your feed is free because multiple brands have paid for ad space. At the same time traditional social media platforms fail to compensate the content creators that bring engagement to their platforms. Creators aren’t compensated for their banger tweets, IG posts, or videos. These platforms harvest user data and make ad revenue off the backs of creators. Web3 makes...]]></description>
            <content:encoded><![CDATA[<h2 id="h-traditional-ad-networks-are-ready-for-disruption" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Traditional ad networks are ready for disruption</h2><p>The main financial engine of a web2 social app is its ad network; scrolling through your feed is free because multiple brands have paid for ad space. At the same time traditional social media platforms fail to compensate the content creators that bring engagement to their platforms. Creators aren’t compensated for their banger tweets, IG posts, or videos. These platforms harvest user data and make ad revenue off the backs of creators.</p><p>Web3 makes this model obsolete. Utilizing open social graphs and programmable tokens, we can democratize access to ad revenue, paying content creators their fair share of the attention they bring to platforms.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d4d20557978cbfb00a6ac2123851a1bf5904998f378b01f7a9928b69e432a450.jpg" alt="https://a16zcrypto.com/state-of-crypto-report-a16z-2022/" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://a16zcrypto.com/state-of-crypto-report-a16z-2022/</figcaption></figure><h2 id="h-mad-finance-connects-sponsors-with-web3-publishers-and-influencers-via-real-time-money-streams-giving-content-creators-the-opportunity-to-directly-collect-the-they-deserve" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Mad Finance connects sponsors with web3 publishers and influencers via real-time money streams, giving content creators the opportunity to directly collect the 💸 💸 💸 they deserve</h2><p>There has been a lot of experimentation with DeFi, NFTs, DAOs - and more recently - combinations of these. However, <strong>web3 social</strong> is a new playing field that the team behind the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://lens.xyz/">Lens Protocol</a> has opened the gates for. The protocol is modular by design and encourages experimentation on the client side as well as the protocol side.</p><p>On the client side, we have user interfaces such as <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://lenster.xyz/">Lenster</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://lenstube.xyz">Lenstube</a> that aim to re-create the experiences we’ve grown accustomed to such as social apps and video streaming platforms - yet they use the same decentralized social graph under the hood.</p><p>On the protocol side, developers are able to build smart contract modules that execute on follow/comment/re-share. W<strong>e</strong> can combine all the best experiments of the last three years to create a new experience on a similar social interface. This is where we will innovate in our integrations - for example with real-time money streams via <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.superfluid.finance/">Superfluid</a>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/269fd2b18d5198076cce0968192bb7042a1858cba820c25aa173f01472baaa23.png" alt="Your Lens profile is an NFT, your posts are ownable, and you can control the re-shares" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Your Lens profile is an NFT, your posts are ownable, and you can control the re-shares</figcaption></figure><h2 id="h-at-mad-finance-we-are-building-a-suite-of-products-in-the-form-of-lens-modules-tools-for-campaign-creation-distribution-and-payouts-via-superfluid-money-streams" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">At Mad Finance, we are building a suite of products in the form of Lens modules, tools for campaign creation + distribution, and payouts via Superfluid money streams.</h2><p>What a started as a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/ETHGlobal/status/1509222875223441408">hackathon finalist project</a> has turned into a more ambitious idea to rethink the ad network model in favor of content creators, and ultimately pay out the users that provide valuable insights to marketers. We’re leading this effort with a few key ideas</p><ul><li><p><strong>everything on the internet</strong> that can be an NFT, will be an NFT</p></li><li><p>NFTs have the potential to be the next version of the <strong>browser cookie</strong></p></li><li><p>using NFTs and DeFi, we can <strong>reward users</strong> in ways not possible before</p></li></ul><h2 id="h-we-invite-brands-and-creators-to-participate-in-the-evolution-of-advertising-marketing" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">We invite brands and creators to participate in the evolution of advertising + marketing</h2><p>Our first product will be carrying the idea of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.lens.xyz/docs/follow">Lens Follow NFTs</a> to the next level - allowing influencers and brands to utilize them as marketing campaigns. We’re opening up a platform to allow Lens users to customize their limited edition Follow NFT that mints for all new followers. These NFTs are more than just images - they can be <strong>redeemables, gate digital + IRL experiences,</strong> and open the door for <strong>loyalty programs</strong>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e0e20d5c26b485b2046b46f9cb9745c99c972aa421d14d51faf46423c62b8092.png" alt="MadFi Follow NFTs coming soon" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">MadFi Follow NFTs coming soon</figcaption></figure><p>We expect all brands to seek exposure through decentralized social media. Direct connections with influencers will create new kinds of relationships and distribution channels for content, while the on-chain nature of these ads will bring further composability, automation, and transparency to the advertising industry.</p><p>Follow us on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/madfiprotocol">Twitter</a> for updates, and on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.lensfrens.xyz/madfinance.lens">Lens</a> for alpha.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://madfinance.xyz/">https://madfinance.xyz/</a></p>]]></content:encoded>
            <author>carlosbeltran-2@newsletter.paragraph.com (carlosbeltran.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/597d9d6a5e67c629822e63825113ea043c4def0e09d0d49e7c10bfbeaadbbb58.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Minting NFTs on zkSync | Europa Labs]]></title>
            <link>https://paragraph.com/@carlosbeltran-2/minting-nfts-on-zksync-europa-labs</link>
            <guid>SQWr3ryyToRmftGQIpwu</guid>
            <pubDate>Fri, 17 Dec 2021 00:32:54 GMT</pubDate>
            <description><![CDATA[This is a technical overview of the airdrop process for &apos;The Discovery of Galaxy Joa&apos; by Jupiter GroupNot your average NFT drop!The technologies involved make this drop pretty much the first of its kind. Using zero-knowledge proofs (zkSync) for token minting, Chainlink VRF for raffle drawing, and Storj for decentralized storage - there&apos;s not much more we could&apos;ve done to make this more web3. And putting it all together in under 4 days is a personal feat of mine :sunglasses...]]></description>
            <content:encoded><![CDATA[<h2 id="h-this-is-a-technical-overview-of-the-airdrop-process-for-the-discovery-of-galaxy-joa-by-jupiter-group" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">This is a technical overview of the airdrop process for &apos;The Discovery of Galaxy Joa&apos; by Jupiter Group</h2><h2 id="h-not-your-average-nft-drop" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Not your average NFT drop!</h2><p>The technologies involved make this drop pretty much the first of its kind. Using zero-knowledge proofs (<code>zkSync</code>) for token minting, <code>Chainlink VRF</code> for raffle drawing, and <code>Storj</code> for decentralized storage - there&apos;s not much more we could&apos;ve done to make this more web3. And putting it all together in under 4 days is a personal feat of mine :sunglasses:</p><p>I&apos;d like to expand on each component of this procedure to highlight some technical features and hopefully inspire others to try minting their NFTs in this fashion.</p><h2 id="h-chaink-vrf-or-a-deterministic-fair-raffle" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Chaink VRF | A deterministic, fair raffle</h2><p>The conditions for the drop were that we would take a snapshot of all <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/collection/boonjiproject">Boonji</a> tokens and their OpenSea listings on the night of December 13th. Out of these owners, we would choose 33 random accounts. As long as the account didn&apos;t have their token listed <em>or</em> it was listed for at least <code>3.3 eth</code> - they would qualify for the drop.</p><p>There&apos;s a myriad of ways to do this, but we wanted a process that was non-biased, cheap, and simple enough that anyone else could replicate it and generate the same list of winners that we did, provided the same input. For entropy in Solidity, developers can turn to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.chain.link/docs/chainlink-vrf/">Chainlink VRF(Verifiable Random Function)</a>. The idea is that for every request, the VRF contract generates the random number and a cryptographic proof of how that number was determined. The only trick is the request/callback nature of this procedure, but we don&apos;t have to worry about that for this feature. If you need more info on integrating with your solidity contract, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.chain.link/docs/get-a-random-number/">read here</a>.</p><p>To take advantage of this verifiable randomness locally without deploying a contract, we can simply uses <code>ethers.js</code> to query the blockchain for the log that the <code>ChainlinkVRF</code> contract emits upon completing a request; each event object contains the random number generated that we can use.</p><pre data-type="codeBlock" text="// instantiate the contract object using mainnet address/abi
const ChainlinkVRF = await new ethers.Contract(CHAINLINK_VRF_MAINNET, abi, ethersProvider);

// query events from a generic block range
const eventFilter = vrf.filters.RandomnessRequestFulfilled();
const events = await vrf.queryFilter(eventFilter, fromBlock, toBlock);
"><code><span class="hljs-comment">// instantiate the contract object using mainnet address/abi</span>
const ChainlinkVRF <span class="hljs-operator">=</span> await <span class="hljs-keyword">new</span> ethers.Contract(CHAINLINK_VRF_MAINNET, <span class="hljs-built_in">abi</span>, ethersProvider);

<span class="hljs-comment">// query events from a generic block range</span>
const eventFilter <span class="hljs-operator">=</span> vrf.filters.RandomnessRequestFulfilled();
const events <span class="hljs-operator">=</span> await vrf.queryFilter(eventFilter, fromBlock, toBlock);
</code></pre><p>The random number generated is of type <code>BigNumber</code>, but we can parse it to fit our needs.</p><pre data-type="codeBlock" text="// guarantee the same random numbers each time by doing rand % limitNumber
const modVal = ethers.BigNumber.from(TOTAL_TOKEN_HOLDERS.toString());

const _getRandomNumberFromEvent = (event) =&gt; {
  const b = ethers.utils.formatEther(event.args.output); // actually just a BigNumber
  const [massiveInteger] = b.split(&apos;.&apos;);
  return parseInt(ethers.BigNumber.from(massiveInteger).mod(modVal).toNumber());
}
"><code><span class="hljs-comment">// guarantee the same random numbers each time by doing rand % limitNumber</span>
const modVal <span class="hljs-operator">=</span> ethers.BigNumber.from(TOTAL_TOKEN_HOLDERS.toString());

const _getRandomNumberFromEvent <span class="hljs-operator">=</span> (<span class="hljs-function"><span class="hljs-keyword">event</span>) => </span>{
  const b <span class="hljs-operator">=</span> ethers.utils.formatEther(<span class="hljs-keyword">event</span>.args.output); <span class="hljs-comment">// actually just a BigNumber</span>
  const [massiveInteger] <span class="hljs-operator">=</span> b.split(<span class="hljs-string">'.'</span>);
  <span class="hljs-keyword">return</span> parseInt(ethers.BigNumber.from(massiveInteger).mod(modVal).toNumber());
}
</code></pre><p>Now it&apos;s just a matter of applying a simple algorithm to deterministically choose the winners. We use the word <em>deterministically</em> because this process should produce the same output every time, given the same input (the snapshot of winners).</p><pre data-type="codeBlock" text="for each number in `randomNumbers`:
 1. retrieve the owner at index in `tokenOwners`
  - if owner has listed the token for less than 3.3 ETH =&gt; retrieve the next owner (idx+1) until false
 2. flag owner as a weiner
 3. remove the account from the array of `tokenOwners` for the next draw not to include
"><code><span class="hljs-keyword">for</span> <span class="hljs-keyword">each</span> number in <span class="hljs-string">`randomNumbers`</span>:
 <span class="hljs-number">1</span>. retrieve the owner at <span class="hljs-keyword">index</span> in <span class="hljs-string">`tokenOwners`</span>
  - <span class="hljs-keyword">if</span> owner has listed the token <span class="hljs-keyword">for</span> less than <span class="hljs-number">3.3</span> <span class="hljs-string">ETH =></span> retrieve the <span class="hljs-keyword">next</span> owner (idx+<span class="hljs-number">1</span>) <span class="hljs-keyword">until</span> false
 <span class="hljs-number">2</span>. flag owner as a weiner
 <span class="hljs-number">3</span>. remove the account from the array of <span class="hljs-string">`tokenOwners`</span> <span class="hljs-keyword">for</span> the <span class="hljs-keyword">next</span> draw <span class="hljs-keyword">not</span> to include
</code></pre><h2 id="h-storj-or-decentralized-storage-of-assets-and-metadata" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Storj | Decentralized storage of assets and metadata</h2><p>The protocol of choice for hosting token metadata is <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ipfs.io/">IPFS</a>, although you would still need to use a pinning service like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.pinata.cloud/">Pinata</a>.</p><p>However, at Jupiter Group we use <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.storj.io/">Storj</a> to host and serve our content. It was a successful integration for the Boonji drop (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.storj.io/documents/storj-case-study-boonji-project.pdf?utm_content=190414592&amp;utm_medium=social&amp;utm_source=twitter&amp;hss_channel=tw-345738416">see case study</a>) and so we&apos;re running with it for future projects. It&apos;s secure, highly available, and open source - everything we need for a web3 project.</p><p>Uploading content using the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.storj.io/integrations/uplink-cli">uplink cli</a> and then sharing it can be done via a bash script</p><pre data-type="codeBlock" text="uplink cp ./scripts/storj/assets/1.png sj://boonji-joa/assets/1.png
uplink share sj://boonji-joa/assets --url --not-after=none
"><code>uplink cp ./scripts<span class="hljs-operator">/</span>storj<span class="hljs-operator">/</span>assets<span class="hljs-operator">/</span><span class="hljs-number">1</span>.png sj:<span class="hljs-comment">//boonji-joa/assets/1.png</span>
uplink share sj:<span class="hljs-comment">//boonji-joa/assets --url --not-after=none</span>
</code></pre><p>Naturally, we want to automate as much of the process as possible. So the steps required to prep the NFT metadata are:</p><ol><li><p>have all NFT assets in a local directory</p></li><li><p>rename the files to be deterministic based on <code>tokenId</code></p></li><li><p>upload and get the public read-access URL</p></li><li><p>prepare all token metadata JSON files with the apppropriate values for <code>name</code>, <code>image</code>, etc</p></li><li><p>upload all metadata JSON files and get the public read-access URL</p></li></ol><p>As long as filenames are deterministic based on <code>tokenId</code>, the only thing we need to provide the ERC721 contract is the <code>baseURI</code>, which in this case will resolve to something like <code>https://link.us1.storjshare.io/raw/...</code> (tip: providing the <code>/raw/</code> flag will automatically download the file from the browser)</p><h2 id="h-zksync-or-minting-nfts" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">zkSync | Minting NFTs</h2><p>Here is the meat of the project: minting the tokens on a zk-rollup and enabling withdrawals to L1. We highly respect the values behind <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zksync.io/">zkSync</a> and the team at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://matter-labs.io/">Matter Labs</a>. Furthermore, their developer resources are top notch; I can say that with confidence because I hacked this entire drop together in under 4 days without even having looked at their docs prior!</p><p>There&apos;s many layers to understanding zk-rollups, the UX/transactions, etc. If you want a deep dive, feel free to check out <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://blog.matter-labs.io/">their Medium page</a>. For our purposes, we&apos;re just highlight the features of <code>zkSync</code> and move on to the steps to minting:</p><ul><li><p>extremely low transaction fees, as long as you stay on l2 :)</p></li><li><p>funds are cryptographically secure</p></li><li><p>users are always in control of their funds</p></li></ul><p>All the resources used: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zksync.io/dev/nfts.html">their guide for NFTs</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zksync.io/api/sdk/js/tutorial.html">Javascript SDK docs</a>, and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zksync.io/api/environments.html">environment for deployed contracts</a>.</p><p>At a high-level, these are the things we have to do before minting on <code>zkSync</code></p><ol><li><p>instantiate an ethers wallet to sign transactions on <code>zkSync</code></p></li><li><p>activate our account</p></li><li><p><strong>guarantee that our tokens can be withdrawn to L1</strong></p></li><li><p>mint tokens on behalf of other accounts</p></li></ol><p><strong>Step three</strong> is in bold because it&apos;s the most important one - any tokens we mint using the <code>zkSync</code> SDK only live on the L2, and withdrawal to L1 must be supported. From their docs, there&apos;s 3 components to withdrawals to L1:</p><pre data-type="codeBlock" text="- Factory: L1 contract that can mint L1 NFT tokens
- Creator: user which mints NFT on L2
- NFTOwner: user which owns NFT on L2
"><code><span class="hljs-deletion">- Factory: L1 contract that can mint L1 NFT tokens</span>
<span class="hljs-deletion">- Creator: user which mints NFT on L2</span>
<span class="hljs-deletion">- NFTOwner: user which owns NFT on L2</span>
</code></pre><p>Withdrawals are essentially an atomic transaction where the token on L2 is burned, and the token on L1 is minted. <code>zkSync</code> provides a default &quot;factory&quot; contract on L1 to mint tokens, but a developer can implement their own &quot;factory&quot; contract to handle the mint on L1. The only two requirements are (1) the contract must implement a specific <code>mint</code> function and (2) the contract must be registered with the L1 <code>Governance</code> contract via specific function call.</p><p>In our case, we needed to implement a custom factory contract because the default contract assumes each token&apos;s <code>contentHash</code> is an IPFS CID, which it then resolves as <code>ipfs://${contentHash}</code> for each <code>tokenURI</code>. Since we&apos;re using Storj, we have to construct the <code>tokenURI</code> differently.</p><p>Our <code>BoonjixJoaFactory</code> contract implements <code>ERC721</code> and the required <code>mintNFTFromZkSync()</code> function, which does the minting of a given token from l2. One thing to note is that we do <em>not</em> reuse the provided <code>tokenId</code> and instead rely on the token id recovered from <code>contentHash</code>. We do use a counter, though, but only to keep track of the current number of tokes minted (see <code>totalSupply()</code>).</p><p>To satisfy the first requirement - the contract must implement a specific <code>mint</code> function. Here&apos;s our <code>mintNFTFromZkSync()</code> function signature. This function is called from the <code>ZkSync</code> smart contract when a user goes through the withdrawal process on L2, and takes care of minting on L1 (like calling <code>_safeMint()</code>):</p><pre data-type="codeBlock" text="/// @dev mints a token from zksync l2
/// @notice only the zksync contract can call
/// @param creator original minter on l2
/// @param recipient account to receive token on l1
/// @param creatorAccountId creator account id on l2
/// @param serialId enumerable id of tokens minted by the creator
/// @param contentHash bytes32 hash of token uri
/// @param tokenId the token id (from l2)
function mintNFTFromZkSync(
  address creator,
  address recipient,
  uint32 creatorAccountId,
  uint32 serialId,
  bytes32 contentHash,
  uint256 tokenId
) external override onlyZkSync {}
"><code><span class="hljs-comment">/// @dev mints a token from zksync l2</span>
<span class="hljs-comment">/// @notice only the zksync contract can call</span>
<span class="hljs-comment">/// @param creator original minter on l2</span>
<span class="hljs-comment">/// @param recipient account to receive token on l1</span>
<span class="hljs-comment">/// @param creatorAccountId creator account id on l2</span>
<span class="hljs-comment">/// @param serialId enumerable id of tokens minted by the creator</span>
<span class="hljs-comment">/// @param contentHash bytes32 hash of token uri</span>
<span class="hljs-comment">/// @param tokenId the token id (from l2)</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">mintNFTFromZkSync</span>(<span class="hljs-params">
  <span class="hljs-keyword">address</span> creator,
  <span class="hljs-keyword">address</span> recipient,
  <span class="hljs-keyword">uint32</span> creatorAccountId,
  <span class="hljs-keyword">uint32</span> serialId,
  <span class="hljs-keyword">bytes32</span> contentHash,
  <span class="hljs-keyword">uint256</span> tokenId
</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">override</span></span> <span class="hljs-title">onlyZkSync</span> </span>{}
</code></pre><p>To satisfy the second requirement - the contract must be registered with the L1 <code>Governance</code> contract. We have to include in our smart contract the following:</p><pre data-type="codeBlock" text="/// @dev registers a creator with the zksync Governance contract to bridge tokens from l2
/// @param governance the zksync Governance contract
/// @param _creatorAccountId the creator account id on zksync
/// @param creator a whitelisted creator
/// @param signature payload signed by creator
function registerFactory(
  address governance,
  uint32 _creatorAccountId,
  address creator,
  bytes calldata signature
) external onlyOwner {
  IGovernance(governance).registerNFTFactoryCreator(_creatorAccountId, creator, signature);
}
"><code><span class="hljs-comment">/// @dev registers a creator with the zksync Governance contract to bridge tokens from l2</span>
<span class="hljs-comment">/// @param governance the zksync Governance contract</span>
<span class="hljs-comment">/// @param _creatorAccountId the creator account id on zksync</span>
<span class="hljs-comment">/// @param creator a whitelisted creator</span>
<span class="hljs-comment">/// @param signature payload signed by creator</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">registerFactory</span>(<span class="hljs-params">
  <span class="hljs-keyword">address</span> governance,
  <span class="hljs-keyword">uint32</span> _creatorAccountId,
  <span class="hljs-keyword">address</span> creator,
  <span class="hljs-keyword">bytes</span> <span class="hljs-keyword">calldata</span> signature
</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title">onlyOwner</span> </span>{
  IGovernance(governance).registerNFTFactoryCreator(_creatorAccountId, creator, signature);
}
</code></pre><p>To generate the required signature, check out <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zksync.io/dev/nfts.html#factory-registration">their docs</a>, but to make things easier on folks following along, here&apos;s my hacky script. It formats all inputs as expected in the signature - you can confirm this by checking out the implementation of the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/matter-labs/zksync/blob/master/contracts/contracts/Governance.sol#L165">Governance contract on the zkSync repo</a></p><pre data-type="codeBlock" text="const factory = await _getFactoryContract(ethWallet);
const _accountId = await syncWallet.getAccountId();
const _accountIdHex = hre.ethers.utils.hexValue(_accountId);
const accountId = `000${_accountIdHex.split(&apos;0x&apos;)[1]}`;
const creatorAddress = address.split(&apos;0x&apos;)[1].toLowerCase();
const factoryAddress = factory.address.split(&apos;0x&apos;)[1].toLowerCase();
const msg = `\nCreator&apos;s account ID in zkSync: ${accountId}\nCreator: ${creatorAddress}\nFactory: ${factoryAddress}`;

const signature = await ethWallet.signMessage(msg);
const tx = await factory.registerFactory(GOVERNANCE_MAINNET, _accountId, address, signature);
"><code>const factory <span class="hljs-operator">=</span> await _getFactoryContract(ethWallet);
const _accountId <span class="hljs-operator">=</span> await syncWallet.getAccountId();
const _accountIdHex <span class="hljs-operator">=</span> hre.ethers.utils.hexValue(_accountId);
const accountId <span class="hljs-operator">=</span> `000${_accountIdHex.split(<span class="hljs-string">'0x'</span>)[<span class="hljs-number">1</span>]}`;
const creatorAddress <span class="hljs-operator">=</span> <span class="hljs-keyword">address</span>.split(<span class="hljs-string">'0x'</span>)[<span class="hljs-number">1</span>].toLowerCase();
const factoryAddress <span class="hljs-operator">=</span> factory.<span class="hljs-built_in">address</span>.split(<span class="hljs-string">'0x'</span>)[<span class="hljs-number">1</span>].toLowerCase();
const <span class="hljs-built_in">msg</span> <span class="hljs-operator">=</span> `\nCreator<span class="hljs-string">'s account ID in zkSync: ${accountId}\nCreator: ${creatorAddress}\nFactory: ${factoryAddress}`;

const signature = await ethWallet.signMessage(msg);
const tx = await factory.registerFactory(GOVERNANCE_MAINNET, _accountId, address, signature);
</span></code></pre><p>Now that our factory contract is registered, we can guarantee that token owners can safely withdraw their NFTs to L1, and a custom factory will be ready handle the minting.</p><p>How do we mint? It&apos;s pretty straight-forward, actually. There&apos;s just a few gotchas along the way.</p><p>Here&apos;s a js function that will mint an NFT on <code>zkSync</code> with a given contentHash</p><pre data-type="codeBlock" text="const mintNFT = async (syncProvider, syncWallet, recipient, contentHash) =&gt; {
  const fee = await _logTxFeeSync(syncProvider, syncWallet);
  const nft = await syncWallet.mintNFT({
    recipient,
    contentHash,
    feeToken: &apos;ETH&apos;,
    fee,
  });
  await nft.awaitReceipt();
};
"><code>const <span class="hljs-attr">mintNFT</span> = async (syncProvider, syncWallet, recipient, contentHash) => {
  const <span class="hljs-attr">fee</span> = await _logTxFeeSync(syncProvider, syncWallet)<span class="hljs-comment">;</span>
  const <span class="hljs-attr">nft</span> = await syncWallet.mintNFT({
    recipient,
    contentHash,
    feeToken: 'ETH',
    fee,
  })<span class="hljs-comment">;</span>
  await nft.awaitReceipt()<span class="hljs-comment">;</span>
}<span class="hljs-comment">;</span>
</code></pre><p>Here, <code>recipient</code> is the address to receive the freshly minted NFT. However, <strong>if the recipient never activated their account on zkSync</strong>, you&apos;ll get the following error:</p><pre data-type="codeBlock" text="ZKSyncTxError: zkSync transaction failed: Recipient account not found
"><code><span class="hljs-section">ZKSyncTxError: zkSync transaction failed: Recipient account not found</span>
</code></pre><p>One way around this is to first transfer a little bit of ETH to this address. From the docs:</p><pre data-type="codeBlock" text="Users can transfer NFTs to existing accounts and transfer to addresses that have not yet registered a zkSync account. TRANSFER and TRANSFER_TO_NEW opcodes will work the same
"><code>Users can transfer NFTs <span class="hljs-selector-tag">to</span> existing accounts and transfer <span class="hljs-selector-tag">to</span> addresses that have not yet registered <span class="hljs-selector-tag">a</span> zkSync account. TRANSFER and TRANSFER_TO_NEW opcodes will work the same
</code></pre><p>We can either mint NFT to ourselves and then transfer, or transfer a little bit of ETH to the recipient to trigger that <code>TRANSFER_TO_NEW</code> opcode.</p><p>Once the token is minted, the recipient should see it in their zk wallet: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://wallet.zksync.io/account">https://wallet.zksync.io/account</a>. Another gotcha is that transactions on zkSync go thorough a state change from <code>committed</code> to <code>verified</code>. Finality can be achieved usually within the hour, and only then can accounts withdraw to L1. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://link.us1.storjshare.io/raw/juqoeqikhodvo2puepob3lszpbfq/boonji-joa%2FScreen%20Shot%202021-12-16%20at%205.04.50%20PM.png">wallet</a></p><p>Finally, when a token has reached finality and is in the <code>verified</code> state (2 green arrows in the UI), it can be withdrawn to L1 here: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://wallet.zksync.io/transaction/nft/withdraw">https://wallet.zksync.io/transaction/nft/withdraw</a></p><h2 id="h-conclusion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Conclusion</h2><p>Putting all components together, going through a few rinkeby dry runs, and deploying on mainnet was quite the experience; it&apos;s exhilarating to be on the cutting edge. With <code>zkSync</code> soon supporting smart contracts written in Solidity, it&apos;s all but guaranteed that protocols will take advantage of cheap and fast transaction finality and port their Solidity code over.</p><p>We had DefiSummer in 2020.</p><p>NFTs took over in 2021.</p><p><strong>2022 will be the year of zk-rollups</strong>.</p><h2 id="h-consider-giving-me-a-follow-httpstwittercomimthatcarlos" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Consider giving me a follow: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/imthatcarlos">https://twitter.com/imthatcarlos</a></h2>]]></content:encoded>
            <author>carlosbeltran-2@newsletter.paragraph.com (carlosbeltran.eth)</author>
        </item>
        <item>
            <title><![CDATA[web3, NFTs, and music are beginning to converge]]></title>
            <link>https://paragraph.com/@carlosbeltran-2/web3-nfts-and-music-are-beginning-to-converge</link>
            <guid>lUTYe8T1V4TIU6Gv4fkf</guid>
            <pubDate>Thu, 09 Dec 2021 21:56:40 GMT</pubDate>
            <description><![CDATA[Although some ideas from the 2017 ICO craze faded into the background, some have taken main stage in 2021. DAOs are an innovative way to organize money and people, and NFTs went from headlines about record-breaking sales (a cheeky $69 million) to being the new backbone for hundreds if not thousands of web3 projects. Under the hood, NFTs are an ERC721 smart contract - a program that codifies all the rules behind the digital asset. The most basic of NFTs simply allow you to transfer the token t...]]></description>
            <content:encoded><![CDATA[<p>Although some ideas from the 2017 ICO craze faded into the background, some have taken main stage in 2021. <strong>DAOs</strong> are an innovative way to organize money and people, and <strong>NFTs</strong> went from headlines about record-breaking sales (a cheeky <em>$69 million</em>) to being the new backbone for hundreds if not thousands of web3 projects. Under the hood, NFTs are an <code>ERC721</code> smart contract - a program that codifies all the rules behind the digital asset. The most basic of NFTs simply allow you to transfer the token to another wallet; the more interesting ones are just around the corner.</p><h3 id="h-nfts-will-radically-change-how-we-represent-digital-files-how-we-think-about-the-monetary-value-associated-with-them-and-the-way-in-which-we-interact-with-them-online" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">NFTs will radically change how we represent digital files, how we think about the monetary value associated with them, and the way in which we interact with them online.</h3><p>If we take a look at the smart contract that represents a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/assets/0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d/3003">bored ape</a>, we can actually see <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d#code">what functionality</a> it supports. It’s a basic <code>ERC721</code> with some business logic to handle the initial sale/distribution. In some cases an upgradable smart contract is used, meaning more functionality can be added later - although this design pattern is more meant for potential bug fixes, not so much additive features. In any case, new contracts could be later deployed that interact with the original <code>ERC721</code> contract.</p><p>What more functionality would we want? Well, we could make it such that every future sale of the NFT would distribute royalty fees to the original creator (the person that minted the token) or all previous owners - automatically. No need to have them visit a webpage and claim their money. The transfer/sale of the token itself would trigger the routing of value from the buyer’s ETH wallet to the recipients’ ETH wallets. This kind of automatic value routing is only now possible on the internet via blockchain networks; it feels like the internet finally has a native payments protocol.</p><p>Another feature that could be embedded in the NFT contract itself is this idea of streamable money. Imagine a company decides to sponsor one of the bored apes, considering the owner is a famous celebrity that represents their brand well. In order to use that specific bored ape in their next marketing campaign, they have to open a payment channel between their ETH wallet and the NFT owner’s. That payment channel would, on some contract-defined interval, stream a little bit of ETH to the owner’s wallet - and the act of creating this channel alone would grant the company exclusive access to use the bored app in their next commercial. There’s obviously a few different components of this feature that need to be developed and made scalable, but <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.superfluid.finance/">SuperFluid</a> already has a set of smart contracts available for developers to create products on top of streaming payment channels.</p><h3 id="h-audio-is-about-to-have-its-moment-in-the-nft-spotlight" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Audio is about to have its moment in the NFT spotlight</h3><p>Ideas around digital ownership apply to other kinds of files, not just JPEGs. I think music files are about to have their moment in the NFT spotlight. We can see the early signs of industry interest with 3lau and his music royalties platform <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://royal.io/">Royal</a>, and Snoop Dogg <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decrypt.co/81720/snoop-dogg-1000-nft-passes-private-ethereum-metaverse-party">selling NFT Passes for a Metaverse party</a>. These are concrete examples of interest from an industry that is poised for innovation and a complete overhaul of business models.</p><p>A platform with an extensive plan to be the web3 platform for musicians is <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://audius.org/">Audius</a> - a protocol for audio content aiming to be its decentralized storage solution and ledger. The protocol consists of the Audius tokens ($AUDIO), stablecoins, and artist tokens. Staked $AUDIO tokens have an associated governance weight, allowing token holders to shape future iterations of the platform. The artist token revolves around the idea that when fans hold a certain amount of an artist’s unique token, they can access exclusive content from that artist - exclusive album drops, interviews with musicians, etc. Another mechanism is artists who use the Audius platform must maintain a bond in $AUDIO to continue to distribute artist tokens, acting as an incentive intending to strengthen community trust and use of the platform.</p><p>The variety in features shows Audius aims to play a part of the larger web3 ecosystem, and it has taken impressive steps in demonstrating how a decentralized environment for audio content could work. Time will tell if they can de-throne the incumbent in Spotify. To me, what’s more interesting are the “smaller” projects that are experimenting with new models for record labels, music ownership, and creative output/remixing - to name a few:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.modadao.io/">https://www.modadao.io/</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://sound.xyz/">https://sound.xyz/</a></p><h3 id="h-web3-has-the-opportunity-to-radically-change-the-landscape" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">web3 has the opportunity to radically change the landscape</h3><p>Considering that current web2 services in the music industry (Spotify, Ticketmaster) were built on top of proprietary payment rails and closed-off systems - web3 has the opportunity to radically change the landscape and offer creators and consumers services that are more open, more modular, and much more versatile in how data and value is exchanged - all while preserving the authenticity and rights of all network participants.</p><p>I’m looking forward to sharing more (in the near future) about what we’re experimenting with over at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/StemsDAO">StemsDAO</a> - the web3 music label. Gives us a follow!</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/aea3d52707f5f256a584a0c278cd044010aed3dd6283b29422724882c70e5c39.jpg" 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>]]></content:encoded>
            <author>carlosbeltran-2@newsletter.paragraph.com (carlosbeltran.eth)</author>
        </item>
    </channel>
</rss>