123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317 |
- 1
- 00:00:00,719 --> 00:00:04,960
- All right. So, thank you for joining me on this part four on Hydra v3.
- 2
- 00:00:04,960 --> 00:00:18,240
- Now this is largely just going to be about what Hydra is but we are working towards v3 which is a major milestone for us in terms of the functionality that's needed,
- 3
- 00:00:18,240 --> 00:00:28,960
- and we really think that with this release it's really becoming possible for people to build very powerful applications,
- 4
- 00:00:28,960 --> 00:00:34,800
- front-end applications for substrate chains using Hydra, so we're extremely excited about it.
- 5
- 00:00:34,800 --> 00:00:42,550
- As I’ll get to, you know, it's actually a pretty astounding achievement to be able to build and manage this on top of everything else we're doing
- 6
- 00:00:42,559 --> 00:00:50,710
- because you will find many other projects that are very large teams entirely devoted to building something like Hydra,
- 7
- 00:00:50,719 --> 00:00:55,360
- so it's something we're really proud of, and we want to assist other people in adopting as well.
- 8
- 00:00:55,360 --> 00:01:04,550
- So, Hydra. What is the, I guess, the best way to understand it is just in terms of what problem is it solving.
- 9
- 00:01:04,559 --> 00:01:18,470
- Imagine a hypothetical blogging blockchain which is sort of a substrate chain which has the single purpose of sort of implementing some kind of a social blogging platform,
- 10
- 00:01:18,479 --> 00:01:33,920
- and, in fact, a one well-known substrate project called Subsocial which is covered under my little video in the top bottom right corner actually has implemented Hydra
- 11
- 00:01:33,920 --> 00:01:39,520
- so it's not entirely hypothetical, but just for the sake of an argument imagine this kind of a blockchain.
- 12
- 00:01:39,520 --> 00:01:47,360
- So, you have users submitting extrinsics or transactions where they make threads and posts, this sort of stuff.
- 13
- 00:01:47,360 --> 00:01:50,000
- So, that's pretty, you know, simple.
- 14
- 00:01:50,000 --> 00:01:59,110
- And then you can imagine building some sort of an application that's supposed to display something about this blogging infrastructure
- 15
- 00:01:59,119 --> 00:02:06,560
- like allowing people to post stuff, allowing people to read what's happening across different blogs and so on.
- 16
- 00:02:06,560 --> 00:02:13,520
- So, the naive way you would do it and the way most apps for substrate have been built is that you just build some front-end app,
- 17
- 00:02:13,520 --> 00:02:26,310
- you hook it up to your substrate full node, and it queries it in order to ask some simple questions about what the structure of the blog is and who's doing what and so on.
- 18
- 00:02:26,319 --> 00:02:36,950
- The problem that you'll pretty quickly run into is that there are a bunch of very simple queries that are needed in order to render the sort of user experience
- 19
- 00:02:36,959 --> 00:02:43,120
- that people are used to, certainly in Web 2.0 world that just are not possible if you ask a full node directly.
- 20
- 00:02:43,120 --> 00:02:56,230
- If you ask for any of these examples and really any number of other examples you could think of as they are totally reasonable, the full node won't have a pre-prepared
- 21
- 00:02:56,239 --> 00:03:02,640
- index over its history and state which would allow you to easily query and ask for those.
- 22
- 00:03:02,640 --> 00:03:14,480
- The thing that you see people doing is either you have like a front-end app which takes a very long time to sync up because it downloads everything
- 23
- 00:03:14,480 --> 00:03:24,720
- or a large chunk of either what's in the state or history in order to do a bunch of processing on the client side in order to show the right thing for the user.
- 24
- 00:03:24,720 --> 00:03:29,200
- That's slow, complicated, in general just doesn't really scale.
- 25
- 00:03:29,200 --> 00:03:38,560
- This is really the problem that you'll run into writing really any blockchain application, you will, if you're going to make something that's,
- 26
- 00:03:38,560 --> 00:03:43,280
- I would say, has a non-trivial user experience, you're going to have to somehow solve this problem.
- 27
- 00:03:43,280 --> 00:03:52,790
- And specifically for substrate chains, Hydra is the framework approach we've taken to solve this.
- 28
- 00:03:52,799 --> 00:03:58,400
- So, what it is? It's a software framework where it makes it very easy for someone who's developing a substrate chain,
- 29
- 00:03:58,400 --> 00:04:05,120
- such as Joystream, to focus only on the parts that are relevant to them.
- 30
- 00:04:05,120 --> 00:04:18,000
- They get this whole set of tools and nodes that automatically does everything else they need in order to provide this API basically which can,
- 31
- 00:04:18,000 --> 00:04:22,470
- for example, respond to the sort of queries that I showed you before.
- 32
- 00:04:22,479 --> 00:04:26,720
- So, that's the Hydra framework.
- 33
- 00:04:26,720 --> 00:04:37,190
- We actually were really proud to see that the Hakusama judges picked it as the first entrant winner, so that was pretty cool in the,
- 34
- 00:04:37,199 --> 00:04:44,800
- I believe it was the open category if I hadn't… I think that was, yeah, open hack, so that was really cool.
- 35
- 00:04:44,800 --> 00:04:53,040
- For some of you, maybe the way I am describing it, you may feel like you've heard of this before, in particular coming from the Ethereum space,
- 36
- 00:04:53,040 --> 00:04:59,040
- and this is basically because this is very very similar to what the Graph tries to do for Ethereum.
- 37
- 00:04:59,040 --> 00:05:10,800
- Basically, it tries to give that kind of a service for smart contracts whilst we do it for standalone chains.
- 38
- 00:05:10,800 --> 00:05:16,400
- There are some big important differences between the Graph and the Hydra framework.
- 39
- 00:05:16,400 --> 00:05:28,720
- One important difference is, well, at least before the way the Graph used to work was that the Graph company sort of hosted a service where everyone who built an app
- 40
- 00:05:28,720 --> 00:05:36,880
- that was talking to the Ethereum chain would sort of just talk to a server that the Graph company was running.
- 41
- 00:05:36,880 --> 00:05:47,360
- They were sort of not that happy with that, it's not really sort of in the spirit of the Web 3 vision
- 42
- 00:05:47,360 --> 00:05:56,800
- so they always had the goal of building this distributed peer-to-peer type of network that would replace their role in provisioning that service.
- 43
- 00:05:56,800 --> 00:06:03,120
- That's not an easy thing to do but that's something they've started to roll out, so I think over the next coming months
- 44
- 00:06:03,120 --> 00:06:14,470
- or so there's going to be some version of what the Graph, the hosted version of the Graph does for that is decentralized in some way.
- 45
- 00:06:14,479 --> 00:06:18,080
- I mean I could get into the details of what that is but I think that would be a big distraction here.
- 46
- 00:06:18,080 --> 00:06:27,600
- The way we run Hydra and generally people are expected to run Hydra is that the person who hosts the front-end application
- 47
- 00:06:27,600 --> 00:06:29,520
- would pretty much run the query node instance.
- 48
- 00:06:29,520 --> 00:06:34,800
- That's sort of the way we're envisioning this being provisioned.
- 49
- 00:06:34,800 --> 00:06:44,800
- Maybe that we end up shipping a working group which has people running query nodes which, this is what we call Hydra nodes basically,
- 50
- 00:06:44,800 --> 00:06:54,000
- where people are incentivized by our DAO to run them for the benefit of people using either Atlas or Pioneer or any other
- 51
- 00:06:54,000 --> 00:07:03,360
- major front-end application but this is one of those decisions that we are still quite early on in terms of how it's going to be provisioned at scale.
- 52
- 00:07:03,360 --> 00:07:08,160
- How is it that this actually works for a developer?
- 53
- 00:07:08,160 --> 00:07:11,440
- What a developer has to do is they have to define two things.
- 54
- 00:07:11,440 --> 00:07:18,080
- The whole point of Hydra is to alleviate the burden of having to do everything like talking to the chain,
- 55
- 00:07:18,080 --> 00:07:22,800
- and managing a database, and putting your events in there, and making an API.
- 56
- 00:07:22,800 --> 00:07:28,400
- It's a lot of work to get that to happen every time for a new substrate chain.
- 57
- 00:07:28,400 --> 00:07:37,440
- So, what a substrate developer has to do is, first, they have to just define the way the data in their system is organized
- 58
- 00:07:37,440 --> 00:07:44,240
- in a really nice simple sort of GraphQL like markup language.
- 59
- 00:07:44,240 --> 00:07:55,030
- There you would say, for example, if we take the Subsocial example that you have, you know, a blog, and you have posts, and blogs have authors, and posts are part of blogs.
- 60
- 00:07:55,039 --> 00:08:02,800
- You would sort of define a very convenient way, in a way that developers are very comfortable with, how the data is organized.
- 61
- 00:08:02,800 --> 00:08:11,030
- And then you would define what are called mappings which are basically rules which say when I see this kind of an event or this kind of a transaction
- 62
- 00:08:11,039 --> 00:08:16,080
- in the substrate chain, I'm going to put something in the database which then will be queryable later.
- 63
- 00:08:16,080 --> 00:08:25,680
- Either put something or update something or delete something, basically, update the database that holds the information that the front-end apps are interested in.
- 64
- 00:08:25,680 --> 00:08:29,680
- If you provide these two, you basically get everything else for free.
- 65
- 00:08:29,680 --> 00:08:42,080
- So, the way Hydra sort of works in production is that your application talks to a GraphQL server which has the API,
- 66
- 00:08:42,080 --> 00:08:50,880
- that's the API which will allow you to ask those pretty questions that I mentioned in the beginning of the slide deck here that talks to a specific database
- 67
- 00:08:50,880 --> 00:08:57,120
- which holds the data that I just talked about which is managed, sorted by these mappings.
- 68
- 00:08:57,120 --> 00:09:08,240
- Then there is a processor which is this long running process that runs these mappings whenever it sees that the underlying full node
- 69
- 00:09:08,240 --> 00:09:12,800
- has produced some new blocks and some new events and some new transactions.
- 70
- 00:09:12,800 --> 00:09:23,920
- Basically, this indexer database holds a sort of long-standing index of
- all the stuff that's happened in your substrate full node.
- 71
- 00:09:23,920 --> 00:09:29,440
- That is the basic architecture that makes a single Hydra node sort of come together.
- 72
- 00:09:29,440 --> 00:09:40,560
- You can basically think of the mappings as defining how the query database looks, and then you can think of the mappings as the logic that runs in the processor.
- 73
- 00:09:40,560 --> 00:09:44,320
- It's quite a nice abstraction.
- 74
- 00:09:44,320 --> 00:09:50,080
- We are extremely proud of having been able to have done that on a relatively small team.
- 75
- 00:09:50,080 --> 00:09:59,270
- A lot of these abstractions have been identified by the Graph, and they've done an amazing job, but it certainly has not been
- 76
- 00:09:59,279 --> 00:10:04,390
- easy to do this with a smaller project with a separate purpose.
- 77
- 00:10:04,399 --> 00:10:09,680
- We're very happy about having developed this, and we hope more people will continue to adopt it.
- 78
- 00:10:09,680 --> 00:10:18,160
- That's the story on Hydra of which v3 is the next major release.
- 79
- 00:10:18,160 --> 00:10:23,600
- So, that's it, see you for the next video.
|