首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从架构师角度看区块链-共识算法、挖矿和比特币

接前文,继续介绍区块链的算法、挖矿和比特币

一、几种共识算法

1、Raft

选举一个Leader和其它Follow,超过n/2+1,即成为Leader。当接收到客户端的日志后,由Leader通过HeartBeat将该Entry同步给其它Follow,Follower接收到日志后记录日志,然后将Leader发送ACK。当接收到n/2+1个ACK之后,则将通知所有Follower将该日志存储在自己的本地磁盘中。

2、Pow:Proof of work

比特币采用POW机制,节点消耗自身算力尝试不同的随机数,进行指定Hash计算,并不断重复该过程直到找到合理的随机数。找到后,生成区块信息,对外广播新生成的区块,其它节点验证通过后,链接至区块链中,其它所有节点切换到新区块后面继续工作量证明。验证节点称为矿工,随机数的计算查找称为挖矿。

联合起来挖矿的地方称为“矿池”

3、Pow+Pos

采用工作量证明机制Pow发行新币,采用权益证明机制Pos维护网络安全。

在这个体系里,区块持有人可以消耗他的币龄获得利息,同时获得为网络产生一个区块和用Pos造币的优先权。

如果发现了一个新的Pos区块,则币龄就会被清空为0,每被清空365币龄,就会从区块中获得0.05个币的利息,即年利率5%。比如未来币。

4、DPos:Delegated Proof of Stake

相当于美国的议会制,每个持币点可以指定一个投票权的代表,获票数最多的前100位代表按既定时间轮流产生区块。每名代表分配到一个时间段来生产区块。

二、如何代表挖矿成功

获取时间戳(now()),根据时间戳生成区块头(new (Byte[32],time,nonce)),对这个区块头中的随机数进行2次SHA256哈希,得到256bit的随机数,如果高位的48bit是0x00000000FFFF,则挖矿成功。主要的方法是穷举。

如果别人的计算能力强,在你挖到矿之前,生成了新的有效区块,并且广播到了区块链网络,你本地的不是最新的区块链,则前功尽弃,必须先同步最新数据,重新开始挖。

所以,必须 设备的CPU、内存能力强、集群庞大,以增强计算能力。

三、区块链包含了哪些技术

1、P2P

2、加密算法和签名,非对称加密-区块链使用的是ECDSA,specp256k1,相当于DSA和非对称加密ECC的结合。哈希-区块链使用SHA256,

3、梅克尔树,Merkle,相当于对区块中所有交易记录进行一个快照,区块中交易记录的任意改动都可以通过Merkle根哈希而察觉,主要用于简单支付验证,

4、工作量证明机制-共识算法(Pow),用于确认你是否做过一定量工作的证明。

四、奖励机制

1、生成一个新的区块后,可以在这个区块中加入一笔特别的交易,这笔交易就是一个造币的交易,可以把这个视为对节点在共识链上进行创建区块服务的报酬。

2、交易费:交易的制造者都可以选择让交易输出值比输入值小。第一个创建区块把交易放进区块链的人可以取得这个差价,作为交易费。如果一个节点创建了包含200笔交易的区块,那么这200笔交易的交易费会被付到你放在区块内的那个地址。

五、区块生成速率如何控制

之前说,全球平均每10分钟生成一个新的区块,那么在计算能力和节点越来越多、越来越强的情况下,区块链如何调节,以保证匀速生成区块。

区块是怎么生成的:对最新的区块头进行两次SHA256计算,得到的256bit哈希结果,高位48bit如果是0x00000000FFFF,才算新区块有效。如果有调节速度,只需要调速位数即可,如需要加速时,高位48bit可以减少为47bit。如果需要减速时,高位48bit可以增加为49bit。

六、区块链分叉

所谓分叉,就是两个节点同时挖到新区块,出现数据不一致的情况。

比如离中国较近的点,可能先同步到“中国链”,并在此链的基础上继续推迟,链条会持续增长。离美国较近的点也是如此。

节点如何收到两个冲突的区块链同步,会判断此时哪条链的长度更长,会以长度更长的区块链为准。一般认为一个区块后面再链了6个区块后,就不能颠覆了,称为“六次确认”。

软分叉:区块链系统升级后,在所有节点升级到最新版本之前,由于程序版本差异造成的分叉,但版本升级后,分叉会消失。

硬分叉:人为拉分支形成的分叉。

最有名的硬分叉,就是“以太坊”分叉:

黑客盗取了第1920000个区块的合约币,以太坊团队强行修改源码,夺回了黑客控制的合约币,一部分矿工不认可这个修改,形成两条链,新链是以太坊(ETH),原链是以太经典(ETC)。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180322G0AZZ900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券