<?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>Public Artifacts</title>
        <link>https://paragraph.com/@publicartifacts</link>
        <description>A social technology studio exploring community dynamics and public goods

[publicartifacts.xyz](https://publicartifacts.xyz)
</description>
        <lastBuildDate>Tue, 19 May 2026 12:47:49 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Public Artifacts</title>
            <url>https://storage.googleapis.com/papyrus_images/9ae677ebea83ce22eb0c766804cb657fd5ed7fb9c84276df48f0db5bcb52cd32.png</url>
            <link>https://paragraph.com/@publicartifacts</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[Introducing: Open Affiliates]]></title>
            <link>https://paragraph.com/@publicartifacts/introducing-open-affiliates</link>
            <guid>bMq5WeBHAQolr1re2K7Q</guid>
            <pubDate>Thu, 05 Oct 2023 15:37:08 GMT</pubDate>
            <description><![CDATA[How web3 can drive community-aligned growthPublic Artifacts is a social technology studio exploring community dynamics and public goods. This project builds upon our previous initiative, Codebacks, with the aim of using simple attribution methods to create better social dynamics between web3 developers, products, users, and communities.Decentralized FrontendsThere are a number ideologically aligned and practical reasons why decentralized frontends are necessary in web3. Primarily, they reinfo...]]></description>
            <content:encoded><![CDATA[<h2 id="h-how-web3-can-drive-community-aligned-growth" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">How web3 can drive community-aligned growth</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://publicartifacts.xyz/"><em>Public Artifacts</em></a><em> is a social technology studio exploring community dynamics and public goods.</em></p><p><em>This project builds upon our previous initiative, </em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/publicartifacts.eth/CgjqE86lbdRHsz_kL2WbDZeW6YjL0Z0tL8rldJnKqWc"><em>Codebacks</em></a><em>, with the aim of using simple attribution methods to create better social dynamics between web3 developers, products, users, and communities.</em></p><h3 id="h-decentralized-frontends" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Decentralized Frontends</strong></h3><p>There are a number ideologically aligned and practical reasons why decentralized frontends are necessary in web3. Primarily, they reinforce a core promise of blockchains - <em>resilience</em> - against censorship, single points of failure, performance bottlenecks, malicious actors, and even decaying projects and teams.</p><p>But frontends are also the experience layer of applications, with the ability to introduce decentralized applications to new audiences and users with experiences customized for them.</p><p>And yet, most decentralized frontends are developed out of crisis, not opportunity.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/88bef3007afd778d5db168e177a212f59650aaf7a783b54fb0e3c299a8d6e0d4.png" alt="In 2022, sanctions against Tornado Cash took down its primary frontend, spurring numerous &quot;mirror sites&quot; to support the use of the service. " blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">In 2022, sanctions against Tornado Cash took down its primary frontend, spurring numerous &quot;mirror sites&quot; to support the use of the service.</figcaption></figure><h3 id="h-incentivizing-community-frontends-for-distribution-and-discovery" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Incentivizing Community Frontends for Distribution &amp; Discovery</strong></h3><p><strong>Open Affiliates</strong> is a mechanism that allows dApps to reward community members who bring in new users. It borrows from now standard web1 growth paradigms of <strong>referral systems</strong> which incentivize users and the new entrants they bring in with benefits, and <strong>affiliate programs</strong> which reward 3rd party publishers for driving a sale, click or registration through their own audiences.</p><p>Here&apos;s how it works:</p><ul><li><p><strong>dApps launch a rewards pool:</strong> Any dApp, NFT project, marketplace, or DAO can maintain a rewards pool, which can be funded with ETH or any ERC-20 token.</p></li><li><p><strong>Optional referrer parameter</strong>: The incentivized contract function like deposit, mint, etc. would have an optional referrer parameter.</p></li><li><p><strong>Anyone can stake to self-register as a referrer:</strong> Any Ethereum address can register itself as a referrer for a dApp. The stake can be slashed for misuse.</p></li><li><p><strong>Referrers drive traffic from their own frontends:</strong> Referrers host and distribute mirrored or custom interfaces, and build the end user transactions with the referrer parameter set to their registered address.</p></li><li><p><strong>On-chain rewards</strong>: If a referrer is specified on a transaction and is registered, they receive a reward from a dedicated rewards pool.</p></li></ul><p>See the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/Public-Artifacts/openaffiliates">Github repo here for technical implementation</a>.</p><p>Here is a generic example for a DeFi application enabling Open Affiliate deposit referrals:</p><pre data-type="codeBlock" text="   function deposit(uint256 amount) external {
        vault.deposit(msg.sender, amount);
    }

    function depositWithReferrer(uint256 amount, address referrer) external {
        vault.deposit(msg.sender, amount);
        uint256 reward = calculateReward(amount);
        referralRewardsPool -= reward;
        referrerRewards[referrer] += reward;
    }

    function calculateReward(uint256 amount, address referrer) internal view returns (uint256) {
        if (!registeredReferrers[referrer]) {
            return 0;
        }
        // Example: 1% reward
        return amount / 100;
    }
"><code>   <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">deposit</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> amount</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> </span>{
        vault.deposit(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>, amount);
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">depositWithReferrer</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> amount, <span class="hljs-keyword">address</span> referrer</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> </span>{
        vault.deposit(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>, amount);
        <span class="hljs-keyword">uint256</span> reward <span class="hljs-operator">=</span> calculateReward(amount);
        referralRewardsPool <span class="hljs-operator">-</span><span class="hljs-operator">=</span> reward;
        referrerRewards[referrer] <span class="hljs-operator">+</span><span class="hljs-operator">=</span> reward;
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">calculateReward</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> amount, <span class="hljs-keyword">address</span> referrer</span>) <span class="hljs-title"><span class="hljs-keyword">internal</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>) </span>{
        <span class="hljs-keyword">if</span> (<span class="hljs-operator">!</span>registeredReferrers[referrer]) {
            <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
        }
        <span class="hljs-comment">// Example: 1% reward</span>
        <span class="hljs-keyword">return</span> amount <span class="hljs-operator">/</span> <span class="hljs-number">100</span>;
    }
</code></pre><p>The first function shows that deposits can still work as expected, without a referrer.</p><p>The second function shows that, if a deposit specifies a referrer, it verifies that referrer is registered, and, if so, moves tokens from the rewards pool to the referrer’s claimable balance.</p><h3 id="h-versatility-across-web3-applications" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Versatility Across Web3 Applications</strong></h3><p>The <strong>Open Affiliates</strong> system is versatile enough to drive new experiences and adoption through various web3 applications. For example:</p><ul><li><p><strong>DeFi:</strong> Incentivize alternate frontends, aggregators like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://idle.finance/">Idle Finance</a>, and structured products that drive new deposits for underlying protocols.</p></li><li><p><strong>NFTs</strong>: Curators and other tastemaker sites, like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/dave_krugman?s=20">Dave Krugman’s</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://allships.co/"> Allships</a> publication, can earn rewards for listing NFTs for mint on their sites</p></li><li><p><strong>Marketplaces</strong>: Reward users for referring sales or new product listings.</p></li><li><p><strong>DAOs</strong>: Encourage member referrals to grow on-chain communities like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.seedclub.xyz/">Seed Club</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.shefi.org/">SheFi</a></p></li><li><p><strong>Decentralized Social and Consumer Apps</strong>: Reward alternate registration sites that bring new members to your platform.</p></li></ul><h3 id="h-addressing-potential-abuse" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Addressing Potential Abuse</strong></h3><p>One challenge with such systems is the potential for abuse, especially Sybil attacks where one entity can act as both referrer and end user. dApps that reward temporary or reversible actions (like deposits) should be aware of potential abuse. Future implementations could incorporate lock periods, periodic snapshots, and other safeguards that have been developed to prevent rewards farming abuse. However, for permanent actions like mints and purchases, this shouldn’t be an issue.</p><h3 id="h-community-aligned-growth" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Community-Aligned Growth</strong></h3><p><strong>Open Affiliates</strong> offers a powerful tool for dApps looking to incentivize community-aligned, and led, growth. By rewarding those who bring in new users, we can drive the decentralization and proliferation of web3 apps and experiences.</p><p>If you’re interested in testing an implementation, or in exploring these kinds of community dynamics, please <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/publicartifacts">reach us in our DM’s.</a></p><div data-type="subscribeButton" class="center-contents"><a class="email-subscribe-button" href="null">Subscribe</a></div>]]></content:encoded>
            <author>publicartifacts@newsletter.paragraph.com (Public Artifacts)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/f0cc6c229586db8b2e55409c9dc824f49957fd97c6e5d950a8d53eec7737dfd7.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Introducing: Codebacks]]></title>
            <link>https://paragraph.com/@publicartifacts/introducing-codebacks</link>
            <guid>DtMFYO595hgRXFDZCxlS</guid>
            <pubDate>Fri, 04 Nov 2022 16:22:57 GMT</pubDate>
            <description><![CDATA[An on-chain citation standard for open-source codePublic Artifacts is a social technology studio exploring community dynamics and public goods. This project demonstrates a new primitive for abstracting, monitoring, and rewarding open-source software through citations, inspired by Toby Shorin & Tom Critchlow’s Quotebacks. TLDR; Codebacks is a simple implementation standard for creating a single global abstraction for reusable blocks of code that enables on-chain attribution, monitoring, and th...]]></description>
            <content:encoded><![CDATA[<h2 id="h-an-on-chain-citation-standard-for-open-source-code" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">An on-chain citation standard for open-source code</h2><hr><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://publicartifacts.xyz/"><em>Public Artifacts</em></a> is a social technology studio exploring community dynamics and public goods.</p><p>This project demonstrates a new primitive for abstracting, monitoring, and rewarding open-source software through citations, inspired by<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/tobyshorin"> Toby Shorin</a> &amp;<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/tomcritchlow"> Tom Critchlow’s</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://quotebacks.net/"> Quotebacks</a>.</p><p><strong>TLDR;</strong> Codebacks is a simple implementation standard for creating a single global abstraction for reusable blocks of code that enables on-chain attribution, monitoring, and the ability to tip/reward the original author.</p><p>Codebacks is an experiment to minimally address some of these challenges in Web3:</p><ol><li><p>Increasing smart contract composability</p></li><li><p>Attributing function-level code to original sources and authors</p></li><li><p>Monitoring and measuring the usage and impact of open source code</p></li><li><p>Providing an easy, flexible mechanism for the community to reward the source authors</p></li></ol><p>You can find the<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/Public-Artifacts/codebacks"> proof-of-concept repo here</a>.</p><p>You can see the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0xae033e6811854e64fbad475ee3af7c94dcd2f01b">first codeback deployed on mainnet here</a>.</p><p>You can reach us <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/publicartifacts">in our DM’s</a>.</p><hr><h2 id="h-composability" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Composability</h2><p><strong>Composability is one of Web3’s primary advantages</strong> - the ability to use combinations of existing resources as building blocks for new applications. Composability allows developers to do more with less, experiment faster on new ideas, and lean on the collective shoulders of the ecosystem.</p><p>When we think of composability in Web3, and open-source software in general, it’s often at the protocol, application, or ERC level. Standards define agreed on behaviors and designs. Protocols and application files are forked and copied to create new code. But even these are built using smaller pieces of code that often appear again and again, reproduced and redeployed by wide swaths of developers.</p><p>If open protocols are the “lego blocks” that <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://future.com/how-composability-unlocks-crypto-and-everything-else/">give Web3 its innovation advantage</a>, these smaller pieces of function-level code are the material that create new blocks.</p><h2 id="h-abstractions" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Abstractions</h2><p><strong>Abstractions expand available components for composition.</strong> In traditional software development, the use of abstractions has driven the increase in the availability, and simplicity, of using existing code to create new programs.</p><p>Package managers like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.npmjs.com/">npm</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://yarnpkg.com/">yarn</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://pypi.org/">pypi</a>, and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://matt-rickard.com/functions-as-a-service">functions-as-a-service</a> providers like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://aws.amazon.com/lambda/">AWS Lambda</a> have made function-level code widely accessible, but with their own limits. These platforms have enabled the open-source community’s growth tremendously, but, in Web3, smart contract developers regularly resort to ad-hoc methods of reusing open source code, often deploying many instances of the same code to the same blockchain.</p><p>With FaaS providers, each function relies on a single operator to maintain its server, usage is often permissioned and usage data is inaccessible, and there is rarely a standard to discover such functions. When traditional package managers are used, they provide useful visibility into developer adoption through downloads, dependents, and forks, but we have never had a clear sight of their end user impact.</p><p>None of these systems are built to leverage the benefits of smart contract platforms, like the Ethereum Virtual Machine, with permissionless code on public servers, and accessible, public data.</p><h2 id="h-citation-as-a-web3-primitive-for-a-global-abstraction-layer" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Citation as a Web3 Primitive for a Global Abstraction Layer</h2><p>Codebacks provides a design and implementation standard to further the introduction of function-level components on-chain, and the citation standard for usage among Web3 applications.</p><p>To start, it’s three things:</p><ol><li><p><strong>A citation standard for function-level code use and attribution.</strong> Anyone can create a codeback where they would have copied-and-pasted code. By creating a codeback, they create a global resource for future applications. By invoking that codeback from their application, they give explicit recognition to both the code and its original author as a dependency of their own application.</p></li><li><p><strong>An event emitter for each codeback</strong>. Each codeback emits events every time its function is called, allowing the community to see a global view of the applications built with each function, and how often that function is used - visualized via event monitoring tools like Dune Analytics.</p></li><li><p><strong>An option to reward the original author.</strong> Codebacks accept optional tips in ETH or any ERC20 or ERC721 token, which can only be withdrawn by the trustee address designated by the codeback creator. The Trustee is meant to be the original publisher of the function.</p></li></ol><p>Codebacks’ basis on the EVM provide a number of benefits:</p><ul><li><p>Like package managers, anyone can compose with a codeback, with the added benefit of allowing <strong>a component to live as a single instance, without needing to be downloaded and installed with each application that invokes it.</strong></p></li><li><p><strong>On-chain usage data can be publicly used and monitored by everyone</strong>, making it easy to see how small bits of code propagate through the open-source ecosystem, and recognize impactful pieces of code.</p></li><li><p><strong>A standard event naming and structure make them publicly discoverable and indexable</strong>, creating a compendium of useful code for the ecosystem.</p></li><li><p>By having public data on usage, and the original author/source as a defined trustee, <strong>it creates a strong mechanism for attributing and rewarding open source developers for the end user impact of their creations</strong>.</p></li></ul><h2 id="h-how-it-works" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">How it works</h2><p>At a high level, Codebacks works by breaking a reusable block of code out into its own smart contract with a series of helper functions that let it work as a public function-as-a-service contract on-chain.</p><p>In practice, it looks like this (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/Public-Artifacts/codebacks">see code examples here</a>):</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/747d01309228070b290e27854cdebfa9d9c33b37d6260d87d42a0c92756fa3d6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><ol><li><p><strong>A developer finds a function</strong> in another project’s contract that they’d like to use.</p></li><li><p>They <strong>create a new codeback contract for that function</strong>, creating a global abstraction which can now be called from their application and from other applications by other developers.</p></li><li><p>To invoke it, they <strong>use a codeback citation in their project code</strong> via an import declaration pointing to the new contract (instead of a copy/paste of the function itself)</p></li><li><p>Some projects may make money, and may choose to give a small fee/tip to the sources of their code, or they may simply wish to reward the work done by the developers. <strong>Codebacks enable an optional mechanism for reward</strong> via a programmable tip to the source author’s wallet.</p></li></ol><p>Finally, since Codebacks are on-chain and have standard naming conventions for their event emissions, public usage monitoring is available for each codeback, and all codebacks can be indexed together for better discovery and use through tools like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dune.com/queries/1503075">Dune Analytics</a>.</p><hr><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/Public-Artifacts/codebacks"><strong>Codebacks</strong></a> is an experiment in community-led development. If you have any thoughts, we’d love to hear from you. If you’re building something new in Web3, consider contributing to the community codebase with Codebacks.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/publicartifacts">https://twitter.com/publicartifacts</a></p><div data-type="subscribeButton" class="center-contents"><a class="email-subscribe-button" href="null">Subscribe</a></div>]]></content:encoded>
            <author>publicartifacts@newsletter.paragraph.com (Public Artifacts)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/5b47f6b793951b4abc29e551f62ee1cd4a616b56aefb51f619b853b7a9df3fc1.png" length="0" type="image/png"/>
        </item>
    </channel>
</rss>