比特币复盘|第13讲

浏览量:18 次

大家好,欢迎来到《王毅带你认知区块链》第十三讲:比特币复盘。这也是咱们“基础篇”的最后一讲,今天我会带着大家把前面讲的比特币基础知识再复习一遍,加深大家对比特币系统的宏观认知。了解了比特币,你也就了解了区块链。

任何一种技术,基础知识都是很重要的,对比特币来讲也是同样的,构成一个系统的基本要素决定了整个系统结构的安全性与扩展性。

好,下面咱们开始今天的课程吧。

在比特币中,最基本的要素莫过于私钥、公钥、地址这三个密码学的基础知识了。私钥生成公钥、公钥生成地址,这个过程是不能逆向进行的,也是比特币的密码学基础。只有比特币地址对应的私钥的拥有者才对此比特币具有真正的拥有权。可以这么来说:公私钥体系定义了比特币乃至所有类似的区块链系统中资产的权属属性。

比特币从宏观上来说是一个P2P的区块链网络系统,是一个电子支付系统;从技术层面来讲,是用锁定脚本固化在某一个具体地址上的数值,说某人拥有多少比特币,讲的是这个人拥有多少比特币地址,这些地址下锁定了多少未被消费的交易输出,也就是比特币的UTXO。

UTXO,直译过来就是指未被花费的交易输出。交易是改变比特币权属的唯一方法,通过交易把比特币从一个地址转移到另外一个地址。但比特币的交易与账户余额记账系统所说的交易是不同的,在账户余额记账系统中,余额显示在帐户下面,交易仅仅起到数值转移的作用;比特币的交易,既是转移比特币资产的方式,也是保存比特币资产的单元。具体来讲保存比特币资产的最小单元是一个交易输出,一个比特币交易可以有多个输入,也可以有多个输出,比特币就被固化在这些交易输出上,一个交易输出只可被使用一次,一旦一个交易输出被另外一个交易的输入引用,那这个交易输出就不能再次被消费,这个地址也就失去了对此比特币的拥有权。

UTXO对比特币资产的固化方式就很重要,它是通过锁定脚本,通常情况下这个脚本里会带一个或者多个方法:需要一个特定的输入,使得输入,根据这个方法运算后得到脚本中指定的答案,只有对一个UTXO拥有所有权,才可能正确提供这个输入,才能正常地解锁锁定脚本,对这个UTXO进行支付。因此,比特币被支付到一个地址后,就被固化到这个地址上,直到使用它进行消费,它的价值才会被转移。

大家讲到区块链就会吹的很神乎的各种高大上的共识机制,对于一个中心化的系统是不需要共识机制了,中心就代表了一切,一切由中心来决定。对于P2P的系统来讲,情况就完全不同了,听谁的,谁说了算?这个就得有一个规则,有一个算法来保证,这个有一个学名,就叫共识机制。对于比特币来讲,怎么把交易记进区块链里,怎么样才能生成一个被大家认可的区块,就是它的共识机制要解决的问题。把交易记进区块很简单,尽可能多地收集交易,按顺序写进区块里就可以了,这时要保证区块的大小不要超过1M,交易的数量是没有限制。有人会发问,以前的课程不是讲过,交易是按Merkel树的形式组织的吗?怎么又说是按顺序写进区块就可以了?事实上这是两个完全不同的概念,交易就是按顺序写在区块里的,把各个交易取哈希后按Merkel树的结构生成一个Merkel树根的方法是区块头的要求,区块头是需要一个所有交易的Merkel树根的。比特币的每个节点都是平等的,每个节点都可以生成区块,如果没有一定的规则,区块就会满天飞,无法选出正确的区块。比特币里规定生成的区块的区块头的哈希值必须要小于一个特定的值,这个特定的值系统会动态来调整,以保证每十分钟全网才能生产出一个有效区块。矿工可以改变区块头中的随机数字段、时间,还可以通过改变区块中的coinbase交易中的脚本字段来间接改变区块头中的Merkel树根值,不断地改变,以使区块头的哈希值满足系统的要求。

在满足区块头哈希值阈值的前提下,最先生产出的区块就是有效区块。怎么定义是最先生产出来的,不是根据绝对时间来定义,而是根据哪个区块先被全网绝大多数的节点认可,也就是我们经常说的最长链机制,网络上的最长的那条链就是被大多数节点认可的链。在这里我们要注意的就是要从自己单个节点与从整个网络两个不同视角去理解比特币的最长链。从自己单个节点的视角来讲,只需要把新收到的区块接到自己本地节点认为的最长链上去,不用去考虑其它节点当前的状态,有可能其它节点与你收到的不是同一个区块,但是是同一个父区块。从整个网络的视角来讲,每个节点都诚实地把区块接到自己的最长链中去,比特币选择相信大多数人的选择,即大多数人认可的才是正确的最长链。

比特币的基础是相信大多数的节点是诚实的,如果说不诚实的节点占了多数,也就是遇到了我们常说的51%攻击,对比特币大多数的用户来讲,也不是灾难性的,因为51%攻击也只是把自己已经支付的UTXO再次支付,或者不把一些交易记入新生成的区块,但是它不能支付属于其它人名下的比特币,也无法修改已经发送到网络中的任何不属于自己的交易。

生产比特币新区块的过程就叫挖矿,在生成的新区块中矿工可以向自己的地址支付一定量的比特币,现在这个数量目前是25个BTC,同时每笔交易的手续费也被支付到矿工的地址,这个奖励与手续费的总额是通过coinbase交易记录在区块里的。由于比特币网络算力已经进入了E的时候,单个矿工要挖出新区块就像赌博一样困难,这就需要加入矿池来摊薄风险,获得稳定的收益。矿池通过设定一个比比特币网络的难度系数低一点的区块头哈希阈值,矿工通过调整随机数生成的区块头哈希只要比这个矿池阈值低就算做出贡献,而不是非要达到比特币网络的难度系数,同样的,即使矿工算出来的哈希值达到了比特币网络的难度系数,也不能获得超额的奖励,也只能按照与达到矿池难度系数一样的贡献份额来计算。另外补充一下,最近报道,某生产厂已经推出了7纳米的挖矿芯片,这预示着,比特币的挖矿成本又要大幅度降低了。

比特币的区块容量是1M,这个已经成为比特币发展的瓶颈,因此扩容问题一直是比特币倍受关注的重点问题,同时其它的一些比特币功能也需要提升。实现的方法就是比特币的硬分叉与软分叉,这两种分叉各有不同,对于硬分叉:老节点不认可新节点的区块,新节点认可老节点的区块,比较粗暴地让老节点融合进新节点的组织中来;对于软分叉:老节点认可新节点的区块,新节点不认可老节点的区块,温和地淘汰老的节点。

今天的篇幅有点长,我们继续汇总比特币的基础,大家耐心看下去。

比特币每10分种生成一个新区块,这就意味着支付一笔比特币,最少要等10分种,如果要真正不会被攻击修改,需要6个确认,也就是1个小时的时间,对于小额支付来讲,时间成本非常高。因此就促成了各种链外的一些技术发展,闪电网络是解决比特币交易速率多种方案最为成功的。闪电网络用RSMC技术使得链下离线技术成为可能,简单来讲就是,经常发生交易的两个用户按比例往同一个双方签名地址预先放入一定数量的比特币,然后通过设计组合交易,但并不真实发往比特币网络,只是通过这些可能在将来发往比特币网络的交易组成的智能合约来完成离网支付,同时利用交易里locktime的概念,来保证交易真正发往比特币网络时,受害人有办法惩罚不守约的人。闪电网络还利用同一文本只能生成唯一的摘要技术实现了多人之间的离网交易,即A与B之间有闪电通道,B与C之间有闪电通道,那A与C借助B的帮忙也可以完成闪电支付。闪电网络说白了就是利用未发生的比特币的交易做成的一系列的智能合约组成的一个系统,这些合约的生效是不依赖与任何第三方的,这个网络可以实现实时的、海量的比特币离网交易。

现在一个比特币的已经价格不菲,如何保管好自己手中的比特币就显得非常重要,保管比特币其实就是保管好私钥。在接收比特币的时候,按照中本聪的推荐,一笔交易用一个新的地址,带来的结果就是地址很多,同时私钥也很多。比特币钱包就是用来生成、管理比特币地址及私钥,同时对各地址下的UTXO进行统计的一个综合性的工具,因为涉及到私钥的保护,所以钱包的选择与保管就一定要慎重。不常用的比特币就用冷钱包来保存,经常使用的、小额比特币就用热钱包来管理。对于大额交易最好用比特币的全节点钱包来进行,以保证交易的安全,如果是小额交易,我们就通过SPV轻钱包来处理就可以了,SPV轻钱包因为在本地保存了所有比特币的区块头数据,再结合向全节点索要的针对某个交易的Merkel路径,可以很方便地确认一笔交易是否被记入比特币区块链。在这个过程中,SPV不是简单地向全节点索要一笔交易的相关数据,而是通过布隆过滤器来协助完成相关数据的索取,大大保护了钱包用户的隐私,布隆过滤器预先设置一个数组和一些哈希函数,然后针对这些哈希函数分别输入关键字,这样得到对应数组位置的值为真,数组值为真的位置可能重复,这也带来了过滤器的假阴性,即当我们输入一个值时,出来的结果为真,使过滤出来的值不是我们所需要的,因此我们要在精确性与隐私性之间做出权衡,设置正确的数组与哈希函数。

对于比特币开发者而言,最重要的是要遵循去中心化的原则。对中心化模型很熟悉的开发者们总是试图将中心化的模型借用到比特币的实际应用中,这间接给比特币带来灾难。许多早期的比特币交易所将所有用户的资金集中在一个包含私钥的“热”钱包里,并存储在服务器上,这样的设计使得用户失去了对比特币的控制权,将密钥集中在一个中心系统中,一旦这样的系统被黑客攻击,用户就要蒙受很大的损失,最著名的事件莫过于“门头沟”(Mt Gox)交易所比特币被盗事件了。

还有一个问题特别要注意,就是对风险的平衡,有些人为了保存自己的私钥,对私钥通过一系列复杂的操作进行加密,结果这个加密密码给丢了,这样比特币的备份就毫无意义了。我们提高比特币安全的方法有多种,最直接的方法就是将电子存储的方法转化为物理存储,将比特币进行离线保存,这种方式是最有效,也最简单的一种方式。同时,存储私钥时要在安全的前提下进行多处备份,以防止不可抗因素对私钥造成破坏。在实际应用中我们可以采用多方签名技术,外加设定一个时间值的方式,这样,在多人管理资金的前提下,保证了比特币不会丢失,即使密码丢失,比特币在最终的一个时间还是会回到你手中。

结尾

咱们课程的“基础篇”就讲到这里,前后共持续了2个月多,若能给大家带来收获便是对这个课程最大的认可了,谢谢大家的支持。从下一周开始,我们进入新的模块:技术架构篇。我会依次为大家介绍:以太坊、Fabric、Ripple、EOS和IpfS技术,咱们下周见。

往期课程

区块链3.0-清结算|第12讲

区块链3.0-存证和溯源的设计|第11讲

区块链3.0-供应链金融|第10讲

区块链技术(下)|第9讲

区块链技术(中)|第8讲

区块链技术(中)|第7讲

区块链技术(上)|第6讲

什么是区块链|第5讲

比特币的交易|第4讲

比特币的运行原理(下)|第3讲

比特币的运行原理(上)|第2讲

比特币白皮书经典解读|第1讲

•end•

本期文章 | 王 毅

本期编辑 | 靳亚峰

王毅

赞赏

已推荐到看一看

你的朋友可以在“发现”-“看一看”看到你认为好看的文章。

 
®关于本站文章™ | 若非注明原创,默认 均为网友分享文章,如有侵权,请联系我们™
㊣ 本文永久链接: 比特币复盘|第13讲