挖矿、比特币、区块链是什么?很多人可能一知半解,本文将从传统记账方式开始逐步讲解一下相关的实现机理,有兴趣不妨一读。
需要说明的是,比特币只是加密货币的一种,但实现机理基本类似。
(一)
考虑现实情况:
假设A、B、C、D交易频繁,每笔交易如果都用现金结算会很麻烦,所以他们设了一个所有人都看得到的账本,用于记录交易情况。交易发生时,就在账本里写入记录。月底时,根据账本记录结算。比如A为负数,则需要付钱填补,B若为正,则可以根据账单取这个结余的钱。
这种方式有2个特点:
1、每人都可以在账本里记录。
2、月底时用现金结算。
但有问题:
如何保证 B 在没有 A 核准的情况下伪造记录:A 要支付 B 100元;
如何能保证账本的记录都是准确无误的呢?
这就需要用到密码学的电子签名技术了!
(二)
就像现实一样,账本里的记录“ A 要支付 B 100元” 需要 A 的签名,并且要保证其他人无法伪造A的签名。如何做呢?
每位用户都持有一对密钥:公钥和私钥。
私钥是用户私有,而公钥是对外公布的。只有公钥能解开对应的私钥加密的信息,也只有私钥能解开对应的公钥加密的信息。
顺便说一下,数学家发明的公钥私钥机制是 当今信息安全的基石。
对于记录“A 要支持 B 100元”,A用【A的私钥+记录信息】生成一个【签名】(比如256位的数字)。而其他人用【A的公钥】验证【记录信息+签名】,如果正确,说明确实是A签名的。
问题又来了,A 签署了一张 A要支付B 和记录,尽管B不能新建签名记录,但他可以随意复制A 已签署的记录,新复制的记录及其签名都是正确的,我们该如何防范呢?
我们要求账本里的记录都有一个唯一编号,复制的记录由于编号不同,复制者也就无法伪造签名信息了。
(三)
电子签名技术解决了用户之间的信任危机,但还是需要一个类似的信任机构来协调。比如到月底了,C欠了很多钱,但他不还怎么办?
应对这种情况,我们就要设计一个机制,避免入不敷出的情况发生。比如初期账本每人存入100元,接着产生两条记录:A 要支付B 50元,A要支付C 50元。之后,如果要在账本里记录 A 要支付 D 20元,将被拒绝,因为A 已没有余额了。
这种设计刚好实现了与现实货币的解耦。如果全世界不用美元、欧元、日元、人民币,都用一种加密货币来结算和交易,也是完全能够运转的。
(四)
重点来了,这是理解比特币和其他加密货币最重要的信息:
1、它是一个账本。
2、所有的历史交易总和就是当下的货币。
当然对于比特币而言,人们只有用现金购买和使用比特币才会在账本上记录。至于新的比特币如何产生下面会谈到。
(五)
账本总得有一个地方记录,比如一个信任的中心机构的网站,那谁来管理这个网站,谁来控制添加记录的规则呢?
让所有人都能获取这份账本就不需要中心信任机构了!
但:
如何来保证所有人的账本都是一致的?
如何来保证你接收到的记账记录顺序与其他人一致?
我们要找到一个方法来决定接受或拒绝收到的交易信息,而且确保所有其他人在这个方法下能以同样的顺序接受交易信息,最终形成所有人都一致的账本。这是个有趣的难题!
比特币的办法是:选择信任消耗最多计算资源的那份账本。
既然将计算资源作为信任之本,那么必须要保证 伪造的成本是不可能的计算能力。
目前使用的主要工具是 加密散列函数如SHA256。该算法公开,但无法逆向推导出来。只有通过穷举尝试,但想一下 2的256次方的数量级,以当今世界的计算能力,是不可能的。
具体如何做呢?
(六)
如果有人声称找到一个数字,通过散列(SHA256)计算【账本记录+数字】,得到的散列值前30位为0。你知道找到该数字需要多少次尝试吗?
2的30次方!大约10亿次。
你得到这个人公布的这个数字,用散列函数计算了一下,果然散列值前30位为0,那就说明这个人确实已计算了大约10亿次,这个数字就是这个人的“工作量证明”。
重要的是,这个工作量证明与账本记录是紧密相关的,如果你修改了账本的记录,即便是极微小的改变,散列值就会变得面目全非,又得经过约10亿次计算才能找到另一个“工作量证明”的数字。也就是使用该数字和账本记录,通过散列计算,散列值前30位为0。
回到分布式账本。
前面说了,比特币选择相信 消耗最多计算资源的那份账本。要实现这个,需要将账本整理成区块。每个区块包含了一系列交易记录以及“工作量证明”数字。该数字满足其散列值以一系列0开头,这里暂定60个0。后面会说明如何确定0的个数。
如同交易记录要经过支付方签名才有效一样,一个区块也只有当它有工作量证明时才被认定为有效。
同时为了确定顺序,规定前一区块的散列值必须加入到当前区块的头部信息中。
如果修改了某个区块,后续的所有区块都要重新计算“工作量证明”,这基本是不可能的,就达到账本不可篡改的目的。
这样一来,与其称为账本,不如称其为“区块链”。
(七)
在区块链体系下,世界上每个人都能成为区块的建立者。
他们收听网络中的交易记录信息,整理生成区块,然后花大量的计算能力,寻找特别数字使得区块的散列值 以多个0开头。一旦找到,他们将这个区块广播出去。
为了奖励区块建立者,当某人建立了一个区块,我们规定他可以把一笔特别的交易记录放在账本里面,比如:他获取了10 元,这叫区块奖励。
区块奖励不来自于他人,因此无需签名。整个网络的货币量会随着新区块的产生而增加。
建立区块通常被叫做“挖矿”。
当你听到或看到矿工里,他们实际的工作就是:
收听交易记录信息;
建立区块;
广播区块;
获得新货币的奖励。
在矿工眼中,每个区块就像一个小型彩票,每个人都想尽可能快地猜中数字,直到某个幸运儿找到了那个特别数字。这个数字能让区块的散列值以多个0开头,然后他就得到奖励。
对于想通过该系统做交易的人来说,他们不需要收听交易信息,只需要收听被矿工广播的区块即可,然后更新自己的那一份区块链。
下面是关键点。
如果我们收到两份完全不同的区块链,该相信谁呢?
最长的那一个!也就是需要最多的工作量的那一个。
如果暂时没有最长的区块链,那就等待,总会有的。
即便没有中心机构,所有人也都能自己维护区块链,就是信任最多工作量的那个区块链。
我们就达到一个“去中心化”的共识。
(八)
这个借助计算网络形成的去中心化体系有多可靠呢?我们来看看如果某人想伪造区块可不可行。
A 伪造了一份交易记录“A 要支付B 100元” ,将交易记录发给B 换取了B的物品。但没发给其他人,其他人认为A还持有这100元。
A 需要比其他所有矿工先找到工作量证明才能欺骗所有人,当然这也是可能的,我们假设碰巧A比其他所有人都先找到这个证明。
但B同时会收到来自其他矿工的区块广播,所以为了让B相信A的那份伪造的区块,A要重新计算伪造区块后面的所有区块,这些区块与B从其他矿工收到的区块链不一样。
系统规定B总是信任最长的那个区块链。
如果初期A碰巧比其他所有矿工都先找到区块,在前几个区块还有可能保持领先。但除非她拥有接近所有矿工的计算资源总和的50%,否则更可能的是,其他矿工的区块链会比A伪造区块的区块链更长更快。
时间一长,B就会放弃A的那个区块链,而选择其他所有人都在计算的区块链。
所以一开始我们并不会立即信任接收到的新的区块,而要等到后面有新的区块添加后,如果没有收到更长的区块链,我们就可以信任这个区块和其他人的区块链是一致的。
(九)
前面我们讲了要形成60个0开头的散列值,实际的比特币体系0的个数是变化的,主要是保证平均10分钟产生一个区块,比如32个0、35个0、42个0等等。随着越来越多的矿工加入,为了赢得10分钟开奖的彩票,计算也变得越来越困难。
新的加密货币有更短的区块时间。
主流数字货币的区块产生平均时间如下:
比特币:10分钟
以太币:15秒
XRP:3.5秒
LTC:2.5分钟
在比特币体系中,所有比特币都来自于生成新区块的奖励。最开始2009年每区块是50个比特币,到210000个时的2012年减至25个,基本每四年奖励减半。
正因为奖励会逐步减半,根据计算,最终的比特币将不会超过21000000个。
这是否意味着矿工将最终赚不到钱了?
也不是!
当有人在比特币体系里交易时,会付一点交易费,该交易将支付给包含该交易的区块的创建者。这么做的目的是激励矿工将包含你这笔交易信息的区块广播给网络中的其他人。
在比特币中,每个区块包含约2400笔交易记录,有专家批评这个限制过于严格,因为在VISA中,平均每秒交易1700笔,最大能达到24000笔/秒。
比特币较慢的交易速度使得它的交易费用更高,正是交易费用才让矿工愿意将其交易纳入到新的区块中。
(十)
以上就是加密货币的基础知识。
世界上还有其它加密货币体系,但了解了这个基础知识,应能帮助理解其他的体系。
觉得有用的话,请转发并注明出处“可乐米技术之路”。
感谢!