比特币的账户管理
开户的过程很简单,就是创立一个公钥和私钥的过程,公私钥的概念来源于非对称加密;
(public key,private key)在比特币中就代表一个账户;
Merkle Tree
与普通二叉树的区别就是用哈希指针代替了普通指针,通常也被称为Hash Tree。顾名思义,就是存储hash值 的一棵树。Merkle树的叶子是数据块的hash值,非叶子节点是其对应叶子节点串联字符串的hash值。 只要我们记住根hash,就能检测出树中任何部位的修改。跟区块链的原理一样,只要记住区块链后面的hash,就能检测出前面区块数据有没有被修改过。Merkle树的效率更高些。
各个区块之间通过哈希指针连接在一起,每个区块所包含的交易是组织成Merkle Tree的形式。其中叶子节点其实表示每一个交易(transaction)
每个区块包括两个部分,分为区块头和区块体;区块头中包含Merkle tree的根哈希,不包含交易的具体内容。Block body中有包含交易列表。
Merkle Tree的作用
-
Merkle proof 比特币中的节点分为两类,一类是全节点,一类是轻节点;全节点保存整个区块的内容,轻节点只保存block header;从叶子节点到根节点的路径就是merkle proof 假设轻节点想知道黄色的那笔交易是不是被包含在了这个Merkle Tree里;因为轻节点没有保存交易列表,没有这颗Merkle Tree的具体内容,只有一个根哈希值;轻节点向某个全节点发出请求,请求能够证明这个黄色交易在这个Merkle Tree里面的Merkle proof;全节点收到这个请求后,只要把图中标为红色的三个哈希值发给轻节点就行了。有了这些哈希值之后,轻节点在本地可以计算出途中标为绿色的三个哈希值; 首先算出这个黄色交易的哈希值: ? 依次类推,轻节点把这个根哈希值算出来,与block header里面的哈希值比较,就能知道这个黄色 交易是不是在Merkle tree中
|