比特币系统则是构建这种数字货币的网络系统,是一个分布式的点对点网络系统
比特币的记录有所有运行系统的人共同参与记录,每个节点都保存一份完整的账本.同时使用简单多数原则,来保证账本的一致性.
区块链记账原理
哈希函数:Hash(原始信息)=摘要信息
原始信息可以是任何信息,hash之后会得到一个简短的摘要信息
哈希函数有一下几个特点:同样的原始信息用同一个哈希函数总能得到相同的摘要信息,原始信息的任何微小变化,都会哈希出面目全非的摘要信息,从摘要信息无法逆推出原始信息
哈希函数的4个作用:简化信息,标识信息,隐匿信息,验证信息
Hash(序号0,记账时间,交易记录)=ASDEDGF,账页信息和Hash值组合在一块就构成了第一个区块(比特币系统里约10分钟记一次账,即每个区块生成时间大概间隔10分钟),
在记第二个账页的时候,会把上一个区块的Hash值和当前账页信息一起作为原始信息进行hash,Hash(上一个hash,序号1,记账时间,交易记录)=DLKEKDKS
这样第二个区块不仅包含了本账页信息,还间接包含了第一个区块的信息.依次按照此方法继续记账,则最新的区块总是间接包含了所有之前的账页信息.
所有这些区块组合起来就形成了区块链,这样的区块链就构成了一个便于验证(只需要验证最后一个区块的hash值就相当于验证了整个账本),不可更改(任何一个交易信息的修改,都会让之后所有区块的hash值产生变化,这样在验证时就无法通过)的总账本
比特币如何挖矿---工作量证明
由于记账是由奖励的(包含新发行的比特币奖励和交易费),因此大家就会争相记账,这样就会引起记账不一致的问题,比特币引入工作量证明来解决这个问题,规则如下:
1,一段时间内(具体时间由密码学难度相互影响)只有一人记账成功
2,通过解决密码学难题(工作量证明)获取唯一记账权
3,其他节点复制结果
不过在进行工作量证明之前,记账节点会做一下准备工作
1,收集广播中还没有被记录账本的原始交易信息
2,检查每个交易信息中付款地址有没有足够的余额
3,验证是否有正确的签名
4,把验证通过的交易信息进行打包记录
5,给自己地址添加一个奖励交易
工作量证明:每次记账的时候,把上一个区块的hash和当前账页信息一块作为原始信息进行hash,如果仅是这样,显然每个人都可以轻松记账.为了保证10分钟在已有一个人可以记账,
就必须提高记账难度,使得Hash的结果必须以若干个0开头,所以在Hash时,加入了一个随机数变量
Hash(上一个区块的hash,交易记录,随机数)
因此在运算Hash时,不断的改变随机数的值,总可以找到一个随机数使得Hash的结果以若干个0开头,率先找到这个随机数的节点就获取此次记账的唯一记账权
验证:在节点找到成功满足的hash之后,会对全网进行广播打包区块,网络的节点收到广播打包的区块,会立刻对其进行验证.
如果验证通过,则表明已经有节点成功解谜,自己就不再竞争当前区块打包,而是选择接受这个区块,记录到自己的账本中,然后进行下一个区块的竞争解谜
网络中只有最快解谜的区块,才会添加到账本中,其他的节点进行复制,这样保证了整个账本的唯一性
假如任何节点有作弊行为,都会导致整个验证不通过,直接丢弃其打包的区块,这个区块就无法记录到账本中,作弊节点的成本就白费了.
比特币如何达成共识-----选择最长的链
去中心化共识
工作量证明需要竞争来记账,权威的账本是怎么达到共识的?实际上,比特币的共识由所有的节点的4个独立过程相互作用而产生,
1,每个节点依据标准对每个交易进行独立验证
2,挖矿节点通过完成工作量证明,将其交易记录独立打包进新区块
3,每个节点独立的对新区块进行校验并组装进如快
4,每个节点对区块链进行独立选择,在工作量证明机制下,选择累计工作量最大的区块链.
共识最共目的就是保证比特币不停的在工作量最大的区块链上运转,工作量最大的区块链就是权威的总账本
最长链的选择
包含最多区块的那个链称为主链,每一个节点总是选择并尝试延长主链
当有两名矿工在几乎相同的时间内,各自都算的了工作量证明解,便立即传播自己的获胜区块,到网络中,先是传播给临近节点,而后传播到整个网络,每个收到有效区块的节点都会将其并入并延长区块链
当这两个区块传播时,一些节点先收到了A,一些节点先收到了B,这两个候选区块都是主链的延伸,分叉就会产生,这时分叉出有竞争关系的两条链.两个块都收到的节点,会把其中有更多工作量的一条链继续作为主链,另一条作为备用链保存(因为备用链将来可能会超过主链难度称为新主链)
当原本以A为父区块求解的节点在收到B,C之后,会立刻将B链作为主链,继续挖矿
节点也有可能先收到C,在收到B,当收到C时,会被认为是孤块(找不到父区块B),而保存到孤块池中.一旦收到B时,节点就会将孤块从孤块池中取出,并且链接到他的父区块,作为区块链的一部分
比特币将区块间隔设计为10分钟,是在更快速的交易确认和更低的分叉概率间作出的妥协。更短的区块产生间隔会让交易确认更快地完成,也会导致更加频繁地区块链分叉。与之相对地,长的间隔会减少分叉数量,却会导致更长的确认时间
比特币所有权及隐私问题---非对称加密应用
匿名账本
比特币在没有第三方的参与下,在确保隐私的同时如何确定账户所有权呢?
实际上比特币的账户是用地址来表示的,账本上不显示个人信息,转账就是比特币从一个地址转到另一个地址
地址和私钥
比特币的解决方案是,谁拥有这个地址的私钥,谁就能用这个地址支付
比特币地址和私钥是一种非对称关系,私钥经过一些列的运算(其中有两次hash)之后,可以得到地址,但是无法从地址得到私钥.只有拥有了地址的私钥才能支付
如何证明你拥有某个私钥?对交易信息进行签名,过程如下:1,现对交易信息进行hash,得到一个摘要信息,2,用私钥进行签名
sign(hash(交易信息),私钥)-------签名信息
广播
在签名之后,付款节点就是开始全网广播:我支付了1btc到assssddd,签名信息是dkekslldie,你们来确认一下吧
广播过程实际上就是发信息到相连的其他节点,其他节点在验证通过之后,再转发到与之相连的节点.
广播中包含了交易原始信息和签名信息
验证
其他节点在收到广播信息之后,会验证签名信息是不是付款方私钥对交易信息签名产生的,如果验证通过说明交易有效,才会记录到账本上去(实际中还去验证付款方账号中余额是否充足)
verify(签名信息,付款方地址)===hash值
比特币系统使用了椭圆曲线签名算法,算法的私钥由32个字节随机数组成,通过私钥可以计算出公钥,公钥经过一系列的哈希算法和编码算法得到比特币地址,地址也可以理解为公钥的摘要
共识算法
所谓的共识就是在人人平等的基础上大家形成一个共识,产生一个操作者,临时决策者,代表大家进行中心化的操作,大家按照这个共识去维持这个中心化的网络.
区块链中的共识算法说到底还是分布式网络中如何保证数据一致性的问题.
针对非拜占庭错误的情况一般包含Paxos,Raft及其变种,拜占庭错误的情况,一般包含PBFT,POW系列.
从概率角度讲,PBFT算法是确定的,一旦达到共识,就不可逆转,而POW算法则是不确定的,随着时间的推移,被推翻的概率越来越小.
拜占庭共识算法PBFT/DBFT机制
这些算法通常以其弹性t作为特征,t表示算法可以应对的错误进程数,只有在n>=3t+1时才有解(n系统中进程总数).拜占庭容错能够容纳将近1/3错误节点误差.
DBFT机制:是由权益选出记账人,然后记账人之间通过拜占庭容错方法达到共识,这种方式的优点:
专业化的记账人,可以容忍任何类型的错误,记账由多人协同完成,每一个区块都有最终性,不会分叉,算法的可能性有严格的数学证明.
缺点:当有1/3及以上的记账人停止工作后,系统讲无法提供服务,当有1/3或以上记账人联合作恶,且其他所有的记账人被恰好分割为两个网络孤岛时,恶意记账人就会使系统出现分叉.但是会留下密码学证据.
工作量证明POW---比特币,以太坊,来特币
通过计算来猜测一个数值,得以解决规定的hash问题,保证在一段时间内,系统中只能出现少数合法提案.同时,这些少量的合法提案会在网络中进行广播,收到的用户进行验证后,会基于他认为最长的链上继续难题的计算.
因此,系统中可能出现链的分叉,但最终会有一条链成为最长的链.
权益证明POS---Peercoin & Nxt
通过保证金来对赌一个合法的块成为新的区块,受益为抵押资本的利息和交易服务费,提供证明的保证金越多,获得记账权的概率就越大,合法记账者可以获得利益.
POS是试图解决POW中大量资源被浪费的缺点,恶意参与者将存在没收保证金的风险.
一般的对于POS来说,需要掌握超过全网的资源,才有可能左右最终的结果.
授权股权证明机制DPOS----Bitshare & EOS
POS的改进算法,与POS的主要区别在于节点选举若干代理,由代理人验证和记账.
POW和POS虽然能有效的解决记账行为一致性共识问题,但是现有比特币POW机制纯粹依赖蒜粒,导致专业从事挖矿的群体似乎已和比特币社区分割,某些矿池的
巨大算力俨然成为一个中心,这与比特币的去中心化思想想冲突,POS虽然考虑到了POW的不足,但依据权益结余来选择,会导致首富账户的权利最大,有可能支配记账权.
DPOS的出现正是基于解决POS和POW 的不足.
Paxos
将所有节点都写入同一个值,且被写入后不再更改
两个操作
Proposal Value:提议的值
Proposal Number:提议编号
三个角色
Proposal:提议发起者,可以有多个,Proposal提出议案,对同一轮Paxos过程,最多只有一个value被批准.
Acceptor:提议接受者,可以有N个,Proposal提出的议案必须Acceptor半数以上批准才能通过,N个Acceptor之间相互独立.
Learner:提议学习者,把通过的确定性取值同步给其他未确定的Acceptor.
协议过程
假如1个proposal,3个Acceptor,无learner,目标proposer向3个aceptort 将name变量写为v1
1A,proposal发起prepare(name,n1)n1为编号,发送给3个Acceptor,
1B,Acceptor接收到proposal的消息,对比之前自己保存的内容,发现name变量(null,null)没有被写入,且未收到过提议,都返回proposal,并在内部记录这个变量,已经有proposer申请提议,编号为n1
2A,proposal收到3个Acceptor的相应,内容都是name变量现在还没有写入,你可以来写,proposal确认超过半数确认,发起写入操作accept(v1,n1),告诉acceptor要把name变量写入V1,编号是刚通过的n1,
2B,acceptor收到acceptor(v1,n1),比对自身的编号是一致的,写入一致,保存成功,并响应accepted(v1,n1)
3,proposer收到3个accepted响应都成功,超过半数响应成功,到此name变量被确定为v1。
本文深入探讨区块链的共识算法,包括Paxos、Raft、PBFT、POW、POS和DPOS等。分析了各种算法的特点、优缺点,特别是比特币和以太坊的工作量证明与权益证明机制,以及DPOS如何尝试解决去中心化问题。
1万+

被折叠的 条评论
为什么被折叠?



