<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Spatializes]]></title><description><![CDATA[crypto gaming, web3, AR, nfts]]></description><link>https://www.spatializes.com</link><image><url>https://substackcdn.com/image/fetch/$s_!Ff6L!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbdb5a2c-35fb-40d2-9ea0-58c934090f73_350x350.png</url><title>Spatializes</title><link>https://www.spatializes.com</link></image><generator>Substack</generator><lastBuildDate>Sun, 19 Apr 2026 00:46:19 GMT</lastBuildDate><atom:link href="https://www.spatializes.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[spatialize.eth]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[spatializes@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[spatializes@substack.com]]></itunes:email><itunes:name><![CDATA[spat.eth]]></itunes:name></itunes:owner><itunes:author><![CDATA[spat.eth]]></itunes:author><googleplay:owner><![CDATA[spatializes@substack.com]]></googleplay:owner><googleplay:email><![CDATA[spatializes@substack.com]]></googleplay:email><googleplay:author><![CDATA[spat.eth]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Hacking on Farcaster Frames]]></title><description><![CDATA[A little micro app right in your feed - hacking with ATX DAO!]]></description><link>https://www.spatializes.com/p/hacking-on-farcaster-frames</link><guid isPermaLink="false">https://www.spatializes.com/p/hacking-on-farcaster-frames</guid><dc:creator><![CDATA[spat.eth]]></dc:creator><pubDate>Thu, 01 Feb 2024 21:06:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!useD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b0c056-10bc-4975-8b7c-d4e7e1de3bed_2424x1778.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Getting started with your first Frame? Here&#8217;s all the info you need to get rolling.</p><p>I&#8217;ll be building a Frame to airdrop tokens, but for now lets get started with the basics. The code is all posted <a href="https://github.com/spatializes/frame-airdrop">here on GitHub</a> if you want to follow along.</p><p>Farcaster frames were released just last week in <a href="https://warpcast.com/v/0x5236071b">Farcaster&#8217;s Feature Friday</a>. A bunch have been built already, check out the list below the see some examples. Here&#8217;s a Nouns frame where you can see the current Noun up for auction and bid. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!useD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b0c056-10bc-4975-8b7c-d4e7e1de3bed_2424x1778.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!useD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b0c056-10bc-4975-8b7c-d4e7e1de3bed_2424x1778.png 424w, https://substackcdn.com/image/fetch/$s_!useD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b0c056-10bc-4975-8b7c-d4e7e1de3bed_2424x1778.png 848w, https://substackcdn.com/image/fetch/$s_!useD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b0c056-10bc-4975-8b7c-d4e7e1de3bed_2424x1778.png 1272w, https://substackcdn.com/image/fetch/$s_!useD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b0c056-10bc-4975-8b7c-d4e7e1de3bed_2424x1778.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!useD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b0c056-10bc-4975-8b7c-d4e7e1de3bed_2424x1778.png" width="1456" height="1068" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d8b0c056-10bc-4975-8b7c-d4e7e1de3bed_2424x1778.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1068,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1488309,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!useD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b0c056-10bc-4975-8b7c-d4e7e1de3bed_2424x1778.png 424w, https://substackcdn.com/image/fetch/$s_!useD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b0c056-10bc-4975-8b7c-d4e7e1de3bed_2424x1778.png 848w, https://substackcdn.com/image/fetch/$s_!useD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b0c056-10bc-4975-8b7c-d4e7e1de3bed_2424x1778.png 1272w, https://substackcdn.com/image/fetch/$s_!useD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b0c056-10bc-4975-8b7c-d4e7e1de3bed_2424x1778.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>So what is a Farcaster Frame? It&#8217;s a little app in your feed. They&#8217;re very simple at this point, an image with a few buttons. Click a button and get a callback to update the image. But the best part? The simplicity of building one!</p><h2>Frame dev</h2><p>Frames are based on the <a href="https://ogp.me/">OpenGraph standard</a>, the thing that enables link previews in social feeds. So we&#8217;re really just working with a fancy link preview! Genius idea by the Farcaster team. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!URmx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7aecf9c6-8652-4c1e-85e0-b5d2f8c53865_1144x1376.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!URmx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7aecf9c6-8652-4c1e-85e0-b5d2f8c53865_1144x1376.png 424w, https://substackcdn.com/image/fetch/$s_!URmx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7aecf9c6-8652-4c1e-85e0-b5d2f8c53865_1144x1376.png 848w, https://substackcdn.com/image/fetch/$s_!URmx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7aecf9c6-8652-4c1e-85e0-b5d2f8c53865_1144x1376.png 1272w, https://substackcdn.com/image/fetch/$s_!URmx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7aecf9c6-8652-4c1e-85e0-b5d2f8c53865_1144x1376.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!URmx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7aecf9c6-8652-4c1e-85e0-b5d2f8c53865_1144x1376.png" width="1144" height="1376" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7aecf9c6-8652-4c1e-85e0-b5d2f8c53865_1144x1376.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1376,&quot;width&quot;:1144,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:666162,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!URmx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7aecf9c6-8652-4c1e-85e0-b5d2f8c53865_1144x1376.png 424w, https://substackcdn.com/image/fetch/$s_!URmx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7aecf9c6-8652-4c1e-85e0-b5d2f8c53865_1144x1376.png 848w, https://substackcdn.com/image/fetch/$s_!URmx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7aecf9c6-8652-4c1e-85e0-b5d2f8c53865_1144x1376.png 1272w, https://substackcdn.com/image/fetch/$s_!URmx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7aecf9c6-8652-4c1e-85e0-b5d2f8c53865_1144x1376.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>But instead of only the image, description, and title, we bring in a few extra tags. Let&#8217;s see the core basics of a Frame in a NextJS app. Throw this into your <code>page.tsx</code> and deploy it to Vercel.</p><pre><code><code>import { Metadata } from "next";

const frameMetadata = {
  "fc:frame": "vNext",
  "fc:frame:image": "https://blocklive.io/util/logo.png",
  "fc:frame:button:1": "$ETH",
  "fc:frame:button:2": "$BTC",
};

export const metadata: Metadata = {
  title: "Frame Airdrop",
  description: "Generated by create next app",
  other: {
    ...frameMetadata,
  },
};

export default function Home() {
  return (
    &lt;&gt;
      &lt;main&gt;Frame Airdrop!&lt;/main&gt;
    &lt;/&gt;
  );
}</code></code></pre><p>Head over to the <a href="https://warpcast.com/~/developers/frames">Frame Validator</a> with your Vercel link and run it!</p><p>We have a frame!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2oW3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd401dea6-d0a0-4dac-a9c7-6b10796357b9_1828x1808.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2oW3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd401dea6-d0a0-4dac-a9c7-6b10796357b9_1828x1808.png 424w, https://substackcdn.com/image/fetch/$s_!2oW3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd401dea6-d0a0-4dac-a9c7-6b10796357b9_1828x1808.png 848w, https://substackcdn.com/image/fetch/$s_!2oW3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd401dea6-d0a0-4dac-a9c7-6b10796357b9_1828x1808.png 1272w, https://substackcdn.com/image/fetch/$s_!2oW3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd401dea6-d0a0-4dac-a9c7-6b10796357b9_1828x1808.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2oW3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd401dea6-d0a0-4dac-a9c7-6b10796357b9_1828x1808.png" width="1456" height="1440" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d401dea6-d0a0-4dac-a9c7-6b10796357b9_1828x1808.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1440,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:930294,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2oW3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd401dea6-d0a0-4dac-a9c7-6b10796357b9_1828x1808.png 424w, https://substackcdn.com/image/fetch/$s_!2oW3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd401dea6-d0a0-4dac-a9c7-6b10796357b9_1828x1808.png 848w, https://substackcdn.com/image/fetch/$s_!2oW3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd401dea6-d0a0-4dac-a9c7-6b10796357b9_1828x1808.png 1272w, https://substackcdn.com/image/fetch/$s_!2oW3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd401dea6-d0a0-4dac-a9c7-6b10796357b9_1828x1808.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Now the buttons don&#8217;t do anything. Let&#8217;s hook them up. This will be as easy as creating an API route in our NextJS and and returning a new HTML response on button click. Add a route at <code>app/api/frame</code> called <code>route.ts</code></p><pre><code>import { NextRequest, NextResponse } from "next/server";

const POST_URL = "https://frame-airdrop.vercel.app/api/frame";

export async function POST(req: NextRequest, res: NextResponse) {

  const NEW_IMAGE_URLimage =
    "https://assets.blocklive.io/events/2bfb5de2-cd38-49d5-bb3b-1834dfc66380/58662d9d-303b-4c72-b3cd-92207ca8b91b_dall_e_2024_01_28_23_08_18___design_a_banner_image__size_936px_x_468px__that_looks_like_an_entrance_ticket_to_an_event_for_the__frames__feature_on_a_social_media_platform_resembli.png";

  let html =
    `&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;` +
    `&lt;meta property="fc:frame" content="vNext" /&gt;` +
    `&lt;meta property="fc:frame:image" content="${NEW_IMAGE_URLimage}" /&gt;` +
    `&lt;meta property="fc:frame:button:1" content="$DOGE" /&gt;` +
    `&lt;meta property="fc:frame:button:2" content="$SOL" /&gt;` +
    `&lt;meta property="fc:frame:post_url" content="${POST_URL}" /&gt;` +
    `&lt;/head&gt;&lt;/html&gt;`;

  return new Response(html, { headers: { "Content-Type": "text/html" } });
}

export const dynamic = "force-dynamic";
</code></pre><p>Checkout the repo where we do some fancy validation to ensure the button click comes from our Frame and take action based on which button is clicked. This just returns a new image and button set to get you across the line.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6iW2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F381ce6e2-9c23-4a02-a6a9-8dada608c0e4_623x400.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6iW2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F381ce6e2-9c23-4a02-a6a9-8dada608c0e4_623x400.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6iW2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F381ce6e2-9c23-4a02-a6a9-8dada608c0e4_623x400.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6iW2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F381ce6e2-9c23-4a02-a6a9-8dada608c0e4_623x400.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6iW2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F381ce6e2-9c23-4a02-a6a9-8dada608c0e4_623x400.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6iW2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F381ce6e2-9c23-4a02-a6a9-8dada608c0e4_623x400.jpeg" width="623" height="400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/381ce6e2-9c23-4a02-a6a9-8dada608c0e4_623x400.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:623,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Cast image embed&quot;,&quot;title&quot;:&quot;Cast image embed&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Cast image embed" title="Cast image embed" srcset="https://substackcdn.com/image/fetch/$s_!6iW2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F381ce6e2-9c23-4a02-a6a9-8dada608c0e4_623x400.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6iW2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F381ce6e2-9c23-4a02-a6a9-8dada608c0e4_623x400.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6iW2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F381ce6e2-9c23-4a02-a6a9-8dada608c0e4_623x400.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6iW2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F381ce6e2-9c23-4a02-a6a9-8dada608c0e4_623x400.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>Helpers</h2><p><a href="https://warpcast.com/~/developers/embeds">Embed validator</a></p><p><a href="https://warpcast.com/~/developers/frames">Frame validator</a></p><p><a href="https://warpcast.com/~/trending-frames">Trending frames</a></p><p><a href="https://warpcast.notion.site/Farcaster-Frames-4bd47fe97dc74a42a48d3a234636d8c5">Farcaster Frames spec</a></p><p><a href="https://warpcast.com/kristof/0x50c3619a">Pimlico sponsored gas for frames</a></p><p><a href="https://github.com/davidfurlong/awesome-frames?tab=readme-ov-file">Awesome Frames (big list of Frame resources)</a></p><p></p><h2>Examples In The Wild</h2><p><a href="https://warpcast.com/seangeng/0xedb2a886">Adventure game</a></p><p><a href="https://warpcast.com/spencerperkins.eth/0x72cbe323">Noun auction view</a></p><p><a href="https://warpcast.com/fiveoutofnine.eth/0x1801f517">Chess</a></p><p><a href="https://warpcast.com/arunank/0x5e69fc49">Job application</a></p><p><a href="https://warpcast.com/jtgi/0xa1dba5ec">Token gated poll</a></p><p><a href="https://warpcast.com/cameron/0x3a04823b">Linktree</a></p><p><a href="https://warpcast.com/six/0xe29345ce">Scavenger hunt</a></p><p><a href="https://warpcast.com/base/0xb348d344">Base mint for physical claim</a></p><p><a href="https://warpcast.com/saihaj/0xa583da58">Song mint</a></p><p><a href="https://warpcast.com/bchow/0xe7fb784f">Generative art mint</a></p><p><a href="https://warpcast.com/haardikkk/0x28f4237d">Token faucet</a></p><p><a href="https://warpcast.com/andreih/0xd06fdc81">Rewardable quiz</a></p><p><a href="https://warpcast.com/perl/0x3d583f63">Prediction game</a></p><p></p><h2>Example Code</h2><p>https://warpcast.notion.site/Farcaster-Frames-4bd47fe97dc74a42a48d3a234636d8c5</p><p>https://github.com/farcasterxyz/fc-polls/blob/main/app/polls/%5Bid%5D/page.tsx</p><p></p><h2>Hackathon Ideas</h2><ul><li><p>Powerball for Farcasters</p></li><li><p>One-click checkouts</p></li><li><p>Prediction markets from Polymarket</p></li><li><p>Governance voting</p></li><li><p>Show the user&#8217;s connected wallet address</p></li><li><p>Meme bot</p><p></p></li></ul><h2>$$$</h2><p><a href="https://www.bountycaster.xyz/?tag=tag-frames">Bountycaster</a></p><p><a href="https://warpcast.com/brunny/0xf1906737">Aztec is doing $25,000 in bounties for the top 5 Farcaster applications (frames or otherwise) built using Noir</a></p><p></p><p>In Austin? Stop by for our <a href="https://blocklive.io/event/atx-frames-hackathon">Farcaster Frames Hackathon on Blocklive</a> hosted by <a href="https://citydao.network">citydao.network</a>, <a href="http://base.org">Base</a>, and <a href="https://www.atxdao.com/">ATX DAO</a>. Follow me on <a href="https://x.com/spatializes">X</a> and <a href="https://warpcast.com/spatializes">Farcaster</a>!</p><p></p><p></p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[First Time Experience Joining and Gaming with Cyberkongz Play & Kollect]]></title><description><![CDATA[We've discussed Cyberkongz in previous posts here, diving into smart contracts and metaverse concepts, because Cyberkongz is the OG PFP and VX project.]]></description><link>https://www.spatializes.com/p/first-time-experience-joining-and</link><guid isPermaLink="false">https://www.spatializes.com/p/first-time-experience-joining-and</guid><dc:creator><![CDATA[spat.eth]]></dc:creator><pubDate>Tue, 10 May 2022 18:27:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!H0v1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4c0ef6-e0bc-4024-a7d5-a0b42a83bd05_1340x636.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We've discussed Cyberkongz in previous posts here, diving into smart contracts and metaverse concepts, because Cyberkongz is the OG PFP and VX project. So of course, they are also leading the way in pure on-chain gaming.</p><p>At a high level for Play &amp; Kollect, holders of the Cyberkongz VX NFT collection play text-based games to collect a variety of tokens and NFTs. Gaming is done on the Polygon network.</p><p>How does it really work?</p><h1>1. Buy a Cyberkongz VX</h1><p>To play, I needed to acquire 1 Cyberkongz VX NFT. These are currently trading at a ~0.9 eth floor. </p><h1>2. Deposit the Cyberkongz VX to Polygon</h1><p>Once we have the NFT, all gaming is done on the Cyberkongz website. Go to the website, and deposit the Cyberkongz VX onto the Polygon network. </p><p>Do this by clicking on the 'Jungle' tab in the top menu. On the map, click the 'Polygon Bridge' icon. </p><p>This took two transactions ($5 and $20 with gas at 30gwei). At the cost of a traditional PC game, this is not cheap to get started playing. Though at a 1.1 eth entry point ($3.3k), this is no kid&#8217;s game! Maybe someday, although gas at today's 30gwei is the lowest we've seen all year. 2021 had us at 100+ gwei for the majority of the year. </p><p>Now that my Cyberkongz VX is locked, one step closer to Adventure. Interesting to note, when we look at our OpenSea profile, the VX is still in our wallet but it's technically on the Polygon network now, not Ethereum L1. When I search for my VX in the CyberKongz VX collection, it was no longer owned by me! It's now owned by a shared wallet (0xE6F45376f64e1F568BD1404C155e5fFD2F80F7AD) which owns a huge pile of other Kongz and Kongz accessories. So I own the corresponding VX now in a separate VX Polygon collection. Under the hood, what happened? A new NFT was minted on Polygon. I transferred my mainnet NFT to Cyberkongz. I was airdropped this Polygon representation, which trades at about the same floor price.</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!H0v1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4c0ef6-e0bc-4024-a7d5-a0b42a83bd05_1340x636.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H0v1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4c0ef6-e0bc-4024-a7d5-a0b42a83bd05_1340x636.png 424w, https://substackcdn.com/image/fetch/$s_!H0v1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4c0ef6-e0bc-4024-a7d5-a0b42a83bd05_1340x636.png 848w, https://substackcdn.com/image/fetch/$s_!H0v1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4c0ef6-e0bc-4024-a7d5-a0b42a83bd05_1340x636.png 1272w, https://substackcdn.com/image/fetch/$s_!H0v1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4c0ef6-e0bc-4024-a7d5-a0b42a83bd05_1340x636.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H0v1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4c0ef6-e0bc-4024-a7d5-a0b42a83bd05_1340x636.png" width="1340" height="636" data-attrs="{&quot;src&quot;:&quot;https://substackcdn.com/image/fetch/w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4c0ef6-e0bc-4024-a7d5-a0b42a83bd05_1340x636.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:636,&quot;width&quot;:1340,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:249131,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!H0v1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4c0ef6-e0bc-4024-a7d5-a0b42a83bd05_1340x636.png 424w, https://substackcdn.com/image/fetch/$s_!H0v1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4c0ef6-e0bc-4024-a7d5-a0b42a83bd05_1340x636.png 848w, https://substackcdn.com/image/fetch/$s_!H0v1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4c0ef6-e0bc-4024-a7d5-a0b42a83bd05_1340x636.png 1272w, https://substackcdn.com/image/fetch/$s_!H0v1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4c0ef6-e0bc-4024-a7d5-a0b42a83bd05_1340x636.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Airdropped when you bridge your eth mainnet Kong to Polygon.</figcaption></figure></div><p></p><h1>3. Build your crew</h1><p>Head back to the Jungle tab. Click on the MS Kongz ship icon.</p><p>Switch to the Polygon network. Create a crew. I tried this right after Depositing my VX and it wasn't available yet. The <a href="https://docs.cyberkongz.com/">docs</a> say it will take 7-30 minutes to show up on Polygon. After 25 minutes, the VX has landed.</p><p>Add the VX and click Create Crew! Ooh! I have 0 MATIC. Head over to the Cyberkongz Discord, in the polygon-faucet channel, type !faucet, and get 2.2 Polygon. Very convenient. Otherwise, I'd be headed to a dex to swap for MATIC. </p><p>Send a DM to tip.cc, and say <code>$withdraw matic</code>. </p><p>Type in your Polygon address (same as the ethereum address you had your VX in). </p><p>Type all and confirm, boom we've got Matic to play with.</p><p>Now we click Create Crew and for only 0.01 Matic we make the transaction. Ok, now compared to our $25 spend on eth transactions, it makes a lot of sense why we'd want to be on the Polygon network.</p><p>Our 1 man crew is ready for adventures!</p><h1>4. Adventure!</h1><p>We still don't have any banana or fuel rods though. $BANANA we'll never get, unless we buy some. $BANANA is only accumulated, 10 per day, by a genesis kong. The floor for a genesis is a mere 47eth. Lower than I've seen in the past at 100+, but still out of our budget. But we will acquire 1 fuel rod per day our VX is locked up in the Polygon Deposit. It looks to accumulate over 24 hours, so after half a day, we'll have 0.5 fuel rod. </p><p>But I&#8217;m impatient and I don't want to wait that long, so I'll pick up some $BANANA.</p><h1>5. Get Banana</h1><p>This ended up being an entire adventure on Polygon network.</p><p>In the name of science, I'll investigate a few routes for crytpo transactions on various networks. This will look at the state of movement of funds around exchanges and the Polygon network.</p><h4>Eth to $BANANA</h4><p>Jump to the Discord to grab a link to a DEX from the official links section. I'll use the Uniswap link: https://app.uniswap.org/#/swap?inputCurrency=0x94e496474f1725f1c1824cb5bdb92d7691a4f03a&amp;chain=mainnet.</p><p>Swapping .006 eth for 3 $BANANA, for $20 of $BANANA we're looking at a $25 gas fee with gas at ~50gwei. Can we do better?</p><h4>MATIC to $BANANA</h4><p>We can swap for $BANANA directly on Polygon, which should be much cheaper. So head over to Quickswap on Polygon https://quickswap.exchange/#/swap?inputCurrency=ETH&amp;outputCurrency=0xbc91347e80886453f3f8bbd6d7ac07c122d87735. But we don&#8217;t have enough MATIC. Try buying MATIC on an exchange?</p><h4>Kraken to buy MATIC</h4><p>Try to swap, we have 2 MATIC still left over from the faucet earlier. This only gets us 0.5 $BANANA. For this approach, we can try to buy MATIC and exchange that for $BANANA.  Using Transak through the 'Buy' button on Metamask, we're looking at $10 in fees. If we instead use a traditional exchange, Kraken, it charges $0.07 in fees for $50 of MATIC, which is about 35 MATIC at the current price of $1.40/MATIC. Much more reasonable.</p><p>Now we Withdraw from Kranken, directly to the Polygon address that we&#8217;re using for the Cyberkongz adventure. The address is the same as the original layer 1 eth address we used to buy the Cyberkongz VX on Opensea. But interestingly, Kraken charges a 15 MATIC fee minimum to withdraw any MATIC. This is just the state of things on Kraken. Looking at the fee list, even an Ethereum withdrawal will cost you a $10 fee, which is absurd. The network will already hit us, the extra exchange fee is terrible. </p><p>Do we have no way to get around this $20 fee to play on Polygon network? This is not sustainable for the masses!</p><h4>Coinbase to buy MATIC</h4><p>Looking at Coinbase, it charges only a $0.30 fee to again buy $50 of MATIC. Now for the withdrawal! To pull out 30 or 100 MATIC I'm charged the same fee, 2.5 MATIC. Still not ideal, but for a few bucks, we do have a winner. I pull the MATIC to my ETH address this time from Coinbase.</p><h4>Bridge MATIC from Ethereum to Polygon</h4><p>With Coinbase, we were dealing with the ERC-20 MATIC token on the Ethereum network. To use the cheap Polygon bridge, we need to bridge our MATIC to the Polygon network. https://wallet.polygon.technology/bridge Things are getting slightly complicated, but we'll do the work to save the cash!</p><p>Unfortunately, the bridge is going to kill us too. We need to make 2 transactions to move our MATIC to Polygon. The first, $5 for it to access our MATIC. Again, we're in a 30 gwei eth network environment here. And to confirm the transfer, another $15. The $20 fee is unavoidable! Amazing. And it's going to take 7-8 minutes to get this done. Fucking crypto today man.</p><p>Finally, we're back to Quickswap. I'll swap 18 MATIC for 4 $BANANA, with a 0.1 MATIC fee. Shows how things are very nice once we're here, but getting here was not easy. Now with our fresh 4 $BANANA, we game!</p><h1>6. Ok really, now, Adventure!</h1><p>My wallet back at cyberkongz.com shows 4.09 BANANA. I head back to the Jungle tab and click the Portal icon. In the portal, I can now do an Adventure Run by clicking the Approve button. Only a $0.01 fee this time to approve interaction. Slightly annoying side note, I've been using a Trezor wallet which I've had to click hardware approvals on for each of these transactions. Now click Start to start an adventure run. I get a dialog that tells me 'Adventure Run In Progress&#8217;. </p><p>What is happening at this time? Chainlink? We&#8217;ll dive into the contract interaction in a later post. For now, just play.</p><p>Adventure is Completed. I found loot! +4 Kongium and +2 EXP.</p><p>PLAY AGAIN!</p><p>Click Start, I need more Kongium. Perhaps I'm addicted. Less loot this time though. +3 Kongium, +1 EXP. I'm still only a level 1 Kong.</p><h1>Wrap up</h1><p>As we've seen it's still quite expensive to get onto the Polygon network. It took $25 to get a Kong bridged over at very low gas prices. However, it seems we shouldn't need to go back and forth much, so some planning ahead can make this quite reasonable. All $BANANA should be bought in one transaction if needed, but it isn't actually needed if you're willing to play entirely using Fuel Rods.</p><p>Play and Kollect is currently in its infancy as a simple text-based game. However, it shows the potential for on-chain interaction with NFTs and tokens. It sets up huge potential for further games to be built out around these core concepts. Anyone could build a traditional game that uses $BANANA to gain entry to a new session, derives logic from a Kong VX's EXP and Kong level data stored in Polygon, and pays out Kongium. This project is moving at a rapid pace and I expect to see them continue to push the limits of the NFT and on-chain gaming space.</p>]]></content:encoded></item><item><title><![CDATA[METAVERSE_URL]]></title><description><![CDATA[In a previous post, we looked at how NFTs are not ready for the 3D Metaverse. The main reason - we do not have a standard path for the 3D asset to be defined, as we do with PNG or JPG-based NFTs.]]></description><link>https://www.spatializes.com/p/metaverse_url</link><guid isPermaLink="false">https://www.spatializes.com/p/metaverse_url</guid><dc:creator><![CDATA[spat.eth]]></dc:creator><pubDate>Thu, 07 Apr 2022 23:16:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!oUAc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59e6818-3dad-4c4b-b014-167a3360b804_1464x1348.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In a previous post, we looked at how <a href="https://www.spatializes.com/p/3d-nfts-are-not-ready-for-the-open?s=w">NFTs are not ready for the 3D Metaverse</a>. The main reason - we do not have a standard path for the 3D asset to be defined, as we do with PNG or JPG-based NFTs. </p><p>An NFT itself is a small record on the blockchain. As we broke down in another post, information about the <a href="https://www.spatializes.com/p/what-happens-when-you-mint-an-nft?s=w">media stored in the NFT is held in its metadata</a>. </p><p>For a PNG or JPG, we store the path to the actual file under the <em><strong>image</strong></em> property in the NFT&#8217;s metadata. 3D assets also need an image rendition, along with one or multiple 3D file type renditions. Where to put them? </p><p>The official <a href="https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md">ERC-721 spec</a> defines an optional metadata section but does not go beyond name, image, and description for suggested values. </p><p>Here&#8217;s what <a href="https://docs.opensea.io/docs/metadata-standards">OpenSea suggests for metadata</a>:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oUAc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59e6818-3dad-4c4b-b014-167a3360b804_1464x1348.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oUAc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59e6818-3dad-4c4b-b014-167a3360b804_1464x1348.png 424w, https://substackcdn.com/image/fetch/$s_!oUAc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59e6818-3dad-4c4b-b014-167a3360b804_1464x1348.png 848w, https://substackcdn.com/image/fetch/$s_!oUAc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59e6818-3dad-4c4b-b014-167a3360b804_1464x1348.png 1272w, https://substackcdn.com/image/fetch/$s_!oUAc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59e6818-3dad-4c4b-b014-167a3360b804_1464x1348.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oUAc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59e6818-3dad-4c4b-b014-167a3360b804_1464x1348.png" width="1456" height="1341" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/d59e6818-3dad-4c4b-b014-167a3360b804_1464x1348.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1341,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:942209,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oUAc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59e6818-3dad-4c4b-b014-167a3360b804_1464x1348.png 424w, https://substackcdn.com/image/fetch/$s_!oUAc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59e6818-3dad-4c4b-b014-167a3360b804_1464x1348.png 848w, https://substackcdn.com/image/fetch/$s_!oUAc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59e6818-3dad-4c4b-b014-167a3360b804_1464x1348.png 1272w, https://substackcdn.com/image/fetch/$s_!oUAc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59e6818-3dad-4c4b-b014-167a3360b804_1464x1348.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It looks like <em><strong>animation_url</strong></em> is the leftover grab bag for a huge variety of file types, which includes 3D file types along with entire HTML web pages. This variety makes it impossible for a Metaverse to know what to expect when it reads an NFT&#8217;s metadata, or how to guarantee it can find the 3D file.</p><h3>METAVERSE_URL</h3><p>With the options lacking, it seems we need a new property for the 3D Metaverse. The word Metaverse is overplayed already, but it has a beautiful origin in Snow Crash, and we should keep things easy and stick as closely as possible to its original definition. A Metaverse is a 3D virtual world.</p><p><em><strong>metaverse_url </strong></em>- A URL to the asset that an NFT should be represented as in a Metaverse.</p><p>This property can be either a string value or a dictionary. As a dictionary, we can store any file type renditions of that 3D asset - glTF, glb, FBX, OBJ, USD. The 3D world is messy, but a strongly typed list of supported types will let applications know what they are getting and where to look for it.</p><p><em>Example as a string:</em></p><pre><code>metaverse_url: "https://spatializes.com/myavatar.glb"</code></pre><p><em>Example as a dictionary:</em></p><pre><code>metaverse_url: {
    glb: "https://spatializes.com/myavatar.glb",
    gltf: "https://spatializes.com/myavatar.gltf",
    fbx: "https://spatializes.com/myavatar.fbx",
    obj: "https://spatializes.com/myavatar.obj",    
    usdz: "https://spatializes.com/myavatar.usdz",
    usd: "https://spatializes.com/myavatar.usd",
}</code></pre><p>Preference should be glb (<a href="https://github.com/KhronosGroup/glTF">the binary version of glTF</a>), for faster loading over the network and of its buffers into memory.</p><h3>ANIMATION</h3><p>When a Metaverse imports a 3D model, each model may have its own animation data set up internally. If not, we won&#8217;t be able to do things like walk, run, or attack! Static models are much less fun.</p><p>Following the standards set up by templates in VoxEdit seems like the best path forward at this point. VoxEdit is currently the easiest way to model and animate 3D assets that I&#8217;ve found so far. Compatibility with the Sandbox will help interoperability.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uJgk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fad04747c-ff0b-4638-8af6-2b580d36e35d_1528x1270.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uJgk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fad04747c-ff0b-4638-8af6-2b580d36e35d_1528x1270.png 424w, https://substackcdn.com/image/fetch/$s_!uJgk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fad04747c-ff0b-4638-8af6-2b580d36e35d_1528x1270.png 848w, https://substackcdn.com/image/fetch/$s_!uJgk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fad04747c-ff0b-4638-8af6-2b580d36e35d_1528x1270.png 1272w, https://substackcdn.com/image/fetch/$s_!uJgk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fad04747c-ff0b-4638-8af6-2b580d36e35d_1528x1270.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uJgk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fad04747c-ff0b-4638-8af6-2b580d36e35d_1528x1270.png" width="1456" height="1210" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/ad04747c-ff0b-4638-8af6-2b580d36e35d_1528x1270.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1210,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:989476,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uJgk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fad04747c-ff0b-4638-8af6-2b580d36e35d_1528x1270.png 424w, https://substackcdn.com/image/fetch/$s_!uJgk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fad04747c-ff0b-4638-8af6-2b580d36e35d_1528x1270.png 848w, https://substackcdn.com/image/fetch/$s_!uJgk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fad04747c-ff0b-4638-8af6-2b580d36e35d_1528x1270.png 1272w, https://substackcdn.com/image/fetch/$s_!uJgk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fad04747c-ff0b-4638-8af6-2b580d36e35d_1528x1270.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Voxel robot guy I made in VoxEdit from the standard &#8216;Small Human&#8217; template, amazingly useful to get these animations for free.</figcaption></figure></div><p>Assets should have at least the following animation channels to allow for a base set of interactivity:</p><ul><li><p>Idle</p></li><li><p>Walk</p></li><li><p>Run</p></li><li><p>Jump</p></li><li><p>Climb</p></li><li><p>Attack</p></li><li><p>Die</p></li></ul><p>With just this small set of animation channels, Metaverses can implement a wide range of functionality. As a Metaverse, on import, we can scan for animation channels that contain these strings. These might be humanoids, creatures, or even more static objects like turrets or buildings (which might also have the ability to attack or die).</p><p>This list should continue to expand as we find greater use cases for assets in the Metaverse, but a short simple list to start will be helpful.</p><p>Projects adopting this new metadata and model structure will give us a much greater chance of building an open, interoperable, and standardized Metaverse.</p>]]></content:encoded></item><item><title><![CDATA[3D NFTs are not ready for the Open Metaverse]]></title><description><![CDATA[We hear plenty about closed Metaverses.]]></description><link>https://www.spatializes.com/p/3d-nfts-are-not-ready-for-the-open</link><guid isPermaLink="false">https://www.spatializes.com/p/3d-nfts-are-not-ready-for-the-open</guid><dc:creator><![CDATA[spat.eth]]></dc:creator><pubDate>Wed, 23 Mar 2022 15:52:50 GMT</pubDate><enclosure url="https://cdn.substack.com/image/fetch/h_600,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fpbs.substack.com%2Fmedia%2FE3oCJ-fXMAIeMoK.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We hear plenty about closed Metaverses. Facebook is likely building one. Instagram and Snap already operate them. </p><p>By Metaverse by the way, I mean the original version defined by Neal Stephenson in Snowcrash - where users appear as avatars, interacting with virtual content on virtual real estate. Although unlike in Snowcrash, this may happen on your desktop, mobile phone, or VR/AR headset. It&#8217;s the virtual world and virtual content that are important to us.</p><p>What makes a Metaverse closed? </p><p>Let&#8217;s look at Snap&#8217;s current virtual world. To get your content (like a new face mask or 3D hotdog) into Snap, you must upload it through their proprietary marketplace or proprietary creation tool Lens Studio.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cSLp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F87c87eda-a12c-4c0e-bb47-449d364feb1a_1202x1290.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cSLp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F87c87eda-a12c-4c0e-bb47-449d364feb1a_1202x1290.png 424w, https://substackcdn.com/image/fetch/$s_!cSLp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F87c87eda-a12c-4c0e-bb47-449d364feb1a_1202x1290.png 848w, https://substackcdn.com/image/fetch/$s_!cSLp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F87c87eda-a12c-4c0e-bb47-449d364feb1a_1202x1290.png 1272w, https://substackcdn.com/image/fetch/$s_!cSLp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F87c87eda-a12c-4c0e-bb47-449d364feb1a_1202x1290.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cSLp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F87c87eda-a12c-4c0e-bb47-449d364feb1a_1202x1290.png" width="492" height="528.0199667221298" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/87c87eda-a12c-4c0e-bb47-449d364feb1a_1202x1290.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1290,&quot;width&quot;:1202,&quot;resizeWidth&quot;:492,&quot;bytes&quot;:1176368,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cSLp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F87c87eda-a12c-4c0e-bb47-449d364feb1a_1202x1290.png 424w, https://substackcdn.com/image/fetch/$s_!cSLp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F87c87eda-a12c-4c0e-bb47-449d364feb1a_1202x1290.png 848w, https://substackcdn.com/image/fetch/$s_!cSLp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F87c87eda-a12c-4c0e-bb47-449d364feb1a_1202x1290.png 1272w, https://substackcdn.com/image/fetch/$s_!cSLp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F87c87eda-a12c-4c0e-bb47-449d364feb1a_1202x1290.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Snap may decide they don&#8217;t like your art for whatever reason and block your content. Or they might decide they just don&#8217;t like you and ban your login. No Metaverse for you.</p><p>What could an open Metaverse look like?</p><p>Imagine you want to join my open Metaverse, Spativerse (not really a thing). The ideal workflow:</p><ul><li><p>Visit a Metaverse</p></li><li><p>Connect your wallet</p></li><li><p>Pick the NFT you want to use as your avatar</p></li></ul><p>You can freely use any NFT you own without permission from the Metaverse. It will load whatever you own in your wallet! Freedom.</p><p>This is what I always imagined the NFT dream to be. It is how the JPG based NFTs currently work. We can always expect to look at an NFT&#8217;s <strong>metadata</strong> and find the image url under the <strong>image</strong> key, then load that image into the Metaverse.</p><p>Unfortunately, spoiler alert, this is not how many 3D voxel (VX) projects are set up. We do not have standardized access to the raw 3D assets. So we cannot load them directly from the blockchain into an open Metaverse.</p><p>Read on to see a few VX project contracts deconstructed, in our search for the VX asset.</p><h3>VX NFTS TODAY</h3><p>Many projects that were originally set up as 2D profile picture (PFP) collections are now looking to release VX versions of their projects. One of the original leaders in this strategy is Cyberkongz.</p><h3>CYBERKONGZ</h3><p><a href="https://etherscan.io/address/0x57a204aa1042f6e66dd7730813f4024114d74f37">Genesis Cyberkongz (0x57a204aa1042f6e66dd7730813f4024114d74f37)</a>  were one one of the earliest projects, created on the blockchain April 16th, 2021. This inspired many of the early PFP collections. Funny enough, we can see another quite famous collection, <a href="https://etherscan.io/address/0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d">Bored Ape Yacht Club (0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d)</a> came later April 22nd, 2021! Inspiration? Perhaps.</p><p>After the success Cyberkongz found, we get <a href="https://etherscan.io/address/0x7ea3cca10668b8346aec0bf1844a49e995527c8b">Cyberkongz VX (0x7ea3cca10668b8346aec0bf1844a49e995527c8b)</a> on a new contract, created August 15th, 2021. </p><p>What&#8217;s inside the metadata and contract for a Cyberkongz VX? Is our VX version directly in the NFT? Sadly, not quite.</p><pre><code>{
  "image": "https://cyberkongz.fra1.cdn.digitaloceanspaces.com/public/1/1_preview.jpg",
  "external_url": "https://kongz.herokuapp.com/kong-vx/1",
  "name": "CyberKong VX #1",
  "attributes": [
    {
      "value": "Ghost",
      "trait_type": "Legendary"
    },
    {
      "trait_type": "Level",
      "value": 1
    },
    {
      "trait_type": "Status",
      "value": "Unlocked"
    }
  ],
  "animation_url": "https://vxviewer.vercel.app/1",
  "iframe_url": "https://vxviewer.vercel.app/1"
}</code></pre><p>From a <a href="https://kongz.herokuapp.com/api/metadata-vx/1">Cyberkongz VX metadata</a>, we get the standard properties that come with most NFTs like name, attributes, and image. But look at this, we also get external_url, animation_url, and iframe_url! Promising, but unfortunately not the raw asset. These are links to web based app viewers.</p><p>The external_url points to a heroku web app which lets me visualize, color, and view animation of the Cyberkongz VX model. </p><p>The animation_url and iframe_url both point to the same Vercel app, which is simply a glTF web renderer. If we look at network traffic on the site, we can finally see the actual VX asset delivered, as a <a href="https://www.khronos.org/gltf/">glTF file</a> (well glb, the binary version of the common 3D file format glTF). It comes from <a href="https://cyberkongz.fra1.cdn.digitaloceanspaces.com/public/4919/4919.glb">https://cyberkongz.fra1.cdn.digitaloceanspaces.com/public/4919/4919.glb</a>. More bad news, the asset is delivered from another web2 property, Digital Ocean. </p><p>This is quite disappointing from a decentralized tech perspective. WHEN the Heroku and Vercel apps eventually die, and they will, this metadata will point to dead links. Maybe the original VX project did it better?</p><h3>MEEBITS</h3><p>Before Cyberkongz actually released their VX Kong, <a href="https://etherscan.io/address/0x7bd29408f11d2bfc23c34f18275bbf23bb716bc7">Meebits (0x7bd29408f11d2bfc23c34f18275bbf23bb716bc7)</a> were on the scene May 3rd, 2021! </p><p>Let&#8217;s look at the metadata for the very first Meebit of the collection.</p><pre><code>{
  "name": "Meebit #1",
  "description": "Meebit #1",
  "image": "http://meebits.larvalabs.com/meebitimages/characterimage?index\u003d1\u0026type\u003dfull\u0026imageType\u003djpg",
  "attributes": [
    {
      "trait_type": "Type",
      "value": "Human"
    },
    {
      "trait_type": "Hair Style",
      "value": "Bald"
    },
    {
      "trait_type": "Hat",
      "value": "Backwards Cap"
    },
    {
      "trait_type": "Hat Color",
      "value": "Gray"
    },
    {
      "trait_type": "Shirt",
      "value": "Skull Tee"
    },
    {
      "trait_type": "Overshirt",
      "value": "Athletic Jacket"
    },
    {
      "trait_type": "Overshirt Color",
      "value": "Red"
    },
    {
      "trait_type": "Pants",
      "value": "Cargo Pants"
    },
    {
      "trait_type": "Pants Color",
      "value": "Camo"
    },
    {
      "trait_type": "Shoes",
      "value": "Workboots"
    }
  ]
}</code></pre><p></p><p>Oh sadness! We get even less than our Cyberkongz VX metadata. Name, description, attributes, and image only. This first of its kind, 3D voxel based NFT, which advertises itself as Metaverse ready:</p><blockquote><p>All Meebit owners can access a T-pose OBJ file that be imported into any most standard 3D modelling and animation software.</p></blockquote><p>is not <strong>programmatically</strong> Metaverse ready. If I want to load this NFT into my 3D world, how do I get the 3D asset? Maybe the actual contract itself contains methods to get the asset? Nope. </p><p>It quickly becomes clear that Meebits are not made for the open Metaverse either. &#8216;Owner download area&#8217; is the solution that lets Meebits owners download that OBJ file. This feels like a great web2 flow. Buy an asset, go download it from one site, and import it to another. It will work for some workflows, but will fail critically in web3. </p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/cryptopunksnfts/status/1403439679123378182?lang=en&quot;,&quot;full_text&quot;:&quot;&#128566; Meebits Update &#128566;\n&#11088;&#65039; New model file for 3D printing your Meebits added to the owner download area. More details, including instructions and tips on materials here: <a class=\&quot;tweet-url\&quot; href=\&quot;https://www.larvalabs.com/blog/2021-6-11-17-1/3d-printing-your-meebits\&quot;>larvalabs.com/blog/2021-6-11&#8230;</a> &quot;,&quot;username&quot;:&quot;cryptopunksnfts&quot;,&quot;name&quot;:&quot;CryptoPunks&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Fri Jun 11 19:51:08 +0000 2021&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/E3oCJ-fXMAIeMoK.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/WfufZyUaH3&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:65,&quot;like_count&quot;:420,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p></p><h3>CONCLUSION</h3><p>While it seems NFTs were made to allow JPGs to be freely available and transferable, the same is not true for the 3D file that makes a VX NFT.</p><p>The 3D files (obj, gltf, fbx) that represent the VX NFT are not available through a standard contract definition like ERC-721. I need to visit some website, login, and download the file to get it. Why is this a problem? </p><p><strong>There is no blockchain record of the 3D asset tied to your wallet address.</strong></p><p>Do you actually own your VX if it doesn&#8217;t exist on the blockchain or decentralized storage like IPFS? What&#8217;s the point of doing any of this on the blockchain when the pointers all lead back to centralized web2 storage?</p><p>It seems the great lessons applied to JPG based NFTs were just ignored for VX.</p><p>The way Twitter is able to show a validated NFT for your profile picture will not be possible for your 3D avatar in the Metaverse, if there is no way to programmatically find the 3D asset starting from the original NFT.</p><p>If this is not fixed for future NFTs, we have a big problem on our hands for interoperability and ownership validation.</p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Why is NFT metadata stored outside the smart contract?]]></title><description><![CDATA[The on chain vs off chain battle]]></description><link>https://www.spatializes.com/p/why-is-nft-metadata-stored-outside</link><guid isPermaLink="false">https://www.spatializes.com/p/why-is-nft-metadata-stored-outside</guid><dc:creator><![CDATA[spat.eth]]></dc:creator><pubDate>Mon, 22 Nov 2021 15:31:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!r7At!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd3bdf72-5801-45f8-af2a-96832cbe8595_631x631.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Once you learn about the <a href="https://www.spatializes.com/what-happens-when-you-mint-an-nft">basics of Ethereum based NFTs</a>, you realize that your JPEG is not actually stored on the blockchain for most projects. The blockchain only holds a link, which points to a metadata file. That metadata file then points to your JPEG.</p><h2>The NFT Image</h2><p>It makes sense that the JPEG isn&#8217;t stored on chain, those images can be huge at high quality. Let&#8217;s look at a Bored Ape for example, randomly, the 61st most rare bored ape, #7678!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!r7At!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd3bdf72-5801-45f8-af2a-96832cbe8595_631x631.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r7At!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd3bdf72-5801-45f8-af2a-96832cbe8595_631x631.png 424w, https://substackcdn.com/image/fetch/$s_!r7At!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd3bdf72-5801-45f8-af2a-96832cbe8595_631x631.png 848w, https://substackcdn.com/image/fetch/$s_!r7At!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd3bdf72-5801-45f8-af2a-96832cbe8595_631x631.png 1272w, https://substackcdn.com/image/fetch/$s_!r7At!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd3bdf72-5801-45f8-af2a-96832cbe8595_631x631.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r7At!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd3bdf72-5801-45f8-af2a-96832cbe8595_631x631.png" width="415" height="415" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/dd3bdf72-5801-45f8-af2a-96832cbe8595_631x631.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:631,&quot;width&quot;:631,&quot;resizeWidth&quot;:415,&quot;bytes&quot;:255366,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!r7At!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd3bdf72-5801-45f8-af2a-96832cbe8595_631x631.png 424w, https://substackcdn.com/image/fetch/$s_!r7At!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd3bdf72-5801-45f8-af2a-96832cbe8595_631x631.png 848w, https://substackcdn.com/image/fetch/$s_!r7At!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd3bdf72-5801-45f8-af2a-96832cbe8595_631x631.png 1272w, https://substackcdn.com/image/fetch/$s_!r7At!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd3bdf72-5801-45f8-af2a-96832cbe8595_631x631.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If we dive into the <a href="https://etherscan.io/address/0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d">Bored Ape Yacht Club smart contract</a>, and read the <code>tokenURI</code> property for this pizza king crown guy, we find it points to <em>ipfs://QmeSjSinHpPnmXmspMjwiXyN6zS4E9zccariGR3jxcaWtq</em>. This is the metadata for ape #7678 (shown fully below if you&#8217;re curious). The metadata points to an image stored at <em>ipfs://QmeSjSinHpPnmXmspMjwiXyN6zS4E9zccariGR3jxcaWtq/7678.</em></p><p>Note: we can look at these ipfs urls in a traditional browser using the schema <em>https://ipfs.io/ipfs/&lt;CID&gt;</em></p><p>The image (technically a PNG) is a 631x631 square at 255kb on disk. </p><p>According to the <a href="https://gavwood.com/paper.pdf">Ethereum yellow paper</a>, which lays out the gas fee schedule, a 256 bit word costs 20k gas, or 625 gas for 1 byte (8 bits). That&#8217;s 640k gas for 1kb. </p><pre><code>255kb image * 640k gas = 163.2m gas for the 255kb image.</code></pre><p>So how do we calculate gas fees? The <a href="https://ethereum.org/en/developers/docs/gas/">Ethereum docs</a> lay it out prior to the London hard fork:</p><pre><code>Total fee = Gas units (limit) * Gas price per unit</code></pre><p>And after the London hard fork:</p><pre><code>Total fee = Gas units (limit) * (Base fee + Tip)</code></pre><p>So with London, instead of just Base fee (gas price per unit) we add in a tip. We&#8217;ll ignore the tip for our calculations, call it an approximation, and continue to use the pre-London formula. </p><p>Let&#8217;s do the math!</p><p>What is the price per unit of gas today (11/21/21)? Average has been about 90 gwei. This has fluctuated wildly based on congestion in the network, from 30 gwei up to thousands of gwei, when Shib is pumping or a super hot project is released. What is the cost for our image that will use 163.2 million gas units?</p><pre><code>90 gwei per unit * 163.2m units = 14.688b gwei = 14.69 eth</code></pre><p>We divide by 1 billion to convert gwei to eth, because 1 gwei is 1 billion wei (the smallest unit of Ether), and 1 eth is 1 billion gwei.</p><p>Woah. Can that be right? 14 fucking eth to store my image? How much is eth today? $4350 per eth!</p><pre><code>14.69 eth * $4350/eth = $63,901</code></pre><p>That seems excessive for a single image. And if the bulls on Reddit are right, Ethereum is headed to $10k per coin. Sounds right to me. Let&#8217;s see how accurate that is when we look back in a few years. In any case, it doesn&#8217;t seem worth gambling our project on the price of Ethereum. Ethereum would need either an exponential decrease in price, or a large decrease in gas cost, for it to ever make sense to actually store this image on chain as a PNG.</p><p>Worse, for BAYC, we need to store 10,000 images. This would cost $639 million. It appears storing the raw image directly in this way is not an option.</p><h2>The NFT metadata</h2><p>We pulled the metadata earlier for our super rare Bored Ape Yacht Club #7678, let&#8217;s take a look:</p><pre><code>{
  "image": "ipfs://QmXtfhV4LEGCRVvRRa788k5wN49rShvSv2yUgtgpJMfNsH",
  "attributes": [
    {
      "trait_type": "Background",
      "value": "Purple"
    },
    {
      "trait_type": "Eyes",
      "value": "Robot"
    },
    {
      "trait_type": "Hat",
      "value": "King's Crown"
    },
    {
      "trait_type": "Fur",
      "value": "Cheetah"
    },
    {
      "trait_type": "Clothes",
      "value": "Sailor Shirt"
    },
    {
      "trait_type": "Mouth",
      "value": "Bored Unshaven Pizza"
    }
  ]
}</code></pre><p>Not much! The metadata is a simple JSON string. It contains a link to the NFT&#8217;s image with 6 categories of attributes. Impressive in its simplicity. How much data is that?</p><p><strong>344 bytes</strong> when we ignore whitespace. Now this seems like something we can store on chain. How much according to our calculations above?</p><pre><code>625 gas/byte * 344 bytes = 215000 gas</code></pre><pre><code>90 gwei per unit * 215000 units = 0.01935 eth = $84.17</code></pre><p>It&#8217;s a massive reduction in size compared to the image, but $84.17 per property sheet is still not cheap. For BAYC, at 10,000 NFTs for the contract, this would have been $840k. It&#8217;s amazing how things add up. </p><p>Clearly we should not store these files directly as strings. If anything, we will need a function that generates the strings within the smart contract. Now things start getting complicated.</p><h2>Why Off Chain?</h2><p>It should seem pretty obvious at this point why we would want to store these things off chain.</p><ol><li><p>Cost - this is the core of most reasons for storing metadata off chain, and also the official reason given in the <a href="https://eips.ethereum.org/EIPS/eip-721">ERC-721 Spec</a> metadata section: </p></li></ol><blockquote><p>Alternatives considered: put all metadata for each asset on the blockchain (too expensive)</p></blockquote><ol start="2"><li><p>Flexibility - you can deploy your contract once, point it at your metadata file, and never update your contract again. Any updates to the JPEG url or properties of the NFT can be done by updating the metadata file without any cost. If this was stored on chain, you would need to pay to write any changes to your contract.</p></li><li><p>Complexity - because you can&#8217;t just store these files raw on the blockchain, we need intelligent schemes to baked into our smart contract to generate the image or metadata tied to the NFT. See below for a project doing just that.</p></li><li><p>Risk - the logic in your deployed contract on chain is immutable. Many projects are hit by bugs in that logic. There is a risk that the bug cannot be fixed without redeploying your contract and forcing all users to migrate to a new contract, which they may or may not do. Many projects instead die this way. The more code on chain, the greater risk you&#8217;ve injected a project ending bug.</p></li></ol><p>It makes perfect sense why we would store our assets and metadata off-chain, but is it possible to store your metadata on-chain? Certainly! The most interesting example I have found is from the <a href="https://etherscan.io/address/0xbad6186e92002e312078b5a1dafd5ddf63d3f731">Anonymice project</a>. They abide by the ERC-721 spec, which requires metadata be stored in the NFT at the <code>tokenURI</code> property which contains a string of JSON conforming to this schema:</p><pre><code>{
    "title": "Asset Metadata",
    "type": "object",
    "properties": {
        "name": {
            "type": "string",
            "description": "Identifies the asset to which this NFT represents"
        },
        "description": {
            "type": "string",
            "description": "Describes the asset to which this NFT represents"
        },
        "image": {
            "type": "string",
            "description": "A URI pointing to a resource with mime type image/* representing the asset to which this NFT represents. Consider making any images at a width between 320 and 1080 pixels and aspect ratio between 1.91:1 and 4:5 inclusive."
        }
    }
}



</code></pre><p>Which as you can see, the Bored Ape metadata schema gets close to matching as well.</p><p>How do the Anonymice do it? They generate a base64 encoded string of the metadata file at the <code>tokenURI</code>, instead of a link to a JSON file on an IPFS server. Smart! You can read about their tactics on their <a href="https://anonymicenft.medium.com/anonymice-100-on-chain-randomly-generated-free-nfts-ce7ea8d8d5b3">blog</a>, where it is very well explained.</p><p>They do need to be clever, because base64 encoding which will actually increase our size by about 33%. In fact, our Bored Ape PNG from above increases from 255kb to 340kb with encoding. So we cannot just store pure base64 encoded images unless we want to pay millions of dollars.</p><h2>On Chain vs Off Chain?</h2><p>So what should you do for your project? I love storing and doing as much on chain as possible. I personally start with everything on chain, with links to renders or shortcuts on IPFS as a practical solution. But as we know, IPFS is not forever. Ideally your source of truth can live on chain. It will take clever coding solutions to store these things on chain without making your contract deployment prohibitively expensive or complex.</p><p></p>]]></content:encoded></item><item><title><![CDATA[What happens when you mint an NFT?]]></title><description><![CDATA[So you&#8217;ve decided you want a CryptoKitty, a Bored Ape, maybe even a Punk!]]></description><link>https://www.spatializes.com/p/what-happens-when-you-mint-an-nft</link><guid isPermaLink="false">https://www.spatializes.com/p/what-happens-when-you-mint-an-nft</guid><dc:creator><![CDATA[spat.eth]]></dc:creator><pubDate>Fri, 29 Oct 2021 21:11:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7rrx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4df7ef20-1077-4e65-88da-7bf532e2ea95_1176x950.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>So you&#8217;ve decided you want a CryptoKitty, a Bored Ape, maybe even a Punk! The JPEG is cool, but what actually happens under the hood? Well the mechanics underlying your NFT can actually be very different for each project.</p><p>In this series, we&#8217;ll start off with a general TLDR for how most NFT projects work (scroll down if the anticipation is killing you). They follow similar principles which can be interesting if you want only a surface level understanding.</p><p>For those who need to understand the fundamentals of a thing, we will next dive deeper. The only way to understand the first principles of an NFT is to look at the smart contract that controls it. Diving into projects running on the Ethereum network, we will break apart the Solidity code of each smart contract. They are surprisingly easy to understand. Short and simple contracts are able to implement powerful concepts.</p><p>The series will progress from the earliest projects like CryptoPunks and Mooncats, through the NFT721 standard, into the PFP era led by Bored Ape Yacht Club, and into  generative works like ArtBlocks.</p><p>This is an investigation I&#8217;ve done myself as research for building my own NFT collections. I&#8217;ve tried to learn the pros and cons of various techniques to determine the best contract construction. If you&#8217;re building your own project, or just want to understand the details of NFTs you&#8217;re spending thousands of dollars on for your own collection, I hope this exploration will help inform you.</p><p>I found it surprisingly hard to find any information on how these contracts are broken down, so in the spirit of open and decentralized information, I can pass the research on. The sooner we can understand these building blocks, the sooner we can use them to build even higher.</p><p>An amazing property of this NFT era is that the entire blockchain is public and free to read. This is what gives us the ability to crack open the smart contract on any NFT and learn all about it. If you follow along, you&#8217;ll also learn the techniques for analyzing these contracts yourself for any future NFTs you want to investigate yourself.</p><h1>Smallest NFT TLDR that still gives you the important insights</h1><p>Let&#8217;s start off with Bored Ape Yacht Club (BAYC) to highlight the basics. We&#8217;ll follow up in the next post with a deeper dive into their smart contract.</p><p>At the highest level, a project like BAYC has a single Solidity contract that represents the entire collection. <a href="https://etherscan.io/address/0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D">Here it is</a>! </p><p>The team at BAYC wrote this contract, then published it onto the Ethereum blockchain.</p><p>So what happens when you mint? It looks like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7rrx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4df7ef20-1077-4e65-88da-7bf532e2ea95_1176x950.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7rrx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4df7ef20-1077-4e65-88da-7bf532e2ea95_1176x950.png 424w, https://substackcdn.com/image/fetch/$s_!7rrx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4df7ef20-1077-4e65-88da-7bf532e2ea95_1176x950.png 848w, https://substackcdn.com/image/fetch/$s_!7rrx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4df7ef20-1077-4e65-88da-7bf532e2ea95_1176x950.png 1272w, https://substackcdn.com/image/fetch/$s_!7rrx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4df7ef20-1077-4e65-88da-7bf532e2ea95_1176x950.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7rrx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4df7ef20-1077-4e65-88da-7bf532e2ea95_1176x950.png" width="1176" height="950" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4df7ef20-1077-4e65-88da-7bf532e2ea95_1176x950.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:950,&quot;width&quot;:1176,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:85213,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7rrx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4df7ef20-1077-4e65-88da-7bf532e2ea95_1176x950.png 424w, https://substackcdn.com/image/fetch/$s_!7rrx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4df7ef20-1077-4e65-88da-7bf532e2ea95_1176x950.png 848w, https://substackcdn.com/image/fetch/$s_!7rrx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4df7ef20-1077-4e65-88da-7bf532e2ea95_1176x950.png 1272w, https://substackcdn.com/image/fetch/$s_!7rrx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4df7ef20-1077-4e65-88da-7bf532e2ea95_1176x950.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Each person will use their Ethereum account (through a wallet like MetaMask) to call a mint function on the project&#8217;s smart contract. Specifically for BAYC, you call a function called mintApe on that contract. Here&#8217;s what the function looks like using Etherscan to explore the functions we have available from the contract.<br></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KEpq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdad2e76b-8bd1-46a4-802a-7c4eea71ff1a_916x548.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KEpq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdad2e76b-8bd1-46a4-802a-7c4eea71ff1a_916x548.png 424w, https://substackcdn.com/image/fetch/$s_!KEpq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdad2e76b-8bd1-46a4-802a-7c4eea71ff1a_916x548.png 848w, https://substackcdn.com/image/fetch/$s_!KEpq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdad2e76b-8bd1-46a4-802a-7c4eea71ff1a_916x548.png 1272w, https://substackcdn.com/image/fetch/$s_!KEpq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdad2e76b-8bd1-46a4-802a-7c4eea71ff1a_916x548.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KEpq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdad2e76b-8bd1-46a4-802a-7c4eea71ff1a_916x548.png" width="916" height="548" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/dad2e76b-8bd1-46a4-802a-7c4eea71ff1a_916x548.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:548,&quot;width&quot;:916,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:44205,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KEpq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdad2e76b-8bd1-46a4-802a-7c4eea71ff1a_916x548.png 424w, https://substackcdn.com/image/fetch/$s_!KEpq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdad2e76b-8bd1-46a4-802a-7c4eea71ff1a_916x548.png 848w, https://substackcdn.com/image/fetch/$s_!KEpq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdad2e76b-8bd1-46a4-802a-7c4eea71ff1a_916x548.png 1272w, https://substackcdn.com/image/fetch/$s_!KEpq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fdad2e76b-8bd1-46a4-802a-7c4eea71ff1a_916x548.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The mintApe function will no longer work, because the project minted all 10,000 NFTs long ago (long ago&#8230; in NFT terms, this was actually only a few months ago).</p><p>Assuming you could call mintApe, what would happen? It&#8217;s not very complicated. We can even look at code:</p><p><code>_holderTokens[to].add(tokenId);</code></p><p><code>emit Transfer(address(0), to, tokenId);</code></p><p>You need only a simplistic understand of how programming works to see what&#8217;s happening here. In the first line, <code>to</code> is your Ethereum account address. It gets stored in a map called <code>_holderTokens</code>. Your address points to the <code>tokenId</code> (your ape&#8217;s Id), which you minted. That&#8217;s all that gets saved. It&#8217;s all stored on the contract. That&#8217;s almost it. </p><p>I said almost because there&#8217;s one more imporant thing that happens. The contract will send an event out to the Ethereum network with your address and the token you purchased. Now that&#8217;s really it.</p><p>So when you mint, does anything actually get sent to you or your wallet? No! It feels counter intuitive because of the way applications show us our NFTs. It feels almost like we do physically hold them in our wallets. But this follows the same principles of how the blockchain itself works. There&#8217;s just the blockchain. A big ledger. We&#8217;re recording line items in a registry that says who owns what. The only record of your NFT ownership is the entery in the BYAC smart contract referencing your Ethereum account address to the NFT token ID and a fired event. Amazing!</p><p>It is also interesting to think about how an aggregator like OpenSea can show the NFTs which have been recorded against your Ethereum account address. There is no way they could scan all smart contracts of all projects ever created. Also, they would need to constantly be scanning for any transfers of ownship. Instead, they watch all events and keep their own database of ownership.</p><p>We&#8217;ve only scratched the surface of what an NFT is. What about the JPEG? Where is it stored? How is it linked to your address or token ID? We&#8217;ll need to explore further. This is where things start to deviate between projects. Some may store your image on centrally controlled systems like AWS, others using decentralized external storage like IPFS, while other try to remain pure and store it directly in the smart contract itself. We&#8217;ll continue on with our BAYC exploration next to see how they do it.</p><h1>OK, the real NFT TLDR</h1><p>To wrap it up, what is an NFT then?</p><ol><li><p>Recording of your Ethereum address with your NFT&#8217;s token ID in the smart contract of the NFT project.</p></li><li><p>An event fired by the project&#8217;s Smart Contract.</p></li></ol><p>That&#8217;s it! </p><p>Done for now, until we dive deeper. </p><p></p>]]></content:encoded></item></channel></rss>