1

区块链学习笔记1

 2 years ago
source link: https://www.hi-roy.com/posts/%E5%8C%BA%E5%9D%97%E9%93%BE%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B01/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

区块链学习笔记1

2018-05-14

区块链不等于XX币!

区块链不等于XX币!

区块链不等于XX币!

区块链本质是一种 去中心化的不可修改的分布式数据库核心要解决的是信任问题。 根据场景可以分为3类:

著名的BTC以及各种XX币大多都是基于公开链的第一代应用,而以太坊(Ethereum)则更进一步,可以说是第二代的区块链应用。基于以太坊,更是诞生了智能合约(Smart contracts)应用,大大简化了编写区块链应用的难度。

而联盟链,现在最火的就是Linux基金会旗下的超级账本(hyperledger)了,相对而言,我个人更看好这个。另外还有个叫做闪电网络的(个人觉得这货有点类似于资金池,略有违背去中心化的初衷),也值得关注。

一条消息,或者说一条记录,最重要的有2个性质:

学过网络课程的小伙伴都知道,信息在网络底层都是以字节流传递的,而网络并不是百分百可靠的。比如10010011在传递过程中就可能丢失一位变成了1001001,那么我们怎么验证消息在传递过程中没有由于某种原因被改变呢?

这里就用到一个叫做数字摘要(数字指纹)的技术了。通过某些Hash函数计算后,不论原文是什么样子都会得到一个统一长度的摘要值(指纹)。常见的算法有MD5、SHA256等。

比如roy使用SHA256计算后就变成了a59b1da0739609cfd823420304bebb268693eade4ff3e1269fce24548c301240,而只要有一点变化,比如rox的摘要就变成了69aa9465c104e9193951b14c4abd541990c3a0b17a2711d60a8f974be2a013f7。所以,在传递消息时候,只要把原文和指纹同时传递,接收方就可以根据公开的算法进行完整性验证了,只要有一点变化,指纹就会不同。

那么,这样就行了吗?答案是否定的。

对网络安全有了解的都知道一种攻击方式叫做中间人攻击。如果有坏人截获了原文和指纹,并且替换成伪造的,那么接收方不就被骗了吗?换言之,消息的真实性如何保证呢?

这里就引出了另一个技术:非对称加密

这里具体的数学细节不说了,简单来说,使用私钥加密后的密文可以使用公钥解密得到原文,但永远反推不回来私钥是什么。我们使用私钥将指纹加密,并公布公钥。这样,即便中间有人截获了消息,但是由于没有私钥,没法伪造加密后的指纹,接收者使用公钥解密后即可发现指纹不同。这样就解决了真实性问题。

数字摘要和非对称加密都不是什么新鲜的玩意,那么和区块链到底有什么联系呢?

上面说到区块链是分布式的,说道分布式那么一个避免不了的问题就是共识。

而共识问题有可以分2类:

  1. 拜占庭将军问题,主要指包含恶意响应的情况。
  2. 非拜占庭将军问题:主要指响应可信但有可能不响应的情况。

对于第二种情况,可以使用paxos或者raft算法,而第一种情况,目前则有POW,POS(比特币、以太坊用这两个),DPOS,PBFT(超级账本采用这个)。

比特币中是使用了POW(Proof of Work,工作证明)来解决共识问题,这里简单记录下。简单说,一个区块中包含下面4个内容:

  1. 前一个区块的指纹
  2. 一些固定信息
  3. 一个随机数

BTC规定,一个新的区块指纹前72位必须为0。而前3个内容都是固定的,想要  出正确的Hash值,只能通过不停的变换随机数来重新计算。这也就是所谓的"挖矿"。找到这个数的矿工则有了记账权,同时获得一定数量的比特币作为奖励。所以谁的算力强,就能更快的蒙出这个Hash值。虽然只是很小很小的概率,会出现2个矿工同时计算出Hash值的情况,这就是所谓的"分叉"。如果真的出现了分叉,那么正常情况下就会同时存在2个链,看哪个更快的计算出下一个区块的Hash形成更长的链,之后所有的矿工都会以这个最长的链为基础进行下一步操作。

至于原因,可以参考比特币白皮书

那么为什么又会有POS(Proof of Stack,权益证明)呢?根据POW,算力越强的人越有挖矿的动力,而如果全网51%的算力都掌握在一个人手中时,基本他就可以伪造任何交易了。而POS有点类似银行,引入了一个概念叫做“币龄”,币龄根据持币数量和时间来进行计算,币龄高的获得记账权。简单说,一个有100币的人和一个只有1个币的人,同样的持币时间下前一个人获得记账权的概率是后一个人的100倍。

POS解决了POW浪费大量资源的缺点,以及提高了51%攻击的代价。(想要进行51%攻击的话,就得拥有51%的货币。也就是说,这东西越值钱,攻击的成本就越高)

但是,POS也有一个缺点——富者越富,币龄低的很难获得记账权,于是便引出了另一个算法——DPOS。

DPOS(Delegated Proof of Stake,委托权益证明)在POS的基础上,让每一个节点参与投票,选出一个代表自己利益的人参与到获取记账权的争夺战中(议会制?),每一个参与者都能够选举任意数量的节点生成下一个区块,得票最多的前 M 个节点会被选择成为区块的候选创建者,下一个区块的创建者就会从这样一组当选者中随机选取,除此之外,M的数量也是由整个网络投票决定的,所以可以尽可能地保证网络的去中心化,而且最重要的还是随机选出的,也就是说数量M不确定,M中选取哪一个也不确定,再加上足够多的总量,可以确定几乎是不可操控的。

关于DPOS更详细的可以参考这里

至于paxos、raft、PBFT,不是一句话能描述清楚的,单独记录。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK