- A+
飞哥导读:
用户通过钱包转账产生UTXO交易发送至比特币网络,旷工节点通过所谓的挖矿(PoW)把交易写到区块中,然后同步到比特币网络。一般10分钟产生一个区块,区块形成了一条链。
当某个挖矿节点首先完成PoW产生一个区块后,挖矿节点的账户(类比银行卡)会获得网络奖励的比特币以及转账的收费费。
比特币网络底层通过椭圆曲线算法、哈希、博弈论(共识算法)来确保整个区块链的安全的。
来源:公众号Linuxer
全文有删减
总述
比特币的核心我认为就三个,分别属于以下三个范畴:
数字签名技术
签名和验签利用离散对数难题(针对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网络,在你转账给某人到全网确认共识的时刻,时间并不确定,甚至说,当你转账给某人时,此人并不一定在线,他自己便无法证明自己是自己。这件事在现实中很麻烦,但是在网上就很简单,只要拿出私钥check一下即可,然而实时确认有个前提,即双方必须同时在线,然而这并无法保证。
不管你将锁定和解锁理解为钥匙和锁的故事,还是古时候皇帝和将军之间对虎符的故事,其实都差不多,都是在证明自己拥有某种能力或者属性,对于比特币,总结一句就是:
花钱的时候,必须先解锁这笔封存在区块链里的钱,再上锁发往它的目的地。依此循环不止,整个世界的比特币交易从中本聪创世开始,输入/输出的解锁/锁定关系就形成了下面的有向无环图:
注解:锁定与解锁脚本
在上面的解释中,我为了方便,使用私钥签名,公钥验签来说明了解锁的锁定的过程,在比特币的实现中,这实际上是由一种叫做脚本的东西完成的。
注意,这里说的脚本并不是类似Linux bash那样的脚本,而是一种简单的虚拟机语言,类似JVM那般,它内置了一个微型的指令集,可以执行诸如数值运算,比较,签名验签等简单操作。
所谓的解锁操作,其实就是将解锁脚本和之前的锁定脚本拼接在一起,并且执行它,如果结果为TRUE,则认为可以解锁成功。由于本文只是一个科普性质的简介,这里就不再赘述细节了,详情请参看网上汗牛充栋的其他人写的介绍。
引入区块链
到目前为止,我来总结一下要想让这个系统运行起来的要点:
花钱时要解锁输入
能花的钱来自于之前别人或者自己(找零的情况)针对自己的一个输入,该输入针对自己上了锁,自己必须解锁才能证明自己可以拥有这笔比特币。
花钱时要锁定输出
输出输入是衔接的,锁定输出是为了确保只有收款人才能解锁,如果锁定时使用的锁不正确,这笔钱要么转入陌生人账户,要么转入黑洞被销毁。
输入/输出组成的交易单不能被篡改
这是核心!核心!核心!UTXO其实并不物理存在,它衍生自交易单,如果交易单可以被随意篡改,那么这个系统将失去公信力,完全不可用,如何保证交易单的权威性呢?
将所有的交易单交给中央银行是一个不错的选择,或者至少交给一家靠谱的商业银行也不错,这确实是我们使用了几千年的方法,完全依赖一个中心机构或者个人来调解一切,现在比特币系统采用了一种完全不同的思路,即去中心化。
忘掉UTXO,忘掉交易单,还是从需求出发,我们的目标是:
既有的交易不能抵赖,即备案
自己钱包里的钱未来确实可以花出去,即承诺
该区块链登场了!
区块链技术之所以可以完美Cover比特币面临的各种问题,其解决方案并不是纯技术的,而是采用了一种社会学博弈的激励措施,这些措施形成了一种典型的负反馈效应,最终让作恶变得成本高昂。
先看看什么是区块链:
嗯,是个吊链树结构,Intel的网卡队列也是这么设计的…这种环环相扣的结构,使得在这种链条形结构中稍微修改哪怕一个比特,都会牵一发而动全身,也许你会说,大不了我就一改全改呗,那你就错了。我们说哈希技术解决了这个问题,是因为每生成一个区块都是在付出高昂代价解决一个数学难题:
这意味着任何人无法修改区块链中每一个比特,如果你真的这么做了,就意味着你要把上图中的数学难题解答n遍,这里的n指的是从修改的区块到当前的最新的区块的区块数量,解答一次这个难题就要消耗巨大的成本,何谈解答n遍…
简单解释一下这个题为什么难。
考虑数字0X00FF,它生成的概率有多大?对于一个16位的数字,要求它的高8位为0,低8位无关紧要。运用排列组合和概率相乘就能解答:
这种问题非常难,需要你花钱买昂贵的硬件,并且日夜不停运行赌概率,这意味着除了买硬件你还要交电费,长期的运转产生不可忍受噪音意味着你需要要么把设备搬到一个无人区,要么自己买一套别墅利用它的地下室…
我们来看看区块链是怎么保护交易单的。把上面的那个图放大了看,我们看一下每一个区块里面都包含了什么:
我们看到,区块链中的每一个区块实际上是若干个交易单的容器,到底是多少个取决于效率和消耗之间的权衡。如果每一笔交易都要用掉一个区块,总体消耗就会非常大,如果1亿个交易单用掉一个区块,等待确认的时间就会非常久,所以呢…区块里包含了交易单据,这意味着你无法修改交易任何已经被区块纳入的交易单据。
然而区块是如何纳入交易单据的呢?
比特币挖矿
当你生成一张交易单据并且广播至全网时,世界上可能很多人都在这么做,也就是说,交易单是在源源不断地生成的。与此同时,在世界的某些角落里,总是有勤劳的比特币矿工在搜罗这些交易单,将其纳入自己生成的一个区块并将该区块链接到唯一的区块链上。
我们知道,只有交易单被纳入到了区块链以后,它才是有公信力的,是安全的,它才会因此而产生价值,而正是这些比特币矿工在试图将其纳入区块链,它们确实在挖掘一些可以产生价值的东西,所以说,他们确实在挖矿。
就像《闯关东》里面演的那般,你越勤劳,越肯冒险,付出越多,就越有可能得到高额的回报,注意是有可能,同时也有血本无归的风险,这是一个概率问题。和《闯关东》看起来不一样的是,那些淘金客淘到的金子自己可以保留一些,那么比特币矿工勤劳解决数学难题挖掘区块的动机是什么?
答案非常明确,技术解决不了的问题,经济学来接力:
挖矿会有确定的比特币奖励
中本聪设计,为了彻底远离中心化,比特币的发放不是集中的,而是按照每4年为半衰期逐步发放,这保证了两点:
比特币终究有一个总量,即它会发放完毕
在比特币发放完毕之前,每一个出块的矿工都会得到发放额的比特币奖励
挖矿会得到交易小费
如果交易者好心,同时也是为了自己优先得到矿工的服务,即他希望自己的交易单优先被确认纳入到区块链,交易者给点小费是应该的。比特币系统规定,一张交易单的所有输入和所有输出之间的差额即小费,一个矿工出块后,该区块包含的所有交易单的小费即交易费,归该矿工所有。
貌似问题解决了,然而,矿工们与其如此打工,不如来点小动作赚的更多。抛开人与人之间勇气和胆量之间的差异,假设所有人都一样,到底是什么在抑制这些小动作的发生呢?是技术难题在阻碍吗?
我认为,技术问题是最简单的问题,要说难,社会学才更难,心理学则最难。以上这两者均可以归结为经济学问题:我干坏事我能得到什么好处呢?
社会学博弈论
去中心化最根本的特征在于,消除了信息的不对称!而犯罪的根源则在于,利用了信息的不对称。推而广之,越是扁平化的结构,在空间维度上就越不容易看到系统内的低熵体,但是多给点时间,低熵体必然会出现,我认为,低熵体来自于时间维度,而不是空间维度!扁平化的结构越大,低熵体形成的就越快,因为盘子大了,乌合大众供给的能量就越多…
如果你和我知道的信息一模一样实力相当,我便不会铤而走险去做损你利我的事情,因为这是最差的选择!Why?
如果你是个诚实的人,那么我能得到利益,但这对我来讲是唯一的好事情,如果你跟我一样龌龊,那么我们两败俱伤,如果你比我更龌龊,我净赔本。算算概率,合算吗?反之,如果我们均遵守规则,我们便可以得到稳定的收入,这既是双赢,也算利己!
这并不是一个零和的游戏,话说比特币的技术原理以及激励机制助力了博弈的偏向,人们自然而然会为了这种激励带来的利益去做诚实的事情,不是因为人之初性本善,而是因为:
做诚实的事情相比作恶更简单-技术因素
做诚实的事情可能会得到奖励-非技术因素
哈哈,很帅,不需要惩罚!
比特币到底如何抵御攻击
比特币在设计之初就希望在不动用警察军队等暴力机关的前提下让攻击者自己觉得攻击毫无意义。事实上它确实做到了。
接下来面对技术痴汉这些,所能采用的手段只能是技术手段了,这里不再赘述,详见其它的文章或者我去年写的这篇:
《比特币与区块链的大众科普文》中的“区块链技术如何避免攻击”一节:https://blog.csdn.net/dog250/article/details/68649002#t9
这里仅仅举例说明几个典型的攻击行为:
偷取比特币
别人转给他的钱必须有私钥方能解锁花费。
伪造比特币
任何比特币不能无中生有,来源就两个!伪造者将无法解锁。
比特币世界的负反馈
比特币系统构成了两个负反馈系统,我仔细想了一下,嗯,是的。
挖矿收益负反馈
是的,有人投资了大量的矿机,希望通过挖矿来获得收益,这本身无可厚非,比起那些买房不住以及炒股散户来讲,做比特币矿工高尚多了!但高尚的代价就是收益薄。如果挖矿的收益还不足以负担电费,谁还挖矿?如果过挖矿的收益远高于电费,便会吸引大众前来,此时便会降低每一块出块的收益,要知道,你花费的可是现实中的货币啊,它和比特币的汇率一直在抖动!!就像淘金热的社会,黄金更多作为一种商品而不是货币一样的道理。因此,挖矿的收益将会越来越不显现,红利期早已过去。
交易费负反馈
100多年以后的2140年之后,比特币发放完毕。此后做矿工还有意义吗?毕竟金子已经没有了!十分有意义,因为比特币矿工挖取的不仅仅是比特币,而是价值!如果再也不发放新币了,那就只能赚取交易小费了。问题是大家都不想付小费怎么办?结果就是大家都延迟服务。总有希望尽快获得服务的去付更多的小费!大城市闹市区路边摆个摊,说,谁先来我给谁个棒棒糖,你信不信会有一大帮穿着西装皮鞋的体面人士去抢,人,就是这样,总想比别人强比别人快,哪怕自己明明不喜欢吃棒棒糖。
对比特币区块链的误解
这是一篇文章《蚂蚁金服CEO:区块链或在1年内泡沫破灭,我们不碰ICO》,这篇文章信息并不多,我对它非常赞同。
现在大家一窝蜂涌向区块链,完全就是冲着概念,完全被带傻了,绝大多数人对区块链的理解就是各种币,这是极其肤浅的。
区块链不是比特币!区块链是构建互联网信任机制的一种基础设施。关键就是这个“信任模型”,几千年来我们的文明社会已经进化到不需要政府的认证就可以放心从邻居那里借扳手,从小店那里买可乐。。。但是互联网世界还不行,然而以后当你完全使用了区块链就可以了。
接近90%的跟风者完全不懂区块链的设计原理和理念,剩下的10%中又有80%以上的人仅仅知道各种操作步骤,知道几个项目,就像很多“会写一手好inet socket程序代码的完全不懂网络”的人一样。
觉得自己知道几个“币”就自诩自己站在了风口的,无异于自己会调socket API就说自己精通网络编程的人一样,极其令人反感。
明眼人自古就很少没几个。我也不是自诩自己就很懂比特币区块链,但至少我是系统研究过某些算法细节的,至少我知道那些个共识,算法是怎么起作用的,有兴趣咱们可以共同讨论一下以发现一些新东西,而不是一窝蜂炒作就想着投机赚钱,如果你连是什么都不懂,根本谈不上要怎么做。
为什么现在大家一窝蜂的对诸如比特币之类的各种币有感,那是因为现如今这些东西都不是货币,它们具有货币的属性,却不是货币,它们简直就像商品一样,并且还是跟我们的日常生活毫无关系的商品,它完全不像菠菜,洗发水那样,甚至它都不如股票真实。即便你说100年后我的后代会用比特币买可乐,但这跟我没关系啊,我的目标是100年后让我的后代去卖可乐赚钱!所以,很显然,我现在要不惜一切手段去搞钱,嗯,比特币,是个途径,get it!无懈可击!然而我怕这种投机毁了比特币。
如果90%的人都是肤浅的人,另外10%的人还装什么高尚呢?
有什么不一样
比特币靠一种共识机制做到了去中心化。但是和中心化相比,有什么不一样呢?
其实,没什么不一定。如果你觉得耗费那么多的电力去计算一个数学难题仅仅为了确认几笔交易这样做很浪费,那么请解释:
银行的大楼为什么都盖的那么气派?要花多少钱?是不是随便一个能遮风挡雨的场所就能完成同样的职能?
为什么银行的雇员都穿着昂贵的套装,开着豪车,领着搞出平均工资好多倍的薪资?这笔钱是不是能省下?
同样都是毫无意义的损耗,为什么银行的大楼以及雇员的装备就可以让人觉得理所当然呢?这就是思维定势。
只要你耗费了能量,你就必须接着损耗。熵的流向是不会变的。你造了豪华的房屋,你就必然要花费更多的财力和精力去维护,不然它就还是会朝着高熵体前进,最终成为一片废墟…换个思路,如果你把造豪华大楼的能量平铺到了整个P2P网络,这就是区块链最振奋人心的发力之处,详情请了解矿池的概念。
如果你想通过献血保持新陈代谢,又不想让自己的血用于他人,那么你自然可以想办法让卫生无毒的针管抽取你足量的血液后,将它倒掉!
危机
量子计算如何应对
我们再次回顾一下比特币系统所依托的技术因素:
数字签名技术
哈希技术
之所以不谈社会学这种非技术因素,是因为我认为人的心智在几千年甚至几万年都没什么大的改变。我之所以存在,可能是因为在我的祖先还是野人的时候,杀死了自己的兄弟吃到了救命的食物,这种事,在我们的身边依然在上演,是为卡涅阿德斯船板…
我们考虑技术因素,因为技术每过很短一段时间就会发生质变,且间隔貌似是指数级缩短的!从旧石器到新石器十几万年,从新石器到农业革命一两万年,从农业革命到工业革命几千年,从工业革命到信息革命一百多年,然后就是我们现在了。我们是如此的看好比特币,看到AI,看好我们当代这些所谓的大师大牛们想到的一切,殊不知这些依然是建立在前一代文明的根基上的优化或者改进,如果放到了下一代文明中,将会在触摸式打击下,灰飞烟灭。
这绝对不是危言耸听。你看看美索不达米亚或者埃及的新石器文明面对青铜文明时,商面对周时,迦太基面对罗马时,哥特面对阿拉伯时,美洲人面对欧洲人时,准噶尔面对清军时,清军面对欧美日时的那种怂样,这是时代的对抗!我就不信这种日光之下意在上演的故事会在我们的时代终结。
我们的非对称密码技术,哈希技术所利用的数学难题完全建立在线性的现代电子计算机基础之上,万一量子计算机出现怎么办??量子物理本身就是非确定性的,本身就是完全玩概率的,它可以同时干很多事情,它可以生死抉择一瞬间而双赢,它不再需要一个接一个地去尝试nonce去解决比特币区块链的那个数学难题,它可以一瞬间将它解决,因为它可以同时尝试很多的数字,然后观测分布即可。
量子计算便可以打破所有基于现代密码学的一切假设,为什么不恐慌呢?不过,在技术之外还有强大的非技术力量,这给了我们一点时间。
通货紧缩如何应对
和通货膨胀前大家拼命要把手里的钱花出去相反,紧缩型货币会抑制消费吗?毕竟明知道这个货币的绝对总量会越来越少(再过100多年,比特币将不再发币,然而期间可能会由于丢失,发送到黑洞地址造成比特币损毁…总量会减少),肯定会升值,与其花出去,不如留着啥也不买!
如何破局?假设百年以后,全世界的统一货币就是比特币,假设比特币还是一如既往地失而不能复得,怎么办?
个体死亡如何应对
公钥/私钥对是和其它的公钥私钥对无关联的。如果一个人突然死亡,其子女如何证明其有权持有死者的公钥私钥对,即便法律上认可这种继承,技术上如何实现?敢问穿西装的人能破解ECDSA吗?