Yes, so Merkle trees. What is a Merkle tree? People talk about all the time, Merkle trees are a pillar of a blockchain, can you tell us what you know about Merkle trees? So a Merkle tree in the context of a blockchain is a single hash of all of the transactions hashed together. So if we take all of the transactions, let's say we have 50 transactions, actually let's make it easy for ourselves. We have two transactions in a block, to make a Merkle tree out of this, we go hash each transaction, so now we have these two hashes. Now, we combine these two hashes and we hash the combination of these two hashes, and the combination of these two hashes is the Merkle root essentially. So that let's us verify that if we download the block, and we look at the Merkle root of the block, we look at the transactions, we hash the transactions together, and then we check to see if the Merkle root matches. So that way we can check if all of the transactions that we have are the exact same as those in the block. Cool, anything to add? No, I think there's one question like why this was needed, is for example, you want to add? Yes. So if you want to run a light client, that would mean that you're going to download all the blocks. If you're going to be a node, you have to have all the blocks to be considered a node. A full node? No, you have to have all the blocks to be a node, but you can download only certain data about those blocks. So if you want to be let's say, a pruned node or a lighter node, what you could do is you could tell all the peers you're talking to and say, "Give me all the blocks but don't give me the data inside of the blocks." So you just go take all of these blocks and put them all in order, and then if you want to verify the authenticity of a block because you don't have all the transactions stored, you would go request, "Hey, give me all the transactions from this block." Now, you go take them, turn it into a Merkle tree, take that Merkle root compare it to the block's Merkle root, see if it adds up. If it does, you keep on going and downloading other blocks, but then you don't have to go download that additional part of the block. So a large part of the value of a Merkle tree and Merkle roots is that you can compress a lot of transactions and still verify that they came from the same original arrangement? Exactly. Yeah, pretty much it's addressing that question of synchronizing the state which means when you receive a transaction from someone and you have to tell your opinion, is the transaction valued or not? You have to check the history in the past and verify that this transaction may be like moving money from this account to this account, is the first account having enough money? You have to go back in history and do all that. So what you do is verify the last state which was the last block working to the history. In order to have that thing, you also have to synchronize everything behind it that came in history, so it's a lot of data to synchronize. What you can do is just verify this hash because the blockchain implementation took the concept and added it to verify all the corner cases and so on. But a marginal list of objects and you can have the object list itself and how you'd build a Merkle tree thing, it's a image in a tree. So you can have the data, where you have the every single node you have the hash. Hash of this with hash this becomes the next top root node, which is the hash of both. So if you know the hash of the parent, for sure you know the hash of the previous ones, and then the parent with another parent both they're hashed in getting put another, so that's how you build a three-year pyramid. So what it comes down to is, whoever is the last node on the top of the pyramid is the hash of everything else, if you try to mess up with the data and change something somewhere at the bottom, when you rehash everything, the root hash would be different hash, so that's how you detect that your data is actually incorrect or corrupted. That's where the Merkle tree basically in a very concise manner will tell you if you have the truth of the network or not. So it's a tree adjusted to tree of hashes, of hashes, of hashes, and when someone asks you, "Do you know what's going on with the network?" You check, "Yeah, I have the hash." "Is everyone else telling the same hash? Okay, you are good." If everyone else is telling different hash, you have incorrect data. When someone try to attack you or someone try to send a false transaction, or they're claiming money they don't have, this is what it translates to physical world when the hashes are incorrect. So basically this is optimization to not store a lot of data and not do a lot of CPU intensive operations to recalculate every single time, because once you get a transaction, you are suppose to recalculate all the history to understand if you have it or not. So this is done once and then you reference that in point in time. So once that's accumulating at some point in time, that gets moved out the way, you get a new hash and use that in time and so on. So it's a kind of always moving thing, but you need it in order to check with the network if you have the same hash like everyone else. This is when you know that, yes you are synchronized, you have all the knowledge needed to participate in the network. So it's all about verifying and the efficiency of network? Yes, it's optimization. Without that optimization then everyone's computer, everyone's node will be processing all these things? Yeah. Yeah. Cool.