New Ethereum talks, every Monday. The week's conference uploads by event, in your inbox.

Loading player…

IP Registration Workshop - ETHGlobal San Francisco 2024

ETHGlobalThu, Oct 9, 2025, 12:00 AM

Join us for a an IP Registration workshop with Jacob Tucker and Andrea M from Story. Learn how to register AI-generated (& any other) content as IP on Story. You will also learn how to properly set License Terms on your IP to unlock endless remixing and royalty payments on-chain. This workshop took place at ETHGlobal San Francisco, a 3-day hackathon held from October 18 to 20, 2024, which brought together web3 developers, designers and product builders from all around the globe for a weekend-long adventure to advance the Ethereum ecosystem! ----------------- Follow us: https://x.com/ethglobal Check us out: https://ethglobal.com/ Email us at: hello@ethglobal.com

Transcript

[Music] hi everybody okay this is working um yeah thanks so much for coming to the workshop today I'm going to be telling you more about story my name is Jacob I'm on the Deval team at story um and before I begin I just want to give you a brief introduction I know some of you have checked out our booth and thanks for coming um but story is trying to solve the problem of creative IP right now um the current legal system for Creative IP is Antiquated it is old and inefficient um if you were to try and register your IP it'd be very difficult to do that unless you're a big player like uh you know Disney um and if you have a you know if you had a lot of money access to lawyers time uh you'd be able to go about registering your IP but we want to make it easier for uh the smaller craters to do so um and more importantly we're doing that by uh you know we have our own L1 blockchain uh the world's IP blockchain um and we want to make it easier for small creators to do that by just running a transaction on the blockchain um to register your IP and when you do that attach license terms to your IP um you know so you can communicate to other people how you want them to use that IP so if they can create derivatives of it how they can use it commercially um what is the commercial Revenue share so these are all terms that you can set uh directly on our protocol and so the workshop today is going to be covering how to actually do that in code using the typescript SDK um so before I dive in I just want to mention that all of this is also available on our documentation at docs. S.F foundation and actually if a few of you want to follow along while I'm doing this you totally can uh if you go to our docs and just click on either one of these two links um you'll have access to the code that I'm going to go over so it's all available for you and if you want to you know do what I do during this Workshop you can afterwards as well um all right so let's just dive into it so in my uh uh cursor here uh and thanks cursor cursor is going to be helping me out today uh it's been super helpful um I'm going to show you how to register your IP using the the SDK so um if you go to this tutorial and you scroll down a little bit past all this explanation stuff um you should see a uh you know copy and paste will command to install your dependencies so um you're going to install the uh core SDK uh pinata is what I'm going to be using to upload files to ipfs um but you could use uh you know whatever you want um and VM as well for just communicating to the blockchain um so let's go ahead and just dive into it so um I'm going to first set up my story config um so in order to do that uh I'm just going to because I think it's really boring um and I it doesn't really have to do exactly with story I'm just going to go ahead and copy some code uh just to skip past the boring stuff um so in myv I have already set my uh wallet private key and also a Json web token I got from the pinata uh website um so that we can upload some data to ipfs later when we're registering our IP um so in my code now uh I have my uh private key uh you know um in imported from my EnV file and I've created an account uh from that private key um and so now we're going to quickly set up the story config again this is some boring stuff but uh it is important obviously um we're going to um put our account right here that we just created uh cursor suggesting some things which are helpful but I'm not going to uh do that just so I can show you all um and a RPC provider URL now this is just oh look it actually gave us too much um R the RBC provider URL is just a basic one that we provide um I actually have this set up in a utils file here um and also if you're curious all these other files that are on the left here these are all different examples of registering IP on stor so whether it's a song whether it's a uh an image or something else or even an example of registering derivative IP you can also view that on the left here and again that's all available on our documentation um but I have uh as you can see here my RPC provider URL is set so I'm just importing that into this file um and then lastly I'm just going to specify the chain ID uh which is actually uh called Iliad um we are currently in our first test net phase which is called Iliad uh the next one our whole engineering team is actually working on in office right now um that's going to be called Odyssey and that's coming out in a couple weeks with a bunch of really cool updates um to our royalty module and a bunch of other stuff I uh can describe at the end um but right now the current chain is ilad that's what we're calling our test net um and we're also really excited for mayet which will be coming in a couple months um okay so now that we have our config set up we can initialize our client um and that's just going going to be uh as you see on the right here story client. new client and we're going to pass in our config so now we are ready to uh actually interact with story um now that we have our client so um before we actually go ahead and register our um our IP we need to set some metadata so um it's really important to us to track you know attribution data who created this IP um uh was it and what actually is it is it a book is it music uh what is the IP that we're actually registering and in order to help us out um on our docs we have a page uh called the IPA metadata standard um and this is there to help all of you developers walk through how to actually set proper metadata on your IP assets so the title you can imagine this as the title of your book a description of it uh is it music is it you know is it written text um what are some of the relationships associated with his IP so how does it relate to other IP that's registered on the Chain um you can set a watermark image media like let's say uh you know this is a song you could put the uh song asset under this um certain attributes like Rarity things like that uh but you can also check this out on your own if you would like um but so we're going to try and set up some some metadata associated with our IP so if we go to another line here we can do as it says on the right we can set some metadata um and we're going to use a helper function in our SDK called generate IP metadata um this is going to make it so that we can provide the metadata that we want and then it's automatically going to fill in all the others um as empty fields or empty arrays so it's a it's a great helper for helper for us so the title we can just say um this is my book IP so just for this example we'll say that I'm going to register a book I wrote as IP on story um and then I'll add a little description it just says like I don't know um this book is really cool um just you know just I don't know what else to put so we'll put that um and then we'll just put some attributes just to uh just to fill in blanks here so again we'll just say a key uh this is just going to be a rarity trait um and you actually notice it is similar to uh nft metadata but we'll get to that in a second as well and we'll just say this is uh legendary yeah sure yeah is this better for everyone to see awesome okay all right cool and rare okay yeah I spell it right thank God okay um so as we go on to the next step now we're going to set some nft metadata so on story when you register IP how it works is you take an nft that exists on story on story protocol and you register that as IP now this nft represents ownership over that piece of Ip so this is really interesting because now we're sort of unlocking uh defi what we're calling ipy around IP so the buying and selling of ownership of Ip assets so let's say you have a piece of Ip that's earning Revenue like my book for example if someone were to reference that book in their book and and register their book as a derivative of mine you can almost imagine we're creating a sort of Ip graph um and when that d derivative work earns Revenue I would also earn Revenue since I created the original work um and that royalty would flow up the graph automatically because of our royalty module um and I own the nft to that original work so I would get those royalties but you it's really interesting if I were to maybe sell that nft on a secondary Market um whoever bought that nft for me would now earn all revenue from that work so you can imagine uh what it would mean to maybe buy and sell the rights to Mickey Mouse um you know whoever bought that nft uh there's a lot of speculation around the pricing of that because they would earn the revenues for that IP um so that is why uh we have you know that that is the nft importance on story is again it represents the ownership of that IP asset um so uh and we will mention NFD in a second but that's what we have to set us some metadata first so we're going to do that right now we're going to say con metadata equals um and we're going to set a name now this all just follows unlike well unlike the IP metadata which follows uh our IPA metadata standard the nft metadata is all just basic open Zeppelin traditional metadata standards that are used to on any other chain um so the name will just say this represents ownership of my book IP uh we'll also just set a description saying uh this uh you know is a cool book um and then the image I'm just going to copy and paste um an image that I used in my tutorial um this I believe actually this link is a helpful website to use to randomly generate uh images so it's helpful for the purposes of a demo Okay cool so now that we've set all of our metadata we're going to scroll into the next part and we're actually going to upload this metadata to ipfs um for the sake of this demo I already have a file here called upload Json to ipfs um this is just a again basic script to use pinata to upload our metadata to ipfs um and again this part is kind of boring so I'm going to skip past this because it's not entirely story story related so I will post that uh right here um now what this is going to do is again use that uh upload uh function to take our IP metadata we set upload it to ipfs it's going to give us back a hash um and we're also for later you'll see in a second here we're also just going to straight up hash that object so that we can pass it into the function uh and register our on story um okay so now we're getting to the actual cool part which is finally the registration so now that we have all of our metadata set we're going to go to our line down here um and we're going to do the process of registering now this process uh has a few things involved the first is we need to actually min n again to represent ownership of that IP asset and then we're going to register that nft as an IP asset and it's going to go into the IP asset registry on story and when we do that we're also going to pass in uh licensing data or license terms associated with that IP so if you actually go to our docs um and scroll down to where it says programmable IP license this is the license that we use on story so just like any other traditional legal document that exists in the world today our program IP license is a license that our legal team has drafted um and it's based off us copyright law and able to be upheld in court the same way that any other legal document would um this license exists actually offchain um again just like a normal legal document and you know what I'll actually show it here if I click on this link this will bring us to a GitHub link um which actually shows the license so as you can see if I were to scroll down here um I'm not going to lie I'm not I'm not a lawyer so I don't understand this too well but if we scroll down here you can see there's certain terms like territory channels of distribution expiration uh there's an attribution Clause derivatives Clause all of these are legal Clauses that specify how people can use your IP and what we've done on story is we've taken these terms and mapped them on chain uh in our solidity smart contracts on our protocol so when you go to register IP you're just going to pass in certain data um and if we go back to our docs it'll actually show you what that struct looks like um if we go to pill terms you can see this is actually what that legal document looks like on chain um so these pel terms again have a derivatives Clause has a commercial clause and this is enforced directly by our protocol so when someone for example pays a derivative or a grandchild IP asset um the protocol can enforce that those royalty payments flow up the chain so that the original author earns Revenue so again is all enforced by the protocol uh directly um so let's go back to our tutorial here and first again we have to Mint that nft to represent ownership of this and so we're going to I'm going to use cursor to save the day um and uh input that code here so again just for the purposes of this demo I have a mint nft function uh this is just using VM to call into an example smart contract that I've deployed um it's going to Mint it to a certain address in this case I'm just going to Mint it to my admin address um and also a URI field which is just uh all that's going to do is pass in the ipfs link with the nft ipfs uh ipfs hash so all this metadata is going to be set on the nft now I do want to quickly pause here you may be thinking well it's kind of inconvenient to have to Mint an nft and then afterwards run a transaction to register that nft as an IP asset and I would agree with you and so what uh we've done is we actually have another part of this tutorial of section 5B which mints an nft and registers all in the same transaction uh this is actually using a utility contract called the story protocol Gateway um and this is again deployed in our protocol it's a utility contract that does both at the same time so I'm just going to quickly scroll down here to show you I'm not going to do it in this in this Workshop but there is a function called mint and register IP asset with pill terms I'm going to increase the font here maybe so you can see it better um but this will do both at the same time if you want a little bit more uh custom code you can deploy your own nft contract and that's what I did for this Workshop um just to you know show you a different example but again you can follow that if you want as well um okay so I'm going to scroll back up to where we were um and now that we have our nft I'm going to say const a response equals client so we're going to use our client we set up earlier IP asset. register IP and attach pill terms right here um and so there's a few things we have to pass in here the first is is the nft contract uh address of where that nft uh came from or where it was minted from um that is just nft contract address I'm importing that from my uh utils file here you can see I've I've I've preset that so that we didn't have to do that in this Workshop um and that exists right here okay so now we're going to go back to our file um and let's go back to eth Global here and I'm going to set uh also the token ID so this is just very simply the token ID that we just minted um and then like I uh promised earlier we're also going to set some licensing terms on our IP uh so we're actually just for uh for this demo we're going to say the pill type is uh pillor type.

noncommercial uh noncommercial um remix and this is actually just one of the flavors that we support so we understand that there's a ton of different combin ations of this license uh terms that you could set but for your convenience we've created some flavors or our legal team has created some popular flavors that you can use um to uh again set license terms on your IP so one of them is non-commercial social remixing this is for uh you know when you don't truly uh care what happens to your IP you want others to be able to um you know uh create derivatives of it but you don't want people to commercialize it so if I had a image um and I wanted someone else to be able to create infinite derivatives of it but not you know put it on a t-t sure and sell it I would set some non-commercial social remixing terms um but further below we have another flavor called commercial use this is a merch example so if I want to pay if I want to say you know what if you want to use my image or you want to use my Pikachu that I've created because I'm an artist and I've created Pikachu and you have to pay me a 100 you know usdc every time you put that on a T-shirt and sell it um I can set that in my licensing terms right here um and so just going back to this example we're just going to use non-commercial social remixing which says okay you know what any one can uh actually use this but they can't commercialize it okay um so this function also expects a few other parameters that really don't matter because we are just using uh the non-commercial social remixing these terms are uh used for uh again a commercial setting where you want someone to pay you when uh you um when when they actually use your IP now the last part of this is that IP metadata and I'm actually going to go ahead again because this is boring and I want to make sure that I have time for some questions um this is some IP metadata that you can set so this is uh an IP metadata URI uh all this stuff is just going to be said again I think you could you're uh probably don't want to hear me explain this but you could just go on our docs and and read that this is just that we make sure we're setting proper metadata on our IP and nft when we go to register it and then the last thing here is we're just going to set some transaction options to say we want to wait for the transaction to complete um so that we can access some data after it so I can show all of you now this is giving me an error here I believe I can just say as number and that should fix it all right awesome um and then we're just going to consult outw some information after and I'm going to show you this uh live on our Explorer so if the uh let's see this is giving me an issue here what does this say oh I didn't say await oops okay so if I await this call so if the demo gods are with me today uh this should work uh let's just uh let's see what happens here so it's minting a new nft um it's going to uh now start um you know registering that IP on the story and when this is completed it'll give us a link to our Explorer that should look something like this um this is a isuki image that I've registered earlier obviously I'm not the author of this this is all in a test net environment but if I was the owner of an isuki it would come up right here and then some extra data that I'll show you in a second so let's see here we go so it worked awesome so we can actually go to our Explorer page um we should see that this uh should refresh in a second so let's see if it uh if it actually comes up all right so actually one thing I'll show you here is on the right side you can see the license terms so one awesome thing about story is we're trying to improve the transparency of Ip licensing so we H are currently working on something called the creater Hub which is a uh environment for you to search for IP and find IP that you want to use in your work so that you can mint a license from it you can create derivatives with it um all that fun stuff um okay so here is our nft now again this is just a random image that was generated from that URL but you can see the name you can see the image here here are some nft details um and uh we we can actually view the nft URI that we set earlier so we can see it's all working um some IP details I'll zoom in so you can see um here we go so this is just some extra metadata associated with the nft um and it has uh correctly worked so there is uh the demo now one other thing I want to show you before I open this up to some questions um is I was actually experimenting earlier with a lot of people had come up to us and said well we're actually really interested in registering uh music um we think it'd be really cool to register the stems of a song or a sped up version of the song or a remix of a song so earlier I was actually experimenting with it um and I found uh actually our engineering team really quickly uh updated it so that the Explorer supports uh music as well um so if I actually were to go in here and let me uh let me just copy this that I was working on earlier um and paste it into our tutorial here just like this I'm going to run the script again and hopefully what should happen is uh this song that was created um actually forget where it was created it was created on Oho Soo is like a AI platform where you can generate uh songs um I use that to create a new song um and I'm going to now register it as IP on story um and so here we go here is the explorer link it might take a uh a second for this to actually load um but when it does we should see that we can actually play the song directly on our Explorer um and again the idea is that this would come up on our Hub um so you could go and search for songs that you really like and you can m a license for it and then use it in your own work uh let's say a Tik Tok video an Instagram video whatever you want or you could Tinker with the song so take a part of it or speed it up or slow it down um and then you could register that as a derivative and any Revenue that you earn on that derivative song would have to be paid back to the original grader based on the license terms that were set um so if we were to refresh the page here um let's see if this uh actually comes up and this was this was done not uh actually a couple hours ago so we'll see if it uh goes through um it's let's see it's still thinking here we go so now I don't know if it's actually going to play I'm afraid to like uh blow the speakers off or something but you can see there's actually a song now uh so you can see there's a song on our Explorer now um and so again the idea is that uh you'd be able to search for songs and and yeah so um thanks for thanks for that uh this was uh the 20 minutes of the workshop and any questions I'm happy to answer [Applause] sure does it support video uh does this support video yeah I actually don't know um I would assume if it's like an animated PNG would support that actually I know it does support that um I don't know if it supports MP4 files but that's an interesting thing I'll I'll test that after yeah yeah Sil what happens if I try to register something that not my property right like maybe I want to use an um like you said NFD right maybe right to use that one as my property uh what happened in that in that scenario that's a that's a really good question um so what we do is we support well there's two sectors to this the first is we support what's called a uh onchain dispute module so what we're trying to do is make it so that uh most IP can be disputed directly on chain um now we're currently in the process and we're working with third- party uh dispute mechanisms or dispute apps to figure out how that process would work but we want to make sure that most IP can be disputed on chain and again that's to make things more efficient but we also understand that a lot of uh disputing needs to happen off chain we need humans we need courts uh we don't want to overwrite the legal system we just want to make it more efficient um and so in the same way that right now if if we had a license between each other and I violated that license or I violated your IP you could take me to court um over that license the same is true of the programmable IP license or what we call the pill you would be able to take me to court and we would be able to talk about the arbitration in the same exact way um but of course we want to make sure the most happen on Chan but what if you don't know my identity let's say you created an n and I'm taking your don't who I am how would you yes Sor do you mind repeating that question I start here let's say you're the creator of and I steal your asset make money out of it and you don't know who I am yeah that that's also a really good question um so one thing that's associated with IP infringement obviously is the search and discoverability of disputed IPS or IPS that are you know Mal you know not using your IP in a good way um story is not trying to solve uh that specific problem we do think that in the same way that you know for example Netflix made media content much more available it also at the same time reduced pirating and so we believe that if we are able to make IP more accessible um it will reduce IP Mal use we believe that most people want to go about IP in the legal way people want to register I penal legal way and so we're trying to make that more efficient however um if you were to make any significant amount of Revenue and that were to come to my attention as the creator of that again I would be able to take you to cord over that or to speed on chain or any of the above yeah yeah right so I I believe you're saying what if I were to like what if you were to register your book on story but someone else then just wrote that exact same book and sold it yeah so in that it would be the same in that case so in the same way that uh well I guess yeah the program IP license today no so the I mean the you [Music] don't yeah can to register Brands like for example uh I don't know maybe like night for examp that's just right at theend of dayoc obviously we have plans in but the real real creation remixing yeah and one thing I do want to add to that uh thanks Andrea for answering that question um yeah so while we are focused on Creative IP um you know obviously we are are we we do understand that there is other types of copyright patents that kind of thing um the programmable IP license is just the first example of what we're calling a license template on our protocol a license template again it's just a set of terms that I showed you that legal document um and the pill is mostly focused on Creative IP but the protocol does support um adding other license templates that are maybe more specific to patents or other types of Ip um it's just that it natively supports the pill but yeah it is it's permissionless so theoretically you'd be able to add a license template that supports more you know different types of copyright yeah one of the ex so sorry do you mind repeating that it's hard to hear up [Music] here oh how do you tell story hey this is right I totally hear what you're saying now yeah so the so the question is um I used uh Sumo AI to to generate a song but uh you know generative AI songs are not necessarily copyrightable um so there are a few things associated with that um actually I'll go back to the um pill terms here actually I'll go back to the the metad standard here um so there's a few things in our metadata standard we've actually done to um you know talk about this uh the first one is if you scroll down there are something called robot terms which says okay this is you know training data and I don't want you to train on certain uh data so I don't want this specific agent to train on this data that I'm providing um a lot of llms right now what they're doing is they're they're they're using certain training data they're not licensed and they're using that to produce certain output so for example Sumo AI is using pre-existing songs and training on it and producing certain output uh that is not paying original creators uh in order to do that um and so uh what we want to do with story is make it so that training data is more licensable and and easier to recognize um so that Sumo is you know that when it's produced an output and that song for example earns much revenue we want to make it so that that training data that it trained on also earns a cut of that uh after fact um so we're trying to make it so that both the uh input and output of AI whether it's Sumo AI or something else um is is licensed and uh is more easily accessible yeah one more question sure yeah oh wait yeah yeah I well I don't think at the moment I think we are working with an ens service to potentially do that but it's not live at the moment one other question yeah really question so the question is why did we make our own separate blockchain and not maybe deploy another blockchain uh so the reason for that was you know we didn't we didn't want to um actually only a few months ago we were uh we had our protocol deployed on spolia uh and we wanted to actually deploy an eth maet um the issue was that or one of the biggest issues was gas concerns um you know chains do not are not able to handle the extensive IP graphs that we want to support um when you when you bring into the picture absurd amounts of remixing and derivatives um you know you could imagine a graph that's thousands of layers deep and extends very wide um and this is one thing but when you start talking about automated royalty flows too where let's say a uh a child that's thousands of layers deep earns revenue and flows all the way up the chain uh that was just not compatible on existing Solutions and so story is a purpose built chain using pre-compiled and other improvements both of the execution later and consensus later um to make it so that IP graphs are more efficient and so something like that is handled more more properly [Music]

Automatic transcript — names and jargon may be misspelled.