Whiteboard Series with NEAR | Ep: 24 Pierre Krieger Parity |
Nothing is loaded from YouTube until you press play, and then without tracking cookies.
About this video
In this episode, we had Maksym Zavershynskyi ( / mzavershynskyi ) from our team interviewing Pierre Krieger ( / tomaka17 ) from Parity Technologies about Libp2p library which is a backbone level-0 solution for several blockchains including Substrate/Polkadot.
Learn more about Parity here: parity.io
------ About Whiteboard Series --------
The Whiteboard Series with NEAR is a set of video interviews with Founders who are building scalable solutions for Blockchain. We deep dive into their story, what they're developing and how it is helping the ecosystem.
Follow the latest from NEAR Protocol on,
Discord: near.ai/discord Medium: near.ai/medium Twitter: near.ai/twitter GitHub: near.ai/github
#WhiteboardSeries #Blockchain #FutureIsNEAR
Transcript
6,391 wordsCaptions as YouTube publishes them, usually machine-generated, so product and people names can be misheard.
- 0:03
hey everyone my name is max I'm from the Neo protocol and this is the part of our whiteboard series today here with me spear from Paraty he is working on leap p2p and we already want to introduce will TTP to everyone yep so the p2p several things initially but history of flip it open is it was a networking stack of ipfs made by protocol apps so protocol app started ipfs released ipfs and they were like oh
- 0:35
it would be nice to make this networking stack available to all people so I just extracted the p2p from that and what it is exacting it's kind of a protocol kind of a framework it's kind of intertwined like when designing the p2p needs they are kind of designing the protocols but at the same time how you're supposed to use it at least former go and JavaScript version whereas version it's a bit on the side we are doing things a bit more on own what would it mean like on a on
- 1:08
on your own like we haven't followed the API of JavaScript and you always seen here and initially it was go right so ipfs was origin ago so they extracted it in go more or less but they also wrote javascript in a p2p from scratch I'm not mistaken why cuz there was no JavaScript ipfs oh it was the part of JavaScript a BFS project I think I'm not like 100 certain of that okay that's what I think happened yeah so what is this loop it appears like just the communication between some
- 1:47
random set of peers yep it's basically a framework to do this on try like dissing tries peer-to-peer networks whatever you want the network to do is up to you but to a networking part the lower-level part is handled by the p2p I see like today I heard lots of people are using with p2 p4 blockchain but it's not meant just for the blockchain so we're probably just going to talk a bit about and on blockchain specific stuff yeah ipfs yeah and then like jump to the
- 2:18
blockchain specific stuff with that the adversary's and selfish behavior like at the very end cool so can you say how exactly the role in works in the would be TP so what do you mean by relaying do you mean just communication between nodes yeah because like to my understand and the point of would be TP is that if you have a group of knows they don't communicate like everyone to everyone
- 2:48
right well that's kind of agnostic on top of lik p2p the p2p doesn't really care about that the p2p lets you establish communications between nodes which nodes you actually establish a communication wave is up to you so that's on top of the p2p but you can ask some not really information to another node rather yes and like at the core level the answer is no yeah really at the very lowest core on top of that you have
- 3:22
several protocols oh yeah one of which no two of which offload serve God's observe which op taps of mechanism and they handle connecting two nodes and reading messages wherever there's also another concept depending on what exactly you're talking about the read a protocol but it's not about reading messages well it's not about gossiping it's about yeah proxying acting as a proxy other VPN whatever you want to do
- 3:54
for a different node yeah I see so you know Alice and Bob want to talk to each other Alice can ask - what's the name of see Claire yeah I this can ask Claire to establish a communication with Bob and so Alice and Bob we communicate through Claire I see I see and okay and this is a different from gossip because gossip happens like uncontrollably sort of yeah it's like a like a propagation of information in controllable way yep they are kind of connected but we can we will go back to
- 4:34
its later okay who's relaying phone uh Travis Oh mmm yeah we're gonna talk about it so the go version of Liberty P is full of features right you go to their website and just like a list of all kind of features that they support in there so which of those features you know get translated into the rest version that you actually work in so the website is not up to date at all which one there you go yes I know for us it's not
- 5:05
a policy like if you go on the website it says not implemented not implemented not implemented as well actually almost everything's implemented we have a few things but are not implemented we don't have quick we don't have TLS cuz well we use TLS but we don't have protocol name TLS according to the p2p okay what do we know that we don't have web RTC no yeah we don't have gossip sir but there's a pull request open made by someone else not from Paraty not from my company but
- 5:45
it's not merged in master no see that's basically it the rest is the same as good you have hole punch in there right no we don't have Dennis but you're gonna have hold function eventually yes for requests can you can you talk more about like what whole mansion is because Fisher maybe I can use the whiteboard because that's great this element hasn't been used available so if you have a lease anyway how do I draw a B again and
- 6:19
want to talk to each other here you have a nuts and that's a problem and why is it a problem so imagine that's like your home yes any laptop that's your home yes and that's your router your your box you're in Germany but would be of it's books so it's not her because that's what everyone has that's your router oh you not I'm typically in your home you have multiple multiple machines connected to the same nuts by Wi-Fi about cable doesn't matter and
- 6:59
so if B tries to connect it will reach here but then the router doesn't know who to connect to because everything here is the same IP address the IP address is yeah and so a router doesn't know hey which one which one do you actually want to talk to unless the connection is already established yep that's why in order to do not rather so so but it's just what you saw to solve natural straw is if a establishes the
- 7:34
connection if a wants to talk to B it's not a problem unless B is also behind the nut but in this example it's not so what is the relation between those two things NAT traversal and hole punching the same concept so hole punching is the other way to solve nut rather so you have two kinds of hole punching TCP and UDP UDP hole punching is basically a and B send UDP packets to each other and that kind of confuses Virata well you
- 8:13
need like a relay in some way to synchronize like step one is a and B no but they want to talk to each other like it cannot start out of nowhere you know step one is a and B need to know that they want to talk to each other and then they start extending UDP packets to each other like on timer or something yep and like the packets from B are not going to reach a but since a sending packets as well a router is going to be any but a is too easy establishing a connection
- 8:46
and so the packets from B are actually going to go through like this is just a hack to tell the router hey I want incoming so you're basically exploiting some miss feature and router well for UDP is not a miss feature for UDP it's kind of the way it's supposed to work oh I see like it's - it's the way to tell the router that you want to establish connection the cool thing so you're going to say why not just have you why not just add a established
- 9:18
connection UDP hole punching works if both a and B are bit behind the router so you know imagine you have a router here as well UDP hole punching is still going to work like ace packets are going to say a router but it won't be spec as to come and vice versa so if router implement this protocol to establish the connection already why won't they have something more simple like I send UDP with certain payload that tells me tells the router that it you know we're trying to
- 9:50
establish connection would be well that would be a secure big security issue anyone can could send a packet like there needs to be something from a oh and from B oh yeah that's like handshake thing if a doesn't know that any wants to establish a connection there's no way for B to do that because right yeah that would be a pretty big security issue well it's more like the router is designed to prevent that to happen
- 10:19
specifically so I won't write or specify the when a and B want to establish connection they send one single package towards each other just once with certain kind of payload so there is kind of this mechanism ish no not that exactly but well you PNP PCP and another one which I don't remember by basically protocols but let us tell the router hey I want to open a port the problem with that is that you BNP is extremely crappy
- 11:00
so I don't know the details I never investigated really much into UPnP but from what everyone says is kind of crappy not working we're full of issues and so on so forth also UPnP doesn't work if you have two routers if you're behind two routers PCP is well better designed PCP is the modern version of UPnP but it's not implemented everywhere so yeah this kind of is trade-off that's why hole punching still a thing
- 11:32
because of UPnP scrap PCP is not implemented everywhere I see got it so this is UDP hole punching yeah how does TCP hope action work so TCP hole punching was kind of the same way it's just the implementation details that are bit more weird so again I I don't know what the very very specific details I don't know but to establish a TCP connection you have a free three messages handshakes in ack and since I
- 12:04
see it not seen seen ack and ack and you basically flood each other's in ack packets instead of sending UDP packets same principle but it's just a different type of packets yeah you say so that's the router again the point is to travel router hey I want to I want this connection to happen same principle that needs to be a synchronizing point I think you need to agree on one port to use silver synchronization points like
- 12:37
step zero is a MV need to be able to a young B need to know that they want to talk to each other on the specific port yeah but because that's what I heard like one of the ways to do the hole punching is that a first opens connection with someone else on some given port and then gives this port number to B and then B can't talk on that port right okay again I don't know very specific details of TCP old country cuz I never chillie implemented it but yeah but like
- 13:10
you could pretend that B is the IP of of the third party that's used on synchronization okay all right so I heard that whippy-tippy has lighting hurry I know that it has the special format of the address right yeah which is less ya multi address more Universal than just like IP address can you explain what multi address is suburb there's the best way to explain that is just give examples so instead of having
- 13:42
just an IP address you have it in this format so instead of saying 123 dot forty eight dot zero dot 213 ports 1030 you just write this and it's the same but basically just some user-friendly way it's it doesn't bring any technological advantage doesn't bring anything new on the technical level it's just a way to make this more user-friendly you can like combine protocols and Moochie
- 14:32
addresses you can actually create like stacks on top of that so if you want you can add WS at the end WS means WebSocket and basically me if this now means WebSockets on top of these TCP connections and you're going to exchange messages within WebSocket frames instead of raw messages on the tepees on the TCP connection there's also like weak there's also uniques you can put a unique staff and so on and so forth you
- 15:14
have Breda incapacities so you can write p2p drive circuit so you said that Raeleen is something that is a higher level than liquid appear right yeah it's not part of a very core it's like a protocol on top it's still part of a p2p frame or Kamala's but it's it's an optional component small component okay I see but anyone can have their own ruling on it again define relay engine
- 15:47
in gossiping or gossiping yep yeah yeah you got it yeah but that's one of a major selling points of a p2p you can every protocol is optional you can write your own protocol you don't have to use anything like via there's a few components but a part of a core the media versus thing for example here identities with public private keys also the part of the core yeah but public he has a specific format okay and then you hash it in a specific way gives you a pure an identity of a
- 16:22
node that's part of a core as well and negotiating a protocol is part of the core so maybe I could elaborate on that so when you establish a connection so imagine you establish a quick connection I'm going to give like a concrete example so imagine you're using the p2p imagine you're using UDP and I ask the repeat okay you're using like you're using lead p2p and I ask the p2p to
- 17:08
connect to this address it's going to use quick quick protocol quick has encryption and multiplexing already in the protocol so once the connection is open we negotiate quick and connection is open but if I ask if I ask Vince instead that's a regular tcp/ip connection it's just a stream of bytes there's no encryption there's no multiplexing so when this situation happens there's like step two and step three which is negotiates encryption negotiate multiplexing and so when we
- 17:52
open the connection we use a protocol annuity stream select and the two parts of a connection talk to each other and say hey do you want to use sake I owed you want to use TLS do you want to use noise which are encryption protocols and they agree on a specific encryption protocol to use when they do the hell man and so on and so forth and then step three is do the same for encrypt for multiplexing sorry
- 18:26
actually with yeah mix for example so that's not leading with quick cause quick already has is acting but if you have a royal connection you need to negotiate encryption and matific own multiplexing okay can you talk more about this private public key that you need for the for the lipid TP and what is it used for that's basically how you identify and no that's how you differentiate through nodes to know those sessions notes no so if if I
- 18:58
live if I if mock if my machine get this kind from the network and rejoins it uses the same public private key basically p2p there's no concept necessarily of disconnecting reconnecting from the network I mean you can disconnect from a node and reconnect with a node later but there's no I disconnected from the entire network I don't know if you see what I mean is very years yeah there's no difference
- 19:29
between a node connecting to zero peers and an offline node okay so yeah every single node on the network has a private key and a public key and the private key is used in the encryption negotiation well a private and with a leaking obviously so when you establish the connection to someone you prove that they are the identity but they claim to be so every node can actually is supposed to use the same public and private key with every other node that they establish connection to but there is no way to enforce it right well if I
- 20:10
use several different public key if they use several different keys we are considered a server several different no mercy again there's no real way to like detect that you could just run the same program twice on your machine it's not like they were right each other all right anything like that hey what it's not like the override is shattered like one takes priority over another no no no I see what the
- 20:34
situation where they would override each other is you have two clients using the same peer ID like if you have two machines using the same Keys like but we will create small s because like a node we think it's already connected to you yeah so it receive an expert connection it's like oh I can close one since yes one is useless and like you'll need one so it's going to close one connection so like if you don't do that mmm-hmm but there was no like tiebreak can happen in
- 21:06
there that allows to you to just like prevent the cyclic you know like reconnect in two different nodes every time they talk to you no no again there's no different there's no way to detect that there's no way to differentiate that from an over forking over be a normal behavior sorry okay I'm talking about tie-breaking like if two nodes try to establish connection similar to each other how do they
- 21:29
negotiate which one is actually in coming in so in JavaScript and go and in rest in the future we are just simply allowing multiple connections and all call all the communications like go on one of the other choose random one or look I don't know for JavaScript and go I don't know his detail I see at the moment in rust we don't do that in rust we need to tie breaker as you said and
- 21:58
what else die breaker based on voter ID now that's really the lowest identity winds forward died inside mercy it's actually quite hard to implement correctly I don't know if you tried that in yeah yeah we did it that was harsh we did so many mistakes so this yeah but they don't test two months maybe even more but then also the interesting thing is that if you have some note who
- 22:24
just turns like accidentally it has the lowest public key or whatever ID then everyone is gonna have inbound connection with it right it's not like it's gonna have a balanced mix of inbound and outbound connection you know Sony decided if they died show us commute on you see yeah okay like if you receive if you yeah if you receive a connection you're not going to die the same note yourself you're just going to use your incoming connection so even if your identity is zero zero zero zero
- 22:57
zero you're going to receive incoming connections but you're not going to establish others it's rare it's over the tie breaker doesn't it's not relevant which is woods do another question how does beer discovery work in a way PTP so again it's not part of a very core that's what occurs on top you have like three mechanisms one is basically boots nodes because like all over the internet
- 23:28
you need some way to bootstrap yourself to join an existing an existing network and so boot nodes are hard-coded identities and addresses addresses like that obviously not IP address port but that which is more less per se second mechanism is mdns which is discovering nodes on the local local network LAN local area network and how does it work with UDP broadcasting so at a regular interval I don't remember it's just like a heartbeat at your broadcast we just send
- 24:10
a message saying hey other people out there and DNS is a standard protocol it's not only p2p specific thing but sleepy dopey has a small extension to am dns to be able to say hey my identity is like we need to pass the identity of a node as part of the process okay yeah and that's two mechanisms yep and you can combine them together oh yeah you can have both and substrate we have both the third one would be cadonia
- 24:46
so to go into like a real-world situation mdns is use this may be well not useless but like you have a blockchain you want to connect to the internet it very rarely happens that you have another node in you in your local network so we can like you know mdns boots nodes only like four nodes it's just for the initial connection right yeah in substrate right now it's four nodes you can like look nodes cannot be this store of all addresses of the
- 25:25
entire block chains not too much for them right yep um therefore Kadima is like the main mechanism to discover the network that's why I did this more of topic thing I guess I'm should explain Academy a-- please well that's extremely hard to explain you know varying if you don't know anything about Kadima that's kind of hard to explain well that's a good thing that you're explaining to whoever's you in this video because otherwise it would be really hard for
- 25:56
them to understand right so yep imagine but that's the linear space I'm going to say it to you so much we're going to mass so imagine that's node eh-eh-eh-eh-eh uh-huh it's the idea oh I shouldn't have said a a would be zero zero zero okay that's the public key the hash of the public hash of the public your identity and that would be as no we are using they we are not using and stupid we are not using exactly similar on we are using something else we are using base 68-58
- 26:38
so that would be easy and why do you need to hash public key and I'll just use it as it is a good question that's 30 off-topic to Kali Mia mercy in a pita paper format of a public key is generic so we don't say you need in the Year 2005 1 9 with just our generic over format can be RSA you can be easy to it can be sick you can be anything else in the future RSA keys need to be hashed cause enlarged or guys bats there's like some discussions if
- 27:16
it's IDI to 501 9 just pass working itself but has some consequences yep let's just assume it's hashed cool why do I use in base 58 and not just hex okay so okay so I was explaining Kadim yeah so that's the space of identities every single node is somewhere here is somewhere on this line yeah right so I'm going to use an another color what's the time I the way am i late or no you're fine okay this doesn't work
- 28:11
very well I have another one here we go it's not gonna be usable huh well so you're partitioning this linear space no no that's not partitioning that's just nodes okay this oh no they put some arrows maybe instead so these would be arrows it's written there are arrows I'm imagining your node is here my node is here yeah you have another color yes thank you and your node is going to store to hundreds of no not 256 20 node knows which are in
- 29:16
this space 20 over knows which I and V space sampled what you mean sampled like the space is dense right so if I have 20 levels in this space yeah then the 20 no so this space I mean big oh yeah so for example of this space excludes oh god it's only pausing outside 20 nodes here well of you see here there's nothing but you get the point yeah and of course smaller and smaller and smaller if your if your node identity is 256 bits long which is the
- 30:02
case yes then you're going to have 256 of these okay so what that means is each interval contains 20 nodes whose distance is a specific like is in your specific interval like for example this this is what we call a black hat by the way stores 20 nodes in in here which means the distance between these and this but look what I mean but like 20 nose I do I choose arbitrary 20 now say this bracket
- 30:39
in practice it's arbitrary the way it's implemented is just first come first when you connect with someone or when someone connects to you you add them to values I see I see yeah and so that's the way Cali Mia works so each node is responsible for knowing the nodes that are next to next to them yes so imagine I want to know about this node yes so I'm here I want to know that I want to know about this guy
- 31:17
I'm going to look in this bucket which one I know of is like the closest one it's this guy and you're gonna ask him so I'm going to ask him hey give me information about visca well that's not that's not a good example because we already know this guy in this example I think I want to know about to know that is here when when there's no where there's no arrow I'm going to ask this
- 31:43
guy give me information about this and why would like why would you want to do this I mean if you already have this brackets oh it's uh so it's only when you're constructing those brackets like you're trying to fill them with 29 0 yeah you're actively trying to feel yeah who's brought these brackets and when you lose the connection with one of the nodes you remove them from this bracket and then you try to fuel it again if we lose the connection we we don't remove a
- 32:10
node from a bracket we put it on the bottom of the list okay and if we connect to someone else in the same way get each bracket is like a got it it's only if if a bucket is full it's named buckets I was saying its name a bucket no bucket is who we start replacing okay he's connecting nose with unit and this works because it has some good mathematical properties or something so the reason why Kadima exists is that so this is called a DHT
- 32:47
fobian audience yes she means distributed hash table so imagine what would be a table the elements of the table AHA hushes and it's distributed because each node knows about the hashes next to their identity the point of Kadima are normally is to store arbitrary values so each node is not only responsible for knowing the nodes that are next to it in identities but also for storing values with whose hash
- 33:21
are next to it so sorry if you want to store a hash if you want to store a value in this table you're going to find the nodes that are close to the hash of that value and you tell them hey please store this that's the reason why cadena exists and we are using this as discover mechanism as kind of how to say that a derivation wave it's not the primary reason why calamy exists special cases yep if Jung uses Kadima for his discovery
- 34:00
ipfs is Kadima for its discovery ipfs also uses the regular properties of can amia and itself sir actually also using the regular properties of Columbia to store some value data information but that's I see yeah so you can just also piggyback some metadata on this about these ideas that's why using caddy miracles in substrate we've also investigated others over discovery mechanisms but we need to be able to find inform to store more information with the HT so he switched back to Cara
- 34:34
Mia got it okay so you said many times that grabbing Nevada yeah the HTTP is modular right yeah which means I can actually define certain implementations so this behavior of the slip PTP library that I want to be customized for my own use and there is even this behavior trait or something yeah do it p2p that you can implement that's specific to rest a p2p okay can you talk more about
- 35:07
it maybe I can also talk about the way here STP general how would you use arrows will appear to be how you would use rusty bit peas a bit too like complicated to explain like you need a tutorial and everything okay but the way recipe tree works like as a in memory basically you have one thread one green thread one co-routine whatever you want to call that for each connection so you
- 35:43
action one connection to oops 3/4 and these these are each like separate coatings these are each separate threads in rusty p2p you have like a handler what we call a handler object but so what would be the internet basically and you have one handler for each connection in its own thread and then you have a main thread or task or call routine again whatever you want to call that but acts as a synchronization point what does it synchronize between
- 36:40
those connections so what is exchanged here between Mahendra's and the main thread are messages that contain logic so what would be for example a ping to give the most simple example hey said over know King is not actually exchanged here that signal could be start academia request so I'm going to write that down I see so main thread yeah besides that it's time to start academia a request yeah the main thread for example tells I want
- 37:15
to start a caddy me request on connection to of course you know the identity of the nodes of the connection and then later so the handler receives a message hey I need to start academia request translates part into bytes and then this it sends out the dice on the connection and then later of a connection replies with bytes mahendra translates that into academia answer and then it sends back the response so this
- 37:45
behavior trade it implements what you will say you run in these connections and means right when it will be able trades trades implements basic cat-like to implement the trade you only need to implement that part and that's named protocols handler in the code like Mahendra Feeney is named protocols handler okay fun facts so that's the API you're supposed to use if you want to use rusty p2p on the lower level as a Nova API where this is name node Handler
- 38:23
and thanks to this low-level API you can turn any p2p into anything you want basically you can turn that into an HTTP and HTTPS HTTP server yeah that's cool that's only if you use the low-level connection of a low-level API okay and same principle like connection one sends an HTTP request to a handler the handler says to remain Fred hey I have an HTTP request the main Fred said spider
- 38:54
responds intense attorney two bytes huh but that's like kind of off topic was because yeah yeah okay let's now talk maybe a little bit about the blockchain part of lit p2p right so since it's become so this also sends out Kings which sends out ask debug information but kind of silver handle I'm a connection also kind of isolated in our see what acting on their own okay the main freedom they have to do everything that's why they are kind of
- 39:28
segregated so regarding the blockchain world right it has this adversarial scenarios it has people you know not just with selfish behavior when I don't want to follow the protocol so I know that you have this reputation system implemented yeah it's a substrate it's not the part of the p2p no it's only substrate yeah I see so what can you what can you tell in general about this reputation system so according to to you
- 40:06
like every node has a hashmap basically of every other node but it knows off and has a reputation value associated to it I explained about vehicles when you talk about reputation people think the reputation is a network reputation like no that's not the case your reputation is different for every single person it's not a global race it's completely different or it's just like loosely correlated it'll just like slightly different or is it like
- 40:42
completely off for everyone oh you mean well you're only going to have a reputation Weaver knows you've ever been connected with it so if you have 10,000 nodes in fact in subscribe to open maximum 50 connections I see so you're going to have a reputation with 50 nodes and not the 9950 others basically okay so to come back to our reputation itself wherever you do something beneficial
- 41:12
your reputation increases whenever you do something not malicious but not beneficial like not useful your reputation decreases the idea behind that is imagine your node you receive a message you're going to need some CPU and memories your time to process a message so every single message what you receive should decrease verification of a sender but if it turns out the message is useful when the reputation is increased by more than what got decreased actually but if you receive a
- 41:50
useless message you're not going to gain any reputation you have this therefore decrease because you need C and if you misbehave entirely just goes to zero or something like that yep in practice - - - minimum value of 32 sign integer but yes in principle same principle zero I see and why not just ban someone who sends you something that is not supposed so that's what we did so if your sends
- 42:22
something completely off if you send random garbage bytes we're going to ban you but in practice in grandpa well miss our grandpa's the finality algorithm we use in grandpa you have messages where we don't know if it's actually useful or not we go we don't know if it's useful yet we're going to know later or maybe you receive messages from two rounds ago or three rounds ago and the message would have been useful if it had been
- 42:56
received now if ever had been received earlier but no useful and because of that we have this reputation system it's the higher level code but the size of a reputation change are not just the lower level networking I see so basically even the like completely honest knows that follow the protocol exactly will sometimes produce useless messages and so they just be useful and in expectations something that like
- 43:28
amortized whatever yep I see got it it's not just managers version versus non malicious is it's also like well actually kind of yes but not strictly that like you can be non malicious and what what does what happens to you when your reputation goes into garbage like you're not getting banned you just know eventually so we want to rotate nodes I see and the nodes with less reputation gets kicked off I see
- 44:05
it's also used when later we want to connect to someone else like we have a free slot we have a slot to connect to we're going to choose the node with the highest reputation every node is trying to maximize the popularity in the network I see we have to find the right balance for that cause for example someone in the middle of Siberia has a lot of latency and we don't want their reputation to go to zero don't affect right but then then
- 44:39
then everyone else can pretend to be in Siberia right or like just malicious or the point is someone in Siberia has no choice but we have latency yeah we don't want them to be isolated because early Yesi they're gonna be kind of deprioritized but not isolated entirely that's the goal yes got it in practice we're not totally sure like we haven't analyzed the dynamics the analyze the
- 45:13
dynamics no no we haven't really like it's a very pragmatic approach for the moment okay the reputation values are kind of arbitrary this kind of message increases your reputation by four hundred for example why four hundred dollars the guy who wrote because that's a good idea yeah four hundred looks nice that's basically what we're doing right now but we want to tweak the values in the future basic okay cool I think we're sort of out of time right now so I
- 45:46
suggest we wrap it up and just like thank everyone for whoever was watching this and this is it right hey thanks