Valist 🛠Publishing your app/game to web3 + intro to Software License NFTs
ETHGlobal·Sun, Oct 9, 2022, 12:00 AM
Join Zachary Pelkey and Alec Wantoch of Valist for a workshop titled, "Publishing your app/game to web3 + intro to Software License NFTs." This workshop is part of ETHNewYork 2022, a three-day in person hackathon that will feature hackers, mentors, enthusiasts, sponsors and speakers who are all gathering in New York June 24-26, 2022 to talk about the future of money, finance, the web, ownership, the way software works and the way power is distributed. We're excited about a new frontier. ---------------------------------------------------- Follow us: https://twitter.com/ETHGlobal​ Check us out: https://ethglobal.co​m Email us at: hello@ethglobal.com
Transcript
[Applause] [Music] well welcome everyone super nice to see you all here i'm alec co-founder of alice this is zach our cto and uh yeah we're here to to learn about web3 native software distribution and let's get right into it so what is web3 native software distribution well basically a lot of elements that you already know like publishing fetching and secure updates from existing web 2 systems like github or other auto update systems you've used before but also now we can imagine new cool use cases like dowels coordinating software together so if you imagine a dao publishing a new version of an ethereum client like geth that's what you could do with web through native software distribution and then if you're monetizing apps or games for for every any type of assets we have software license nfts in our system that you can use as a form of drm to token gate your application in again a web through native way and native crypto payments so why do we need web3 software distribution so well right here we're still publishing everything on web2 platforms so we have some really amazing protocols here even ethereum's geth is built and published on microsoft azure blob store polygon bore uses github releases which is also ultimately microsoft servers we rely heavily on docker hub for managing infrastructure especially things like graph nodes but it also goes down all the way to the end user from the emerging web 3 gaming stuff mobile wallets that you download from centralized app stores you name it pretty much everything is still being published over web too so we're putting massive amounts of energy into decentralization just to recentralize it at the distribution level so we got to change that and the issues with this include lots of the things you're already familiar with but risk of compromise censorship risk availability risk and then if you're using payment infrastructure all this stuff right now is centralized to apple google meta all of these companies that you have to ask permission for and they take 30 to 50 plus percent of your your take rate so these centralized payment infrastructures we got to get away from them and then they take a high take rate anyway so it's not very uh regenerative and what can we do now that we're in web 3. so first it looks kind of familiar we we have to start with porting over all the common features from things like github and steam and versal and those other types of platforms and that includes the ability to version publish fetch and then securely update your artifacts and having like auto update systems as well as the ability to manage team level and project level access control so that you can actually have an organization account and then separate projects underneath that have separate access control but vals has a set of tools that coordinate all these web 3 protocols together to make publishing in web 3 easy and then once reported over no reliance on a single entity for distribution not even valist all we're doing is pulling together all these protocols together so there's no centralized thing valas.io is just a gateway you can monetize your software directly now with nfts so again no need to ask apple or google or anyone for permission or even to have a bank account for that matter you could just create a wallet publish your software set a price and you're good to go and then of course dallas can coordinate software releases so you know these giant softwares that we all rely on you know we can actually decentralize the publishing process for that a little bit more and then we also have the ability to create super awesome auto update systems powered by these smart contracts in ipfs and the protocol fees can actually provide public goods funding so revenue generated by software license nfts can actually be pointed at things like radical trips or git coin grants and so there's this connection between the monetized software and the donation based drip mechanisms that we have now and so how does it work uh well there's lots of different options we make it pretty easy but architecture essentially is such as you publish all the software on ipfs everything gets archived on a file coin for long term storage and then we use polygon and other evm chains to checkpoint and handle the access control and versioning and then from there the valus client and sdks everything like that is aware of all the latest releases so you can say hey i want the latest version of of ethereum or something like that and then how do we use it uh well we have a web front end cli a git of action for if you're already doing github releases or if you're already doing your own system there it's just copy and paste the workflow at the end to add it to your publishing step and then we have typescript and go sdks for for all the developers that want to kind of dive deeper into the nitty-gritty there and then so this is what the web app publishing page looks like it's pretty simple it's just account project the version and then you could drag and drop your assets from there so if you're a game developer this might be the move for you to drag and drop your unity build uh or you know drag and drop your static web app over into here and and call it a day or a binary whatever you want our cli allows you to easily um create and publish uh releases as well and so here we have valis publish the organization account acme co and then the project is called go binary and then the version publishing here is 1.0.0 and then i'm just publishing the dist folder that i built so if you're publishing and building stuff you can just point it there and you could also configure multi-platform releases so if you're building for both mac windows and linux the cli lets you actually configure which binaries go to which platform and the val system will know how to account for that and then like i said we have a github action so if you're already doing releases this is a super simple example where basically it's just tracking the repository go ipfs and then anytime a release is made it just takes that release and publishes it under uh under ballast so it's a super easy way to get started there if you already have an existing workflow and then you can transition more into the web3 native workflows and then again sdk super easy all you need is a wallet and then you could plug in ipfs nodes your own rpc stuff uh or you could use the default vales.
io infrastructure and then you could find it at valus.io the docs are pretty detailed they go over the whole system as well as the different nuances and then our discord is valstadio slash discord we're always super excited to help and we have teammates from around the world so chances are someone's gonna be awake but uh yeah and then our github is vallas.io or valis dash io you can find all the cool things there and then i guess our twitter's underscore i o if you wanna check that out we're posting lots of updates there and then as far as the prize pool for anyone that's publishing on the platform um you automatically get qualified to the prize pool and then we're selecting five other apps that are doing a little more novel use cases or some other cool things that we're going to pick out of that group as well so pretty simple all you have to do is publish and qualify the pool and then yeah so super excited i'm going to pass it over to zach he's going to go over the system and how it works and we'll go from there but thanks again and best of luck at this hackathon really amazing stuff and uh yeah we're here to help zach yo yo yo what's poppin cool so i'm just going to take you guys through a quick demo here so you can check out the front-end web app on app.valis.io sorry just bear with me here a bit of a slow internet going on here okay cool so you've connected your wallet you're all good to go you'll see your dashboard like this it's kind of just like a versal github-esque dashboard and you'll see we have our projects here we have some activity of all the transactions that have taken place we can audit all of those different transaction hashes see those on our block explorer shout out to polygon our app.
valus.io is currently on polygon but we also support any evm based chain so check out the contract check it all out so the first thing that we are going to want to do is to create an account so if we go to the account creation page we have a couple options here so the first thing that we can do is that we can upload uh an account image so i usually use this one this is my crypto coven and then we can set our username so just like kind of any other distribution system you know or package management system like npm docker all of these different things uh you need a namespace um so in the case of vallast uh this is an immutable namespace and that's again just to kind of prevent any kind of like changing or supply chain attacks type of stuff there um so here i'm just going to go with let's just go with um metaverse i'll keep that all lower case and so then the display name is not immutable this you can change it to anything that you want and it's kind of just like a display name on twitter or anything else so i could say the metaverse company cool and then we can put in a website there we can say like hello dot world or something like that um and then you you know just a quick description so we make metaverse uh stuff cool so that's it for the basic info there um then each account on vales can also function as a team so again it's just like a github organization or like a versal team or anything kind of like that so normally this is where you would take your list of addresses and you would paste them in here i'm just going to take my local metamask address and create that oh it's interesting there okay some weird stuff going on here this might be an internet thing sorry there we go okay so you'll see that here it is prompting me so um we're a big fan of open source we're a big fan of public goods so everything on ballast is free by default um it's all meta transactions so all i have to do here is just give it a quick signature with some basic info here and i can create my account and so while that's pending i can check that out you know on the block explorer make sure everything's a-okay there and you'll see everything's good so now i got redirected to create my first project so i'm just going to select metaverse co um as my account and now i can create you know any kind of project that i want and again you can kind of think of this higher level namespace just as like you know you have your local github account and then you can publish you know your github pages or anything like that under your default github namespace and you can have any number of kind of like federated namespaces under that root namespace um so for me i'm just going to say let's just call it metaverse and then again we can just do another display name so the metaverse game something like that um website this is again if you're submitting to the eth global hackathon you might want to put your website in there or your github or something like that oh sorry i'm not the best speller here so i'm just going to put hello.world in there too so now um so we have a full discovery page um a lot like a steam-esque marketplace because a big thing is not just um open source software but you know uh developers have to eat too so you know there's a lot of paid software on ballast and paid uh native crypto drm games um in this case let's say that uh we'll do like a installable game and then we can set that with some tags here um we can say game application and so once we do that now we have a couple uh description fields that we can add that will show up on our valles profile and throughout the marketplace when people search for our game so i'm just gonna say a super cool metaverse game and then i just have some example mark down here that i'm gonna paste in there and so we have our metaverse game join thousands of players online for the next revolution of web3 gaming experience distant lands and discover untold treasures in the metaverse free to play no pay to win [Laughter] um okay and so then also with um so we have the idea of account level access control but then there is also the idea of project level access control so um we might have some team admins that are managing our organization we want them to be able to add other people through this kind of like role-based access control system um but then we might just have like verifiers or publishers on the development side where your developer you have your development key and you want to be able to verify build so this is where i would then paste my development key and i'm just going to copy that from metamask again cool so now uh all the fun stuff um when you're on a marketplace and you're on a game you know games need trailers games need um a lot of good stuff a lot of screenshots interactive content oh so for this i'm just going to pick my main promo image there it's of you know lost lands forgotten kingdom and then i'm gonna add a couple screenshots for my game so here are my game characters here's my cool metaverse girl in the metaverse with her metaverse glasses and then that's it all i need to do is create my project and again if you're doing like a live stream or presentation of your own or anything like that you can paste in a youtube link here thanks you can add all kinds of other content and videos and it'll all go right to ipfs hey so there we go now we are back on the dashboard here and i am just going to oh select my new account metaverse co um and so you'll see my new project metaverse pops up a super cool metaverse game and if i click that i am greeted by this beautiful valles profile and um now this is where i will be able to manage my versions any activities any other members or maybe like people that are in my dao that are distributing software that want to collaboratively sign off on releases and distribute their software together with me um but then yeah all of my nice little screenshots all of my nice little uh markdown right in there all ready to go um and so then we're also tracking you know all of these downloads through like ipfs gateways so there's a lot of really cool metrics that you can see to track like how many users are actually pulling my files from these decentralized networks and playing my game or running my app cool so let's publish so i'm just gonna do uh version 0.0.1 um usually i just use semver for any of you know semantic versioning um and then we can do a basic description so i'm just going to say initial release then i'm going to take my hello world go binary that is my metaverse game and then it's just as easy as publish release sign one more signature right there and just like that we have published our first release so here is our release from the ipfs gateway anybody can now take our valus client do a ballast install on this game natively and then stay tuned because our game client with our built-in wallet support sapphire will also be dropping uh very soon so um again just to take another look at this this is the basic settings page it's pretty much the same as the account creation page but there's a few additional settings that we have here now so a huge part of ballast again is that not just the distribution but also the monetization of software so as part of that we're web 3 native so we need to have web3 native drm for our software so each project on vallist has a built-in project id that i can activate and embed within pretty much any sdk so whether it's like chain save gaming or morales or any of those i can take those and check a digital signature against somebody's token balance to then token gate uh my application and there's different levels of security that you can implement there with that kind of drm but this at least gives developers the primitives that they need to monetize their software in a web three native way and this is really powerful because when someone goes to distribute software on someone somewhere like steam you know you might already have paired with a game publisher they're taking 10 15 percent then you go to put your software on steam itself they're taking 30 percent apple is taking 30 percent google is taking 25 percent gumroad is taking 15 percent itch is taking like 20 percent um with valles it's two and a half percent and then we take all of those funds they go to our community treasury and then we cycle that money back into open source projects um so what we can do here again we're on polygon so everything's in matic we can set a default price we can set a limit and we can set a royalty percent so that if anybody transfers one of these game licenses to somebody else there is a royalty on that as well um so then you're also able to customize your royalty address and all of these aspects to monetize your piece of token gated software um natively on the chain cool um yeah yeah yeah awesome yeah we're about to wrap this up with just one more example so if you are a go developer or you're building some kind of cli and you prefer to do more of like a cli publish then we have also check out this example projects repo for sure we have a bunch of different ways that you can publish different types of software here so we have a go project multi-platform go a rust solidity project as well so there's definitely different examples there but just to just to show you what the cli is capable of uh we're actually in this example repo right now with the cli published multi-platform project and um the command can work both ways so if we have one binary for instance this one is a single go binary here that when we build it it's just one hello world to do that it's literally just valus publish and then the version and then the folder uh oh i actually need to make that folder but then there we go so then if i run the make publish that'll actually do this this build it'll select the account i want to sign and send this from and you can see the meta transactions oh i need to bump up one more version um so you can see there it uh it knows when an existing release has been used and i guess i did this a couple more times then i realized let me just go to five but uh yeah basically um it'll upload the binary publish the release and it'll do all the meta transaction stuff so you can actually see all the like open gas station network stuff that's happening in the background all the magic that we make your lives easier with but basically yeah right there it's uh confirming that transaction and then it just published that go binary it shows you the link to go and fetch it and then boom there's my binary right there and then with sdks you can also do the same thing and fetch it at this at this name space um and then similar for the multi-platform do you want to say something okay sorry for the multi-platform it's the same thing only now we can additionally describe uh other releases so you saw i just uploaded the dist folder and just called it a day but with this i can actually specify in the values.
yaml the account i'm publishing to the project the version and then let's bump this up to like eight just in case the files the same way and then we have an install field here where you can actually describe the name of the binary and then the platforms that you're targeting with this and then we use the standard the go standard combinations here so you can basically say hey if i'm building for a mac on a regular amd64 this is the binary i'm publishing if i'm building on linux or windows this is these are the binaries and then i just have my build scripts here tell go to build multiple versions of this um so essentially i have in this folder a bunch of different versions that work on different platforms and in this vallis dml i'm describing those versions and which platforms and then since the vals yaml is already set up i could just run a valve publish it'll parse everything and no i didn't hit save on that and then it will publish each of the binaries as well as some additional metadata that lets the rest of the system know about the different platforms so um i'll jump to this in a second as soon as it confirms um and oh that's interesting uh okay so let's uh so let's go to the acme co um site here and then go to this multi-platform project on the website and then the launch will take you directly into the folder but then if you actually go to the higher level metadata here you'll see this is kind of the json we use to describe that install stuff so basically all this metadata is just to tell the front end how to actually interact with the project um and so yeah it supports pretty much any type of software and there's all kinds of different ways to publish depending on uh your preferences and your stack and like i said uh anyone that publishes gets qualified to our prize pool and then we're picking five finalists out of that group as well uh but anyone who publishes is gonna qualify no matter what so that's gonna be pretty easy and then yeah um we're always here definitely come find us if you need any help come join our discord uh we're super stoked to to to have you there and uh yeah check out the github action for sure well amazing stuff everyone uh i guess we'll just take a couple questions if we have any and then uh yeah sweet yes so we actually um this project here um so with the token gating uh it's actually pretty interesting because this is a weekend hackathon we're very curious to see what comes out of that but this acme co has an example for a token gated unity game that basically if i launch it hopefully the internet will play nicely with us but we have this example here and in the docs we have um how to actually set this up so and a separate video and a separate walkthrough as well and then for unity apps we also have an example script here so if you go to this page on the docs token getting your software you'll see the general flow and then some links to examples uh and then this one is the unity example we put together for the signatures and then basically the way it works is you just oh this is the wrong one actually but i think it's this one so yeah this is just the unity game and then you connect the wallet and it'll do the balance check from there and then yeah this is going to be a little interesting but i have it firing off in the console right here that one in success means that the balance is there so yeah it's definitely possible to totally get a unity game or any type of app and uh yeah look for that sweet cool thanks everyone you
Automatic transcript — names and jargon may be misspelled.