<?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>sweetman.eth</title>
        <link>https://paragraph.com/@sweetman-eth</link>
        <description>the dev for onchain music</description>
        <lastBuildDate>Wed, 29 Apr 2026 16:50:39 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>sweetman.eth</title>
            <url>https://storage.googleapis.com/papyrus_images/59f1f9f16aea800d02de8cd06d4dff047c8d22a431b3469df0a20729761ae369.png</url>
            <link>https://paragraph.com/@sweetman-eth</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[ENS support on Mobile Media Publishing]]></title>
            <link>https://paragraph.com/@sweetman-eth/ens-support-on-mobile-media-publishing</link>
            <guid>kX3WcyCNZDu24aeHN1Nv</guid>
            <pubDate>Mon, 27 Nov 2023 21:58:22 GMT</pubDate>
            <description><![CDATA[the mobile-first interface for onchain media built on zora&apos;s hyperstructure. OnchainMagic ismobile firstmedia focused (music, videos, graphics)expanding ethereum (zora / base / OP / etc)ENS supportedmobile firstIn 2024, an estimated 56% of global internet traffic will originate from mobile devices, while desktops will contribute 39%. The remaining 5% will be attributed to emerging technologies like smart TVs and IoT devices. Why is onchain infrastructure designed first for desktop when m...]]></description>
            <content:encoded><![CDATA[<p>the mobile-first interface for onchain media built on zora&apos;s hyperstructure.</p><p>OnchainMagic is</p><ul><li><p>mobile first</p></li><li><p>media focused (music, videos, graphics)</p></li><li><p>expanding ethereum (zora / base / OP / etc)</p></li><li><p>ENS supported</p></li></ul><h2 id="h-mobile-first" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">mobile first</h2><p>In 2024, an estimated 56% of global internet traffic will originate from mobile devices, while desktops will contribute 39%. The remaining 5% will be attributed to emerging technologies like smart TVs and IoT devices. Why is onchain infrastructure designed first for desktop when market share is largest on mobile?</p><p>Most interfaces for onchain infrastructure are designed for desktop. Mobile experiences are painful. Switching to an external wallet app is clunky. While Zora’s desktop experience has a sleek, Apple-like feeling. I feel embarrassed collecting art on zora’s website on mobile. I see red <code>X</code> telling me my wallet is disconnected after I mint. I jump from zora to metamask back to zora. From there, zora sends me a <code>signature</code> to verify, pushing me back to metamask. Wait for the signature. Back to zora. What was I coming here to do again? I feel unloved, frustrated &amp; rejected.</p><p>How can we build more fun interfaces on mobile-first publishing onchain? Instagram &amp; Tiktok do an amazing job creating a clean and simple publishing interface offchain. They are a design baseline I’ve been following up to now. The design may be skumorphic to old traditions, but, as a 1-3 person team, I’m doing the best with what I’ve got. Are there better, mobile-first, models we should be examining for onchain media publishing?</p><h2 id="h-media-focused" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">media focused</h2><p>In Buenos Aires, Argentina, artists have been struggling to get compensated on platforms to live a sustainable living. This problem is true globally, but I’ve been seeing the problem first-hand. Spotify pays musicians pennies on the $0.003 – $0.005 per stream on average. For musicians in cities such as Buenos Aires, Argentina, those payments are even smaller. How can we build onchain infrstructure in which there is more equitable payments for creators vs the platforms they use?</p><p>Protocol rewards on public hyperstructures are proving to be a successful model for small communities growing online &amp; onchain. Zora pays musicians <code>0.000333ETH</code> ($0.66) per collect on Free Mints from their total mint fee of <code>0.000777ETH</code>. 43% of fees go directly &amp; instantly to creators globally. What does this actually look like in practice?</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7184c7b6541da5374f42bbc5ca54aac53dedbdb7263d008e40b74e80adfdf60d.png" alt="past 24 hours of onchain media payouts on zora" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">past 24 hours of onchain media payouts on zora</figcaption></figure><p>I went to a concert last night where musicians in Buenos Aires earned more $$$ from 2 collectors listening at a live event than they’ve received in 2+ years publishing their music on Spotify. These musicians will come back and put more music on Zora. They will want an easy way to discover &amp; collect music. Possibly in an interface that feels familiar, like Instagram Reels of the TikTok feed. How can we help make it as simple as possible for creators and collectors to participate in the growing marketplace for onchain media?</p><h2 id="h-expanding-ethereum" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">expanding ethereum</h2><p>Ethereum mainnet is expensive. Current price to publish a contract on Ethereum mainnet is $79.75 as I write this. For musicians in Buenos Aires, that’s over half a month’s rent payment. The current options, on Ethereum, are to:</p><ol><li><p>pay half my rent</p></li><li><p>publish media onchain</p></li></ol><p>Any responsible parent will skip this onchain nonsense &amp; focus on rent. The barrier to entry is too high. How can we expand ethereum to make it more accessible?</p><p>OP stack is inexpensive. Current price to publish a contract on Base or Zora mainnet is $1.11. Or, roughly cafe con leche con una medialuna. The decision becomes much easier on OP stack.</p><ol><li><p>buy a cup of coffee</p></li><li><p>try out this new tool</p></li></ol><p>OP stack expands Ethereum as a rollup on top of it. The costs to experiment are low &amp; accessible to creators globally. Composability is key here. With Zora paying creators 0.000333ETH, creators only need to find 2 collectors of my free collectible for publishing costs to break even. Most musicians in Buenos Aires could survive on 777 collectors buying 1, free, piece of media each month. How can we make it as easy for musicians to get discovered onchain?</p><h2 id="h-ens-supported" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">ENS supported</h2><p>Online naming services are a public good. Creators know the value of being easily discovered. Being in the top 10 results on Google, or on social media, can drive major success for a creative’s work. ENS is public infrastructure trusted by musicians to interact onchain. With ENS being deployed on Ethereum mainnet, applications face a challenge when identifying creators on other chains.</p><p>This is a solved application-level challenge. Good apps already know to reference mainnet, even if the address is being used on another network. Most apps simply don’t know, or have the resources, to support ENS identity on their applications. How can we make it easier for developer-level tooling to natively support onchain identity in their applications?</p><p>closing.</p><p>Onchain Magic is currently in the early release stages in Argentina. Our goal is to produce the most fun place to create and collect on Zora when you’re on your phone. From live events to studio sessions, we’re helping musicians get paid onchain.</p>]]></content:encoded>
            <author>sweetman-eth@newsletter.paragraph.com (sweetman.eth)</author>
        </item>
        <item>
            <title><![CDATA[Game items for Heno.]]></title>
            <link>https://paragraph.com/@sweetman-eth/game-items-for-heno</link>
            <guid>bWovnPS04PaVJOB3rGAs</guid>
            <pubDate>Tue, 31 Oct 2023 17:03:45 GMT</pubDate>
            <description><![CDATA[Heno.’s video game, Relief, is now free-to-play. Available to play for free on iOS, Android & Desktop. Heno. is pioneering a model for musicians to create immersive, multidisciplinary, experiences with their music releases. Expanding stories and building worlds. In this article we explore the newly open-sourced model, and how you can follow Heno.’s model by adding a video game to your next song release. We’ll start with the overall roadmap Heno. used, then dive deeper into how Heno. executed ...]]></description>
            <content:encoded><![CDATA[<p>Heno.’s video game, Relief, is now free-to-play. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://play.mynameisheno.com/">Available to play for free on iOS, Android &amp; Desktop</a>. Heno. is pioneering a model for musicians to create immersive, multidisciplinary, experiences with their music releases. Expanding stories and building worlds. In this article we explore the newly open-sourced model, and how you can follow Heno.’s model by adding a video game to your next song release. We’ll start with the overall roadmap Heno. used, then dive deeper into how <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.instagram.com/mynameisheno">Heno.</a> executed his roadmap.</p><ol><li><p>pay-2-play</p><ol><li><p>early access</p></li></ol></li><li><p>free-2-play</p><ol><li><p>release the song <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://open.spotify.com/track/5aDNHHNXc16VktqV1gSq23">on streaming platforms</a></p></li></ol></li><li><p>powerups</p><ol><li><p>onchain =&gt; in game</p></li></ol></li></ol><h2 id="h-pay-2-play" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Pay-2-Play</h2><p>Pay to play is the traditional model of video games. Pay a one-time fee to unlock lifetime access to the game. Heno. wanted to take this model a step further by putting the unlock onchain.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ec041f101ef8a7f7c34a0f2a73e5fc63130df8ce37f6addb343cb28e3bca23c1.png" alt="Play Store: top paid apps" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Play Store: top paid apps</figcaption></figure><p>Originally, we released the game behind a paywall for early access. For $7 (0.003ETH) you could buy early access to Heno.’s video game on Zora. To token-gate a video game we needed 2 things</p><ol><li><p>a function to check if the player has unlocked the game.</p></li><li><p>a function to pay-to-play to unlock the game.</p></li></ol><p>To check if a player has unlocked the game I wrote a <code>fetchBalance</code> function like this</p><pre data-type="codeBlock" text=" const fetchBalance = useCallback(async () =&gt; {
    if (!address) return
    setLoading(true)
    const balanceOf = await dropContract.balanceOf(address)
    setBalance(balanceOf.toNumber())
    setLoading(false)
  }, [dropContract, address])
"><code> const fetchBalance <span class="hljs-operator">=</span> useCallback(async () <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
    <span class="hljs-keyword">if</span> (<span class="hljs-operator">!</span><span class="hljs-keyword">address</span>) <span class="hljs-keyword">return</span>
    setLoading(<span class="hljs-literal">true</span>)
    const balanceOf <span class="hljs-operator">=</span> await dropContract.balanceOf(<span class="hljs-keyword">address</span>)
    setBalance(balanceOf.toNumber())
    setLoading(<span class="hljs-literal">false</span>)
  }, [dropContract, <span class="hljs-keyword">address</span>])
</code></pre><p>This code first enforces the player has connected their wallet. Then, we lookup how many <code>tickets</code> the player owns with <code>balanceOf</code>. If the <code>balanceOf &gt; 0</code> the player has already paid to unlock the game. If the <code>balance</code> is <code>0</code>, they haven’t unlocked the game and should be prompted to buy the early access <code>ticket</code>.</p><p>To allow a player to <code>pay-to-play</code> I wrote a <code>mint</code> function like this</p><pre data-type="codeBlock" text="const mint = async () =&gt; {
    setMinting(true)
    await mintWithRewards()
    await fetchBalance()
    setMinting(false)
  }
"><code>const mint = async () => {
    <span class="hljs-built_in">setMinting</span>(true)
    await <span class="hljs-built_in">mintWithRewards</span>()
    await <span class="hljs-built_in">fetchBalance</span>()
    <span class="hljs-built_in">setMinting</span>(false)
  }
</code></pre><p>This code calls the <code>mintWithRewards</code> function on Zora’s Protocol. Once the player has purchased their <code>ticket</code>, we <code>fetchBalance</code> again, which updates the balance (see above for code) and unlocks the game.</p><p>The results looked like this:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/edf8209ecf1df0dec9b5f086c6b2d63f0f82ce59025115d59ac53aeab0ab7a07.png" alt="Pay-2-Play - Relief by Heno." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Pay-2-Play - Relief by Heno.</figcaption></figure><h2 id="h-free-2-play" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Free-2-Play</h2><p>Once Heno. released the song, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://open.spotify.com/track/5aDNHHNXc16VktqV1gSq23">Relief</a>, on streaming platforms, it was time to make the game more accessible to his fans globally. That meant removing the paywall, open-sourcing the code &amp; turning the early access tickets into power-ups.</p><p>Removing the paywall was easy. Add a big <code>START GAME</code> button to start the arcade game. No credit card required.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7757ba73e18d7b4642362e46dae1c344705cde132db886ce41e2fe8141ceb499.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>Open-sourcing the game was also pretty easy. We use Github to store the website code. I simply went to the settings in Github and changed visibility to <code>public</code>. Now, anyone can use the model Heno. built by <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/SweetmanTech/Heno-Relief-Game">downloading the open-source code here</a>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5946ebf4c1ad11aad49b2500d3c5223b3e4fefb180571a13240101c2260ac853.png" alt="open source code" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">open source code</figcaption></figure><h2 id="h-powerups" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Powerups</h2><p>Heno. wanted to reward the players who supported his vision early on. The idea he came up with was to give anyone who owns the early access <code>ticket</code> powerups in the video game. With 3 different tickets, he assigned power-ups to each</p><ul><li><p>heart - 10 extra lives</p></li><li><p>camera - easier enemies</p></li><li><p>money - $100 extra in game</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a47b8707eadb7b2447098cb840193fc9be1bdd3d5cbf0c13f3c9e4050ee651ec.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>These rewards are stackable. If you own a camera &amp; a money <code>ticket</code> you’ll get easier enemies AND extra money in game. If you own 3 hearts, you’ll start the game with 30 extra lives. There’s other combos players can unlock by combining these tickets. I won’t give away all the combos here. Buy tickets here to unlock powerups in game.</p><p>I worked closely with <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/DaCirkus">DaCircus</a> to build a way to bring items from onchain =&gt; in game. It was actually pretty challenging to figure out a way to send messages from the NextJS website I was building with the Godot video game DaCircus had built. After numerous pair-programming session together and lots of questions to ChatGPT we found a solution:</p><pre data-type="codeBlock" text="const channel = new MessageChannel()

const callGodotFunction = () =&gt; {
    const iframe = document.querySelector(&quot;#godotGame&quot;) as HTMLIFrameElement
    if (!iframe) {
      return
    }
    const spotifyMoney = deviceId ? 5 : 0
    iframe.contentWindow.postMessage(
      [heartCount, cameraCount, moneyCount, spotifyMoney, address || &quot;&quot;],
      &quot;*&quot;,
      [channel.port2],
    )
}
"><code>const channel <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> MessageChannel()

const callGodotFunction <span class="hljs-operator">=</span> () <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
    const iframe <span class="hljs-operator">=</span> document.querySelector(<span class="hljs-string">"#godotGame"</span>) <span class="hljs-keyword">as</span> HTMLIFrameElement
    <span class="hljs-keyword">if</span> (<span class="hljs-operator">!</span>iframe) {
      <span class="hljs-keyword">return</span>
    }
    const spotifyMoney <span class="hljs-operator">=</span> deviceId ? <span class="hljs-number">5</span> : <span class="hljs-number">0</span>
    iframe.contentWindow.postMessage(
      [heartCount, cameraCount, moneyCount, spotifyMoney, <span class="hljs-keyword">address</span> <span class="hljs-operator">|</span><span class="hljs-operator">|</span> <span class="hljs-string">""</span>],
      <span class="hljs-string">"*"</span>,
      [channel.port2],
    )
}
</code></pre><p>The magic lives in <code>postMessage</code> function. In the NextJS website we lookup how many, and which type, of tickets the player has. We also give an option for players to connect their Spotify account to stream Relief on Spotify, which pays Heno. per stream. Once a player has connected their wallet and / or Spotify account, they click <code>START GAME</code> which calls the <code>callGodotFunction</code> (above) to start the game with powerups.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ef0f1ca2fb027d652a218dd1965917b72dba3abe033bd322dbba5164c65994a9.png" alt="Powerups: 5 extra lives &amp; $100" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Powerups: 5 extra lives &amp; $100</figcaption></figure><p>I want to take a second to highlight the importance <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/DaCirkus">DaCircus</a> played in this. He built the entire game on his own. He was the designer for all assets in the game too. He was the main developer &amp; designer on this project. I simply helped publish his game to an easy-to-use website &amp; plugged in the web3 functionality.</p><p>Thanks for taking the time to read! If you wanna keep going, here’s some links</p><ol><li><p>Play Relief by Heno. - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://play.mynameisheno.com/powerup?code=AQAxV8nYg6ba8ze6KGYEJ0RBDQ5FIdWJi7CZLxwMqRxwj2FI1XM33nS3x9FW2h4nRDoocQ2jxV1EKCXFrCjalJG5Mn9RbLXlT0YU9pzEUMxiDt3duW5wDaP0RKlYo2ArMiXGNvpQqQjDIjT7HYOw54F8Eyq1pqi7LXt2Hw24LaeeywCJwJClBiUMr_lPRYhk3RwV3Nj9p2e45Cr8rwJPm7mlzJzn_g9Av-2cWEW0P8X7psv_YQTZs1EOeFZA2DvzwFaQQ-WaogRZnoO1SSwBQ-jMYudLCQTnjfjp9kPWmJw7aGS0TCteP4DSyQ&amp;state=QVVb4jM7SK7mM7no">play.mynameisheno.com</a></p></li><li><p>Collect the Tickets to earn Super Powers - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zora.co/collect/zora:0x71fc87edd0a98a847c9bb838bc05577ef907f299">zora.co/heno</a></p></li><li><p>Download the Code to build your own game - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/SweetmanTech/Heno-Relief-Game">github/sweetmantech/Heno-Relief-Game</a></p></li><li><p>Stream Relief on Spotify - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://open.spotify.com/track/5aDNHHNXc16VktqV1gSq23">open.spotify.com</a></p></li></ol>]]></content:encoded>
            <author>sweetman-eth@newsletter.paragraph.com (sweetman.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/b5e791059d7cd05998f0caa6e32bdc047a8762ba333db6e0d3e43efea5d294dc.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[OnchainMagic 🪄 1155Stories]]></title>
            <link>https://paragraph.com/@sweetman-eth/onchainmagic-1155stories</link>
            <guid>Fm3MXU9mOBQpeFskk3bi</guid>
            <pubDate>Sat, 23 Sep 2023 00:52:35 GMT</pubDate>
            <description><![CDATA[This week, we rolled out an upgrade to stories on OnchainMagic to make them an ERC1155 instead of an ERC721. This saves 77% of gas costs. Our goal is to make it stupid simple for creators to put content on Zora. The challenge with our first iteration of stories was cost to deploy & ease of use filling the wallet. nft://8453/0xf4E5eb4C5A998E4F1f7ca2A71B6852F5C05A28c5/?showBuying=true&showMeta=true&size=small How can we drive down the cost of the everyday user? Both the amount of money they spe...]]></description>
            <content:encoded><![CDATA[<p>This week, we rolled out an upgrade to stories on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://onchainmagic.xyz">OnchainMagic</a> to make them an ERC1155 instead of an ERC721. This saves 77% of gas costs. Our goal is to make it stupid simple for creators to put content on Zora. The challenge with our first iteration of stories was cost to deploy &amp; ease of use filling the wallet.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="">nft://8453/0xf4E5eb4C5A998E4F1f7ca2A71B6852F5C05A28c5/?showBuying=true&amp;showMeta=true&amp;size=small</a></p><p>How can we drive down the cost of the everyday user? Both the amount of money they spend, the time and the energy they spend to put moments and memories onchain. With our original use of Zora ERC721 drops on OP Mainnet cost about 0.001 ETH or about $1.50 with creators earning, 0.000444 ETH on free mints. They need to mint approximately three additions to break even.</p><p>While this is way better than Ethereum Mainnet, where the costs are like $10 - 20 to deploy a contract. We still have a lot further to go. And so, what did we get by switching to the ERC1155?</p><p>The cost to deploy a new ERC1155 is 0.0005 ETH. It&apos;s already about 50% less than deploying an ERC721 on OP mainnet. If you want to add a new story to an existing collection, it&apos;s 0.0003 ETH, which is about 25% of the cost to deploy a ERC721 on OP Mainnet. AKA a reduction of 75% from the ERC721A. And it&apos;s significantly less than the cost to deploy an equivalent ERC721 on Ethereum Mainnet.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="">nft://10/0xcF1C8536aa80921A472830Bd434635E845E463dd/?showBuying=true&amp;showMeta=true</a></p><p>And so, at this point, if you sell one edition, you earn 0.00444 ETH</p><p>This allows our costs to be low enough for local communities to subsidize gas fees because at this point for a creator they&apos;re earning right out the gate 0.0001 ETH in revenue for a story that they would not have earned for on Instagram.</p><p>So how can we make it really easy to refill the wallet for the first time? We also rolled out auto-refill for creators. So if you&apos;re about to create a post or a story and you don&apos;t have enough energy or ETH or fuel or gas, we automatically refill your wallet.</p><p>This eliminated, one of the most challenging parts which was funding the social wallet. All of this is enabling our creators who have never used Zora before to upload content directly from live music events. What are the dashboards we need to build to measure the few specific outcomes that we&apos;re optimizing for? And if you&apos;re going to post on Instagram, why not post it as a story onchain as well?</p>]]></content:encoded>
            <author>sweetman-eth@newsletter.paragraph.com (sweetman.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/928cf187949ef5f737cc9dcf9944c5e88595bd8403bc3f4b2569fb96374c1704.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Introducing ERC721H: A New Standard for Programmable NFT Hooks]]></title>
            <link>https://paragraph.com/@sweetman-eth/introducing-erc721h-a-new-standard-for-programmable-nft-hooks</link>
            <guid>SExUB5TnuNTHutV2DqCq</guid>
            <pubDate>Wed, 26 Jul 2023 01:45:39 GMT</pubDate>
            <description><![CDATA[TLDRERC721H is an implementation of IERC721 that introduces "Hooks", bringing additional flexibility and control to creators and collections.The Cre8ors contract will be a hybrid ERC721ACH with ownership of an ERC6551 smart wallet.We collaborated with external security consultants to verify the solidity of our approach.We advocate for the community to embrace this implementation to maximize creator ownership of their collections onchain IP.CONTEXTBuilding on the innovations of ERC721A (2022),...]]></description>
            <content:encoded><![CDATA[<h2 id="h-tldr" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>TLDR</strong></h2><ul><li><p>ERC721H is an implementation of IERC721 that introduces &quot;<strong>Hooks</strong>&quot;, bringing additional flexibility and control to creators and collections.</p></li><li><p><strong>The </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.cre8ors.com/"><strong>Cre8ors</strong></a><strong> contract will be a hybrid ERC721ACH</strong> with <strong>ownership of an ERC6551 smart wallet.</strong></p></li><li><p>We collaborated with external security consultants to verify the solidity of our approach.</p></li><li><p>We advocate for the community to embrace this implementation to <strong>maximize creator ownership</strong> of their collections onchain IP.</p></li></ul><h2 id="h-context" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>CONTEXT</strong></h2><p>Building on the innovations of <strong>ERC721A</strong> (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.azuki.com/erc721a">2022</a>), which introduced significant <strong>gas savings for minting multiple NFTs</strong> in a single transaction. And then <strong>ERC721C</strong> (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://medium.com/limit-break/introducing-erc721-c-a-new-standard-for-enforceable-on-chain-programmable-royalties-defaa127410">2023</a>), which introduced <strong>enforceable on-chain programmable royalties</strong>, we are excited to present our latest advancement in the Non-Fungible Token (NFT) realm, <strong>ERC721H (hooks)</strong>. Our vision is to push creativity to the edges and empower projects to have the option to create &amp; expand their imagination onchain. ERC721H leverages the power of &quot;Hooks&quot; to bring additional flexibility and control to creators. The core objective of this standard is to maximize the creative ownership projects have of their collections. It’s fully composable with ERC721A &amp; ERC721C in ERC721H.</p><h2 id="h-problem" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>PROBLEM</strong></h2><p>The primary shortcomings of the original ERC721 standard has been a lack of consistent and flexible interaction mechanisms between NFTs and other contracts, leading to constrained functionality and innovation potential.  At Cre8ors, we’re working on <strong>pushing creativity to the edges</strong> while protecting creators’ ability to manage how their IP is used, exchanged and represented onchain.</p><p>Creators have been limited to a set of options defined for cryptokitties’ original ERC721. As creativity expands, our technological interfaces need to adapt to expand the onchain canvas to fit our imaginations.</p><h2 id="h-solution" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>SOLUTION</strong></h2><p>The ERC721H standard seeks to address these limitations by introducing the concept of hooks that can be attached to any base ERC721 event. The hooks are programmed to execute functions or trigger events in linked contracts, thereby opening a new world of complex interactions and integrations.</p><h2 id="h-use-cases" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">USE CASES</h2><p>ERC721H provides an array of potentials to make NFTs more interactive and versatile, hence expanding their functionality beyond mere digital assets. NFTs could potentially interact with DeFi contracts, social tokens, governance systems, subscription services, and even IoT devices. From conditional royalties to access control, to game mechanics, the possibilities are endless. Some examples of how we plan to leverage hooks are:</p><ul><li><p>Subscriptions</p></li><li><p>Staking</p></li><li><p>IP Distribution &amp; Management</p></li></ul><h2 id="h-how-it-started" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>HOW IT STARTED</strong></h2><p>Zora decoupled the metadata from the ERC721. With <code>IMetadataRenderer</code> &amp; the <code>setMetadataRenderer</code> method, creators can update the base tokenURI module in a standard ERC721 contract with anything they can imagine.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/ZORAEngineering/status/1631058831164751872?s=20">https://twitter.com/ZORAEngineering/status/1631058831164751872?s=20</a></p><p>This was the first step towards modularization of ERC721. Decoupling all aspects of the contract. Keeping the base contract simple. Push creativity to the edges. Give creators the keys to choose their level of customization. Give developers the infrastructure to experiment with new ideas with safe fallbacks following the shared, <code>IMetadataRenderer</code>, interface.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f16deb16fa831f32e8112d2825cdbe1a37147551bb3bf7a65c66133931053852.png" alt="IMetadataRenderer" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">IMetadataRenderer</figcaption></figure><h2 id="h-how-its-going" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>HOW ITS GOING</strong></h2><p>The ERC721H standard operates similarly to the original ERC721, but it introduces the possibility of adding custom behavior to all core ERC721 functions. A developer could inherit the ERC721H contract just like they would if they were using OpenZeppelin, customize it to their needs and deploy their ERC721H collection. The addition of hooks is performed using the virtual <code>setMethodHook</code> function, which can be called either in the constructor or after deployment. The hooks are easily adjustable to match the evolving requirements of the NFT collection over time.</p><p>With ERC721H, all base ERC721 methods now come with the following methods:</p><ul><li><p><code>beforeMethodHook</code> - Hook firing <strong>before</strong> an ERC721 event.</p></li><li><p><code>afterMethodHook</code> - Hook firing <strong>after</strong> an ERC721 event.</p></li><li><p><code>useMethodOverrideHook</code> - determines whether to <strong>override</strong> base ERC721 event.</p></li><li><p><code>methodOverrideHook</code> - Hook to <strong>override</strong> an ERC721 event.</p></li><li><p><code>methodHook</code> - stores the Hook contract <strong>interface</strong>.</p></li><li><p><code>setMethodHook</code> - ability for creators to <strong>update hooks</strong>.</p></li></ul><p>A brief code example showing the implementation of the ERC721H standard is as follows:</p><pre data-type="codeBlock" text="import {ERC721H} from &quot;../../contracts/erc721h/ERC721H.sol&quot;; 

contract ERC721HCollection is ERC721H { 

  constructor() ERC721H(&quot;Name of My Collection&quot;, &quot;SYMBOL&quot;) {
    setBalanceOfHook(myBalanceOfHookInterface); 
    setApproveHook(myApproveHookInterface);    
    setSafeTransferFromHook(mySafeTransferFromHookAddress); 
  } 
}
"><code>import {ERC721H} from "../../contracts/erc721h/ERC721H<span class="hljs-selector-class">.sol</span>"; 

contract ERC721HCollection is ERC721H { 

  <span class="hljs-built_in">constructor</span>() <span class="hljs-built_in">ERC721H</span>("Name of My Collection", "SYMBOL") {
    <span class="hljs-built_in">setBalanceOfHook</span>(myBalanceOfHookInterface); 
    <span class="hljs-built_in">setApproveHook</span>(myApproveHookInterface);    
    <span class="hljs-built_in">setSafeTransferFromHook</span>(mySafeTransferFromHookAddress); 
  } 
}
</code></pre><p>The hooks are custom smart contracts that implement a specific interface <code>IHook</code> defined by the ERC721H standard. The hook functions will be executed every time an NFT is minted, transferred, or burned, offering unlimited possibilities to add custom logic or trigger other contracts.</p><h2 id="h-decentralization" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>DECENTRALIZATION</strong></h2><p>Inherent to ERC721H&apos;s design, the programmable hooks provide flexibility in shaping the degree of centralization or decentralization as needed. By linking a hook&apos;s activation to specific wallets - be it an individual, corporate, multisig, or an entire DAO of smart wallets - creators can define the range and extent of decentralization. This modular approach ensures that the control parameters are adaptable to the specific contract&apos;s governance structure and progression, thereby promoting a balance between autonomy and collective participation.</p><h2 id="h-getting-started-with-erc721h" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Getting Started with ERC721H</strong></h2><p>We believe that the ERC721H standard has the potential to significantly contribute to the innovation and growth of the NFT ecosystem by fostering creative management of IP. We encourage developers and creators to explore our comprehensive guides, examples, and resources available on our <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/defientco/ERC721H">GitHub repository.</a></p><h2 id="h-innovate-or-die" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>INNOVATE OR DIE</strong></h2><p>Times are changing. The bull run is over and with it went the old standards. What worked before should not be interpreted as what will work today. Our core mission at Cre8ors is to unlock the creative potential and financial freedom for our members and ERC721H is a small example of how we plan on delivering innovative technology to our community that constantly moves the web3 space forward. <br><br><strong><em>Disclaimer</em></strong>*: The details and mechanisms provided in this article are preliminary and subject to changes and improvements based on ongoing development and community feedback. Kindly refer to our <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/defientco/ERC721H">GitHub repository</a> for the latest and most accurate information.*</p><p>The <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://cre8ors.com/mint">Cre8ors</a> mint is on August 8@8AM ET. See you there.</p>]]></content:encoded>
            <author>sweetman-eth@newsletter.paragraph.com (sweetman.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/d5f76d120fdebaca56a1fcf875f52f221def685a3ff9d539e6572b6aec816536.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Onchain Albums]]></title>
            <link>https://paragraph.com/@sweetman-eth/onchain-albums-2</link>
            <guid>q94Ovv68Fb1ax1eHGRka</guid>
            <pubDate>Sat, 08 Jul 2023 22:07:11 GMT</pubDate>
            <description><![CDATA[Esta es una carta para Warrobit en Buenos Aires, Argentina. Tenemos un nuevo invento. Algunos los llaman álbumes en cadena y otros los llaman mezclas. El nombre técnico es cuentas vinculadas al token (TBA) ERC6551. Le dan a tu música los mismos poderes que tienes cuando usas metamask. Le da a cada canción una billetera.CDalbumuna mesclaERC6551 en MúsicaERC-6551 turns every NFT into a smart wallet that can own tokens and interact with dApps across the Ethereum ecosystem. - tokenbound.orgCon ER...]]></description>
            <content:encoded><![CDATA[<p>Esta es una carta para <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/warrozenmusic">Warrobit</a> en Buenos Aires, Argentina. Tenemos un nuevo invento. Algunos los llaman álbumes en cadena y otros los llaman mezclas. El nombre técnico es cuentas vinculadas al token (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://tokenbound.org/">TBA</a>) <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-6551">ERC6551</a>. Le dan a tu música los mismos poderes que tienes cuando usas metamask. Le da a cada canción una billetera.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3cd80aee41c392e0d808f16b49f0c038e20787394d0afad7405d23b89e64ad5e.png" alt="CD" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">CD</figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/062e0edfb7abe031f4b1a5d56b7d399dd220d81ace6e9e0f9a58d9b071b59472.png" alt="album" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">album</figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6a627cd9a997a36874d9e9da9beeb310581016f8c9516a1c0218d1b03b56c16f.png" alt="una mescla" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">una mescla</figcaption></figure><h2 id="h-erc6551-en-musica" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">ERC6551 en Música</h2><blockquote><p><em>ERC-6551 turns every NFT into a smart wallet that can own tokens and interact with dApps across the Ethereum ecosystem.</em> - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://tokenbound.org">tokenbound.org</a></p></blockquote><p>Con ERC6551, toda la música en cadena existente y nueva tiene su propia billetera. Aquí hay algunos ejemplos simples de cómo Warrobit ya puede usar ERC6551 hoy a los que no se podía acceder antes:</p><h3 id="h-playlist" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">playlist</h3><p>Enviar una canción a su cuenta de Playlist para agregarla a la Playlist. Elimine la canción de su cuenta de Playlist para que los fanáticos no la escuchen más. Cada semana, puede ingresar y administrar su Playlist agregando canciones, eliminando canciones y cambiando el orden. Imagina traer Playlists a través de OohLaLa, SpinAmp y Future Tape.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/03135b878b3b5a7f2e835683676de24e4ac00fc4d40b080ffbb34b50637e2001.png" alt="Diseno de DJ Twinny Twin x Música de Valentina" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Diseno de DJ Twinny Twin x Música de Valentina</figcaption></figure><h3 id="h-album" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">álbum</h3><p>Para el último álbum de Warrobit, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://open.spotify.com/album/5FZnXAEZsLm4cZ1XxCBKto?si=Io7OHi9YTgGQH7liSRXE6A">WARRO FASHION STAR</a>, puede colocar cada una de las 14 pistas en Sound, Zora, Lens, etc. Luego, pueden enviar una edición de cada uno a la cuenta del álbum. El álbum, en OpenSea, muestra la última versión del álbum, que el músico puede actualizar con el tiempo. Empresas que deberían adoptar: Zora, Lens &amp; Sound.</p><h3 id="h-manojos" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">manojos</h3><p>Warrobit puede enviar 11 ediciones de una canción, 7 ediciones de otra y 3 de una tercera a una cuenta Bundle. Cuando Warrobit vende ese paquete en Zora u OpenSea, el comprador recibe automáticamente todas las canciones dentro del paquete. El nuevo propietario puede quedarse con algunas o todas las canciones dentro del paquete. Imaginemos que el comprador envía 8 de las canciones del paquete a su cuenta personal. El propietario puede entonces revender el paquete, menos las 8 canciones que ha transferido. Empresas que deberían adoptar: OpenSea, Rarible y Zora.</p><h2 id="h-albumes-en-cadena-v002" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Álbumes en cadena v0.0.2</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://onchainalbum.xyz">OnchainAlbum.xyz</a> es una herramienta para escuchar música de sus CD / Playlists / Álbumes / etc. construido en ERC6551. Escuche un iPod en cadena. O una mezcla. O un disco. O una Playlist. Todavía hay un 99% de ideas interesantes que aún no se han desbloqueado una vez que potenciamos la música con la misma cuenta que usamos los humanos. Esta es una nueva tecnología. Usted puede ayudar a escribir la narrativa. ¿Qué memes quieres usar para compartir las ideas de ERC6551 con los músicos?</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fd1004a2c961903ab8d18e1a65a6dd03e38baefa1a08a093361d72db1896072d.png" alt="Albums En Cadena" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Albums En Cadena</figcaption></figure><p>Puede visitar nuestro progreso más reciente <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://onchainalbum.xyz">onchainalbum.xyz</a> o sintonizar el <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/tokenbound">grupo de trabajo ERC6551</a> para recibir actualizaciones de llamadas de estado semanales. Esta tecnología es de uso gratuito en acceso público.</p><h3 id="h-creditos" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">creditos</h3><p>diseño de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/alexpaulmx">alex paul</a></p><p>música de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/edkeziah">Ed</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/yoshiromare">Yoshiro</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/solencontraluz">Sol</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/heybelanft">Bela</a> y <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/davyd_music">David</a></p>]]></content:encoded>
            <author>sweetman-eth@newsletter.paragraph.com (sweetman.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/d636a29c02bc72c07ca93bf5226a8b07c51e7589736149339f7ad857a8aa6e5c.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Onchain Albums]]></title>
            <link>https://paragraph.com/@sweetman-eth/onchain-albums</link>
            <guid>bYM1jbD89t7LlSk95wm1</guid>
            <pubDate>Sat, 08 Jul 2023 21:47:40 GMT</pubDate>
            <description><![CDATA[This is a letter for Warrobit in Buenos Aires, Argentina. We have a new invention. Some call them onchain albums and others call them mixes. The technical name is ERC6551 token bound accounts (TBA). They give your music the same powers you have when you use metamask. It gives each song a wallet.not bound to a specific formatmix of multimedia contentCDERC6551 in MusicERC-6551 turns every NFT into a smart wallet that can own tokens and interact with dApps across the Ethereum ecosystem. - tokenb...]]></description>
            <content:encoded><![CDATA[<p>This is a letter for <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/WarroZenMusic">Warrobit</a> in Buenos Aires, Argentina. We have a new invention. Some call them <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.onchainalbum.xyz/">onchain albums</a> and others call them mixes. The technical name is <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-6551">ERC6551</a> token bound accounts (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://tokenbound.org/">TBA</a>). They give your music the same powers you have when you use metamask. It gives each song a wallet.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/062e0edfb7abe031f4b1a5d56b7d399dd220d81ace6e9e0f9a58d9b071b59472.png" alt="not bound to a specific format" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">not bound to a specific format</figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6a627cd9a997a36874d9e9da9beeb310581016f8c9516a1c0218d1b03b56c16f.png" alt="mix of multimedia content" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">mix of multimedia content</figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3cd80aee41c392e0d808f16b49f0c038e20787394d0afad7405d23b89e64ad5e.png" alt="CD" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">CD</figcaption></figure><h2 id="h-erc6551-in-music" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">ERC6551 in Music</h2><blockquote><p><em>ERC-6551 turns every NFT into a smart wallet that can own tokens and interact with dApps across the Ethereum ecosystem. -</em> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://tokenbound.org/">tokenbound.org</a></p></blockquote><p>With <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-6551">ERC6551</a>, all existing, and new, onchain music has it’s own wallet. Here’s some simple examples of how Warrobit can already use ERC6551 today that were not accessible beforehand:</p><h3 id="h-playlist" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">playlist</h3><p>Send a song into your Playlist account to add it to the playlist. Remove the song from your Playlist account so fans won’t hear the song any more. Each week, you can go in &amp; manage your playlist by adding songs, removing song &amp; changing the order. Imagine bringing playlists across OohLaLa, SpinAmp &amp; Future Tape.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/cbbecc59b2ac89f2b13a4465412f83c92704a056ba8da69cfa4c33222754bffd.png" alt="Design by DJ Twinny Twin x Music by Valentina" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Design by DJ Twinny Twin x Music by Valentina</figcaption></figure><h3 id="h-album" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">album</h3><p>For Warrobit’s latest album <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://open.spotify.com/album/5FZnXAEZsLm4cZ1XxCBKto?si=z2FlK4x9SWSUwlxUtrqoxA">WARRO FASHION STAR</a> he can drop each of the 14 tracks on Sound, Zora, Lens, etc. Then, they can send one edition from each into the Album’s account. The album, in OpenSea, displays the latest version of the album, which the musician can update over time. Companies who should adopt: Zora, Lens &amp; Sound.</p><h3 id="h-bundles" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">bundles</h3><p>Warrobit can send 11 editions from one song, 7 editions from another, and 3 from a third into a Bundle account. When Warrobit sells that bundle on Zora or OpenSea, the buyer automatically receives all the songs inside the bundle. The new owner can either keep some, or all, of the songs inside the bundle. Let’s imagine the buyer sends 8 of the songs out of the bundle to their personal account. The owner may then resell the bundle, minus the 8 songs they’ve transferred out of it. Companies who should adopt: OpenSea, Rarible &amp; Zora.</p><h2 id="h-onchain-albums-v002" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Onchain Albums v0.0.2</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://onchainalbum.xyz">OnchainAlbum.xyz</a> is a tool to listen to music from your CDs / Playlists / Albums / etc. built on ERC6551. Listen to an onchain iPod. Or a mix. Or a CD. Or a playlist. There’s still 99% of exciting ideas that have yet to be unlocked once we empower music with the same account’s we humans use. This is a new technology. You can help write the narrative. What memes do you want to use in order to share the ideas of ERC6551 with musicians?</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fd1004a2c961903ab8d18e1a65a6dd03e38baefa1a08a093361d72db1896072d.png" alt="designs by @AlexPaulMx" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">designs by @AlexPaulMx</figcaption></figure><p>You can visit our latest progress at on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://onchainalbum.xyz">chainalbum.xyz</a> or tune in to the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/tokenbound">ERC6551 working group</a> for weekly status call updates. This technology is free to use in publicly accessible.</p><h3 id="h-credits" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">credits</h3><p>design by <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/AlexPaulMx">Alex Paul</a></p><p>music by <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/edkeziah">Ed</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/yoshiromare">Yoshiro</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/solencontraluz">Sol</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/HeybelaNFT">Bela</a> &amp; <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/davyd_music">David</a></p>]]></content:encoded>
            <author>sweetman-eth@newsletter.paragraph.com (sweetman.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/53a2eadb08fd78cd7048c75b6dba513140c9d98cd94c95081acca992ec60a5b9.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Facilitando el uso de Web3 Social para músicos y coleccionistas con LensMaticWrapper]]></title>
            <link>https://paragraph.com/@sweetman-eth/facilitando-el-uso-de-web3-social-para-m-sicos-y-coleccionistas-con-lensmaticwrapper</link>
            <guid>pnRWSSg57tBvMeALmQOs</guid>
            <pubDate>Wed, 05 Apr 2023 22:05:52 GMT</pubDate>
            <description><![CDATA[Nuestra pasión en Riff siempre ha sido apoyar a músicos talentosos y crear una experiencia más fluida para sus fans. Nuestra hipótesis: La música es social. Hoy, nos complace compartir con ustedes LensMaticWrapper de Riff, una solución que simplifica el uso de Web3 social para músicos y coleccionistas en el Protocolo Lens. Esto ya está disponible en Riff. Puedes probarlo hoy comprando música (con precios en WMATIC) y, cuando no tengas WMATIC en tu billetera, automáticamente cambiaremos esa mo...]]></description>
            <content:encoded><![CDATA[<p>Nuestra pasión en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Riffappxyz">Riff</a> siempre ha sido apoyar a músicos talentosos y crear una experiencia más fluida para sus fans.</p><p>Nuestra hipótesis: La música es social.</p><p>Hoy, nos complace compartir con ustedes <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/SweetmanTech/LENS-UNISWAP-WRAPPER">LensMaticWrapper</a> de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Riffappxyz">Riff</a>, una solución que simplifica el uso de Web3 social para músicos y coleccionistas en el <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/LensProtocol">Protocolo Lens</a>.</p><p>Esto ya está disponible en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Riffappxyz">Riff</a>.</p><p>Puedes probarlo hoy comprando música (con precios en WMATIC) y, cuando no tengas WMATIC en tu billetera, automáticamente cambiaremos esa moneda a MATIC por ti permitiendote coleccionar la canción en un solo paso.</p><p>En esta publicación, exploraremos los desafíos que enfrentan los usuarios, soluciones anteriores, nuestra hipótesis, la implementación del contrato <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/SweetmanTech/LENS-UNISWAP-WRAPPER">LensMaticWrapper</a> de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Riffappxyz">Riff</a>, los desafíos que enfrentamos y el resultado final.</p><h2 id="h-wmatic" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">WMATIC</h2><p>WMATIC es un aspecto confuso de Web3 social para músicos, lo que crea fricción y puede disuadir a posibles usuarios.</p><p>La complejidad de entender y usar tokens WMATIC a menudo conduce a una experiencia menos que ideal para artistas y coleccionistas por igual.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2dcaa632e346298bd5fd6f5bfbee0f374ff1a6ade8021bf8136e06fd36f7f419.png" alt="Mensaje de error: No tienes suficiente WMATIC" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Mensaje de error: No tienes suficiente WMATIC</figcaption></figure><h2 id="h-uniswap" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Uniswap</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.uniswap.org/#/swap?exactField=output&amp;exactAmount=7.0&amp;outputCurrency=0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270&amp;chain=polygon">Uniswap</a> es un intercambio descentralizado que permite a los coleccionistas intercambiar tokens.</p><p>Anteriormente, los coleccionistas tenían que abandonar la plataforma actual y visitar <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.uniswap.org/#/swap?exactField=output&amp;exactAmount=7.0&amp;outputCurrency=0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270&amp;chain=polygon">Uniswap</a> para cambiar sus tokens, lo que hacía que el proceso fuera engorroso y menos fácil de usar.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/23e1f3f301e12d9facb8e125fa22e5687ac3681ac17fbba5a40a8a5d18ba765f.png" alt="Uniswap: envolver MATIC en WMATIC " blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Uniswap: envolver MATIC en WMATIC</figcaption></figure><h2 id="h-un-contrato-wrapper" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Un contrato Wrapper</h2><p>Supusimos que un contrato wrapper podría proporcionar una experiencia más fluida al permitir a los usuarios intercambiar automáticamente y recopilar en una sola transacción sin salir de la plataforma.</p><p>Esto funcionaría con todas las publicaciones existentes en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/LensProtocol">Lens</a> y minimizaría la fricción, haciendo que Web3 social sea más accesible para músicos y coleccionistas.</p><h2 id="h-el-contrato-lensmaticwrapper" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">El contrato LensMaticWrapper</h2><p>El contrato <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/SweetmanTech/LENS-UNISWAP-WRAPPER">LensMaticWrapper</a> que hemos creado en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Riffappxyz">Riff</a> simplifica el proceso de intercambio y recolección de tokens WMATIC.</p><p>Al integrar este contrato en la plataforma, los usuarios pueden intercambiar fácilmente sus tokens y recopilar en una sola transacción simple.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5ef9a7e756f1a175aa55f082a64492d42a14d83e5b2417e675deebfae3028874.png" alt="Método collectWithSig en el contrato LensMaticWrapper" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Método collectWithSig en el contrato LensMaticWrapper</figcaption></figure><h2 id="h-desafios-typeddata-en-lens" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Desafíos - TypedData en Lens</h2><p>Durante el proceso de implementación, nos encontramos con varios desafíos.</p><p>El <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/LensProtocol">Protocolo Lens</a> verifica el saldo del usuario y muestra un error si el saldo es insuficiente.</p><p>Para superar este obstáculo, tuvimos que construir nuestro propio TypedData para firmas, lo cual fue una tarea compleja.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7b39eb86df1a7c1468103b89081bb4d79429af4bffad29dce9b8b96d0e6b7aa4.png" alt="Chat de Telegram de Lens Dev Garden" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Chat de Telegram de Lens Dev Garden</figcaption></figure><h2 id="h-el-resultado" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">El resultado</h2><p>Con el contrato <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/SweetmanTech/LENS-UNISWAP-WRAPPER">LensMaticWrapper</a> en su lugar, los coleccionistas que no tienen suficiente WMATIC ahora pueden intercambiar automáticamente y recopilar en una sola transacción fácil.</p><p>Este proceso simplificado no solo lo hace más conveniente para los coleccionistas, sino que también mejora la experiencia del usuario en general en la plataforma.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2dc80abdda67ca718e7abba2ff2cc4b7a4468cdc3ab0d277659d0f500a10f4b7.png" alt="Intercambiando MATIC =&gt; WMATIC y recopilando Lens Post en una sola transacción" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Intercambiando MATIC =&gt; WMATIC y recopilando Lens Post en una sola transacción</figcaption></figure><h2 id="h-conclusion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Conclusión</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/SweetmanTech/LENS-UNISWAP-WRAPPER">LensMaticWrapper</a> es un testimonio de nuestro compromiso en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Riffappxyz">Riff</a> de simplificar la experiencia de Web3 social para músicos y coleccionistas.</p><p>Al abordar los desafíos asociados con WMATIC y soluciones anteriores como <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.uniswap.org/#/swap?exactField=output&amp;exactAmount=7.0&amp;outputCurrency=0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270&amp;chain=polygon">Uniswap</a>, hemos creado una plataforma más fácil de usar que fomenta una adopción más amplia.</p><p>A medida que continuamos explorando e innovando en este espacio, esperamos realizar avances aún más emocionantes que apoyen a la próxima generación de músicos.</p><p>¡Hagamos ruido!</p>]]></content:encoded>
            <author>sweetman-eth@newsletter.paragraph.com (sweetman.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/2aa91359b35a40c6cd2b9b7859fa961e3ae14caaa8eb564307b8cb69ff5c380c.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Making Web3 Social Easier for Musicians and Collectors with LensMaticWrapper]]></title>
            <link>https://paragraph.com/@sweetman-eth/making-web3-social-easier-for-musicians-and-collectors-with-lensmaticwrapper</link>
            <guid>zC3Ff6APlabAwAfWJqjX</guid>
            <pubDate>Wed, 05 Apr 2023 21:20:42 GMT</pubDate>
            <description><![CDATA[Our passion at Riff has always been in supporting talented musicians and creating a smoother experience for their fans. Our hypothesis: Music is Social. Today, we’re excited to share with you LensMaticWrapper by Riff - a solution that simplifies the use of Web3 social for musicians and collectors on Lens Protocol. This is already live on Riff. You can try it today by collecting music (priced in WMATIC) when you don’t have any WMATIC in your wallet. We’ll automatically wrap it for you and let ...]]></description>
            <content:encoded><![CDATA[<p>Our passion at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Riffappxyz">Riff</a> has always been in supporting talented musicians and creating a smoother experience for their fans.</p><p>Our hypothesis: Music is Social.</p><p>Today, we’re excited to share with you LensMaticWrapper by <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Riffappxyz">Riff</a> - a solution that simplifies the use of Web3 social for musicians and collectors on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/LensProtocol">Lens Protocol</a>.</p><p>This is already live on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.beatsapp.xyz/">Riff</a>.</p><p>You can try it today by collecting music (priced in WMATIC) when you don’t have any WMATIC in your wallet.</p><p>We’ll automatically wrap it for you and let you collect the song in one, single, step.</p><p>In this post, we&apos;ll explore the challenges faced by users, previous solutions, our hypothesis, the implementation of the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/SweetmanTech/LENS-UNISWAP-WRAPPER">LensMaticWrapper</a> contract by <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.beatsapp.xyz/">Riff</a>, the challenges we faced, and the final result.</p><h2 id="h-wmatic" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">WMATIC</h2><p>WMATIC is a confusing aspect of Web3 social for musicians, which creates friction and can deter potential users.</p><p>The complexity of understanding and using WMATIC tokens often leads to a less-than-ideal experience for artists and collectors alike.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2dcaa632e346298bd5fd6f5bfbee0f374ff1a6ade8021bf8136e06fd36f7f419.png" alt="Error message - You do not have enough WMATIC" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Error message - You do not have enough WMATIC</figcaption></figure><h2 id="h-uniswap" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Uniswap</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.uniswap.org/#/swap?exactField=output&amp;exactAmount=7.0&amp;outputCurrency=0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270&amp;chain=polygon">Uniswap</a> is a decentralized exchange that allows collectors to swap tokens.</p><p>Previously, collectors would have to leave the current platform and visit Uniswap to swap their tokens, making the process cumbersome and less user-friendly.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/23e1f3f301e12d9facb8e125fa22e5687ac3681ac17fbba5a40a8a5d18ba765f.png" alt="Uniswap - Wrap MATIC to WMATIC" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Uniswap - Wrap MATIC to WMATIC</figcaption></figure><h2 id="h-a-wrapper-contract" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">A Wrapper Contract</h2><p>We hypothesized that a wrapper contract could provide a more seamless experience by enabling users to auto-swap and collect in a single transaction without leaving the platform.</p><p>This would work with all existing posts on Lens and minimize friction and make Web3 social more accessible to musicians and collectors.</p><h2 id="h-the-lensmaticwrapper-contract" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The LensMaticWrapper Contract</h2><p>The <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/SweetmanTech/LENS-UNISWAP-WRAPPER">LensMaticWrapper</a> contract we&apos;ve created at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Riffappxyz">Riff</a> streamlines the process of swapping and collecting WMATIC tokens.</p><p>By integrating this contract into the platform, users can easily swap their tokens and collect in a single, simple transaction.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5ef9a7e756f1a175aa55f082a64492d42a14d83e5b2417e675deebfae3028874.png" alt="collectWithSig method in LensMaticWrapper contract" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">collectWithSig method in LensMaticWrapper contract</figcaption></figure><h2 id="h-challenges" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Challenges</h2><p>TypedData on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/LensProtocol">Lens</a> During the implementation process, we encountered several challenges.</p><p>The <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/LensProtocol">Lens Protocol</a> checks a user&apos;s balance and throws an error if the balance is insufficient.</p><p>To overcome this hurdle, we had to build our own typedData for signatures, which was a complex task.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7b39eb86df1a7c1468103b89081bb4d79429af4bffad29dce9b8b96d0e6b7aa4.png" alt="Lens Dev Garden Telegram Chat" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Lens Dev Garden Telegram Chat</figcaption></figure><h2 id="h-the-result" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The Result</h2><p>With the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/SweetmanTech/LENS-UNISWAP-WRAPPER">LensMaticWrapper</a> contract in place, collectors who don&apos;t have enough WMATIC can now auto-swap and collect in a single, easy, transaction.</p><p>This streamlined process not only makes it more convenient for collectors but also enhances the overall user experience on the platform.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2dc80abdda67ca718e7abba2ff2cc4b7a4468cdc3ab0d277659d0f500a10f4b7.png" alt="Swapping MATIC =&gt; WMATIC and collecting Lens Post in one, single, transaction" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Swapping MATIC =&gt; WMATIC and collecting Lens Post in one, single, transaction</figcaption></figure><h2 id="h-conclusion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Conclusion</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/SweetmanTech/LENS-UNISWAP-WRAPPER">LensMaticWrapper</a> is a testament to our commitment at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Riffappxyz">Riff</a> to simplifying the Web3 social experience for musicians and collectors.</p><p>By addressing the challenges associated with WMATIC and previous solutions like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.uniswap.org/#/swap?exactField=output&amp;exactAmount=7.0&amp;outputCurrency=0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270&amp;chain=polygon">Uniswap</a>, we&apos;ve created a more user-friendly platform that encourages wider adoption.</p><p>As we continue to explore and innovate in this space, we look forward to making even more exciting advancements that support the next generation of music.</p><p>Let&apos;s make some noise!</p>]]></content:encoded>
            <author>sweetman-eth@newsletter.paragraph.com (sweetman.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/2aa91359b35a40c6cd2b9b7859fa961e3ae14caaa8eb564307b8cb69ff5c380c.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[El experimento UBI: compartiendo las ganancias del EP con más de 500 personas en todo el mundo]]></title>
            <link>https://paragraph.com/@sweetman-eth/el-experimento-ubi-compartiendo-las-ganancias-del-ep-con-m-s-de-500-personas-en-todo-el-mundo</link>
            <guid>kWm1sZyASwNE4qVXTTci</guid>
            <pubDate>Fri, 17 Mar 2023 01:25:12 GMT</pubDate>
            <description><![CDATA[Como músico e ingeniero, siempre estoy buscando formas innovadoras de relacionarme con mi comunidad y contribuir al crecimiento del ecosistema descentralizado. En colaboración con cuatro talentosos músicos, Tobilla, Static Res, Kah&apos;lil y WhoKarez, lanzamos un EP titulado "Not yet, no?" y nos embarcamos en un audaz experimento. Para cada uno de estos 4 músicos, fue su primer música nft. Para cuando leas esto, la venta ha terminado, todos los músicos ya han sido pagados, igualmente, ~$23 p...]]></description>
            <content:encoded><![CDATA[<p>Como músico e ingeniero, siempre estoy buscando formas innovadoras de relacionarme con mi comunidad y contribuir al crecimiento del ecosistema descentralizado. En colaboración con cuatro talentosos músicos, Tobilla, Static Res, Kah&apos;lil y WhoKarez, lanzamos un EP titulado &quot;<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.notyetno.xyz/">Not yet, no?</a>&quot; y nos embarcamos en un audaz experimento. Para cada uno de estos 4 músicos, fue su primer música nft. Para cuando leas esto, la venta ha terminado, todos los músicos ya han sido pagados, igualmente, ~$23 por su primer lanzamiento de música nft. Decidí distribuir mis ganancias del EP &quot;<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.notyetno.xyz/">Not yet, no?</a>&quot; a más de 500 personas en todo el mundo, sin ningún tipo de condición. Aquí está cómo lo hice:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7920dbfa876daefd2082c510e840fb025fe035c8bf9f956cfd52dc22920d958f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-paso-uno-calcular-las-ganancias-del-ep" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Paso uno: Calcular las ganancias del EP</h2><p>Primero, tuve que determinar cuánto gané con el EP &quot;<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.notyetno.xyz/">Not yet, no?</a>&quot; revisando la transacción de distribución. Cada uno de los involucrados en el proyecto ganó 22.4 MATIC (aproximadamente $23). <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://polygonscan.com/tx/0xeb2a43a9be9077430a6bc8bb842dea0cf90262ac3ce8a639179920e9393027eb">Puedes ver la transacción de distribución del EP aquí</a>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6e54b16bb3df67ba968f9e3cc820a81f25740061593b180eb8ab806dd5e09bdb.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-paso-dos-transferir-fondos-al-ubi-split" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Paso dos: Transferir fondos al UBI Split</h2><p>A continuación, envié mis ganancias (22.4 MATIC) a mi UBI Split utilizando la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://jacob.energy/hyperstructures.html">hyperestructura</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.0xsplits.xyz/">0xSplits</a>, que se distribuiría a mis más de 500 beneficiarios en todo el mundo. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://polygonscan.com/tx/0xfddbeea37c4227495ea9b48cffbe20663a50ecfbf0816504310d51d389714f4f">Aquí está la transacción para la transferencia de fondos.</a></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d23ff95c451cfe7527295a71ace1a6f47e6eff63510d24f1f9d8d6fa3464a355.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-paso-tres-encontrar-nuevos-coleccionistas-del-ep" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Paso tres: Encontrar nuevos coleccionistas del EP</h2><p>Para encontrar nuevos coleccionistas de nuestro EP &quot;<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.notyetno.xyz/">Not yet, no?</a>&quot;, utilicé <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dashboard.alchemy.com/composer">Alchemy Composer</a> para cambiar la blockchain al Polygon Mainnet y modifiqué la consulta para obtener <code>getOwnersForCollection</code>. Después de pegar mi dirección de contrato y hacer clic en &quot;Send Request&quot;, descubrí que teníamos 7 coleccionistas en nuestra EP.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a522ac44a360795ffef721886c7df4a5bd1ac85ccf3db8ef3c3348bb1bf9126d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-paso-cuatro-airdrop-de-tokens-coleccionables" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Paso cuatro: Airdrop de tokens coleccionables</h2><p>Con una lista de nuestros nuevos coleccionistas, hice un airdrop de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/collection/sweet-s-collectors">mi token coleccionable</a> a cada uno de ellos. Antes del airdrop, tenía 502 coleccionistas únicos de mi NFT &quot;<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/collection/sweet-s-collectors">Sweet&apos;s Collector</a>&quot;. Después del airdrop, el número aumentó a 508 coleccionistas únicos, incluidos 6 coleccionistas completamente nuevos que nunca antes habían coleccionado de mí. Luego tuve la oportunidad de darles la bienvenida a mi comunidad y aprender más sobre ellos. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://polygonscan.com/tx/0x9885b2fa914dcae7d6fba545b61ca48599672106acce3db244d1282b713a7d2f">El hash de la transacción de airdrop se puede encontrar aquí</a>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2712294ecef85a2c470bf651ee7c8dca8de63ef79920410122ba7c8905e65db2.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-paso-cinco-generar-una-nueva-lista-de-beneficiarios-ubi" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Paso cinco: Generar una nueva lista de beneficiarios UBI</h2><p>Utilicé <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dashboard.alchemy.com/composer">Alchemy Composer</a> para obtener la lista de coleccionistas de mi NFT &quot;<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/collection/sweet-s-collectors">Sweet&apos;s Collectors</a>&quot;, tal como lo hice antes. Luego, utilicé Google Sheets para calcular el porcentaje del 100% que cada uno de los 508 beneficiarios debía recibir. En este caso, todos recibieron un porcentaje igual del 0.1968%, con una persona recibiendo un poco más, el 0.2224%. Exporté estos datos como un archivo CSV desde Google Sheets, con la columna A enumerando las direcciones y la columna B mostrando los porcentajes que recibiría cada beneficiario.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5bfa9e0320df8fbadeb13f08792d9d655ff7c4f805708df4d5a1b502eb1a0377.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-paso-seis-actualizar-el-ubi-split" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Paso seis: Actualizar el UBI Split</h2><p>Con la nueva lista de beneficiarios UBI en mano, edité el UBI Split en la interfaz de usuario de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.0xsplits.xyz/">0xSplits</a> y cargué el archivo CSV del paso anterior. Hice clic en el botón &quot;Validate CSV&quot; y, una vez que la nueva lista se veía bien, actualicé el split. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://polygonscan.com/tx/0x59ba380496e32d639eb0e3949b7db6c61193d8eecaa6b0db7d4fb66fe9a6a7e1">El hash de la transacción para actualizar el split con la nueva lista de beneficiarios UBI y porcentajes se puede encontrar aquí</a>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7fabc1d735c9e123ad66e50b7e458bd2ae28affa7d1db094165986f4e203fb6e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-paso-siete-distribuir-y-retirar-para-todos" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Paso siete: Distribuir y retirar para todos</h2><p>Esta es mi parte favorita. Después de seleccionar distribuir el saldo disponible de 22.4 MATIC, hice clic en el menú desplegable junto al botón &quot;Distribuir&quot; y seleccioné la opción &quot;Distribuir y retirar para todos&quot;. Esto hizo que los fondos se “airdropped” en las 508 billeteras a nivel mundial. Los beneficiarios vieron instantáneamente los fondos aparecer en sus billeteras, sin necesidad de firmar ninguna transacción. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://polygonscan.com/tx/0x1ef28dd7dc1b91791c44a3799cd6fcf0c318a847d72bf5c44124a859682f3dbe">El hash de la transacción para la distribución y retiro para todos se puede encontrar aquí</a>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/60ac9d9450a2a9c97b504f35a750ac6def9702ccccb50077653af6348165e451.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-paso-ocho-comunicarse-con-la-comunidad" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Paso ocho: Comunicarse con la comunidad</h2><p>Por último, informé a mi comunidad que habían recibido el pago. Los músicos podían usar ese dinero para implementar su primer música nft, mientras que los coleccionistas podían usarlo como costos de gas para interactuar con sus músicos favoritos en la blockchain. Quizás algunos beneficiarios necesitaban dinero en efectivo para retirar sus fondos y pagar sus facturas. El punto es que los fondos ahora eran suyos para usar como mejor les pareciera.</p><h2 id="h-conclusion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Conclusión:</h2><p>Este experimento UBI demuestra el poder de la web3 y la tecnología blockchain para permitir a los artistas y músicos crear nuevas formas de valor económico y compartirlo directamente con sus fans y seguidores. Al abrir nuevas posibilidades de colaboración e interacción, estamos rompiendo barreras entre creadores y sus audiencias y fomentando un mundo más inclusivo y descentralizado.</p>]]></content:encoded>
            <author>sweetman-eth@newsletter.paragraph.com (sweetman.eth)</author>
        </item>
        <item>
            <title><![CDATA[The UBI Experiment: Sharing EP Earnings with 500+ People Globally]]></title>
            <link>https://paragraph.com/@sweetman-eth/the-ubi-experiment-sharing-ep-earnings-with-500-people-globally</link>
            <guid>RloyG1wZalxVCdIYu3RS</guid>
            <pubDate>Fri, 17 Mar 2023 00:48:58 GMT</pubDate>
            <description><![CDATA[As a musician & engineer, I&apos;m always exploring innovative ways to engage with my community and contribute to the growth of the decentralized ecosystem. In collaboration with four talented musicians, Tobilla, Static Res, Kah&apos;lil, and WhoKarez, we dropped an EP titled "Not yet, no?" & embarked on a bold experiment. For each of these 4 musicians, it was their first-ever music nft. By the time you’re reading this, the sale has ended, all musicians have already been paid out, equally, ~$...]]></description>
            <content:encoded><![CDATA[<p>As a musician &amp; engineer, I&apos;m always exploring innovative ways to engage with my community and contribute to the growth of the decentralized ecosystem. In collaboration with four talented musicians, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/tobillamuffin">Tobilla</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/static_res">Static Res</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/kahlilnewton">Kah&apos;lil</a>, and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/wk808z">WhoKarez</a>, we dropped an EP titled &quot;<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.notyetno.xyz/">Not yet, no?</a>&quot; &amp; embarked on a bold experiment. For each of these 4 musicians, it was their first-ever music nft. By the time you’re reading this, the sale has ended, all musicians have already been paid out, equally, ~$23 for their first music nft drop. I decided to distribute my earnings from the EP &quot;<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.notyetno.xyz/">Not yet, no?</a>&quot; to over 500 people globally, with no strings attached. Here&apos;s how I did it:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7920dbfa876daefd2082c510e840fb025fe035c8bf9f956cfd52dc22920d958f.png" alt="Not yet, no? EP" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Not yet, no? EP</figcaption></figure><h2 id="h-step-one-calculate-earnings-from-the-ep" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Step One: Calculate earnings from the EP</h2><p>First, I needed to determine how much I earned from the EP &quot;Not yet, no?&quot; by checking the distribution transaction. Each of us involved in the project earned 22.4 MATIC (approximately $23). You can view the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://polygonscan.com/tx/0xeb2a43a9be9077430a6bc8bb842dea0cf90262ac3ce8a639179920e9393027eb">EP distribution transaction here</a>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6e54b16bb3df67ba968f9e3cc820a81f25740061593b180eb8ab806dd5e09bdb.png" alt="musician payout for the EP: Not yet, no?" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">musician payout for the EP: Not yet, no?</figcaption></figure><h2 id="h-step-two-transfer-funds-to-the-ubi-split" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Step Two: Transfer funds to the UBI Split</h2><p>Next, I sent my earnings (22.4 MATIC) to my UBI Split using the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.0xsplits.xyz/">0xSplits</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://jacob.energy/hyperstructures.html">hyperstructure</a>, which would be distributed to my 500+ recipients globally. Here&apos;s the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://polygonscan.com/tx/0xfddbeea37c4227495ea9b48cffbe20663a50ecfbf0816504310d51d389714f4f">transaction for the fund transfer</a>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d23ff95c451cfe7527295a71ace1a6f47e6eff63510d24f1f9d8d6fa3464a355.png" alt="22.4 MATIC deposited into UBI" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">22.4 MATIC deposited into UBI</figcaption></figure><h2 id="h-step-three-find-new-ep-collectors" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Step Three: Find new EP collectors</h2><p>To find new collectors for our EP &quot;Not yet, no?&quot;, I used <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dashboard.alchemy.com/composer">Alchemy Composer</a> to switch the blockchain to the Polygon Mainnet and changed the query to <code>getOwnersForCollection</code>. After pasting my contract address and clicking &quot;send request,&quot; I discovered that we had 7 collectors on our drop.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a522ac44a360795ffef721886c7df4a5bd1ac85ccf3db8ef3c3348bb1bf9126d.png" alt="Alchemy Composer" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Alchemy Composer</figcaption></figure><h2 id="h-step-four-airdrop-collector-tokens" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Step Four: Airdrop collector tokens</h2><p>With a list of our new collectors, I airdropped <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/collection/sweet-s-collectors">my collector token</a> to each of them. Before the airdrop, I had 502 unique collectors of my <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/collection/sweet-s-collectors">&quot;Sweet&apos;s Collector&quot; NFT</a>. After the airdrop, the number increased to 508 unique collectors, including 6 brand new collectors who had never collected from me before. I then had the opportunity to welcome them to my community and learn more about them. The <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://polygonscan.com/tx/0x9885b2fa914dcae7d6fba545b61ca48599672106acce3db244d1282b713a7d2f">airdrop transaction hash can be found here</a>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2712294ecef85a2c470bf651ee7c8dca8de63ef79920410122ba7c8905e65db2.png" alt="Sweet&apos;s Collectors - 508 Owners" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Sweet&apos;s Collectors - 508 Owners</figcaption></figure><h2 id="h-step-five-generate-a-new-ubi-recipient-list" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Step Five: Generate a new UBI recipient list</h2><p>I used <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dashboard.alchemy.com/composer">Alchemy Composer</a> to get the collector list from my <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/collection/sweet-s-collectors">&quot;Sweet&apos;s Collectors&quot; NFT</a>, just as I did before. Then, I employed Google Sheets to calculate the percentage of 100% each of the 508 recipients should receive. In this case, everyone received an equal percentage of 0.1968%, with one person receiving slightly more at 0.2224%. I exported this data as a CSV from Google Sheets, with Column A listing the <code>addresses</code> and Column B showing the <code>percentage splits</code> each recipient would receive.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5bfa9e0320df8fbadeb13f08792d9d655ff7c4f805708df4d5a1b502eb1a0377.png" alt="calculating UBI" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">calculating UBI</figcaption></figure><h2 id="h-step-six-update-the-ubi-split" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Step Six: Update the UBI Split</h2><p>With the new UBI recipient list in hand, I edited the UBI split in <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.0xsplits.xyz/">0xSplits</a> UI and uploaded the CSV file from the previous step. I clicked the &quot;Validate CSV&quot; button, and once the new list looked good, I updated the split. The <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://polygonscan.com/tx/0x59ba380496e32d639eb0e3949b7db6c61193d8eecaa6b0db7d4fb66fe9a6a7e1">transaction hash for updating the split</a> with the new list of UBI recipients and percentages can be found <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://polygonscan.com/tx/0x59ba380496e32d639eb0e3949b7db6c61193d8eecaa6b0db7d4fb66fe9a6a7e1">here</a>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7fabc1d735c9e123ad66e50b7e458bd2ae28affa7d1db094165986f4e203fb6e.png" alt="0xSplits - Update Split" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">0xSplits - Update Split</figcaption></figure><h2 id="h-step-seven-distribute-and-withdraw-for-all" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Step Seven: Distribute and withdraw for all</h2><p>This is my favorite part. After selecting to distribute the available balance of 22.4 MATIC, I clicked the dropdown beside the &quot;Distribute&quot; button and selected the &quot;Distribute &amp; withdraw for all&quot; option. This made it so the funds were airdropped into all 508 wallets globally. Recipients instantly saw the funds appear in their wallets, with no need to sign any transactions. The transaction hash for the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://polygonscan.com/tx/0x1ef28dd7dc1b91791c44a3799cd6fcf0c318a847d72bf5c44124a859682f3dbe">distribution and withdrawal for all</a> can be found <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://polygonscan.com/tx/0x1ef28dd7dc1b91791c44a3799cd6fcf0c318a847d72bf5c44124a859682f3dbe">here</a>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/60ac9d9450a2a9c97b504f35a750ac6def9702ccccb50077653af6348165e451.png" alt="0xSplits - Distribute &amp; withdraw for all" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">0xSplits - Distribute &amp; withdraw for all</figcaption></figure><h2 id="h-step-eight-communicate-with-the-community" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Step Eight: Communicate with the community</h2><p>Lastly, I let my community know they had received payment. Musicians could use that money to deploy their first music NFT, while collectors could use it as gas costs to interact with their favorite musicians onchain. Perhaps some recipients needed gas money to withdraw their funds and pay their bills. The point is, the funds were now theirs to use as they saw fit.</p><h2 id="h-conclusion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Conclusion:</h2><p>This UBI experiment demonstrates the power of web3 and blockchain technology to enable artists and musicians to create new forms of economic value and share it directly with their fans and supporters. By opening up new possibilities for collaboration and interaction, we&apos;re breaking down barriers between creators and their audiences and fostering a more inclusive, decentralized world.</p>]]></content:encoded>
            <author>sweetman-eth@newsletter.paragraph.com (sweetman.eth)</author>
        </item>
        <item>
            <title><![CDATA[How to Create Your Own NFT Music Player with Decent: Step by Step Guide]]></title>
            <link>https://paragraph.com/@sweetman-eth/how-to-create-your-own-nft-music-player-with-decent-step-by-step-guide</link>
            <guid>K40UeNf3OcZ5DMKHDyuO</guid>
            <pubDate>Tue, 07 Feb 2023 13:16:23 GMT</pubDate>
            <description><![CDATA[Step by Step Guide: How to Create Your Own NFT Music Player with Decent.EL EXILIO by New Festival TokenIntroduction: In this tutorial, you will learn how to create your own NFT Music Player using the Decent protocol. You will discover how to upload your music, create the player, and mint your NFT to appear on OpenSea.Access the Decent Player website: https://www.decentplayer.xyz/Create your own player: Follow the instructions on the page to create your own custom music player.Verify your play...]]></description>
            <content:encoded><![CDATA[<p>Step by Step Guide: How to Create Your Own <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/assets/matic/0x657cef6796c8593337dbe2bdf588a739370d2025/0">NFT Music Player</a> with <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decent.xyz/">Decent</a>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9a4dfd0acc7402ffdb79ecc7d335c0461d31e96c34b5903e255140fc9ead83f8.png" alt="EL EXILIO by New Festival Token" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">EL EXILIO by New Festival Token</figcaption></figure><p>Introduction: In this tutorial, you will learn how to create your own <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.decentplayer.xyz/">NFT Music Player</a> using the Decent protocol. You will discover how to upload your music, create the player, and mint your NFT to appear on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/assets/matic/0x657cef6796c8593337dbe2bdf588a739370d2025/0">OpenSea</a>.</p><ol><li><p>Access the Decent Player website: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.decentplayer.xyz/">https://www.decentplayer.xyz/</a></p></li><li><p>Create your own player: Follow the instructions on the page to create your own custom music player.</p></li><li><p>Verify your player: Make sure your player is working properly.</p></li><li><p>Create your contract: Follow the instructions to create your own custom contract.</p></li><li><p>Execute the first transaction: Create your contract in order to mint your NFT.</p></li><li><p>Execute the second transaction: Mint your NFT using the &quot;mint&quot; function.</p></li><li><p>Check on OpenSea: Make sure your NFT appears on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/assets/matic/0x657cef6796c8593337dbe2bdf588a739370d2025/0">OpenSea</a>.</p></li></ol><div data-type="youtube" videoId="HfQX5R9fGLo">
      <div class="youtube-player" data-id="HfQX5R9fGLo" style="background-image: url('https://i.ytimg.com/vi/HfQX5R9fGLo/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=HfQX5R9fGLo">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><p>Conclusion: With these simple steps, you can now create your own NFT Music Player with Decent. This is the perfect path for LATAM musicians who want to launch their next NFT music drop. Good luck and enjoy your creation!</p><p>Credits:</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/assets/matic/0x657cef6796c8593337dbe2bdf588a739370d2025/0">EL EXILIO - New Festival Token</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://hq.decent.xyz/137/Editions/0xa3b8194eb1f479f2d71261ef84a209142c4c8b45">REPRODUCTOR DE ALEGRIA</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://warpsound.gitbook.io/">CC0 Player - WarpSound</a></p></li></ul>]]></content:encoded>
            <author>sweetman-eth@newsletter.paragraph.com (sweetman.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/eb69925522d73417509283553996c196ae0655fc52c5f19dbf601fcaa8c3635a.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Cómo crear tu propio Reproductor de Música NFT con Decent: Guía paso a paso]]></title>
            <link>https://paragraph.com/@sweetman-eth/c-mo-crear-tu-propio-reproductor-de-m-sica-nft-con-decent-gu-a-paso-a-paso</link>
            <guid>bjtsF0SRMaxbaxhtEueV</guid>
            <pubDate>Tue, 07 Feb 2023 13:04:31 GMT</pubDate>
            <description><![CDATA[Paso a paso: Cómo crear tu propio Reproductor de Música NFT con DecentEL EXILIO de New Festival TokenIntroducciónEn este tutorial, aprenderás a crear tu propio Reproductor de Música NFT con el protocolo Decent. Descubrirás cómo subir tu música, crear el reproductor y acuñar tu NFT para que aparezca en OpenSea.Accede a la página web Decent Player: https://www.decentplayer.xyz/Crea tu propio reproductor: Sigue las instrucciones en la página para crear tu propio reproductor de música personaliza...]]></description>
            <content:encoded><![CDATA[<p>Paso a paso: Cómo crear tu propio Reproductor de Música NFT con <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decent.xyz/">Decent</a></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9a4dfd0acc7402ffdb79ecc7d335c0461d31e96c34b5903e255140fc9ead83f8.png" alt="EL EXILIO de New Festival Token" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">EL EXILIO de New Festival Token</figcaption></figure><h2 id="h-introduccion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Introducción</h2><p>En este tutorial, aprenderás a crear tu propio <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.decentplayer.xyz/">Reproductor de Música</a> NFT con el protocolo Decent. Descubrirás cómo subir tu música, crear el reproductor y acuñar tu NFT para que aparezca en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/assets/matic/0x657cef6796c8593337dbe2bdf588a739370d2025/0">OpenSea</a>.</p><ol><li><p>Accede a la página web Decent Player: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.decentplayer.xyz/">https://www.decentplayer.xyz/</a></p></li><li><p>Crea tu propio reproductor: Sigue las instrucciones en la página para crear tu propio reproductor de música personalizado.</p></li><li><p>Verifica tu reproductor: Verifica que tu reproductor funcione correctamente.</p></li><li><p>Crea tu contrato: Sigue las instrucciones para crear tu contrato personalizado.</p></li><li><p>Ejecuta la primera transacción: Crea tu contrato para poder acuñar tu NFT.</p></li><li><p>Ejecuta la segunda transacción: Acuña tu NFT con la función &quot;mint&quot;.</p></li><li><p>Verifica en OpenSea: Asegúrate de que tu NFT aparezca en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/assets/matic/0x657cef6796c8593337dbe2bdf588a739370d2025/0">OpenSea</a>.</p></li></ol><div data-type="youtube" videoId="HfQX5R9fGLo">
      <div class="youtube-player" data-id="HfQX5R9fGLo" style="background-image: url('https://i.ytimg.com/vi/HfQX5R9fGLo/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=HfQX5R9fGLo">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><h2 id="h-conclusion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Conclusión</h2><p>Con estos sencillos pasos, ahora puedes crear tu propio Reproductor de Música NFT con Decent. Este es el camino perfecto para los músicos de LATAM que quieran lanzar su próximo drop de música NFT. ¡Buena suerte y disfruta de tu creación!</p><p>Credits:</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/assets/matic/0x657cef6796c8593337dbe2bdf588a739370d2025/0">EL EXILIO - New Festival Token</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://hq.decent.xyz/137/Editions/0xa3b8194eb1f479f2d71261ef84a209142c4c8b45">REPRODUCTOR DE ALEGRIA</a></p></li></ul>]]></content:encoded>
            <author>sweetman-eth@newsletter.paragraph.com (sweetman.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/3aac79c497fdd3a3cf8db2f3eea428bcb45d19e15c1d93041b297732ba6f3828.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Heno's Airdrop: A Music NFT Success Story]]></title>
            <link>https://paragraph.com/@sweetman-eth/heno-s-airdrop-a-music-nft-success-story</link>
            <guid>7NMChmB3LW2frG7B6Pjv</guid>
            <pubDate>Wed, 18 Jan 2023 15:40:19 GMT</pubDate>
            <description><![CDATA[Recently, Heno approached me with a problem he was facing while trying to use the airdrop feature on Decent.xyz. He had a CSV file of his backers from Sound, but it wasn’t working with Decent’s CSV Airdrop tool, making it impossible for him to distribute his latest music nfts. I was able to help Heno resolve this issue and successfully use the airdrop feature. In this article, I&apos;ll discuss the technical challenges Heno faced and the steps I took to resolve them. I’ll end by posing a ques...]]></description>
            <content:encoded><![CDATA[<p>Recently, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/mynameisheno">Heno</a> approached me with a problem he was facing while trying to use the airdrop feature on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://hq.decent.xyz/">Decent.xyz</a>. He had a CSV file of his backers from <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.sound.xyz/">Sound</a>, but it wasn’t working with Decent’s CSV Airdrop tool, making it impossible for him to distribute his latest music nfts. I was able to help Heno resolve this issue and successfully use the airdrop feature. In this article, I&apos;ll discuss the technical challenges Heno faced and the steps I took to resolve them. I’ll end by posing a question on how we can make this easier for more musicians who follow in Heno’s footsteps.</p><h3 id="h-steps-to-resolve-the-issue" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">steps to resolve the issue</h3><p>When Heno approached me with his problem, I first recreated the bug by uploading the CSV file, from sound, to run an airdrop on a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://goerli-optimism.etherscan.io/">testnet</a>. This confirmed that the bug existed and that Decent.xyz was already alerting musicians of the reason for the errors.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/56e4a5433dc4428445cafcb3e228d77fd199719a38230ba0ac67cb6e85c8b0cd.png" alt="Sound x Heno CSV file" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Sound x Heno CSV file</figcaption></figure><p>Steps I took:</p><ol><li><p>Recreated the bug by uploading the CSV file to run an airdrop on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://goerli-optimism.etherscan.io/">Goerli testnet</a>.</p></li><li><p>Confirmed that the bug existed and Decent.xyz was already alerting musicians of the reason for the errors.</p></li><li><p>Hypothesized that the CSV file had an additional column for quantity, which was causing the error. Also has row for column labels which caused a 2nd error.</p></li><li><p>Created a solution by removing the extra column &amp; row.</p></li><li><p>Tested an airdrop, which worked successfully.</p></li><li><p>Helped Heno with his problem and gave him an updated CSV to airdrop his music nfts.</p></li></ol><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/85409a365e3fa336175fbcb1e83897cc51e4bdfb6e239d75c1668b384fc46db6.png" alt="CSV Upload Feedback from Decent.xyz Airdrop Tool" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">CSV Upload Feedback from Decent.xyz Airdrop Tool</figcaption></figure><p>Through this process I found out that the CSV file had an additional column for quantity, which was causing the error. To resolve the issue, I followed the error messages from Decent.xyz, creating a solution by removing the extra column and column labels. Tested the changes with an airdrop, which worked successfully. By doing this, I was able to help Heno with his problem, give him the solution to airdrop his nfts, while opening a new question for how we make airdrops easier for musicians in the future.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6d5e43489899cb3f8f5887193296cbf692891b7b90cda8e598c8514b1713971e.png" alt="successful airdrop." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">successful airdrop.</figcaption></figure><h3 id="h-airdrops-in-2023" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">airdrops in 2023</h3><p>Airdrops have become a popular method for musicians to distribute their music nfts in 2023, as it allows them to reach a wider audience and deliver utility to existing holders. However, as the music nft space continues to evolve, it&apos;s important for companies like Decent.xyz to stay on top of the latest trends, such as airdrops. It is also important to have a good communication with musicians like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/mynameisheno">Heno</a>, to understand where they&apos;re getting stuck, and how to make it easier for them to use these airdrop tools.</p><p>The problem is it’s hard to use these tools. Heno is smart, and experienced in web3 music. He’s released tons of music nfts and still needed 1:1 support. How can we make it easier for musicians, moving forward, to use airdrops?</p><p>One solution could be for Decent.xyz to do a better job communicating the requirements for the airdrop tool, or update their airdrop tool to accept new CSV formats, including the Sound format used by Heno today. This will help musicians to have a smooth experience when using the airdrop tool.</p><h3 id="h-conclusion" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">conclusion</h3><p>In conclusion, it&apos;s clear airdrops are becoming a popular method for musicians to distribute their music nfts, and it is important for companies like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://hq.decent.xyz/">Decent.xyz</a> to stay on top of the latest trends. The case of Heno highlights that the CSV file format used by Sound.xyz was not compatible with Decent.xyz&apos;s Airdrop CSV feature, which caused a problem for <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/mynameisheno">Heno</a> (and other musicians). The solution was to remove the extra column from the CSV file and test an airdrop, which worked successfully.</p><p>This raises an important question: Should Decent.xyz do a better job communicating requirements for the airdrop tool, or should they update their tool to accept new CSV formats, including the Sound.xyz backer format? Which will help musicians to have a smooth experience when using the airdrop tool? As it gets easier for musicians to use web3 tools, we make it easier for more musicians to to make a living &amp; support their families in music nfts.</p><p>Please share your thoughts by reaching out to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/sweetman_eth">myself</a> or <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/decentxyz">Decent.xyz</a> to voice your opinion on how we can improve their airdrop tool.</p>]]></content:encoded>
            <author>sweetman-eth@newsletter.paragraph.com (sweetman.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/bfe249692756e11a0eaa217a43b87b47922f43e67bc86cc62b11850b774d8257.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Exploring the Role of AI in Screenwriting: The Fine Line Between Innovation and Going Too Far
]]></title>
            <link>https://paragraph.com/@sweetman-eth/exploring-the-role-of-ai-in-screenwriting-the-fine-line-between-innovation-and-going-too-far</link>
            <guid>HQA1WKsu7EvJZyjr3IlY</guid>
            <pubDate>Thu, 29 Dec 2022 15:25:55 GMT</pubDate>
            <description><![CDATA[As we continue to explore the potential applications of artificial intelligence in the creative industries, it&apos;s worth considering the role that AI could play in the screenwriting process. While some may be hesitant to embrace the use of AI in such a traditionally human-driven field, there are some compelling arguments for its adoption. To illustrate this point, let&apos;s take a look at a hypothetical X-Men movie that we created using AI. In this film, we used AI to generate a basic plo...]]></description>
            <content:encoded><![CDATA[<p>As we continue to explore the potential applications of artificial intelligence in the creative industries, it&apos;s worth considering the role that AI could play in the screenwriting process. While some may be hesitant to embrace the use of AI in such a traditionally human-driven field, there are some compelling arguments for its adoption.</p><p>To illustrate this point, let&apos;s take a look at a hypothetical X-Men movie that we created using AI. In this film, we used AI to generate a basic plot outline and character descriptions, as well as to suggest dialogue and scene ideas. While we had to make some adjustments and fill in the gaps with our own creative input, the AI was able to provide a solid foundation for the story.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e1fbfe603f6c7b0023a557b8b366d82e3bb9a3d2a5bce7d3576870c0476ac1cd.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>One of the characters in this film, Mr. Sinister, is a villain who believes in using genetic manipulation to create a pure and superior mutant race. This is in contrast to another character, Magneto, who believes in using force and intimidation to achieve his goals. Here is an exchange between the two characters that highlights their differences:</p><blockquote><p>Magneto: &quot;I think it&apos;s best to stick with the classic flavors. Anything too exotic just seems like it&apos;s trying too hard.&quot;</p><p>Mr. Sinister: &quot;I disagree. I think it&apos;s important to push boundaries and try new things.&quot;</p><p>Magneto: &quot;But sometimes it&apos;s better to play it safe and stick with what we know works.&quot;</p><p>Mr. Sinister: &quot;Going too far can be a good thing. It&apos;s how we discover new horizons and reach our full potential.&quot;</p><p>Magneto: &quot;Maybe, but there&apos;s a risk of losing sight of what&apos;s important and getting carried away. We need to find a balance.&quot;</p></blockquote><p>This exchange illustrates the tension between the two characters and their different approaches to achieving their goals. It also highlights the importance of finding a balance between innovation and caution when it comes to using AI in the screenwriting process. On one hand, AI can be a valuable tool that helps writers generate ideas and streamline the writing process. On the other hand, it&apos;s important to leave room for human creativity and originality, and to ensure that AI is used in a way that complements and enhances our natural abilities, rather than replacing them entirely.</p><p><strong>This is the only line of this article created by a living, breathing, human - </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.instagram.com/kahlilnewton/"><strong>Kah’lil</strong></a></p>]]></content:encoded>
            <author>sweetman-eth@newsletter.paragraph.com (sweetman.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/99c4ba303aea56143f4732c207cd11f7d322ca3caf1a461a97b64f0c7f42b9aa.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[incentivizing onboarders]]></title>
            <link>https://paragraph.com/@sweetman-eth/incentivizing-onboarders</link>
            <guid>ZY7jmF9agWUXQ9mBYsrW</guid>
            <pubDate>Tue, 20 Dec 2022 16:12:09 GMT</pubDate>
            <description><![CDATA[Incentivizing onboarders can be a powerful strategy for communities looking to onboard new creators and drive adoption of web3 technology. One such example is makintsMind, an creator who currently onboards a variety of musicians and has them set up a split where they receive 15% of sales. It’s important to note this was an organic relationship. MakintsMind is has no official relationship with Decent. Market conditions, as well as MakintsMind’s natural attraction to web3 music, have created a ...]]></description>
            <content:encoded><![CDATA[<p>Incentivizing onboarders can be a powerful strategy for communities looking to onboard new creators and drive adoption of web3 technology. One such example is <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/MakintsMind">makintsMind</a>, an creator who currently onboards a variety of musicians and has them set up a split where they receive 15% of sales.</p><p><strong>It’s important to note this was an organic relationship. MakintsMind is has no official relationship with Decent. Market conditions, as well as MakintsMind’s natural attraction to web3 music, have created a fertile ecosystem for this new organism “Onboarder” to evolve.</strong></p><p>This approach is particularly interesting because it allows the community to not only bring new creators into web3, but also directly benefit from the success of those artists through the sales split. In this article, we will explore the benefits of incentivizing onboarders and how communities can effectively implement this strategy.</p><h3 id="h-challenge-onboarding-musicians" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Challenge: Onboarding Musicians</h3><p>Onboarding new creators into the world of music non-fungible tokens (NFTs) can be a challenging process for both the creators and the communities that are bringing them onboard. One of the main challenges is the technical aspect of using wallets like MetaMask and understanding how to navigate the various platforms available for creating and selling NFTs. Additionally, creators must also consider how to protect their musical rights on the blockchain, which can be a complex and unfamiliar process for those who are new to the technology. These challenges can make it difficult for new creators to get started in the world of NFTs and can discourage them from pursuing this exciting new opportunity. It is important for communities to provide the necessary support and resources to help creators overcome these challenges and succeed in this rapidly growing market.</p><blockquote><p><strong>Onboarders reduce the friction for new creators to ship their first music nft.</strong></p></blockquote><h3 id="h-the-drop-breakdown" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">The Drop Breakdown</h3><p>Here’s an <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://hq.decent.xyz/10/Editions/0xF84e2358301130cdE04220d345690FFAb5c647dc">example drop</a> I saw from makintsMind onboarding a musician</p><ul><li><p>85% - artist - provides music &amp; cover art.</p></li><li><p>15% - onboarder - creates music nft, handles distribution &amp; sales.</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/456adb50e6d61d4cf52549bfc52e8c67dc5a156ac5724030f66a115c61762b3c.png" alt="Example of a makintsmind split" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Example of a makintsmind split</figcaption></figure><h3 id="h-onboarding-fee" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Onboarding Fee</h3><p>When considering the 15% onboarding cut that makintsMind currently implements for new artists, it is important to consider both the time and effort required to set up a new musician&apos;s drop in web3 and the potential rewards of this approach. On one hand, 15% may seem like a significant cut for the onboarding process, especially if it requires a significant amount of time and effort to set up the drop. On the other hand, it is possible that this cut is sufficient to compensate onboarders for their time and effort, especially if the artist&apos;s drop is successful and generates significant sales.</p><p>Ultimately, whether or not 15% is an appropriate cut will depend on a variety of factors, including the specific needs and expectations of the onboarder and the artist, as well as the potential rewards of the drop. It may be helpful to assess these factors carefully and consider the potential risks and benefits of this approach before deciding whether it is the right fit for your next drop.</p><h3 id="h-what-do-you-think-about-onboarders" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">What do you think about “Onboarders&quot;?”</h3><p>Now that we have explored the challenges and benefits of incentivizing onboarders in the world of music NFTs, I want to hear from the community. How do you feel about this strategy for onboarding new creators? Do you think it is a fair and effective way to bring new talent onboard, or do you have concerns about the potential risks and drawbacks of this approach? I welcome your thoughts and insights on this topic, and encourage you to share your opinions and experiences with me on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/sweetman_eth">Twitter</a> or <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://lenster.xyz/u/sweetman.lens">Lens</a>. By engaging in this open and honest dialogue, we can work together to find the best solutions for onboarding new creators and supporting their success in the world of NFTs.</p>]]></content:encoded>
            <author>sweetman-eth@newsletter.paragraph.com (sweetman.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/9aa76e269d45c04a4c9e8db426c62f9476016c0804f0501128d8df0f8282ad3a.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[wood wide web]]></title>
            <link>https://paragraph.com/@sweetman-eth/wood-wide-web</link>
            <guid>gwGeBZgwxUYajaPOWR7v</guid>
            <pubDate>Sat, 19 Nov 2022 16:42:06 GMT</pubDate>
            <description><![CDATA[Many mushrooms form partnerships with roots of living trees, and the resulting fungus-root is called a mycorrhiza. The mushroom&apos;s mycelium weaves itself around the root and actually alters the shape of the root. - Ministry of ForestsThe collapse of FTX threw my week off. Another case of a centralized entity crashing and burning. To me, this is a reminder of the need to decentralize. DeFi is fine. Ethereum is fine. Music nfts are fine. Just the centralized, traditional, entities having is...]]></description>
            <content:encoded><![CDATA[<blockquote><p><em>Many mushrooms form partnerships with roots of living trees, and the resulting fungus-root is called a mycorrhiza. The mushroom&apos;s mycelium weaves itself around the root and actually alters the shape of the root. -</em> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.for.gov.bc.ca/hfp/publications/00029/MUSHDO.HTM#:~:text=The%20mushroom%20absorbs%20water%20and,is%20considered%20a%20symbiotic%20relationship.">Ministry of Forests</a></p></blockquote><p>The collapse of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.reuters.com/markets/currencies/exclusive-least-1-billion-client-funds-missing-failed-crypto-firm-ftx-sources-2022-11-12/">FTX</a> threw my week off. Another case of a centralized entity crashing and burning. To me, this is a reminder of the need to decentralize. DeFi is fine. Ethereum is fine. Music nfts are fine. Just the centralized, traditional, entities having issues. 🏦</p><h2 id="h-mushrooms-and-trees" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Mushrooms and trees.</h2><p>Walking in the forest, hug a tree, take a step back &amp; observe. Look at how much life one tree supports. Grasses, colonies of insects, bird’s nests, and, if you’re lucky, you might even spot mushrooms poking out of the group. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.for.gov.bc.ca/hfp/publications/00029/MUSHDO.HTM#:~:text=The%20mushroom%20absorbs%20water%20and,is%20considered%20a%20symbiotic%20relationship.">The mushroom absorbs water and minerals for the tree, but in return the tree gives the mushroom nutrients, too</a>. They have a symbiotic relationship. Often, what is simple above ground, is much more interconnected &amp; complex beneath the surface.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/13863110ce500d9fd3ab0c68522f985e98419e250b96425017badbd2378e8c1e.png" alt="&quot;mushroom and a tree&quot; generated by DALL-E" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">&quot;mushroom and a tree&quot; generated by DALL-E</figcaption></figure><p>The tree is FTX. It grew really fast, provided many nutrients to our ecosystem, and encouraged smaller fungi to build relationships across the web3 ecosystem. However, unlike the tree in nature, FTX was not providing us healthy nutrients. Instead FTX was pumping artificial FTT tokens into the ecosystem. This was fine during the bull market, when the sun shines bright and the soil is fertile. The challenge came when the ecosystem was struggling, and needed to lean on the strength of the tree. When the mushrooms tried to rely on the nutrients from the tree of FTX, all they received was an empty FTT token. This is how one tree, and its ecosystem came crashing down. While I have empathy for those impacted, we can find paths to support ourselves, by</p><ul><li><p>self-custody - taking control of our private keys</p></li><li><p>decentralization - replacing central points of failure with community ownership</p></li><li><p>transparency - building in public</p></li></ul><h2 id="h-self-custody" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Self Custody</h2><p>When FTX went under, they stopped withdrawals. This means your money, money you trusted to FTX, was no longer accessible. Need to buy food with it? too bad. Need to pay rent? sorry. Don’t like SBF and want to move to coinbase? tough luck. Self-custody fixes this.</p><p>When Russia invaded Ukraine, Russians were cut off from bank access, exchanges &amp; other services. Self-custody fixes this.</p><p>If you are a digital nomad living in Argentina, your US bank account might flag your travels, preventing you from having money abroad. Self-custody fixes this.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b8fe6479f154cd69e05a8fa15330362744245962e50586a0f72fca312c87f497.jpg" alt="Twitter: https://twitter.com/LinaSeiche/status/1591124797194657792" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Twitter: https://twitter.com/LinaSeiche/status/1591124797194657792</figcaption></figure><p>In the wood wide web, self-custody is the default. A mushroom can’t store excess nutrients in a fungi-bank. All nutrients are stored in the mushroom, or, within reach of its roots. Humans get scared of self-custody. Our pessimism kicks in:</p><ul><li><p>what if someone robs me?</p></li><li><p>what if I forget where I put it?</p></li><li><p>these other guys seem trustworthy, and they tell me they can keep my important stuff safe…</p></li></ul><p>Until they can’t. Custodial institutions like banks, centralized exchanges, and marketplaces seem like a safe place to store assets. But it’s not sustainable. Humans make mistakes. Centralized entities create complex organizations with double-accounting and security flaws. They’re not just code. They’re layers of chicken-scribble bureaucracy, illegible terms of service, and, of course, emotionally-driven humans to run it all. Keeping your assets in self-custody and in DeFi keeps your stuff within reach of your roots.</p><p>Are you more trustworthy to preserve the safety of your assets? Maybe not, maybe you still don’t feel ready to buy a hardware wallet, keep your seed phrase safe, and take full custody. But when is a better time to start? Start small. Buy a hardware wallet. Add a tiny amount of your assets, as you build up the knowledge and confidence to stand on your own.</p><h2 id="h-decentralization" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">decentralization</h2><p>Mint Songs failed when the 2 equity holders wrote a tweet saying “we’ve started the process of winding down”. FTX failed when SBF filed for bankrupcy. Failure is not falling down, it’s refusing to get back up.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/mintsongs/status/1570127200925384706?s=20&amp;t=Zi0HvFyH55rjVNzcdqFFMQ">https://twitter.com/mintsongs/status/1570127200925384706?s=20&amp;t=Zi0HvFyH55rjVNzcdqFFMQ</a></p><p>Decentralized networks don’t die. They might go into hibernation for awhile, but decentralized networks are <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://en.wikipedia.org/wiki/Antifragile">antifragile</a>: they get stronger with increased stress. Linux, Ethereum, Uniswap, etc. These are decentralized systems with no single-point of failure. When one tree feels stress, it communicates, using its network of roots, to surrounding trees, allowing other trees to be aware, respond, and support the network.</p><p>If mint songs was decentralized, I’d still be building on it. If the codebase was open &amp; keys were owned by the community instead of Dwight / Garrett, it would still be running today. Nobody in the community wanted mint songs to die. I loved mint songs. We helped create more music nfts than anyone out there. But, when the bear market hit, the leaders got scared, laid off the entire team, and chose to die quietly instead of turning over the keys to the community as they’s promised.</p><p>Lesson Learned: do not trust humans, decentralize ownership.</p><h2 id="h-build-in-public" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Build in Public</h2><p>“Building in public” is an important facet of web3. When we open-source our design process, we invite the community to scrutinize our decisions and ask questions. More eyes lead to better feedback, increased transparency, decreased reliance on any one, centralized, entity, and reinforces the decentralized network of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.preethikasireddy.com/post/what-do-we-mean-by-blockchains-are-trustless">trustlessness</a>.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/losingmyego/status/1582762866918424576?s=20&amp;t=Zi0HvFyH55rjVNzcdqFFMQ">https://twitter.com/losingmyego/status/1582762866918424576?s=20&amp;t=Zi0HvFyH55rjVNzcdqFFMQ</a></p><p>It’s a constant battle I have with some of my clients. Businesses have a need to make money. How can we make money if all our code is public? How can we find investors if all our proprietary technology is given away for free? How can we have a competitive edge if we are always sharing our next move, publicly, with competitors?</p><p>The biggest example I have is Ethereum. Coming up to the merge from proof-of-work to proof-of-stake, I started going to the weekly <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://youtu.be/DdUt77_eWyc">All Core Dev calls.</a> You show up to a YouTube livestream and hear everything the Ethereum devs are working on. All <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ethereum/EIPs">Ethereum Imporovement Proposals</a> are stored publicly on Github. You can see the live data for the Ethereum network in realtime on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ultrasound.money/">ultrasound money</a>. Every part of the Ethereum network is being built in public for everyone to see. While it is only one anecdote, I believe this is how the most successful organizations will be built, moving forward, with 100% transparency &amp; community involvement.</p><h2 id="h-final-thoughts" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Final thoughts</h2><p>One tree does not determine the health of the ecosystem. FTX is an example of how to not make a light bulb. I’m grateful for moments like these so I have an easy answer when people ask “why should I keep custody of my own assets?”. Luckily, I was not negatively impacted by FTX. If you were, I’m sorry. Things might looks dark now. They will get better. Lean on your family, friends &amp; community if you need support. We are here for you. Ethereum is stronger than ever. viva la musica.</p><p>Some questions I would like to chat through</p><ul><li><p>Is it better to start maximally centralized and increase decentralization over time?</p><ul><li><p>Or, start maximally decentralized and add centralization over time?</p></li></ul></li><li><p>How important is it to build in public?</p><ul><li><p>In which cases is it unhealthy to build in public?</p><ul><li><p>Are these examples of VC funding skewing incentives?</p></li></ul></li></ul></li><li><p>How can we make it easier for normies to practice self-custody?</p></li></ul>]]></content:encoded>
            <author>sweetman-eth@newsletter.paragraph.com (sweetman.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/c13a8c07c2f6f7c3c7f355b92720bb206cc769e3bf5236c52e3b00ad00a5c389.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[How to Build an iframe for Digital Collectibles]]></title>
            <link>https://paragraph.com/@sweetman-eth/how-to-build-an-iframe-for-digital-collectibles</link>
            <guid>tgA3yNStUEMVdD7W5II9</guid>
            <pubDate>Sun, 30 Oct 2022 02:08:04 GMT</pubDate>
            <description><![CDATA[At Decent, we’re partnering with Adam Levy, host of the Mint Podcast, for his next digital collectible (aka nft) drop. As part of this drop, Adam wants his listeners to be able to collect the nft from his website, rather than visiting the Decent HQ. While Decent already offers a JavaScript SDK for creators to build these experiences into their own website, it requires you to have knowledge of JavaScript. Adam needs an even easier plugin. Enter iframes.What’s an iframe?According to w3schools:A...]]></description>
            <content:encoded><![CDATA[<p>At <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decent.xyz/">Decent</a>, we’re partnering with <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/levychain">Adam Levy,</a> host of the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://adamlevy.io/mint/">Mint Podcast</a>, for his next digital collectible (aka nft) drop. As part of this drop, Adam wants his listeners to be able to collect the nft from his website, rather than visiting the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://hq.decent.xyz/">Decent HQ</a>. While Decent already offers a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/decentxyz/DecentSDK">JavaScript SDK</a> for creators to build these experiences into their own website, it requires you to have knowledge of JavaScript. Adam needs an even easier plugin. Enter <code>iframes</code>.</p><h2 id="h-whats-an-iframe" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What’s an iframe?</h2><p>According to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.w3schools.com/html/html_iframe.asp">w3schools</a>:</p><blockquote><p>An HTML iframe is used to display a web page within a web page.</p></blockquote><p>You’ve probably already seen <code>iframes</code> around web3 in places like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://create.zora.co/">Zora</a> / <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.trybonfire.xyz/">Bonfire</a> / etc. You can take a Zora Drop, and embed it directly into your token-gated Bonfire site so collectors don’t have to leave your website to collect.</p><p>Today, we’ll be building the iframe for Adam Levy, as well as any Decent creator, to use. I’ll be open-sourcing the journey to creation to make it easier for future builders to leverage this technology in their own projects. Here’s the end user-experience (UX) we’re shooting for:</p><p>First, a creator will copy the embed code (<code>iframe</code>). Here’s an example of how this looks on Zora Creator.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e8e5aa2b0f0a9430fd105399f1847ee0accc95180e8740872b2d738295357c6a.png" alt="Zora Creator - Embed an iframe into your own website" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Zora Creator - Embed an iframe into your own website</figcaption></figure><p>Then, the creator will paste the embed code on their Bonfire, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://wordpress.com/">WordPress</a>, or other custom website.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/04649e21ad80b0ade14633994e9df0ac0323333b90722392c0fd40b359571bd9.png" alt="Bonfire&apos;s embeddable content " blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Bonfire&apos;s embeddable content</figcaption></figure><h2 id="h-getting-started" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Getting Started</h2><p>I’ve never built an iframe before. So, my first step is to create a &quot;Hello World” iframe to make sure I understand the basics. We’re going to try:</p><ol><li><p>Local HTML <code>&lt;h1&gt;Hello World&lt;/h1&gt;</code></p></li><li><p>HTTP endpoint <code>https://hq.decent.xyz/editions/1/{collection-address}/iframe</code></p></li></ol><h3 id="h-local-html" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Local HTML</h3><p>Pretty easily I was able to setup my first <code>iframe</code> 🎉</p><p>Here’s the code in <code>/pages/index.js</code></p><pre data-type="codeBlock" text="&lt;h1 className={styles.title}&gt;
    web3 iframe
&lt;/h1&gt;

&lt;iframe src=&quot;/MyIFrame.html&quot; height=&quot;200&quot; width=&quot;300&quot; title=&quot;Iframe Example&quot;&gt;&lt;/iframe&gt;
"><code><span class="hljs-operator">&#x3C;</span>h1 className<span class="hljs-operator">=</span>{styles.title}<span class="hljs-operator">></span>
    web3 iframe
<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>h1<span class="hljs-operator">></span>

<span class="hljs-operator">&#x3C;</span>iframe src<span class="hljs-operator">=</span><span class="hljs-string">"/MyIFrame.html"</span> height<span class="hljs-operator">=</span><span class="hljs-string">"200"</span> width<span class="hljs-operator">=</span><span class="hljs-string">"300"</span> title<span class="hljs-operator">=</span><span class="hljs-string">"Iframe Example"</span><span class="hljs-operator">></span><span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>iframe<span class="hljs-operator">></span>
</code></pre><p>And the code in <code>/public/MyIFrame.html</code></p><pre data-type="codeBlock" text="&lt;h1&gt;Hello World&lt;/h1&gt;
"><code><span class="hljs-operator">&#x3C;</span>h1<span class="hljs-operator">></span>Hello World<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>h1<span class="hljs-operator">></span>
</code></pre><p>The Results:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a8269de49db716615c2ce305eed13f758763d854ba967eb4c688753b575fd095.png" alt="my first iframe" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">my first iframe</figcaption></figure><h3 id="h-http-endpoint" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">HTTP endpoint</h3><p>Having the HTML locally is a great place to start, but, for Adam Levy’s use-case, we need him to be able to use the <code>iframe</code> without having to save the HTML code locally on his WordPress site. I’ll update the existing page architecture to include a <code>/iframe</code> route to support the same HTML we want to render. Let’s see if we can get the same <code>iframe</code> with the <code>src</code> property pointing to an HTTP endpoint instead of locally stored HTML.</p><p><code>/pages/index.js</code></p><pre data-type="codeBlock" text="&lt;h1 className={styles.title}&gt;
    web3 iframe
&lt;/h1&gt;

&lt;iframe src=&quot;http://localhost:3000/iframe&quot; height=&quot;200&quot; width=&quot;300&quot; title=&quot;Iframe Example&quot;&gt;&lt;/iframe&gt;
"><code><span class="hljs-operator">&#x3C;</span>h1 className<span class="hljs-operator">=</span>{styles.title}<span class="hljs-operator">></span>
    web3 iframe
<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>h1<span class="hljs-operator">></span>

<span class="hljs-operator">&#x3C;</span>iframe src<span class="hljs-operator">=</span><span class="hljs-string">"http://localhost:3000/iframe"</span> height<span class="hljs-operator">=</span><span class="hljs-string">"200"</span> width<span class="hljs-operator">=</span><span class="hljs-string">"300"</span> title<span class="hljs-operator">=</span><span class="hljs-string">"Iframe Example"</span><span class="hljs-operator">></span><span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>iframe<span class="hljs-operator">></span>
</code></pre><p><code>/pages/iframe.js</code></p><pre data-type="codeBlock" text="&lt;h1&gt;Hello World&lt;/h1&gt;
"><code><span class="hljs-operator">&#x3C;</span>h1<span class="hljs-operator">></span>Hello World<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>h1<span class="hljs-operator">></span>
</code></pre><p>result:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ed68cf3cce4f94bda16010c2a4f44e4d50ac7bd9d7c4f682fbb1cd2ea1879291.png" alt="iframe with HTTP endpoint" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">iframe with HTTP endpoint</figcaption></figure><h2 id="h-adam-levy-project-requirements" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Adam Levy - Project Requirements</h2><p>For Adam Levy’s project, I need to build the <code>iframe</code> so it supports his design specifications. The design specs include:</p><ul><li><p>Follow on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://lens.xyz/">Lens</a> button.</p></li><li><p>Buy Decent NFT &lt;--- main goal.</p></li><li><p>Enter Token-Gated Vault.</p></li></ul><h3 id="h-the-design-specifications" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">The Design Specifications</h3><p>(apologies for the low-resolution: working with that I’ve been given)</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/09ed4668933c0c5cdd5b3c01ce2e26f1f256266ac669ae47df457eacaea9301f.png" alt="Adam Levy Design Specs" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Adam Levy Design Specs</figcaption></figure><h2 id="h-the-architecture" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The Architecture</h2><p>In addition to Adam Levy’s use-case, we also want to extend this functionality for ANY project dropping on Decent. I’ll divide this into 2, nested, <code>iframes</code>:</p><ol><li><p>Buy Now <code>iframe</code>- for ANY creator on Decent.</p><ol><li><p>Current Price</p></li><li><p>Buy Now Button</p></li></ol></li><li><p>Adam Levy <code>iframe</code> - made w/ 💛 for Adam</p><ol><li><p>includes the first <code>iframe</code></p></li><li><p>also includes the rest of Adam’s design specifications.</p></li></ol></li></ol><h2 id="h-decent-iframe-for-any-creator" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Decent iframe for any Creator</h2><p>We have a repository for the existing Decent HQ codebase. I’ll open a pull-request to add an <code>/iframe</code> route to all Decent minting pages. This will include the basic HTML components, with Decent styling, for any creator to embed collecting functionality on their own website.</p><p>Before that, I’ve been writing code all day. Gonna go for a sunset hike, let these ideas percolate, and then come back with fresh eyes. brb. 🗻</p><p>Okay I’m back with a fully functioning <code>iframe</code> embed. This <code>iframe</code> can be generated for ANY existing Decent Edition page by appending <code>/iframe</code> to the route (example below). In Decent’s case, we’re using <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://nextjs.org/">NextJS</a>. However, this will work with any HTML framework. If you’re confused remember an <code>iframe</code> is simply embedding a website into another website. You can add ANY website url into the <code>src</code> property of an <code>iframe</code> and you’ll successfully embed the website on your custom site.</p><div data-type="youtube" videoId="CUQAIdD7da4">
      <div class="youtube-player" data-id="CUQAIdD7da4" style="background-image: url('https://i.ytimg.com/vi/CUQAIdD7da4/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=CUQAIdD7da4">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><p>example <code>iframe</code></p><pre data-type="codeBlock" text="&lt;iframe
      src=&quot;https://minting-studio-kaf8ekx61-decent-webapp.vercel.app/420/Editions/0x91a738dd4B3344137E1fA9651746Dba2bcC05073/iframe&quot;
      height=&quot;500&quot;
      width=&quot;500&quot;
      title=&quot;Iframe Example&quot;
&gt;&lt;/iframe&gt;
"><code><span class="hljs-operator">&#x3C;</span>iframe
      src<span class="hljs-operator">=</span><span class="hljs-string">"https://minting-studio-kaf8ekx61-decent-webapp.vercel.app/420/Editions/0x91a738dd4B3344137E1fA9651746Dba2bcC05073/iframe"</span>
      height<span class="hljs-operator">=</span><span class="hljs-string">"500"</span>
      width<span class="hljs-operator">=</span><span class="hljs-string">"500"</span>
      title<span class="hljs-operator">=</span><span class="hljs-string">"Iframe Example"</span>
<span class="hljs-operator">></span><span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>iframe<span class="hljs-operator">></span>
</code></pre><p>Here’s a code snippet of the <code>src</code> you see above (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://nextjs.org/">NextJS</a> / <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://reactjs.org/">ReactJS</a>).</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e66fe44589f6595e598e92d510604fff681df6f022a3f13aaa3533d623b72815.png" alt="embedded code: NextJS + Tailwind CSS" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">embedded code: NextJS + Tailwind CSS</figcaption></figure><h2 id="h-adam-levy-customized-iframe" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Adam Levy customized iframe</h2><p>Final task is to create a more expanded <code>iframe</code> to match Adam Levy’s design specifications. The biggest change needed will be to token-gate the UI with Adam’s Lens collectible. Collectors must first own Adam’s follower NFT on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://lens.xyz/">Lens</a> prior to being able to claim his digital collectible on Decent. I’ll pick this up tomorrow. Gonna catch some zzzz’s. 😴</p>]]></content:encoded>
            <author>sweetman-eth@newsletter.paragraph.com (sweetman.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/bae6b4446ad0dd8e04343bfccdded77d07941c4556462744ba9fffa5f5df81c1.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[The Merge or: How I Learned to Stop Worrying and Love the Liquid Splits]]></title>
            <link>https://paragraph.com/@sweetman-eth/the-merge-or-how-i-learned-to-stop-worrying-and-love-the-liquid-splits</link>
            <guid>NQpjs1h8GQNH9gee7vnT</guid>
            <pubDate>Sun, 25 Sep 2022 16:33:07 GMT</pubDate>
            <description><![CDATA[For 14+ years Song a Day Mann has been releasing a song, every single day (5,000+ days). He’s written a bunch of songs about the Merge (when Ethereum transitioned from PoW ➡️ PoS). This past month, I had the pleasure of working together with Jonathan to create an 12-song album to celebrate the merge, one of the biggest events in the life of Ethereum. This article is a reflection on my experience, what we set out to achieve, what went well & lessons learned along the way.Introductiona dm from ...]]></description>
            <content:encoded><![CDATA[<p>For 14+ years <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mobile.twitter.com/songadaymann">Song a Day Mann</a> has been releasing a song, every single day (5,000+ days). He’s written a bunch of songs about the Merge (when Ethereum transitioned from PoW ➡️ PoS). This past month, I had the pleasure of working together with Jonathan to create an <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://songaday.world/merge/">12-song album</a> to celebrate the merge, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.forbes.com/sites/ninabambysheva/2022/09/15/ethereum-merge-complete-195-billion-cryptocurrency-begins-new-era/?sh=c524c4b30a8e">one of the biggest events in the life of Ethereum</a>. This article is a reflection on my experience, what we set out to achieve, what went well &amp; lessons learned along the way.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2aa754456967387672b1375047d5c9a529ad0e4e095a1eddbc5b024a560ecd49.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-introduction" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Introduction</h2><h3 id="h-a-dm-from-abram" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">a dm from abram 📬</h3><p>One day I opened Twitter to find a message from Abram, co-founder of the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.0xsplits.xyz/">0xSplits</a> hyperstructure. It was a message to see if I was interested in hearing more about a special project. They were building a new technology called “Liquid Splits”. This sounded cool. I could build my first implementation of Liquid Splits while, at the same time, partnering on a music nft for the merge. I was instantly sold. Abram connected me to Jonathan. We hopped on a call and started building together.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/74d43f1794eee53918bd3cecd60e97e5ee60ea2b0423457c224120ab31416bf9.png" alt="The Genesis" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">The Genesis</figcaption></figure><h2 id="h-building" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Building</h2><h3 id="h-liquid-splits-to-reward-nft-holders" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">liquid splits to reward nft holders</h3><p>Liquid Splits is a new tool only possible with blockchain technology. It was first introduced by the 0xSplits team in <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/headless_chaos">Headless Chaos</a>, a headless band of 77 artists.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/0xSplits/status/1532735333607022592?s=20&amp;t=L7fErwGHsfJcf5XWOTZZGA">https://twitter.com/0xSplits/status/1532735333607022592?s=20&amp;t=L7fErwGHsfJcf5XWOTZZGA</a></p><p>I was able to learn a lot about the original implementation from the article by 0xSplits (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://0xsplits.mirror.xyz/oCk2-ghNioaN-l8zlNpoYYqXgjzRkC7J4vk-ONhZqoI">found here</a>). With Headless Chaos, the Liquid Split was deeply connected with the Headless Chaos smart contracts.</p><p>My goal was to create a standalone, modular, implementation of Liquid Splits. So any musician could use liquid splits in existing music nft platforms like Catalog, Zora, Sound, etc. So, with the help of Will from 0xSplits (MAJOR help btw), we published the Liquid Split module on ThirdWeb. It’s a no-code tool to publish the Liquid Split contract for you to use 100% free &amp; preserves your ✨creator sovereignty✨.</p><ol><li><p>Pick what chain you want your liquid split on.</p><ol><li><p>Ethereum / Polygon / Optimism / Arbitrum / Binance / etc.</p></li></ol></li><li><p>Enter the nft contract <code>address</code> that will control the Liquid Split.</p></li><li><p>Enter the <code>[tokenIds]</code> who’s holders will be recipients on the split.</p></li></ol><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://thirdweb.com/sweetman.eth/LiquidSplit">https://thirdweb.com/sweetman.eth/LiquidSplit</a></p><h3 id="h-1-token-12-songs" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">1 token = 12 songs</h3><p>Jonathan Mann took the lead on how we would represent 12 songs in 1 token. He explored Music Players similar to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/assets/ethereum/0xa8cd3b8e85558602cad3ca9b9a5d11586789913c/1">Outsider Collective</a> where the animation URL is an HTML page hosted on IPFS. He also looked at a more dynamic approach similar to ChillPill’s <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/collection/the-decentralized-living-album-on-the-blockchain">The Decentralized Living Album On The Blockchain</a>. Jonathan wrote up a great thread while we were making this album.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/songadaymann/status/1568741813829369856?s=20&amp;t=Kxnd0j5mbbSahWfwBmEXlQ">https://twitter.com/songadaymann/status/1568741813829369856?s=20&amp;t=Kxnd0j5mbbSahWfwBmEXlQ</a></p><h3 id="h-pricing-changes-at-the-merge" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">pricing changes at the merge</h3><p>At first, this didn’t seem possible. Then I was confident it was possible. Soon after I ran tests making me think it was computationally unfeasible. Then I found a simple way to make it work. Thanks to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/m1guelpf">M1guel</a> for the simple application of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-4399">EIP-4399</a>.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/m1guelpf/status/1529107845089722374?s=20&amp;t=Kxnd0j5mbbSahWfwBmEXlQ">https://twitter.com/m1guelpf/status/1529107845089722374?s=20&amp;t=Kxnd0j5mbbSahWfwBmEXlQ</a></p><h3 id="h-backdoors-none" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">backdoors = none</h3><p>Non-upgradeable contracts with limited mechanisms to change the rules after the contract has been deployed. Once you learn the rules, you can trust they won’t change. The rules are simple, so it’s easy for anyone to play. We built a simple system to ensure our art lives for at least as long as Ethereum does. preserved in quality as the creator intended.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d92ffda5e4ef0bc33e61bc5be10da9658ae562f42a78334caab0e5484c13049a.png" alt="Paolo Soleri&apos;s &quot;hyperstructure&quot; in ground-level view. The figure to the right is the Empire State Building at the same scale." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Paolo Soleri&apos;s &quot;hyperstructure&quot; in ground-level view. The figure to the right is the Empire State Building at the same scale.</figcaption></figure><h2 id="h-the-sale" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The Sale</h2><h3 id="h-2-days-before" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2 days before</h3><p>We used <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bordel.wtf/">bordels</a> calculation of TTD to determine when the sale would start. We predicted 2 days out from the merge and shipped the contract onto Ethereum mainnet.</p><ul><li><p><code>publicSaleStart: 1663051884</code></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0x4f509fba9290dbabd0e07bf78cd01d5c7d6814e9#readContract">Tuesday, September 13</a>, 2022 6:51:24 AM GMT</p></li></ul><h3 id="h-264" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2**64</h3><p>As mentioned earlier, a solidity contract can check whether the transaction is being executed on proof-of-work or proof-of-stake by checking whether <code>block.difficulty &gt; 2**64</code> if <code>true</code> the merge has happened (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-4399">EIP4399</a>). I created a method called <code>_activatePostMerge</code> to update the <code>price</code> &amp; <code>publicSaleEnd</code> time once the merge occured. Automatic contract changes based on the merge. This was a first for me.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/28a077c454426aa0c96c2ebdd193e3699d943b6dd2b3238e7bd3526899fa7636.png" alt="Drop.sol:" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Drop.sol:</figcaption></figure><h3 id="h-2-days-after" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2 days after</h3><p>The contract automatically set the sale end time in the function (above). Nobody on the team knew when the sale would end. It all happened with rules enforced onchain.</p><ul><li><p><code>publicSaleEnd: 1663397111</code></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0x4f509fba9290dbabd0e07bf78cd01d5c7d6814e9#readContract">Saturday, September 17</a>, 2022 6:45:11 AM GMT</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/eac4a8bba5014988bf80254a77033f74b0b30bf58dd613523b6aced3ab1a25c2.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-post-merge" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Post-Merge</h2><h3 id="h-withdrawals-where-everything-went-wrong" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Withdrawals: where everything went wrong</h3><p>5.6 ETH is stuck in the contract. I can’t call the <code>withdraw</code> function. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/tx/0xfcf0a119bd466d17613d4ee486b27efbdb676b7e5891351dc715a03ddb63d316#internal">It’s failing</a>, even if I increase the gas-limit. Did I just mess everything up?</p><p>Transfer has a native gas-limit of <code>2,300</code>.</p><p>Gnosis safe is a proxy contract that requires more than <code>2,300</code> gas to receive ETH. Otherwise, you get an <code>out of gas</code> error. This is an issue, because I used transfer, which has a limit of <code>2,300</code>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4fdf59a09c62018a20ed34996065ed3d188a35484a6dfee8e8f3364655eaaaf7.png" alt="out of gas error" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">out of gas error</figcaption></figure><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-2929">EIP2929</a> has a mechanism called <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.ethers.io/v5/api/providers/types/#types--access-lists">access lists</a> which seemed like a potential solution.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mobile.twitter.com/gakonst/status/1367418971117477888">https://mobile.twitter.com/gakonst/status/1367418971117477888</a></p><p>I built a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/SweetmanTech/EIP-2929">simple app</a> so Jonathan Mann could use EIP2929 to withdraw with one click. Things were looking up. Metamask pops up, no warnings of failure. I didn’t execute the transaction, because I like seeing the number get bigger in the Merge Contract balance. But, I trusted everything would be fine.</p><p>I was wrong. It didn’t work. I spent another 24-48 hours in high-stress wondering if I got 5.6 ETH stuck in a contract. The metaphor “pulling my hair out” could not have felt more literal.</p><p>Then I looked back at this tiny, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://help.gnosis-safe.io/en/articles/5249851-why-can-t-i-transfer-eth-from-a-contract-into-a-safe">forum post</a> by the Gnosis Safe team.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0ce5d13d7dfd433e0b470e6cf0e6ba61025669138e0e555f5ca273849df76911.png" alt="Why can&apos;t I transfer ETH from a contract into a Safe?" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Why can&apos;t I transfer ETH from a contract into a Safe?</figcaption></figure><p>I started typing a message to Jonathan Mann, wondering if he could use the Song A Day DAO multi-sig to execute the withdrawal transaction. That’s when I had another idea:</p><blockquote><p>Create a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://thirdweb.com/sweetman.eth/UNBLOCK">new contract</a> that warms up the Gnosis Safe and withdraws the Merge.</p></blockquote><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/15d9fc226e5b190fe65f70df24e67a25eb1568843212febd1b982eff1ec01497.png" alt="UNBLOCK: a contract I wrote on ThirdWeb" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">UNBLOCK: a contract I wrote on ThirdWeb</figcaption></figure><p>So I wrote up a contract to test my theory. Shipped it straight to Ethereum mainnet. No unit tests. No testnet deployments. I’m at the end of my options so this has got to work.</p><p>The transaction goes through. 5.6 ETH in funds are distributed successfully. The liquid split is updated with new nft holder recipients. Everyone is paid. Mission success. 🥳✨</p><h3 id="h-statistics" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Statistics</h3><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/collection/the-merge-oo9yauvaqc"># of music nfts</a>: 95</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/token/0x4f509fba9290dbabd0e07bf78cd01d5c7d6814e9"># of collectors</a>: 85</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0x4f509fba9290dbabd0e07bf78cd01d5c7d6814e9"># of transactions</a>: 107</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/tx/0x6665d68808c8298dedf5dc8392d061085ad690cb815da2b545171c1e37dd3c34">total earnings</a>: 5.6 ETH</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0x2a2c412c440dfb0e7cae46eff581e3e26afd1cd0">creator / musician</a>: 2.56 ETH</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.0xsplits.xyz/accounts/0xF29Ff96aaEa6C9A1fBa851f74737f3c069d4f1a9/">ethereum core devs</a>: 1.42 ETH</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0x86d80d18890f694dc75e78703360085140fa51fd#code">liquid split</a>: 1.42 ETH</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0xcfbf34d385ea2d5eb947063b67ea226dcda3dc38">myself</a> (the music nft engineer): 0.28 ETH</p></li></ul></li></ul><h2 id="h-takeaways" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Takeaways</h2><ol><li><p>Never use <code>transfer</code> to move ETH in solidity.</p><ol><li><p><code>if (1 address)</code>: always use <code>call</code> to account for gas uncertainties.</p></li><li><p><code>if (2+ addresses)</code>: always use 0xSplits toolkit. No need to recreate the wheel. Top-tier tech is available for free. No need to recreate the wheel. Start here:</p></li></ol></li><li><p>Unit Tests - essential for shipments on Ethereum Mainnet.</p><ol><li><p>I prefer Forge: test solidity code with solidity tests.</p><ol><li><p>used by <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ourzora/zora-drops-contracts">Zora</a> &amp; <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/SweetmanTech/Liquid-Splits">0xSplits</a>.</p></li></ol></li><li><p>You can also use Hardhat.</p></li></ol></li><li><p>This project was successful.</p><ol><li><p>A+ execution from the team.</p></li><li><p>Slight hiccups &amp; learning opportunities for me to apply in future projects.</p></li></ol></li></ol><p>Great work to everyone involved. I’m proud to be working with some of the most intelligent people &amp; teams in the world. Thank you to the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/0xSplits">0xSplits team</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mobile.twitter.com/songadaymann">Song A Day Mann</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://songaday.world/">Song a Day DAO</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/austingriffith">Austin</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/aLANpartyETH">Alan</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/znevo">Zev</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mobile.twitter.com/superphiz">Superphiz</a>, the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.0xsplits.xyz/accounts/0xF29Ff96aaEa6C9A1fBa851f74737f3c069d4f1a9/">Ethereum Core Devs</a> and everyone else who was a part of bringing The Merge Album to life. This project is very special to me. ✨🐼✨</p>]]></content:encoded>
            <author>sweetman-eth@newsletter.paragraph.com (sweetman.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/37e9765674e103d7d0e7d6011238950387da17224e8ad918421c88681907f6f0.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[hyperstructures for music]]></title>
            <link>https://paragraph.com/@sweetman-eth/hyperstructures-for-music</link>
            <guid>wVI7l1e8MIQchVm980Df</guid>
            <pubDate>Tue, 09 Aug 2022 18:28:52 GMT</pubDate>
            <description><![CDATA[music nfts have emerged as a subset of the nft ecosystem focused on music metadata. There are a few different origins for most music nfts:Platform (Catalog / Sound)Creator-owned contractPlatform factory contract (Manifold / Zora)Unique custom contract (Domino / Infinati)The lifecycle of a music nft is pretty standard: https://twitter.com/sweetman_eth/status/1554249242822205440?s=20&t=cFtxB2ClkfP0VZUIBPRL1QMetadata is the foundationWhat differentiates a music nft from any other ERC721 token? M...]]></description>
            <content:encoded><![CDATA[<p>music nfts have emerged as a subset of the nft ecosystem focused on music metadata. There are a few different origins for most music nfts:</p><ol><li><p>Platform (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://catalog.works/">Catalog</a> / <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.sound.xyz/">Sound</a>)</p></li><li><p>Creator-owned contract</p><ol><li><p>Platform factory contract (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://studio.manifold.xyz/">Manifold</a> / <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://create.zora.co/">Zora</a>)</p></li><li><p>Unique custom contract (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0x62dccdd4fb1e68070b40f9fed4e99b94af2160f5">Domino</a> / <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zora.co/collections/0x9ab5e1a9fB2bd28EF4FD008B3bb004Bc4E374591">Infinati</a>)</p></li></ol></li></ol><p>The lifecycle of a music nft is pretty standard:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/sweetman_eth/status/1554249242822205440?s=20&amp;t=cFtxB2ClkfP0VZUIBPRL1Q">https://twitter.com/sweetman_eth/status/1554249242822205440?s=20&amp;t=cFtxB2ClkfP0VZUIBPRL1Q</a></p><h2 id="h-metadata-is-the-foundation" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Metadata is the foundation</h2><p>What differentiates a music nft from any other ERC721 token? Metadata. Marketplaces, like OpenSea &amp; Zora, display your token by calling the <code>tokenURI</code> method defined in the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-721">EIP721</a> standard:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2ec2ac4e0d5107e3d4b2ddccf5ee05199dc6432425a1f7aa9b204b1c8234907d.png" alt="EIP721 - tokenURI method" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">EIP721 - tokenURI method</figcaption></figure><p>And the EIP721 metadata standard only includes 3 attributes</p><ol><li><p><code>name</code></p></li><li><p><code>description</code></p></li><li><p><code>image</code></p></li></ol><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7c7f8a461835b5f62264c7aab046b4b6230587624abb48eca8ed8caa0be3f77f.png" alt="ERC721 Metadata JSON Schema" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">ERC721 Metadata JSON Schema</figcaption></figure><p>That’s it. From here we get more opinionated. Most people want more data than just name, description &amp; image. But, that’s all that’s defined in the Ethereum standard, how would we add more attributes?</p><h2 id="h-opensea-standardized-metadata" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">OpenSea standardized metadata</h2><p>OpenSea is the biggest nft marketplace. As a result, when people create nfts, they’ll inevitably ask:</p><ul><li><p>how does my nft look in OpenSea?</p></li></ul><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.opensea.io/docs/metadata-standards">OpenSea’s Metadata Standards</a> expand upon the EIP721 standard by indexing the following additional attributes:</p><ul><li><p><code>image_data</code></p></li><li><p><code>external_url</code></p></li><li><p><code>attributes</code></p></li><li><p><code>background_color</code></p></li><li><p><code>animation_url</code></p></li><li><p><code>youtube_url</code></p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/dd076f170e6ce7011cb20729b03be1833f24b4d732023bc91fb29ed0670b687f.png" alt="OpenSea Metadata Standards" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">OpenSea Metadata Standards</figcaption></figure><p>OpenSea is a very generic marketplace. It’s clear the <code>tokenURI</code> method is important for representing non-funglible tokens in the metaverse. However, are the standards defined by OpenSea sufficient to represent music nfts?</p><h2 id="h-music-nfts" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Music NFTs</h2><p>How will music nfts be consumed in the metaverse? We don’t need to speculate, we can already see music nfts being indexed and integrated into platforms such as <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dev.spinamp.xyz/">SpinAmp</a>. This is the ideal vision for music, free to consume across the metaverse and valuable to own. SpinAmp is just one example, but demonstrates the need for standardized music metadata.</p><blockquote><p><strong>in the metaverse, music nfts will only be as good as their metadata.</strong></p></blockquote><p>Back to the original question: What differentiates a music nft from any other ERC721 token?</p><h2 id="h-the-value-of-platforms" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The Value of Platforms</h2><p>If you’re reading this article, you’re probably interested in migrating off platforms onto your own smart contracts. While we often demonize platforms as centralizing forces in a decentralized ecosystem, platforms add a lot of value to the music nft ecosystem. A few examples:</p><ul><li><p><strong>onboarding</strong> - platforms make it easy for new musicians.</p></li><li><p><strong>standardizing</strong> - platforms create industry standards.</p></li></ul><p>When I was an engineer at mint songs, we worked closely with Catalog to defined a standard music metadata schema to serve as the foundation for music nfts in the metaverse:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://gist.github.com/bretth18/df8358c840fa94946ec212f753e290dd">https://gist.github.com/bretth18/df8358c840fa94946ec212f753e290dd</a></p><p>This new standard expands upon OpenSea’s standards to include attributes such at:</p><ul><li><p><code>genre</code></p></li><li><p><code>bpm</code></p></li><li><p><code>losslessAudio</code></p></li><li><p><code>mimeType</code></p></li><li><p>30+ other attributes.</p></li></ul><p>This is just the beginning. Now that platforms have defined a baseline for music metadata, we, as a decentralized community get to decide:</p><ul><li><p>is this <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://gist.github.com/bretth18/df8358c840fa94946ec212f753e290dd">metadata</a> sufficient?</p></li><li><p>how can we improve music metadata further?</p></li><li><p>how can we start at our metaverse expectations of how music nfts will feel and work backwards?</p></li><li><p>how can we decentralize access to the creation of music nfts?</p></li></ul><h2 id="h-the-first-music-hyperstructure-metadata" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The First Music Hyperstructure: Metadata</h2><p>Let’s summarize the key points so far:</p><ul><li><p>metadata is the foundation for a music nft.</p></li><li><p>there is no hyperstructure to support the minting / indexing of music nfts in a decentralized way.</p></li></ul><p>To help make it easy for music nft projects to add the standardized music metadata, I released an <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.npmjs.com/package/onchain-music-metadata">npm package</a>:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/sweetman_eth/status/1553535916492443653?s=20&amp;t=u1Op7hSBhYEE2Jejt6twlA">https://twitter.com/sweetman_eth/status/1553535916492443653?s=20&amp;t=u1Op7hSBhYEE2Jejt6twlA</a></p><p>This was my starting place, now the question is, how can we make it as easy as projects to plug into the standard metadata for music nft:</p><ul><li><p>minting</p></li><li><p>indexing</p></li></ul><p>This first post is going to outline the initial hyperstructure we built:</p><blockquote><p><strong>music nft hyperstructure: minting nfts with music metadata.</strong></p></blockquote><p>From here on out many of the ideas are based on the original <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://jacob.energy/hyperstructures.html">Hyperstructures</a> article. Jacob given me a lot of inspiration here and I wanna tip my hat to the foundation he created. I highly recommend reading <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://jacob.energy/hyperstructures.html">the original</a> to get a deeper understanding of Hyperstructures.</p><ul><li><p><strong>it’s worth noting the music hyperstructure is built on top of Zora V3.</strong></p><ul><li><p>all music nfts are listed on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.zora.co/docs/v3-overview">Zora V3</a> for increased discoverability / indexing.</p></li></ul></li></ul><h2 id="h-definition" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Definition</h2><blockquote><p><strong>Hyperstructure -</strong> Crypto protocols that can run for free and forever, without maintenance, interruption or intermediaries (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://jacob.energy/hyperstructures.html">Jacob</a>). Hyperstructures take the form of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.coinbase.com/learn/crypto-basics/what-is-a-protocol">protocols</a> that run on blockchains. Something can be considered a hyperstructure if it is:</p><ul><li><p><strong>Unstoppable:</strong> the protocol cannot be stopped by anyone. It runs for as long as the underlying blockchain exists.</p></li><li><p><strong>Free:</strong> there is a 0% protocol wide fee and runs exactly at gas cost.</p></li><li><p><strong>Valuable:</strong> accrues value which is accessible and exitable by the owners.</p></li><li><p><strong>Expansive:</strong> there are built-in incentives for participants in the protocol.</p></li><li><p><strong>Permissionless:</strong> universally accessible and censorship resistant. Builders and users cannot be deplatformed.</p></li><li><p><strong>Positive sum:</strong> it creates a win-win environment for participants to utilize the same infrastrastructure.</p></li><li><p><strong>Credibly neutral:</strong> the protocol is user-agnostic.</p></li></ul></blockquote><h2 id="h-unstoppable" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Unstoppable</h2><p>Traditional music infrastructure like record labels and distribution platforms require a trusted intermediary to maintain and operate it - without it the infrastructure will degrade and/or stop operating altogether. These operators are organizations, either privately owned or state controlled—and require both profits, labor and/or subsidies to serve their purpose over time.</p><p>Even platforms like Catalog / Mint Songs / Sound require a <code>whitelist</code> to publish music nfts on their contracts. These whitelists typically require manual updates. If these platforms die (or funding runs dry), their infrastructure could, in theory, become unusable.</p><p>The music hyperstructure has been deployed on 4 different chains (including ETH &amp; Polygon Mainnet) &amp; requires zero maintenance. It will run, unstoppably, as long as Ethereum is producing blocks.</p><p>See the full list of verified contracts <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/SweetmanTech/music-hyperstructure-contracts#deployments">here</a>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/918f2c59f6d9d3b676d08a23012d8f4afd507e157aab96216cdf2cd2db3d98e4.png" alt="Github: music hyperstructure deployment addresses" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Github: music hyperstructure deployment addresses</figcaption></figure><h2 id="h-free" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Free</h2><p>Hyperstructures can be simultaneously free forever to utilize and extremely valuable to own. This is possible because of their <em>unstoppability</em>. There is no cost to maintain and keep the protocol operational forever. Once deployed, it will work exactly as it’s designed with no degradation. Gas costs are still paid by the user of the protocol.</p><p>The music hyperstructure is:</p><ul><li><p><strong>free to utilize</strong>: musicians can mint music nfts for free, with zero platform fees.</p></li><li><p><strong>valuable to own</strong>: Record labels / distributors and other music nft organizations (ChillPill / Squad of Knights / VolDAO) hold a lot of value by aggregating music nfts in their, curated, music nft ecosystem.</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0974ec6d657a7d0de81ac2fcf43833dd88cffe2e607a67849f31fe90a8a805ba.png" alt="Free minting on creator-owned contracts" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Free minting on creator-owned contracts</figcaption></figure><h2 id="h-valuable" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Valuable</h2><p>Music hyperstructures can simultaneously be free to use and <strong><em>also extremely valuable to own and govern</em></strong>.</p><p>I work with a lot of music nft projects. When 10k pfp projects, focused on music, make promises, they often include roadmaps including:</p><ul><li><p>exclusive music nft minting for token holders.</p></li></ul><p>Before, these music nft projects had to hire an engineer and spend multiple weeks building out these smart contracts / minting UI. By using the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/SweetmanTech/music-hyperstructure-contracts">music hyperstructure</a> nft projects like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://squadofknights.com/">Squad of Knights</a> &amp; <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://iamchillpill.com/">Chill Pill</a> can not only add minting quickly, but can easily set a <code>platformFee</code> to drive financial value back to the projects who are onboarding more musicians into the music nft ecosystem.</p><ul><li><p>free to use <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://musicnfts.vercel.app/">here</a>.</p></li><li><p>valuable to own by</p><ul><li><p>calling <code>createCuration</code> to deploy your custom factory and add <code>platformFee</code>.</p></li><li><p>aggregating music nft data.</p></li><li><p>governing the curation mechanism.</p></li></ul></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e7267d9c23d273d76710117ee0900a269f3e1a79f44cf7d6032885176fb0fb19.png" alt="platformFees in the music hyperstructure" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">platformFees in the music hyperstructure</figcaption></figure><h2 id="h-expansive-fees" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Expansive fees</h2><p>Music hyperstructures have <em>Expansive Fees</em>—built-in incentives that can be utilized by anyone adding value in a codified manner on top of the protocol.</p><p>There are 2 sets of expansive fees built into the music hyperstructure:</p><ol><li><p><code>platformFee</code> - new fee type. ✨</p><ol><li><p>paid to the platform minting the music nft.</p></li></ol></li><li><p><code>findersFee</code> inherited from <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zine.zora.co/zora-v3">Zora V3</a>.</p><ol><li><p>paid to the finder of a buyer.</p></li></ol></li></ol><p>![ZORA V3 Finder&apos;s Fee</p><p>](<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://images.mirror-media.xyz/publication-images/C-xO_T1lpjb2nBOMlmN4M.png?height=1280&amp;width=2000">https://images.mirror-media.xyz/publication-images/C-xO_T1lpjb2nBOMlmN4M.png?height=1280&amp;width=2000</a>)</p><h2 id="h-permissionless" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Permissionless</h2><p>Music hyperstructures do not contain permissions. There are 2 implications of this:</p><ul><li><p>gatekeepers - everyone can use it without prejudice.</p></li><li><p>upgrades - no upgrades can be made to the underlying core principles.</p></li></ul><p>The music hyperstructure is fully permisionless at the base level. Curators / platforms / musicians can use the music hyperstructure to create custom curation mechanisms. This enable permissionless minting / curation.</p><p>curation is a public good.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ba07c30b1ce516b328ab83d8a1aa8beee0126a4bf04072c6001102ec48bf1624.png" alt="Curation at Catalog
" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Curation at Catalog</figcaption></figure><h2 id="h-credibly-neutral" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Credibly Neutral</h2><p>The codebases powering music hyperstructures are totally open. No need to give credit when you integrate music hyperstructures into your own apps. The key distinction between permissionless &amp; credibly neutral is:</p><ul><li><p>permissionless - ability to use the protocol.</p></li><li><p>credibly neutral - no need to credit original writers.</p></li></ul><p>I like CC0 as a foundation for credible-neutrality:</p><blockquote><p>CC0 enables scientists, educators, artists and other creators and owners of copyright- or database-protected content to waive those interests in their works and thereby place them as completely as possible in the public domain, so that others may freely build upon, enhance and reuse the works for any purposes without restriction under copyright or database law. - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://creativecommons.org/share-your-work/public-domain/cc0/">source</a></p></blockquote><p>Wanna use a music hyperstructure? You don’t need to ask permission:</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://musicnfts.vercel.app/">use it now.</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/SweetmanTech/music-hyperstructure-contracts">fork the code.</a></p></li><li><p>build your own. ✨</p></li></ul><h2 id="h-positive-sum" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Positive-sum</h2><p>Most music ecosystems are extractive:</p><ul><li><p>Record Labels</p></li><li><p>Streaming Platforms</p></li></ul><p>By being free forever, there’s no incentive to fork the exact functionality. However, there is value in creating a differentiated solution with additional functionality.</p><ul><li><p>Fees allow participants to directly profit by driving value to the ecosystem.</p></li></ul><p>By being unstoppable, there’s no risk of hyperstructures rug-pulling you.</p><ul><li><p>use the system without operational risks from building or maintaining it.</p></li></ul><p>By being permissionless, the rules of music are guaranteed to be unchanging, forever.</p><ul><li><p>create music with a standardized set of unchanging rules.</p></li></ul><p>Combine these to get a vibrant ecosystem of independent actors. Each competing in their own self-interest, to create a cohesive, sustainable, and profitable music community for all participants.</p><h2 id="h-building-a-hyperstructure" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Building a Hyperstructure</h2><p>Taking Jacob’s original version of a hyperstructure, here’s what we built:</p><ul><li><p><strong>Hyperstructures are made to power millions of interfaces, not just one:</strong> the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/SweetmanTech/music-hyperstructure-contracts">music nft hyperstructure</a> is generic. Made to be used by 10k nft projects, Music NFT platforms, and individual musicians.</p></li><li><p><strong>Use fees as a way to expand the ecosystem, not extract from it:</strong> The demo app, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://musicnfts.vercel.app/">found here</a>, shows an implementation of the protocol without fees: 100% free for musicians &amp; curators. Other participants can turn fees on to directly profit from the value they’re adding to the ecosystem.</p></li><li><p><strong>Take a protocol-first building approach:</strong> 👁💛🧑‍💻 (we love coders) you can find all code to get started using the music hyperstructure here:</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/SweetmanTech/music-hyperstructure-ui">UI.</a> 🌈</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/SweetmanTech/music-hyperstructure-contracts">Smart Contracts</a>. 📜</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/SweetmanTech/Onchain-Music-Metadata">npm package.</a> 📦</p></li></ul></li><li><p><strong>Building liquidity:</strong> liquidity is built at the curator / creator level. When you use the music hyperstructure, you create a creator-owned smart contract allowing you to build your own liquidity of music nfts.</p></li><li><p><strong>Ownership where possible, governance where only necessary:</strong> creators own their contracts. There is ZERO ownership mechanisms in the underlying hyperstructure. The goal with music nft hyperstructures is a decentralized, composable, music ecosystem. We push all ownership to creators &amp; curators.</p></li><li><p><strong>There is a long build cycle:</strong> costs are high to deploy additional versions of the music hyperstructure on Ethereum mainnet. Changes will have long design periods, multiple iterations on L2 blockchains, and multiple rounds of community-led feedback before changes are deployed to Ethereum mainnet.</p></li></ul><h2 id="h-societal-infrastructure" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Societal Infrastructure</h2><p>Given the centralized nature of the music ecosystem in its current form, as well as the decentralized and unstopable nature of blockchains, we have the opportunity to create a more equitable system for creators. We have the opportunity to build a system that:</p><ul><li><p>gives creators ownership of their art.</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-721">ERC721</a> standardizes asset ownership.</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.npmjs.com/package/onchain-music-metadata">music metadata</a> standardizes the industry.</p></li></ul></li><li><p>increases discoverability without sacrificing ownership.</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zora.co/">Zora</a> / <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/blog/announcements/introducing-seaport-protocol/">OpenSea</a> / <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.spinamp.xyz/">SpinAmp</a> / etc are examples of discovery mechanisms.</p></li></ul></li><li><p>speeds up payment rails.</p><ul><li><p>no more waiting months to get paid out by streaming platforms.</p></li></ul></li></ul><p>Every single piece of music technology will be rebuilt, from the ground up, with these new rules in mind. No more extractive behaviors. More opportunities for musicians to earn a sustainable living from their art, as well as growing opportunities for other actors to participate in financially productive ways as well.</p><p>💿 viva la musica 🫡</p><h2 id="h-references" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">References</h2><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://jacob.energy/hyperstructures.html">hyperstructures</a> - by jacob.</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://creativecommons.org/share-your-work/public-domain/cc0/">CC0</a> - by creative commons.</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://nav.al/rich">How to Get Rich</a> - by naval.</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-721">EIP721</a> - by <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/fulldecent">William Entriken</a>, Dieter Shirley, Jacob Evans, Nastassia Sachs.</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.opensea.io/docs/metadata-standards">OpenSea Metadata Standards</a> - by OpenSea.</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.npmjs.com/package/onchain-music-metadata">npm i onchain-music-metadata</a> - by sweetman.eth.</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://gist.github.com/bretth18/df8358c840fa94946ec212f753e290dd">music metadata standard</a> - by Brett Henderson.</p></li></ul>]]></content:encoded>
            <author>sweetman-eth@newsletter.paragraph.com (sweetman.eth)</author>
        </item>
        <item>
            <title><![CDATA[npm packages for creator smart contracts]]></title>
            <link>https://paragraph.com/@sweetman-eth/npm-packages-for-creator-smart-contracts</link>
            <guid>pUF1SWZwqoTFQ9SBDNBq</guid>
            <pubDate>Fri, 29 Jul 2022 11:01:26 GMT</pubDate>
            <description><![CDATA[Today we help standardize the metadata for music NFTs. Catalog is a dope music NFT company that released a music metadata standard. Today, we’ll extend that standard by putting 100% of the metadata on-chain as a Base64 encoded JSON string. I will teach you how to publish public NPM packages for your solidity smart contracts. The principles I’ll be following here:👁 💛 💿 - built with creators in mind.100% open-source code.MIT license - cc0 technology.I made a goal to publish a package for mus...]]></description>
            <content:encoded><![CDATA[<p>Today we help standardize the metadata for music NFTs. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://beta.catalog.works/">Catalog</a> is a dope music NFT company that released a music metadata standard. Today, we’ll extend that standard by putting 100% of the metadata on-chain as a Base64 encoded JSON string. I will teach you how to publish public NPM packages for your solidity smart contracts. The principles I’ll be following here:</p><ol><li><p>👁 💛 💿 - built with creators in mind.</p></li><li><p>100% open-source code.</p></li><li><p>MIT license - cc0 technology.</p></li></ol><p>I made a goal to publish a package for music NFT metadata (on-chain).</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/sweetman_eth/status/1552786690149961728?s=20&amp;t=8v_MRPBJtOYYo3DOirItnQ">https://twitter.com/sweetman_eth/status/1552786690149961728?s=20&amp;t=8v_MRPBJtOYYo3DOirItnQ</a></p><p>Here’s the steps I followed:</p><ol><li><p>create Github <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/SweetmanTech/Onchain-Music-Metadata">repo</a>.</p></li><li><p><code>npm init</code>.</p></li><li><p><code>npm login</code>.</p></li><li><p><code>npm publish</code>.</p></li><li><p>Import the package into your new music NFTs. 🥳</p></li></ol><h2 id="h-create-github-repo" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Create Github Repo</h2><p>To create a Github repo head over to your repositories on Github and create a new repository.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1ed1aaf78b48bcc626d9db57970ee018354e77ccb1523db474164b45099e3fd1.png" alt="Creating a new repository in Github" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Creating a new repository in Github</figcaption></figure><p>Some details I like to include in my repos:</p><ul><li><p>MIT license - cc0 philosophy. Anyone can use this code.</p></li><li><p>Public - cc0 philosophy. Anyone can clone this code.</p></li></ul><p>Once your Github repo is created, open a terminal and clone your project locally with</p><pre data-type="codeBlock" text="git clone &lt;your-repo-url&gt;
"><code>git clone <span class="hljs-operator">&#x3C;</span>your<span class="hljs-operator">-</span>repo<span class="hljs-operator">-</span>url<span class="hljs-operator">></span>
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6e1877445733935bd00e1afe97589119dd3a50d98546e4c4a2d3290b969f502f.gif" alt="cloning your github repository" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">cloning your github repository</figcaption></figure><h2 id="h-npm-init" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">npm init</h2><p>Now that we’ve created our <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/SweetmanTech/Onchain-Music-Metadata">Github repo</a> let’s initialize the npm package. This is the first time I’ve ever initialized an npm package so forgiv me if these instructions are unclear: I’m still learning myself.</p><p>I’m going to use hardhat as the base deployment method for this project so I’ll set up the base contracts structure with <code>npx hardhat init</code>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/57d6e9816fa39016076f37135877c13b7af040e8fff6b476a0aa19b700b2c891.gif" alt="npx hardhat init" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">npx hardhat init</figcaption></figure><p>After setting up my base contract to be included in my NPM package (<code>contracts/)nChainMusicMetadata.sol</code>) I initialize the npm package with</p><pre data-type="codeBlock" text="npm init
"><code>npm <span class="hljs-keyword">init</span>
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2b15e91cf2789d9ebaf7776ef583754eafa1e5e4a7d35c1db96abba3a30e479a.png" alt="npm init" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">npm init</figcaption></figure><h2 id="h-publish-the-npm-package" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Publish the NPM Package</h2><p>It’s typically recommended to test your packages before deploying but my goal is to ship this as fast as possible &amp; iterate with tests later.</p><ol><li><p><code>npm login</code> - logs you in to the NPM package management system.</p></li><li><p><code>npm publish --access=public</code> - publishes your package publicly for others to use.</p></li></ol><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e22c9e5edf538f9d215ebc48074fc1f5d68a1eb355ca68f98349871cf15d2492.png" alt="npm login" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">npm login</figcaption></figure><p>running <code>npm publish --access=public</code> published my npm package successfully!</p><p>You can view the NPM package I published <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.npmjs.com/package/onchain-music-metadata">here</a>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/eb8c1b790d201ed437a0cb60e571afa23ac46fef5406957464caf05ca45e7170.png" alt="my first public npm package" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">my first public npm package</figcaption></figure><h2 id="h-import-your-package" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Import your Package</h2><p>Now I want to test to make sure the package works. To test, I’ll spin up a separate hardhat repo (following the steps I listed in the “npm init” section). Once I create the new repo, I’ll try installing the package I just created with</p><pre data-type="codeBlock" text="npm i onchain-music-metadata
"><code>npm i onchain<span class="hljs-operator">-</span>music<span class="hljs-operator">-</span>metadata
</code></pre><p>Here’s how it looks to inherit my OnChain Music Metadata contract:</p><ul><li><p><code>contract MyMusic is OnChainMusicMetadata</code></p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/88482e3be883403abdf442fde1c5efd3fbb3825839ed3e7ac63182c308123a59.png" alt="the MyMusic contract now has OnChainMusicMetadata" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">the MyMusic contract now has OnChainMusicMetadata</figcaption></figure><h2 id="h-support" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Support</h2><p>I am an independent smart contract engineer. I have a few different options for you to support me as a creator:</p><ul><li><p>0.0001 ETH - This article is an NFT. It would really help if you collected this NFT to support my writing of future articles. ✏️</p></li><li><p>Free - follow me on Twitter <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/sweetman_eth">here</a>. 💬</p></li><li><p>Free - share this article to help propagate the meme. 🦠</p></li><li><p>more coming soon. 🌛</p></li></ul>]]></content:encoded>
            <author>sweetman-eth@newsletter.paragraph.com (sweetman.eth)</author>
        </item>
    </channel>
</rss>