zoukankan      html  css  js  c++  java
  • 大白话看懂区块链

            为了能够更加深入的理解区块链的概念和优势,我们先从2008年的金融危机说起。

            众所周知,08年全球金融危机是由美国的次贷危机引起的。次贷指的是将钱借给次贷按揭贷款人,因为次贷人本身的资信状况就很差,还不起房债,违约的事也就很容易发生了。与此同时,金融界推行各种3A高评级(实际上评级也是一种金融交易,并不真实)的打包 Synthetic CDOs 产品,这些打包金融产品混杂着各种低评级的产品一起抛售,购买者以为购买的是“权威”,实则自己并不能看到现实。因此当泡沫被戳破,信贷环境也发生改变,尤其是作为国民经济支柱的房产价格下降,放贷机构想要通过再融资,或者把抵押的房产收回再卖出去,就不能实现,或者很难,或者亏损。而此类事件大规模地、集中地发生,那么危机就出现了。

            如果大家想对此有更进一步的了解,可以观看电影《大空头》,空头在这里指股票交易中看跌行情,做空交易。这里也感谢相关专业的同学提供的理论帮助。

            为什么要先从金融危机说起呢?因为传统货币、银行之类的信贷机构,其本身就存在着一些弊端。传统货币可能会因为各个国家的货币政策宽松程度产生较大幅度的变动,小则影响各国之间的税率,大则影响全球的金融平衡。08年的金融危机正是由于美国货币政策长期坚持低利率的走向,导致了房产价格持续走低。另一方面,银行之类的信贷机构可以没有存款,直接将钱借给有信用的人,从而获利。而新生成的钱,本质上都是债务,一旦资金流出现了问题,银行也就即将面临危机。中央银行必须让人们相信它不会让货币贬值,银行必须让人们相信它能管好钱,而这在历史上看来可信度很低。

    前言

            在这里我们需要明确两个前提,第一,这里只是借用银行本身的缺陷来引出区块链,所有的事物也都不是十全十美的,我们不否认银行的社会贡献和价值。第二,区块链不等于比特币,比特币只是区块链的一个具体的应用,区块链是比特币系统的基础构成。

           回过头来,我们再看区块链的定义:区块链本质上是一个去中介化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一次比特币网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。下面,我们通过区块链的一个重要实现——比特币来体会区块链在实际应用中是如何工作的。

     

    一、比特币系统

            既然比特币系统是由一笔笔交易连接起来的区块链组成的,那么交易的最初价值——货币,从何而来?比特币中规定,所有的“货币”都是由“挖”出区块而来的。那什么又是”区块”这个实体,怎么挖呢?区块,正如上面所说,是一笔笔交易连接起来的实体,这个区块不能是无限大的,每创建若干比交易便会存储在一个新的区块中,然后将这个区块加入到原来长的区块链中,使得这个无限长的交易链是分块的。在比特币系统中,这个区块的存在形式是一串字符(数字和字母组成),而且区块的产生是有一定的约束条件的,也就是说产生一串符合要求的字符串是不容易的,或者应该说是很难的,这在比特币系统中成为工作量证明。在计算机中,这样的难度体现在让计算机不停的计算,不断地消耗电能和CPU功耗,在机器付出了相当的代价(这个代价是非常巨大的)之后,这个块终于被“挖”来了。作为奖励,因为这个区块产生了,便会创造出一定数量的价值——比特币,这些比特币的所有者就是将区块“挖”出来的人,我们称之为“矿工”。

            那么问题又来了,这个比特币如果不停的创造出来,那现有的币的价值岂不是会不断地缩水?答案是不会的,比特币的总量是一定的,固定为2100万个,初始矿工奖励为25个比特币(其中仅第一个创世区块的奖励为50个比特币,给予比特币的创始者中本聪)。之后每挖出21万个区块后奖励减半,其中比特币最小单位为1聪,相当于人民币中的分,价值不可再分。系统动态的控制挖矿的难度,平均每10分钟挖出一个新块,整个比特币系统中的比特币均以挖矿酬劳的形式给出。也就是说,预计到2140年,会产出所有的2100个比特币,总量也将不再增长。

            如果你是矿工,你会问到:如果比特币都挖完了,那矿工是不是会罢工?为了提高矿工挖出区块的积极性,比特币系统为每笔交易设置了一定金额的基础酬劳,用户也可以在此基础上增加自己交易的小费,以便矿工能更早的打包自己的交易,尽早完成这笔交易。这里说的打包,指的是将交易信息存储到区块链中,这一步操作并不那么容易。正如上面所说,预计在2140年左右将会挖出全部的2100万个比特币,届时将不会再有新的比特币产生,矿工挖”矿“(区块)的报酬将全部来自于打包交易的小费。

            接下来的问题就是矿工除了挖矿,还有其他责任吗?是不是挖出矿之后就可以万事大吉了呢?并非如此,矿工对自己挖出的区块需要提供后续的服务,包括打包用户的交易、验证用户的交易是否在自己的块中(暂且可以理解成对比这一串字符是否一致)。比特币系统为了防止矿工开溜的现象,规定这笔挖出区块的奖励在矿工打包5笔交易之后再给到矿工,而且矿工既然已经挖出了区块,维护下去的可收益性显然是更大的,毕竟自己的钱也是在区块中。

            至此,我们对基于区块链的比特币系统 有了大致的了解。总结一下,就是用户提供一笔交易,矿工挖出新块打包用户的交易,并以字符长串的形式加入到原先已有的区块链中,区块链无限延展,但系统中所有比特币总量是一定的。如果大家还有什么不理解的地方,欢迎在评论区留言,我会及时更新博客中第一部分的内容,争取能够在第一章对系统运作和规则有一个大致的了解,方便后续内容的展开。

     

     二、比特币的优势

            在基本熟悉了比特币系统的运作模式,我们来分析一下以区块链为基础的比特币有哪些优势。

       它是去中心化的,每个人都可以参与到区块的生态中去。所谓的去中心化,一方面不是说所有人都拥有“权力”就是去中心,在我们可接受的范围内让“权力”足够分散,使得系统整体不是“中央集权”的独裁形式,这就实现了区中心。另一方面,并不是每个人都需要有“能力”来拥有这样的“权力”,只要拥有“权力”的人能够正当行使“权力”即可。例如在比特币系统中,不是所有人的计算机都有足够的计算能力来产生和维护区块的。这样一来,有了去中心化的特性,我们便不用担心银行在处理账务的时候“一枝独秀”,因为这个账务是公开透明的,每个人都可以随时看到。

       它是分布式的虚拟货币,区块链中存储的不是货币,而是一条条交易记录,比特币如何将“货币”融入区块链中的知识我们将在后面谈及。正式因为这一条条累加起来的交易记录,保障了用户的金钱不会凭空消失,之前的交易也可以回溯,保障了交易的安全性。加上比特币系统是活跃在因特网上的,具备了全球流通的货币基本特性,用户不需要正真拥有一个钱包来存储这些币,需要用币的时候,只需要验证自己有币在之前的交易链中即可。

            除此之外,安全性是比特币系统的一大卖点,接下来让我们重点讨论这在比特币系统中是如何实现的。那么既然是大白话看区块链,我们不会深入方法的具体内容,但是还是会出现的一些非常基础的概念。如果你只是需要知道比特币是什么,怎么运作的,那么上面的内容已经足够了。

     

    ------------------------------------------华丽丽的分割线:区块链基本知识普及结束----------------------------------------

    1.匿名性

            如何保证匿名性,即在公开透明的区块链中,如何保障用户不会被追根溯源。这一点很重要,设想如果你进行了一笔巨额交易,不法分子通过全网的交易记录可以找到你的ID,并对你进行跟踪,这是非常危险的一件事。比特币中利用一种盲签的数字签名方法,顾名思义,盲签是不需要看到具体内容来确让身份的。

            首先,我将介绍交易在区块中的具体实现。存储一笔明确的交易,我们需要哪些信息?交易日期、交易者(付款者和收款者,现实中这里可以是多个人)、交易金额三各方面就能够实现。我们将这些信息数字化之后,就得到了一个包含字母和数字的长串。这些长串可能长度不一,包含的字符的范围也可能不一致,区块链中运用一些规则将这些长串规范起来。大家熟知的,我们数学计算中用的是十进制规范,计算机中用的是二进制规范,而在比特币系统存储信息用的则是十六进制规范,这样一来字符的范围就确定下来了,包括0~9和a到f。数据范围固定了,接下来要固定数据长度,这里用到的是哈希算法,哈希算法实际上就是一系列数学公式,最后对于相同的输入会得到固定长度相同的输出,而且如果仅仅改变输入的某一位,结果的变化会是非常巨大的。这一点保障了别人无法通过结果反推出输入信息,结果足够随机,具有隐藏性。此外,在我们平常输入图像验证码时,试尝混淆数字0和大写字母O,小写字母l和大写字母I等,这里运用了Base58的哈希算法,将输出结果剔除了这些字符,得到更加友好的输出结果。

            在得到区块中交易的表现形式之后,我们就可以对数据进行加密,实现匿名了。比特币系统中,每一个用户将会创建一对公私钥对,即一个公钥和私钥,公钥别人可见,私钥仅自己可见,并且可以根据私钥用数学公式计算出公钥,而公钥无法回推出私钥。一对公私钥对也是一串固定长度的字符串,他们就相当于我们保险柜的锁和钥匙,一般公钥加锁,私钥解锁。那如何加密的呢?还是运用到了我们之前说的哈希计算,将我们要处理的信息和公钥一起通过规定的哈希函数进行数学计算,得到的与原来字符串相同长度且完全不同的串,便是加密后的信息。解密,同样只需将加密后的信息和私钥一起通过规定的哈希函数进行数学计算即可,只是这一个加密一个解密的哈希函数,是我们人为设置好的而已。在比特币系统中,交易的发起者(花线的人)拥有私钥,可以对自己的交易加密,其他的人都可以知道这个人的公钥,随时对信息进行验证。

            大家可能会疑惑,如果大家都知道公钥,岂不是都可以得到加密前的信息,信息不也就公开了吗?这里所说的其他人同之前解释的去中心化一样,大家都有机会成为中心,但是不用每个人都用成为中心,同样,也不是每个人都有能力成为中心。比特币系统中,只有矿工需要干“苦力”,他们是通过复杂的计算来验证交易是否存在、是否合理的。所以,普通用户看到的信息也只是一个数字长串,如果需要验证,可以告知矿工来帮助验证,当然,验证也是要收取小费的,验证的形式也就是一笔新的交易。

    2.共识机制

            让我们来思考一下现实生活中实际纸币的优势在比特币系统中能否继承。现实生活中,只要你给钱了,对方收钱了,交易即完成了,而在比特币系统中,交易完成的标志是交易所在的区块被加到长长的区块链中。如果有人发起恶意攻击,收买了矿工,不将你的交易打包到块中,是否会得逞呢?(拒绝服务攻击)答案是不会的,因为即使你收买了一个矿工、两个矿工,而全网中还有非常多的矿工在工作,他们会根据实际情况(交易小费的多少)来依次将交易打包。除非攻击者收买了51%以上的矿工,如果仅仅是为了不打包你的交易而这么做,开销是非常巨大的。

            纸币的另外一大优点在于,我有没有钱取决去我有没有纸币,如果我将纸币付给了一个人,我便不能够付给另一个人了(双重支付攻击)。而在比特币系统中,只要新的区块没有被连接进区块链,交易也就没有完成。此时,如果有人想要进行二次交易是否能行呢?这点虽然有概率发生,但是完全可以避免。首先介绍下比特币网络的共识机制,由于网络传输的时间问题,每个矿工看见的长长的区块链是不同的,不同之处仅在于末尾,一段距离上次达成共识后新连接的若干区块。矿工们达成一致的规则很简单,哪一条区块链最长在哪一个后面加上自己新挖出来的区块,由于绝大部分矿工是诚实可靠的,在这样的规则下,区块链会沿着正确的方向增长。接下来让我们看看该如何避免呢,从概率学的角度,我们只需要在自己的交易打包完成后等待区块链后又新增加了6个交易之后,与另一方确定交易完成了即可。此时,全网的矿工大部分已经达成了共识,自己的交易所在的区块链已经成为最长的那一条,其余的链则会被抛弃。

    3.轻量级

            如果交易不断地加入区块链中,显然这个数据量是非常庞大的,一般用户的电脑存储空间是不足以支持的。在比特币系统中,同样这样的“累活”是由矿工完成的,普通用户只需要存储交易的部分数据即可,我们暂且可以理解成交易的ID,这个ID是唯一的,而且是由具体的数据通过哈希计算生成的,而交易大部分具体内容我们是不需要存储的,需要时便可以直接向矿工请求验证即可。

    4.钱包管理

            现实生活中,如果一个人有着习惯的消费方式,例如喜欢在下班的时候在某一家便利店买牛奶,这样别人一旦知道这个时间这个地点有一个来买牛奶,这个人很可能就会是你,你的匿名性也就无法保障了。针对这个问题,比特币系统可以根据我们现有的一对公私钥对生成很多随机的子公私钥对,实现一个交易用一个公私钥,真正实现了来无影去无踪。此外,你可能会觉得公私钥对这一长串字符我无法记住,助记词可能会帮助到你。为了更好的记住这一长串的公私钥对,比特币钱包可以对这些字符进行哈希计算,得到固定长度的二进制0/1字符串,然后每11个0/1字符是为一组,这样11个0/1字符共有2^11种情况,我们预先给这2^11种情况赋予一个英文单词,这样对于不同的公私钥对,我们就可以转换为记住一些英文单词即可,简单方便。

            看到这里,你已经熟悉了比特币系统的大部分重要概念,对于很多细节的理解,还需要更深一步的探究,这里就不做讨论了。

     

     三、区块链的其他应用

            最后,让我们来看看区块链的其他应用。

            比特币被称为区块链1.0,是区块链成功的案例之一。以太坊作为区块链2.0,在区块链1.0的基础上,对比特币系统的某些规则进行了完善和扩展,其中最突出的成就是引入了智能合约的概念,智能合约是一些区块链开发代码(如Solidity,Go等),它将规则和操作写进了代码中,从而避免一些危险攻击,实现真正的虚拟化。同样,以太坊也不是完美的,代码的严谨性和系统的规则也可能在未来被不法分子有机可乘。EOS(Enterprise Operation System)是区块链3.0之作,EOS有点类似于windows、Linux之类的操作系统平台,通过创建一个对开发者友好的区块链底层平台,支持多个应用同时运行,为开发dAPP提供底层的模板。

            基于区块链还有很多好玩的游戏项目,比如区块链养猫游戏CryptoKitties、以太工厂EtherGoo、以太机器人EtherBotS等等。总之,区块链还有很长的路要走,整个区块链生态的规范化也需要不断完善。

     最后再说一些

           后续有很多朋友问我,既然区块链的概念这么好,为什么比特币价格却一跌再跌,很多人对之并不看好。对此,我个人认为,区块链概念固然是好的,只是一个好的概念需要找到一个合适的切入口来进行落地,比特币作为区块链1.0虽然带来了很多的惊喜,但是其不足之处和存在的安全隐患仍旧让大多数人报之以怀疑的态度。

            一方面,任何新生事物的成长都是要经过艰难曲折的,现如今硬件技术的支持和信息安全行业的发展并不能满足区块链的应用与发展。另一方面,目前市面上很多区块链应用都是来蹭区块链这一淘金热的,正如《大空头》中无奈的资产评级员反问早早发觉房产破灭信息的“救世主”们:你们的所作所为难道不也是为了赚更多的钱吗?回到之前说的话,区块链概念本身是好的,我们不能因为一些初期的“失败”和一些我们看不惯的行为而去否认它。如果未来区块链能够找到合适的切入口,以一个全新的角色进入人们的视野中,毋庸置疑,它将给人类社会带来巨大的信息化转变。 

    更多详细内容可以参考郭老师的知乎专栏: https://zhuanlan.zhihu.com/bitcoincourse

    比特币创始人中本聪的比特币白皮书:       https://www.8btc.com/wiki/bitcoin-a-peer-to-peer-electronic-cash-system/

    Ethernaut智能合约安全演练试题集:     https://ethernaut.zeppelin.solutions/

    基于Solidity的智能合约在线编辑:         http://remix.ethereum.org/

  • 相关阅读:
    js数组元素的添加和删除
    jquery中prop()方法和attr()方法的区别浅析
    jquery选择器 之 获取父级元素、同级元素、子元素
    jQuery 序列化表单数据 serialize() serializeArray()
    Awesome Python,Python的框架集合
    关于树莓派HDMI转VGA线接显示器黑屏
    python爬虫xpath的语法
    爬虫下载百度贴吧图片
    项目经理的磨练(2) 科学的安排项目日程安排
    项目经理的磨练
  • 原文地址:https://www.cnblogs.com/matthewhuang/p/9980223.html
Copyright © 2011-2022 走看看