<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>PATCHWORK</title>
        <link>https://blog.patchwork.dev</link>
        <description>Onchain {data} for the new internet.</description>
        <lastBuildDate>Sat, 18 Apr 2026 10:43:10 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>PATCHWORK</title>
            <url>https://storage.googleapis.com/papyrus_images/8d1b81b61a1ecca2d1cb06c289826632</url>
            <link>https://blog.patchwork.dev</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[Going Beyond Superficial AI]]></title>
            <link>https://blog.patchwork.dev/beyond-superficial-ai</link>
            <guid>O5UYwjudGOlRPO3oLZD1</guid>
            <pubDate>Mon, 14 Apr 2025 16:53:35 GMT</pubDate>
            <description><![CDATA[As companies rush to capitalize on the AI trend by adding superficial features, they overlook the real potential: creating systems with memory that can adapt, learn, and fundamentally change the way we interact with technology.]]></description>
            <content:encoded><![CDATA[<p>It’s no surprise, the tech world is obsessed with generative AI. ChatGPT responses, AI-generated images, and voice clones dominate the headlines. Companies are rushing to integrate these capabilities into their products, desperately trying to claim the "AI-first" label.</p><p>But here's what almost everyone is missing: these surface-level implementations are just the beginning, and they're not even the most transformative part of what's coming.</p><h2 id="h-the-superficial-ai-trap" class="text-3xl font-header"><strong>The Superficial AI Trap</strong></h2><p>Let's be blunt: most companies are slapping AI onto their products with no real vision. They're scrambling to be "AI-first" without understanding what that means beyond buzzwords.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b9b09028475b1288b901e9adac8776cf.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAARCAIAAAAzPjmrAAAACXBIWXMAABYlAAAWJQFJUiTwAAACm0lEQVR4nGOQ07XOrGhmYBYXVzXml9Nm4JVmEJDFjnilOSXV3EJiBdTsGIRNWMWUcKoUkNW2dHUJTpDRsmTglFRRMXZgEJDlldbklFTDbwG7hKqlWwCvsgWDpCmzmAIeCyQ1TE2dA6U0zBkkNcw8I5PhRuDRwwBBDCIMvFIMApIElHFIglRySDLwSGsqGtgSNlcAiljwhgwWlaLKhqbOgQy80vi9zEA2YhFT4pfTppXpArIM/HLajn7RDAIytLKDR1pT2dCeSNNZxJSIjwMoElE2sPYIJdb5DAIMzOLgxCZHrE0qxg7ZFc0MAjKElfJKW7qFqBo7goxmEGBg4AAlRIK63MOSr95/jd8CFpCJIsZOftcevb16//WuYxeOXbq779TVOSu2MLBLELCAU1JFFZyT4c7EjpjFpTTMF63bmVHW6BmZnFvZWljbFZZUAMpKuLRAzZTTtvEORXYsl7Q6BPFIayIjNgk1Tkk1dglVkKHM4iDEI4WmBo44JVWgdvBIq1m6hcAskPGKyi5onJxd05NT059c1pFc1o6EOlIrOlMrOjOqeyAoraILVQEUpVV0xeQ2CCrqgexgEVOS17WCJAlWMaX4gsbKrnkVXXPL2mdl1U3Ob5yWWz8lt35KTv2UrJpJOWBGZk1/Vs0kiDgmyqmfklE9IaO6T0bbCuRXKQ1zn5gMBn5QJLOIKaVUdDTPWFM/efmU5Xunr9rbOHVFUcus+snLJy3Z3jRlRcPkZVOW7565an9V78Kc+in5jdPQUFHLrILGGbff/n/1+7+wsiEDjxQoJ+tZe0DzAa+0R2RmTs2EzOrusvaZFV2zs2p64wua0iq6cusnZlb3plV0FTROqeianVbREZlVG5PbgBVNXbp96tJtXODCHwBCgBVG5wetiAAAAABJRU5ErkJggg==" nextheight="800" nextwidth="1478" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p style="text-align: center"><em>As most are aware, even X has its own generative AI chatbot.</em></p><p>These implementations are like early mechanical toys – neat demonstrations but limited in actual utility. They're the AI equivalent of putting tailfins on cars: visually impressive but adding little functional value.</p><p>Today's AI implementations resemble early mechanical devices – interesting demonstrations, but limited in integration and utility. And just like those early devices, they're a precursor to something far more transformative.</p><h2 id="h-the-power-of-memory" class="text-3xl font-header"><strong>The Power of Memory</strong></h2><p>AI’s biggest shortcoming today is memory. Systems often forget context, lose track of important details, or simply fail to build on past interactions, with each new session feeling like you have to start from scratch.</p><p>Rob, our Principal Engineer, put it best: <em>“The more interesting applications come from a good use of memory. Developing a system that keeps the memory of what worked – and what didn’t – allows AI to create its own rules and improve through trial and error. That’s where real adaptation and scalability come in.”</em></p><p>While everyone focuses on what AI can create <em>right now</em>, the true shift is happening in systems that:</p><ul><li><p>Remember your preferences across different contexts</p></li><li><p>Learn from how you use them and adapt accordingly</p></li><li><p>Improve at serving your needs without constant reconfiguration</p></li><li><p>React fluidly to change without requiring updates</p></li></ul><p>For example, instead of an AI remembering that your name is Alex and you prefer dark mode – imagine it remembers that you always ask for a summary before diving into details, that you tend to switch gears mid-project, and that you're most productive late at night – and it’s already prepared for that next session before you even show up.</p><p>That’s what meaningful memory looks like. But building it? That’s another story.</p><h2 id="h-lets-go-under-the-hood-of-ai" class="text-3xl font-header"><strong>Let’s Go Under the Hood of AI</strong></h2><p>What most people don’t realize is that today’s AI memory is more illusion than infrastructure. When you have a conversation with ChatGPT, Claude, or any similar model, here’s what’s really happening:</p><p><strong>Every single message you send – along with the entire chat history – is reprocessed every time.</strong></p><p>That’s how the system understands context. There’s no persistent memory. No long-term knowledge. And this mechanism has hard limits. For example, GPT-4 Standard might support 8,000 tokens per request (~15-20 pages of text). That includes everything you’ve said before plus your latest input. Once you hit that limit, things get forgotten – cut from the conversation as if they never happened.</p><p>For example, GPT-4 Standard supports around 128k tokens for the context window (equivalent to 200 pages of text). That includes everything you’ve said before plus your latest input.&nbsp;</p><p>Close the chat window? That entire context vanishes. Open a new one? You're back to square one. This is why AI feels like déjà vu. You’re always re-teaching, re-prompting, resetting preferences. And as interactions get more complex or span across tools, the cracks start to show.</p><p>200 pages of memorized context may sound like a lot, but over the years or following large amounts of context, it’s not nearly enough. “<em>I’ve noticed that the new model seems to very often forget what we were talking about even 2-3 messages above. […]&nbsp; It’s as if it’s focusing 100% of its attention to my last message and forgets the bigger picture.</em>” And <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://community.openai.com/t/gpt-4-turbo-2024-04-09-forgets-previous-messages-in-the-chat-solved-coding/715801?utm_source=chatgpt.com"><u>this user</u></a> wasn’t alone, struggling with managing GPT-4 Turbo’s memory.&nbsp;</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/61286ef26c2104f68b7bb48d94f52dae.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAICAIAAAAX52r4AAAACXBIWXMAABYlAAAWJQFJUiTwAAABSElEQVR4nI2SsYqDQBCGp7TwBWwkTQiCpNrusMkLiCCCpZUIwTaPYGWVRkiZTtJa2diJYCsEAlsJgiAEBGFBmOP0kL0Ywn3V7OzM/DPMAHKM/wAnGGOzPY4jby91lprAC/DffPTMOnlN13Vt2/KePwKU0iiKkiS53W79BKW0aZqu6+q6fj6flNJhGBhjp9MpiiJEfDwevu/neY6IZVlalmUYRpqmSyu/AvMjTVMAEAQBACRJUhRFFEVZlvf7/Xa7lWXZNE1N04qiAABN01zXJYQAQBAEiOj7fhiGl8vFcZz3Avf7/WtC1/XNZqPruuu6tm0TQlRV9TwvCAKAn5Tj8VhV1W63I4QcDoc4jhHxer0aE+fz+VXg7aoXmzHW9z0i5nmeZdmSPAzDy0qSJInj+NOSl+q8AO9ZHwIfvG73zQSf+XxF87i8wDfNZ4ZaadAjTQAAAABJRU5ErkJggg==" nextheight="74" nextwidth="284" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><br><p>Seen this before on GPT? You’re not alone. This pertains to certain texts GPT tries to keep hold of across conversations, however, even with paid plans, you still run into hard ceilings. Let’s be clear: we’re not talking about a single chat over a few weeks, which can be solved with good prompting. We’re talking about AI that remembers important threads of thought across months or even years.</p><p><strong>Why? </strong>→ Imagine giving your full medical history once, and never having to explain it again. An AI that knows your past symptoms, remembers the patterns, and can tell you <em>why</em> you might be feeling knee pain today – based on what happened last winter. That’s the level of continuity we’re aiming for.</p><p>Yes, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.techradar.com/news/live/openai-chatgpt-feature-announcment-april-2025"><u>OpenAI</u></a> has been working on memory for a while now, having just recently <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/OpenAI/status/1910378768172212636"><u>released the ability to reference past conversations</u></a>. But how scalable is their current solution if, for example, if a chat goes on for years?</p><p>Think of it like a human brain – after ten years of conversation, you can’t possibly remember every detail. Some memories fade, some get distorted, and others morph into stories that never actually happened, just because someone told you they did.&nbsp;</p><p>This is the same challenge AI faces: we need systems that can intelligently decide <em>what</em> to remember, <em>what</em> to forget, and <em>what</em> to surface when it matters most. Selective memory isn’t just a convenience – it’s a necessity.</p><h2 id="h-a-solution-for-long-term-ai-memory" class="text-3xl font-header"><strong>A Solution For Long-Term AI Memory</strong></h2><p>Through our daily work with AI tools at Patchwork, we quickly noticed this memory gap and the limitations it creates.</p><p>We believe the solution lies in a consolidated long-term memory system – a layer that’s maintained across requests and continuously refined. It’s not about sending everything back through the model each time; it’s about having an intelligent system that:</p><ul><li><p>Compresses what it knows</p></li><li><p>Prioritizes what matters</p></li><li><p>Remembers what’s useful</p></li><li><p>Surfaces relevant context at the right time</p></li></ul><p>This kind of memory-first structure is the key to unlocking true AI behavior at scale. It's what makes systems not just responsive, but <em>proactive</em> – capable of growing and adapting alongside the user.&nbsp;</p><h2 id="h-the-future-belongs-to-systems-that-remember" class="text-3xl font-header"><strong>The Future Belongs to Systems That Remember</strong></h2><p>As the industry moves forward, it's clear: memory is the missing ingredient. While many companies are distracted by the glitzy generative capabilities of AI, the true value lies in creating systems that are able to grow, adapt, and learn from past interactions. Not to mention the ethical hurdle of what AI should remember or not.</p><p>The question is: Who will lead the way?</p>]]></content:encoded>
            <author>patchwork@newsletter.paragraph.com (Patchwork)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/77e16ada9fdbbd7a4d3d291687d93887.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[The Hidden Pattern: What Mechanical Engineering’s Past Tells Us About Software’s Future]]></title>
            <link>https://blog.patchwork.dev/the-hidden-pattern</link>
            <guid>fdUFYltuBhDCTvAgYbCX</guid>
            <pubDate>Mon, 07 Apr 2025 18:58:55 GMT</pubDate>
            <description><![CDATA[Behind-the-scenes, software development is undergoing a radical shift, and a clear pattern is emerging that shows exactly what’s next for the tech industry.]]></description>
            <content:encoded><![CDATA[<p>While at ETHDenver 2025, amidst all the usual hype around blockchain and AI, we noticed something different. Developers weren’t geeking out over cutting-edge architecture, they were laser-focused on shipping functional products as fast as possible. </p><p>But this isn’t just about speed, it’s part of a massive shift behind-the-scenes that has actually happened before. Over a century ago, mechanical engineering underwent the same transformation, making technology invisible. This history doesn’t just explain how we got to where we’re at today, but reveals exactly where we’re headed next.</p><h2 id="h-the-cycle-of-innovation-history-repeats-itself" class="text-3xl font-header">The Cycle of Innovation: History Repeats Itself</h2><p>When was the last time you had a conversation about mechanical engineers? It’s been a while, right? </p><p>To jog your memory, in the late 1800s, mechanical engineers were the rockstars of innovation. They built the machines that powered the Industrial Revolution, drafted patents, and ultimately transformed daily life. But today, their work is invisible to most people. You drive a car, use appliances, and rely on infrastructure they all built without questioning the engineering behind them.</p><p>Software is following the same trajectory, only much faster. What took mechanical engineering a century is happening to software in just a decade. And if we follow the pattern, we can see exactly where we are in the cycle:</p><ol><li><p><strong>Specialist Era:</strong> Only experts with deep knowledge can participate (early mechanical engineers, first software developers)</p></li><li><p><strong>Standardization Era:</strong> Common patterns and components emerge, but expertise is still required (standardized car parts, software libraries)</p></li><li><p><strong>Abstraction Era:</strong> Complexity is hidden behind simple interfaces (car dashboards, modern APIs, AI-assisted coding tools)</p></li><li><p><strong>Utility Era:</strong> The technology fades into the background and just works (cars, cloud computing, no-code software tools)</p></li></ol><p>The evolution of websites is a perfect case study:</p><ul><li><p><strong>Stage 1 (Specialist):</strong> Early websites required deep knowledge of HTML, server configurations, and networking.</p></li><li><p><strong>Stage 2 (Standardization):</strong> Common frameworks and templates streamlined the process.</p></li><li><p><strong>Stage 3 (Abstraction):</strong> User-friendly site builders (WordPress, Wix, Webflow) emerged.</p></li><li><p><strong>Stage 4 (Utility):</strong> Websites are now an expected, easily accessible utility for businesses and individuals.</p></li></ul><figure float="none" width="659px" data-type="figure" class="img-center" style="max-width: 659px;"><img src="https://storage.googleapis.com/papyrus_images/29213521f192fa319ce692a1f8b5702d.png" blurdataurl="data:image/png;base64,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" nextheight="1024" nextwidth="1536" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">Building websites in the early '90s vs. today</figcaption></figure><p>According to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://w3techs.com/technologies/details/cm-wordpress">W3Techs</a>, WordPress now powers 43% of all websites, demonstrating how far the web has moved from manual coding to plug-and-play solutions.</p><p>At this pace, we're already in the third era, and with AI advancements, we’re close to approaching the fourth. But what does this mean for the tech industry? And more importantly, how can we prepare for what’s next?</p><h2 id="h-software-engineering-is-stratifying" class="text-3xl font-header">Software Engineering Is Stratifying</h2><p>"Software engineers in the future will be like mechanical engineers of the past," says Rob, our Principal Engineer. "They’ll still be around, but their work will become increasingly specialized."</p><p>Let’s clear up a common misconception: software engineering isn’t disappearing, it’s evolving. And we’re already seeing it break into three distinct layers:</p><ul><li><p>A small elite will work on foundational, cutting-edge systems (think engineers designing the next-gen hardware chips, operating systems, and decentralized protocols that power everything else).</p></li><li><p>Mid-tier specialists will focus on complex applications (fine-tuning fintech platforms, cybersecurity systems, or immersive digital experiences).</p></li><li><p>Traditional programming tasks will be automated or simplified to the point of invisibility (think drag-and-drop app builders, automated cloud deployments, and AI copilots writing entire software applications from a simple prompt).</p></li></ul><p>The main takeaway? As we always do as humans, we simply adapt. Just this adaptation will redefine the role of engineers, opening up a lot more doors than we can imagine.</p><h2 id="h-from-implementation-to-vision-ai-and-the-rise-of-vibe-coding" class="text-3xl font-header">From Implementation to Vision: AI and the Rise of Vibe Coding</h2><p>For the first time in digital history, the main bottleneck isn’t implementation, it’s vision.</p><p>When mechanical engineering became invisible infrastructure, it freed society to focus on using transportation rather than understanding engines. Now, the same is happening with software. Invisible infrastructure refers to technology that is so seamlessly integrated into daily life that users no longer need to think about how it works, it simply functions in the background. The question is shifting from “Can we build it?” to “What should we build?”</p><p>This shift is driving the rise of “vibe coding”, the latest development mindset where AI-assisted tools enable rapid product creation over technical perfection. Unlike traditional software development, where teams of junior engineers write code and senior engineers later clean up technical debt, vibe coding bypasses this cycle entirely.</p><p>But vibe coding isn’t about cutting corners, it’s about achieving high-quality results without getting lost in unnecessary complexity. AI copilots and low-code platforms allow developers to focus on big-picture creativity, rather than manual coding.</p><p>The Gen Z perspective from Klimov, "<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://newsletter.pragmaticengineer.com/p/genz-part-2">The Pragmatic Engineer: Gen Z in Tech</a>", reinforces this shift. Younger developers are less interested in infrastructure perfection and more focused on building fast, functional, and meaningful products. By reducing technical barriers, they’re opening the doors for more people to innovate.</p><h2 id="h-how-this-shift-is-already-affecting-you" class="text-3xl font-header">How This Shift Is Already Affecting You</h2><p>Whether you realize it or not, this transformation is already changing the way you interact with technology:</p><ol><li><p><strong>Economic Democratization:</strong> The cost of creating software is plummeting, opening digital innovation to more people.</p></li><li><p><strong>Reduced Complexity:</strong> The overhead of managing technology is disappearing as systems become more seamless and self-managing.</p></li><li><p><strong>Creative Empowerment:</strong> The tools for building sophisticated digital products are becoming accessible to non-technical people.</p></li></ol><h2 id="h-main-takeaway" class="text-3xl font-header">Main Takeaway</h2><p>The most forward-thinking mechanical engineers of the late 1800s weren’t just submitting patents; they were building the foundation for an era where people wouldn’t need to understand engines at all.</p><p>The same shift is happening with software today. The most strategic developers aren’t just focused on writing cleaner code, they’re designing systems that empower anyone to create without needing to code. This isn’t a prediction. It’s already happening.</p><p>As Rob puts it, "we’re not building tools for engineers; we’re building tools for future creatives. The technical barrier will be lower. Just like how you don’t need to be a mechanical engineer to work on a car, you won’t need to be a software engineer to work on software.”</p><br><p><strong>Now that we've mapped out the past and present, keep an eye out for more blog posts as we chart the future.</strong></p><br><p><em>Cover image: Design drawing for Babbage's Difference Engine no. 2, 1847</em></p><br>]]></content:encoded>
            <author>patchwork@newsletter.paragraph.com (Patchwork)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/4411dfa5a25adbb1813c73128e5f846a.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Breaking Down Web3’s Walled Gardens: How to Unlock True App Composability]]></title>
            <link>https://blog.patchwork.dev/breaking-down-walls</link>
            <guid>EFGEaSmBRd811oQm0nic</guid>
            <pubDate>Thu, 20 Mar 2025 14:52:57 GMT</pubDate>
            <description><![CDATA[Web3 promises composable, permissionless applications – yet today, developers still spend months building siloed infrastructure instead of shipping products that can actually work together. The root cause? Critical app data often lives offchain.]]></description>
            <content:encoded><![CDATA[<p>Web3 promises composable, permissionless applications – yet today, developers still spend months building siloed infrastructure instead of shipping products that can actually work together.</p><p>The root cause? Critical app data often lives offchain. AKA, the metadata that gives assets meaning (who owns what, how it can be used, and how it connects to other systems) is stored in centralized databases, making it hard for others to access, use, or even trust. Think of offchain data storage like saving data onto a private server – it can change, disappear, or become inaccessible. This has turned Web3 into a fragmented landscape of walled gardens.</p><p>What if Web3 apps could actually seamlessly connect, extend, and innovate together? By bringing metadata onchain in an effective and standardized way, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://patchwork.dev/"><u>Patchwork</u></a> makes all this possible, unlocking a new era of collaborative apps. Let's break this down…</p><div class="relative header-and-anchor"><h3 id="h-web3s-walled-garden-problem-why-most-apps-cant-build-on-each-other">Web3’s Walled Garden Problem: Why Most Apps Can’t Build on Each Other&nbsp;</h3></div><p>Walled gardens in tech refer to closed ecosystems where data, apps, and user interactions are restricted within a single platform, limiting interoperability with external systems. In Web3, this issue arises when apps store critical metadata offchain, creating a major roadblock when other apps try to access or interact with it.</p><p>Metadata is often stored offchain for flexibility and to avoid high data storage costs. For individual projects, this may seem like a reasonable tradeoff. But at scale, it creates:</p><ul><li><p><strong>Lack of Persistence</strong> – Offchain data is subject to link rot, server failures, and reliance on third-party hosting, meaning valuable metadata can disappear or be unreliable. While decentralized storage solutions like IPFS and Arweave improve persistence, they do not enable structured composable data models onchain.</p></li><li><p><strong>Fragmentation</strong> – Every app structures its metadata differently, forcing developers to rebuild the same foundations instead of simply leveraging shared, interoperable standards.</p></li><li><p><strong>Limited Composability</strong> – Apps can’t natively reference or extend each other’s data, blocking innovation that could come from developers stacking and remixing existing work.</p></li></ul><div class="relative header-and-anchor"><h3 id="h-the-cost-of-isolation-real-world-roadblocks">The Cost of Isolation: Real-World Roadblocks</h3></div><p>Consider <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/decentraland/offchain-marketplace-contract"><u>Decentraland's marketplace</u></a>: while their virtual assets exist on the blockchain, the trade and auction metadata lives offchain, accessible only through their specific UI. This isn't just a technical detail – it's a fundamental limitation that prevents true ecosystem integration. Other platforms can't programmatically interact with or build upon this marketplace, limiting innovation to single-platform implementations.</p><p>In DeFi, the problem is even more acute. Lending protocols can't access standardized cross-platform reputation data, forcing each to build isolated risk models. A user's excellent track record on one protocol means nothing on another – it's like having to rebuild your professional reputation from zero every time you change employers.</p><p>This isn’t just an inconvenience, it’s preventing Web3 from reaching its full potential. The most powerful breakthroughs in tech happen when builders can build on top of each other’s work. Web2 unlocked this with APIs. Now, Web3 has the chance to go even further <em>if</em> the app metadata is structured onchain in a way that enables efficient discoverability and composability.</p><div class="relative header-and-anchor"><h3 id="h-the-power-of-bringing-apps-onchain">The Power of Bringing Apps Onchain</h3></div><p>Standardized onchain metadata storage is crucial for enabling apps to interact and build upon each other effectively. This foundation creates:</p><ul><li><p><strong>True Interoperability</strong> – Apps can natively access each others’ data instead of duplicating efforts.</p></li><li><p><strong>Persistent Data</strong> – No reliance on centralized servers that can disappear or change data.</p></li><li><p><strong>Stackable Innovation</strong> – Developers can compose new apps by leveraging existing onchain records, similar to how DeFi apps stack protocols like Legos.</p></li></ul><p>Instead of fragmented, isolated systems, a shared standard allows apps to become part of a collaborative, ever-expanding ecosystem where every new development strengthens the network rather than creating yet another walled garden.</p><p>Patchwork makes this possible by providing standardized, queryable metadata schemas that any app can use, ensuring seamless data sharing and interoperability, as well as efficiency for low storage costs.</p><p>More than just a schema, Patchwork’s Protocol actively orchestrates onchain relationships so metadata isn’t just stored, it’s meaningfully connected across apps. To make integration effortless, the Patchwork Developer Kit (PDK) and Patchwork Wizard equip developers with ready-to-use tooling, eliminating the need to build custom infrastructure from scratch. And now with <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://blog.patchwork.dev/building-the-future"><u>text-to-config</u></a>, we're making it possible for anyone to go from idea to working onchain app in minutes, not months.</p><p>All this to say, by building with Patchwork, you can focus on the true purpose of your app rather than spending months building out the data structure of a siloed app – enabling a new era of smarter, more scalable, and collaborative innovations.</p><div class="relative header-and-anchor"><h3 id="h-join-a-new-realm-of-seamless-web3-innovation">Join A New Realm of Seamless Web3 Innovation</h3></div><p>The time for storing important metadata offchain and building walled garden apps is over. The future of Web3 development is here, and it's faster, more accessible, and more powerful than ever before.</p><p>Patchwork is leading the way by not only providing the essential framework that developers need to build rich onchain apps, but also the tools for any creative to build their own app, further driving a vibrant, interconnected Web3 space.&nbsp;</p><p>Stop building in isolation. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.patchwork.dev/protocol/getting-started/introduction"><u>Start building with Patchwork today</u></a>.</p>]]></content:encoded>
            <author>patchwork@newsletter.paragraph.com (Kevin)</author>
            <author>patchwork@newsletter.paragraph.com (Patchwork)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/4d2fe5489f49a80643a56506b10d471a.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Building the Future of Dynamic Web3 Apps with Patchwork]]></title>
            <link>https://blog.patchwork.dev/building-the-future</link>
            <guid>7HhNw357tG6xHltSE0Oh</guid>
            <pubDate>Thu, 27 Feb 2025 17:55:16 GMT</pubDate>
            <description><![CDATA[The onchain world is evolving fast, and with it comes the need for better, faster and more accessible tooling — tooling suites that actually makes building useful, dynamic onchain applications easier. Patchwork is our answer to that need...]]></description>
            <content:encoded><![CDATA[<p>The onchain world is evolving fast, and with it comes the need for better, faster and more accessible tooling — tooling suites that actually makes building useful, dynamic onchain applications easier. Patchwork is our answer to that need: an Ethereum protocol designed to let onchain entities own other onchain entities, all while attaching programmable data in a structured, meaningful way.</p><p>But a powerful protocol alone isn’t enough. If we want to see a world where rich, dynamic applications exist fully onchain, we have to make the building process seamless. That’s why we built <strong>create-patchwork</strong>, and today, we’re taking things a step further with <strong>text-to-config</strong>, an important milestone release on our roadmap to deploying a full no-code development kit.&nbsp;</p><div class="relative header-and-anchor"><h2 id="h-the-fastest-path-to-onchain-apps-create-patchwork"><strong>The Fastest Path to Onchain Apps: create-patchwork</strong></h2></div><p>Building an onchain application isn’t just about writing smart contracts. You need indexers, APIs, deploy scripts, frontends, and a way to manage your data. That’s a lot.</p><p><strong>create-patchwork</strong> takes care of all of that for you.</p><ul><li><p>It’s a full-stack scaffold for Patchwork-based apps.</p></li><li><p>It automates indexers, APIs, deploy scripts, React hooks, and databases.</p></li><li><p>With just a simple project config, you get a fully deployed app on a local testnet—in under two minutes.</p></li></ul><p>If you’re a dev, this means you can go from idea to working onchain app faster than ever before. No boilerplate. No wrestling with infra. Just your app, working, now.</p><div class="relative header-and-anchor"><h2 id="h-introducing-text-to-config-natural-language-to-onchain-apps"><strong>Introducing text-to-config: Natural Language to Onchain Apps</strong></h2></div><p>Today, we’re launching <strong>text-to-config</strong>, a feature that takes create-patchwork and unlocks its potential through a plain language user interface, with little-to-no code required.&nbsp;</p><p>Here’s how it works:</p><ol><li><p><strong>Describe your app in plain English.</strong> No need to write a config file by hand.</p></li><li><p><strong>text-to-config generates a ready-to-go project configuration.</strong></p></li><li><p><strong>Run create-patchwork, and boom—your app is deployed.</strong></p></li></ol><p>It’s a step toward a <strong>no-code</strong> future for onchain app development. We see text-to-config as the 80% automation milestone: the point where developers don’t have to think about config files anymore. And later this year, we’re aiming for full <strong>text-to-app</strong> functionality—where you can describe your idea in natural language and get an entire working onchain app without touching code.</p><div class="relative header-and-anchor"><h2 id="h-the-master-plan"><strong>The Master Plan</strong></h2></div><p>Our goal with Patchwork has always been to remove the gap between developers and creators. Here’s the roadmap:</p><ol><li><p><strong>Build a maximally useful protocol for dynamic onchain apps.</strong> (Patchwork)</p></li><li><p><strong>Make it low-code.</strong> (create-patchwork)</p></li><li><p><strong>Make it no-code.</strong> (text-to-config, and later, text-to-app)</p></li></ol><p>text-to-config is a critical step in this journey. By making onchain application development more accessible, we’re opening the doors for a new wave of builders—whether they’re smart contract developers, product designers, or creators with big ideas and no Solidity experience.</p><p>Onchain apps should be as easy to create as websites. We’re building toward that future, and text-to-config is just the beginning.</p><p>Want to try it? Get started with <strong>create-patchwork</strong> today or catch us at EthDenver next week where Patchwork Principal Engineer, Rob Green, will be opening the conference on Thursday morning with a brief overview and learning session on low-code development. For more visit <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://ed.patchwork.dev">ed.patchwork.dev</a>&nbsp;</p><p><strong><em>Patchwork: Code Less, Build More; Web3 Apps. Fast.</em></strong></p>]]></content:encoded>
            <author>patchwork@newsletter.paragraph.com (Patchwork)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/8e2eef768015c468c2bff8d7d5c4e404.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Introducing create-patchwork]]></title>
            <link>https://blog.patchwork.dev/create-patchwork</link>
            <guid>U8d6zMxWDNtxAVCnkCDX</guid>
            <pubDate>Wed, 18 Dec 2024 14:00:00 GMT</pubDate>
            <description><![CDATA[Today we are introducing create-patchwork, a comprehensive project generator that supercharges the Patchwork Development Kit (PDK) with full-stack application scaffolding. While PDK excels at generating smart contracts, create-patchwork extends this functionality to handle all the infrastructure needed for a production-ready onchain application on Base. Our first batch of builders gave us the feedback that while config driven smart contract generation was useful, there is still a time consumi...]]></description>
            <content:encoded><![CDATA[<p>Today we are introducing <strong><em>create-patchwork</em></strong>, a comprehensive project generator that supercharges the Patchwork Development Kit (PDK) with full-stack application scaffolding. While PDK excels at generating smart contracts, create-patchwork extends this functionality to handle all the infrastructure needed for a production-ready onchain application on Base.</p><p>Our first batch of builders gave us the feedback that while config driven smart contract generation was useful, there is still a time consuming long-tail of services, tools, and deployment infrastructure needed on launch onchain application.</p><div class="relative header-and-anchor"><h3 id="h-generated-components">Generated Components</h3></div><p>Every create-patchwork project includes:</p><ul><li><p><strong>Smart Contracts</strong>: Patchwork-compatible contracts with your defined data models</p></li><li><p><strong>Contract Deployment</strong>: Preconfigured create2 deployers for deterministic addresses</p></li><li><p><strong>Data Infrastructure:</strong></p><ul><li><p>Ponder configuration for event indexing</p></li><li><p>Database schemas for persistent storage</p></li><li><p>Event handlers for processing onchain activity</p></li></ul></li><li><p><strong>API Layer:</strong></p><ul><li><p>tRPC endpoints for type-safe API access</p></li><li><p>Event hooks for real-time updates</p></li></ul></li><li><p><strong>Frontend Utilities</strong>:</p><ul><li><p>React hooks for contract interaction</p></li><li><p>Type safe API integration</p></li></ul></li></ul><p><strong>DevOps:</strong></p><ul><li><p>Docker configuration for service orchestration</p></li><li><p>Local development environment with anvil</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/118b821c48ad734ca188496c7a93d606.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAALCAIAAACRcxhWAAAACXBIWXMAABYlAAAWJQFJUiTwAAACiElEQVR4nJ1SzU8TURCfkyduxnBRmhhOHDDGRL31oHe97AFCPBWQjxoK/aCFZhEhRBpiYvgbTFwVgp4wMXtB4mETElpaut/vbbt1u2W7exAPmo7ZbdHiReIvk8nvzfzeTN7MA/gXeD6MeAMxdN76ULgF/wf8bWzYPx72uJ9A3gK6A8YHULZA3wbyHn5+CcTcH/3F658xjvH90WX7IxRewTEHJQ6O30DpNSjv4MdeoDlX+GKNEANTruNBCA9C7v5VrPch9gR2KfC9+O0afu5FIdCI/Z0rFyk+P39v5+Xttflh1EItsb8l9mNhQBDG7jPMRubu29zNcPhBLjeCyCCCn8WB3d3BqamH2y/ubK6HewdHGMZ/999gGA4AIhOpucxaYvH5RGxpaGgsiDMAMDw8F40vxzNrs+nVNLsRmUq1U+1sZDKZWFyfSa3MpleS2dx4NAMAbJjtngkKggAAj56sziSz6YXsaPTpJLuJiDzPA0CMZUejS/FUNpFaGI+tTExng9/F88FQIpPLj2PP4snFWIIdjy1HptNBFtvoarMPyADHdUaJHLTErq0IZ7sJeCcuAG6c6fcA+SsdMetX68C2bVL9KplWxSwqhiZT06jVypTqFdWoSUqtoTqOUjUUUlAMIhuGrBdUKqqWK9XqWlUyqmXNNMuEqFRUSEk2Tb2il4lGzUOtXm82m+CcnpaJkZfUokqLil7S9NrJyTEheVUrqrRMCKk3ihopKLpIacVplDS9qBJiWXKlkpfUI5UQ25aMal7WiqomGYbR8PVHsi5VqtZ3118AIcTtgthqOY7juq7neY7jiK2WH0W32Wy2uYcepWhZlheAUmrbdps3Gg1N0zzPc11fj4i/ANi5/o4XVGzbAAAAAElFTkSuQmCC" nextheight="824" nextwidth="2458" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><div class="relative header-and-anchor"><h3 id="h-getting-started">Getting Started</h3></div><p>Create-patchwork requires <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://book.getfoundry.sh/getting-started/installation">Foundry's forge to be installed</a>. Once you have forge, starting a new project is as simple as running:</p><pre data-type="codeBlock" text="pnpm create patchwork"><code>pnpm <span class="hljs-built_in">create</span> patchwork</code></pre><p>Alternatively, head over to the Patchwork Wizard to design your application's entities, data model, and relationships and generate your custom application with your exported config:</p><pre data-type="codeBlock" text="pnpm create patchwork patchwork.config.ts"><code>pnpm <span class="hljs-built_in">create</span> patchwork patchwork.<span class="hljs-built_in">config</span>.ts</code></pre><p>From your new project's root, you can deploy and run everything simply by doing:</p><pre data-type="codeBlock" text="pdk dev up"><code></code></pre><p>and shut it down by doing:</p><pre data-type="codeBlock" text="pdk dev down"><code></code></pre><p>PDK is smart enough to understand which generators need to be run again as you start making changes in the codebase, or when you switch networks.</p><div class="relative header-and-anchor"><h3 id="h-this-is-just-the-beginning">This is just the beginning</h3></div><p>With create-patchwork, developing using Patchwork is currently medium-to-low code. All of our codegen is procedural and configuration-driven which gives us two advantages:</p><ol><li><p>We can produce much higher quality and predictable output than wild west LLMs</p></li><li><p>We can easily train models to understand and build Patchwork configuration files, which opens a path where you tell an agent what you want to build and you'll get generated contracts in seconds</p></li></ol><p>As we continue to build out capabilities in our generators and greater tooling suite, we see a clear path from low-code to no-code text-to-app. Watch this space.</p><p>—</p><p>Keen to follow along and build with us? <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/vq43ss25Bu"><strong><u>Join our Discord</u></strong></a>.</p>]]></content:encoded>
            <author>patchwork@newsletter.paragraph.com (Patchwork)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/26d5683bec118f51d425f5f62aa22113.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Onchain Summer Elephants]]></title>
            <link>https://blog.patchwork.dev/summery-elephants</link>
            <guid>uoV2yAlndjpyxj1UpUqr</guid>
            <pubDate>Wed, 24 Jul 2024 17:19:09 GMT</pubDate>
            <description><![CDATA[The onchain summer vibes are strong and the elephants wanted in on the action. Today we are rolling out a new attribute collection to commemorate thi...]]></description>
            <content:encoded><![CDATA[<p>The onchain summer vibes are strong and the elephants wanted in on the action. Today we are rolling out a new <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/collection/elephants-onchain-summer-attributes">attribute collection</a> to commemorate this epic season of building.</p><p>Mint as many as you'd like for free at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://elephants.fun/">https://elephants.fun/</a>. Using a smart wallet? Nice, so are we. And thanks to the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.base.org/tutorials/gasless-transaction-on-base-using-a-paymaster/">Base Paymaster</a>, we'll even cover the gas for you.</p><p>If you already have an elephant, you can swap out attributes to get in the onchain summer spirit. Or build a brand new one from your freshly minted attributes.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/22996b5cca339597d8647648e464cbbf.jpg" blurdataurl="data:image/png;base64,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" nextheight="2160" nextwidth="2160" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Just like when we launched our previous freebie pack, Patchwork made extending an existing project brain dead simple.</p><pre data-type="codeBlock"><code><span class="hljs-comment">//Add onchain summer attributes contract to elephants scope</span>
patchworkProtocol.addWhitelist(<span class="hljs-string">"elephants"</span>, <span class="hljs-keyword">address</span>(summerAtty));
<span class="hljs-comment">//Register contract as assignable to the elephant contract</span>
elephant.registerReferenceAddress(<span class="hljs-keyword">address</span>(summerAtty))
<span class="hljs-comment">//Turn on free minting</span>
patchworkProtocol.setMintConfiguration(<span class="hljs-keyword">address</span>(summerAtty), IPatchworkProtocol.MintConfig(<span class="hljs-number">0</span> <span class="hljs-literal">gwei</span>, <span class="hljs-literal">true</span>));
<span class="hljs-comment">//Jump in the pool</span></code></pre><p>Did you make an elephant that you are particularly proud or ashamed of? Hop into our <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/Sua9CkQJ">Discord</a> and show it off.</p>]]></content:encoded>
            <author>patchwork@newsletter.paragraph.com (Patchwork)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/8a91c28916006c0447e03c36cd3e9862.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[A wild PLOINK has entered the chat]]></title>
            <link>https://blog.patchwork.dev/introducing-ploink</link>
            <guid>68CIOPejRtz6oUYx9nJF</guid>
            <pubDate>Mon, 08 Jul 2024 18:44:26 GMT</pubDate>
            <description><![CDATA[Have you ever wanted an onchain record of a Farcaster cast you really liked? Is tipping someone with real money too mainstream for you? Have you ever wanted to plaster someone's cast with pointless stickers? No? Shit. Well...]]></description>
            <content:encoded><![CDATA[<p>Have you ever wanted an onchain record of a Farcaster cast you really liked? Is tipping someone with real money too mainstream for you? Have you ever wanted to plaster someone's cast with pointless stickers? No? Shit. Well, <strong>Ploink</strong> lets you mint onchain reactions to Farcaster casts using <s>pointless</s> artisanal, community-created sticker packs.</p><p>Ploinking is powered by $ploink points. Each reaction costs a certain amount of $ploink, which Farcaster users accrue by ❶ minting reactions with Ploink, ❷ casting content that other users react to, and ❸ creating sticker packs that people use in their reactions. </p><p>Under the hood, Ploink uses <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://patchwork.dev">Patchwork</a> to mint reactions and assign those reaction records to NFT representations of each Farcaster cast being reacted to. Pretty neat.</p><hr><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><a href="https://opensea.io/assets/base/0xf0000000000d9444eb47db39ec58b4b2884cf501/114" target="_blank" rel="noopener noreferrer nofollow ugc" style="cursor: pointer;"><img src="https://storage.googleapis.com/papyrus_images/94bbeb6000f78a8548688cc0aabee9c9.png" blurdataurl="data:image/png;base64,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" nextheight="1000" nextwidth="1000" class="image-node embed"></a><figcaption htmlattributes="[object Object]" class=""><em>this is a reaction NFT </em><span data-name="woman_shrugging" class="emoji" data-type="emoji">🤷‍♀</span></figcaption></figure><div class="relative header-and-anchor"><h2 id="h-how-to-ploink">How to Ploink</h2></div><ol><li><p><strong>Install the Ploink cast action</strong>:  Add the Ploink cast action to Warpcast and select the <code>React with Ploink!</code> action on the cast you wanna react to.</p><div data-type="customButton" href="https://warpcast.com/~/add-cast-action?url=https://frame.ploink.fun/action-ploink" class="center-contents"><a class="email-subscribe-button" href="https://warpcast.com/~/add-cast-action?url=https://frame.ploink.fun/action-ploink">Install the Ploink cast action!</a></div><p><em>If you don't want to install the cast action, you can always reply to a cast with </em><code>@ploink</code><em> and our bot will reply with a frame for you to use. Lizard brain way to do it but it works.</em></p></li><li><p><strong>Choose your reaction</strong>:</p><ul><li><p><strong>Enter an emoji</strong>:  Pick an emoji to represent your reaction (literally type an emoji into the frame's text input like <span data-name="exploding_head" class="emoji" data-type="emoji">🤯</span>). We've got a default sticker pack with around 3,000 of the most common emojis, but eventually others will add their own sticker packs and you'll be able to type in things like dogface400 or whatever they name their stickers.<em> Our default emoji stickers all cost 10 $ploink to use, but sticker creators can price them however they want.</em></p></li><li><p><strong>Choose how many stickers you wanna attach</strong>:  Set it to more than 1 to make your reaction pop (and also the $ploink cost).</p></li><li><p><strong>Sign the transaction</strong>:  Sign the transaction to mint your reaction on Base.</p></li><li><p><strong>Check your wallet</strong>:  It should now contain a freshly-minted onchain cast reaction.</p></li></ul></li></ol><div class="relative header-and-anchor"><h2 id="h-where-does-the-dollarploink-go">Where does the $ploink go?</h2></div><p>When you react to something the $ploink is distributed as follows:</p><ul><li><p><strong>10% to sticker pack creator</strong>:  Good job for making the sticker.</p></li><li><p><strong>50% to the OG of the content</strong>:  Good job for making the cast.</p></li><li><p><strong>40% burnt</strong>:  Sent off to the void. We aren't really sure why.</p></li></ul><div class="relative header-and-anchor"><h2 id="h-how-can-you-get-dollarploink">How can you get $ploink</h2></div><p>We seeded $ploink to all Farcaster users using a very advanced mathematical formula: The number of times you've liked something on Farcaster * 100, with a floor of 500 and a max of 10,000.</p><div class="relative header-and-anchor"><h2 id="h-how-can-you-get-more-dollarploink">How can you get more $ploink?</h2></div><ul><li><p><strong>Use Ploink!</strong>: The best way to get more $ploink is to actively use it. 50% of every reaction cost is rewarded back to the reactor's main balance daily. Additionally, 100% of the reaction cost is sent to a reactor's temporary bonus balance (over the course of 2 days) which is spendable for seven days before it vanishes. Spends from the bonus balance still get 50% rebated to the main balance daily, allowing you to accumulate $ploink by minting reactions daily.</p></li><li><p><strong>Post good (or bad?) content</strong>:  Share content on Farcaster that gets reacted to and watch your $ploink stack grow. </p></li><li><p><strong>Create deranged sticker packs</strong>:  The more your sticker packs get used, the more $ploink you get.</p></li><li><p><strong>Beg the Ploink bot</strong>:  If you can't manage any of the above, you can always beg the Ploink bot (using <code>@ploink beg</code>) and it's possible someone will take pity on your soul.</p></li></ul><div class="relative header-and-anchor"><h2 id="h-how-can-you-get-even-more-dollarploink">How can you get even more $ploink</h2></div><ul><li><p><strong>Follow the </strong><code>/ploink</code> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://warpcast.com/~/channel/ploink"><strong><u>channel</u></strong></a>:  +100 $ploink.</p></li><li><p><strong>Follow the </strong><code>/patchwork</code><strong> </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://warpcast.com/~/channel/patchwork"><strong><u>channel</u></strong></a>:  +100 $ploink.</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://warpcast.com/patchwork">Follow</a> <code>@patchwork</code> on Farcaster</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/UaepB4UJ"><strong><u>Join our discord</u></strong></a><strong> and post your FID in the #ploink-boost channel:</strong>  +100 $ploink.</p></li></ul><p></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/90b00b4e1a9eceb94671803cc52450e6.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAIAAAD4YuoOAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEyklEQVR4nIWUXWxTZRjHTzfa7rSnH/toT9tzznva0/a03VnX0q5d13arHVA+ZEUIZsBWGZ04RkLAzbAhH6KomPERMQQ1uxhRFDIhCpolhHghaEyAiTdEwaDCjTEoJF5AMMS/OZtCYCYmz8V78bzP732f5//8KTvj9nFhYg+46nxcnd9p9XJ1fjWsksvsaRbnxd1P1NGC3SjODNYoOhjCTp0rKzmdjtdWOqs0dkbD1lT6HYaQp1aiPM7QS1tfW9ezodzV17PyueLCzs4l3cWO7mX5+Rvj8RMDPx8fuFit5WaWZo2izSDq9YKdFq0G93Ay1qc07Mvnu4rd8+cs6evcfGlo6HZXglIvMG6XRTIxktkk8TVeh1mqMXuf8Sl/5pNpZ8isd7PGR35QbRBrDKLVIHoYdxcXrNDyhxcnMdSKTSn0pW6ViplQ6urmAl5NoCypANYoGvVCOSCvlWVax1kM5PTiNDoTKEV/LLXZDbzNoOZMZ9oYUbZ6/GYPbRCPZSMopcY70ncHQtgu45AXB5ULK1Nphw8HfTgi43CDCnCaCUWRT8rBM89HKYrP+0IYzKHXh6EAxpb1p2NaDcdb3E613QJVwa0mQeRSu7NJ9M/Gfi+OLMSYjNMRXEvgfK6nqZEzev8aa8W9DK5mKAdDDDRZ45KPLGr5vid7Mh7+rZi7O5DAKwQnQjhXwJbMUsFPaVyVOpdo8mwPR77rSGBVGDuL2NWMC1FMtvy0ow3XEzib3pAL0lqe0Qn5YP2lA8mP1ocprZbvDStY34rBLHqDKCtY035zIITxIK404VYLTrVO5lrW+pWhWGQiEUEpj3Ux9HvwThZjHRdfTHbn6i1a96pUY97n11K8nSEOhjA6gaY8VZRAURruwJxG7IjceVnAfgmj2S/LhRPFFhxN45skPm99e3kSTybQn1efXFKwLouNcYx4cDaKy21DeYWiXE4z0VEcoyNOM5kWgipfk+BgCGWiSYbz3R7M4LSiNvHT3Ff9uRu9OfQnMZjAtuKVJW1YEcZ6BYeewoG5eHMxRrL4MIAfmnA/u7sY0c3iXWbRZVaLztwVdQZaLZ/hQxhtx7Xk7/vD9/alMRjDVkFVwvhSDM1DWcZONybSmGjHsXbsLWA0grMtF/ZkpWpfLS1YGdFCq52ZyVABJj2fFwMYUHAyV2gMdkoy3vDg4xDOx3F8Ll4v3Nkg4V0fvo3hZgrjSXzWhqOFFZFGHSXW0sRmEKPVkmLzVWl5Rs8/xqBYo1hLC5JVuvaCjC8acorfqZduDScxGcMfabwf/WVLFsNTM78cVwHn5uPX5reenq2hONZEXIxI6fg9cgNWZr5e3d7MyYZZausfAqbXx6wn/lpfPeu36omFJmE2sHd5YnwgtSymsFXiBwsasSeO97KTw+03drWOdMeZSre6egyppolU553sSOBZP47n74/mwk6PhSb2fxlTVjHFqKaJlSY2ZprHV1B8BUXoSr6WFhmd2MTWB2plWiOYtaKO4m2Mah6sUayjBdYiXe/JYpuIiXrcy2xapFRQ/AM5/QOYcqSHWDvjdppVzU2bJWsUTXq+emqM0zJ/cMs5pZFSYwO2BnGmAaeyTZ6ASSc8/oP/jQe2/B/BEEZPFrjlnbnZUYds0D4yg78BikmrwntVvMkAAAAASUVORK5CYII=" nextheight="1000" nextwidth="2000" class="image-node embed"><figcaption htmlattributes="[object Object]" class=""><em>this is what your reaction looks like when our bot fires it into Farcaster</em></figcaption></figure><div class="relative header-and-anchor"><h2 id="h-whats-next">What's next?</h2></div><ul><li><p>Sticker publishing tools, templates, and guides <span data-name="exploding_head" class="emoji" data-type="emoji">🤯</span></p></li><li><p>Ways to augment your own cast replies or quote casts with reactions, rather than having them be separate and from our bot <span data-name="face_with_monocle" class="emoji" data-type="emoji">🧐</span></p></li><li><p>More sticker packs</p></li><li><p>Leaderboards</p></li><li><p>UI on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://ploink.fun">ploink.fun</a> to get a full look at the chaos</p></li><li><p>A whole lot of other stuff... <span data-name="eyes" class="emoji" data-type="emoji">👀</span></p></li></ul><div class="relative header-and-anchor"><h3 id="h-faqs">FAQs</h3></div><div data-type="details" class="details"><p data-type="detailsSummary" class="detailsSummary"><span style="margin-right: 8px">▼</span><strong>Uh, why?</strong></p><div data-type="detailsContent" class="detailsContent"><p>Why not.</p></div></div><div data-type="details" class="details"><p data-type="detailsSummary" class="detailsSummary"><span style="margin-right: 8px">▼</span><strong>These reactions are really minted onchain?</strong></p><div data-type="detailsContent" class="detailsContent"><p>Yeah, fully onchain on Base. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/collection/ploink-reaction">https://opensea.io/collection/ploink-reaction</a></p></div></div><div data-type="details" class="details"><p data-type="detailsSummary" class="detailsSummary"><span style="margin-right: 8px">▼</span><strong>Is $ploink a token?</strong></p><div data-type="detailsContent" class="detailsContent"><p>Not at the moment. Our plan is to get them onchain in the future, but they are just points in a database for now. We'll let the community help decide what onchain form they take.</p></div></div><div data-type="details" class="details"><p data-type="detailsSummary" class="detailsSummary"><span style="margin-right: 8px">▼</span><strong>Is this only for Farcaster?</strong></p><div data-type="detailsContent" class="detailsContent"><p>Currently, yes. One day you'll be able to react to a bunch of other things but we're starting with Farcaster casts for now.</p></div></div><div data-type="details" class="details"><p data-type="detailsSummary" class="detailsSummary"><span style="margin-right: 8px">▼</span><strong>I'm a nerd, how does it actually work at a technical level?</strong></p><div data-type="detailsContent" class="detailsContent"><p>Ploink is built on Patchwork, a protocol and set of base contracts that make it easy to create rich, evolving datasets onchain. When someone reacts to a cast, we mint that cast's FID+hash as an NFT stub (`FarcasterStub.sol`) that Patchwork can interact with. Once the stub is minted, we have another contract (`PloinkPatch.sol`) that mints a soulbound NFT and "patches" it to the cast stub. This patch acts as a container that holds Ploink data on behalf of the stub— reactions, specifically. For the actual reaction items, these are minted from our final NFT contract (`PloinkReaction.sol`) and get irreversibly assigned to the Ploink patch (but still owned by the minter). Each reaction mint contains a record of the sticker used, sticker quantity, cost, etc. and gets its own unique artwork.</p><p>The stub and patch get minted atomically when a cast receives its first reaction.</p><p>While there was nothing stopping us from directly assigning reactions to the cast stub, we thought it'd be cool if the stubs were app-agnostic entities that anyone could create their own patches for, with Ploink (via our Ploink patch) being just one of many apps that use the stubs as a canonical onchain representation of a cast. We'd love to see a bunch more app-specific patches that get patched onto those stubs.</p><p>If you have no idea what any of the above means, check out <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://docs.patchwork.dev">docs.patchwork.dev</a> to dig into Patchwork's superpowers.</p></div></div><div data-type="details" class="details"><p data-type="detailsSummary" class="detailsSummary"><span style="margin-right: 8px">▼</span><strong>I didn't RTFA. How do I get more $ploink?</strong></p><div data-type="detailsContent" class="detailsContent"><p>React to stuff, cast primo stuff that people react to, or create a based sticker pack that all the cool kids use.</p></div></div><div data-type="details" class="details"><p data-type="detailsSummary" class="detailsSummary"><span style="margin-right: 8px">▼</span><strong>"This is the dumbest thing"</strong></p><div data-type="detailsContent" class="detailsContent"><p>Def let us know how we can make Ploink better. Or if dumber == better, let us know how we can make it absolutely max stupid.</p></div></div><p></p><div data-type="callout" type="tip"><div class="callout-base callout-tip" data-node-view-wrapper="" style="white-space:normal"><img src="https://paragraph.xyz/editor/callout/tip-icon.png" class="callout-button"><div class="callout-content"><div><p><strong>Interested in creating a sticker pack for Ploink?</strong> We're building sticker publishing tools to make this super easy, but we need some guinea pigs to help us out. For now, join our Discord and let us know you're interested in creating a pack!</p></div></div></div></div><p></p>]]></content:encoded>
            <author>patchwork@newsletter.paragraph.com (Patchwork)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/bbf6524656a9584ce63313230b8e9200.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Elephants Freebies!]]></title>
            <link>https://blog.patchwork.dev/elephants-freebies</link>
            <guid>5tSG2Ir8S1p0JZdr3GzN</guid>
            <pubDate>Thu, 09 May 2024 18:30:47 GMT</pubDate>
            <description><![CDATA[A little over a month ago we launched Elephants.fun and Canvas alongside Patchwork to show off some examples of the sort of onchain, composable projects that Patchwork enables...]]></description>
            <content:encoded><![CDATA[<p>A little over a month ago we launched <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://elephants.fun"><u>Elephants.fun</u></a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://canvas.patchwork.dev/"><u>Canvas</u></a> alongside Patchwork to show off some examples of the sort of onchain, composable projects that Patchwork enables right out of the box. We've loved seeing the Elephants that people are creating and sharing, but by far the biggest complaint we've heard is that, with the current randomized trait minting flow, it can be frustrating to mint a bunch of traits and still not have all of the required traits types (Background, Base, Eyes, Mouth) to build an Elephant.</p><p>To address this, we deployed a new <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://basescan.org/address/0xbaDbEeEEEEef7D9269C4648Cd507630233503159"><u>freebie trait contract</u></a> with a special <code>mintBatch</code> function that mints you exactly one Background, Base, Eyes, and Mouth from a new set of trait visuals. This new contract lives right alongside the existing one for our premium traits, and both interact with the Elephants contract and app in the exact same way. Be warned: these freebies are very boring and you'll want to swap them out to cheer up your sad mammal, but this should get you started.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ad0e0426a8c8eb09fb564b1bc1ffce49.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAATCAIAAAB+9pigAAAACXBIWXMAAAhOAAAITgGMMQDsAAAFN0lEQVR4nKWVX0xTVxzHzxOJD9P478FEJTGNmGp8aUiUZOuDD8sSk8VsxX90qB3KGDizRba5ucbpMiUCmm04hYBmQrGApYXSXm7b2/be3t5723t72957+5dS/pQ/5Y8MylRwu4uUscEW9+D36eT8Tr6f88s553sAeD2JooggiPiXXrVOFEW1Wo0giEKh4Djuqfg0k8ksLCwsLi4+fy7Ozc1Pz8yOTzyZnJ4RxVEAgFqt/rdjdnItTL2k7Fir1WZ5qfGpVHommZpIDI33DY6NTMzO/PZiOrM4NjU3Pz8JAEAQBAAwlEoNDI8sLi7+TwcrTSQSA/pus67bHEumYLuLCycQwkcLSSoYNZisrY+74gOjs7NTK9uMxfq5yCAdCFM+gQ/1xeKDI2PpZ8+ereJNT0+3duhv1zVc+b7m0y+unK34/OLlq7AN/ea76qbmtq5eeyA66PKwd+9rHjzq4sOJcKyf5aNCpC+WGIjGk6FIwunyYKSP8glcJMmF+10eP+vnR0fTy4B4PH752s0jx1WFynPHikvfP1lSdqHSgXvua41NGn39/RYH7sUIut1gfqiDdD1WiuFQIkAwAkb6MJJNptIuksFIhvLxHlZwUT7YgnKBCM+HlwGhUOhG7U+FynPFJRXKD8uPFX9Uer5Sb7Y1aHSaTshowSCL3c/HnG7vvYePtXqI8gVdpJ/wBnGPHyV9HlbA3F4bRhF0kAmGnbiH9gTCfARG4WXA8LDw48+Nx09/XKQqL1KVnzj90ZnSCxhBN7d3N7XqIIe7VWfuMtucpK/NABN0kPCybjpIB8IIRhpMVhtKoi6K5aMEHeDCcY+fD0f6+UAoe64vrxAA4EHLo9JPvjxxukypKj+pKlOqytwelvQJXDjBBCPXqmpv3q6zoqQQGyAoBnMRboolmeCdu/WGHhh303aM0nYaYQTzC3EPywf4WNAfXAZkz9oEwecvqo8Wly41UXH8VKnVjg+NPfEGo0Sgr/5h27fXayCn181G7S7C3Gtz4F6Wixh6eu0oSXsDVjsO2Vyw3cVyUZRgBD6G48QqQA8EfXXlRuEHpcUlFafOXSgsKoEsjqHRSToYjQ2m+1MTyVT61/kFhovquq1WJ+72+lk+SvkEGMEJgtZ2Gjv0JpPF6fYGUDfNsrxWq1vdQWfnzdt3jhxTKYrOvlekevvdo63t+v6BEcYvjKdf3vpMJjMzMwMjqLaj2466MZLhI/0EHbQ6cIL0GHuRzh64vctsdeBWBx7gBBNkWQVobq672/hL+WdfX71xS9NuYFhuZHRseHj4UZvuh7r6mppbLS2abpOlrUPvwPAuE4y4KA/L+0NxxEnAVkdqZFQUxRe//0H5OAdOG4zQ3r17V71hAEA01jc9+zSRTM1l5udmZzEMq66tPVNc/GZBAQAA6rVQTEAIRSanplYeaiiSgBB3jwmuqqryepmJiXSvxanrsjoc+Irt34COjg4b4rjX0PDO4cPr169fwefk5AAAlErlpUuXrl+vamxsMBqNLhT1+32PdYamB80aTRsAYNOmTQCAQ4feqq6uqqysXBtEMpnsn6br1q2TSCR5eXkSiSQ3N1cqlb4ixN7Iydm3b19+fv6OHTuyMxs3bpTL5WtjtqCg4ODBg7t37961a9fWrVu3b98ulUrlcnk2a2Uy2c6dO/fs2SORSPbv35+fny+TyfLy8rZs2bJhwwbJkrZt27Z58+bc3NwDBw6sTVZRFOVyedZRoVCsKWe/CrlcLluSVCrNOmarUql0Zb1arVYoFP/5VbyWXmH3J7XIoFrLtwE1AAAAAElFTkSuQmCC" nextheight="1249" nextwidth="2132" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Extending Elephants and configuring this onchain via Patchwork required just 3 calls:</p><pre data-type="codeBlock"><code><span class="hljs-comment">//Add new starter contract to elephants scope</span>
patchworkProtocol.addWhitelist(<span class="hljs-string">"elephants"</span>, <span class="hljs-keyword">address</span>(traitStarter));
<span class="hljs-comment">//Register new trait contract as assignable to the elephant contract</span>
elephant.registerReferenceAddress(<span class="hljs-keyword">address</span>(traitStarter))
<span class="hljs-comment">//Turn on minting, with a fee of 0</span>
patchworkProtocol.setMintConfiguration(<span class="hljs-keyword">address</span>(traitStarter), IPatchworkProtocol.MintConfig(<span class="hljs-number">0</span> <span class="hljs-literal">gwei</span>, <span class="hljs-literal">true</span>));</code></pre><p>This was a trivial amount of work to extend an existing collection with traits from an entirely new contract, and it's easy to see how fun this could get. As scope owners, we could whitelist community trait packs, or special trait contracts for events or partnerships. Or, we could turn the scope owner into a DAO and let the community decide. Trait contracts could themselves have their own quirky rules and logic, but compose nicely with the main Elephants contract. And if it turns out people don't like the Elephants contract, they could fork it and make any of these traits assignable to their own contract.</p><p>Give it a shot and show us what you come up with! Mint your free starter pack at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mint.fun/base/0xbadbeeeeeeef7d9269c4648cd507630233503159"><u>mint.fun</u></a> on or <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://elephants.fun"><u>Elephants.fun</u></a>. And if you're building a project of your own that can benefit from the composability and extendability Patchwork provides, jump in <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/vq43ss25Bu"><u>our Discord</u></a> and noodle with us.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/441bfba53684fc727451d5096b8237d3.gif" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p></p>]]></content:encoded>
            <author>patchwork@newsletter.paragraph.com (Patchwork)</author>
            <category>patchwork</category>
        </item>
        <item>
            <title><![CDATA[Technical Case Study: Elephants]]></title>
            <link>https://blog.patchwork.dev/elephants-case-study</link>
            <guid>QRF0CpCg3nkCfpatqflB</guid>
            <pubDate>Wed, 27 Mar 2024 22:48:38 GMT</pubDate>
            <description><![CDATA[We developed Elephants, a dynamic and composable PFP, to show off the power of Patchwork. With Elephants, attributes get minted as Fragment NFTs whic...]]></description>
            <content:encoded><![CDATA[<p>We developed Elephants, a dynamic and composable PFP, to show off the power of Patchwork. With Elephants, attributes get minted as Fragment NFTs which are able to be assigned and unassigned to an Elephant NFT. This post is a deep-dive on some of the technical work that brought Elephants to life.</p><div class="relative header-and-anchor"><h2 id="h-configuration-and-contract-logic">Configuration and contract logic</h2></div><p>Let’s take a look at the contract configuration JSON files:</p><p><strong>Elephant.json</strong></p><pre class="dont-break-out text-sm md:text-base"><code class="language-json">{
   "scopeName": "elephants",
   "name": "Elephants",
   "symbol": "ELEPHANT",
   "schemaURI": "https://elephants.fun/schemas/elephant.json",
   "imageURI": "https://elephants.fun/assets/elephant/{tokenID}",
   "fields": [
       {
           "id": 1,
           "key": "attributeLiteRefs",
           "type": "literef",
           "description": "The attributes equipped by this elephant",
           "arrayLength": 8
       },
       {
           "id": 2,
           "key": "name",
           "type": "char32",
           "description": "Name"
       }
   ]
}</code></pre><p><strong>Attribute.json</strong></p><pre class="dont-break-out text-sm md:text-base"><code>{
   "scopeName": "elephants",
   "name": "Elephants: Attributes",
   "symbol": "ATTRIBUTE",
   "schemaURI": "https://elephants.fun/schemas/attribute.json",
   "imageURI": "https://elephants.fun/assets/attribute/{tokenID}",
   “features”: [“fragmentsingle”, “mintable”],
   "fields": [
       {
           "id": 1,
           "key": "attributeType",
           "type": "uint8",
           "description": "The attribute type (enum)"
       },
       {
           "id": 2,
           "key": "attributeId",
           "type": "uint16",
           "description": "The attribute ID (enum)"
       },
       {
           "id": 3,
           "key": "tier",
           "type": "uint8",
           "description": "Tier"
       },
       {
           "id": 4,
           "key": "name",
           "type": "char16",
           "description": "Name"
       }
   ]
}</code></pre><p>The configurations define two entities: “Attribute”, which has a type enum (reconciled to <code>uint8</code>), ID, tier, and name, and  “Elephant”, with a name and 8 slots for attributes. We can create our Patchwork contracts with PDK by running:</p><pre class="dont-break-out text-sm md:text-base"><code>pdk generate Elephant.json
pdk generate Attribute.json</code></pre><p>Just like that, you have the majority of your application structure written for you. Let’s check out some of the highlights.</p><p><strong>Byte packed metadata</strong></p><pre class="dont-break-out text-sm md:text-base"><code>function packMetadata(Metadata memory data) public pure returns (uint256[] memory slots) {
    slots = new uint256[](1);
    slots[0] = uint256(data.attributeType)
        | uint256(data.attributeId) &lt;&lt; 8
        | uint256(data.tier) &lt;&lt; 24
        | PatchworkUtils.strToUint256(data.name) &gt;&gt; 128 &lt;&lt; 32;
    return slots;
}</code></pre><p>PDK worked out the most efficient way to byte pack your metadata fields in as few storage slots as possible. It also wrote efficient getters and setters that allows for writing multiple fields in a single write.</p><p>While the EVM will pack structs into individual slots, access isn’t always optimal. Explicit packing and access gives the benefit of being able to write to and update multiple fields with a single SLOAD/SSTORE, resulting in onchain gas savings. All schema fields are also described in the generated schema function:</p><pre class="dont-break-out text-sm md:text-base"><code>function schema() external pure override returns (MetadataSchema memory) {
    MetadataSchemaEntry[] memory entries = new MetadataSchemaEntry[](4);
    entries[0] = MetadataSchemaEntry(0, 0, FieldType.UINT8, 1, FieldVisibility.PUBLIC, 0, 0, "attributeType");
    entries[1] = MetadataSchemaEntry(1, 1, FieldType.UINT16, 1, FieldVisibility.PUBLIC, 0, 8, "attributeId");
    entries[2] = MetadataSchemaEntry(2, 2, FieldType.UINT8, 1, FieldVisibility.PUBLIC, 0, 24, "tier");
    entries[3] = MetadataSchemaEntry(3, 3, FieldType.CHAR16, 1, FieldVisibility.PUBLIC, 0, 32, "name");
    return MetadataSchema(1, entries);
}</code></pre><p>This schema functions allows for apps to discover what data is available onchain and access it via conventional ABI or by reading one or all of the storage slots and decoding according to this description.</p><p><strong>EIP-4906</strong></p><pre class="dont-break-out text-sm md:text-base"><code>event MetadataUpdate(uint256 indexed _tokenId);
event BatchMetadataUpdate(uint256 indexed fromTokenId, uint256 indexed toTokenId);</code></pre><p>When metadata changes, 4906-compliant events will allow for indexers and marketplaces to invalidate their cache and pull the latest metadata.</p><p><strong>Data integrity</strong></p><p>The ownership model used for Elephants is a Single-Assignable Fragment with inherited ownership. This is specified by using the feature <code>fragmentsingle</code> in the contract configuration. The default logic built will allow for an Attribute to be minted and owned by a user and then assigned to an Elephant. Once assigned to the Elephant, the Attribute will report the owner of the Elephant as the Attribute owner. This makes the Attributes travel with the Elephant when it's is transferred.</p><p>Data integrity is maintained in unison by the contracts and Patchwork Protocol. The protocol checks both the assignee and assignable for permissions and integrity as well as internal data on assignment and unassignment.</p><p>Patchwork 721s use ERC-5192 to emit lock-related events and handle queries. </p><pre class="dont-break-out text-sm md:text-base"><code>event Locked(uint256 indexed tokenId);
event Unlocked(uint256 indexed tokenId);
function locked(uint256 tokenId) external view returns (bool);</code></pre><p>The default behavior for a Single-Assignable Fragment is to implicitly lock when assigned. A locked 721 cannot be transferred, so once the attributes are assigned to the Elephant, data integrity, ownership and transfers are all handled correctly.</p><p><strong>Assigning Attribute fragments</strong></p><p>In our Elephants contract, we wrote one small piece of application logic for creating Elephants, which we call <em>forging.</em><strong><em> </em></strong>This function does some simple validation (you own the Attributes, you've included one of each of the required Attribute types, etc.) and mints the Elephant for you.</p><pre class="dont-break-out text-sm md:text-base"><code>    function forge(address[] calldata attributeAddresses, uint256[] calldata tokenIds) public returns (uint256) {
        require(
            attributeAddresses.length == tokenIds.length, "Attribute addresses and token Ids must be the same length"
        );

        address owner_ = msg.sender;

        // Mint the elephant token
        uint256 newTokenId = _nextTokenId;
        _safeMint(owner_, newTokenId);
        _metadataStorage[newTokenId] = new uint256[](3);
        _nextTokenId++;

        // Check first to save gas on revert
        _checkRules(owner_, attributeAddresses, tokenIds);

        IPatchworkProtocol(_manager).assignBatch(attributeAddresses, tokenIds, address(this), newTokenId);
        // Emit a forge event that the node can watch for and generate art without waiting
        emit Forge(owner_, newTokenId, attributeAddresses, tokenIds);

        // Return address of and token Id of elephant
        return newTokenId;
    } </code></pre><p>The real magic happens in the call to Patchwork's <code>assignBatch</code> method that updates the assignments &amp; ownership of the Attribute fragments. This has the following implications:</p><ul><li><p>Calling <code>ownerOf()</code> on the assigned Attribute will now return the <code>ownerOf</code> the Elephant token</p></li><li><p>These attributes are locked and cannot be transferred until they are unassigned</p></li><li><p>Transferring the Elephant will automatically update the owner of all assigned Attributes to be the new Elephant owner. In Patchwork since <code>ownerOf</code> is proxied to the assignee owner, we can do this cheaply without actually needing to do an onchain transfer. Patchwork does however still emit cheap transfer logs so that block explorers and indexers are aware of this ownership change</p></li></ul><p>We also have additional utility functions for <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://basescan.org/address/0xbeefbeefbeefd8719828fc887effd1f4c85b2848#code#F1#L121"><u>editing</u></a> and Elephant (lets users swap out attributes and add new ones to empty slots) and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://basescan.org/address/0xbeefbeefbeefd8719828fc887effd1f4c85b2848#code#F1#L236"><u>decomposing</u></a> an Elephant (which burns the Elephant after unassigning all its fragments and makes them transferable &amp; assignable again). You can check all those out in our <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://basescan.org/address/0xbeefbeefbeefd8719828fc887effd1f4c85b2848#code"><u>verified source code on Basescan</u></a>.</p><p><strong>Extending the application</strong></p><p>An Elephant has 8 static slots for attributes but the schema does not specifically define which contract the attributes must be. This is because the deployed contract may dynamically determine this via register calls made by the contract owner. When we deployed Elephants and Attributes, we registered the Attribute contract as a fragment for Elephants. We designed Attributes to give us a number of controls for expansion, however we may not have thought of everything we wanted to do in the future. Should we need a new attribute contract, we can deploy it and register the new attribute contract with Elephant, allowing entirely new functionality or graphics that we hadn’t previously designed.</p><div class="relative header-and-anchor"><h2 id="h-off-chain-logic">Off-chain logic</h2></div><p><strong>Listening for events</strong></p><p>Since Elephants are dynamic, we need to constantly listen for events emitted by the Elephants contract—namely <code>Forge</code>, <code>Change</code>, and <code>Burn</code>—so we can generate images and update the offchain metadata used by OpenSea et al. Here are the emitters from Elephant.sol:</p><pre class="dont-break-out text-sm md:text-base"><code class="language-solidity">emit Forge(owner_, newTokenId, attributeAddresses, tokenIds);
emit Change(owner, tokenId, attrAddresses, attrTokenIds);
emit Burn(ownerOf(tokenId), tokenId);</code></pre><p>And here's a basic event listener using ethers, where <code>elephantContract</code> is an ethers contract instance in our <code>cryptoService</code> class. This watches for the <code>Change</code> event from our contract and calls the relevant functions that handle metadata and image generation.</p><pre class="dont-break-out text-sm md:text-base"><code class="language-typescript">this.cryptoService.elephantContract
.on('Change', async (owner, tokenId, attributeAddresses, tokenIds) =&gt; {
    console.log(`Change event received. owner: ${owner}, tokenId: ${tokenId}, attributeAddresses: ${attributeAddresses}, tokenId: ${tokenIds}`);
    // Call our metadata service to delete old json and create new json file
    ...
    // Call our image service to delete old image and create new svg image
    ...
})</code></pre><p>For basic projects, you'll be able to listen directly to the protocol's <code>assign</code> and <code>unassign</code> events and watch for transfers to &amp; from the null address to get the info you need. Since we're doing a lot of batch operations, we're emitting our own specialized events to make things easier.</p><p><strong>Generating images in realtime</strong></p><p>Generated Elephants images are just a stack of concatenated SVG elements composed from our Attribute SVGs. When we see a <code>Forge</code> or <code>Change</code> event come through, we iterate over the Elephant's array of assigned attributes, grab the attribute's corresponding raw SVG, layer it on top of the previous attribute, and rinse-&amp;-repeat until all the attributes have been layered in.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/600e87a86974b13e7e591159b56fc742.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAHCAIAAADmsdgtAAAACXBIWXMAAAWJAAAFiQFtaJ36AAACHElEQVR4nJWST2sTURTF78pFP4CCO0HUjbQLSwQVaUEhoPgFXIlLpWChuLYbKWJpk6IiSBVpNDUNbaogupWWZNHGxkkgnYZMxjfz5r03ybz5n8c4Mg4Gt57d2ZzfPZcDSNddx3FNy7ds37IpIRhjhJCKEuH/kabrlBDf4p5lu2Z/GA4RQmBzvidJuUopVynlKyVJbhsYD/r9oeuYjKYMQghjjBAysoQQ4+8pI2tgLB22c5XSs+31pcp6vdW0OYfA4vOF1zA1DtkMTE28/LQZ2s7+0dHSt135p5aGCiE8zxNCpIlRFMVxLIRIiqpqFEUiDMNh6Ft89ctHmDwD0xchc3Zho+D3LQhtJwFcuwC3LkM2s7zxzrf45PhVOH7q5o3bjFFZlqMoiRZCKIoiy/IwCBghcRx3Oh1ZluM4TpFaV8lvFQEATp4DGHtSfBPYTtLg0ftVmJ5IG+TKReH7j98W4fT5+89fBVa/0+2OTlb/yOG22j76Fcc9RdEoUarVD/dmGlvbge2ufN6EE2MJ4xgslAuBxcFznN39vdn807mVxYcvcvVWc2CQUrV6aSlX3N0xDaOnqpIk1Wo1SZJSQLPVqn+vNxqNnqJgSr+urc1fz5YXlyljB/LhzOzMXObKg7t3dn4chK4HCCGH2wODcGZyZlJCNF03NM1jjOnJMNK/K4oyGtW/Vtc0TKkphDEYIIQoIZRQ1TR1wxBhiDH+DczjElVx0WUfAAAAAElFTkSuQmCC" nextheight="1000" nextwidth="4522" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>If your SVGs were simple and compact enough (e.g. pixel art), you could easily store your image data and do this composition logic onchain.</p><div class="relative header-and-anchor"><h2 id="h-ready-to-give-it-a-try"><strong>Ready to give it a try?</strong></h2></div><p>Mint some attributes at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://elephants.fun">elephants.fun</a> or on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://mint.fun">mint.fun</a>.  Build your Elephant and join us in Discord to share what you've made!<br><br></p>]]></content:encoded>
            <author>patchwork@newsletter.paragraph.com (Kevin)</author>
            <category>case-study</category>
            <category>patchwork</category>
            <enclosure url="https://storage.googleapis.com/papyrus_images/7c6de60a48fefeb73a4dddb97529e036.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Hello World]]></title>
            <link>https://blog.patchwork.dev/hello-world</link>
            <guid>KQq9J1X8dqBVbibG0kZB</guid>
            <pubDate>Mon, 25 Mar 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Patchwork is a fresh new protocol and accompanying set of tools & standards designed to supercharge onchain entities both new & old with fully onchai...]]></description>
            <content:encoded><![CDATA[<p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://patchwork.dev"><u>Patchwork</u></a> is a fresh new protocol and accompanying set of tools &amp; standards designed to supercharge onchain entities both new &amp; old with fully onchain data. Patchwork makes your data mutable, transferable, interactable by smart contracts, and expressible through a variety of different ownership models.</p><p>Patchwork aims to open a new frontier of data-richness for the EVM, where secondary markets can spring up for the exchange of valuable data records, creators can seamlessly and permissionlessly extend existing onchain IP with their own fresh data, users can swap traits and attributes with their peers, projects can collaborate on and share core pools of data, and creators can continually add to and grow the flavors of data available to their users.</p><p>Patchwork—built by five Coinbase alums with early backing from <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ideocolab.com/"><u>IDEO CoLab Ventures</u></a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.coinbase.com/ventures/"><u>Coinbase Ventures</u></a>' Base Ecosystem Fund—is a complete re-think of how we build and interact in the new internet, empowering tokens, contracts, and addresses with <strong>rich</strong>, <strong>interactive</strong>, and <strong>interconnected</strong> layers of vibrant onchain data.</p><div class="relative header-and-anchor"><h2 id="h-how-patchwork-works">How Patchwork works</h2></div><p>Patchwork works by extending ERC721 with a standardized onchain metadata format and data interaction utilities, effectively turning NFT contracts into database tables where each token represents a row of data. Multiple contracts can be hooked together to create rich datasets with complex relationships between them.</p><p>Additionally, individual pieces of data from a token can be further encapsulated as a separate NFT altogether, allowing for added secondary utility where granular bits can be traded, pooled, loaned, and all the other NFT verbs. Schemas and datasets are dynamic and mutable, ensuring projects can continually grow and adapt their onchain IP.</p><p>Patchwork also introduces the ability to permissionlessly soulbind—or “Patch”—these datasets to other existing onchain entities. Any developer can annotate and extend the onchain world with their own vibrant data, and anyone else can do the same to that developer’s data.</p><div class="relative header-and-anchor"><h2 id="h-key-features">Key features</h2></div><ul><li><p><strong>Fully onchain data</strong> that can be interacted with by any smart contract</p></li><li><p>Data is <strong>efficiently packed</strong> to ensure a low gas footprint, and standardized to maximize interoperability between Patchwork apps</p></li><li><p>Data lives in ERC-721s that have been extended with Patchwork interfaces; data schemas/"columns" and getters/setters live in the contract, and <strong>each "row" of data lives in a token</strong></p></li><li><p><strong>Granular pieces of data</strong> can be discretely encapsulated in their own tokens, allowing for fully-dynamic NFT traits, shared core data pools between projects, etc.</p></li><li><p>Data can be <strong>permissionlessly soulbound</strong> to existing onchain entities, allowing anyone to annotate and extend their favorite projects with their own unique datasets</p></li><li><p><strong>Multiple ownership models</strong> that let you dictate nuanced relationships between data, contracts, and users</p></li><li><p>Fully-audited smart contract extensions + Patchwork Development Kit codegen makes it <strong>easy to start building</strong></p></li><li><p><strong>Data orchestration</strong> handled by Patchwork Protocol to ensure the integrity of your data and adherence to your app rules when that data is interacted with by others</p></li><li><p>Much, much more!</p></li></ul><div class="relative header-and-anchor"><h2 id="h-whats-under-the-hood">What's under the hood?</h2></div><p>Patchwork includes several important parts that work in tandem to allow developers to quickly build rich onchain applications.</p><div class="relative header-and-anchor"><h4 id="h-metadata-standard">Metadata standard</h4></div><p>The future is onchain, metadata should live onchain too. Currently this is rarely the case, and when it is the case, the lack of standardization hurts composability. The Patchwork Metadata Standard makes it easy to read and write gas-efficient onchain metadata that other contracts can consume and interact with. This is generated for developers for free by the Patchwork Development Kit (PDK).</p><div class="relative header-and-anchor"><h4 id="h-contract-extensions">Contract extensions</h4></div><p>Patchwork provides a number of Patchwork-flavored ERC-721 extensions that bake in archetypes for different modalities of Patchwork data and entity relationships. These extensions, especially when used with PDK, make it straightforward to build a wide variety of use cases with varied data lifecycles.</p><div class="relative header-and-anchor"><h4 id="h-entity-relationships-and-application-rules">Entity relationships &amp; application rules</h4></div><p>Onchain entity relationships can be 1:N, N:1, or 1:1. Additionally, entity ownership can be defined as <strong>strong</strong> (ownership gets transferred when the parent gets transferred), <strong>weak</strong> (an entity references another with no ownership implications), or <strong>soulbound</strong> (an attached entity is not transferable). Additionally, Patchwork provides a permission system that sits on top and allows publishers to define rules for what is allowed to attach to or mutate state within their application.</p><div class="relative header-and-anchor"><h4 id="h-patchwork-protocol">Patchwork Protocol</h4></div><p>The protocol orchestrates all of the above, providing a secure and robust foundation for developers to enforce application-specific rules and interactions within the Patchwork ecosystem. It facilitates the dynamic and programmable nature of Patchwork's onchain metadata, enabling entities to evolve and adapt over time.</p><div class="relative header-and-anchor"><h2 id="h-whats-launching">What's launching?</h2></div><p>We have a few exciting things live today:</p><div class="relative header-and-anchor"><h4 id="h-patchwork-protocol">Patchwork Protocol</h4></div><p>Patchwork is live on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.base.org/"><u>Base</u></a> at <code>0x00000000001616E65bb9FdA42dFBb7155406549b</code>.</p><div class="relative header-and-anchor"><h4 id="h-patchwork-development-kit-pdk">Patchwork Development Kit (PDK)</h4></div><p>One of the key advantages of a rule-based protocol like Patchwork is that it allows us to create low/no-code tooling. Our PDK is a CLI tool for developers that allows you to specify your application entities, metadata fields, permissions, and rules in simple JSON, then generates your Patchwork-powered smart contracts.</p><div class="relative header-and-anchor"><h4 id="h-patchwork-flavored-erc-721-extensions">Patchwork-flavored ERC-721 Extensions</h4></div><p>Enhance your projects with our open-sourced interfaces, designed for building Patchwork-compatible projects that manage metadata hierarchies and ownership efficiently. Using PDK? You’ll get these for free.</p><figure float="right" width="420px" data-type="figure" class="img-float-right" style="max-width: 420px;"><a href="https://elephants.fun" target="_blank" rel="noopener noreferrer nofollow ugc" style="cursor: pointer;"><img src="https://storage.googleapis.com/papyrus_images/4c4201ce504df5c086074a2abb74ed94.jpg" blurdataurl="data:image/png;base64,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" nextheight="1350" nextwidth="2400" class="image-node embed"></a><figcaption htmlattributes="[object Object]" class=""><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://elephants.fun">https://elephants.fun</a></figcaption></figure><div class="relative header-and-anchor"><h4 id="h-elephants">Elephants <span data-name="elephant" class="emoji" data-type="emoji">🐘</span></h4></div><p>See one of Patchwork’s ownership models at work. Mint and collect attributes, then assign them to an Elephant to equip. When assigned, they can’t be transferred and ownership is proxied to the owner of the Elephant. When the Elephant is transferred, the entire ownership tree is transferred as well.</p><figure float="right" width="50%" data-type="figure" class="img-float-right" style="max-width: 50%;"><a href="https://canvas.patchwork.dev" target="_blank" rel="noopener noreferrer nofollow ugc" style="cursor: pointer;"><img src="https://storage.googleapis.com/papyrus_images/2e44d62d885c9e31436445b620ac9f9a.jpg" blurdataurl="data:image/png;base64,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" nextheight="1350" nextwidth="2400" class="image-node embed"></a><figcaption htmlattributes="[object Object]" class=""><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://canvas.patchwork.dev">https://canvas.patchwork.dev</a></figcaption></figure><div class="relative header-and-anchor"><h4 id="h-canvas">Canvas 🫧</h4></div><p>Celebrate Patchwork's launch by minting your own commemorative Bubble. You can own and transfer your Bubble, but it remains irreversibly assigned to the Canvas. Have an idea for what the next Canvas should be? Reach out!</p><p><br><br></p><hr><p><br>Take a look at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.patchwork.dev"><u>our documentation</u></a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/vq43ss25Bu"><u>join us on Discord</u></a>. First and foremost, Patchwork was built for developers, so please reach out if you have questions or need help getting started. We can’t wait to build onchain with you.</p><p>— <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://patchwork.dev">patchwork.dev</a><br></p><div data-type="callout" type="tip"><div class="callout-base callout-tip" data-node-view-wrapper="" style="white-space:normal"><img src="https://paragraph.xyz/editor/callout/tip-icon.png" class="callout-button"><div class="callout-content"><div><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/vq43ss25Bu"><u>Join our Discord</u></a> and start building with us!</p></div></div></div></div><p></p>]]></content:encoded>
            <author>patchwork@newsletter.paragraph.com (Patchwork)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/79d023632aa2f5ae394f53773490cbdd.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Something Big Is Coming]]></title>
            <link>https://blog.patchwork.dev/future</link>
            <guid>4c0rr4FjwQg7f9rgXn1a</guid>
            <pubDate>Tue, 27 Feb 2024 16:29:23 GMT</pubDate>
            <description><![CDATA[Onchain data could use an upgrade. The new internet is being held back by its silos. All the rich context and meta-information we associate with blockchai...]]></description>
            <content:encoded><![CDATA[<h3>Onchain could use an upgrade. </h3><p>The new internet is being held back by its silos. All the rich context and meta-information we associate with blockchains and their communities lives far beyond the reach of the EVM. Metadata is often offchain and non-programmable, lying in state in JSON files, buried on centralized servers all destined to be unplugged. Projects themselves exist in isolation, shut off from the dynamic world of creators, remixers, and builders that occupy the block space. </p><p>Emergent metadata standards only help so much, providing important upgrades to the Swiss army knives our backends and frontends rely upon but still leaving smart contracts in the dark.</p><p>Meanwhile, context rules the vibrant internet around us. Knowledge graphs, recommendation engines, social networks, loyalty programs, ad platforms— all fueled by contextual richness, sparked by the ability to annotate and thread new lines between the billions of patches in the internet's quilt. Any individual can help tip the scale, can help draw a bigger picture, can add new colors to the collective palette just by their participation.</p><p>The onchain future needs that same contextual-richness, that same web of relationships, that same ability to have layers of meta-information actively shaped by its audience. Anything less is anachronistic to the internet of today.</p><p>We want to set the new internet ablaze with that philosophy and all the utility it offers. We want to bring metadata to the metaverse.</p><h3>Onchain data for the new internet </h3><p>This is why we're building <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://patchwork.dev"><strong><u>Patchwork</u></strong></a>, a new protocol and set of standards designed to supercharge onchain entities new &amp; old with fully onchain data.</p><p>It's a toolbox of verbs—Create, Attest, Contextualize, Remix, Extend, Collaborate, Evolve—for developers and non-developers alike to jam on anything that lives onchain, without permission. It aims to open a new frontier of data-richness for the EVM, where secondary markets can spring up for the exchange of valuable data records, creators can seamlessly and permissionlessly extend existing onchain IP with fresh metadata, users can swap traits and attributes with their peers, projects can collaborate on and share core pools of data, and creators can continually add to and grow the flavors of data available to their users.</p><h3>Stay tuned</h3><p>Patchwork is a complete re-think of how we build and interact in the new internet, empowering tokens, contracts, and addresses with <strong>rich</strong>, <strong>interactive</strong>, and <strong>interconnected</strong> layers of vibrant onchain data. Get ready to Patch, coming soon to Base.</p><p>— <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://patchwork.dev">patchwork.dev</a><br></p><div data-type="callout" type="tip"><div class="callout-base callout-tip" data-node-view-wrapper="" style="white-space:normal"><img src="https://paragraph.xyz/editor/callout/tip-icon.png" class="callout-button"><div class="callout-content"><div><p>Interested in building on Patchwork? <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/vq43ss25Bu">Join our Discord</a>.</p></div></div></div></div><p></p>]]></content:encoded>
            <author>patchwork@newsletter.paragraph.com (Patchwork)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/efc1b01e6bdd0aba686c6ebc9b99127c.png" length="0" type="image/png"/>
        </item>
    </channel>
</rss>