科普:什么是虚拟货币?

总览

简而言之,区块链是一个在不安全环境下的去中心化的分布式数据库。而基于区块链诞生的各种虚拟货币,就是记录在这个数据库中的数据。下面就来详细介绍区块链是怎么形成的,当然,如果只是想使用比特币这类应用,以下介绍的内容不是必须的,就好像使用空调不需要知道如何制冷一样。

一个中心化的账本

假设你和你的小伙伴 A, B, C 经常在一起聚餐,在你们之间经常会产生交易,A 给 B 200 块钱,B 转给 C 50 块钱等等,这样每次发生交易就当场结清非常的麻烦,于是你们就想到大家共同维护一个账本,每个月结一次帐,这样就形成了一个中心化的帐本。

但是,因为这个账本任何人都可以修改,所以如果有人胡乱修改的话就失去了可靠性,于是你们就制定了一个规则:每笔交易必须签名才能生效。(在密码学中,我们通过数字签名来确保信息有效)

但是,这样虽然不能随意修改,但你可以复制上一条交易,于是你们就又增加了一条规则:给每笔交易加上序号。

可是这样还是有问题,比如 C 欠款太多然后跑路了呢,所以我们可以规定:每个人预存一笔钱,如果交易超出存款,就交易失败。这样我们就得到了一个中心化的账本。假设全世界都用这个账本,那么我们甚至不需要真实的货币,当然账本里的钱如何产生我们下文再谈。

但这样还是会有问题,就是你必须信任这个作为中心的账本,就像在淘宝买东西需要信任淘宝会把货款转给商家一样。那么如果这个中心不可信呢?

去中心化的账本

很自然的一个想法就是让参与交易的每一个人都保存一份账本,当 A 给 B 转账 100 块的时候,就告诉所有人这笔交易,其他人也都把这笔交易记录在自己的账本上。但是怎么确保每个人都按照正确的接收到了信息并按顺序记录了呢?怎么确保所有人的账本都一模一样呢?最初比特币就是想解决这个问题。

大体上,是哪个账本的计算量最大就信任哪个账本,也就是经常听人说起的工作量证明。这里涉及到了一个叫 hash(哈希)函数的东西,简单的讲,这个函数具有以下性质:

1. 把文件或者数据转换成定长的字符串(比如 256 bit)

2. 同样的输入得到的是相同的输出

3. 不同的输入几乎不可能得到相同的输出(2 的 256 次方分之一)

4. 目前除了随便瞎猜之外,还没有什么方法可以通过输出得到输入

比如,“战旗矿机”的 hash 值是:

40d3d273f9e698426a9f60b549f1d77530a83287b93e88acd9d2a4fecfc1d1d4

说回我们的账本,想象一下,现在账本上有一系列的交易,然后 A 告诉你说我发现了一个神奇的数字,把它加在账本的后面可以让 hash 值的前 10 个数都是 0。

![计算量证明](/素材/4.png)

而找到这个数字有多难呢?每次只有 16 的 10 次方分之一(1099511627776 分之一)的概率猜中,而你想验证的话只需要很简单的计算 hash 值就行。所以如果有人告诉你他找到了这么一个神奇的数字,你可以认为他是经过了大量的工作,而更重要的是,因为整个工作量证明包含了一系列的交易,所以如果篡改了交易,就得重新再猜1099511627776次。

在我们的分布式账本中最重要的是要让人们相信计算量最大的账本,具体我们可以把一系列账本分成若干份区块,为每一份区块都找到一个神奇的数字使 hash 值的前 10 位都为 0,然后再将前一个区块的 hash 写在下一个区块的开头,这样每一个区块就串联起来形成了区块链。这样子,如果修改了前一个区块,接下来的所有区块都必须全部修改。

同时,我们再增加一个规则:允许全世界人们都参与生产新的区块,作为奖励,计算出新区块的人会凭空获得一定的虚拟货币的奖励。(也就是传说中的挖矿)

现在假设 A 想作恶,给 B 发送伪造的区块,而这个时候 B 就会收到 2 个不同的区块,这时该怎么办呢?这时 B 不必要相信其中任何一个区块,等到产生一个最长的链再相信也不迟。而 A 的伪造想要生效,就必须比其他人更快的算出那个神奇的数字,之前也说过,这个数字只能靠瞎猜找到,所以 A 如果想伪造生效,就必须有比其他所有用户加起来的计算量更强,也就是传说中的 51% 攻击,否则 B 就会相信由其他用户算出来的更长的区块链。

总结

比特币这类的虚拟货币实质上是一个分布式账本,其中应用了区块链技术。

观众朋友们觉得这篇科普文怎么样呢?有什么没有看懂的地方或者意见欢迎大家留言,感谢大家。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171211G0ILB100?refer=cp_1026

同媒体快讯

扫码关注云+社区