前段时间写零知识证明的文章,有个盒友对文章提到的区块链很感兴趣,也提了很多有意思的问题,比如“如何保证虚拟货币发行商不跑路”,“一个比特币到底是什么”,这些一句两句确实解释不清楚,那么今天试着从构建角度出发,解释一下比特币和区块链的原理(没有数学推导,放心食用)。
首先,我们要明白区块链设计的初衷是什么,是去中心化,所谓中心化,通常有一个中央服务器或权威机构来集中处理和管理主要事务。比如,传统的银行系统就是中心化的,银行作为中心机构来处理资金的存储、转账等业务;许多社交媒体平台也是中心化的,平台运营方掌握着用户数据和内容的管理大权。
中心化有个很大的问题,容易产生权力集中和垄断,可能对用户权益造成潜在威胁,同时,可能存在隐私泄露等安全隐患,因为中心机构掌握大量关键信息。所有我们要倡导去中心化,去中心化的特性使得所有参与者共同维护和验证交易记录,共同承担了彼此之间的信任要求,无需依赖第三方中介。
类似于区块链的协议实际上早在上世纪80年代就被发明出来了,并且在90年代用于验证文档中的时间戳。而第一个真正的去中心化区块链则是由一个或以化名为“中本聪”的人在2008年的《比特币白皮书》中提出的。
莱特币创始人表示,中本聪如果想要展示自己,应该用创世密匙签一条信息。任何做不到这一点的行为都极有可能是欺诈行为。
区块链可以理解为一种公共记账的技术方案,其基本思想可以这样理解:通过建立一个互联网上的公共账本,由网络中所有参与的用户共同在账本上记账与核账,每个人(计算机)都有个一样的账本,所有的数据都是公开透明的,并不需要一个中心服务器作为信任中介,在技术层面就能保证信息的真实性、不可篡改性,也就是可信性。
下面从技术层面简单介绍一下其实现,需要事先引入一个知识点,哈希函数:
哈希函数即一种将任意长度的消息或数据压缩成固定长度的摘要或哈希值的函数。
哈希函数具有以下重要特点:
- 确定性:相同的输入始终会产生相同的哈希值。
- 单向性:从哈希值几乎不可能反向推导出原始输入。
- 雪崩效应:输入的微小变化会导致哈希值发生巨大的变化。
输入字符串一丢丢的改动,哈希函数给出的输出结果都将完全改变
下面我们就可以构建区块链网络了,当用户提交交易,会将价值从一个账户转移到另一个账户时,待执行的交易会被打包进“区块”中,然后网络中的每个节点都会对这些交易进行处理和验证。让所有节点都验证交易是为了确保帐本中的变更得到重复验证。
因此每个交易记录都是以区块的形式存储,然后再广播到系统中的其他用户中。而区块之间相互连接,形成一条由系统内全体用户共同维护的区块链(即区块的链条)。
那么很容易就会出现疑问,所有人保存的区块链是事实上是同一条链,那么如何保障修改后大家还是同一个链呢?如何避免有人造假呢?
的确如此,互联网节点遍布全球,区块添加的广播过程也需要时间,因此肯定会存在不同节点收到不同区块存储的问题。
如此一来这个网络就乱套了。为了降低传播时间的影响,出现了一个极其简单粗暴的方式限制区块生成的速度,即比特币系统的核心思想采就是用算力限制区块的生成速度。
比特币系统要求,每个用户在发布新区块前,必须先完成一个任务。这个任务就是:
- 根据前一区块的一些信息加上新区快的一些信息,生成一个字符串S;
- 选择一个字符串B,与S合并成“BC”,且要求“BC”的哈希函数满足某个条件,比如映射结果的前72位为0(概率:2^(-72));
上面的第2步,根据我之前介绍的哈希函数单向性,必须通过暴力遍历(就是一个一个试)来计算,时间恰好是我们宇宙中最稀缺的资源。因此我们可以调节这个难度,比如使得系统中所有平均每20分钟才会有一台设备完成要求的任务,猜出符合要求的字符串B。如此一来,撞车的概率就会大大降低。补充一句,这个难度是不断调节的,以适应硬件算力的提升和区块链的长度增加,比如当比特币挖到一半(比特币的总数是固定的大概21000万枚)的时候,计算难度就会提高一倍。
这里有一个很残酷的事情,当一个人成功计算出哈希值时,如果同一时间其他人没有计算出这个值,即时已经算到了90%,也只能放弃计算,校验该结果的准确性,并将该节点成功挖出的区块(副本)追加到自己区块链的末尾。
虽然因此概率大大降低,但仍然无法排除存在撞车的概率,同时为了避免有人造假生成假区块,因此引出了区块链验证中最核心的思想,相信最长的区块链。
这里引入一个分叉的例子,假如几乎同一时间,节点A和节点B同时宣称计算出来了新区块。其他节点也几乎同时参与了对这两个区块的校验,结果发现这俩都没问题,这时各节点也开始犯困,因为在他们的视野里他们并不清楚最后哪一个区块应该会被主链接纳。如果都连在自己区块链末尾,产生分叉,区块链变成了两条。
这已经严重违背了区块链里最基本原则——所有节点共同维护同一份数据。所以,为了解决这个问题,区块链世界引入了一条新的规则——拥有最多区块的支链将是真正被认可有价值的,较短的支链将会被直接Kill掉,被Kill掉后掉落的新区块会重新被定义为“未确认”。
如果有人想对区块链造假,那么他就需要一直抢先生成假的新区块,并广播出去。这就要求造假者生产新区块的速度,要快于系统中的其他所有用户的生成能力之和(与世界为敌)。换句话说,造假者需要用户有和其他用户算力之和匹敌的算力,而这几乎是不可能的。
这也就是区块链世界里另外一个著名的概念,叫做“51%攻击”,但这也仅仅是一个理论值,如果你永远全球51%的算力,为了回滚刚刚发生的一笔交易记录,或者为了添加一笔假的交易记录,山东大学招生处成功发起了51%攻击,这意味着很快整个区块链系统将会崩盘,因为这次攻击已经严重伤害到人们对这套系统的信任,接着比特币开始暴跌至几乎一文不值,但是这个拥有51%算力的山大招生处原本完完全全可以通过单纯守法挖矿的方式获取更多收益,因此即使是国家力量,也很难干涉一条大的区块链的运转(比如比特币)。
那么这个提到的挖矿到底收益是什么呢?这就是bonus机制,区块链系统为了鼓励大家生成新的区块,于是在开始时就定下规则:
- 每当一个新区块加入主链,这个区块的发行者就会被赠与50个BTC;
- 每21万个区块后,奖励额度缩水一半;
这也就解释了,为什么BTC的发行上限是21000万个。这个机制牢牢限制死了比特币的总量,使得比特币不可能超发,这也是其保值性的一个体现。
综上所述,以区块链为基础的虚拟货币是完全去中心化的,和Q币或者点券这种中心化发行的虚拟货币有本质区别,区块链本质上是一种解决信任问题、降低信任成本的信息技术方案。区块链的应用,可以取缔传统的信任中介,颠覆传统上存在了几千年的中心化旧模式,在不需要中心化信任中介的情况下,解决陌生人间的信任问题,大幅降低信任成本。正是基于这样的原因,在全球范围内的影响力和关注度相当高。
参考:知乎(区块链是什么,如何简单易懂地介绍区块链?)
IBM(区块链是什么,如何简单易懂地介绍区块链?)
知乎专栏(从零开始创建一个区块链)
图片均来自网络。