<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Timmy Ho on Medium]]></title>
        <description><![CDATA[Stories by Timmy Ho on Medium]]></description>
        <link>https://medium.com/@tim-hch?source=rss-665949c7b4c2------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*JlD7bKJG1GAjl5MxZN96kw.png</url>
            <title>Stories by Timmy Ho on Medium</title>
            <link>https://medium.com/@tim-hch?source=rss-665949c7b4c2------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 08 Apr 2026 00:39:54 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@tim-hch/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Surviving The Ablockalypse: Can Ethereum Pass The Decentralization Smell Test?]]></title>
            <link>https://tim-hch.medium.com/surviving-the-ablockalypse-can-ethereum-pass-the-decentralization-smell-test-53d631f3b13b?source=rss-665949c7b4c2------2</link>
            <guid isPermaLink="false">https://medium.com/p/53d631f3b13b</guid>
            <category><![CDATA[decentralization]]></category>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[open-source]]></category>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[bitcoin]]></category>
            <dc:creator><![CDATA[Timmy Ho]]></dc:creator>
            <pubDate>Fri, 13 Sep 2024 04:05:38 GMT</pubDate>
            <atom:updated>2024-09-13T12:24:24.671Z</atom:updated>
            <content:encoded><![CDATA[<h4>The ablockalypse is happening. Our favourite service providers are failing. Would Ethereum still pass the decentralized-or-not smell test?</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZdGLfPjh9Kmtf1Ws7wx1-w.png" /></figure><p>As a space, we talk a lot of game about decentralization. The core tenet of this principle value is that we shan’t need central actors in order to interact onchain. And that’s a <em>really</em> big claim worth investigating, especially since we love to shout into a megaphone about how much we value our decentralization. Yet, curiously we continue to fail in our efforts to persuade our blupilled brethrens in taking the redpill. So I am here to investigate a would-be casual user’s most common touchpoints onchain and pose the question (and hopefully answer):</p><blockquote>“Just how decentralized is decentralized?”</blockquote><p>So let’s olympic-dive into this mafaaaa and see “wha happuns” with the following hypothetical failures:</p><ol><li>A web/hot wallet failure 👜</li><li>A hardware wallet failure 🔑</li><li>A failure in communicating with the chain (e.g. Infura endpoint goes down) 🗣</li><li>A dApp frontend failure 🖼</li><li>A block explorer failure ⛵️</li></ol><blockquote>Note: as a predominantly Ethereum-based actor, I shall talk about Ethereum. Unfortunately, I neither have the networth nor the time to get into other L1 ecosystems at depth.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/0*YEuTqkYNvIltETSG" /></figure><h3>A web/hot wallet failure, otherwise known as `wtf do we do if MetaMask breaks?`</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*37r33b76gM7cznOZv0s0JA.png" /></figure><p>If we are redpilling our friends about the magic of onchain, we typically start them off with — and let’s acapella this together please:</p><blockquote><strong>S</strong>ELF-CUSTODYING YOUR ASSETS</blockquote><p>Great, and I am glad we are all on the same page about <em>the</em> <em>most</em> <em>important</em> <em>thing</em> <em>in</em> <em>crypto™</em>. And since hardware wallets are typically a bigger product hurdle for casuals, we noble few evangelizers (praise be) might turn them onto a more common entryway for self-custody — via a hot wallet provider like MetaMask, Rainbow, Rabby, or some such. Let’s use MetaMask for the sake of example.</p><p>MetaMask, like most web-based browser wallets, is downloaded as an app on your device/phone or added as an extension to your browser. Once it’s on your platform of choice, technically you should be able to access it unless your device dies, you die, the internet dies, or the power grid and human-civilization-as-we-know-it-dies. Otherwise, the failure of MetaMask likely comes from either 1) a bad update that breaks the app or 2) the service is sunset for good, or 3) more commonly the default endpoint goes down.</p><p>We will explore 3) later, so let me quickly digest for the casuals what one would do if 1) or 2) were to happen. The MetaMask fox dies in a baptism of regulatory shit-catapults. Oh no, so sad, wat do :(? Well folks, this is the reason why we generate a seed phrase and keep it safesies. Let’s get mildly technical for a bit here…</p><ol><li>Da “blockchain” in simplest terms can be seen as a state transition machine tracking state changes in the “computer” over time</li><li>Standards need to be created, implemented, and adhered to in order to have things like “tokens” represented and widely understood by all sorts of different service providers</li><li>Analogy: international freight shipping needs to adhere to standard dimensions of a container to capture the economies of scale in efficient transport</li><li>Analogy part deux: Ethereum is one of many giant oceans on Earth, and service providers are the cargo ships carrying the messages and data structures to and fro in STANDARDized containers</li><li>Standards are often shared between one blockchain ecosystem and another</li></ol><p>For example, BIP-39 is a widely adopted standard that originates from Bitcoin and defines the method for generating mnemonic phrases. These phrases are then used to derive a cryptographic seed, which can be applied to generate wallets or private keys across different blockchain systems.</p><p>This is the basis for our <a href="https://en.wikipedia.org/wiki/Public-key_cryptography">public-private key cryptography</a> and how ownership “happens” over digital assets. So should our favourite wallet service provider ever go down, we can take our precious little seed phrasesessies, import them into another wallet service provider that implements the BIP-39 standard, and carry on onchain.</p><blockquote>Fun fact: this is how most people also get phished and socially engineered to enter their seed phrases into a malicious frontend. That is a guaranteed gg;no re. Never ever <strong>EVER</strong> enter your seed phrases willy nilly into anything unless you are 150,000% sure it is legit!</blockquote><p><strong>Decentralized or not decentralized?</strong> Decentralized! 💮</p><p><strong>Summary:</strong> if your favourite wallet provider goes down permanently, you take your seed phrase or private key and import it into a different provider.</p><h3>Hardware wallet failure, otherwise known as `wtf do we do if my Trezor battery dies?`</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*RKJ3YDL8YkAWjTt6bpUGTA.png" /></figure><p>This section is largely a repeat of the above in terms of provider failure — you would simply import your seed phrases to another provider… with one important exception. Most people typically use hot wallets for small or otherwise inconsequential amounts of crypto. The bulk of your “vault” should otherwise go on a hardware wallet if you are serious about security. So… what happens when the internal batteries for your Trezor, Lattice1, Keystone, imKey, etc etc begin to fade? Well, you better damn have:</p><ol><li>Wrote down your seed phrase in a secure manner</li><li>Stored your seed phrase in a secure manner, and</li><li>Can easily retrieve your seed phrase in a secure manner</li></ol><p>If none of the above have been completed or can be fulfilled, well… RIP. Decentralized not so decentralized becuz u dun fuck’d up gurl.</p><p>Otherwise, if you were diligent about safeguarding your hardware wallet’s seed phrase, you can simply import it into another BIP-39 compliant wallet to carry on onchain.</p><p><strong>Decentralized or not decentralized?</strong> Decentralized! 💮</p><p><strong>Summary</strong>: if your favourite wallet provider goes down permanently, you take your seed phrase or private key and import it into a different provider.</p><blockquote>I guess the crisis scenario in the first two cases are… what if the government outlaws self-custodying your assets? Well hot damn, if that happens, buckle up buckos, we’d have some strong collective civil action in response. That’s like banning owning property. Also… did the government or state ever successfully stop Tor? Or freedom of religion? Or the fucking internet?</blockquote><h3>RPC endpoint failure, otherwise known as `wtf do we do if we can’t communicate with the chain?`</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lt1kbkKaPBscFFUOHgIARQ.png" /></figure><p>Let’s examine case 3) that we mentioned in the first section. Should MetaMask fail, usually it’s because communication with the blockchain has failed. Wat mean? Wallets act as proxies for user actions. They communicate with a blockchain through an RPC endpoint. With MetaMask, the default RPC endpoint is Infura’s API (they are the creators of MM). The wonderful thing about most wallets? You can select your own. So if Infura nodes aka their RPC endpoints go down, we can point our wallet to a different one from another node provider.</p><p>There’s this wonderful service provided by DefiLlama called <a href="https://chainlist.org">ChainList</a>. They maintain a list of RPC endpoints we can point ourselves to for almost every chain that has ever been deployed.</p><p>Me personally? I love me some good ol’ decentralization. I personally run an Ethereum full node on a dedicated <a href="https://dappnode.com">Dappnode</a> machine. In casual terms… Ethereum relies on a network of specialized computers that verifies and validates the latest state changes being pinged to the blockchain. Some of these nodes stake ETH in order to have the opportunity to propose new blocks and earn a small reward for doing so. Fortunately, you don’t <em>need</em> to stake ETH to be a full node… which is why I run my machine without staking to support the decentralization of the network (moar nodes verifying the chain = less centralization risks to large server clusters). The point of that entire aside is that there is an added benefit to operating a node: I can access my own dedicated RPC endpoint! So, should Infura’s service ever go down, I can simply revert to my own in order to communicate with the blockchain. It’s one of my favourite features of Ethereum!</p><p>The hardware can be a bit steep, but it’s also not bank-breaking if you truly wish to run your own node. Dappnode sells dedicated Intel NUCs for ease-of-plug-and-play, but you can also run a node on your own setup provided you meet the minimum hardware requirements.</p><p>Neato!</p><p><strong>Decentralized or not decentralized?</strong> Decentralized! 💮</p><p><strong>Summary</strong>: there are plenty of alternative RPC endpoints for you to choose from. Failing that, you can, with some work, run your own Ethereum node for ultimate decentralization.</p><p>And for a shameless plug, check out my video for Dappnode:</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FVR_aZXtX3r4%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DVR_aZXtX3r4&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FVR_aZXtX3r4%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/b1300c3c21cc1f706e7e58a5a77be43c/href">https://medium.com/media/b1300c3c21cc1f706e7e58a5a77be43c/href</a></iframe><h3>dApp frontend failure, otherwise known as `oh no muh Uniswap frontend blocked access from ‘muricans`</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pVjLNNeY7LxlghYuTAMTPg.png" /></figure><p>Ah, now we’re talking. This is the meat of the decentralization argument. GLADIATORS, THIS IS WHAT WE CAME HERE FOR. Let’s say we are using a popular decentralized exchange (DEX) such as <a href="https://uniswap.org">Uniswap</a> to conduct — and let’s accapella this together again folks—</p><blockquote>SELF-CUSTODIAL onchain trading.</blockquote><p>Great, I am glad we are <em>still</em> on the same page about <em>the</em> <em>most</em> <em>important</em> <em>thing</em> <em>in</em> <em>crypto™. </em>And then let’s say big daddy gov one day decides that they don’t like their citizens participating in self-custodial trading because muh citizens need accreditation to participate. Oooooohwheeee wouldn’t that be a doozy for collective civil action. Nevertheless, we go online, and we visit <a href="https://uniswap.org">https://uniswap.org</a>. And for some fucking reason we’re not using a VPN, so we find ourselves unable to access Uniswap. Oh no, wat do?</p><p>For the casuals, this is where the magic of blockchain shines. The Uniswap frontend is only a frontend. A beautiful, pioneering frontend at that. But only a frontend and nothing more than that. The real magic of onchain is in the backend. Because the frontend is married to the immaculate, Ethereum-based backend. Because the backend of Uniswap is supported by good ol’ IMMUTABLE, PERMISSIONLESS, and UNSTOPPABLE motherfuckin’ SMART CONTRACTS.</p><ol><li>Alternative 1: So if we find ourselves unable to access the frontend, we can go to <a href="https://etherscan.io">https://etherscan.io</a>, query Uniswap’s SwapRouter contract address at <a href="https://etherscan.io/address/0xE592427A0AEce92De3Edee1F18E0157C05861564">0xE592427A0AEce92De3Edee1F18E0157C05861564</a>, connect to MetaMask, and then <em>directly</em> <em>write</em> to the smart contract’s exactInputSingle function. This function allows us to specify the token addresses that we want to swap in and out, the quantities, fees, and other parameters. Big daddy gov be damned.</li><li>Alternative 2: we know wallets primarily communicate with the blockchain-in-the-sky via RPC endpoints. So, as long as we have access to <em>any</em> RPC endpoint, whether through a third-party provider or via running your own node, you can directly interact onchain. You would need a bit of programming knowledge, but you would write a script using any of the open source Ethereum libraries such as web3.js, ethers.js, or viem, and then directly query the custom RPC endpoint with the parameters of your smart contract input and output to complete the transaction. Now ofcourse, directly interacting with a smart contract with either Etherscan’s “write contract” or writing your own script is a <em>fair</em> bit more technical than using the made-for-casuals Uniswap frontend, but no one said hardcore decentralization was easy now, did we?</li><li>Alternative 3: the neat thing about composability (the ability to brick together disparate lego pieces to form anew) in the web3 paradigm is that other protocols can also leverage Uniswap’s contracts for their own benefit. For example, DEX aggregating protocols such as 1inch or Matcha, might aggregate many different DEXs, including Uniswap. This gives end users alternative frontend options to use for trading. So if Uniswap goes down, other dApps may be active that still use the Uniswap contracts on the underlying. Motha.Fucking. Smart contracts.</li><li>Alternative 4: understanding frontend centralization to be a risk in and of itself, the crypto community banded together to host an alternative version of the Uniswap frontend on IPFS at <a href="https://uniswap.eth.link">https://uniswap.eth.link</a>. This way, even with a geo-blocked Uniswap frontend, users will always be able to interact with the official Uniswap contracts through a frontend that looks identical to the official one. Thank you, open source! So if a dApp is deemed important enough, it’s likely the internet will stand up to the challenge to host an alternative.</li></ol><p><strong>Decentralized or not decentralized?</strong> Decentralized! 💮</p><p><strong>Summary</strong>: you can easily get around frontend failures, but you have to be willing to get a bit rough and dirty, especially if you plan to directly write to the smart contracts yourself.</p><h3>Block explorer failure</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*etMeWxJnzSyb4VD_XqqLWw.png" /></figure><p>A block explorer (and more specifically <a href="https://etherscan.io">Etherscan</a>) might be one of the most important tools for anyone doing anything onchain. The truth is, for most consumer-grade use of the chain, this aspect of the blockchain could be abstracted away entirely — casuals should only care about whether a transaction goes through or not. However, there are instances when being able to “explore” the chain and “see” your transactions in the format that block explorers like Etherscan presents it in is useful. Not the least of which being able to directly “read” or “write” to a smart contract in a programmatic sort-of-way is a uniquely underrated functionality of Etherscan. Nevertheless, what if 1) Etherscan went down, and 2) what if <em>all </em>block explorers went down?</p><p>First off, there are many alternative block explorers. So, similar to choosing a different wallet provider if your preferred service went down, you would just pivot to another. For the second case, this one is definitely a bit tougher to deal with. The indexing of blockchain data is an insanely valuable part of the stack. You have decentralized options such as The Graph providing a backstop. However for casuals, they are almost certainly not figuring out how to perform custom data queries using GraphQL. Perhaps some kind samaritan would take up the mantle to provide alternative ways to query the chain in a hypothetical ablockalypse.</p><p>This is why regional diversity of service providers, not just block explorers, across the spectrum of web3 services is so important. Regulatory attacks happen often enough on crypto. But an orchestrated regulatory attack across all jurisdictions? Unlikely. And in any case, any nation state willing to go to war against crypto would simply be shooting themselves in the foot otherwise. Why lose ground in such a pivotal megapolitical theatre? It’s like rejecting the internet on account of the possibility that you can traffick drugs with it.</p><p><strong>Decentralized or not decentralized?</strong> Not (so) decentralized! ❌</p><p><strong>Summary</strong>: as a proud and self-admitted hypercasual, I really don’t know how I would subsist onchain without Etherscan xD</p><h3>Final score: Very decentralized! 💮</h3><p>I’ve explored 5 potential failures throughout this piece: software wallets, hardware wallets, RPC endpoints, dApp frontends, and block explorers. With these being the <em>extremely</em> common touchpoints for the onchain casual, on the whole, I would say ⅘ readily passes the decentralized-or-not smell test. There are a variety of alternatives with which casuals can use in order to get around the failure of any one part of the stack. And failing that, it would be negligible for upstanding Ethereans to step up to the plate to create alternatives as soon as one part of the stack goes down.</p><p>So, what do you think? Are there other parts of the stack that would be worth examining? Is Ethereum decentralized enough? Are we truly on the paradigm of an unstoppable world computer? In my opinion? Yes. And that makes for an exciting future where hundreds of millions, if not billions, will be able to tap into internet of money protocols permissionlessly and equitably. LFG.</p><p><em>Follow me on </em><a href="http://twitter.com/haochizzle"><em>Twitter</em></a><em> @haochizzle or </em><a href="https://warpcast.com/0xtim.eth"><em>Warpcast</em></a><em> @0xTim.eth</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*b6Hj1FQX6hUd6v-y" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=53d631f3b13b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[the problem with cross-chain & payments today]]></title>
            <link>https://tim-hch.medium.com/the-problem-with-cross-chain-payments-today-5e70e4d70f03?source=rss-665949c7b4c2------2</link>
            <guid isPermaLink="false">https://medium.com/p/5e70e4d70f03</guid>
            <category><![CDATA[ux]]></category>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[cryptocurrency]]></category>
            <category><![CDATA[payments]]></category>
            <category><![CDATA[crosschain]]></category>
            <dc:creator><![CDATA[Timmy Ho]]></dc:creator>
            <pubDate>Wed, 10 Jul 2024 10:25:12 GMT</pubDate>
            <atom:updated>2024-07-10T10:25:12.294Z</atom:updated>
            <content:encoded><![CDATA[<h4>and why solving chain abstraction™ will be critical to broader adoption</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*U2AEjpU3FBItyITRj8tk4Q.png" /></figure><p>story time: i love the magic of onchain payments, esp. for products &amp; services like <a href="http://rotki.com">rotki</a>, <a href="http://venice.ai">venice.ai</a>, <a href="https://simplelogin.io/">SimpleLogin</a>, just to name a few (<em>vendors, more of this pls!</em>). but cross-chain UX as it stands is effortful at best and untenable at worst. expecting broad adoption at this moment is comedic gold.</p><p>some vendors, like rotki, independently figure out their payment processing. others like venice.ai and SimpleLogin take the <a href="https://www.coinbase.com/commerce">coinbase-commerce</a> route, which, for the moment, definitely seems like the broadly adopted solution for more established offerings. that’s all fine-and-dandy until you get to the payments screen. the cognitive load — even for me, your average onchain plebeian — is TAXING (mi’lord).</p><p>from a UX perspective, these offerings presume some pretty steep prerequisites from the user:</p><ol><li>😵‍💫 know which tokens/chains you have &amp; are on</li><li>😵‍💫 know which tokens/chains the vendor accepts</li><li>😵‍💫 know how to circumnavigate across chains/assets to get to the target asset</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/600/0*zTj_4DlxB8dth-Fl.jpg" /></figure><p>properly secured self-custody is alrdy a mega ask. now we want to levy on another one by getting users to navigate cross-chain? 😂 LOL talk about reading the room. trust me when I say this. most users, i.e. me, just want you to take our damn $$ so we can get to the product itself. if there’s too many steps in between, 9/10 times I am alrdy moving on. that’s a missed acquisition of the extremely onchain for:</p><ol><li>❌ your product</li><li>❌ your community</li><li>❌ crucial product feedback</li><li>❌ your bottom line</li></ol><blockquote>gg no re</blockquote><p><em>p.s. this kinda happened to me with gitcoin once</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/698/0*b6ILmJOPJEpu9uYk.jpg" /></figure><p>some services definitely do it better than others, e.g. ilike rotki’s classic method for picking from THEIR list of networks/tokens &amp; generating an addy for me to send to. but you really have to be a masochist otherwise when you want to obtain an asset (for payments) in a fee-conscious way. now if you’re a product and you’re trying to appeal to your avg crypto holder? im telling you… <strong>NO SHOT</strong>. they’ll default to tradFi.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/220/0*YA2N7egqrFaWyrcP.gif" /></figure><p>a sidebar: i have friends that still have never done anything off of mainnet (let alone ON mainnet) cuz the cross-chain UX is an absolute clusterfuck. if I extrapolate my friends as the average holder &amp; further extrapolate their gumption for cross-chain, that’s gotta be idle capital in the excess of <em>HUNDREDS OF MILLIONS</em> 💸</p><p>😢 the sad part is the missed opportunities for them to experience the magic of onchain. even bigger is the missed opp for building a thriving onchain economy (outside of defi).</p><p>while some protocols (e.g. <a href="https://x.com/EverclearOrg">everclear</a> (formerly connext) and <a href="https://across.to/">across</a> + honourable mention for my darling <a href="http://buildwithsygma.com">sygma</a>) make the prospect of getting to the target asset much easier… it’s still a heavy cognitive load for most users besides the most native of onchain natives.</p><p>which lands us in the present day with <em>chain abstraction™</em> being the latest buzz. the word of the gospel says:</p><blockquote>“abstract away thy notion of chains and networks, and thou shallst get to the heart of the thing”</blockquote><p>otherwise known as ➡️ input action X, ➡️ output result Y</p><p>it’s why we need projects like <a href="http://sprinter.box">sprinter</a>, the latest joint effort from the sygma and chainsafe teams. the mandate is simple: meet the users where they are (app/product level), minimize the cognitive load, and provide a seamless path for payments:</p><ol><li>✅ unify token balances</li><li>✅ sus out optimal execution paths for a user’s target asset/needs</li><li>✅ one signature</li><li>✅ remove the need to switch networks</li></ol><p>👆 i promise you when i was paying for rotki, venice.ai, SimpleLogin, etc. i had to do all of that on my own.</p><p>use sprinter.</p><p>i’d like to see these hypotheticals come to reality:</p><p>1️⃣ product costs $50 USDC. user has USDC spread out across multiple chains — user has no idea where. route user the fastest/most cost-efficient way to paying $50 USDC with multi-chain USDC, to the target chain. confirm.</p><p>2️⃣ same scenario above. except maybe user doesn’t have enough/any USDC. route user the fastest/most cost-efficient way to swapping to $50 USDC, using multi-chain/multi-assets. confirm.</p><p>3️⃣ Same scenario above. Except maybe even across multiple wallets? someone tell me if this is even possible?</p><p>we’re moving in the right direction. the early stage focus on infra made sense when blockspace was still a rare commodity. now let’s turn our heads to the users.</p><p>because it’s high time we stop ignoring the application layer — in effect, the users.</p><iframe src="https://cdn.embedly.com/widgets/media.html?type=text%2Fhtml&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;schema=twitter&amp;url=https%3A//x.com/ascii_g1rl/status/1809968456827015414&amp;image=" width="500" height="281" frameborder="0" scrolling="no"><a href="https://medium.com/media/95ddf60e843847ff2cd7820f319779ab/href">https://medium.com/media/95ddf60e843847ff2cd7820f319779ab/href</a></iframe><p>keep a close eye on sprinter as it progresses 👇</p><p><a href="https://sprinter.box">https://sprinter.box</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NGc-cY_1xU02xHOPWILYmg.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5e70e4d70f03" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How To Deploy Cross-chain Contracts To Same Address From Single Chain & Gas Using multichain-deploy]]></title>
            <link>https://tim-hch.medium.com/how-to-deploy-cross-chain-contracts-to-same-address-from-single-chain-gas-using-multichain-deploy-dd3b1665f028?source=rss-665949c7b4c2------2</link>
            <guid isPermaLink="false">https://medium.com/p/dd3b1665f028</guid>
            <category><![CDATA[ethereum-development]]></category>
            <category><![CDATA[hard-hat]]></category>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[web3-development]]></category>
            <category><![CDATA[foundry]]></category>
            <dc:creator><![CDATA[Timmy Ho]]></dc:creator>
            <pubDate>Thu, 28 Mar 2024 14:22:46 GMT</pubDate>
            <atom:updated>2024-04-23T15:18:37.877Z</atom:updated>
            <content:encoded><![CDATA[<h3>How To Deploy Cross-chain Contracts To The Same Address From Single Source Chain &amp; Gas Using The multichain-deploy Foundry Plugin</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*-LwinzwksZY7Tz2C" /></figure><p>We <a href="https://tim-hch.medium.com/how-to-deploy-unified-cross-chain-contract-addresses-from-single-source-blockchain-gas-using-the-08edf5e0ec17#081c-2247e7b4796f">previously looked</a> at deploying cross-chain smart contracts to the same address <em>while paying only source chain gas/fees</em> using the <a href="http://chainsafe.io">ChainSafe</a> x <a href="http://buildwithsygma.com">Sygma</a> Hardhat plugin called <a href="https://github.com/ChainSafe/hardhat-plugin-multichain-deploy">multichain-deploy</a>. We briefly discussed how this benefits devEx so that a developer would not need to go and acquire native tokens for each chain that they would like to deploy to.</p><p>In this follow-up post, we take a look at the <a href="https://github.com/ChainSafe/foundry-multichain-deploy?tab=readme-ov-file">Foundry implementation of the multichain-deploy plugin</a>. It is similarly developed by ChainSafe using the Sygma interoperability protocol as the backend for cross-chain deployments.</p><p>Let’s dive in.</p><p>Create an example project folder:</p><pre>$ mkdir exampleProject-foundry-multichain-deploy<br>$ cd exampleProject-foundry-multichain-deploy</pre><p>And let’s pop into VSCode:</p><pre>$ code .</pre><p>Run the following commands to install the Foundry toolchain locally:</p><pre>$ curl -L https://foundry.paradigm.xyz | bash<br>$ foundryup</pre><p>We will then run forge install on the multichain-deploy plugin. This will install all of the required files into the lib folder:</p><pre>$ forge install chainsafe/foundry-multichain-deploy</pre><p>What makes Foundry great dev tooling is its use of Solidity for both scripting and testing — no JavaScript or TypeScript required. By default on install, Foundry comes with its own example contract, “Counter.sol”, and its own example contracts for scripting and testing, “Counter.s.sol” and “Counter.t.sol” respectively.</p><p>For continuity, we will use the same Hardhat tutorial “Lock.sol” contract we used in the <a href="https://tim-hch.medium.com/how-to-deploy-unified-cross-chain-contract-addresses-from-single-source-blockchain-gas-using-the-08edf5e0ec17#081c-2247e7b4796f">previous post</a>. Let’s delete all of the “Counter”-based contracts and go ahead and create all of the related contracts to “Lock.sol”:</p><pre>$ rm ./src/Counter.sol ./script/Counter.s.sol ./test/Counter.t.sol<br>$ touch ./src/Lock.sol ./script/Lock.s.sol ./test/Lock.t.sol</pre><p>Copy and paste the contract code for “Lock.sol” (found <a href="https://github.com/haochizzle/multichain-deploy-examples/blob/main/hardhat-example/contracts/Lock.sol">here</a>) into the “Lock.sol” file we just created.</p><blockquote><strong>NOTE: Remember to stay consistent across Solidity compiler versions.</strong></blockquote><p>Let’s go ahead and create our environment variable <strong>.env</strong> file in our root:</p><pre>$ touch .env</pre><p>And populate the <strong>.env</strong> with the key values that we will need to run this tutorial. PRIVATE_KEY should be set beginning with 0x followed by the 32-byte private key <a href="https://support.metamask.io/hc/en-us/articles/360015289632-How-to-export-an-account-s-private-key">exported from a wallet like MetaMask</a> (without &lt;&gt; brackets, within the quotations). CHAIN_RPC_URL should be set with the RPC URL of your choice from the chain you would like to deploy from, e.g. if you are deploying from Sepolia, then a <a href="https://chainlist.org/chain/11155111">Sepolia RPC URL</a>. DEPLOYER_ADDRESS should be set with the owner address of the contract; typically it would be the address derived from the private key (without &lt;&gt; brackets, within the quotations):</p><pre>PRIVATE_KEY=&quot;0x&lt;SET_YOUR_EXPORTED_PRIVATE_KEY_HERE&gt;&quot;<br>CHAIN_RPC_URL=&quot;https://ethereum-sepolia-rpc.publicnode.com&quot;<br>DEPLOYER_ADDRESS=&quot;&lt;SET_THE_OWNER_OF_THE_CONTRACT_HERE&gt;&quot;</pre><p>Source our <strong>.env</strong>:</p><pre>$ source .env</pre><p>Next, let’s write our Solidity script for deploying cross-chain. In our “Lock.s.sol” file, we will import all of our priors for Forge scripting as well as the multichain-deploy plugin:</p><pre>// SPDX-License-Identifier: UNLICENSED<br>pragma solidity ^0.8.20;<br><br>import {Script, console} from &quot;forge-std/Script.sol&quot;;<br>import {CrosschainDeployScript} from &quot;foundry-multichain-deploy/CrosschainDeployScript.sol&quot;;</pre><p>We will inherit from the CrosschainDeployScript and then set the main entry of our Solidity script with the run function. We then call CrosschainDeployScript’s setContract function on the artifact variable, which we will set to &lt;file name&gt;:&lt;contract name&gt;, or in this case Lock.sol:Lock. This function obtains and stores the contract bytecode by artifact path:</p><pre>contract LockScript is CrosschainDeployScript {<br>    function run() public {<br>      string memory artifact = &quot;Lock.sol:Lock&quot;;<br>      this.setContract(artifact);</pre><p>We then declare our Solidity contract’s constructor arguments as variables. In this case, one would be a uint256 for an unlockTime (which we will not be using in this example), and the other an address variable that pulls a DEPLOYER_ADDRESSfrom our<strong> .env</strong> file at root. DEPLOYER_ADDRESS is the address we will declare as the owner of this contract.</p><p>Following that, we declare the constructorArgs object and use the ABI-encode function to encode our two constructor arguments. This will deploy the contract with these arguments as our defaults:</p><pre>// Assuming an unlock time in the future. Adjust the time as necessary.<br>    uint256 unlockTimeInTheFuture = block.timestamp + 1 days;<br>    address ownerAddress = vm.envAddress(&quot;DEPLOYER_ADDRESS&quot;);<br><br>// Encode constructor arguments: owner address and unlock time.<br>    bytes memory constructorArgs = abi.encode(ownerAddress, unlockTimeInTheFuture);</pre><p>We can now write our script such that we make post-deployment contract calls to the setName function from our contract. To do so, we will declare an object for each chain we will deploy to (initDatSepolia, initDatHolesky , initDatMumbai) and use the abi.encodeWithSignature method and pass in the function we want to call (setName) and the string of the name we want to pass. Note with the code here that we set the name to the chain we are deploying to:</p><pre>// Optionally, encode `initData` if you wish to call `setName` post-deployment.<br>// Example: setting name to the name of the chain we are deploying to<br>    bytes memory initDataSepolia = abi.encodeWithSignature(&quot;setName(string)&quot;, &quot;Sepolia&quot;);<br>    bytes memory initDataHolesky = abi.encodeWithSignature(&quot;setName(string)&quot;, &quot;Holesky&quot;);<br>    bytes memory initDataMumbai = abi.encodeWithSignature(&quot;setName(string)&quot;, &quot;Mumbai&quot;);</pre><p>We then call CrosschainDeployScript’s addDeploymentTarget function and pass in, most crucially, the target chains in quotations, and then the objects that we previously constructed:</p><pre>this.addDeploymentTarget(&quot;sepolia&quot;, constructorArgs, initDataSepolia);<br>this.addDeploymentTarget(&quot;holesky&quot;, constructorArgs, initDataHolesky);<br>this.addDeploymentTarget(&quot;mumbai&quot;, constructorArgs, initDataMumbai);</pre><p>The plugin comes with functions for getting fees. So we’ll set a suitable destinationGasLimit (usually should be higher to ensure cross-chain deployments succeed), and then declare the fees and totalFee object by calling the getFees function and the getTotalFeee function from CrosschainDeployScript respectively. The boolean asks whether fee isUniqePerChain. You can leave this to false for now. getFees returns an array of bridge fees, one for each deployment target while getTotalFee returns the total bridge fee:</p><pre>// Adjust the gas limit as necessary<br>    uint256 destinationGasLimit = 600000;<br>    uint256[] memory fees = this.getFees(destinationGasLimit, false);<br>    uint256 totalFee = this.getTotalFee(destinationGasLimit, false);</pre><p>In the next step, we’ll access the PRIVATE_KEY from our .env file by creating a deployerPrivateKey variable. We’ll then call the deploy function, supplying it with the previously defined parameters including the private key, fees, gas limit, and deployment options. This function call returns an array of contractAddresses, each corresponding to the deployed contract instance on different blockchains:</p><pre>// Ensure PRIVATE_KEY is set in your environment variables<br>    uint256 deployerPrivateKey = vm.envUint(&quot;PRIVATE_KEY&quot;);<br>    address[] memory contractAddresses =<br>    this.deploy{value: totalFee}(deployerPrivateKey, fees, destinationGasLimit, false);</pre><p>Let’s finally log our console with the deployed contract addresses as well as the UnlockTime that will be set (knowing this variable will make it easier for us to verify our contract on Etherscan when we have to provide our ABI-encoded constructor arguments):</p><pre>    console.log(&quot;Sepolia contract address %s&quot;, contractAddresses[0]);<br>    console.log(&quot;Holesky contract address %s&quot;, contractAddresses[1]);<br>    console.log(&quot;Mumbai contract address %s&quot;, contractAddresses[2]);<br>    console.log(&quot;Unlock Time (in seconds since Unix epoch): %s&quot;, unlockTimeInTheFuture);<br>   }<br>}</pre><p>Finally, run the script with the following forge command:</p><pre>$ forge script script/Lock.s.sol:LockScript - rpc-url $CHAIN_RPC_URL - broadcast</pre><blockquote><strong>Note: if the command doesn’t run, your environment variables may not have been set correctly. Either run </strong><strong>source .env again or directly replace $CHAIN_RPC_URL with the RPC URL you’d like to interact with.</strong></blockquote><p>Success! In this particular instance, all of our contracts deployed to the same address at <strong>0x267a26Ed02Cb4eD360c69C31324d5B0cd4dB6dDC</strong>. More crucially, this was all done from Sepolia while paying only fees on Sepolia. Your console logs should look something like this:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*3lM3TvTBaNfAd3pA" /></figure><p>And for veracity, I like to verify all of my deployed contracts to check whether the setName function was fired properly post-cross-chain-deployment. I like to use either forge verify-contractor the Etherscan UI (evm target vers: paris, Yes to optimizations, 200, abi-encode your constructor arguments using <a href="https://abi.hashex.org/">HashEx</a>, and ensure Solidity compiler versions all match). You can additionally set the solc to the same version as your contracts in the <strong>foundry.toml</strong> file.</p><p>Bonus: An example of the forge verify-contract command I used to verify my contract on Sepolia. For our constructor argument, the UNIX timestamp value of 1711647396 was deployed to the contract:</p><pre>$ forge verify-contract --chain-id 11155111 --etherscan-api-key &lt;ETHERSCAN_API_KEY&gt; 0x267a26Ed02Cb4eD360c69C31324d5B0cd4dB6dDC src/Lock.sol:Lock --constructor-args $(cast abi-encode &#39;constructor(address,uint256)&#39; &#39;0xD31E89feccCf6f2DE10EaC92ADffF48D802b695C&#39; 1711647396)</pre><p>Proof of work: take a look below at all of our cross-chain deployments from today + all of the string name variables that were set correctly.</p><p><a href="https://sepolia.etherscan.io/address/0x267a26Ed02Cb4eD360c69C31324d5B0cd4dB6dDC#readContract"><strong>Sepolia</strong></a><strong>:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*pdPpMzfNH-7ycmV0" /></figure><p><a href="https://holesky.etherscan.io/address/0x267a26Ed02Cb4eD360c69C31324d5B0cd4dB6dDC#readContract"><strong>Holesky</strong></a><strong>:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*WFXVb14rgOgfmK2n" /></figure><p><a href="https://mumbai.polygonscan.com/address/0x267a26Ed02Cb4eD360c69C31324d5B0cd4dB6dDC#readContract"><strong>Mumbai</strong></a><strong>:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*SrPLyK2BN7ip8G8c" /></figure><p>There you have it!</p><p>For a video walkthrough of the foundry-multichain-deploy example, check this out:</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FJySYArbLsGk%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DJySYArbLsGk&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FJySYArbLsGk%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/ed2d80764d220e06ed7664e20cc435f0/href">https://medium.com/media/ed2d80764d220e06ed7664e20cc435f0/href</a></iframe><p>You can find the source code in the <a href="https://github.com/ChainSafe/foundry-multichain-deploy">foundry-multichain-deploy</a> repo. All code that was executed in this tutorial can be found in my repo <a href="https://github.com/haochizzle/multichain-deploy-examples">here</a>.</p><p>Cross-chain contract deployment (via Sygma’s generic message passing capabilities) currently costs a fixed amount of 0.001 ETH on Sygma’s testnet environment. You can take a look at fee schemes in Sygma’s <a href="https://docs.buildwithsygma.com/environments/testnet/">Testnet environment page</a>. So, if you make two cross-chain deployments to Mumbai and Holesky, it will cost 0.002 ETH. This fee scheme will be updated soon to be more dynamic in nature.</p><p>You can trace and track your cross-chain transactions using Sygma’s block explorer. Here’s the <a href="https://scan.test.buildwithsygma.com/">testnet explorer</a>.</p><p>To summarize, thanks to Sygma’s cross-chain interoperability protocol and the handy Foundry plugin that ChainSafe has built, you can now seamlessly deploy the same smart contract across multiple blockchains under the same contract address while paying only source chain gas/fees.</p><p>Much thanks to the engineers at Sygma (<a href="https://github.com/MakMuftic">Mak</a>) and ChainSafe (<a href="https://github.com/stonecharioteer">Vinay</a>, <a href="https://github.com/lastperson">Oleksii</a>) for guiding me through this!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=dd3b1665f028" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[A Competitive Analysis Of ‘Traditional’ Cross-chain Asset Bridges]]></title>
            <link>https://tim-hch.medium.com/a-competitive-analysis-of-traditional-cross-chain-asset-bridges-48515e4158ae?source=rss-665949c7b4c2------2</link>
            <guid isPermaLink="false">https://medium.com/p/48515e4158ae</guid>
            <category><![CDATA[wormhole]]></category>
            <category><![CDATA[sygma]]></category>
            <category><![CDATA[axelar]]></category>
            <category><![CDATA[ccip]]></category>
            <category><![CDATA[crosschain]]></category>
            <dc:creator><![CDATA[Timmy Ho]]></dc:creator>
            <pubDate>Wed, 20 Mar 2024 18:44:16 GMT</pubDate>
            <atom:updated>2024-04-03T16:59:34.209Z</atom:updated>
            <content:encoded><![CDATA[<h3>Dev Exploration: An Analysis Of ‘Traditional’ Cross-chain Asset Bridges Using Testnet Examples</h3><h4>The marketing will say “ours is the best/fastest/securest”. But objectively, how does each cross-chain protocol compare? I use testnet examples to approximate an analysis</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*62WlSNCpIa5cD5ME0Yh6uQ.png" /></figure><blockquote>[<strong>DISCLAIMER</strong>]: The following analysis uses testnet examples from various protocols using different contract implementations. This analysis <strong>does not </strong>approximate mainnet conditions using real assets. This blog post was sparked by curiosity and used exclusively as a simple investigation.</blockquote><h4>Benchmarking traditional asset bridge performance</h4><p>I’ve been playing around a lot lately with cross-chain bridging examples. Working on the <a href="http://buildwithsygma.com">Sygma</a> interoperability team as a devRel kinda necessitates deeper understanding of the cross-chain ecosystem and the protocols that dot the landscape. To start, I really wanted to understand what each protocol offers in performance from a competitive standpoint, not in the least of which how and where Sygma stands up to other offerings.</p><p>For the following exercise, I wanted to test out traditional asset bridging examples (tokens that are locked/released or burnt/mint, either in an escrow smart contract or some other). Two specific questions I wanted fairly simple and naive answers for:</p><ol><li><em>How much gas would it cost?</em></li><li><em>How long would it take?</em></li></ol><p>The exercise also needed to use the same source-to-destination route to get a <em>relatively </em>apples-to-apples comparison, especially since some chains finalize faster than others.</p><p>I compared performance between a few protocols that have working examples from their GitHub repos or docs (links inline):</p><ol><li><a href="https://docs.buildwithsygma.com/sdk/quickstart/examples/erc20/evm-example/"><strong>Sygma</strong></a></li><li><a href="https://docs.chain.link/ccip/tutorials/cross-chain-tokens"><strong>Chainlink Cross-Chain Interoperability Protocol (CCIP)</strong></a></li><li><a href="https://github.com/axelarnetwork/axelar-examples/tree/main/examples/evm/send-token"><strong>Axelar</strong></a></li><li><a href="https://docs.wormhole.com/wormhole/quick-start/tutorials/hello-token"><strong>Wormhole</strong></a></li></ol><blockquote><strong>[Disclaimer]</strong> Some of the mechanisms tested use pure (sic escrow) token bridges. Escrow token bridges may not necessarily be the only standard for bridging anymore. Nowadays, bridging protocols lean towards more flexible <a href="https://docs.buildwithsygma.com/architecture/generic">generic message passing</a> (GMP) networks or “<a href="https://cointelegraph.com/learn/intent-based-architectures-and-applications-in-blockchain">intent</a>”-based solver networks, neither of which require locking (and <a href="https://rekt.news/leaderboard/">thereby risking</a>) ERC-20 assets in a smart contract. However, for the purposes of science and benchmarking performance, it was still worth it to do a side-by-side comparison of each protocol.</blockquote><p>Ready? Here’s what I found:</p><h3>Performance matrix</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*6og9aRcJ9p-S12FN" /><figcaption>Proof of work: see Appendix for all source and destination tx hashes</figcaption></figure><h3>Bridges must model security</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*S-ZkAsMkVu2oGkzT" /></figure><p>It’s important to understand that blockchain “bridges” function essentially as offchain oracles. Their primary role is to monitor events on one chain and relay them to another. A key part of this responsibility involves discerning whether these events are canonical — that is, representing the <em>true</em> state of affairs on the source chain — and determining the trustworthiness of these onchain computations. As such, the “performance” of a bridge is not merely a matter of speed or cost efficiency; it is intertwined with the bridge’s security model and how it establishes criteria for accepting or rejecting the results of onchain computation from any chain.</p><p>Crucially, in the current <a href="https://blog.buildwithsygma.com/sygma-security/">multi-party computation (MPC) setup</a>, protocol Sygma is configured to wait for 20 block confirmations on Ethereum mainnet and testnet before processing cross-chain transactions. This block delay is to account for the possibility of reorg attacks. And to settle on this number, Sygma looked at the largest block reorg in Ethereum history and added a multiplier for safety. Other small factors may contribute to the delay, including 1) RPC delay or 2) in the case where the selected “coordinating relayer” on the Sygma MPC network temporarily goes down. But all of these account for &lt; 30 seconds of impact. These factors combine to give Sygma a ~3 minute turnaround time on asset bridging, and as you can see from the above matrix, is highly competitive with other bridge offerings.</p><p>Ofcourse, as I’ve alluded earlier, pace of cross-chain transact is not necessarily indicative of “better”. Every bridge models its security differently, so it is important to consider the parameters and levers a protocol might adjust, or layers of security a protocol might add on top of, which may lead to longer or shorter cross-chain transact. For example, Chainlink <a href="https://docs.chain.link/ccip/architecture#token-pools">implements</a> three decentralized oracle networks (“DONs”), one for each cross-chain action–1) committing source Merkle proofs, 2) blessing/cursing said proofs, and 3) executing on the destination chain– while conjunctively awaiting Ethereum block finality. Axelar uses a <a href="https://docs.axelar.dev/learn/security">similar approach</a> with Ethereum block finality plus additional security logic layered on top via quadratic voting by their validator (sic relayer) network.</p><h3>Don’t trust, verify</h3><p>Indeed, this was a fruitful exercise to gleam insights from. And as the ancient wisdom says: don’t trust [my word], verify [for yourself]! <em>All</em> of the examples were relatively easy to implement and run — so you should try them out yourself! Ofcourse, I am biased towards Sygma and how quickly you can get set up to test your own Sepolia ➡️ Mumbai cross-chain token transfer :) <a href="https://docs.buildwithsygma.com/sdk/quickstart/examples/erc20/evm-example/">Give it a shot</a> when you get a chance!</p><p>If you’ve got any questions about running any of the examples, I’d be more than happy to help out. You can reach out here or via Twitter <a href="http://twitter.com/haochizzle">@haochizzle</a>.</p><p>Up next, general message passing…</p><h3>Appendix</h3><p>Sygma source hash: <a href="https://sepolia.etherscan.io/tx/0x1635afe7cfa94f3fd6480c983961a5aae40482d248b2f96ba8705eca58adfbc1">Tx hash</a>; Dest hash: <a href="https://mumbai.polygonscan.com/tx/0x8ee50b41a808d89b5744d56de316735c10ec557e1fbcbf5fef274700d7ab5cbe">Tx hash</a></p><p>CCIP source hash: <a href="https://sepolia.etherscan.io/tx/0xe09303b6d4e376cfcbc67e6adc0033566a4b53206b283ab4a7d3e256cd4a2a9d">Tx hash</a>; Dest hash: <a href="https://mumbai.polygonscan.com/tx/0x3ef48b869812e7df43da4b852093a67de34c393762918ba011af3038419e9e4c">Tx hash</a></p><p>Axelar source hash: <a href="https://sepolia.etherscan.io/tx/0x32b8584887abc4417057f3e4225c8052e86462ec7aec4878289ba001797af9ef">Tx hash</a>; Dest hash: <a href="https://mumbai.polygonscan.com/tx/0xdc6d84c0598b6711fe5b61c83383de17067e462c30bb4e74567508d2ad1b4116">Tx hash</a></p><p>Wormhole source hash: <a href="https://sepolia.etherscan.io/tx/0xeff336a7377397e6e7b966c7fa617b75f77a0fdba2969770a4f52163e745d628">Tx hash</a>; Dest hash: <a href="https://mumbai.polygonscan.com/tx/0x0adcb8e5ae2cb76a70564b97856bed5d58d608ff19eac46dc99eea8bb19a2a39">Tx hash</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=48515e4158ae" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How To Deploy To Same Contract Address Across Multiple Blockchains Paying Single Source Gas/Fees]]></title>
            <link>https://tim-hch.medium.com/how-to-deploy-unified-cross-chain-contract-addresses-from-single-source-blockchain-gas-using-the-08edf5e0ec17?source=rss-665949c7b4c2------2</link>
            <guid isPermaLink="false">https://medium.com/p/08edf5e0ec17</guid>
            <category><![CDATA[blockchain-development]]></category>
            <category><![CDATA[hard-hat]]></category>
            <category><![CDATA[crosschain]]></category>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[web3-development]]></category>
            <dc:creator><![CDATA[Timmy Ho]]></dc:creator>
            <pubDate>Thu, 14 Mar 2024 15:42:27 GMT</pubDate>
            <atom:updated>2024-03-28T14:24:39.865Z</atom:updated>
            <content:encoded><![CDATA[<h3>How To Deploy To The Same Contract Address Across Multiple Chains Paying Only Single Source Blockchain Gas &amp; Fees Using The <strong>multichain-deploy</strong> Hardhat Plugin</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YH9dcE1cGHufS_eXjSc65A.png" /><figcaption>the unofficial multichain-deploy plugin mascot: the “hardhan” cat</figcaption></figure><p><em>For the Foundry implementation of multichain-deploy, please see </em><a href="https://tim-hch.medium.com/how-to-deploy-cross-chain-contracts-to-same-address-from-single-chain-gas-using-multichain-deploy-dd3b1665f028"><em>this post</em></a><em>.</em></p><p>Deploying the same smart contract under the same contract address across multiple blockchains can be a boon for UX, especially for protocols/projects that need consistent addressing. However, to do so typically requires a minor but cumbersome step that materially impacts devEx — you must acquire native tokens in order to pay for the deployment cost of each chain.</p><p>To get around this problem, you can perform this same action <em>but pay gas/fees from only one “source” chain</em> using a <a href="http://hardhat.org"><strong>Hardhat</strong></a> plugin developed by <a href="http://chainsafe.io"><strong>ChainSafe</strong></a> called <a href="https://github.com/ChainSafe/hardhat-plugin-multichain-deploy"><strong>multichain-deploy</strong></a>. It utilizes <a href="http://buildwithsygma.com"><strong>Sygma’s</strong></a> cross-chain interoperability protocol on the backend to fire the instructions for cross-chain deployment.</p><p>Setup is quite simple. Let’s dive in with a simple example where we will use Sepolia as the source chain and make cross-chain deployments to Mumbai and Holesky using Hardhat’s tutorial Lock.sol contract:</p><p>Create an example project folder:</p><pre>$ mkdir exampleProject-hardhat-multichain-deploy<br>$ cd exampleProject-hardhat-multichain-deploy</pre><p>Initialize dependency managers inside your project folder (we will use npm for the rest of the example):</p><pre>$ npm init</pre><p>or</p><pre>$ yarn init </pre><p>Add hardhat as a development dependency to your project:</p><pre>$ npm install --save-dev hardhat</pre><p>Initialize the hardhat development environment:</p><pre>$ npx hardhat init</pre><p>Choose a JavaScript project during hardhat initialization + select all the default prompts.</p><p>Install the other dependencies we will require for the example project:</p><pre>$ npm install --save-dev @nomicfoundation/hardhat-toolbox @chainsafe/hardhat-ts-artifact-plugin @nomicfoundation/hardhat-web3-v4 @chainsafe/hardhat-plugin-multichain-deploy @buildwithsygma/sygma-sdk-core dotenv</pre><p>Jump into VSCode and look at the exampleProject-hardhat-multichain-deploy folder:</p><pre>$ code .</pre><p>Let’s modify the existing Lock.sol contract slightly. We will add a public readable string “name” to the contract:</p><pre>contract Lock {<br>    uint public unlockTime;<br>    address payable public owner;<br>    string public name;</pre><p>And modify the constructor to include some additional parameters, such as deployer / owner of the contract:</p><pre>  constructor(address _owner, uint _unlockTime) payable {<br>        require(<br>            block.timestamp &lt; _unlockTime,<br>            &quot;Unlock time should be in the future&quot;<br>        );<br><br>        unlockTime = _unlockTime;<br>        owner = payable(_owner);<br>    }</pre><p>And add a new setName function. We will primarily use this to demonstrate post-deployment cross-chain function calls:</p><pre>    function setName(string memory _name) external {<br>        if (bytes(name).length &gt; 0) return;<br>        name = _name;<br>    }<br>}</pre><p>Next, configure the Hardhat development environment by adding requirements in hardhat.config.js:</p><pre>require(“@nomicfoundation/hardhat-toolbox”);<br>require(&quot;@chainsafe/hardhat-ts-artifact-plugin&quot;);<br>require(&quot;@nomicfoundation/hardhat-web3-v4&quot;);<br>require(&quot;@chainsafe/hardhat-plugin-multichain-deploy&quot;);<br>const { Environment } = require(&quot;@buildwithsygma/sygma-sdk-core&quot;);<br>require(&#39;dotenv&#39;).config();</pre><p>We will configure the networks we want to deploy from in hardhat.config.js. This allows us to choose which “source” network we have available to deploy from with the — —network flag when we eventually run our script:</p><pre>const config = {<br>  solidity: &quot;0.8.19&quot;,<br>  networks: {<br>    sepolia: {<br>      chainId: 11155111,<br>      url: &quot;https://ethereum-sepolia.publicnode.com&quot;,<br>      // Use process.env to access environment variables<br>      accounts: process.env.PK ? [process.env.PK] : [],<br>       },<br>    mumbai: {<br>      chainId: 80001,<br>      url: &quot;https://polygon-mumbai-pokt.nodies.app&quot;,<br>      // Use process.env to access environment variables<br>      accounts: process.env.PK ? [process.env.PK] : [],<br>       },<br>    holesky: {<br>      chainId: 17000,<br>      url: &quot;https://ethereum-holesky-rpc.publicnode.com&quot;,<br>      accounts: process.env.PK ? [process.env.PK] : [],<br>      },<br>  },</pre><blockquote>Note: you will need to configure the Solidity compiler versions to match.</blockquote><blockquote>Note #2: if you receive RPC errors during deployment, you may need to choose a different RPC URL from <a href="http://chainlist.org">ChainList</a>.</blockquote><p>Add the multichain object from the multichain-deploy plugin and set the environment to testnet. This tells the plugin to interact with the Sygma testnet:</p><pre>multichain: {<br>  environment: Environment.TESTNET,<br>  }<br><br>module.exports = config;</pre><p>We will modify the default scripts/deploy.jsscript that comes with hardhat init. Make a new file called deployMultichain.js (in a scripts folder) and let’s adjust the script for cross-chain. First, we must import the multichainand web3 objects from our Hardhat plugins.</p><p>We are not adjusting much with the main() function, but take note of the fact that we <em>must</em> adjust the unlockTime by an order of magnitude (+60 in the original deploy.js script to + 600 in our new script). Why? The Sygma bridging protocol requires time to pass along the events across chains (currently ~5 minutes). Hence, we increase the timestamp in seconds to 600. Else, the logic will fail and the execution cross-chain will revert!</p><p>Finally, setting the deployer tells Hardhat that we will deploy from the same address (as derived from our private key) across chains:</p><pre>const { multichain, web3 } = require(“hardhat”);<br>  async function main() {<br>    const currentTimestampInSeconds = Math.round(Date.now() / 1000);<br>    const unlockTime = BigInt(currentTimestampInSeconds + 600);<br>    const deployerAccounts = await web3.eth.getAccounts();<br>    const deployer = deployerAccounts[0];<br>    </pre><p>We can then set the networkArguments object, which interacts with the deployMultichain function later on. We also specify which networks we will be deploying to here (sepolia, mumbai, and holesky). For each network we are deploying to, we pass Solidity constructor arguments to args, which initializes the contract with an owner and theunlockTime. initData allows us to make post-deployment contract calls to the setName Solidity function. In this example, we set the names of each chain we are deploying to using initMethodArgs:</p><pre>const networkArguments = {<br>    sepolia: {<br>      args: [deployer, unlockTime],<br>      initData: {<br>        initMethodName: &quot;setName&quot;,<br>        initMethodArgs: [&quot;sepolia&quot;],<br>       },<br>      },<br>mumbai: {<br>      args: [deployer, unlockTime],<br>      initData: {<br>        initMethodName: &quot;setName&quot;,<br>        initMethodArgs: [&quot;mumbai&quot;],<br>       },<br>      },<br>holesky: {<br>      args: [deployer, unlockTime],<br>      initData: {<br>        initMethodName: &quot;setName&quot;,<br>        initMethodArgs: [&quot;holesky&quot;],<br>       },<br>      },<br>};</pre><p>We can then call the multichain object’s deployMultichain function and pass on: 1) which contract we are deploying in quotations and 2) our previously defined networkArguments. The code then waits for the deployment to complete and then retrieves and processes the deployment information. If the deployment is successful, it moves forward to obtain further details about the deployment using the transaction hash and Sygma-specific domain IDs:</p><pre>const deploymentResult = await multichain.deployMultichain(“Lock”, networkArguments);<br><br>if (deploymentResult) {<br>    const { transactionHash, domainIDs } = deploymentResult;<br>    await multichain.getDeploymentInfo(transactionHash, domainIDs);<br>    }<br> }<br><br>main().catch((error) =&gt; {<br>    console.error(error);<br>    process.exitCode = 1;<br>});</pre><p>To run this code, you will need <a href="https://support.metamask.io/hc/en-us/articles/360015289632-How-to-export-an-account-s-private-key">an exported private key</a> from a wallet like MetaMask. Obtain that, then create a .env file in the root folder of the exampleProject-hardhat-multichain-deploy. Paste in your exported private key into the .env as such:</p><pre>PK=”&lt;your_exported_private_key_here&gt;”</pre><blockquote><strong>Warning</strong>: We make use of the dotenv module to manage exported private keys using an environment variable file. Please note that accidentally committing a .env file containing private keys to a wallet with real funds onto GitHub could result in the complete loss of your funds. <strong>Never expose your private keys.</strong></blockquote><p>Finally, you’re ready to run this script. We will test deployment from Sepolia as the “source” chain, <em>meaning we only pay deployment gas from Sepolia</em>. We can configure the “source” chain by adjusting the network flag:</p><pre>npx hardhat run scripts/deployMultichain.js --network sepolia</pre><p>Success!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*rxuHk2KBmvHddn0M" /></figure><p>For a video walkthrough of the hardhat-multichain-deploy example, take a look at this video:</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F-ZB-PdEY0wg%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D-ZB-PdEY0wg&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F-ZB-PdEY0wg%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/37c48f7621c79ccce74fd4532adfabcb/href">https://medium.com/media/37c48f7621c79ccce74fd4532adfabcb/href</a></iframe><p>You can find the source code in the <a href="https://github.com/ChainSafe/hardhat-plugin-multichain-deploy">hardhat-multichain-deploy repo.</a> All code that was executed in this tutorial can be found in my repo <a href="https://github.com/haochizzle/multichain-deploy-examples">here</a>.</p><p>This Hardhat plugin currently supports the Sepolia, Mumbai, and Holesky testnets, with mainnet support coming soon.</p><p>Cross-chain contract deployment (via Sygma’s generic message passing capabilities) currently costs a fixed amount of 0.001 ETH on Sygma’s testnet environment. You can take a look at fee schemes in Sygma’s <a href="https://docs.buildwithsygma.com/environments/testnet/">Testnet environment page</a>. So, if you make two cross-chain deployments to Mumbai and Holesky, it will cost 0.002 ETH. This fee scheme will be updated soon to be more dynamic in nature.</p><p>You can trace and track your cross-chain transactions using Sygma’s block explorer. Here’s the <a href="https://scan.test.buildwithsygma.com/">testnet explorer</a>.</p><p>To summarize, thanks to Sygma’s cross-chain interoperability protocol and the handy Harplugin that ChainSafe has built, you can now seamlessly deploy the same smart contract across multiple blockchains under the same contract address while paying only source chain gas/fees.</p><p>Much thanks to the engineers at Sygma and ChainSafe for guiding me through this!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=08edf5e0ec17" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Open Worlds: Decentralizing the web3.unity Gaming SDK]]></title>
            <link>https://medium.com/chainsafe-systems/open-worlds-decentralizing-the-web3-unity-gaming-sdk-51ca5f83a2c4?source=rss-665949c7b4c2------2</link>
            <guid isPermaLink="false">https://medium.com/p/51ca5f83a2c4</guid>
            <category><![CDATA[product]]></category>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[nft]]></category>
            <category><![CDATA[gaming]]></category>
            <category><![CDATA[blockchain-game]]></category>
            <dc:creator><![CDATA[Timmy Ho]]></dc:creator>
            <pubDate>Fri, 10 Feb 2023 17:18:57 GMT</pubDate>
            <atom:updated>2023-02-10T17:18:57.884Z</atom:updated>
            <content:encoded><![CDATA[<h4>Making Unity NFT games faster, more scalable, and more dependable</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*GQLkRkJ5yHiBwgOO" /></figure><p>In keeping with our values, we’re taking the first steps toward a more decentralized and open-source SDK with the launch of web3.unity v2.0. This is a new chapter for <a href="https://gaming.chainsafe.io/?utm_source=blog&amp;utm_medium=social&amp;utm_campaign=v2_launch">ChainSafe Gaming</a>, and we’re excited to share all the details with our community! Here’s what you need to know.</p><h3>The current state of web3.unity</h3><p>Up to now, when a player took an action in a game made with <a href="https://github.com/ChainSafe/web3.unity">web3.unity</a>, a call was made to the API server, which then either performed a read query on the user’s behalf and returned the result or formed a write transaction sent back to the game for the player to sign with their wallet and broadcast.</p><p>The SDK could not function without this API intermediary. If the API went down, so too did the games relying on this service. While some of our initial decision-making was designed to get the library up and running quickly, with time, it’s become clear that a more resilient solution was needed.</p><h3>Future decentralized state 🌌</h3><p>Our goal has always been to make web3.unity as decentralized, flexible, and scalable as possible. In keeping with that, the launch of v2 enables client-side reads and writes directly from Unity and the RPC provider of your choice, minimizing the need for ChainSafe’s intermediary APIs.</p><p>By reducing the need for interactions with the API server, the limitation on reads and writes in any one direction gets mitigated. Instead, users can directly query the blockchain using their own local node, whether that’s through Infura via MetaMask or through a custom RPC endpoint.</p><p>This way, actions get taken as close as possible to where they’re needed, with no servers slowing things down between the wallet and the blockchain. This puts more control in the hands of the developer by reducing dependence on an API service and allowing devs to choose their own RPC providers for broadcasting transactions.</p><h3>What are the benefits of v2?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*MpwvZQz-3ypgPDa8" /></figure><blockquote><strong><em>Decentralizing the SDK will make blockchain games built with web3.unity faster, more scalable, and more dependable while also giving the community a greater ability to shape the future of the project 🌱</em></strong></blockquote><ul><li><strong>Improves reliability — </strong>v2 gives developers the flexibility to choose the best infrastructure for their use case and avoid possible downtime while also choosing fallback options if any infra provider fails.</li><li><strong>Improves scalability — </strong>Game studios will be able to pick and choose the infrastructure that serves their uptime requirements.</li><li><strong>Improves SDK speed — </strong>Removing the API server speeds up the blockchain gaming UX since reads and writes can happen either player-side or on dedicated infrastructure.</li><li><strong>Improves transaction handling — </strong>Improved event listening (getting a notification immediately when a transaction goes through, rather than pinging the API server repeatedly for a status update) is one of the most consistently requested features. Decentralizing provides more responsive event handling by allowing devs and players to check transactions directly.</li><li><strong>Improves collaboration — </strong>Open sourcing v2 invites the gaming community to contribute meaningfully to the codebase — helping to debug, optimize, and ultimately, determine for themselves where it may be undesirable or infeasible for service providers to run infrastructure.</li></ul><h3>What does this mean for developers?</h3><p>⚠️❗ <strong>This update will require code changes in projects using legacy versions of web3.unity (v1.6.x and below). In addition, projects will need to define an RPC provider as we look at sunsetting the current version of the SDK and the API server by May 2023<em> </em>❗</strong>⚠️</p><p>For existing users who need to switch, games will need to:</p><ol><li>Register for a project ID (including filling out profile and project info). This is one lasting aspect of centralization, and we aim to reduce it with future updates. See<a href="https://www.youtube.com/watch?v=sQZiZp1uxC4"> this video</a> for a tutorial on how project registration works.</li><li>Sign up for a node provider and get an RPC endpoint (if you aren’t already using one).</li><li>Update any code in your game that uses modified versions of our prefabs.</li><li>Test your game to ensure all functions work the same way as before.</li></ol><p>New users will follow the same steps, with the exception of having to update any existing code.</p><p>Without these changes, people will soon be unable to make transactions within existing games. This will require some effort to refactor your code but it will also lead to payoffs in the longer term, and we’re here to help make the transition as smooth as possible.</p><p>We will provide <a href="http://docs.gaming.chainsafe.io">documentation</a>, <a href="http://youtube.com/chainsafe-systems">tutorial videos,</a> <a href="https://docs.gaming.chainsafe.io/current/faq">FAQs</a>, and support via <a href="https://github.com/ChainSafe/web3.unity/releases">GitHub</a> and <a href="https://discord.gg/zxHUgGGTGk">Discord</a>. In addition, we’ll be hosting a Discord community call on <strong>Tuesday, February 14th, 2023</strong>, to further introduce v2 and address any questions or concerns.<strong> Sign up </strong><a href="https://discord.com/events/593655374469660673/1070935436291219536"><strong>here</strong></a><strong>!</strong></p><h3>Community contribution wishlist 👥</h3><p>The new version of web3.unity will be open-source, giving developers and players the opportunity to contribute to building the most flexible blockchain gaming tool to date. Want to make the SDK even better?</p><p>We invite you to tweak parameters, audit the code, and make contributions where you see fit. In particular, here are a few areas of active development:</p><ul><li>Writing new queries and deploying new subgraphs on The Graph for each new chain that needs to be indexed</li><li>Creating new prefabs and features to expand the SDK’s potential</li><li>Designing a flexible framework for supporting non-EVM chains</li><li>Creating a new version of the SDK that supports Unreal Engine</li><li>Improving signing UX across platforms</li></ul><p>The bottom line in all this is that we wouldn’t be where we are today without our community. To fulfill our vision for web3.unity, we need your contributions!</p><p><strong>A heartfelt thank you for your continued support. Let’s explore the future together.</strong></p><p><strong>— The ChainSafe Gaming Team</strong></p><p><em>Web3.unity is an open-source gaming SDK developed by ChainSafe Gaming that connects games built with Unity to the blockchain. The library currently supports builds for web browsers (WebGL), iOS/Android mobile (WebWallet), and desktop (WebWallet). web3.unity is compatible with most EVM-based chains, letting developers easily choose and switch between them to create the best in-game experience.</em></p><p><em>Dive into the code via </em><a href="https://github.com/ChainSafe/web3.unity"><em>Github</em></a><em> and check out the </em><a href="http://docs.gaming.chainsafe.io/"><em>docs</em></a><em>. Share your work on social media and tag us on Twitter </em><a href="http://twitter.com/chainsafegaming"><em>@ChainSafeGaming</em></a><em> or </em><a href="http://twitter.com/chainsafeth"><em>@ChainSafeth</em></a><em> 👊</em></p><h3>About ChainSafe</h3><p>ChainSafe is a leading blockchain research and development firm specializing in infrastructure solutions for web3. Alongside its contributions to major ecosystems such as Ethereum, Polkadot, Filecoin, and more, ChainSafe creates solutions for developers and teams across the web3 space utilizing our expertise in<a href="http://gaming.chainsafe.io/"> gaming</a>,<a href="http://chainbridge.chainsafe.io/"> bridging</a>, NFTs, and<a href="http://storage.chainsafe.io/"> decentralized storage</a>. As part of its mission to build innovative products for users and improved tooling for developers, ChainSafe embodies an open source and community-oriented ethos to advance the future of the internet. To learn more, <a href="https://chainsafe.io/projects">click here</a>.</p><p><a href="https://chainsafe.io/">Website</a> | <a href="https://twitter.com/chainsafeth">Twitter</a> | <a href="https://www.linkedin.com/company/chainsafe-systems">Linkedin</a> | <a href="https://github.com/ChainSafe/">GitHub</a> | <a href="http://discord.gg/n2U6x9c">Discord</a> | <a href="https://www.youtube.com/channel/UCpm0lKkxhEKWutbPt1hOgRg">YouTube</a> | <a href="https://share.hsforms.com/1c-BWbnPuT4GRQi6lI2_xqw4kcdm">Newsletter</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=51ca5f83a2c4" width="1" height="1" alt=""><hr><p><a href="https://medium.com/chainsafe-systems/open-worlds-decentralizing-the-web3-unity-gaming-sdk-51ca5f83a2c4">Open Worlds: Decentralizing the web3.unity Gaming SDK</a> was originally published in <a href="https://medium.com/chainsafe-systems">ChainSafe</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[On-Chain Game Mechanics With ChainSafe And Toshimon]]></title>
            <link>https://medium.com/chainsafe-systems/a-case-study-for-on-chain-game-mechanics-with-chainsafe-and-toshimon-a83ea5c725a9?source=rss-665949c7b4c2------2</link>
            <guid isPermaLink="false">https://medium.com/p/a83ea5c725a9</guid>
            <category><![CDATA[blockchain-game]]></category>
            <category><![CDATA[gaming]]></category>
            <category><![CDATA[product]]></category>
            <category><![CDATA[game-development]]></category>
            <category><![CDATA[blockchain]]></category>
            <dc:creator><![CDATA[Timmy Ho]]></dc:creator>
            <pubDate>Wed, 18 Jan 2023 19:46:05 GMT</pubDate>
            <atom:updated>2023-02-09T12:39:52.905Z</atom:updated>
            <content:encoded><![CDATA[<h4>Designing and building blockchain-enabled games</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*6Kqrd_2cTuuqO5qd" /></figure><p><em>Thank you to </em><a href="http://twitter.com/willemolding1"><em>Willem Olding </em></a><em>and </em><a href="https://twitter.com/Megg_Doyle"><em>Megs Doyle</em></a><em> for their contributions to this article.</em></p><p>① · <a href="#0a52">Introduction</a><br>② · <a href="#d515">Overview: A solution to fair, decentralized, and quality gameplay</a><br>③ · <a href="#7ffe">Understanding the building blocks of blockchain gaming</a><br>④ · <a href="#14fb">Battle game design: Toshimon mechanics</a><br>⑤ · <a href="#9562">Technical aspects: Facilitating ‘proof of fairness’</a><br>⑥ · <a href="#a31a">ChainSafe Solutions: Proposal and game development solution</a><br>⑦ · <a href="#001e">Extensibility of base game via state transition decomposition</a><br>⑧ · <a href="#0795">Conclusion: ChainSafe and Toshimon outcome</a><br>⑨ · <a href="#b8f9">About ChainSafe</a></p><h3>Introduction: Full-stack solution providers will drive web3 game adoption</h3><p>Advancements in blockchain technology have resulted in an entirely new era of gaming. However, the blockchain gaming industry is still in its infancy and will require stakeholders to be educated on the possibilities offered by the technology. This experimentation will allow gamers, studios, and developers alike to co-create new frontiers in gaming.</p><p>Fundamentally, the hope of employing blockchain technology in game development is to promote new ways of making games more accessible to all types of gamers. While there is an ongoing debate as to whether blockchain and web3 principles genuinely enhance the gaming experience, the advantages of web3 are clear: decentralization, provenance, sovereign ownership, composable applications, and trust-minimization frameworks.</p><p>Big-name game studios have already begun exploring blockchain integrations with use cases spanning marketplaces, <a href="https://www.coindesk.com/business/2022/09/15/fortnite-developer-epic-games-marketplace-lists-first-nft-game/">multiplayer games</a>, and <a href="https://decrypt.co/112783/reddit-nfts-surge-as-polygon-based-avatars-reach-millions-of-new-users">collectibles</a>. Even smaller-scale indie gaming teams are beginning to explore new primitives such as non-fungible tokens (NFTs), GameFi, and play-to-earn mechanics, as well as how each of these technological innovations can be leveraged in service of advancing today’s gaming experiences.</p><p>While the future of blockchain gaming is bright and on track to become the frontrunner for web3 adoption, there are still a number of challenges that need to be overcome. Gaming teams must develop blockchain expertise in-house or collaborate with an external organization in order to decrease the human and economic capital associated with building a blockchain-enabled game. As a result, full-stack<em> </em>solution providers that are experienced in multi-disciplines, multi-languages, and multi-blockchain ecosystems are crucial as development partners. They point to a future where they are increasingly relied on for the buffing effect they have on web3 game development.</p><p>As experts in infrastructure development and protocol engineering, <a href="http://chainsafe.io">ChainSafe</a> has developed a reputation as one such full-stack solutions provider. This experience crosses over into <a href="http://gaming.chainsafe.io">ChainSafe Gaming</a>, where ChainSafe’s gaming SDK, web3.unity deploys key infrastructure for Unity developers integrating blockchain elements into their games. The library has over 10k downloads to date. In addition, ChainSafe’s R&amp;D department, <a href="http://solutions.chainsafe.io">ChainSafe Solutions</a>, has engineered novel blockchain solutions for gaming teams. Together, the two — ChainSafe Gaming and ChainSafe Solutions — have unblocked thousands of gaming developers and studios to create games seamlessly, securely, and with dedicated support.</p><p>It was ultimately ChainSafe’s years of experience, global team of experts, and proven track record of infrastructure development that led the team at <a href="http://toshimon.io">Toshimon</a> to collaborate with ChainSafe in researching new ways to leverage blockchain for gaming.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JiVp93PssZHCBmOCRYNLEg.png" /></figure><h3>Overview: A solution to fair, decentralized, and quality gameplay</h3><p>Toshimon is a browser-based online player vs. player (PVP) battle-style trading card game (TCG) that requires the use of non-fungible tokens (NFTs) on the Ethereum/Polygon platforms to act as immutable in-game assets. The project takes after its predecessor, Pokemon, with a clear difference — bringing elements of the game design on-chain. Toshimon targets a wide berth of end-users, including collectors, traders, and gamers. Toshimon’s gamification of various aspects of blockchain allows it to double as a fun educational tool for new web3 users.</p><p>As part of the solutions engagement between both organizations, the Toshimon team approached the experts at ChainSafe with the following question:</p><blockquote><strong><em>“How can we (Toshimon) make our PVP battle system provably fair and decentralized without compromising the player experience?”</em></strong></blockquote><h3>Understanding the building blocks of blockchain gaming</h3><p>To better understand the need for a solution to the problem statement, it is necessary to understand the common terms associated with blockchain game design:</p><p><strong>Provable fairness </strong>refers to a system where the fairness of a game can be cryptographically proven. This means that it should be impossible for the game’s outcome to be manipulated by any of the players or by the game’s operator. To devise such a system, some notion of <strong>(1) randomness</strong> and<strong> (2) the assurance of this randomness</strong> must be attained.</p><p><strong>Decentralization</strong> centers around the concept of immutability and trust minimization. Decentralization mechanics endeavor to decrease the degree of trust that users place in one another and dissuade their capacity to put forth authority or command over each other in a manner that corrupts the potency of the network. Any system devised should minimize (or require zero) trust between players and additionally minimize (or require zero) trust in a third party.</p><p>Next, an understanding of <strong>compromising the player experience</strong><em> </em>must be achieved. In the <a href="https://dcinvestor.substack.com/p/the-dial-up-era-of-cryptocurrency">dial-up era of blockchain</a>, frequent writes to a blockchain state can quickly make a game prohibitively slow and expensive to play. Excessive token approvals, endless prompts by a digital wallet such as MetaMask to sign signatures or send transactions, slow finality, and other web3-native UX could easily break player immersion.</p><p>For Toshimon, these are unimpeachable, foundational principles that needed a true web3 solution.</p><h3>Battle game design: Toshimon mechanics</h3><p>In order to better understand the approach ChainSafe took to solve the problem statement presented by Toshimon, it’s important to break down the game mechanics at hand. The rules of Toshimon should be familiar to anyone who has played a mainline Pokemon game. However, for anyone unfamiliar, here is a high-level overview of the Toshimon gameplay:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*mHgU6_jrscwza1g2" /></figure><p>There are over 160 different monsters in Toshimon, each with its own set of unique statistics and 140 different moves, as well as 10 different game items. Each of these moves and items has a varied effect on the monsters in battle depending on their stats. As an added layer of complexity, some aspects of the game have a randomized component. For example, a random chance of a critical hit (or miss) and random variation for attacks.</p><h3>Technical aspects: Facilitating ‘proof of fairness’ with Toshimon</h3><p>As the Toshimon game mechanics do not expand beyond the 1v1 environment, there are useful two-party precedents to draw from:<strong> (1)</strong> <strong>state channels </strong>and<strong> (2) commit-reveal schemes</strong>.</p><h4>(1) State channels</h4><p><a href="https://ethereum.org/en/developers/docs/scaling/state-channels/">State channels</a> allow two participants to conduct off-chain transactions directly with each other. Only two transactions are made on-chain: those confirming the <strong>initial</strong> and the <strong>final state</strong>. Otherwise, most of the game actions take place within the channel, which is off-chain, free, and has instant finality.</p><p>State channels were initially proposed as one scaling solution to Ethereum, where state changes are executed and validated by interested parties, minimizing computation on Ethereum’s execution layer. It has seen limited adoption and has since been supplanted by rollup technology. There are a number of reasons for this, but the primary challenges of state channels include:</p><p>1.<strong> Liveness requirements</strong></p><ul><li>Participants must remain online to respond in case another player tries to cheat</li></ul><p>2. <strong>Complexity of implementation</strong></p><ul><li>For a dApp to be state channel compatible, it must be reducible to a state machine that can be implemented in a smart contract</li></ul><p>3. <strong>Restricted participants</strong></p><ul><li>Participants of a channel are fixed upon initialization and cannot be changed thereafter.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*e-3BWAeL46EcVA3a" /></figure><p>However, in the context of a 2-player game with relatively bounded complexity, state channels are a fitting implementation option and can be frequently seen being used in simple 2-player games such as tic-tac-toe and chess.</p><p>Points 1 and 3 In the above diagram are non-issues for a typical PVP card game. To put this into context, imagine two people playing cards together at a table. The games are generally quite short in duration, and the player set does not change. As a result, one unanswered question remained:</p><blockquote><strong>“<em>Is it possible to implement a game with a vastly more complex ruleset, like Toshimon, in a way that can still be played within a state channel?</em>”</strong></blockquote><h4>(2) Commit-reveal schemes</h4><p>Commit-reveal schemes allow for hidden-information games to be played in public environments such as smart contracts and state channels. Without a commit-reveal phase, the player that goes first has a disadvantage as the other player can always see their movements and respond to them accordingly. With commit-reveal, both players submit a blind commitment to their move and only reveal what it is after the protocol has locked in both players’ commitments.</p><p>This can also be used for creating shared randomness within a two-party protocol. In this scheme, both players commit to some element of randomness in addition to their moves. The contributions from both players can then be combined to determine the outcome of any move where randomness may be required (e.g., critical hits or misses). The two-state commit-reveal ensures that neither player can influence the outcome of the random moves in a predictable way and therefore gain an advantage.</p><p>While the above section aims to provide a high-level explanation of the solution ChainSafe designed for Toshimon, a more comprehensive and technical overview can be found <a href="https://hackmd.io/-EyBBp08QLyJoszm_jzgrw">here</a>.</p><h3>ChainSafe Solutions: Proposal and game development solution</h3><p>Keeping the aforementioned primitives and constraints in mind, ChainSafe proposed improved design mechanics for the Toshimon game.</p><p>The implementation of state channels for off-chain transactions makes battles in Toshimon fast, cheap, and transaction-minimizing — one of Toshimon’s top concerns for enhanced UX. Within the state channel, an interactive commit-reveal scheme using a <strong>randomness protocol</strong> was devised to ensure a provably fair battle. The combination of these two elements allows Toshimon NFT holders to conduct off-chain battles with on-chain settlements.</p><p>For the state channel implementation, a channel contract was written that allows two players to deposit some tokens on-chain. In doing so, they agree on some <strong>initial</strong><em> </em><strong>state </strong>(e.g., which cards they are using, the health and moves available to each monster, the cryptocurrency wager, etc.) and the rules by which the state can be updated. Players then take turns signing <strong>state updates </strong><em>— </em>in Toshimon’s case, these are attacks, using items, or forfeiting the game. These updates modify the agreed-upon initial state according to the game’s rules. At the end of the battle, the<em> </em><strong>final state</strong><em> </em>of the channel is committed to the blockchain (such as outstanding balances or the result of a battle).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*iVM1hLsD9wNAXtZl" /></figure><p>Since Toshimon battles have a probability associated with each action, a source of randomness must come from a <strong>random seed</strong> committed by each player during each turn. The action + random seed must then also be revealed along with the action at the end of each turn. This scheme is called a <a href="https://github.com/willemolding/rolling-commit-reveal"><strong>rolling commit-reveal</strong></a>. A clever bit of cryptography assures randomness in a provably fair way, which is then used to dictate the outcome of each state-evolving move. This is the aforementioned <strong>randomness protocol</strong><em>.</em></p><h3>Extensibility of base game via state transition decomposition</h3><p>One of the key innovations of this design is observing that the state itself can contain contract addresses for small pieces of the game logic (e.g. one move or one item). As a result, there’s no need for a single registry for all of the game rules.</p><p>This has a number of very useful outcomes:</p><ul><li>The game logic can be decomposed into small state-mutating functions. This allows for the large ruleset to be decomposed into a collection of contracts to be deployed incrementally. Much like how cards in games such as Magic: The Gathering or Pokemon TCG can add new rules to the existing game.</li><li>It makes the game extensible. Anyone can add new functionality at any time, but it is only allowed in a game if both players agree when initializing the channel.</li></ul><p>This is implemented in the state by having separate contract addresses for:</p><ul><li>Items players may have, and</li><li>Moves each Toshimon is capable of making</li></ul><p>Again, it is the responsibility of the players to ensure the <strong>initial state</strong> is valid (e.g. Toshimon do not know moves they are incapable of). For players using the official Toshimon game client, this can be done automatically, but advanced players may choose to ignore this and play with their own custom rules. A useful analogy would be to imagine a group of individuals taking mainline Pokemon cards and using the printed stats and moves on each card to create their own custom variants of the game.</p><p>In the near future, on-chain games with composable game logic will meaningfully modify the in-game experience. This will provide extensibility to the base game in infinitely creative ways. This is a novel innovation for web3 gaming. In fact, it’s already being leveraged in games such as <a href="https://zkga.me/">Dark Forest</a>, where its community iterates on the game by extending and modifying the base set rule through the use of composable, interoperable smart contracts. In many ways, this is the true promise of blockchain-enabled gaming.</p><h3>Conclusion: ChainSafe and Toshimon engagement outcome</h3><p>ChainSafe is proud to have had the opportunity to share our expertise and experience in helping the Toshimon team understand and unlock the potential of state channels.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*df298I8Wu-lTGMba" /></figure><p>As a result of the schema recommended by ChainSafe, the Toshimon team went on to finish <a href="https://polygon.technology/blog/winners-of-polygons-buidl-it-hackathon">2nd in the Grand Prize track at Polygon’s BUIDL IT Summer 2022 hackathon</a>. This was indeed fruitful validation for ChainSafe’s research and recommendations.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*t1jUe736yVXAw_74" /></figure><p>Since Toshimon is built in Unity, we were also able to find natural synergies with ChainSafe Gaming’s web3.unity team. In the proposed battle system, it was suggested that transactions and state channel messages be made through the web3.unity SDK. Incidentally, Toshimon had also previously engaged with ChainSafe by bootstrapping their game development with web3.unity — thanks to the web3 sign-in and check ERC-1155 balance prefabs, they were able to effortlessly implement core infrastructure for their game.</p><p>ChainSafe Gaming has already done a lot of the groundwork for Unity NFT game developers with its web3.unity SDK. In-game minting, in-game marketplace, web3 sign-in, social sign-in, verifying Solidity messages, sending transactions, and anti-cheat voucher systems are just a few of the features already available with the <a href="https://github.com/ChainSafe/web3.unity/releases/tag/v1.6.1">latest web3.unity release</a>. To learn more, check out <a href="https://blog.chainsafe.io/nft-minting-and-marketplace-for-web3-unity-29a3950f1553">NFT Minting And Marketplace For web3.unity</a>.</p><p>If you are a gaming team eager to design and implement real web3 solutions — look no further. Enlist the help of an experienced full-stack solutions provider like ChainSafe today. Our around-the-clock and hands-on dedicated team of experts ensure that our services are suited to the needs of your project. We provide a solution for every game so that gamers can experience the new world of web3.</p><blockquote><strong>Everything you need starts right </strong><a href="https://gaming.chainsafe.io/"><strong>here</strong></a><strong>.</strong></blockquote><h3>About ChainSafe</h3><p>ChainSafe is a leading blockchain research and development firm specializing in infrastructure solutions for web3. Alongside its contributions to major ecosystems such as Ethereum, Polkadot, Filecoin, and more. ChainSafe creates solutions for developers and teams across the web3 space utilizing our expertise in <a href="http://gaming.chainsafe.io/">gaming</a>, <a href="http://chainbridge.chainsafe.io/">bridging</a>, NFTs, and<a href="http://storage.chainsafe.io/"> decentralized storage</a>. As part of its mission to build innovative products for users and improved tooling for developers, ChainSafe embodies an open source and community-oriented ethos to advance the future of the internet. To learn more, <a href="https://chainsafe.io/projects">click here</a>.</p><p><a href="https://chainsafe.io/?utm_source=blog&amp;utm_medium=medium&amp;utm_campaign=toshimon_case_study">Website</a> | <a href="https://twitter.com/chainsafeth">Twitter</a> | <a href="https://www.linkedin.com/company/chainsafe-systems">Linkedin</a> | <a href="https://github.com/ChainSafe/">GitHub</a> | <a href="http://discord.gg/n2U6x9c">Discord</a> | <a href="https://www.youtube.com/channel/UCpm0lKkxhEKWutbPt1hOgRg">YouTube</a> | <a href="https://share.hsforms.com/1c-BWbnPuT4GRQi6lI2_xqw4kcdm">Newsletter</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a83ea5c725a9" width="1" height="1" alt=""><hr><p><a href="https://medium.com/chainsafe-systems/a-case-study-for-on-chain-game-mechanics-with-chainsafe-and-toshimon-a83ea5c725a9">On-Chain Game Mechanics With ChainSafe And Toshimon</a> was originally published in <a href="https://medium.com/chainsafe-systems">ChainSafe</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Implementing Social Logins To web3.unity WebGL Builds]]></title>
            <link>https://medium.com/chainsafe-systems/implementing-social-logins-to-web3-unity-webgl-builds-86bf38c36e36?source=rss-665949c7b4c2------2</link>
            <guid isPermaLink="false">https://medium.com/p/86bf38c36e36</guid>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[unity]]></category>
            <category><![CDATA[product]]></category>
            <category><![CDATA[blockchain-game]]></category>
            <category><![CDATA[nft]]></category>
            <dc:creator><![CDATA[Timmy Ho]]></dc:creator>
            <pubDate>Fri, 09 Dec 2022 07:18:06 GMT</pubDate>
            <atom:updated>2022-12-09T07:18:06.074Z</atom:updated>
            <content:encoded><![CDATA[<h4>How to import and use social logins with WebGL builds</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oF4ltw6bdoRucPmrysEwfw.png" /></figure><h4>Why should we use social logins?</h4><p>Some developers feel that having social logins (e.g. Google, Facebook, Twitter, GitHub, Discord, etc.) would be a much better entrance system for users getting into the blockchain space. Some users tend to feel more comfortable having a wallet tied to a social account they already own. This helps to speed up onboarding and reduces friction when it comes to gaining new users. With a click of a button they can authorize an account and be on their way!</p><h4>What is the Torus wallet?</h4><p>The Torus Wallet powered by Web3Auth is a browser-enabled web wallet that seamlessly integrates into WebGL builds. Below, we’ll walk you through the wallet, how to integrate it, as well as how to use it with the web3.unity SDK.</p><h4>Why use the Torus Wallet?</h4><p>Torus is simple to setup and very easy to use. It allows you to login via social networks with only 1-click of a button. Through the use of various social accounts, you’re able to connect and authenticate users into your game quite easily!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*JLz-wkeuDUpHMEX9" /></figure><h4>An amazing dashboard full of features!</h4><p>Once logged, in you’ll be presented with a very clean looking dashboard where you can see your balance, activity and various things that any user needs to manage their blockchain usage.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*D1HzET3gaU0m1LpD" /></figure><h4>How to integrate the Torus Wallet into web3.unity</h4><p>Using this wallet in WebGL builds is very simple! All you need to do is visit the index.js file in WebGLTemplates -&gt; Web3 -&gt; Index.js. Uncomment the torus JavaScript import at the top and uncomment the provider options in the connect field below.</p><p>Here’s an example of a connect field with proper configuration. You’ll see options to add an RPC, a chainID, and a networkID. Here, we’ve used goerli’s chain config with their default RPC as this is a great place to start for any developer wanting to try transactions on a free testnet. If you need goerli eth you can obtain it from the faucet for free from the <a href="https://goerli-faucet.pk910.de/">Goerli PoW Faucet</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/399/0*WOwP_GDIHbpq46be" /></figure><h4>Build your project and test it out</h4><p>Once the config is set, you can press Ctrl+B from Unity to create a local build and test things out. Upon using the WebGL login scene, you’ll be greeted with a pop-up allowing you to select the Torus Wallet as a form of authentication. You can see an example of this on our amazing <a href="https://chainsafe.github.io/ChainSafe-Demo-WebGL/">Chicken Demo</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/949/0*8ZzC-_MRB4i5NdPQ" /></figure><h4>Making a transaction</h4><p>This is extremely easy as the Torus Wallet integrates perfectly with our SDK. You can test a transaction out by walking to any of the functions and giving them a click. You’ll see a little pop up asking you to authorize the transaction like so. Just press accept and watch the magic happen! You can learn more about the Chicken Demo in our blog post <a href="https://blog.chainsafe.io/demoing-web3-unity-with-the-chicken-demo-43bc2e150b75">Demoing web3.unity With The “Chicken Demo</a>”.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*usXR6zO4EJbqdUZM" /></figure><h4>That’s all there is to it!</h4><p>Yes! it’s really that easy! We hope you enjoy having such an amazing wallet at your finger tips. We hope you develop something great and we’re proud to be integrated with these amazing teams. Keep learning and happy coding!</p><h3>Welcome to the new era of #web3 gaming</h3><p>web3.unity is an open-source gaming SDK developed by <a href="http://gaming.chainsafe.io/">ChainSafe Gaming</a> that connects games built with Unity to the blockchain. The library currently supports games built for web browsers (WebGL), iOS/Android mobile, and desktop. web3.unity is compatible with most EVM-based chains such as Ethereum, Polygon, Moonbeam, Cronos, Nervos, SKALE, and Binance Smart Chain, letting developers easily choose and switch between them to create the best in-game experience.</p><p>Dive into the code via <a href="https://github.com/ChainSafe/web3.unity">Github</a> and check out the <a href="http://docs.gaming.chainsafe.io/">docs</a>.</p><p>Share your work on social media and tag us on Twitter <a href="http://twitter.com/chainsafegaming">@ChainSafeGaming</a>, <a href="http://twitter.com/chainsafeth">@ChainSafeth</a> or on LinkedIn @ <a href="https://www.linkedin.com/company/25057566">ChainSafe Systems</a> with the hashtags <strong><em>#web3unity </em></strong><em>or </em><strong><em>#ChainSafeGaming. </em></strong>We love giving shoutouts 👊</p><h4>About ChainSafe</h4><p>ChainSafe is a leading blockchain research and development firm specializing in infrastructure solutions for web3. Alongside its contributions to major ecosystems such as Ethereum, Polkadot, Filecoin, and more, ChainSafe creates solutions for developers and teams across the web3 space utilizing our expertise in <a href="http://gaming.chainsafe.io/">gaming</a>, <a href="http://chainbridge.chainsafe.io/">bridging</a>, NFTs, and<a href="http://storage.chainsafe.io/"> decentralized storage</a>. As part of its mission to build innovative products for users and improved tooling for developers, ChainSafe embodies an open source and community-oriented ethos to advance the future of the internet. To learn more, <a href="https://chainsafe.io/projects">click here</a>.</p><p><a href="https://chainsafe.io/">Website</a> | <a href="https://twitter.com/chainsafeth">Twitter</a> | <a href="https://www.linkedin.com/company/chainsafe-systems">Linkedin</a> | <a href="https://github.com/ChainSafe/">GitHub</a> | <a href="http://discord.gg/n2U6x9c">Discord</a> | <a href="https://www.youtube.com/channel/UCpm0lKkxhEKWutbPt1hOgRg">YouTube</a> | <a href="https://share.hsforms.com/1c-BWbnPuT4GRQi6lI2_xqw4kcdm">Newsletter</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=86bf38c36e36" width="1" height="1" alt=""><hr><p><a href="https://medium.com/chainsafe-systems/implementing-social-logins-to-web3-unity-webgl-builds-86bf38c36e36">Implementing Social Logins To web3.unity WebGL Builds</a> was originally published in <a href="https://medium.com/chainsafe-systems">ChainSafe</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Bull Case For FTX]]></title>
            <link>https://medium.com/thecapital/the-bull-case-for-ftx-134deca81054?source=rss-665949c7b4c2------2</link>
            <guid isPermaLink="false">https://medium.com/p/134deca81054</guid>
            <category><![CDATA[decentralization]]></category>
            <category><![CDATA[cryptocurrency]]></category>
            <category><![CDATA[ftx]]></category>
            <category><![CDATA[technews]]></category>
            <category><![CDATA[blockchain]]></category>
            <dc:creator><![CDATA[Timmy Ho]]></dc:creator>
            <pubDate>Thu, 01 Dec 2022 15:15:15 GMT</pubDate>
            <atom:updated>2022-12-03T10:51:55.734Z</atom:updated>
            <content:encoded><![CDATA[<h4>A Story Of Traditional Finance Masquerading As Something Else</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*J5WTKt5c9h69NRUd3PJoug.png" /></figure><p><em>The following excerpt was taken from the </em><a href="https://centralizationstrikesagain.substack.com/p/ftx-a-story-of-traditional-finance"><em>Nov 22 OpEd</em></a><em> I had written for ChainSafe’s newsletter “</em><a href="http://centralizationstrikesagain.substack.com/"><em>Centralization Strikes Again</em></a><em>”. If you find this content engaging, we would love your support on our Substack! ❤️</em></p><p>I will not waste my reader’s precious mental capacity on the well-documented FTX collapse. Everything about the debacle invokes within me a sense of vile contempt for unchecked centralization. Worse, FTX was the wolf in sheep’s clothes — an organization playing at decentralization theatre — an act we’ve unfortunately had to <a href="https://tim-hch.medium.com/this-is-not-the-future-i-am-fighting-for-8b69762b54d8">see play out</a> in semi-automatic bursts. First, with Luna/UST, and then followed by the incapacitating shots of Celsius, Three Arrows Capital, Bancor, FTX, BlockFi… you get the picture. <em>(And I extend my condolences if you were at all caught in the crossfire.)</em></p><p>Yet, as one trojan horse collapsed after another, I saw a community prop itself up in defence, aided by one of the most powerful force for public good ever created — the blockchain. More crucially, the two aforementioned combined to enable a sobering self-examination: why exactly are we building this tech? Who are the bad actors? What were the warning signs? And how can we do better? This is, in fact, the bull case for FTX. Allow me to explain.</p><p>The FTX collapse saw unprecedented participation from the web3 community in <strong>citizen journalism</strong>. While traditional media outlets wrote <a href="https://www.nytimes.com/2022/11/14/technology/ftx-sam-bankman-fried-crypto-bankruptcy.html">softball puff pieces</a> in service to their overlord SBF, the Twitter and Substack sleuths came out to play ball. Scores of citizen journalists unearthed, observed, tracked, and shared an unrelenting amount of data, with around-the-clock coverage that would put any TradMedia to shame. No stone was left unturned, as conspiratorial-level connections were discovered between FTX and the establishment — including SBF’s parents and regulators like the SEC’s Gary Gensler and US Senator Elizabeth Warren. FTX made way for the best of us to shine during crypto’s Lehman Brothers moment.</p><p>Of course, none of it would have been possible without the virtues of the always online <strong>public ledger of on-chain record</strong>. This, folks, is “privacy for the weak, transparency for the powerful” manifested: a tiny preview of what it could mean if we bridged our most important institutions on-chain — where activities like financial transactions are transmitted and recorded in a transparent and verifiable way. Is this not a public good worth preserving? It allowed our citizen journalists to track the movements of funds between exchanges, follow the FTX hack, and push the needle on innovations like mandatory proof-of-reserves and proof-of-liabilities.</p><p>And as suggested earlier, these forces enable a crucial level of self-scrutinization. It empowers us as a community to ask the important questions, keep our institutions honest, and demand the continued evolution of our space. In the well-trodden analogue of web3 as an organic, emergent biological ecosystem, <strong>the</strong> <strong>forest fire plays a crucial role in stimulating new growth</strong>. It clears away the diseased, the stagnant, the hollow in an unforgiving hellfire. Just as the previous forest fire cleared away ICO-era zombie projects which made way for newer species like Gitcoin to thrive, this fire will also clear away parasites of the FTX-variant and provide precious fertilizer for newer forms of coordination tech.</p><p>That <em>is</em> the silver lining. The entirety of the response has been nothing short of an incredible thing to witness, and is something that we should expect for future on-chain catastrophes. We’re speedrunning black-swan events and naturally selecting for the strongest organisms to survive. The ’08 financial collapse managed to forge a new path in humanity’s tech tree. In similar fashion, we too will come out of this for the better as a united community under the banner of decentralization.</p><figure><a href="http://twitter.com/haochizzle"><img alt="" src="https://cdn-images-1.medium.com/max/400/0*laOJ9MX2Z8xgx32O.jpeg" /></a></figure><p><strong>Check out our new platform </strong>👉<strong> </strong><a href="https://thecapital.io/"><strong>https://thecapital.io/</strong></a></p><p><a href="https://twitter.com/thecapital_io">https://twitter.com/thecapital_io</a></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fupscri.be%2Ff%2F3c1144%3Fas_embed%3Dtrue&amp;dntp=1&amp;display_name=Upscribe&amp;url=https%3A%2F%2Fupscri.be%2F3c1144&amp;key=d04bfffea46d4aeda930ec88cc64b87c&amp;type=text%2Fhtml&amp;schema=upscri" width="800" height="400" frameborder="0" scrolling="no"><a href="https://medium.com/media/3b6b127891c5c8711ad105e61d6cc81f/href">https://medium.com/media/3b6b127891c5c8711ad105e61d6cc81f/href</a></iframe><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=134deca81054" width="1" height="1" alt=""><hr><p><a href="https://medium.com/thecapital/the-bull-case-for-ftx-134deca81054">The Bull Case For FTX</a> was originally published in <a href="https://medium.com/thecapital">The Capital</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Announcing Our Hackathon Winners]]></title>
            <link>https://medium.com/chainsafe-systems/announcing-our-hackathon-winners-d46e6d2499b?source=rss-665949c7b4c2------2</link>
            <guid isPermaLink="false">https://medium.com/p/d46e6d2499b</guid>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[unity]]></category>
            <category><![CDATA[nft]]></category>
            <category><![CDATA[product]]></category>
            <category><![CDATA[web3]]></category>
            <dc:creator><![CDATA[Timmy Ho]]></dc:creator>
            <pubDate>Thu, 10 Nov 2022 10:44:56 GMT</pubDate>
            <atom:updated>2022-11-10T10:44:56.079Z</atom:updated>
            <content:encoded><![CDATA[<h4>Hack with ChainSafe Gaming’s web3.unity SDK and get rewarded for buidling blockchain NFT games!</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*bkTFlEL4WVxW5_WZ" /></figure><p>With the bear market in full bloom, it’s heartening to see the blockchain gaming community carry on hacking, building, and pioneering. This fall season has been full of hackathons and community calls and is good evidence of the gaming community’s ceaseless <strong>#ShipItMentality</strong>. For our part, <a href="http://gaming.chainsafe.io">ChainSafe Gaming</a> has been keen on keeping the buidling going, so we’ve been incentivizing hackers to ideate and build with web3.unity by offering cash bounties. 👀</p><p>The requirement? Show us your best ideas for integrating your web3 Unity game with our new marketplace prefab (check out our <a href="https://blog.chainsafe.io/nft-minting-and-marketplace-for-web3-unity-29a3950f1553">NFT Minting And Marketplace For web3.unity</a> announcement to learn more).</p><p>We already know the sort of capabilities our marketplace prefab could potentially unlock. Imagine a fully composable, cross-game, and cross-ecosystem World of Warcraft-style NFT Auction House that can be integrated into all Unity&lt;-&gt;blockchain games. Of course, that’s simply one view, and there are plenty more web3-native ideas that can be implemented — ones even we haven’t thought of yet! To that end, we wanted to challenge our gaming community to cook up their wildest ideas!</p><p>Immediately following our last major version release on the Unity SDK, we held a 2-week mini-hackathon with cash prizes up to $2250 USD (or ETH equivalent)! Following that, the ChainSafe familia then showed out in full force in Bogotá, Colombia for the ETHBogota hackathon, where we offered hackers a $2k USD bounty. As we mentioned, we were keen!</p><h3>ChainSafe Gaming on Twitter: &quot;Over $2250 USD (or equivalent in ETH) is up for grabs in our 2-week hackathon!Best projects to make use of the brand new marketplace prefab wins.🥇: $1500 USD🥈: $500 USD🥉: $250 USDSubmissions due Oct 12th.Learn more: https://t.co/eVGikYL9MP / Twitter&quot;</h3><p>Over $2250 USD (or equivalent in ETH) is up for grabs in our 2-week hackathon!Best projects to make use of the brand new marketplace prefab wins.🥇: $1500 USD🥈: $500 USD🥉: $250 USDSubmissions due Oct 12th.Learn more: https://t.co/eVGikYL9MP</p><h3>ChainSafe Gaming on Twitter: &quot;Not enough minerals? 👩‍🚀Hack with web3.unity @ETHGlobal&#39;s #ETHBogota hackathon and win up to $2k USD in bounties!Our team will be ready to help with any questions in our Discord. Get in here, devs!https://t.co/Wf0znUGl8yLearn more at: https://t.co/FRFqmuWnqz pic.twitter.com/bd69aG8PT6 / Twitter&quot;</h3><p>Not enough minerals? 👩‍🚀Hack with web3.unity @ETHGlobal&#39;s #ETHBogota hackathon and win up to $2k USD in bounties!Our team will be ready to help with any questions in our Discord. Get in here, devs!https://t.co/Wf0znUGl8yLearn more at: https://t.co/FRFqmuWnqz pic.twitter.com/bd69aG8PT6</p><h3>Minted, Marketed, Made. Winners of our 2-week mini hack 🏆</h3><p>Let’s first start off with our 2-week mini-hackathon. We kicked it off with our Community Call extravaganza (thank you to ALL our attendees for adding to a superb conversation), which you can view again on our YouTube under <a href="https://www.youtube.com/watch?v=TOMsyl6OqyY">Mint, Market, Make ChainSafe Gaming Community Call #5</a>. Hackers had until Oct 12th for submissions, and when the closing bell rang, we were stoked to not only see the number of submissions, but also the quality of them.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FTOMsyl6OqyY%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DTOMsyl6OqyY&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FTOMsyl6OqyY%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/c99db684d4bd574c2a48498de17ba3d9/href">https://medium.com/media/c99db684d4bd574c2a48498de17ba3d9/href</a></iframe><p>Let’s take a look:</p><p>🥇 <strong>Reverie</strong></p><p>In 1st place is a Spyro-inspired platforming dragon in the world of Reverie by <a href="https://twitter.com/0xFirekeeper">@0xFirekeeper</a>. Their integration of #web3unity’s marketplace prefab allows players to purchase and switch out the dragon’s skin as NFTs (on Goerli)! Grats on $1.5k USD!</p><p>Play <a href="https://0xfirekeeper.github.io/Reverie/">Reverie</a> 🕹</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*ot9nc5JOtMKgZ1gf" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*ktSP6hHg9qXFEvLN" /></figure><p>0xFirekeeper, a full-time developer, had a ton of great insights to share with the team after building with web3.unity. Among its many advantages, 0xFirekeeper found the ability to read and write from any contract alongside easy plug &amp; play shorthands to be among the top benefits of using our SDK and the marketplace prefabs. Additionally, one of the main challenges that ChainSafe Gaming helped 0xFirekeeper solve when building their game is — “avoiding JavaScript/Web development and just getting straight into it.”</p><p>As for what’s next for Reverie, 0xFirekeeper will be reusing the code and optimizing it for other projects.</p><p>🥈 <strong>Forgotten Familiars</strong></p><p>In 2nd place is Forgotten Familiars by <a href="https://twitter.com/Riley_Page_Code">@Riley_Page_Code</a>, a side-scrolling wizard platformer where you can use #web3unity’s marketplace prefab to purchase different familiars with different abilities for your magic-wielding avatar. Cool! Grats on $500 USD! (Submission was made via video but #codeiskleen!)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*568EqfaK6Q8R1bLn" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*WQR9tSiM0e6XJuoD" /></figure><p>Riley first learned about ChainSafe in the <a href="https://itch.io/jam/blockjam-2022#:~:text=Bounty%20Description%3A,in%20crypto%20(ETH).">BlockJam hackathon</a> hosted by Nervos where they won the bounty with <a href="https://sea-tiger.itch.io/drawingedge">Drawing Edge</a>. They have been using our SDK ever since as it’s their favourite Unity&lt;-&gt;web3 integration.</p><blockquote>“As a developer, I’ve thought of implementing a marketplace within games before, but always dismissed the idea of it due to the difficulties of setting it up. Instead, I relied on sites such as OpenSea. I believe that the ChainSafe Gaming marketplace prefab will create countless opportunities for developers and is an amazing tool to have.”</blockquote><p>As for the next steps, Riley will continue their web3 gaming development journey by participating in hackathons to continue upskilling and winning prizes.</p><p>🥉 <strong>The Auction House</strong></p><p>Last but not least, in 3rd place is Auction House by <a href="https://twitter.com/SuperFastGamez">@superfastgamez</a>, an earnest attempt to integrate the ChainSafe Gaming NFT Marketplace (<a href="https://t.co/gcNxURh5e9">http://marketplace.chainsafe.io</a>) into a play area. Grats on $250 USD!</p><p>Play <a href="https://superfastgames.github.io/TheAuctionHouseGame/">The Auction House</a> 🕹</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*brLOuP6woRQ-GoWm" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*2iK_RlgzSCndLZlO" /></figure><p>Congratulations to all the winners! We hope that the cash prize bounty will incentivize you all to continue working on your game, or keep hacking with web3.unity in the future!</p><h3>Giving all the papaya at ETHBogota 🇨🇴</h3><p>In the midst of the 2-week mini-hack, the ChainSafe gang also participated in numbers at ETHBogota and Devcon VI in Colombia! It was exhilarating to experience the energy of the LatAm web3 community gathered together — and the future of the Internet is in good hands. Of course, ChainSafe Gaming had to get in on the ETHBogota hackathon action by offering up our very own bounty and having our PM Alex V on the ground and judging!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*iwuGWOrnxUbeORAT" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*B8pk31ObBk5XMt7O" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*PZgwJ0lCP-nYupPR" /></figure><p>To take home the juicy $2k USD reward for hacking with web3.unity’s marketplace prefab is the <a href="https://twitter.com/ZtowerT">@ZtowerT</a> team! Through sweat and hard work, they managed to build an augmented reality mobile game based on tower defense vs. a horde of zombies 🧟‍♀️! In the game, players can go through the ChainSafe marketplace to buy (and list) tower defenses. What’s more, the hack idea had an element of regenerative cryptoeconomics, positing that 50% of in-game NFT purchases go towards funding LatAm scholarships. 💡 The team coins this #Play2Help.</p><p>Congratulations again to all winners!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*2ffKf0pVE2IBUrqM" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/784/0*-O-DRStHswb4giV6" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/801/0*DapxKp23FsQY79iu" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/783/0*bxu-LJA5cLPXpxCq" /></figure><h3>Don’t miss our upcoming community call with SKALE: the zero gas fee network ⛽️</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Gjkg1n3k40b_6GMH.png" /></figure><p>Next Wednesday on November 16th, 2022, the ChainSafe Gaming team will be hosting the SKALE network team in our Discord for our 6th community call! <strong>You can gain access by registering </strong><a href="https://community.chainsafe.io/chainsafe-gaming-skale"><strong>here</strong></a><strong>.</strong></p><p>For those in attendance, commemorative NFTs will be available for minting (gas not covered) on the Avalanche mainnet and tradable from the <a href="http://marketplace.chainsafe.io">ChainSafe Marketplace</a> 👀</p><p>See you all there!</p><h3>Give back to the community</h3><p>Web3.unity is a public good 🌱. If the SDK has been beneficial for you, consider giving back by spreading the word about ChainSafe, ChainSafe Gaming, and web3.unity adding <a href="https://docs.gaming.chainsafe.io/media">our brand assets</a> into your Unity web3 game. In return, you could receive some love on our socials, and even get spotlighted in a future blog or on our website!</p><h3>Welcome to the new era of #web3 gaming</h3><p>Dive into the code via <a href="https://github.com/ChainSafe/web3.unity">Github</a> and check out the <a href="http://docs.gaming.chainsafe.io">docs</a>.</p><p>Share your work on social media and tag us on Twitter <a href="http://twitter.com/chainsafegaming">@ChainSafeGaming</a>, <a href="http://twitter.com/chainsafeth">@ChainSafeth</a> or on LinkedIn @ <a href="https://www.linkedin.com/company/25057566">ChainSafe Systems</a> with the hashtags <strong><em>#web3unity </em></strong><em>or </em><strong><em>#ChainSafeGaming. </em></strong>We love giving shoutouts 👊</p><h3>About ChainSafe</h3><p>ChainSafe is a leading blockchain research and development firm specializing in infrastructure solutions for web3. Alongside its contributions to major ecosystems such as Ethereum, Polkadot, Filecoin, and more, ChainSafe creates solutions for developers and teams across the web3 space utilizing our expertise in <a href="http://gaming.chainsafe.io">gaming</a>, <a href="http://chainbridge.chainsafe.io">bridging</a>, NFTs, and<a href="http://storage.chainsafe.io"> decentralized storage</a>. As part of its mission to build innovative products for users and improved tooling for developers, ChainSafe embodies an open source and community-oriented ethos to advance the future of the internet. To learn more, <a href="https://chainsafe.io/projects">click here</a>.</p><p><a href="https://chainsafe.io/">Website</a> | <a href="https://twitter.com/chainsafeth">Twitter</a> | <a href="https://www.linkedin.com/company/chainsafe-systems">Linkedin</a> | <a href="https://github.com/ChainSafe/">GitHub</a> | <a href="http://discord.gg/n2U6x9c">Discord</a> | <a href="https://www.youtube.com/channel/UCpm0lKkxhEKWutbPt1hOgRg">YouTube</a> | <a href="https://share.hsforms.com/1c-BWbnPuT4GRQi6lI2_xqw4kcdm">Newsletter</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d46e6d2499b" width="1" height="1" alt=""><hr><p><a href="https://medium.com/chainsafe-systems/announcing-our-hackathon-winners-d46e6d2499b">Announcing Our Hackathon Winners</a> was originally published in <a href="https://medium.com/chainsafe-systems">ChainSafe</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>