 So And that that's Let's do here. Okay, so a warning before starting to talk about the blockchain So as I said before I won't talk about the philosophy. I won't talk about ICOs You know expressions like to the moon or whatever I Yeah I won't even recommend you to invest in any cryptocurrencies or altcoin or whatever I'm not into speculation anyway. So it's not that interesting to me but as a developer I'm I like to understand the concepts and The technology technology is behind new trends so The thing is I want to know if a A blockchain can be useful To solve some problems that I might have for my projects. Is it something that is useful? What kind of problems does it solve? Why does it work? That's the kind of questions. I'm interested in so mostly from a technical standpoint And of course it looks like the blockchain is going to solve all the problems of the world, right? Almost all of them. There are so many new projects out there with a blockchain somewhere So it looks like we've just discovered a Magical technology Magic wand That would you know solve any problems out there and it's it, you know, it sounds like a deja vu a Few years back. It was all about no sequel databases, for instance, they would solve all the problems, right? How many of you are still using no sequel databases? MongoDB for instance Okay, so it does not solve all problems Obviously So having something that can solve anything it makes me skeptical I would say So I want to understand why the people are so excited about the blockchain And I want it to be able to realize for myself if it's something interesting or not If it would be a good fit or not and of course you should always use the right tool for what you are doing And before going further I'm going to tell you why what I'm thinking about blockchain and and my take on that The concepts as you will see are quite Easily understandable. They are quite simple and powerful really But there were the blockchain was created to Solve a very specific use case and if you do have that specific use case Then a blockchain is probably something you might want to use but the reality is that almost no projects need a blockchain and Boring and you know Proven technologies are almost always better than using a blockchain So if you are interesting in Finding ways to use a blockchain. I won't tell you anything about that because I have I have no ideas Why it would be useful the outside of the main use case Okay Now let's talk about Digital money because of course Blockchain is or a blockchain or block chains. I don't know how to say that Blockchain seems kind of weird. I would say It's all started in 1989 with Digicash. It was the very first digital money and it I Think it went bankrupt 10 years after that so in 1998 20 years ago It was kind of interesting as an experiment. Of course. Nobody was you know It was not useful because it was not really Accepted anywhere. I think one US Bank actually supported this Digital money, but that was all but it was interesting at least for something because the day the company disappeared The money was gone as well right, which is kind of Not that great So more recently Bitcoin and I suppose all of you are aware of what Bitcoin is Yeah, more or less that's a speculation tool basically, right that's a digital money coins and the The white paper was published 10 years ago in 2008 and basically The Bitcoin is not about something. I just really knew or Different from what we had before But it's it is really just about a few things put together and it makes the Bitcoin system really powerful So the first one is identity and we're going to talk about that decentralized network and Consensus and the last one is the most important one. I Highly recommend you to actually read the white paper. It's only eight page long. So it's really short It's really easy to understand what's going on in the paper and hopefully after the talk It's going to be even more easier to understand Okay, so the first step here is I want to create a digital money really quickly so that we can understand What we're talking about so I'm going to switch to Some code now So that's my take on digital money in PHP. So it's a it's quite short Basically, we're going to use HTTP and We are going to store the state of the balances in a file. So this file is going to Include all the balances of the users of the system So if if it doesn't if it does not exist yet, we create we initialize a database with one user me and Let's say that I have a million Thab coin right so the money is actually the Thab coin Okay, so now what what we can do Three different things the first one is we can get a balance for a user We can create new users and by default they have zero Thab coin Of course and then we can transfer money from Someone to someone else and we give the amount And of course if the amount is more than what you have you can transfer the money that makes sense, right? And then we do some math operations here and and and we save Into the balance so basically we have one central server my laptop here and You can Call some HTTP method to do things. So let's try that. So first let me Use the PHP built-in server Sure, is it there? Yeah, so first Let's have a look at the balance for me So I have No coins really. Oh, sorry. So for user Fabian. So I have a bunch of coins Let's create a user So we're gonna Summute a form Who wants some top coins? What's your name? John like this like this Okay, okay, how many coins do you have? No, zero Do you want some? Okay, fair enough. Let's do that Transfer some of my coins. So from me to you How many do you want to Okay, okay, here you go you have two coins we do have some money, right? Cool, can you see some problems anyone? No, he's sorry, okay, that's fair. No, he's sorry Yeah, exactly centralized server and that's a problem Why? Yeah, sure, and I can shut it down, right or the government can shut it down and trust Why trust you can trust me, right? Okay Yeah, yeah Exactly. Yeah, sure Okay, sorry. So there are a bunch of problems. I'm going to recap all the problems anyway because you almost Got all of them. So the first one is so I think the first problem is that there is no blockchains It's not interesting. No blockchains That's the very first problem the second one is of course Availability if I should done my server no coins anymore and we can't we cannot transact anymore So I cannot send coins and nobody can actually use the money anymore That's a problem That's Authentication of course because I can steal your coins really easily. There is no authentication We could add some kind of you know passwords or something like that that could work And security of course because if someone is able to hack my laptop or server or whatever Then you can steal some money. You can print new money If he wants to that's also a problem and trust You cannot trust me really I Would not trust me You know, it's so easy to actually abuse that power Really easily. So the first thing I want to talk about is how we can actually fix Fix availability. So we don't want a single point of failure. We don't want one central server We don't want a central bank actually so Decentralization is one way to do that and that's what was missing with Digi cash They had a central server and we will understand why in a bit Which means that when they shut down all the servers the money was gone so What we want is we want a web of Servers so many servers That are participating in a network and We want to do that in a resilient way We we want to be able to join or leave The network without any impact on The network so we need at least one server, of course if we shut down the last server It's gone. But if we have at least one server the Network can leave So to do that we need also a protocol so that the servers can actually talk to each others Right so that we can transfer the money we can create users and we have a shared state between all the servers We can't use a client server protocol of course because it means a server a central server So what we want is for instance a gossip protocol So a gossip protocol is when everybody can talk to each other basically Which means that nobody's actually controlling the network Everybody talks to each other and that's how we can decide the state of the system and Instead of having one computer or one cluster of servers having the state Everybody has all the information about the system. That's how it works So to get started you don't have you know one Address You need to know at least one node on this on the network to be able to connect and then We propagate the information so I'm going to connect to John and John knows about Larry and Larry is going to give me his Address and we are going to communicate like that Right so we can discover the topology of the network quite easily like that Okay So to understand the gossip protocol We're going to forget about the money for for a minute and I'm going to take another example Let's say that we want to share our best session at Drupal com right Mine is about I don't know a session about twig and John as You like the session about symphony, right? Yes, of course But you can change your mind. So let's say that You know quite randomly at some point you need you decide that you don't like The symphony session that much and and the session about Drupal 10 was much more interesting So and we want to propagate that information on the network, okay Okay, so the thing is every few seconds I'm going to send to talk to all the nodes I know I'm aware of sending my state and In return you're going to first update your state and send me back your state And that's how I'm going to be aware of what's going on in the network And as you can imagine it can take time to actually propagate the information, right? Before I know about the best session from some guys over there It's going to take time to propagate in the room so that I get the information So I can also update my own state. So let's see how we can do that in PHP gossip protocol Okay, so we have a state that's where I'm going to store all the information about the sessions that we like So the first thing is when we create the server I Need to know my port. That's the address where you can join me Contact me actually and then I need also a peer port and that's one node in system So that we can connect to each other. So the very first one We don't have the pure port of course because we need to bootstrap the network and Then we have a loop here and We are continuously Checking all the ports that we are aware of so at first that's only one port and We are contacting the node sending our state So the state is a simple array With the username the session and the version. Why do we need a version here? Let's say that John said that his best session was about symphony But then two seconds later he decided that it's not symphony anymore. It's twig But he can't say twig to me He said symphony to Larry and then Larry said oh John said that symphony is the best session and now I have two pieces of information the first one is you like twig it was true ten minutes ago It's not anymore and Larry told me that now it's symphony So I need to decide the order of the messages, right? So if you had a version then if twig is version one and symphony is version two I know that I can discuss twig version one and The current best session for you is symphony. So that's why we need a version here So we are sending all the information about all the nodes. We are aware of to all the nodes. We talked to via HTTP in return The pier sent the state that he has locally and we update our state based on that information So how do we do that? So update is about Getting all the states so for each port the data that they have it that's my port You won't be able to update my data. So just ignore that and then so here This is just to check that the data is valid actually and then if I Know nothing about you Then I'm going to trust the data that you are sending to me And if I already have something I I'm only updating data if the version is more than what I already have in my state right Okay, and after doing that with all the nodes Randomly or not really randomly. Well, at least yeah randomly. I'm going to update the best session That's all there is to it really Let's see how that works So here I have different sessions I'm going to make it a bit bigger Okay, so oh I also have a script here. It takes a user and Based on the user environment variable we create a small PHP built-in server and We try to find an available port So that people can connect to us Okay, so here I'm saying The user is Fabian and I'm running the gossip protocol like this Really? Okay So as you can see now I'm only aware of my own best session and you can see that from from Randomly, I'm updating the session. I like the most To join the network, I need to create another user Ellen for instance, and I give it a peer. There is only one Fabian and I'm going to run the gossip protocol as well and you can see that Data they are starting to talk to each other right so and you can see that they at some point They reach a consensus and they have the exact same information, but that's not always the case Because it takes time for the information to propagate over the network and we can create another one Thomas is going to connect to Ellen. So he this node Knows nothing about the first node But just because we are propagating the information at some point is going to be aware of all the nodes And as you can see everybody is talking to each other now Updating the best session of the time. So that's the gossip protocol Which means that I can kill any node It does not matter Still works. I can join again And I'm going to catch up really quickly right Okay, so that's the gossip protocol. Okay, so We have achieved Something very important Which is fault turns I Can you know a server can go down? It doesn't matter anyone can join and leave and join again. That's not a problem But there is a problem here someone can lie Okay, if you tell me that Larry best session is twig and you put a version number that is really high I'm going to trust you But actually Larry doesn't like twig that much So how can we fix that the problem here is that we don't have the notion of an identity? Right, so we need to fix that and the problem with a gossip protocol and the fact that the State is shared amongst us. We cannot have passwords. I cannot send you the password My password that would not make sense. So we need something else and something else is cryptographic identities or a public key and a private key Basically, the public key is the equivalent of a username So you can give it to all the peers all the nodes in the network That doesn't matter and the private key is the equivalent of the password So that's a secret. You never you should never ever share The password the private key But the big difference between a username and password and public key and a private key is that the public key and The private key are actually connected. They are related Right, there is a link between the public key and the private key You can't change the private key without changing the public key, right? so your identity on the network is Made of your public key and the private key you keep the private key private or secret and you can give The public key to anyone and the great thing about the public key is that it says nothing about you, right? There is no tag attached to that. So it's not Larry. It's not John. It's not Nicholas. No, Thomas It's just a random series of bits really So the thing is with the private key What you can do is you can sign Messages you can encrypt messages and that's the key here when someone sends an information a message is sign He signs the message with his private key and Me and he can also touch his public key and then with the public key I can check that the message actually comes from the person who actually owns The public key which means that now the messages cannot be forged anymore Right because if you don't have my private key, you can't fake a message with my public key Even if you do have the public key, right? So let's see how that works. I think it's going to be much clearer with an example Okay, so I'm going to use PHP again using open SSL for doing the work. So the first Function I have here is a generate key pair method and Basically, we are using open SSL To create that and we return the private key and the public key Let's write that and Then I have two three more methods. The first one is Encrypting a message. So we give it a message which is basically a string. We give it a private key We are using open SSL to encrypt the message We get back the encrypted message and we are using base 64 encode because you know when you Encrypt something you get back a random Random beats. So if we want to print that we need to convert that to something that is more readable and base 64 encode does the work if we have the public key and an encrypted message we can decrypt the message and Validating the message is as simple as you have the message in clear And we don't care about the fact that the message is in clear here We have the encrypted message and if we decrypt the message and it's the same as the original message We know that this is valid, right? So here in the example, let's do it Like this first. So I'm going to create a key pair of public and private key keys I have a message hello Drupal and I'm going to encrypt the message with the private key Okay so here what you can see is The encrypted version of the hello Drupal message If I know your public key I can decrypt the message back and you can see that it's hello world But more interesting is that you can also check if it is valid Valid means that I know that the message was actually encrypted with the private key related to the public key Right, and that's what I'm interested in here. Okay, so Next step so we So that's the way we can be sure that you can't lie about your best or favorite session But the problem now is that I can send I'm going to use Bob and Alice. That's going to be better I'm going to send Bob a Message encrypted message that twig is my favorite session. So you can check that I've actually Send a message and I'm going to send to send another information like symphony to Alice So Bob and Alice they can check that I am the one who actually sent the message But the messages are different For sessions at Drupal con that's not really a problem But if we are using money now, that's a problem Let's say I have a coin and the coin is actually a message and I sent a coin to Bob and I want to send to send the same coin to Alice as well Both of them they will be able to check that I am the owner of the coin I have signed a message But I have actually spent the same coin twice That's a problem, right? So we need to be able to solve that problem And that's the hardest problem to solve for cryptocurrencies and that's where Bitcoin actually solved the problem quite elegantly Okay, so and so the thing is and of course I've sent the coins the coin twice And I got back something in return right a book or whatever a car whatever But the thing is now Alice wants to spend the coin again to buy something else and At this point she's going to realize that the coin actually belongs to Bob Right and there is nothing she can do So the thing is if at some point Bob and Alice if they were able to talk together They would have realized that the coin was actually sent twice Right, and that's only possible if they had waited a lot of time Just waiting is enough remember with the gossip protocol and network It takes time for the information to actually go from one node to all the network, right? So if they can wait Enough they would have both the information that the coin had be spent twice, right? So in a peer-to-peer network, can we can we solve what we call the double spend issue? The first one the first possibility is Coordination exactly what I've just talked about Coordination is we wait enough so that we have all the same state and when we have all the same state We can know that there is a problem in the network and then we can resolve other problems So basically we want to know if I sent the coin to Alice first or to Bob first If it is Alice then the Bob transaction can be discarded and the other Okay, so coordination, how can we do that? The solution of Bitcoin is what we call proof of work So we need to wait for the information to propagate or put us away. We need to slow things down We don't want to have things going too fast. So instead of Being able to say okay. I've sent you the coin Transaction down we need to wait. We need to slow things down So to do that we're going to use what we call proof of work And the idea is that when you send a message You need to actually do some computational work. You need to do some work with your CPU your CPU And a CPU can resolve math problems. So we give you a math problem to resolve But before to talk about that I'm going to show you something It's going to be much easier to understand after after that Let's say that I have my message again hello world hello Drupal and We are going to use a hash function a hash function is something that takes an input gives you an output For the same input you are always going to have the same output and The great thing about hash functions is that if you change slightly the input the output is totally different and you can't go back If you have the output you can't go back to the input Right. So let's see how that works. So in PHP you can use the hash function and I'm going to create the hash for The message Okay, that's a hash right random bits really If I slightly change the Message here You can see that all the bits are different And there is no way I can go back to the string First because we can't encode all the information even if the string is really really really long The hash is always the same size right So you can't it's not encryption. It's really just a hash And whenever I'm going You give me the same input you're going to have the same output as you can see Computing a hash is really fast. So that's not enough So the problem to solve here is Can you find something To add at the end here So that the hash starts with a certain number of zeros So let's say that I want one zero at first. So I can try it with I don't know a Does that work? That doesn't work b. Does that work? That doesn't work c Okay, I can do that all day long right, so it's it's something that is Intensive cpu intensive because you need to try a lot of different Possibilities to actually find a solution. So that that's the puzzle That is behind the bitcoin mining process process actually so Here we want to find a nonce. A nonce is really just a random string for a message So the nonce here is an integer We are iterating and adding one For each Loop until we find a valley nonce and a valley nonce is just a hash starting with One zero for instance. They try that So Okay, and I need to print the hash to be sure that it worked Okay, so we needed 25 iterations to get one zero at the beginning of the hash Now if I'm adding more zeros, it's exponential. So if I say I want four zeros It's going to take much more time, right? And if I want five of them And if I want six of them It's not going to work. It's going to take a lot of time, right? That's the complexity of the puzzle and in the bitcoin protocol Uh, the complexity is automatically adjusted depending on the number of nodes in the network All right, we're going to talk about that a bit later. So that's the proof of work Very simple one You give me a message I want to slow things down So you need to prove that you spend some cpu time to actually compute the hash Because you know you have You need to have x zeros at the beginning of the hash string Okay, so that's What is called mining in the bitcoin protocol? Just because you know you are doing some work to get some gold or bitcoins But that that's not that's not enough I can still send the same message even if I spend a lot of time doing The mining I can still send bob and ellis the exact same message and I can also sign the message So what is missing here is the order of the transactions I want to know that I did ellis before bob And I want to be sure that when I know that ellis was first and bob after I don't want someone to be able to say no, no, no It's bob first and then ellis So I don't want someone to be able to change the order after the fact So to do that we need a blockchain at last That's the problem we want to solve with a blockchain so a blockchain so a block is The message You want to send to someone to the network Plus The hash We've just talked about the hash so the hash is actually Computed with The proof of work algorithm so it takes time to compute and then we also have The previous hash of the previous block Right, so when I'm computing the hash for block number two, I'm going to find a hash That is made of The message plus the previous hash Right Which means that After I have added block two I know for sure that block one is before block two because I have this relationship between block one and two Yeah Is it clear enough So we cannot shuffle the blocks anymore If we shuffle the blocks, it's not valid anymore The hash is not going to be valid anymore because the previous one is not going to be the right one And basically that's a blockchain a blockchain is A linked list with ashes Nothing more It does nothing it solves no problems whatsoever And no a blockchain is not a database It's not a distributed database because remember all the nodes on the network They have the state the entire state the history Right So that's very different from a database actually Sorry Okay But still it's not enough the blockchain like I've just talked about it's not enough to have all the things that We wanted for our our fapcoin cryptocurrencies Because what I can do is Oh first perhaps we can have a look at how to implement blockchain Let's see how we can do that Okay, so I have my proof of work class. This is exactly the same as before I have a block a block is a message and a previous block, right In the block I'm going to keep the previous hash of the previous block the message and I'm going to mine A block that's where I'm going to spend some CPU time And here I want to find a nonce for the message plus the previous hash Uh of the previous block which means that if I want to replace the block I need to redo the work um Of all the blocks uh after the block I want to mine And then I'm going to store the nonce. I'm going to store the hash Something very important. I need to have a is valid Method so that I can I can check that the block is valid and the block is valid if the nonce Actually has enough zero for the message Uh that I want to encode Okay Now the blockchain is an array in php of blocks Pretty simple when we create a new blockchain We initialize it with one message and no previous block And then we when we want to add a message to the blockchain We create a new block with a message and a previous block That's where the mining is actually happening And again, I want to validate uh my blockchain. So at some point With the gossip protocol, we are going to send Our blockchain all over the place. So when I receive a blockchain from a node, I want to be sure that the blockchain is actually valid How and and doing that is really easy. I'm iterating over all the blocks I'm checking if the block is actually valid if that's not the case. The blockchain is not valid And then I want to check that the previous hash The the hash of the previous block is actually the same as the previous hash of the current block If that's the case, then the blockchain is valid Right. So here I've created a small blockchain with the genesis block Then I'm adding two more blocks And I'm printing the blockchain and trying to see if the blockchain is valid. So if we run that Mm-hmm You can see that I have the first block no previous hash You have the nonce. You have the message the ash with four zeros here Then we have a second block. You can see that previous ash is actually the ash of the previous block And then we compute the ash with a nonce and so on Right. So that's a blockchain Now if I want to shuffle the block so here I'm trying to move the first and the second block It's false the blockchain is not valid anymore because you know, the previous ash is not the right one. So Now we have a blockchain where when we want to add a transaction I have sent a coin to bob. I need to add that information into the blockchain I'm going to do some work and then when I'm doing the same with Alice I need to compute the same thing again But if you think about it you can probably fork The blockchain right for block number two I can compute two different nodes very easily and send the nodes in a network. So we still Have a problem with the double spent issue. We can still double spend the coin. So we are not there yet So we need something more to make it work the way we need And The way we can do that is and now you're going to understand why we need to spend cpu time to actually mine blocks The way it works is that if there isn't Someone wants to hack the blockchain So it's going to fork the blockchain and adding some false information, right? But the network we are transacting all the time. So we are adding blocks all the time Mining new blocks all the time. So if someone Wants to fork at some point. We need to decide which which chain is actually the right one And the rule is very simple always take the longest chain And that makes sense The longest chain is the chain where the most work happened Which means that if Someone wants to fork the blockchain. He needs to have more cpu power than everybody else So he needs to control more than 50 percent of The computation computational power of the network Which should not be possible or at least it was What you know we thought about but right now That's not the case anymore Because you can't mine bitcoin anymore on your laptop You need specific hardware Which means that only a few I think it's something like 15 different Chinese companies they own more than 80 percent of the power in the network And if they can get together And having enough power more than 50 percent of the power then they can change the blockchain the way they want Just because of the longest chain rule And that's why in the bitcoin world You need to wait And the recommendation is to wait for at least six blocks Six new blocks after the block where your transaction is in To be sure that the transaction is final Because we think that after six blocks The cpu time needed to actually fork The the blockchain or change a node and then Recompute all the blocks after that is almost impossible But that's just you know Um, it's not a hard guarantee. It's just um A probabilistic guarantee Right Okay, I think we have all we need to actually create our cryptocurrency in php now um That's the final piece of code The block is almost the same as before The main difference now is that we don't have message. We have a transaction and a transaction is From So who is going to send the money? That's the public key of the sender Then we have the public key of the receiver The amount of money and the private key of the sender And as you can see we do not store The private key the private key is only used to when we create a transaction to actually create a signature and the signature is the encryption of the message and the message is the concatenation of from to an amount And we are storing also the information about who is sending money to Okay, and then We want to be able to check if a transaction is valid It is valid if there is no from that's the first Transaction when we create the money and then it's valid if the signature is actually valid Right, that's where we are checking with the signature that everything is fine So we have the public key. We have the signature, which is the encryption of the message and the origin message Okay, so going back to the block So a block is a transaction and a previous block like before and create genesis is where um You create the very first block and the first transaction is from nobody to the creator of The blockchain with a given amount of money and we have the private key And the mining algorithm is exactly the same as before and as is valid method is We need that the transaction is valid first, but we also need that The proof of work is actually doing the right thing. So the nonce is actually a direct one with the number of zeros Then we have the blockchain the blockchain is again just a list of blocks. Everything is the same We are adding a transaction instead of of a message And then and that's the most important thing here We need to be sure that the blockchain is valid. So for each block we check that the block is valid and that the previous block hash Is actually the previous hash of the current block And we also need to check that the spends are valid. We don't want someone to go under zero, of course to do that and Remember, we are only storing transactions. We do not have balances anywhere. So we need to compute that We are computing the balances here And when we check if everything is okay, if there is one amount that is less than zero then The blockchain is not valid And when I'm going to send you a blockchain like that, you're going to refuse that because it's not valid And there is no way you can forge that because of the encryption and the keys And now we need to communicate together. So there is again the same gossip protocol And basically we are going still to communicate with the peers We are sending to the peer our state. So the state is really Okay, so the state is really just the blockchain and the peers we are Working with that's all So we are going to Gossip with Our peers They are going to send their state and we are going to update Our state based on their state and that's the most interesting part here. How we do that. How can we do that? So first If we do have a blockchain We are going to update our blockchain If we do not have a blockchain then we are going to accept the blockchain from the peer That's when we actually create the node for the first time and the blockchain the update method here The first one is The longest rule here. So if the peer blockchain is As less nodes than ours, we just got it Right, we only consider longer chains Then we validate the blockchain if it's not valid We just don't do anything and then really simply If this it is longer and valid then we accept it Right And just because of everything we've just talked about we can be sure that all the information in the blockchain is actually valid Okay, let's do some demonstration here No, not the right one FAP coin. Okay, so I have a user. That's me again And here I have a script which is exactly the script is exactly the same as before We have a user and we have a peer to connect to and we have a php Web server here and then this is The service doing the gossip protocol Okay, so I've just started the network. So I have a million FAP coins here and you can see the blockchain at the bottom of the screen Let's make it a bit bigger Okay, so I just have one transaction And you can see here that I have four zeros for the ash Let's create another node I connected to the first one They start gossiping together as you can see and let's start as a one Okay, so we have three different nodes in the network and then I want to transfer some money from Fabian to Ellen for instance And you can see that it propagates on the network And you can check that the blockchain is actually valid You can see all the transactions and we compute the balances At the top of the stream now if I try to send a lot of money to my wife money, I don't have That won't work Because the blockchain is not valid So nobody is going to accept my blockchain Even if it is longer, it's not valid. So we don't care And if there is a double spend at some point if there is a fork and it happens all the time on the Bitcoin blockchain At some point eventually One is going to be longer than the other one So we are going to reach a consensus just by waiting and that's why Time is very important in the bitcoin protocol That's why The claim that you know sending bitcoins is much faster than sending Transferring money from a bank That doesn't work because In the protocol there is this notion that we need to slow things down to reach a consensus. That's something very important And of course I can you know Go down and and and I can join again and it's going to do the right thing Um Okay, so It it was a very quick introduction to Cryptocurrencies and the blockchain We have not talked about everything here just about the core concepts, but hopefully you better understand how that works And how it works behind the scenes The really in bitcoin is a bit different for instance in a block you have more than one transaction, of course We haven't talked about fees Or rewards because of course a miner is doing some work because he has a reward if not That's not that interesting. We have not talked about things like replay protection for instance merker trees Like clients because of course on my phone, I don't have to have all the information Of the blockchain. So there's there is more than that But hopefully you have a better understanding now and you can read the white paper It's it's quite quite interesting In the template for Drupalcon, there is a slide where you need to put a quote. So that's a quote from me Whatever And um And of course if you are into cryptocurrencies and if you want to create a crypto cryptocurrencies, then a blockchain Makes sense. Oh, I haven't talked also about a theorem So the possibility to have a virtual machine embedded into the blockchain, which is yet something else Um, but yeah, that's another story. I think I'm running out of time here. So thank you very much I think if you have any questions you can Come after the talk talk to me But basically a new user is So if there if you don't have any transactions It's not stopped anyway. Just because you have another You can get all this information from the blockchain and the first time you're ready for a transaction, then you're probably using So there is no