快速理解区块链的原理

关于比特币以及区块链的介绍,目前太偏金融了,很多资源作者或译者,全是标准西装领带皮鞋金融精英或财经大咖,IT 界关注者则是清一色源码分析…毕竟两个圈子,两种生活。程序员并不关心那些经济现象背后的东西,只希望看到代码实现,或了解下自己怎样可在各类投资中不赔钱。

这是金融和数字化的融合。

本文前面会以技术开始,逐步过渡到一些非技术的方面,我觉得非技术的东西才是典型,才是本质,技术往往只是完成某种目的的手段。

总述

比特币的核心我认为就三个,分别属于以下三个范畴:

  • 数字签名技术
    签名和验签利用离散对数难题(针对 ECC 算法而言保护了每一次交易。在线破坏交易难。
    这是技术范畴,不是你不想,是你做不到。
  • 哈希技术
    哈希技术构建了区块链,即全局公共账本,使既有交易不可抵赖,未来的 UTXO 消费可承诺。离线破坏交易难。
    这是技术范畴,不是你不想,是你做不到。
  • 博弈论
    纳什均衡的稳定状态保证了没有节点可以通过不诚实的行为获得更高的回报。作恶成本高。
    这是非技术范畴,你权衡了一下,根本就不想作恶了。

账户与钱包

首先要明确账户和钱包的区别。

  • 账户
    属于一个人,包含此人能支配的钱以及维护此人之前的所有交易记录。
  • 钱包
    属于一个人,只包含此人能支配的钱。

在比特币的世界,没有属于个人的账户的概念,只有比特币钱包,所谓的比特币钱包,其实可以简单理解为一个公钥。由于电子计算机内的任何东西都是可以零成本复制的,所以就必须采用非对称密码技术解决这个问题。

简单说,一个钱包的含义就是 “任何人都可以放钱进去,但只有你自己可以拿钱出来”,你之所以比别人多一个拿钱出来花的权力,是因为你持有和钱包公钥对应的私钥!请务必记住,私钥就是你打开钱包花钱的钥匙,一旦被别人窃取,钱也就是别人的了,一旦丢失或者销毁,钱包里的钱也就相当于跟着销毁了,就好像现实中你把纸钞撕毁焚烧了一样。

既然没有账户的概念,我怎么知道我还有多少比特币可以花费呢?

在比特币世界,所有能花费的钱被统一表示成 UTXO(Unspent Transaction Output),该 UTXO 和一个钱包地址关联,你要想知道你还有多少钱可以花,你只能遍历你所拥有的钱包,然后把和该钱包关联的 UTXO 累加在一起,结果便是你的 “账户余额”。所有的这一切信息,全部分布式存储在已经达成全网共识的区块链里,这个后面会再说咯。

自己的 UTXO 从哪里来的呢?非常简单,它就两个来源:

  • 别人转给自己
  • 自己挖矿所得

除了这两个途径,不会有其它途径可以让你拥有 UTXO。

UTXO是比特币世界基本的消费单位,就像我们日常的人民币面值一样,你无法将一张10块钱撕开成两半花,你若买一个5块钱的东西,你必须付出整个10块钱,然后接受找零的5块钱,当然,你也可以说“不用找了!”

比特币交易

那么,什么是 UTXO 呢?先看个图:
这里写图片描述

类似上面这张单子,就是 UTXO,它生成于一笔针对自己钱包的一个交易,在上图的例子中,依旧使用经典的 Alice,Bob 来举例。

请注意锁定的概念。所谓的锁定就是,当 Alice 转比特币给 Bob 时,只有 Bob 本人才能接收并在将来的某个时间消费,为了保证这一点,比特币系统采用了非对称密码技术,使用 Bob 的公钥来对一笔交易向 Bob 钱包的比特币输出进行锁定,这样一来,按照非对称密码技术的原理,只有 Bob 拥有的私钥才能解锁。

回顾一下非对称密码技术的两个要点:

  • 公钥加密,私钥解密
    确保信息的接收者只能是确定的人。
  • 私钥签名,公钥验签
    确保信息的发送者只能是确定的人。

比特币正是利用了这个原理,但是并没有明确用公钥加密和私钥解密来锁定特定的接收者,而是采用了和传统交易一致的松散被动方案:

  • 锁定输出,形成 UTXO
    交易输出仅仅附带一个接收者公钥,但并不验证该公钥确实对应接收者本人。
  • 解锁 UTXO
    如果你要花钱,你必须确保这笔钱确实是自己拥有的,即来自于从来的某一个锁定的输出,该锁定的输出附带自己的公钥,此时自己用私钥将其解锁即可使用。

下面的图示展示了上面的论述:
这里写图片描述

非常类似我们在银行填写的那种转账单据,这合理吗?为什么对输入要求很严格,还要各种验证,而对输出只要求填写对方的钱包地址即公钥即可呢?

这很合理。试想你去银行转账的场景,如果你卡上根本没有那么多钱,银行铁定不会让你继续转账,然而银行并不在意你把钱转给了谁,更不会帮你确认这个人是不是骗子,是不是还活着,把钱转入骗子账户的人很多,这并不是漏洞,这是一种最合理最有效的方案。Why?

答案是:能证明一个人是否拥有某种属性的,只有他本人!只有他本人可以发起证明自己的行为,然后其它人来确认该证明是否有效。之所以说它有效,是因为,自己证明自己以及别人验证是一件很简单的事情,反过来,别人证明自己这件事本来就是图灵完备的,搞不好会无限循环而无所终。

我们知道,比特币系统依托一个全球范围的七层 P2P 网络,在你转账给某人到全网确认共识的时刻,时间并不确定,甚至说,当你转账给某人时,此人并不一定在线,他自己便无法证明自己是自己。这件事在现实中很麻烦,但是在网上就很简单,只要拿出私钥 verify 一下即可,然而实时确认有个前提,即双方必须同时在线,然而这并无法保证。

不管你将锁定和解锁理解为钥匙和锁的故事,还是古时候皇帝和将军之间对虎符的故事,其实都差不多,都是在证明自己拥有某种能力或者属性,对于比特币,总结一句就是:
花钱的时候,必须先解锁这笔封存在区块链里的钱,再上锁发往它的目的地。依此循环不止,整个世界的比特币交易从中本聪创世开始,输入/输出的解锁/锁定关系就形成了下面的有向无环图:
这里写图片描述

注解:锁定与解锁脚本

在上面的解释中,我为了方便,使用私钥签名,公钥验签来说明了解锁的锁定的过程,在比特币的实现中,这实际上是由一种叫做脚本的东西完成的。

注意,这里说的脚本并不是类似 Linux bash 那样的脚本,而是一种简单的虚拟机语言,类似 JVM 那般,它内置了一个微型的指令集,可以执行诸如数值运算,比较,签名验签等简单操作。

所谓的解锁操作,其实就是将解锁脚本和之前的锁定脚本拼接在一起,并且执行它,如果结果为 TRUE,则认为可以解锁成功。

锁定机制为什么不是直接把公钥放进去而解锁机制为什么不直接置入一个签名呢?我感觉这就是比特币系统设计里比较灵活的一面,如果仅仅放进去公钥和私钥,那么验证就只能是验签这么一个操作,如果是放进去一个脚本,那么就能实现更加灵活的策略了。为了安全性和简便性,直接放进去一台机器,岂不更爽?嗯,比特币的锁定和解锁脚本就是这么一台机器-虚拟机!

由于本文只是一个科普性质的简介,这里就不再赘述细节了,详情请参看网上汗牛充栋的其他人写的介绍。

引入区块链

到目前为止,我来总结一下要想让这个系统运行起来的要点:

  • 花钱时要解锁输入
    能花的钱来自于之前别人或者自己(找零的情况)针对自己的一个输入,该输入针对自己上了锁,自己必须解锁才能证明自己可以拥有这笔比特币。
  • 花钱时要锁定输出
    输出输入是衔接的,锁定输出是为了确保只有收款人才能解锁,如果锁定时使用的锁不正确,这笔钱要么转入陌生人账户,要么转入黑洞被销毁。
  • 输入/输出组成的交易单不能被篡改
    这是核心!UTXO 其实并不物理存在,它衍生自交易单,如果交易单可以被随意篡改,那么这个系统将失去公信力,完全不可用,如何保证交易单的权威性呢?

将所有的交易单交给 “央行” 是一个不错的选择,或者至少交给一家靠谱的商行也不错,这确实是我们使用了几千年的方法,完全依赖一个中心机构或者个人来调解一切,现在比特币系统采用了一种完全不同的思路,即去中心化。

忘掉 UTXO,忘掉交易单,还是从需求出发,我们的目标是:

  • 既有的交易不能抵赖,即备案
  • 自己钱包里的钱未来确实可以花出去,即承诺

区块链登场了!

区块链技术之所以可以完美覆盖比特币面临的各种问题,其解决方案并不是纯技术的,而是采用了一种社会学博弈的激励措施,这些措施形成了一种典型的负反馈效应,最终让作恶变得成本高昂。

先看看什么是区块链:
这里写图片描述

是个吊链树结构,这种环环相扣的结构,使得在这种链条形结构中稍微修改哪怕一个比特,都会牵一发而动全身,也许你会说,大不了我就一改全改呗,那你就错了。我们说哈希技术解决了这个问题,是因为每生成一个区块都是在付出高昂代价解决一个数学难题:
这里写图片描述

这意味着任何人无法修改区块链中每一个比特,如果你真的这么做了,就意味着你要把上图中的数学难题解答 n 遍,这里的 n 指的是从修改的区块到当前的最新的区块的区块数量,解答一次这个难题就要消耗巨大的成本,何谈解答 n 遍…

简单解释一下这个题为什么难。

考虑数字 0X00FF,它生成的概率有多大?对于一个 16 位的数字,要求它的高 8 位为 0,低 8 位无关紧要。运用排列组合和概率相乘就能解答: 1 2 1 2 \frac{1}{2}\frac{1}{2} 2121…这种问题非常难,需要你花钱买昂贵的硬件,并且日夜不停运行赌概率,这意味着除了买硬件你还要交电费,长期的运转产生不可忍受噪音意味着你需要要么把设备搬到一个无人区,要么自己买一套别墅利用它的地下室…

我们来看看区块链是怎么保护交易单的。把上面的那个图放大了看,我们看一下每一个区块里面都包含了什么:
这里写图片描述

我们看到,区块链中的每一个区块实际上是若干个交易单的容器,到底是多少个取决于效率和消耗之间的权衡。如果每一笔交易都要用掉一个区块,总体消耗就会非常大,如果 1 亿个交易单用掉一个区块,等待确认的时间就会非常久,所以呢…区块里包含了交易单据,这意味着你无法修改交易任何已经被区块纳入的交易单据。

然而区块是如何纳入交易单据的呢?

比特币挖矿

当你生成一张交易单据并且广播至全网时,世界上可能很多人都在这么做,也就是说,交易单是在源源不断地生成的。与此同时,在世界的某些角落里,总是有勤劳的比特币矿工在搜罗这些交易单,将其纳入自己生成的一个区块并将该区块链接到唯一的区块链上。

我们知道,只有交易单被纳入到了区块链以后,它才是有公信力的,是安全的,它才会因此而产生价值,而正是这些比特币矿工在试图将其纳入区块链,它们确实在挖掘一些可以产生价值的东西,所以说,他们确实在挖矿。

像《闯关东》里你越勤劳,越肯冒险,付出越多,就越有可能得到高额的回报,注意是有可能,同时也有血本无归的风险,这是一个概率问题。和《闯关东》看起来不一样的是,那些淘金客淘到的金子自己可以保留一些,那么比特币矿工勤劳解决数学难题挖掘区块的动机是什么?

答案非常明确,技术解决不了的问题,经济学来接力:

  • 挖矿会有确定的比特币奖励
    为了彻底远离中心化,比特币的发放不是集中的,而是按照每 4 年为半衰期逐步发放,这保证了两点:
  1. 比特币终究有一个总量,即它会发放完毕
  2. 在比特币发放完毕之前,每一个出块的矿工都会得到发放额的比特币奖励
  • 挖矿会得到交易小费
    如果交易者好心,同时也是为了自己优先得到矿工的服务,即他希望自己的交易单优先被确认纳入到区块链,交易者给点小费是应该的。比特币系统规定,一张交易单的所有输入和所有输出之间的差额即小费,一个矿工出块后,该区块包含的所有交易单的小费即交易费,归该矿工所有。

貌似问题解决了,然而,矿工们与其如此打工,不如来点小动作赚的更多。抛开人与人之间勇气和胆量之间的差异,假设所有人都一样,到底是什么在抑制这些小动作的发生呢?是技术难题在阻碍吗?

我认为,技术问题是最简单的问题,要说难,社会学才更难,心理学则最难。以上这两者均可以归结为经济学问题:我干坏事我能得到什么好处呢?


社会学博弈论

去中心化最根本的特征在于,消除了信息的不对称!而犯罪的根源则在于,利用了信息的不对称。推而广之,越是扁平化的结构,在空间维度上就越不容易看到系统内的低熵体,但是多给点时间,低熵体必然会出现,我认为,低熵体来自于时间维度,而不是空间维度!扁平化的结构越大,低熵体形成的就越快,因为盘子大了,大众供给的能量就越多…

如果你和我知道的信息一模一样实力相当,我便不会铤而走险去做损你利我的事情,因为这是最差的选择!

如果你是个诚实的人,那么我能得到利益,但这对我来讲是唯一的好事情,如果你跟我一样龌龊,那么我们两败俱伤,如果你比我更龌龊,我净赔本。算算概率,合算吗?反之,如果我们均遵守规则,我们便可以得到稳定的收入,这既是双赢,也算利己!

这并不是一个零和的游戏,话说比特币的技术原理以及激励机制助力了博弈的偏向,人们自然而然会为了这种激励带来的利益去做诚实的事情,不是因为人之初性本善,而是因为:

  • 做诚实的事情相比作恶更简单-技术因素
  • 做诚实的事情可能会得到奖励-非技术因素

哈哈,很帅,不需要惩罚!

比特币到底如何抵御攻击

比特币在设计之初就希望在不动用警察军队等暴力机关的前提下让攻击者自己觉得攻击毫无意义。事实上它确实做到了。

接下来面对技术痴汉这些,所能采用的手段只能是技术手段了,这里不再赘述,详见其它的文章或者我去年写的这篇:比特币与区块链的大众科普文 中的“区块链技术如何避免攻击”一节:https://blog.csdn.net/dog250/article/details/68649002

这里仅仅举例说明几个典型的攻击行为:

  • 偷取比特币
    别人转给他的钱必须有私钥方能解锁花费。
  • 伪造比特币
    任何比特币不能无中生有,来源就两个!伪造者将无法解锁。

比特币世界的负反馈

比特币系统构成了两个负反馈系统,我仔细想了一下,嗯,是的。

  • 挖矿收益负反馈
    是的,有人投资了大量的矿机,希望通过挖矿来获得收益,这本身无可厚非,比起那些买房不住的,做比特币矿工高尚多了!但高尚的代价就是收益薄。如果挖矿的收益还不足以负担电费,谁还挖矿?如果过挖矿的收益远高于电费,便会吸引大众前来,此时便会降低每一块出块的收益,要知道,你花费的可是现实中的货币啊,它和比特币的汇率一直在抖动!!就像淘金热的社会,黄金更多作为一种商品而不是货币一样的道理。因此,挖矿的收益将会越来越不显现,红利期早已过去。
  • 交易费负反馈
    100 多年以后的 2140 年之后,比特币发放完毕。此后做矿工还有意义吗?毕竟金子已经没有了!十分有意义,比特币矿工挖取的不仅仅是比特币,而是价值!如果再也不发放新币了,那就赚取交易小费。大家都不想付小费怎么办?结果就是大家都延迟服务。总有希望尽快获得服务的去付更多的小费!

对比特币区块链的误解

这是一篇文章《蚂蚁金服CEO:区块链或在1年内泡沫破灭,我们不碰ICO》,这篇文章信息并不多,我对它非常赞同。

现在大家一窝蜂涌向区块链,完全是傻炒概念,绝大多数人对区块链的理解就是各种币,这是极其肤浅的。

区块链不是比特币!区块链是构建互联网信任机制的一种基础设施。关键就是这个 “信任模型”,几千年来我们的文明社会已经进化到不需要权威认证就可以放心从邻居那里借扳手,从小店那里买可乐。但是互联网世界还不行,然而以后当你完全使用了区块链就可以了。

接近 90% 的跟风者完全不懂区块链的设计原理和理念,剩下的 10% 中又有 80% 以上的人仅仅知道各种操作,知道几个项目,就像很多“会写一手好inet socket程序代码的完全不懂网络”的人一样。

明眼人自古没几个。我也不是自诩自己就很懂比特币区块链,但至少我是系统研究过某些算法细节的,算法是怎么起作用的,有兴趣咱们可以共同讨论一下以发现一些新东西,而不是一窝蜂炒作就想着投机赚钱,如果连是什么都不懂,根本谈不上要怎么做。

为什么现在大家一窝蜂的冲着各种币而来,因为现如今这些东西都不是货币,它们具有货币的属性,却不是货币,它们简直就像值得投资的商品,它完全不像菠菜,洗发水那样。即便你说 100 年后我的后代会用比特币买可乐,但这跟我没关系啊,我的目标是 100 年后让我的后代去卖可乐赚钱!很显然,我现在要不惜一切手段去搞钱,比特币是个途径!但这种投机稀释了比特币的货币属性。

如果 90% 的人都是肤浅的人,另外 10% 的人还装什么高尚呢?

有什么不一样

比特币靠一种共识机制做到了去中心化。但是和中心化相比,有什么不一样呢?

没什么不一样。你觉得耗费那么多的电力去计算一个数学难题仅仅为了确认几笔交易这样做很浪费,那么请解释:

  • 银行气派的大楼要花多少钱?是不是随便一个砖棚场所就能完成同样的职能?
  • 银行雇员穿着昂贵的套装,开着豪车,领着高薪,这笔钱够支付多少电费?

同样的损耗,为什么银行的大楼以及雇员成本就可以让人觉得理所当然呢?

只要你耗费了能量,你就必须接着损耗。熵的流向是不会变的。你造了豪华的房屋就必然要花费更多的财力和精力去维护,不然它就还是会朝着高熵体前进,最终成为一片废墟…换个思路,如果你把造豪华大楼的能量平铺到了整个 P2P 网络,这就是区块链最振奋人心的发力之处,详情请了解矿池的概念。

如果你想通过献血保持新陈代谢,又不想让自己的血用于他人,那么你自然可以想办法让卫生无毒的针管抽取你足量的血液后,将它倒掉!

危机

量子计算如何应对

我们再次回顾一下比特币系统所依托的技术因素:

  • 数字签名技术
  • 哈希技术

之所以不谈社会学这种非技术因素,是因为我认为人的心智在几千年甚至几万年都没什么大的改变。我之所以存在,可能是因为在我的祖先还是野人的时候,杀了自己的族人吃到了救命的食物,这种事,在我们的身边依然在上演,是为卡涅阿德斯船板…

我们的非对称密码技术,哈希技术所利用的数学难题完全建立在线性的现代电子计算机基础之上,万一量子计算机出现怎么办??量子物理本身就是非确定性的,本身就是概率的,它可以并行化,它可以生死抉择一瞬间而双赢,它不再需要一个接一个地去尝试 nonce 去解决比特币区块链的那个数学难题,它可以一瞬间将它解决,它可以同时尝试很多的数字,然后观测分布。

量子计算便可以打破所有基于现代密码学的一切假设。不过,在技术之外还有强大的非技术力量,这给了我们一点时间。

通缩

和通胀前大家拼命要把手里的钱花出去相反,紧缩型货币会抑制消费吗?毕竟明知道这个货币的绝对总量会越来越少(再过 100 多年,比特币将不再发币,然而期间可能会由于丢失,发送到黑洞地址造成比特币损毁…总量会减少),肯定会升值,与其花出去,不如留着啥也不买!

假设百年以后,全世界的统一使用比特币,假设比特币还是一如既往地失而不能复得,怎么办?

个体死亡如何应对

公钥/私钥对是和其它的公钥私钥对无关联的。如果一个人突然死亡,其子女如何证明其有权持有死者的公钥私钥对,即便法律上认可这种继承,技术上如何实现?

与因特网同根生

1990 年代因特网刚兴起的年头,是不是跟现在很像呢?更早一点的例子,就是 TCP/IP 分组交换网络,当人们第一次抛弃电话网络中心的时候,世界就已经走上了去中心化的不归路,且越走越远!

这里写图片描述
浙江温州皮鞋湿,下雨进水不会胖。

  • 46
    点赞
  • 179
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值