 All right, hi. I mean even one of the co-founders at the graph and The graph is an indexing and query protocol for blockchains So You know, we really believe that you know We want software to be built on a solid foundation and I often get this feeling that The way that software is deployed globally today is a bit like building on quicksand And so I think you know all of us in this room are probably here to try to Work on this problem and we're at the very kind of you know beginning stages of this and You know, it starts by building on protocols that have certain guarantees right around stability openness security verifiability and You know it right now we're focused a lot on like financial use cases and you know Defy dows. There's you know, a lot of these early cases coming up But you know, we we really believe that like this is just how all software should run eventually that you know You have protocols that provide these guarantees And you kind of build up from there and that that's going to allow You know society and civilization to you know scale and coordinate in ways that you know, we can't do today so the problem that we solve is Once you try to build an application on top of a blockchain like ethereum You quickly realize that it's actually pretty hard to get the data that you need Directly to your front-end application. Alright, so you're building some kind of web or mobile app And you want to you know run some kind of query to get some data you want to maybe filter search paginate and Maybe you try to do this using like web 3js or something like that and basically it either takes too long or You know, you kind of have to just load all of the data on the clients and filter it locally and And you kind of get stuck and basically the problem is that blockchains Are missing this indexing layer so when you have a database a database maintains indexes So you know on at the bottom of the stack it's using the file system to like store essentially like logs and data and then On top of that it builds these indexes so that it can run these queries where it can efficiently retrieve the data that you Want to get from the database and blockchains. They're really good at Transactionality So if you want to set up rules for who's allowed to update some state The blockchain can enforce that and they can build you know these blocks up But making data efficient for retrieval is you know kind of outside of the scope So that's where the graph comes in where we're building a decentralized network of nodes that I can index that data in a reproduced in in a Yeah, reproducible way and make it available for querying so that clients can access that data efficiently So basically the way it works is You define what's called a Subgraph and a subgraph basically defines how to index that data in a reproducible way So all data on the graph comes from a web 3 data source So that's kind of the box on the right there and that's really important for us that In order for this to be Reproducible, it's important that the data doesn't come from any sort of web 2 data source right if we allow that to just hit some kind of HTTP API that API could return different data every time and You wouldn't have that reproducibility So right now we support Ethereum and IPFS and we're going to be adding more data sources more blockchains More storage networks more protocols over time Then you define these mappings Which are compiled to wowsum so you can do any RBI Data transformations on the data from those data sources So if you need to do aggregates if you want to kind of denormalize the data Transform it so that it matches You know an arbitrary schema then you can do that with your mappings that gets put into a store and then served up over a Graphql API so who here has used graphql before? Okay, so not a ton of people so So the quick pitch on graphql is it's the easiest most convenient way to fetch data from a server and Instead of rest where you have one endpoint per resource where likely the endpoint doesn't have exactly the data that you want Which then forces you to make like multiple round trips? And there's kind of just this mismatch between what the server provides and what the client wants You can define the entire schema up front You say here all of the different n80 types This is how they relate to each other and then the client can ask for exactly the data that it wants And you get just that data back in a single response So it's really an API that's designed for consumers of an API where you can get exactly the data that you want back so I'm gonna Show a brief demo of The graph Show a brief demo of The graph so so this is graph explorer You can see if you go to the graph comm slash explorer And you can see some of the featured subgraphs we have at the top here And then there's a bunch of subgraphs that people are like building and deploying every day So we can take a look at some of these so there's This like Mellon port one and I'm gonna try to zoom in a little see if that works So here you can see that like this the subgraph is fully synced So this is the latest block on on main net and you can see this kind of graph ql schema on the right here Maybe I can make it even bigger So in Mellon port they're like a fun to protocol on Ethereum and you can see it's a really rich schema There's all of these different like entity types. This is just kind of graph ql So you can see these like investors and trading and shares and policies and like all of these things So if I check out like a fund so a fund has a name It has a manager it has like all of these fields on it and you can see that it's all like relational so, you know a fund For example refers to like the investment history and I can click on the investment history and see what that's got like the shares and the share prices and the amounts and then You can run queries kind of in this playground here and we stand up This Graph ql API so these are public end points HTTP and web socket end points that you can hit directly from your web or mobile app So the graph acts is like a live API back end that you hit from your apps to get All all your data So now everything is like super exploded and big but let's take a look at another one So this is peepeth which is a fun app. It's kind of like a Twitter clone So we've indexed like 53,000 entities here and so these peeps are like like the tweets and We recently added this like saved queries feature so you can you know type a query and then give it a name so it's easy to find so This for example is like peep each users and their followers so if I want to grab the accounts and get their names and then their followers I Can do that. I hit play I get back those responses and And what's cool is even if I don't know what data is available I Can hit like control space and I get this like autocomplete so I can see that if I want for these followers I could get like Any of these additional fields? so maybe I want like See if they have an avatar URL for the follow-ease and And if they have them then it shows up in their response there So you can see it's like relational this way Another cool one might be going to drop this for a second. So here I'm looking for the peeps and I can get like the content and and Let's do the We do like Replies or let's just do the timestamp. So that's that's just like a super simple one So here's a bunch of like peeps so you could see you could like really easily build like a Twitter type clone on top of this API You can ask for just the data that you want you get it back And so that's how you kind of query data and use the graph to get the data that you want So now I'll show you what it's like to build one of these subgraphs So the first thing is You can come here and just sign up or sign in with github So we do like an o-off thing and I already have an account So it just pops me right back here and then you get a dashboard where I can see like my subgraphs and Here's a subgraph by this project Called off of God. Oh That's doing like a coffee supply chain on Ethereum, which I think is pretty cool Because you know coffee is an example of like some you know market where you know prices are really opaque and You know these farmers aren't getting a lot of money for their labor and so you could create this kind of direct to consumer or any kind of You know marketplace to connect people directly to these farms So you can see that like you know farms have names and they're in like you know regions and you can check out like the batches And all this stuff for this coffee so I've got a subgraph that's created here and it starts with this manifest and Can you guys see that? cool So in your manifest you specify the data sources. So this is going to be an Ethereum contract Here's the contract address and then these are the events that I want to listen to and so there's different types of triggers So we support events and recently we added call handlers as another kind of trigger So you can trigger any time a smart contract function is called you could use that as a trigger And then you specify the handlers that get called Then you specify your graph QL schema. So this looks very much like What we were looking at before the standard graph QL it defines basically the the data model And then you have your mappings. So so the mappings are built in a subset of typescript called assembly script Which compiles to wasm? So so this is pretty cool We kind of looked at all the different ways that you could build for wasm and we thought that this was like the Easiest to learn since everybody knows JavaScript or typescript It just has like a few quirks, but we've added a bunch of tooling to make it really easy to build on top of this so here we're handling this ad cut profile event and You get the event and then you have access to the event data the transaction data the block data You can get smart contract state as of this block and we basically like event source So we'll start at the first block and we'll run through everything And we'll just like run all the handlers index all the data and it's available over graph QL and what's cool is You know we generate all of these types for you based on like the schema and on the ABI's So you get autocomplete on everything. So here we can see that We've got like these cut profiles and they have like some data But they don't have like all the data that we might want and I happen to know that this contract It has like aroma and some like other information about like these cut profiles for this coffee That I think would be cool to show to users So I could easily add that data and index it in my sub graph So basically I come down here and I say I want to Add some data to this cup profile Say I want to add like the aroma and I can get that data off the event So I get like autocomplete here, and I know that that data is available on the event parameter So I can look in there and I can see like here's everything that's on the event So I want to grab like the aroma And then I'll call two strings. So this is the kind of assembly scripty stuff For wasm to make it happy and then let's get just a few more fields so we'll do the flavor and The acidity let's say let's just do those three and I added an extra dot So I just extended the sub graph to put some more data Under score. Thank you. That's I deleted the wrong one See and it gave me the red squiggly. So I knew at compile time cool, so now I can jump into my terminal and I can Basically deploy and that's gonna I could start first by just doing a build So basically what it's doing here is it's Compiling the assembly script. It's uploading the wasm files To IPFS. It's Hashing the manifest uploading that to IPFS so everything's on IPFS and then I get back this sub graph ID Which is that IPFS hash which uniquely identifies This version of this sub graph. So it's like content addressed and then I can deploy that To the hosted service So right now we're running a bunch of nodes for you This is this like intermediate step on the way to the fully decentralized network so right now I'm just going to deploy this to the hosted service I should be able to come back and See it indexing here. So we support Making like zero downtime upgrades So that current version is still running And if you know my app is hitting that endpoint it would keep running but in the background It's syncing this new version right now. So you can see the little progress bar is going through It's chugging along through all the blocks. It's indexing data, you know, whenever it sees the events and In the meantime, I can come here and I can see that in the cut profile I Should have some more data and I should be able to query it So so that's the graph let me go So How am I doing on time? When did I start? Oh, perfect So the kind of data that You know, I'm excited about and kind of the short term I mean, basically we want to just be indexing all of the data from all different Networks make it really easy to To access and so that people can build applications on top of fully decentralized protocols And you know in the short term You know the the stuff that really excites me about this is the opportunity to create like global open markets for everything where you know people don't have to You know give away power to these like large centralized entities that exert their market power you know to extract and You know in the short term examples of that would be just You know dows, so there's a bunch of like Dow protocols Dow stack uses us And we're getting started in engagement with like Aragon and Colony and all of these dows I think are really exciting Moloch uses us so you can check out like all of the the proposals and everything on on Moloch Things like you know get coin and places where just any kind of marketplace where you know people you can basically vouch for each other's skills and you can like perform tasks and You can like find people to perform tasks I think you know all of this kind of stuff should be on web 3 and When it's all available like those people be able to build more and more applications, they'll be able to customize them and You'll know that all of this software can continue to run forever and you can build on it. You can you know trust in it It's you know kind of a stable foundation for large-scale coordination So if you're building in the space you're building on Ethereum or other blockchains, please reach out. We'd love to help Thank you very much Thanks for the talk any Quick question about the interaction between the the query layer and the chain Is it like decoupled in a way that can be used on any other Chain as well or is it tightly coupled with the theorem? Yes, so in the first version it's more tightly coupled than we would like But we're specifically going to be adding support for multiple blockchains Does someone change something there because I would bring closer. Okay So as part of that effort, we're going to make it like much more modular specifically so that It uses like a plug-in architecture where we'll build like the first few plug-ins to add support for multiple chains We're really interested in like cosmos and polka dot for example adding support for those And then eventually anyone should be able to build their own plug-in for their own data source You said in well, thank you for the talk and also great project The you said that you currently your support Ethereum and IPFS because you want like Cryptographically audible input right to have it be reproducible. What what what do you mean with or what is your vision or roadmap for? supporting IPFS, can I Push index data into IPFS. Do I try to index data from IPFS right now? I think it's used to like initiate The node with instructions So right now we do use IPFS just ourselves internally as a protocol for basically storing all the metadata for the subgraphs but so Like when you deploy a subgraph what you're doing is you're uploading You know the wiles and file and the manifest and everything onto IPFS getting back a hash And so a node anywhere in the world could just Look up that hash on IPFS to get everything they need to index that data So that's just how we're using it internally the way that You know Projects that are building on the graph can use IPFS today is If you have some data that's stored on IPFS and you have a hash that you then anchor on chain So you have like in your smart contract you log for example the IPFS hash then in your mapping script You can cat that file you can get the data and you can index it in your mapping So for example, I didn't point that out but with the peepeth subgraph Most of that data is actually on IPFS So that was a pretty complicated subgraph that to like get a lot of data from IPFS So we support that today, and then there's a question of like How would we support IPFS? Outside of the context of Ethereum all together and that just becomes a little bit harder because So one way to do that would be for example to support IPNs as a data source And then whenever the IPNs reference changes then you'd kind of you know that could be a trigger But the problem is you don't have any strong consensus with like IPNs it's like eventually consistent and So we need to figure out how we're going to deal with that because we want our protocol to maintain consensus What one of the important? requirements we had from day one is that if you issue issue a query for example as of some block then There should be one and only one correct response to that query So we need to have strong consensus And so that's an open area of research for us because we'd like to be able to you know support like an orbit DB Kind of model or like IPNs as a data source, and we still need to figure out how to do that So so you on the three points like the first point just because I am selfish and I want to dig deeper So is this when when you say like we want to make sure that the input instructions to the node is Also verifiable so that different nodes have the exact same Instructions is this sort of in a vision towards Having consensus on the indexing of different notes as well, and where what do you see happening there? Yeah, it's just I mean We think IPFS is just like a great abstraction for like file storage And so we have this problem of like we need to store the files And so we weren't going to reinvent the wheel and so IPFS was a good solution of that problem We do want the protocol itself to be open and permissionless And so the easier it is for any node to kind of have these guarantees where they know that like the data will continue To be available to them. That's important And that's why like we only support these strong web 3 data sources as inputs so that you You know really have these guarantees that anyone at any time could like rebuild the state and You know index a sub graph and be able to provide that service Great. Thank you so much again, Yanef. Thanks