区块链学习笔记——比特币区块链的运行方式和共识机制

    上一篇文章中介绍了区块链的概况,提到了区块链是一个点对点的分布式网路系统,其中数据的存储以一个个区块相连的区块链的形式存储,区块链系统中的所有节点共同维护一条正确的唯一的公链,已达到去中心化的目的。但是,对于区块链分布式系统来说,如何维持各节点的一致性已确保系统能正确无误地运行是一个必须要解决的挑战。

    下面以比特币为例,来分析一下比特币系统是如何运行以及解决各节点的一致性问题的。比特币的运行机制可以总结成以下三点:

    1. 使用数字签名来确保交易的有效性

    2. 每个节点均有记账权来实现去中心化

    3. 通过PoW共识机制实现区块链的一致性

使用数字签名确保交易的有效性

    在比特币系统中,账户是以“钱包地址”的形式体现的,所有转入并且没有被重新话费出去的比特币总和就构成了这个“钱包地址”的“余额”。

    一笔比特币的交易中,会包含转出地址(可以理解为比特币账户)和转出金额的信息,但是系统要怎样确定交易中填入的这个地址是转出人拥有的有效地址同时又有足够的未花费余额呢?这就需要引出介绍比特币地址的生成过程和加密算法。

    首先说说比特币钱包地址的生成过程:

    1. 通过随机数生成器生成一个256bits的数,这个数就是私钥,拥有这个私钥就等于拥有相应的比特币地址中比特币的一切操作权,因此理论上私钥只由比特币地址的拥有者拥有,不能泄露。

    2. 通过私钥非对称加密生成公钥,这里使用的非对称加密算法是SECP256K1,一种椭圆曲线算法。由于是非对称加密,也就是说无法直接通过公钥计算出私钥,因此公钥可以公布全网,其他节点可以使用公钥来验证一笔交易的有效性。

    3. 得到上一步的公钥后,将公钥通过SHA256哈希算法处理得到32字节的哈希值,后对得到的哈希值通过RIPEMD-160算法来得到20字节的哈希值,把版本号+Hash160组成的21字节数组进行双次SHA256哈希运算,得到的哈希值的头4个字节作为校验和,放置21字节数组的末尾。这样就组成了25位的公钥哈希。

    4. 然后对公钥哈希进行Base58编码就得到了最终钱包地址,公钥哈希和钱包地址可以通过Base58的编码和解码进行相互转换,因此可以认为公钥哈希等价于钱包地址。钱包地址将用于填写交易中的转出方和转入方。

    从上面钱包地址生成的过程可以看到,通过私钥可以计算出公钥、公钥哈希和钱包地址,而只通过公钥则可以计算出公钥哈希和钱包地址。因此,生成一笔交易时,除了要包含交易本身的信息,同时还需要交易的转出方使用私钥对交易进行数字签名,以证明转出方真的拥有使用这个转出地址余额的权利,同时还需要附加转出地址的公钥,以便其他节点验证交易中的转出地址是否正确。

    至此,用于确保交易有效性的非对称算法机制就介绍完啦。

每个节点均有记账权来实现去中心化

    一个交易产生后会被广播至全网,理论上这个时候系统中所有的节点都有记录这笔账的权利,最终获得记账权的节点将上一个区块产生之后系统发生的所有经验证有效的交易打包成一个新的区块加入到区块链的尾部,然后将最新的区块链同步到隔壁节点,隔壁节点再向外扩散直至全网,这样就完成了一次记账的过程。

    那么问题来了,如果每个节点有点记账的权利,那么具体某一个区块的记账节点又是如何挑选出来的,同时如果每个节点都有记账权,系统又是如何防止有恶意节点故意制造出错误的分岔区块链呢?这就引出下面的第三点内容,PoW共识机制。

通过PoW共识机制实现区块链的一致性

    PoW,全称Proof of Work(工作量证明),是比特币和以太坊选用的用于保证系统一致性的共识机制。系统会给出一个哈希值的要求(比如说规定哈希值开头的0的个数),候选记账节点需要去穷举计算出符合要求的哈希值,最先计算出来的节点就获得了当次的记账权,而其他节点在这段时间的计算结果就作废了,这样就确保了每次只会有一个有效节点进行记账,从而避免了区块链分拆的问题,之后每一个新区快的产生都会重复这个过程。比特币系统会根据目前系统的总算力来自动调节哈希值的计算难度(比如说规定哈希值开头的0的个数),以此保持系统大约每10分钟产生一个新块。由于比特币是分布式系统,所以保持每10分钟出一个块,可以给各节点同步数据预留足够的时间,避免由网络延迟等原因导致的各节点间数据不一致的问题。

    由于哈希函数的特性,使得PoW机制中哈希值没有规律可循,只能通过穷举的方式来计算。因此单个节点获得记账权的概率跟它的算力成正比,所以假设系统中大部分节点都是正常运行的好节点,那么如果有坏人想搞破坏,他就需要拥有至少全网51%以上的算力才有机会控制记账权,强行记错误的账到区块链上。然而,目前比特币全球已有上万个节点,因此想要拥有超过51%的算力是一件很困难的事情,而且PoW的计算过程十分耗电,因而当大多数节点是好节点的情况下,搞破坏的成本是十分高昂的。

    那又怎么能保证系统中大多数节点都是好节点呢?这就是通过奖励机制来保证的,节点计算出目标哈希值,获得记账权并完成记账后,不仅可以获得交易中的手续费,同时也会获得系统额外生成的巨额比特币奖励,因此,PoW的哈希计算过程,也被称为“挖矿”。

    总结一下,因为有奖励机制,所以系统中绝大多数节点都是好节点,好节点越多,坏节点想搞破坏的成本就越高,搞破坏的收益甚至低于它老老实实挖矿的收益,还不如当个好节点,老老实实地挖矿。比特币系统也因此得以稳定地运行至今。

参考资料

比特币和区块链(3):比特币的共识机制

【深入浅出区块链】相关课程

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容