Golem: Architecture, SDKs and tips with Jakub Mazurek
ETH Warsaw·Thu, Oct 7, 2021, 12:00 AM
BOUNTY LINKS: Golem: https://gitcoin.co/issue/golemfactory/hackathons/18/100025686
Transcript
hey guys welcome back after the break uh with me is kubo mazurek from golem and he's gonna give you an introduction to golems sdk and give you some more details about their bounties um so without further ado enjoy the workshop koba the stage is yours all right thanks antique for uh for the introduction so yeah hello everyone um welcome to the session and to the hackathon as such um what this workshop is going to be about um it's it's going to be split into uh like two parts so the first one the first kind of half of it uh is going to be more of a presentation from myself and the second half is going to be a bit a bit more hands-on uh where i'm going to show you uh parts of our documentation and how you can set up your your golem nodes and your testing environment but it's not it's not going to be like a live coding session uh if if that's what you expected then uh maybe disappointed but i hope not in any case let me switch over to my presentation and kind of tell you about about my goals for this uh for the session um so what i what i tried to to think of was what sort of information i would find useful if i were to you know to participate in this kind of hackathon and with all this information kind of um scattered around different places i've decided to try and uh and gather um as much you know knowledge as i can fit into this this time slot uh so i'm going to start with an overview of the golem project as you know as such for those of you who may be unfamiliar with it or maybe you uh you just don't remember some stuff that's been happening recently because there's been a lot of uh a lot of activity around the project and then i'm going to um kind of walk you through uh the golem apis and the architecture of the project or at least from a like very high level point of view uh and finally uh in this like more practical part i will show you how to set up how to test your application uh both on the network itself but also locally and maybe give you some tips on you know how you can debug it and uh and that sort of thing uh so yeah um my hope is that you can get some value out of this like regardless of your familiarity with with gollum and with these blockchain related topics in general right before we start there's two two more things one is you can ask questions at any point during the session i'll do my best to you know to answer them as we go you can use this feature of error meet for this so on the right there should be like a questions box there's chat as well and finally you can you can raise your hands and i believe i can give you uh i can give you the mic if you prefer to you know to to speak uh rather than write something uh and yeah one more thing i've prepared a um a collection of links that i'll be referring to during this presentation i've put them up on github so let me just paste it into the chat right here cool so that should right that should work so yeah you can take a look at it uh uh during this during this session and i'll i'll let you know whenever there's something that uh you can take out from it cool so yeah let's uh let's get going then so there is the first thing is the introduction to golem itself right so let's start off with like the most basic question um so what is golem and depending on whom you're going to ask uh the answer may be you know somewhat different it may vary so here's one take on it golem is a decentralized marketplace for digital resources and this includes uh computing power as a you know that's kind of the prime example um so as a marketplace it's formed by all the nodes that are connected to it and in the case of you know the golem network these nodes are the users machines so anyone can join and and participate basically and right so what does it mean that it's a marketplace where typically in this you know the setup in the marketplace there will be supply and demand and resources being exchanged so in the case of the golem network the supply part are the providers so here on the on the right on this uh on this graphic and the demand part are the requesters on the on the left so the providers are basically um sharing some resource so for example uh part of the computing computing power in exchange for some value um in our case these are going to be the glm tokens and the requesters are the nodes which um come together to the network and want some computation done basically so they have a task and they want to get it computed and they offer you um some glm for it basically but there's one more um one more side one more side to this whole equation which uh which is the developer so that's that's you basically in this case um so what would be what would make you kind of interested in uh in developing applications for gollum so one one reason for this uh is that like everything that we do is completely open sourced and it's also licensed uh using a you know permissive permissive license so you can you can easily um audit and you know and learn what's happening kind of behind the scenes there are no no parts that you know are hidden from you basically and also since the whole network is um decentralized and based on you know peer-to-peer um connections it's very much resistant to uh to censorship but also to you know to some central failures there is no uh central uh agent central point of failure uh in this case and yeah the third point uh on this on the slide uh are the payments uh which are currently uh taking advantage of all the new stuff that ethereum layer two brings us and most like more specifically uh this is like setk sync so we have very low transaction fees and we don't need to have uh different tokens for for the fees and so on but i'll cover this in a second um the last thing that would kind of be of interest to you as a developer is that we've put a lot of effort into making gollum easier to integrate with um but yeah all of these things uh have been introduced with what we call the new golem so let me let me tell you about a little about uh what it is right now um so the you know the new golem as a project has been around for quite some time already uh with the first idea was presented back in 2014 i believe and the ico was in 2016 and since then um the project was you know kind of successfully running on mainnet with the previous uh with the previous implementation but as you know as time went by uh certain limitations of that implementation were kind of becoming apparent and as you know golem factory as a company decided to to address these issues by creating this new sort of implementation uh which is dubbed yagna which comes from i don't know you you pick it it's yet another column network something uh so yeah so uh jagna was unveiled sort of last uh last year and uh along with it uh came a lot of you know different various changes which i'm going to tell you about in a second um so alpha 1 we released it last year around august and we've been moving um pretty pretty fast with this so we are currently live on mainnet with this new implementation and it's already in you know in better stage in beta phase um you can find a link to the repo in this kind of link collection that's um that i gave you okay so now on to the actual features of this new implementation so the first thing that you need to keep in mind is that basically we've changed the whole underlying network protocol and the architecture of the application so this is by far the biggest the biggest change and it was based on our experiences from you know from the previous iteration and hundreds of hours of conceptual uh conceptual work that went into it and as a result we managed to create a sort of a comprehensive rest api uh for this for this new for this new golem and this api is you know a very central point to everything you do as developers because to control a a node you're going to you're going to use it in some way in the previous iteration the previous golem version we relied on rpc calls and like when you when you compare these two the the rest api based on http is you know much more flexible and structured and you can also um take advantage of a lot of existing tooling and we're also going to see some of these some of these examples in a moment and and yeah finally there's also the the token uh the ethereum token itself um so we've migrated to a token that's compliant with the erc20 standard and this allowed us to uh to take advantage of a lot of new things basically um so previously you needed to have both ethereum and the gnt that's what the golem token was called back then um and yeah you need ethereum to cover the fees and gnt to pay for your tasks it was also slower because everything was done on chain and and so on so a lot of improvements uh on the payment front as well and besides these uh these points as you can see here uh there's also the the fact that we've uh rewritten the whole the whole uh golem daemon using rust which resulted in improved performance and the actual binaries being uh being smaller in size and finally as as i mentioned we kind of put more emphasis on um simplifying the the setup process for for for developers for for people who want to uh create something with with golem um right so yeah so i mentioned the rest api um i think that's it's it's kind of worth worth um focusing on for a bit so the next part of this of this presentation is actually going to uh to take you through uh the new golem uh rest api right so um this api is split into like three main parts and these parts uh represent the different stages of of interaction uh which i'll i'll try to like briefly explain to you right now um so first of all there is the there's like the market api and the market api is focused on all the kind of you know marketplace mechanism so it handles objects such as demands and offers and basically allows you to to publish both of these uh to the marketplace you can observe kind of what's going on and and yeah um i actually have i think i have some yeah right there you go so this kind of uh demonstrates uh the the these these objects from a higher level perspective so the request is going to publish a demand uh which i'm going to to show you in the in more detail in a bit and on the other side the provider is going to publish an offer like this saying basically what they're capable of and the requester is kind of saying what they are looking for so yeah and the band the demand looks something like this uh there'll always be two collections one called properties and the other one called constraints so the properties section um is describing the the task that the requester is you know coming coming with so there will be some expiration time uh there will be the the package so for example the vm image that should be used for this task and so on so this kind of describes what the requester wants to get computed and the constraints uh refer to what the requester is kind of expecting from from its providers so if you know that your your task requires um some amounts of memory for you know for each each chunk then you can you can specify this this here and on the other hand this offer object is going to be very similar but this time the properties you know relates to the provider so uh we can find the same uh the same keys that we've seen in the constraints just a moment a moment ago um but this time they are the properties um and this is kind of the you know the whole marketplace matching mechanism so for a match to to happen um the properties of you know one side must be matching the the constraints of the other side and when this happens so when the request is sort of you know scanning the marketplace when the requester notices that there are some offers which are matching uh whatever he or she wants to uh you know wants to get basically uh we move on to the negotiation phase and negotiation that happens um directly between uh the requester and provider so there is a like direct connection established and they can exchange a number of messages to sort of establish the the terms under which the provider is going to work essentially and if this negotiation is successful so if we reach some some consensus then the requester issues an object called an agreement to the provider and if the provider accepts this agreement then this is where the kind of the market interaction ends where it's finished and we move on to the next kind of phase and the next phase is the activity so having an you know an agreement struck we can now proceed to actually performing some some work uh so in the case uh in the case of like you know exchanging computing power uh the requester is going to be well it's going to be running um some uh some application that you know you might uh create in this case and this application is going to be sending some commands to the containers that the providers run right so we we have some tasks we kind of know how to split it into uh multiple multiple chunks so that we can execute it in parallel on multiple providers and for each of those chunks we have some instructions such as transferring a file running a script or getting a file back to to the requester and this is like all of these things are covered by the activity uh activity api and we're going to see uh this in a bit more detail uh later on when i show you uh one of our example applications so you can get you know a slightly better idea of uh of what this api looks like right so and finally we have the you know the third kind of uh part of this whole uh on the soil equation which is the payments api and in the most usual in the most usual case where we go from you know from market to activity and once an activity is finished and you know the provider has um computed something for you uh it's time to you know transfer them some funds to transfer the the glms that you've committed to so this is what the payment api is for you can you can perform this as well as you can use it to withdraw your funds for example if you are a provider and you're you know earning some tokens on the network um you can use it to top up uh your wallet and so on so this is like everything that the payment api is uh going to handle okay cool uh so now that's we you know we have we have a rough idea of of these three apis how can you learn some more about them um i mentioned that we've kind of chosen this you know rest api uh approach for the tooling that's that's around it and now it's uh this is going to be a good a good example of of this tooling i'm going to switch over to my browser now um and in here i have the the collection of links that i've i've mentioned before uh which you could you can open and there is so there is the uh open api spec for yagna there is there's this link so let's let's go and open it so all of this uh all of the apis that i've just shown you uh they are described using a specification called open api and this open api is um you know it's a it's a standard it's a language agnostic sort of standard for defining rest apis and the way it's it works is that you use a uh yaml file to describe your endpoints and your data classes and so on so in the case of gollum there is this repo on github called yar dash client and and this repo contains a directory called specs and in this directory you have the specifications for all all three apis that i've just described as well as some common elements between between them so yeah let's let's take a look at you know what uh what a file like this looks like so it's pretty lengthy uh it's you know it's a yaml file but it's not really that great for you know readability if you if you haven't encountered this before uh so uh we can use another tool that's that was you know created specifically for this uh called the open api editor or swagger editor that's i think that's the previous name that they used uh it's also included in this uh link collection that i uh that i gave you so it's here so editor swagger i o let's open it now and in this editor uh you have a more like a rendered readable kind of representation of this of the cml file so in this case we are looking at the market api uh if you want to view a different one all you need to do is you just paste in the file here on the left so i can switch over to the specs and i can for example take the activity ammo and i view it as raw and from here i could copy the whole file and just you know and just put it in in here and replace it and this is going to be done dynamically for me so if i paste it in we have activity api now uh and yeah uh so this is i think this is the the best way uh for you if you want to kind of explore what's what's possible uh each of these uh for each of these endpoints the there is you know there's documentation and we also have the possible error codes uh included uh and also the schemas so there are these are the uh all the you know requests and other objects that uh are used throughout the api so you can you can take a look at the types uh behind them and so on so yeah so if you want to explore uh the the yarn api i think this is the this is the best way um cool let me uh let me jump back to uh oh my okay sorry no actually one more thing so um with like with this with this in mind um there is actually another reason for which we we picked this open api and this is because there are actually tools which let you generate uh clients for your apis in a variety of different programming languages so essentially this this means that if you have if you have an api that i described using this uh this standard um there is very little effort required from you to uh to get a you know working client to make requests to it and this is um this is actually uh included here as well on this list we we currently have like two uh officially uh supported uh api clients one for for python and the other one is for for javascript slash slash typescript so so yeah so you can um you can include this one in your project and and just you know use it straight away to make uh to make rest uh rest api calls to do a jaguar node but with all of this said um using the api uh you know directly is kind of low level um in the sense that it still requires you to um add a lot of boilerplate and you know have some context on on the actual kind of uh api um so to you know to to make this easier uh for you we've kind of we've implemented uh like high level sdks high level apis for again the two official ones are for python and for javascript and they are linked uh up here and these these apis are the ones that we'll be using in the examples i will show you in a second so they should be able to handle you know most um most use cases and they will be easier for you to use um and if for some reason you would be uh you you need to make some lower level calls they include the the clients that i've just you know mentioned previously so you can use them there as well um cool i'm going to jump back to my presentation now so yeah we're kind of uh still on this uh this api slide and yeah so i i've started kind of talking about those uh apis and sdks here is a here is a diagram which can be a bit overwhelming at first but it shows you um where these fit within the like you know broader scope um so we have on the on the left we have the kind of the whole requester part on the on the right there is the provider um and the requester has this you know element called the requestor agent uh which which is the you know which is the logic that will be controlling uh the daemon so the demon has the rest api and the agent is making the calls to it uh to achieve some task and so this agent is actually going to you know include one of these one of these packages to to run your code so to run uh some code that you've prepared for your specific use case uh and yeah and just like the the provider side of uh counterpart is going to be the container code the image that you've uh you've prepared for your for your application okay so i think i think it's high time that we move on to something a bit a bit more practical so i'm going to uh from from kind of from this perspective i'm going to switch over to showing you how uh how you can start using those high-level apis and how you can test your application and yeah basically that's uh let's get going then sorry creating a golden app there we go so here are a couple of points but i think that these points are actually sort of the same as one of the tutorials so let me just switch over to my browser here and yeah and in the browser there is there is this one there is the development tutorial under this creating a column app section um and this tutorial is taken from uh our handbook so there is handbook golem dot network um let me open it now cool um so it a quick like quick uh digression here if you if you're new to this to this handbook this is like the i think the best resource to start kind of learning about how to integrate with gollum there is you know tons of various materials um one of the sections are requester tutorials right here and the one i'm looking at is called hello world from golem and this one is a comprehensive um step-by-step guide on uh how to create like kind of each of the each of the sections to get like a working app basically so now let me let me walk you through what needs to happen to to to create this application so first of all uh in this tutorial we start with what we call the worker code and the worker code is the stuff that will be running on the provider side of things in in a container for example and it's going to be responsible for executing a chunk of your task so you need to you need to define this um and i think the most kind of uh i'm kind of abstracting i'm not really focusing on uh the specific example here the specific example is um trying to break uh break some hash by comparing it with you know with a list of words so each chunk is some section of this uh of this dictionary but yeah i'm not i'm not really going to go into how we do that um the important part for for the worker for example is um how it's going how it communicates with the requester and this is done through through files so the container is going to have a bunch of files kind of mounted to it from you know from the provider host and this is where we're going to be uh you know putting uh input files and also where the requester is going to expect some outputs to to show up so yeah so out of all this kind of python code i think the you know the the most interesting part for us right now are these three lines uh so that we have some paths uh inside this container which are sort of well known the paths into wheat into which the requester is going to um be transferring you know stuff uh in and out of so sort of we can also i think i do have a good slide for it let me just let me see yeah this one um so um on the on the right there is there is the provider which you know which is running some container and this container um has a bunch of volumes and these volumes out of those you know those input and output um uh directories for example and those are mapped to uh some to the file the actual provider's file system and they allow us to you know to exchange stuff between the uh requester code and the provider um yeah the requester machine and the provider machine basically um okay back to back to the tutorial now so the next step in in this case is how you actually define what's running inside inside this provider and in in you know in this in this case and in most cases right now this is going to be a a docker container so we define a docker image using uh a dockerfile if you're not really familiar with this like don't worry this again uh it all kind of boils down to uh these two lines uh so the first one is defining uh two volumes that i've just mentioned so these are the directories that are going to be mounted within this container and and used for you know for for getting input and creating some output and then the second one is actually copying the worker script into some you know another well-known location uh within this image which is then kind of pointed to uh in the last line and this is this is this is all we need to do basically in our case having some having some worker script that we've prepared uh we we create this very basic uh image with like with two volumes and one script and that's that's all um like for the sake of you know completeness uh golem is not going to be running docker directly this uh this image is going to uh to get converted into into a different format and this is like this process is described here in the in the tutorial but i'm not i'm not going to i'm not going to be you know describing it it's a technical detail uh the the important part is uh that this kind of this is a good description of of of the of the image itself right um the third part is the requester kind of agent itself and this one is the most open open part because this is where your application specific stuff is going to to to dominate basically the only kind of the only things that are going to most likely be common uh between these uh is going to be how you uh how you split uh your data into chunks so kind of your definition of a single task for a single provider uh so that's one um and the other thing that you you should you should fill in sort of uh uh the steps so the steps are the kind of the recipe for what needs to happen for each of the providers to get the task finished so these will include like the file transfers running specific scripts uh perhaps doing some logic on the requester side and so on so this is the like the second part and yeah and this tutorial is it takes you through uh how you you know fill in uh fill in the these gaps uh and yeah and finally uh there is you know there is the the daemon itself in this case but this actually this actually takes us to running it on on you know on the jagda network on how we actually test our application right so uh let me let me take this example now so this kind of this hello world example and try running it on the golem network first and then i'm going to show you how you can do it how you can test it locally using another tool that that we've developed okay i'm going to follow the steps from from this tutorial so this tutorial sends us to a section called uh requested quick primer so let me open open it up and this section is also part of the requested tutorials actually the first one and it takes you through uh installing yagna uh so we don't really care about about you know python and git right now uh we're kind of interested in running uh the yagna demon here so yeah let me show you how this how this works and it's um it's pretty simple especially for for unix systems it you know installing it uh is just running this single single bash script so uh where is my tutorial uh sorry the terminal cool here it is i hope it should be uh should be large enough for you but if it's not readable please let me know okay so i've pasted in this uh this girl and i'm putting it through bash and this should install the latest version of of golem of jagna on my machine and it's asking me for you know for password so put in okay so it's done i think i already had it installed but just to verify we can do yagna version and yeah this should match basically so we have we have the same as the installer was you know was referring to uh and yeah i mean that's for like for installing the yagna demon itself that's it and the only kind of uh distinction is here in the link so you can either download the bits which are you know required for a requester node or you could actually uh you could actually put in as provider here and that would that would include some additional uh packages but for us the requester kind of packages is enough it's fine now how do we how do we run it and this should this should also be covered uh here in this in this tutorial we've confirmed versions we don't really care about uh deleting the working directories because we're going to be using the test network anyways uh cool so now run the daemon here is the here's the command we put it in okay there's a bunch of logs um which means something is happening at least uh one thing that we can kind of verify at this point is which network we are running and there is this there is this log line about initializing a payment account it's this one and it's telling us that we're using uh a specific payment driver and that we're using the rinkabi ethereum network which is a test network so that's what we needed for for this example and finally the token is um tglm which means the test not the real thing so cool we we can use it to you know to verify um our application to test it like in the development environment okay um since we since we want to um become a requester uh there is a uh there is an additional thing that uh we need to we need to run at this point uh here in this tutorial it's also telling you about i'm generating an app key and this is a one-time thing uh in my case i think i already have one so but let me just verify this i'm going to keep this terminal open and just create a new one or maybe actually uh let's do it like this okay and i can verify this by saying yagna upkey list okay so i already have i i have a key uh and we'll see why this is useful uh in just a moment and okay we we already have some some tokens on on this machine uh i can i can try and verify this as well so the payment status uh is here so yeah we have some we have some test glams that's fine the final thing is enabling our daemon as a requester this is by default the you know the payment account is not initialized to to make transfer to send tokens to uh to someone else basically so we want to enable this so let's just copy this instruction and put it here and we should see another log line uh along you know these lines initialize payment accounts but this this time the mode is different so the mode is sent this was received previously uh cool so we're ready to uh request some tasks since we uh since we have the daemon running and i mentioned that we will use the example that i've just shown you let me just clone that repo really quickly so it's probably somewhere here and the dependencies yeah so here is the git clone instruction there we go i'm going to open up another terminal window and just clone this this hashcracker example to wherever we are right now uh cool now let me uh let me just switch over to that directory and let's verify what we have um so yeah so we have the worker script we have the requester script so this is the one that we will be interested in uh in a moment um just to you know finish up there is uh some project specific uh specific things that we need to do and most like we need to install the the requirements so let me just do uh some python stuff for a moment i'm going to create a virtual environment for it and run this installation so that we have everything that we need as you can see it's actually installing uh the api for yagna right here it's one of the dependencies um okay cool everything went fine so now uh let's run this let's run this request replication with our diagonal node and to do this well we could we could do like just you know request reply but we're going to get an error at this point and this error is telling us that we are missing this environment variable yagna upkey remember when i told you about this application key from from yagna so this is this is the thing that we need to connect uh to our you know demon running locally uh so let me go ahead and grab it we had it um here so when we listed all the up keys uh it's here the second column called key so let me copy that and let's let's try re-running our request for application but with this environment variable set now there's stuff happening you can see we've received a number of proposals from from different providers and we are sending tasks to them so in the case of this example uh we we split a dictionary of words into a number of chunks and sent each of them to a you know a different provider and we are looking for is we're looking to crack a specific uh hash and well we managed to do so there is this vlog about finding the the matching word and after that we get like a summary report so we get a report of how many uh how many agreements we've struck and who computed what and the total cost for this uh for this task right so that's how you can run uh this you know a general a golem application on the network itself but like what could what could go wrong i mean there is a couple of problems with this we just had a successful run but what if something failed um it's really it's not really easy to you know to get the logs from some provider somewhere that's another person is running so we don't really have access to those logs another thing is um this is not really a deterministic environment um we are not you know always running from scratch there will be different machines picking up our tasks uh and so on so it's you know it's it's not it's not easy to kind of repeat the same setup and yeah so to address like these these sort of problems uh we have created a tool called uh the golem test harness so now i'm again referring to this collection of links that we have oh sorry this is like not really well formatted but anyways here is a section and here is the link to this to the repo for it and you you can you can go through the readme uh to learn some more about about uh the test harness but in a nutshell uh what it does is that it runs a network of golem nodes locally on your machine so it's completely isolated it's always created from scratch and you can customize it like however you like so you can run a different number of providers you can do all sorts of things with it and the best part about it is that you have extensive vlogging so you have logs from all the providers you have http traffic logs as well so there's a bunch of you know a bunch of different things that will make your life easier uh when debugging some problems and how do you how do we use it how do we run it the same example but using the you know test harness let me clone the rep here again so switching over to my terminal now and i'll open up another window and clone the repo sorry git clone like this yup there we go let's switch over to that directory now uh to you you can refer to uh the readme to know to learn how to run it but gothic you is using a tool called poetry for python and so poetry will handle a lot of the you know virtual environment stuff for you so all we need to do is we need to call poetry install and this will get all of our dependencies for this project so it should get us you know set up for for using it and once we have it uh installed we can use one of the commands that we've prepared for you to start this kind of interactive network so let me do it now so we say poetry run and po interactive again you should you will see this in the in the readme [Music] so now we're getting a bunch of logs uh about you know the network being brought up you can see the specific column version that's being used uh as well as um what the network kind of is kind of consists of i mean what what nodes you have but in a moment we should see a log pointing us to uh the yagna app key that we should be using in order to kind of connect to the requester inside this network because like i said it's it's fully isolated it's like it's local on your machine so you you need to know how to how to reach it and yeah in the meanwhile um i'm going to leave like three minutes at the end of the session uh for like any last last minute questions uh sort of um cool there you go so there is uh you get a prompt telling you what kind of environment variables uh you need to set uh in order for your application to to run so what we can do is we can uh copy all of this because these end variables they're actually they i mean the api the python api that we've created is expecting these so you don't have to include it in in your code and let me get back to our hash cracking example i've pasted in all of this stuff and i'm going to try running the requester requester script again and right we're getting some we're getting some error here uh while finding a module uh so this is probably not a good sign i won't be debugging this this right now but this is this is probably because it we kind of assume that this is running a different example so i'm probably yeah i'm probably missing something maybe i don't have uh i don't have goth as a package itself installed uh i'm not sure what's happening here but yeah let me not go into this right now um one last thing that i wanted to show you before we finish there is again here at the end there is a section called vm image debugging and this one uh this one is showing you and there is there's actually a again a tutorial in the handbook for it um and this is this describes uh how you can how you can debug your application image before actually actually sending it to the network and why would you like to do this well as you're developing an application um this you know this [Music] this image of yours would need to be kind of sent to the providers every single time you want to test it and once again there is a problem of not enough information so you might not have the logs from from those providers to kind of to easily tell what went wrong and there is well so we've created a tool like specifically uh for you know for handling this kind of a situation in which you can once you have a you know a image a golem image built from a docker file you can run this image locally on your machine and it gives you a terminal it gives you a you know interactive shell uh that's you know running inside this kind of virtual machine so you can do all sorts of you can do pretty much uh yeah anything you need uh inside that that vm so again this will this will speed up your you know your development because you want you will not have to do uh as many uh iterations uh as you would without this uh kind of tool so again uh if you know if you're developing a golem up or if you're looking to to create one uh definitely something to to consider um okay cool uh right let me let me mention something about the uh the bounties that we have as well before i finish so coming back to coming back to this collection of links uh there should be sorry let me just refresh it yeah there is the there is bitcoin bouncy uh here at the bottom so this is this is the golden bounty that you can participate in to create uh create a an app which is kind of focused on open internet and that's pretty much that's pretty much what golem is is all about so yeah definitely uh take a look if you want to if you want to do some further reading um we have a collection called awesome gollum on on github it's a collection of you know various resources and projects that were created uh with the platform so you can take a look to get some inspirations maybe see what has you know already been been done or kind of attempted and if you want to learn some more or about the new golem there is a series of blog posts that you can read right yeah and as i can see in the live chat there is also those are links to the discord servers so there is a there is a discord server specifically for this event so for the hacksaw itself and we also have a golem discord which is very much active and if you're you know if you're looking for for help if you're looking for support we have people out there most of the time just you know searching scanning for any sort of problems that developers might encounter so again definitely worth uh checking out okay cool that's thank you very much for for for listening hey antique i think i think you're muted sorry i thought that was something with my audio but i think you're muted yeah okay but should we bother you uh yeah jacob thank you very much for your presentation uh next up we have uh austin we're gonna take just a very short break and we'll have a workshop with austin so jacob thanks again thank you and see you on discord
Automatic transcript — names and jargon may be misspelled.