1 是否还有别的数据组织方式?
与MT(Merkle Tree)类似的数据组织方式是Hash List,数据组织方式如下图所示
如果一个Data block出错,那么最终得到的Top Hash就会与之前的不一样,这可以防止数据篡改。 但是如果将比特币系统中的交易信息看做这里的Data block。轻节点不可以证明(或者说证明的代价太大)这个交易是否在这个区块中,因为如果要证明的话,与MT不同的是,轻节点需要向全节点请求几乎全部数据去证明该交易在一个区块里。 Hash List也可以被认为是一种特殊的MT。
Merkle Patricia Tree(又称为Merkle Patricia Trie)是一种经过改良的、融合了默克尔树和前缀树两种树结构优点的数据结构,是以太坊中用来组织管理账户数据、生成交易集合哈希的重要数据结构。
主要功能
- 存储任意长度的key-value键值对数据
- 快速计算所维护数据集哈希标识
- 快速状态回滚
- 默克尔证明的证明方法,进行轻节点的扩展,实现简单支付验证 树结构的增删改查操作通常都是递归
关于前缀树以及MPT相关知识 yangchenglong11.github.io/2018/03/16/… 这篇博文写的非常详细
2 如何维护Merkle Tree的增删? 假设一个原始的MT是如下图所示的:
增加操作: 插入数据块0后(考虑数据块的位置),Merkle Tree的结构是这样的:
这是数据的简单插入,增加了树的高度。其他的都没有变化。
这是数据的理想插入,保持了树的高度,但是许多节点的hash需要重新计算。
删除操作: 例如要删除第一个数据,操作如下:
3 如何加解密实现私密性?
在交易发起的时候,接受方可以生产一对秘钥,公钥作为比特币钱包地址,私钥用于对交易进行签名确认。因为私钥只有自己才会知道,而且公钥任何人都知道,一般情况下,这个交易的私密性就得到了保证。 而且在交易的过程中,只有在花钱的时候,才需要提供公钥,在收钱的时候只需要提供公钥的hash。这样可以进一步保证公钥的安全性。
4 交易过程涉及哪些实体?需要哪些密码运算? 在比特币交易过程中,A转账给B,A需要对这一笔交易签名,B只需要提供B的比特币钱包地址的公钥的哈希。A要提供其钱包的公钥。生成这一笔交易之后。这个交易会打包发送到网上,由矿工进行打包,矿工将这些交易组装成一个区块,然后开始进行挖矿操作,即计算一个nonce使得block header的hash小于target值。如果该矿工第一个计算出来,那么该矿工获得记账权,可以获得铸币交易里的区块。
5 如何获得访问数据的权限? 区块链的全部数据都是由全节点维护,这个账本是公开的,任何人都可以访问其中的内容。