下面的内容主要是学习了以太坊爱好者中的区块链背景知识部分。里面的文章干货满满。
拜占庭将军问题
在存在消息丢失的不可靠信道上试图通过消息传递的方式达到一致性是不可能的,所以拜占庭将军问题也是一个共识问题,用来为描述分布式系统一致性问题。
如何达成共识?
解决分布式系统一致性问题主要是Lamport提出的Paxos算法或其衍生算法。Paxos类算法仅适用于中心化的分布式系统,这样的系统的没有不诚实的节点。
在区块链中解决共识问题通过”工作量证明“机制,通过工作量证明就增加了发送信息的成本,降低节点发送消息速率,这样就以保证在一个时间只有一个节点(或是很少)在进行广播,同时在广播时会附上自己的签名。
学习区块链,首先了解区块链是如何解决拜占庭将军问题的,很有引导作用。
加密经济学
密码学和经济学的结合,区块链运用密码学主要体现在如下四个方面:
- 哈希
- 签名
- 工作量证明
- 零知识证明
区块链运用经济学主要体现在如下:
- 激励机制
- 博弈论的运用
密码学运用
- 哈希
哈希也就是散列,他有如下几个特点
- [x] 确定性:无论在同一个哈希函数中解析多少次,输入同一个A总是能得到相同的输出h(A)。
- [x] 高效运算:计算哈希值的过程是高效的。
- [x] 抗原像攻击(隐匿性):对一个给定的输出结果h(A),想要逆推出输入A,在计算上是不可行的。
- [x] 抗碰撞性(抗弱碰撞性):对任何给定的A和B,找到满足B≠A且h(A)=h(B)的B,在计算上是不可行的。
- [x] 细微变化影响:任何输入端的细微变化都会对哈希函数的输出结果产生剧烈影响。
- [x] 谜题友好性:对任意给定的Hash码Y和输入值x而言,找到一个满足h(k|x)=Y的k值在计算上是不可行的。
运用:
区块链的基本数据结构是链表,在链表中每个新区块都包含一个哈希指针。指针指向前一区块及其含有的所有数据的哈希值。。借此特性,区块链拥有了不可更改性(immutability)的伟大特质。
- 签名
签名运用了非对称加密技术,采用私钥和公钥对信息进行加解密。
- 工作量证明
它是达成共识的一种手段。通过不断的计算一个值,并在找出满足条件的这个nonce值后,具有‘权威’,然后进行信息共享,最后达成共识。然而这个nonce值是一个随机数的hash值,由于hash的特点,寻找这个原本的随机数只能穷举,耗时耗力。设定nance值的条件越多,也就缩小了这个值的数量,寻找起来越困难。其中的计算寻找工作也就是挖矿的工作。
- 零知识证明
我所理解的零知识证明的运用也就是默克尔证明,如下:
全节点说:我知道所以交易的信息
轻节点说:你知道某某某笔交易存在吗
全节点说:这笔交易存在,它的hash路径是......
轻节点说:我根据你返回的路径计算了这个根节点的hsah值,和我本地一样,那应该没错了。
也就是说验证者知道某个信息的true和false而不需要知道信息的具体的细节,并且通过一个简单的校验证明证明者没有说谎,true和false可靠。
经济学运用
- 激励机制
区块链用到了以下两种激励组合:
第一种激励组合:
- 代币:加密货币作为奖励分配给那些活跃度高且为区块链做出贡献的参与者。
- 特权:参与者可以获得决策权,这将给予他们收取租金的权利。例如,挖出新区块的矿工们可以成为新区块的临时决策者,将短暂地成为新区块的独裁者,并有权决定将哪些交易添加至该区块。他们可以对收录在区块内的所有交易收取手续费。
第二种激励组合:
- 奖励:好的参与者可以获得货币奖励,或因尽职而得到决策权。
- 惩罚:坏的参与者必须支付货币罚款,或因作恶而丧失权利。
加密货币和普通货币拥有价值的原因大体上是一样的,即基于信任。当人们信任某一种商品并赋予其价值,它就成为一种通货。这就是起初法币和黄金有价值的原因。因此,当某个给定的商品拥有一个给定的价值时,价值就会随着供求关系而发生改变。供求关系是经济学中最古老的规则。
- 博弈论
区块链中运用了博弈论,博弈论本质上是对战略决策的研究。其核心是做对自己最有利的决策,并记住对手的决策。博弈论中一个最基本的概念是:“纳什均衡”。
纳什均衡是一种状态。在此状态下,每个参与者的策略是对其他参与者策略的最优反应。没有一个参与者可以通过独自变换策略来增加收益。
区块链在一个自我强加性的纳什均衡里,所以不夸张的说,区块链是真实存在的,而矿工们也可以维持诚信。
通过密码学和经济学可以理解区块链为何可信,比特币这些虚拟货币为何有价值,其中博弈论运用于区块链上我觉得很有意思,就感觉一个没有思想的东西变得有思想了。
Merkle Patrica Tree
是一种经过改良的,融合了默克尔树和前缀树两种树结构有点的数据结构,在以太坊中用来组织管理账户数据,生成交易集合哈希的重要数据结构。
作用:
- 存储任意长度的key-value键值对数据;
- 提供了一种快速计算所维护数据集哈希标识的机制
- 提供了快速状态回滚的机制
- 提供了一种称为默克尔证明的证明方法,进行轻节点的扩展,实现简单支付验证。
前缀树
优点:查询拥有共同前缀的key的数据十分高效
缺点:
- IO开销(磁盘操作)比较大
- key值比较长,且没有相同前缀的分支时,存储该节点需要创建许多节点路径来存储该数据,造成空间浪费。
默克尔树
在比特币网络中,merkle树被用来归纳一个区块中的所有交易,同时生成整个交易集合的数字指纹。
特点:
- 它具有树结构的所有特点
- 默克尔树叶子节点的value是数据项的内容
- 非叶子节点的value根据其孩子节点的信息,然后按照hash算法计算而得来。
优点:
- 快速重哈希
- 轻节点扩展。
缺点:
- 存储空间开销大。
两种树的合并
尽管前缀树可以起到维护key-value数据的目的,但是其具有十分明显的局限性。无论是查询操作,还是对数据的增删改,不仅效率低下,且存储空间浪费严重。故,在以太坊中,为MPT树新增了几种不同类型的树节点,以尽量压缩整体的树高、降低操作的复杂度。
MPT树中,树节点可以分为以下四类:
- 空节点
- 分支节点
- 叶子节点
- 扩展节点
叶子节点和扩展节点数据结构相似,可以根据数据项的末尾是否具有ASCII值为16的字符作为终止标志符来区分。
image
为了避免树的高度过长,MPT采取了对key值进行hash,使得每个hash值为16位,稳定了树的高度。
什么是默克尔证明
默克尔证明指一个轻节点向一个全节点发起一次证明请求,询问全节点完整的默克尔树中,是否存在一个指定的节点;全节点向轻节点返回一个默克尔证明路径,由轻节点进行计算,验证存在性。
区块链的底层数据存储结构,原文逻辑清晰,拜读一定会有所收获。
一次学习,一次进步
彼小星
网友评论