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