<?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>HappyChain</title>
        <link>https://paragraph.com/@happychain</link>
        <description>ayyy lmao — gud tech, git fun</description>
        <lastBuildDate>Wed, 14 Oct 2026 07:21:41 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>HappyChain</title>
            <url>https://storage.googleapis.com/papyrus_images/d5898be3d2c6318bcd6f637212bcbafe1f9205d59468412b2b73bd2fff39c34e.png</url>
            <link>https://paragraph.com/@happychain</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[Account abstraction at the speed of Boop]]></title>
            <link>https://paragraph.com/@happychain/account-abstraction-at-the-speed-of-boop</link>
            <guid>sPDiWSwvnUthWbDl9g5n</guid>
            <pubDate>Thu, 20 Mar 2025 22:17:42 GMT</pubDate>
            <description><![CDATA[Today, we introduce our new account abstraction standard for the EVM, called Boop. It’s simple, it’s fast, and we see it as a superior alternative to ERC-4337 for low-fee chains like every Ethereum L2.TL;DRWe&apos;re building Boop — a minimal standard and implementation for account abstraction that is low latency and simple.Boop is a familiar alternative to ERC-4337.ERC-4337&apos;s design & tooling lead to high-latency transactions.ERC-4337 is very complex because of its design choices. This ...]]></description>
            <content:encoded><![CDATA[<p>Today, we introduce our new account abstraction standard for the EVM, called Boop.</p><p>It’s simple, it’s fast, and we see it as a superior alternative to ERC-4337 for low-fee chains like every Ethereum L2.</p><hr><h3 id="h-tldr" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>TL;DR</strong></h3><ul><li><p>We&apos;re building Boop — a minimal standard and implementation for account abstraction that is low latency and simple.</p></li><li><p>Boop is a familiar alternative to ERC-4337.</p></li><li><p>ERC-4337&apos;s design &amp; tooling lead to high-latency transactions.</p></li><li><p>ERC-4337 is very complex because of its design choices. This makes fixing the tooling hard as well.</p></li><li><p>Boop improves the experience of devs and users for most use cases today (app accounts, wallet accounts) on low-fee networks like every Ethereum L2.</p></li><li><p>Boop delivers a massive user and developer experience improvement for more demanding use cases, like fully-onchain games.</p></li><li><p>Boop will come with an account extension specification that fixes glaring flaws in ERC-7579 (extension for ERC-4337) and makes it <strong>actually</strong> possible to write extensions that work with multiple account implementations.</p></li><li><p>Our prototype is 3-4 times faster than common ERC-4337 solutions, with more low-hanging fruits to be harvested. HappyChain will eventually feature <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://blog.riselabs.xyz/incremental-block-construction/">shreds</a>, which will bring this to &lt;500ms, anywhere on earth.</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/dedf322d9ee5794ca2486d44df6f6f78d26dad75f0328604660d70cd883c52d6.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><hr><p>The goal of account abstraction (AA) is to make user accounts on the blockchain programmable and customizable. Two of the most common goals are gas sponsorship (allowing external entities to pay for the account&apos;s fees), and “session keys” or “automatic approvals” — enabling external entities to make some transactions on the account&apos;s behalf, in some specific situations.</p><p>Today, account abstraction is synonymous with <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eip.tools/eip/4337">ERC-4337</a> (”Account Abstraction Using Alt Mempool”). 4337 is a carefully designed standard that enables account abstraction without requiring change to the Ethereum protocol. However, while integrating 4337 into the Happy Wallet, we found that 4337 has significant downsides and limitations, which made it subpar for our use case (fully-onchain games). In particular, as implemented today it is very high-latency and its design is very complex.</p><p>4337&apos;s design leads to <strong>high latency</strong> between transaction initiation and transaction inclusion onchain. We currently regularly experience &gt; 6s latency on a chain with 2s blocktime! Most of that is to blame on the tooling around 4337, but even the theoretical minimum time is higher than where we want it to be (see <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://happychain.notion.site/boop-appendix-a?pvs=4">Appendix A</a> for a thorough analysis, including <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://happychain.notion.site/1b904b72a585804a9e80ec54c623b01c?pvs=25#1bc04b72a585801c80d1ee6f90dd7d1a">sequence diagrams</a> that shed some light on the situation).</p><p>4337 is also <strong>very complex</strong>, and so is the tooling around it. This makes it hard to jump in and fix issues when we encounter them (which is <strong>often</strong>). It also makes it hard to “fork” the standard into something more amenable to low latency.</p><p>The “4337 complexity” claim has been thrown out a lot on Twitter and other online forums, but it is generally unsubstantiated. Why is it complex? Is this complexity essential (does it buy us something) or accidental? What design goals or design choice create the complexity?</p><p>We have buried ourselves in the 4337 trenches, and <strong>we have answers</strong>! Keep reading to find out.</p><p>Our understanding of the design space led to the decision to create a new standard (and all the tools) around it. It&apos;s called <strong>Boop</strong> 👉🐈</p><p>Boop follows the general 4337 architecture (there is an entrypoint, accounts, paymaster, and an entity that relays transactions to the chain). However, it differs significantly in the details. We&apos;ll walk over the design in this article as well.</p><h3 id="h-table-of-contents" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Table of Contents</h3><ul><li><p>ERC-4337 design trade-offs</p></li><li><p>Boop design trade-offs</p></li><li><p>How Boop works ← skip here if you just want to see what we built</p></li></ul><h1 id="h-erc-4337-design-trade-offs" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">ERC-4337 design trade-offs</h1><h3 id="h-the-4337-design-goal" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">The 4337 design goal</h3><p>ERC-4337 is designed with interoperability in mind. You have roughly four players in the system: bundlers, account implementation, paymasters, and end users. The fragile equilibrium that 4337 tries to solve for is that any combination of those can interact, and that nobody gets shafted by the other parties in the process.</p><p>Additionally, 4337 maximally optimizes for gas consumption whenever possible (but note that AA transactions <strong>aka user operations or “userOps”</strong> still incur significant gas overhead). This is because its first customer is the Ethereum blockchain itself, where gas is expensive.</p><p>This is a worthy goal, and if you accept these constraints, then I think 4337 is an excellent design. But as stated earlier, this comes at the cost of high latency and significant complexity.</p><p>We believe that for most use cases today (including our gaming use case, which is of course our north star), better trade-offs are possible.</p><h3 id="h-alt-mempool-and-bundling-considered-harmful" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Alt mempool &amp; bundling considered harmful</h3><p>The alternative mempool is part of the title of the EIP, and drives a lot of the downsides of 4337.</p><p>Why an alt mempool?</p><ol><li><p>Interoperability: any userOp sent by a user with its selection of account and paymaster could be serviced by any bundler.</p></li><li><p>Gas efficiency: In 4337, the relayer that disburses the transaction fees (to be refunded by the sender or by a paymaster) is called “bundler”. This is because they bundle multiple userOps together to lower the gas fee per userOp, by distributing the 21k gas EVM transaction base cost, as well as the cost to load many AA contracts (EntryPoint, paymasters, staking…) amongst all userOps.</p></li></ol><p>That comes at a cost:</p><ol><li><p>Latency: 4337 calls for all bundlers to simulate transactions when they enter the mempool, and then to simulate the bundles before submitting. If <em>any</em> userOp fails, the bundler must remove it, and retry the simulation. In the worst case, a bundle may have to be simulated many times. These are not simple simulations either — they need to leverage <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://geth.ethereum.org/docs/developers/evm-tracing">tracing</a> to verify complex validity properties for every userOp. But the worst part of the latency here actually comes from having to wait for other userOps to arrive before your userOp can be submitted.</p></li><li><p>Complexity: A bundler is vulnerable to both offchain griefing (just like any other web service, people can spam him with busywork), and onchain griefing: a userOp could simulate just fine but then revert onchain, leading to a loss of the gas fees incurred by the bundler. 4337 (and its companion <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eip.tools/eip/7562">ERC-7562</a>) try hard to protect against it with a slew of validation rules.</p><p>We took a hard look at this — the ERC-4337 design is sound but cannot prevent all forms of griefing. However, it successfully makes what griefing can be done economically stupid.</p><p>However, in a high-throughput/low-fee environment, most of the rules are unnecessary. Instead the bulk of the protection is carried by the “staking” mechanism where account factories and paymasters have locked some capital for a certain duration. This mechanism could live outside of the core protocol, at the discretion of the bundlers — which is our chosen approach in Boop. See <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://happychain.notion.site/boop-appendix-b">Appendix B</a> for an in-depth analysis.</p></li></ol><p>Why have an alt mempool at all? Blockchains already have perfectly functional mempools. It&apos;s only required because of bundling and its gas efficiency gains. But on L2 chains, where gas is much less of a concern, you could just do away with it entirely, and relay a single userOp at a time.</p><p>“Censorship resistance” is sometimes an argument for the mempool, but it&apos;s a strawman when any honest actor can spin up a bundler and end censorship. If the tools were a little bit more mature, it would also be easy for an end-user to do this directly.</p><p>The 4337 mempool is seemingly live on some mainnets, but you&apos;d be hard-pressed to find details on it besides some <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://medium.com/etherspot/erc-4337-shared-mempool-official-launch-on-ethereum-mainnet-arbitrum-and-optimism-73297452de51">announcement posts</a>. I do think it&apos;s fair to say that it&apos;s mostly unused today.</p><p>And that&apos;s because…</p><h3 id="h-you-dont-need-that-much-trustlessness" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">You don&apos;t need that much trustlessness</h3><p>Today, users of account abstraction are mostly apps that want to provide gas sponsorship for their users, in a dedicated app account.</p><p>But the truth is that if you have the technical capability to run a paymaster service, you can also run a bundler. In practice, apps look for a one-stop-shop solution that can provide the bundler and the paymaster, and deploy smart accounts on behalf of users. This is the business model of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.pimlico.io/">Pimlico</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.biconomy.io/">Biconomy</a>, and many many others. This means the bundler, account and paymaster can trust each other!</p><p>This is only the first stage of account abstraction. Another use case is wallets that want to relay transactions for their users. This includes <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://happy.tech">HappyChain</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.ambire.com/">Ambire</a>, and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.candidewallet.com/">Candide</a>. These will usually impose usage of their own accounts (it&apos;s actually hard to make things work across accounts, more on this shortly). Multi-paymaster support is desirable, but it&apos;s usually easy to have a whitelisting process for those, or to use staking to minimize the downside (as ultimately 4337 does as well).</p><p>Ultimately trustlessness sits at the wrong level of the stack in 4337. It is best implemented on top of the base protocol, as a set of measures that the bundler will take to avoid griefing. These are necessarily heuristic in nature (i.e. 100% protection is impossible), and can always be downgraded to whitelisting in most cases. Doing so allows removing a lot of tedious logic from the contracts, and simplifies the implementation of simple trustful bundlers (covering today&apos;s use cases).</p><p>The only reason trustlessness is embedded so deeply in 4337 is because you need it to make the alt mempool work.</p><h3 id="h-native-aa" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Native AA</h3><p>4337 was designed as not requiring protocol changes. Now the long-term vision is to have protocol-level AA in Ethereum, as in fact some blockchains already have.</p><p>One direction being explored is to enshrine 4337 at the protocol level (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eip.tools/rip/7560">RIP-7560</a>). I have spent less time thinking about this, but at first glance it looks like a terrible idea, enshrining many 4337 concepts when they are no longer required. Bundling is perhaps the best example: if you work at the protocol level, you can eliminate the gas overhead, and thus bundling is no longer required (you still need a relayer to pay the fees prior to a refund, though this role can be easily fulfilled by the user himself or by the paymaster).</p><h3 id="h-balance-fragmentation" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Balance fragmentation</h3><p>One of the tools in the arsenal of 4337 to combat griefing is staking. Staking serves two roles:</p><ol><li><p>Fees refunded to bundlers are not sent directly, but instead deducted from a staking balance. Stake withdrawal is on a timelock, which prevents accounts and paymaster from withdrawing payment at the last second.</p></li><li><p>Bundlers can require a minimum amount staked and a minimum staking time before trusting accounts, paymaster, and account factories. This prevents griefing from constantly redeploying these contracts to sybil attack a bundler.</p></li></ol><p>We think (2) makes a lot of sense — and should most likely be implemented <em>on top</em> of the core protocol as a mechanism for bundlers to protect themselves, but (1) is unacceptable for accounts.</p><p>One of our motivations in the design of the Happy Wallet was to avoid the existing fragmentation where each app would get its own account, with significant difficulties in managing these and moving funds across them. Staking for payment reintroduces this, where you now need to explicitly top up a separate “gas tank” to make transactions directly.</p><p>Granted, this is not much of a concern for HappyChain where we expect sponsorship, including from HappyChain directly to cover most user actions. But as we conceive of Boop as a much more broadly applicable standard, this seems like a retrograde step in user experience.</p><h3 id="h-specification-uncertainty" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Specification uncertainty</h3><p>While we consider ERC-4337 to be well-designed, we can&apos;t say the same about <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eip.tools/eip/7579">ERC-7579</a>, which standardizes 4337 account extensions. These extensions enable to change how the account validates or executes userOps, change the operation of their fallback functions, and define hooks.</p><p>We&apos;re sure the authors had the best intentions in leaving the spec open-ended, but the end result is that it is incomplete, and extensions in the wild can be incompatible.</p><p>7579 only specifies how the modules are installed, uninstalled, and detected. It does not however say anything about how the modules are used or triggered, nor the interface that the modules should adopt!</p><p>Let&apos;s consider the most relevant example: defining a validator extension that can support automatic approvals (session keys). These are scoped to very precise circumstances, and cannot be used to validate all userOps. The userOp must then indicate it wishes to use the custom validator. This is not standardized, so some implementations encode the validator address in the nonce, while some append it to the signature field.</p><p>Consider now an extension that needs access to extra data to perform its duties. 4337 provides no extension field for this purpose and the data must thus be encoded … somewhere. Usually in the signature or calldata fields. Since 7579 does not specify module interfaces, it is up to the contract to know how its extensions work, what data they expect, and how to transmit that to them.</p><p>The end result of this is that extensions end up being account-specific, conforming to the interface expected and supported by a specific account implementation.</p><p>This is in complete contradiction with <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.zerodev.app/blog/why-7579-over-6900">the rationale</a> for using ERC-7579 (now the dominant standard) over the superior (imho) <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eip.tools/eip/6900">ERC-6900</a> (though the previous link has some fair concerns about 6900 too):</p><blockquote><p>ERC-7579 is a minimal <em>interface</em> that solves one problem only: modules should be compatible across smart accounts.</p></blockquote><p>(We&apos;ll also point out the irony of ZeroDev pushing for ERC-7579 and compatibility, when their SDK does not actually enable using 7579 directly, but instead forces you to use their own unstandardized &amp; cumbersome custom layer built on top of 7579. Oops.)</p><p>Boop has a much better solution here, which properly specifies the behaviour and interface of extensions while being … simple. It also makes it simple to pass data for various extensions in a non-conflicted way by having an <code>extraData</code> field structured like a dictionary (addressing some of the concerns about ERC-6900).</p><p>Besides extensions, 4337 also has a few specification fails that we correct. For instance, the destination of the call made by a user operation is not explicitly specified, and is traditionally encoded in the calldata field — but this is not standard and can thus not be strictly relied on.</p><h1 id="h-boop-design-trade-offs" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Boop design trade-offs</h1><p>I hope to have convinced you that 4337 has issues, at least for specific use cases. If you want to do DeFi on Ethereum with a smart account, it might still be a very good solution! Though in my opinion, this is not the exciting future that account abstraction unlocks.</p><p>Let&apos;s now have a look at what Boop does differently.</p><p>HappyChain is an L2 chain for fully-onchain games. Gaming transactions require extremely low latency. There are a lot of parts in making that happen, but a crucial first step in the design is making sure the transactions hit the sequencer as fast as possible. This is the main reason 4337 did not work for us.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/03299887331a5fea4637add2898913f41f7aa6ed9bd62ead1b8787650df80ab1.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>In brief, our design goals are:</p><ul><li><p>Low latency between transaction initiation and transaction inclusion</p></li><li><p>Simplicity in the design, especially keeping the core protocol minimal</p></li><li><p>Hackability / forkability</p></li></ul><p>To achieve these, we are willing to make some concessions:</p><ul><li><p>The core protocol will only have very minimal protections against griefing, requiring either trust or protection at a higher level (e.g. with staking).</p></li><li><p>Get rid of bundling, meaning a loss of gas efficiency. HappyChain will be a superscale chain, leveraging technology from <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/rise_chain">RiseChain</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/Celestia">Celestia</a>. Since we control the nodes, we have the ability to play with gas policies, as well as the option to enshrine account abstraction at the chain level down the line.</p></li></ul><p>Let&apos;s expand on some of these points.</p><p>We don&apos;t care about trustlessness so much — HappyChain will impose its own (customizable!) accounts and will run its own <em>submitter</em> (our relayer, like a bundler without the bundling). We have our own paymaster contract that we trust, and we will introduce a mechanism to trust third-party paymasters. The two most promising mechanisms here are staking (just like 4337) and paymasters deployed from a trusted source — we want to offer a framework to easily and <em>automatically</em> deploy paymasters with customizable policies, and deploy them on behalf of projects, ensuring us that the paymaster is safe by construction.</p><p>We care about simplicity — because we&apos;re writing software and have to maintain it. We want to push as much as possible outside of the core protocol. This includes griefing prevention and the ability to trust random third parties.</p><p>We also want to optimize for hacking. Because we don&apos;t do bundling, there is no need for everyone to use the same EntryPoint contract (accounts can be set up to support multiple entry points). Want to customize something? Fork the code and off to the races! So keeping the code simple and understandable is a major design goal.</p><p>Note that while trustlessness is optional (but achievable), Boop does enable compatibility to all spec-compliant implementations. This is a notable improvement in the case of account extensions.</p><h1 id="h-how-boop-works" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">How Boop works</h1><p>Despite its simplicity, Boop affords a good deal of flexibility. Let&apos;s explore some typical flows.</p><h3 id="h-paying-submitter" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Paying Submitter</h3><p>Let&apos;s start with a simple example where a user wants to send a transaction, paid for by the submitter. This is the flow implemented in v1 of the Happy Wallet for transactions sponsored by HappyChain.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d4c85eb9dd486a411a795fd1e46e2e4dada02e696b5c4d213a4a3b9bca5fc0e3.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>The user (or in reality, the wallet) will call a single method (<code>boop_execute</code>) on the submitter.</p><p>No other calls, not even blockchain RPC calls, are required!</p><p>The submitter then simulates the transaction to get the gas limits, and queries the chain for the proper gas price. It then submits the transaction onchain to the entry point contract.</p><p>This magic works because we allow the user to sign a boop without gas values whenever he is not the fee payer (the submitter or the paymaster contract (see later) can validate the gas values).</p><p>Gas estimation is worth a digression. Just like 4337, Boop needs more than just the gas limit of the submitter transaction. It also needs a gas limit for the call made by the account. We can either trust or monitor accounts &amp; paymaster, so we don&apos;t require gas limits for them as 4337 does, but the called contract could be anything, and thus we need a gas limit for protection there. To estimate those two limits, the submitters make an <code>eth_call</code> to simulate the <code>submit</code> run, but specifies <code>0x0...0</code> as the sender. This turns the entrypoint, account, and paymaster into simulation mode, adopting relaxed validation rules. The call returns a struct that not only includes the estimated gas values, but also data to help debug failures, like a code indicating the cause of failure (validation? execution? payment? unexpected revert?) and the revert data if applicable.</p><p>(This compared favorably with ERC-4337 which requires a completely different code path for gas estimations.)</p><p>The boop is packed in a super simple format (basically just concatenating the fields), which leads to &gt; 200 bytes of data savings (yes, Solidity&apos;s ABI encoding really sucks). The size of the fixed-size part of a boop&apos;s data is also around 200 bytes, which means that this makes gas token transfers 50% smaller! It is then decoded once at the start into an easy-to-manipulate struct.</p><p>The entry point logic is a straightforward affair, which decodes the boop, calls <code>validate</code> on the account, and if that succeeds, <code>execute</code>. Since the submitter is the payer, no need for refunds.</p><p>For comparison, let&apos;s see how ERC-4337 handles the same scenario:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e9bc0882f4aea8b4e2a7e819dccdf9f19c7179c6e7b97346e49564bd39de5ea1.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>The chart clearly illustrates Boop&apos;s advantages in simplicity and latency: one roundtrip originating from the user for Boop vs 5 for 4337, and 3 roundtrips originating from the bundler for Boop vs at least 4 for 4337.</p><p>Multiple notes to be made regarding the comparison (feel free to skip if you don&apos;t care about technicalities):</p><ul><li><p>We didn&apos;t include the account deployment pathways, as Boop leaves account deployment outside of the core spec (if account deployment at the time of the first boop is desired, that can be achieved with a multicall, or a preceding call from the submitter).</p></li><li><p>In both cases (Boop &amp; 4337), the entry point checks the payment, which is not represented in either diagram.</p></li><li><p>Paymaster service capabilities are standardized in <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eip.tools/eip/7677">ERC-7677</a>.</p></li><li><p>In theory, it is possible to skip the paymaster service and rely purely on the onchain paymaster as Boop does. In practice, all service providers today route sponsorship requests through their paymaster service. 4337 service providers do not provide a combined endpoint that performs sponsorship and submission at the same time (which is what Boop&apos;s paying submitter does, and without incurring any onchain gas overhead).</p></li><li><p>The call to <code>pm_getPaymasterStubData</code> could be skipped, but only if the format of the <code>paymasterData</code> is known and the stub data is made such that an overestimation of the submitter fee will be provided. In practice, this is not done in any SDK or frontend library.</p></li></ul><h3 id="h-external-paymasters" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">External Paymasters</h3><p>What about third-party paymasters? Here&apos;s the new flow with the difference highlighted in blue.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/edcec174f4d9c5d45f2e01eff6c838344da614b584e122ce5fd4c36069bd8845.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>The difference is trivial: after execution, the entry points calls <code>payout</code> on the paymaster contract with the boop (which can optionally include paymaster-specific data), and the actual amount of gas spent. The paymaster contract validates that it is willing to pay for the Boop and that the requested payment (consumed gas + submitter fee) is reasonable, then transfers the payment to the entry point. The entry point then validates that the payment has been made, then returns (or reverts if not).</p><h3 id="h-self-account-payment" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Self (account) payment</h3><p>What if the account wants to pay itself? It&apos;s trivial: the account just needs to implement the paymaster interface and specify itself as the paymaster!</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a372dd52f220347b94b3f09d58601cb587f805ba5c2850cee5e7dfc9a4ce3a39.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>There is one snag though: in this case, the Boop spec enforces that the user must sign over the gas values. This is because we expect account payment logic to be very simple — basically just a transfer: the entry point is trusted and so we know the boop passed validation. But if we don&apos;t sign the gas values, the submitter (which is to say, anyone) could steal funds from the account by asking a massive submitter fee, or they could be griefed by applications consuming an undue amount of gas. Paymaster will generally either target a specific use case or have bespoke accounting logic, but accounts are much more open-ended.</p><h3 id="h-boops-in-the-wild" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Boops in the wild</h3><p>Besides purely submitting transactions (or boops in this case), the infrastructure and ecosystem also matter. By nature of being very lightweight, boops are easy to work with.</p><p>Here&apos;s a breakdown of the structure of a Boop (fields have been re-ordered for logical grouping):</p><pre data-type="codeBlock" text="struct Boop {
    address account;        // sender
    address dest;           // destination of target call
    uint256 value;          // gas tokens in wei to transfer to dest
    bytes callData;         // calldata for target call
    uint192 nonceTrack;     // nonce namespace (enables parallel tx tracks)
    uint64 nonceValue;      // nonce within track

    // Gas and Fees
    uint32 gasLimit;        // for submitter tx
    uint32 executeGasLimit; // for IHappyAccount.execute
    uint256 maxFeePerGas;   // wei max fee (basefee + tip)
    int256 submitterFee;    // flat wei submitter fee

    // Payment and Validation
    bytes validatorData;    // validation-specific data (e.g. signature)
    address paymaster;      // fee payer (IHappyPaymaster
                            // or 0x0 for submitter
    bytes paymasterData;    // paymaster-specific data
    bytes extraData;        // for extensions
}
"><code><span class="hljs-keyword">struct</span> <span class="hljs-title">Boop</span> {
    <span class="hljs-keyword">address</span> account;        <span class="hljs-comment">// sender</span>
    <span class="hljs-keyword">address</span> dest;           <span class="hljs-comment">// destination of target call</span>
    <span class="hljs-keyword">uint256</span> value;          <span class="hljs-comment">// gas tokens in wei to transfer to dest</span>
    <span class="hljs-keyword">bytes</span> callData;         <span class="hljs-comment">// calldata for target call</span>
    <span class="hljs-keyword">uint192</span> nonceTrack;     <span class="hljs-comment">// nonce namespace (enables parallel tx tracks)</span>
    <span class="hljs-keyword">uint64</span> nonceValue;      <span class="hljs-comment">// nonce within track</span>

    <span class="hljs-comment">// Gas and Fees</span>
    <span class="hljs-keyword">uint32</span> gasLimit;        <span class="hljs-comment">// for submitter tx</span>
    <span class="hljs-keyword">uint32</span> executeGasLimit; <span class="hljs-comment">// for IHappyAccount.execute</span>
    <span class="hljs-keyword">uint256</span> maxFeePerGas;   <span class="hljs-comment">// wei max fee (basefee + tip)</span>
    <span class="hljs-keyword">int256</span> submitterFee;    <span class="hljs-comment">// flat wei submitter fee</span>

    <span class="hljs-comment">// Payment and Validation</span>
    <span class="hljs-keyword">bytes</span> validatorData;    <span class="hljs-comment">// validation-specific data (e.g. signature)</span>
    <span class="hljs-keyword">address</span> paymaster;      <span class="hljs-comment">// fee payer (IHappyPaymaster</span>
                            <span class="hljs-comment">// or 0x0 for submitter</span>
    <span class="hljs-keyword">bytes</span> paymasterData;    <span class="hljs-comment">// paymaster-specific data</span>
    <span class="hljs-keyword">bytes</span> extraData;        <span class="hljs-comment">// for extensions</span>
}
</code></pre><p>The submitter allows monitoring boop status, exposing the following endpoints (in addition to the previously discussed <code>boop_execute</code> and <code>boop_estimateGas</code>):</p><ul><li><p><code>boop_submit(boop)</code> — equivalent to submitting a transaction, but not waiting for the receipt</p></li><li><p><code>boop_receipt(hash, timeout)</code> — waits for the receipt then returns it, a timeout can be passed, which allows this function to be used for polling if set to 0</p></li><li><p><code>boop_state(hash)</code> — returns the current state of a boop (e.g. included — along with the receipt, failed — along with the failure reason, submitted to the chain, pending processing, …).</p></li><li><p><code>boop_pending(address)</code> — returns all pending boops (not yet included onchain) that the submitter is tracking.</p></li><li><p><code>boop_cancel(hash)</code> — cancels the given boop if it has not yet been submitted onchain.</p></li></ul><p>What about explorer support? The good news is that by default the information you get from a submitter transaction is almost as good as the information you get about an userOp on BlockScout, which is the most widely used interface for this today!The only missing piece of data is the boop sender, but it will be surfaced via the <code>Boop</code> event that logs the entirety of the Boop data structure. And unlike 4337, you’ll see the target of the call too!</p><p>Things could definitely improve there, but by making zero effort, we&apos;re pretty much as good as the 4337 state-of-the-art!</p><p>In general, Boops are easy to work with programmatically — you can filter transactions via the <code>Boop</code> event then decode the packed Boop passed to the event using our libraries.</p><h3 id="h-account-extensions" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Account Extensions</h3><p>Boop&apos;s extension story is extremely simple. We’ll focus on validator extensions, but execution extensions follow the same pattern.</p><p>An account supporting extensions implements the following interface:</p><pre data-type="codeBlock" text="interface IExtendedAccount {
    enum ExtensionType {
        Validator,
        Executor
    }

    // Reverts if the extension is already present.
    function addExtension(address ext, ExtensionType type) external;

    // Reverts if the validator is not present.
    function removeExtension(address ext, ExtensionType type) external;

    function hasExtension(address ext, ExtensionType type) 
        external returns (bool);
}
"><code><span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">IExtendedAccount</span> </span>{
    <span class="hljs-keyword">enum</span> <span class="hljs-title">ExtensionType</span> {
        Validator,
        Executor
    }

    <span class="hljs-comment">// Reverts if the extension is already present.</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">addExtension</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> ext, ExtensionType <span class="hljs-keyword">type</span></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;

    <span class="hljs-comment">// Reverts if the validator is not present.</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">removeExtension</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> ext, ExtensionType <span class="hljs-keyword">type</span></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">hasExtension</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> ext, ExtensionType <span class="hljs-keyword">type</span></span>) 
        <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">bool</span></span>)</span>;
}
</code></pre><p>And the validators must implement the following interface:</p><pre data-type="codeBlock" text="interface ICustomBoopValidator {
    // Same interface as IBoopAccount.validate
    function validate(Boop memory boop) external returns(bytes4);
}
"><code><span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">ICustomBoopValidator</span> </span>{
    <span class="hljs-comment">// Same interface as IBoopAccount.validate</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">validate</span>(<span class="hljs-params">Boop <span class="hljs-keyword">memory</span> boop</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">bytes4</span></span>)</span>;
}
</code></pre><p>To signal that a custom validator is used, the account must parse the <code>extraData</code> field. This field is structured as a packed list of <code>(key, length, value)</code> triplets, where both the key and the length are encoded on three bytes. We supply a library function to easily extract the value of a given key.</p><p>The key <code>1</code> is reserved for custom validator addresses, and if present, the account must delegate its validation to the custom validator.</p><p>If you want to compose validators (e.g. require multiple validators to assent, or require a single or even a quorum of validators to assent), this can be implemented as a custom composition validator.</p><p>Furthermore, accounts are allowed to inline common validators (which we&apos;ll do for session keys), as long as the spec is respected, with the exception that these validators are not required to be uninstallable.</p><p>That&apos;s pretty much the whole validator extension spec!(Okay, there are also events emitted on install/uninstall.)</p><h1 id="h-what-about-eip-7702" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What about EIP-7702?</h1><p>There&apos;s a misleading narrative out there that somehow 7702 changes things with respect to account abstraction standards. It doesn&apos;t.</p><p>The <strong>only</strong> thing EIP-7702 does is it lets EOA become contracts (potentially temporarily). The main use case is to let them become smart accounts, which is great!</p><p><strong>Both ERC-4337 and Boop are fully compatible with EIP-7702.</strong></p><h1 id="h-its-only-the-start" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">It&apos;s only the start</h1><p><strong>We&apos;ll release the Boop spec and open-source code soon (hopefully within two weeks). If you want an early sneak peek, my </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/norswap"><strong>DMs are open</strong></a><strong>.</strong></p><p>The code is vastly simpler than 4337&apos;s. For instance, the entry point contract is only ~300 lines of code, all in a single easy-to-parse function, including interface documentation &amp; the simulation code path vs &gt; 1000 lines for the 4337 entry point, which includes neither and depends on many helpers.</p><p>Boop is only the start of the latency battle. While our initial testnet will have 2s block time, our subsequent testnet will integrate the tech from <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/rise_chain">Rise Labs</a> and enable <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://blog.riselabs.xyz/incremental-block-construction/">shreds</a> — ultra-fast (&lt; 10ms) per-transaction confirmations. Waiting for blocks no longer required!</p><p>We&apos;ll also make an indexer available that listens to sequencer-emitted shreds. In a game context, this means every player can learn of other players’ actions right after the sequencer confirms it. If the sequencer, submitter, and indexer are colocated in the same data center, this brings to quasi-parity with web2 gaming latency!</p><p>Besides this, we also want to build better simulation capabilities. In games, the success of a transaction often depends on the preceding transactions by the same player and other players in the same game. The inability to simulate transactions in that context can cause the simulation to fail (or to report an inaccurate gas limit), which can cause “pipeline stalls” where we have to wait for the preceding transactions to be included on-chain to be able to properly simulate the next one. This is an issue if we want to enable games where a user can submit many transactions over a few seconds!</p><p>As always, our goal remains the same: make builders’ lives easier. Just submit the transaction and don&apos;t worry about it! 🤠</p>]]></content:encoded>
            <author>happychain@newsletter.paragraph.com (HappyChain)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/8910ea385ef4a45e5d055898fd7854cc21f7bc8182e37fcff2423920a9dd73b7.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Conjuring Creation with Onchain Games]]></title>
            <link>https://paragraph.com/@happychain/conjuring-creation-with-onchain-games</link>
            <guid>XzYwTJtBYypS7cYo6lpA</guid>
            <pubDate>Mon, 20 Jan 2025 18:15:35 GMT</pubDate>
            <description><![CDATA[We can ignite a creative revolution through onchain gaming, and we should.The SceneI’m writing this two months after the Devcon 2024 conference, and the fully onchain gaming space is in turmoil. With a few notable exceptions, the first generation of games is struggling to achieve traction, and the patients lack conviction in their own remedies. Like any good doctor, I have a diagnosis, and a cure. But today, I&apos;m taking a step back to explain why onchain gaming is more deeply transformati...]]></description>
            <content:encoded><![CDATA[<p>We can ignite a creative revolution through onchain gaming, and we should.</p><h1 id="h-the-scene" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The Scene</h1><p>I’m writing this two months after the Devcon 2024 conference, and the fully onchain gaming space is in turmoil. With a few <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.evefrontier.com/en/build">notable</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://piratenation.game/">exceptions</a>, the first generation of games is struggling to achieve traction, and the patients lack conviction in their own remedies.</p><p>Like any good doctor, I have a diagnosis, and a cure.</p><p><strong>But today, I&apos;m taking a step back to explain why onchain gaming is more deeply transformative than most understand.</strong></p><h1 id="h-praise-to-the-greats" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Praise to the Greats</h1><p>The onchain gaming space is permeated with creative thinking. We&apos;ve been told of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://0xparc.org/blog/autonomous-worlds">autonomous worlds</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://jacob.energy/hyperstructures.html">hyperstructures</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.guiltygyoza.xyz/2022/04/onchain-realities">onchain realities</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://movingcastles.world/three-eras-of-world-generation">worlding</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://aw.network/posts/composable-engineering">composable engineering</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.notion.so/Autonomous-World-s-library-update-as-needed-6cb73c2ee54343e689ffb708c42ff5c3?pvs=21">and</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://aw.network/">more</a>, and we have been inspired to build.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/61f44f1019379596d2f9f6e9fb9a1e0dbaefed8b4871f81a5259db2e55ffa679.png" alt="OG onchain games thinkers (real)" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">OG onchain games thinkers (real)</figcaption></figure><p>But a lot of this sounds a bit too abstract to me. I understand the dream, but it&apos;s hard to imagine what the end state looks like.</p><p>This is natural: when you are describing an uncharted future teeming with possibilities, it&apos;s hard to draw a clear map.</p><p>I&apos;m going to describe the fundamental transformation that onchain games can bring about. I hope it illuminates all of the above ideas.</p><h1 id="h-creation-and-those-too-swamped-to-seek-it" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Creation, and those too swamped to seek it</h1><p>The creative act is one of life&apos;s most intense joy, and one of its foremost purveyor of meaning. This much is obvious to anyone that has created anything of consequence, even if only <em>personal</em> consequence.</p><p>It is a tragedy that some people do not get to experience this, or only ever catch glimpses of it.</p><p>One of my fondest teenage memories is when I spend a whole day and the better part of the night trying to set up a World of Warcraft private server, along with one of my best friends. The challenge was just at the right level for us: we didn&apos;t now how to code, but we were tinkerers. And so over the course of the day we chipped away at the problem, fixing build system issues, missing DLLs, making sure assets were in the right format and in the right location.</p><p>At the end of that fateful night, we were able to log into our very own world. We prompty gave ourselves 10x speed and the power of flight, zoomed over the world to survey our creation, and we saw that it was good.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/efb720bc5813a12aa8ab2697c8f70cd68a2571cd1fc17ab63bc91114d893eca4.png" alt="Me, another time, another world." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Me, another time, another world.</figcaption></figure><p>We didn&apos;t create very much. But it did feel magical, and the moment captured the joy of creation: you struggle and then you are rewarded by enjoying something that you <em>made</em> (or in this case, made happen). The feeling would recur many times over the years, and it still is the thrill I seek to this day.</p><p>There is something extra special about creating a world, as well as any interactive experience that other people can engage with.</p><p>I want to democratize this feeling. The memory highlights that you don&apos;t need 10 years of programming practice to experience it.</p><p>Some of us have the skill to build games from scratch, but not the time. And people without the skill most likely don&apos;t have the time to embark onto a years-long learning journey.</p><p>They shouldn&apos;t, and don&apos;t need to.</p><p>But how, you ask?</p><h1 id="h-ugc-rules-everything-around-me-focg-get-the-money" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">UGC rules everything around me, FOCG, get the money</h1><p>User-generated content (UGC) is one of these boogeymen often used while pitching games, but few people understand how powerful it truly is.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/bf8585e8b67eebdcb2f3c9a8f1ffbc6cdee2d28ae54d367673d0d22e366c9950.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Let&apos;s look at the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://newzoo.com/resources/rankings/top-20-pc-games">top 10 video games by MAU</a>:</p><ol><li><p>Roblox</p></li><li><p>Minecraft</p></li><li><p>Fortnite</p></li><li><p>The Sims 4</p></li><li><p>Counter-Strike (2 &amp; GO)</p></li><li><p>Call of Duty (Modern Warfare II/III/Warzone/Black Ops 6)</p></li><li><p>League of Legends</p></li><li><p>Valorant</p></li><li><p>Grand Theft Auto V</p></li><li><p>Rocket League</p></li></ol><p>Roblox and Minecraft basically thrive on UGC — it is what drives their enduring success. The same goes for The Sims, which has players create houses and characters, and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.ea.com/games/the-sims/the-sims-4/pc/gallery/browse">share them</a>.</p><p>Four other games in this list (Fortnite, Counter-Strike, League of Legends and Valorant) are refinement of genres that started as mods of other games. [1]</p><p><strong>Without the ability to easily mod games and create user-generated content, the most popular gaming experiences available today wouldn&apos;t exist or persist.</strong></p><p>Even if you believe the genres would have eventually emerged, there is no doubt that modability sped up their adoption. And for every mod that made it big, there are 100 great gaming experiences that didn&apos;t crack the top 100. Many of those would never have existed if modding didn&apos;t make them easy to build.</p><p>This is my thesis for fully onchain games (FOCG): <strong>By empowering people to create new gaming experiences, you unlock previously untapped creative powers.</strong></p><p><strong>This multiplies the opportunities for breakout success, keeps gamers engaged, and offers a diversity of experiences that cater a broader player base.</strong></p><p>Everybody benefits: the developers of the original game, as mods drive adoption &amp; sales, the modders (who can create something that couldn&apos;t otherwise, and can profit themselves), and most of all the players, who are served with more and better gameplay options.</p><p><strong>Most importantly, this world is exciting.</strong> There is always something new, games keeps improving, changing and never gets stale.</p><hr><p>[1] The original Counter-Strike is a Half Life mod; Valorant is strongly inspired by Counter-Strike; League of Legends is a MOBA, a genre that started with DotA, a Warcraft 3 custom map; Fornite is a Battle Royale, a genre that got started with PlayerUnknown&apos;s Battle Royale, an ARMA 3 mod.</p><h1 id="h-hooked-on-creating" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Hooked on creating</h1><p><strong>UGC help foster creation by being vastly easier to build.</strong></p><p>It took 4 years and more a team of around 30 people to make Warcraft 3. Defense of the Ancients (DotA), its most successful mod, took <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://liquipedia.net/dota2/Dota_History">one guy only a few months</a>. The mod was open-sourced 6 months later, and many alternative versions were subsequently made. The seminal “DotA Allstars” — which combines the best ideas for all these forks — comes out 8 months later. The map (and its updates) end up being played by millions of players around the world. Its successors (DotA2 and League of Legends) are played by more than one hundred million players every month.</p><p>The most famous video game map of all times (de_dust2) was <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/watch?v=FWWhxfGq_yk">made by a 16 year old in his bedroom</a>. And these stories are by no mean unique.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2cc0816c07b07dfa87b708f1e192ed13ec371dd9a2124cec469fbae6ff2c4ef5.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>UGC also provides a neat pathway into more and more daring forms of creation.</p><p>The very best games offer a gamut of creation options, from simple to very ambitious, and each successful step can naturally lead you into the next:</p><ul><li><p>tweak a few things in the game (balance it better)</p></li><li><p>add custom units, objects, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.reddit.com/r/custommagic/">cards</a></p></li><li><p>create your own map, using existing tools and assets</p></li><li><p>modify an existing mod</p></li><li><p>create your own map, with custom texture and scripts</p></li><li><p>create your own mod</p></li><li><p>create your own modding tools</p></li></ul><p><strong>At their best, UGC gamifies the act of game making itself.</strong></p><h1 id="h-why-onchain" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Why onchain?</h1><p>If traditional games are able to tap into UGC and mods, why should we build onchain?</p><p>Many reasons:</p><ol><li><p>Onchain games enable monetizing open-source games, via network effects (e.g. match-making), a preference for the “real asset” (e.g. why NFT collections have value when everyone can copy them at zero cost), and incentives (possibility to extract real value from the game).</p></li><li><p>The game being open-source makes modding &amp; UGC a lot easier.</p></li><li><p>Smart contracts are a perfect platform for extensibility: it&apos;s the original use cases, and there is broad knowledge on how this can be done. There is clean separation between the frontend and the backend.</p></li><li><p>Easier devex: deploying to a blockchain means less time spent on devops.</p></li><li><p>Tokens are awesome</p><ul><li><p>They can incentivize UGC and mods. This can be done in traditional games too, it&apos;s just a lot easier on the blockchain.</p></li><li><p>They can be used for user acquisition, by giving out the game&apos;s currency and/or ownership, instead of spending on ads.</p></li><li><p>They create an easier path to funding, especially crowdfunding.</p></li></ul></li><li><p>Everlasting games: open-source + deploying onchain means the game developers cannot kill it even if they wanted to.</p></li><li><p>Provable fairness: no ability for game developers &amp; operators to cheat. This has been a real issue when value is at play, from poker site scandals to rogue MMO game masters. Operators also don&apos;t custody user assets and funds.</p></li><li><p>Massively (soon!) multiplayer by default, without incurring extra complexity to developers.</p></li></ol><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/16ddbcd1fb933974a4ee4600383ca382d668aae495b3f5f493c37613bb8db0fe.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>It&apos;s not perfect yet — building onchain still adds a lot of friction to the game making process.</p><p>We think the benefits already outweigh the costs, and it&apos;s only going to get better.</p><p>Improving this is one of HappyChain&apos;s missions! (And we are <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://lattice.xyz/">not</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://cartridge.gg/">alone</a>).</p><hr><p>In conclusion,</p><h1 id="h-let-there-be-games" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Let there be games.</h1>]]></content:encoded>
            <author>happychain@newsletter.paragraph.com (HappyChain)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/27ed6b1b670e1185b964ea18461fc09bcab5b69ddd3654e04362953e680ac763.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Happy Beginnings]]></title>
            <link>https://paragraph.com/@happychain/happy-beginnings</link>
            <guid>tNYzQvE9fFkAzBAlFTBc</guid>
            <pubDate>Sun, 07 Jul 2024 23:49:39 GMT</pubDate>
            <description><![CDATA[Today, we are thrilled to announce HappyChain, the simple happy game chain.Happy what now?HappyChain is an Ethereum layer 2 blockchain that brings free-to-play and zero-friction onboarding onchain. On HappyChain, you can start playing games in seconds, not hours. There is no wallet to install, and no gas fees to pay: you can log in with your social accounts and play straight away. Even your mom can do it. We push this even further with universal happy income: every day players can earn some $...]]></description>
            <content:encoded><![CDATA[<p>Today, we are thrilled to announce HappyChain, the simple happy game chain.</p><h1 id="h-happy-what-now" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Happy what now?</h1><p>HappyChain is an Ethereum layer 2 blockchain that brings free-to-play and zero-friction onboarding onchain.</p><p>On HappyChain, you can start playing games in seconds, not hours. There is no wallet to install, and no gas fees to pay: you can log in with your social accounts and play straight away. Even your mom can do it.</p><p>We push this even further with universal happy income: every day players can earn some $HAPPY tokens which lets them try out real-value games without spending a dime. Free-to-play? Try free-to-pay-to-play!</p><p>For builders, HappyChain aims to be the ultimate onboarding and distribution channel — the easiest way to get players to try your games, bar none.</p><p>Free-to-play is the major player acquisition funnel in Web2 — it&apos;s crazy it doesn&apos;t exist in Web3. Asking users to pay $50 to try a game is absurd. We&apos;re here to fix that, and bring in the Web2 users while we&apos;re at it.</p><p>Additionally, HappyChain provides a best-in-class experience for building innovative games and social apps. Here are only a few of the features on our roadmap:</p><ul><li><p>Synchronous randomness: <code>Math.random()</code> in Solidity, not only request-response schemes that incur latency</p></li><li><p>Private information support: avoid issues with commit-reveal schemes when the committer fails to reveal</p></li><li><p>Event and state-based automation, but with a buttery smooth onchain UX</p></li><li><p>Anti-sybil technology: grant extra benefits and target airdrops at verified players</p></li><li><p>First-class support for offchain compute and zero-knowledge primitives</p></li></ul><p>On the stack side, HappyChain will use the OP stack an use Celestia for data availability. These are two of the most legitimate infra projects in the space, and we&apos;re glad to be building on the shoulders of giants.</p><p>Working with them enables us to be decentralized and secure from day one. Thanks to our partner Caldera, we will also benefit from rock-solid battle-tested infrastructure.</p><p>Now you know what HappyChain is building. But why did we decide to build it?</p><p>HappyChain was born from a conversation that I (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/norswap">Norswap</a>) had with Mr. Small of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/0xSmallBrain">Small Brain Games</a> fame at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/komorebihack">Komorebi&apos;s hacker house</a> in Denver. Small came up with the name as a joke but at some point we wondered: what would we like to see in a gaming chain?</p><p>We liked our answers to that question, and HappyChain was born that very night. I was to build the chain, while Small would keep focusing on his studio, build initial content for the chain as our first partner, and advise the direction of HappyChain.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/631b36c94d59c807d3f858cbfab6d74c1ff0e1e435053244b542f77b28908467.png" alt="I can neither confirm nor deny that Small looks exactly like this." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">I can neither confirm nor deny that Small looks exactly like this.</figcaption></figure><p>Today — three months later — a team has been constituted and we&apos;re ready to start cracking and build this out!</p><p>But what did we see in this new chain idea that motivated us so?</p><h1 id="h-many-chains-little-games-what-we-unlock" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Many chains, little games — what we unlock</h1><p>It seems like these days not a week passes without a new L2 being announced. And many of these L2s seem very interested in going after the onchain gaming market. Why do we feel we need to throw ourselves into this mad rumble?</p><p>It&apos;s very simple: nobody else is solving the right problems. There is too much infra and not enough content, too many solutions in search of a problem. We want to focus on real problems that builders are having, right now.</p><p>Instead of reinventing the whole stack and locking users into new unproven technical solutions, we take what works, and solve one problem at a time. Builders want solutions to problems, not new paradigms.</p><p>So let&apos;s focus on problem number 1.</p><p>The fundamental problem of onchain gaming is distribution: it&apos;s too hard to play the games we have — <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.words3.xyz/">many</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.primodium.com/">of</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://skystrife.xyz/">which</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://forceprime.io/">are</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://darkshuffle.dev/">pretty</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://linktr.ee/Realms.World">fun</a>.</p><p>The technology to solve these problems exists: we have social login providers and gas sponsorship infrastructure. But in isolation, these are not enough.</p><p>These technologies need to be integrated into a coherent whole, and the right level to integrate them is the chain level.</p><p>Let&apos;s consider what a non-crypto-native user has to go through to play a social-login game on an L2:</p><ol><li><p>Install a wallet like Metamask (Are there instructions on how to do this?)</p></li><li><p>Secure your seed phrase (What is this? Why does it matter?)</p></li><li><p>Open a CEX account</p></li><li><p>Wire money to the CEX account</p></li><li><p>Swap for the chain&apos;s gas token (What is gas? What is the gas token?)</p></li><li><p>Withdraw the gas token to the chain</p><ol><li><p>If the chain isn&apos;t supported, withdraw to another chain — don&apos;t forget the gas token!</p></li><li><p>… and find a bridge from that chain to your target chain.</p></li></ol></li><li><p>Transfer the token to your game wallet (Don&apos;t forget to keep a little on the chain so you can withdraw!)</p></li><li><p>Play</p></li></ol><p>How many users are able and willing to do that?(Don&apos;t answer, it&apos;s a rhetorical question.)</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/be58995d7d9156b4e336086f97faaa7fc45cbf5d996270f5f03f7da481f1eda2.jpg" alt="Average Web2 user experience in Web3 according to Happy Labs&apos; user focus group." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Average Web2 user experience in Web3 according to Happy Labs&apos; user focus group.</figcaption></figure><p>On HappyChain, the experience looks like this:</p><ol><li><p>Sign up with your social account</p></li><li><p>Play</p></li><li><p>(optional) Use built-in fiat onramps or our canonical bridging hub to easily make in-game purchases… or claim your universal happy token to start playing real-value games, for free.</p></li></ol><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2560d15ccd379a42ff3b8e97f5fcdd94fa5c5adc3c5bf48e02482743ff331317.jpg" alt="Yet another satisfied HappyChain user." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Yet another satisfied HappyChain user.</figcaption></figure><p>We believe this will unlock a flourishing of new fun games and experiments for anyone to play and build upon. The new technical affordances we make available to onchain game builders will further help towards this goal.</p><h1 id="h-a-different-path-a-different-culture" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">A different path, a different culture</h1><p>We don&apos;t claim that zero-friction onboarding is a novel idea. We&apos;re not revolutionizing gaming or onchain social — we just want to bring fun experiences online and onchain: safe, trustless, and easy to use.</p><p>Compared to other offerings, we embrace permissionlessness and experimentation.</p><p>HappyChain is a place for everyone: we welcome both big-budget studios and independent builders trying to create something new. We endeavor to make HappyChain a hotbed for experimentation.</p><p>We&apos;re very excited about the new experiences made possible by the blockchain, and in particular by fully-onchain games — these open-source cannot be killed and can be forked, but still offer a clear path to monetization for their creators. They also make it much easier to enable user-generated content.</p><p>HappyChain is entirely permissionless, and so is integrating our wallet SDK. User-centric gas sponsorship can go towards any project, with additional gas sponsorship for our partners. We don&apos;t gatekeep the experience: any project can easily set up their own gas sponsorship.</p><p>…</p><p>But honestly, HappyChain is about so much more than that. I don&apos;t think I could have put it better than Mr Small, who contributed this to the original pitch for HappyChain:</p><blockquote><p>HappyChain is an unserious light chain, with engaging content.</p><p>Our focus is on fun lighthearted experiences.</p><p>This is meaningfully different from existing chains.</p><p>DeFi-focused chains are about making money with yield farming and speculation, whether the tone is sober (e.g., Arbitrum) or degenerate (e.g., BeraChain). On HappyChain, making money is only a second-order consideration.</p><p>Existing gaming chains try to cater to serious gamers with ambitious games. While we see value in this, we believe the first step should be to focus on casual bite-sized gaming experiences and social interactions.</p><p>Finally, HappyChain will have its own unique, exclusive, and engaging content. This sets it apart from a score of copycat chains that only feature clones of popular DeFi apps and are glorified playgrounds for airdrop farmers.</p><p>Existing chains are dark, neon green, and hyper-technological.</p><p>HappyChain is light, fluffy, pastel, and humane.</p></blockquote><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4781d4f52b33d19c959b180fd77c0a457654b82fae589057231ad69c7f5b6b76.jpg" alt="Which way, onchain gamer? (Yes I know the right picture isn&apos;t neon green, but I couldn&apos;t find a better one and we fired the intern — he wasn&apos;t happy enough.)" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Which way, onchain gamer? (Yes I know the right picture isn&apos;t neon green, but I couldn&apos;t find a better one and we fired the intern — he wasn&apos;t happy enough.)</figcaption></figure><p>And finally, I&apos;ll add this: we take the mission seriously, but we don&apos;t take ourselves too seriously. And we&apos;ll always give it to you straight.</p><p>Our biggest upside is on the corner of your mouth 🤠✌️</p><h1 id="h-wait-theres-more" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>… wait, there&apos;s more!</strong></h1><p>This article is quite long already, but I could talk your ears off about what we have planned for HappyChain.</p><p>Stay tuned for more information about our vision for HappyChain, including:</p><ul><li><p>Information about the various features we have planned, as we build them out</p></li><li><p>Our marketing plans, to turn HappyChain into an unstoppable distribution machine that not only helps you onboard your users, but also helps you find them in the first place</p></li><li><p>Our plans for the utility of the $HAPPY token — it&apos;s the gas token of the chain, but there is so much more</p></li><li><p>Our plans to distribute $HAPPY to the public (all I can say is “no bullshit”)</p></li><li><p>Our initial perpetual airdrop mechanism (not going to lie, <strong>it&apos;s pretty dumb</strong>)</p></li><li><p>In-depth explainers about our technology</p></li><li><p>Spotlights on our gaming partners</p></li><li><p>Stories from the front, and about our journey so far</p></li></ul><p><strong>You can follow us here on Mirror, on </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/happychaindevs"><strong>X / Twitter</strong></a><strong>, and on </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://warpcast.com/happychain"><strong>Farcaster</strong></a><strong>, or subscribe to </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://happychain.ck.page/173e280ac8"><strong>this mailing list</strong></a><strong>.</strong></p><p>Until next time,</p><p>Stay Happy my friends 🤠</p>]]></content:encoded>
            <author>happychain@newsletter.paragraph.com (HappyChain)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/2cd2f499edacc8221f8a05d5c2562f0e116dcac2c6ca4deaa2d059bd7186809c.png" length="0" type="image/png"/>
        </item>
    </channel>
</rss>