最新比特币价格-比特币今日行情价格_比特币交易网

快速理解区块链的原理

佚名

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

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

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

总述

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

账户与钱包

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

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

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

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

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

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

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

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

比特币交易

那么,什么是 UTXO 呢?先看个图:

比特推算币公钥私钥区别_比特币私钥推算公钥_比特币私钥计算公钥

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

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

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

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

下面的图示展示了上面的论述:

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

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

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

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

不管你将锁定和解锁理解为钥匙和锁的故事,还是古时候皇帝和将军之间对虎符的故事,其实都差不多,都是在证明自己拥有某种能力或者属性,对于比特币,总结一句就是:

花钱的时候,必须先解锁这笔封存在区块链里的钱,再上锁发往它的目的地。依此循环不止,整个世界的比特币交易从中本聪创世开始,输入/输出的解锁/锁定关系就形成了下面的有向无环图:

比特币私钥计算公钥_比特推算币公钥私钥区别_比特币私钥推算公钥

注解:锁定与解锁脚本

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

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

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

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

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

引入区块链

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

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

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

区块链登场了!

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

先看看什么是区块链:

比特币私钥推算公钥_比特币私钥计算公钥_比特推算币公钥私钥区别

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

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

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

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

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

比特币私钥计算公钥_比特币私钥推算公钥_比特推算币公钥私钥区别

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

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

比特币挖矿

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

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

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

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

比特币终究有一个总量,即它会发放完毕在比特币发放完毕之前,每一个出块的矿工都会得到发放额的比特币奖励

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

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

社会学博弈论

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

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

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

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

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

比特币到底如何抵御攻击

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

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

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