区块链与比特币

摘要:摘录了阮一峰写的关于区块链和比特币的一些知识。

区块链

一、本质

分布式数据库。主要作用是存储信息,且任何一个节点都保存这数据库的全部信息。可以向任何一个节点写入、读取数据,最终这个区块链上的所有节点都会同步保持一致。

二、特点

去中心化。没有管理员节点,所有节点都是平等的。

三、构成

区块链由一个个区块组成。每个区块包含两个部分:区块头(记录当前区块特征值)、区块体(实际数据)。

区块头的特征值包括:生成时间、区块体的hash、上一个区块的hash……

使用hash,保证了数据的可靠性。如果有人修改了一个区块,该区块的hash值就会改变,为了使这个被修改的区块能被下一个区块链接到(因为下一个区块包含上一个区块的哈希),必须修改这个区块之后的所有区块,这个几乎是不可能发生。

由于每个区块都连着上一个区块,因此才被称作区块链。

四、采矿

为了保证各个节点之间的同步,新区快的添加不能太快。不然可能你刚想添加一个区块,却被通知其他人已经添加了新的区块,你只能重新生成一个,如此循环往复。

所以,区块链发明者“中本聪”(化名,其真实身份至今无人知晓)故意让添加新区块,变得很困难。他的设计是:平均每10分钟,全网才能生成一个新区块,一小时也就六个。

这个速度的控制并不是通过命令达成,而是故意设计海量计算。也就是说,只有通过极其大量的计算,才能得到当前区块的有效哈希,从而把新区块添加到区块链。由于计算量太大,所以快不起来。

这个过程就叫做采矿(mining),因为计算有效哈希的难度,好比在全世界的沙子里面,找到一粒符合条件的沙子。计算哈希的机器就叫做矿机,操作矿机的人就叫做矿工。

五、难度系数

为了保证计算的困难性,区块头里设置了难度系数(difficulty)。这个值决定了计算哈希的难度。举例来说,第100000个区块的难度系数是 14484.16236122。

区块链协议规定,使用一个常量除以难度系数,可以得到目标值(target)。显然,难度系数越大,目标值就越小。

target = targetmax/difficulty

只有小于目标值的hash才是有效的。由于目标值非常小,哈希小于该值的机会极其渺茫,可能计算10亿次,才算中一次。这就是采矿如此之慢的根本原因。

如果要对同一个区块反复计算哈希,就意味着,区块头必须不停地变化,否则不可能算出不一样的哈希。区块头里面所有的特征值都是固定的,为了让区块头产生变化,中本聪故意增加了一个随机项,叫做 Nonce。

Nonce 是一个随机值,矿工的作用其实就是猜出 Nonce 的值,使得区块头的哈希可以小于目标值,从而能够写入区块链。Nonce 是非常难猜的,目前只能通过穷举法一个个试错。根据协议,Nonce 是一个32位的二进制值,即最大可以到21.47亿。第 100000 个区块的 Nonce 值是274148111,可以理解成,矿工从0开始,一直计算了 2.74 亿次,才得到了一个有效的 Nonce 值,使得算出的哈希能够满足条件。

运气好的话,也许一会就找到了 Nonce。运气不好的话,可能算完了21.47亿次,都没有发现 Nonce,即当前区块体不可能算出满足条件的哈希。这时,协议允许矿工改变区块体,开始新的计算。

采矿具有随机性,没法保证正好十分钟产出一个区块,有时一分钟就算出来了,有时几个小时可能也没结果。总体来看,随着硬件设备的提升,以及矿机的数量增长,计算速度一定会越来越快。

为了将产出速率恒定在十分钟,中本聪还设计了难度系数的动态调节机制。他规定,难度系数每两周(2016个区块)调整一次。如果这两周里面,区块的平均生成速度是9分钟,就意味着比法定速度快了10%,因此接下来的难度系数就要调高10%;如果平均生成速度是11分钟,就意味着比法定速度慢了10%,因此接下来的难度系数就要调低10%。

难度系数越调越高(目标值越来越小),导致了采矿越来越难。

六、区块链分叉

如果两个人同时往区块链添加了新节点怎么办?现在的规则是:新节点

总是采用最长的那条区块链如果区块链有分叉,将看哪个分支在分叉点后面,先达到6个新区块(称为"六次确认")。按照10分钟一个区块计算,一小时就可以确认。

由于新区块的生成速度由计算能力决定,所以这条规则就是说,拥有大多数计算能力的那条分支,就是正宗的区块链。另一个含义是大多数人相信的那条分支,就是正确分支。

七、局限

  1. 写入数据的速度太慢
  2. 写入数据不能实时同步
  3. 进行大量计算,非常浪费电力

八、比特币

背景

2008年,一个署名为中本聪的人,提出了革命性的构想:让我们创造一种不受政府或其他任何人控制的货币!这个想法堪称疯狂:一串数字,背后没有任何资产支持,也没有任何人负责,你把它当作钱付给对方,怎么会有人愿意接受?

但是,狂想居然变成了现实。2017年比特币开始狂涨。2024年7月15日,一个比特币价值61335.20美元!

image-20240715093526404

image-20240715093629125

原理

比特币依靠的是非对称加密。公钥公开,私钥自己保存。

他人使用你的公钥加密信息,然后发送给你,你用私钥解密,取出信息。反过来,你也可以用私钥加密信息,别人用你的公钥解开,从而证明这个信息确实是你发出的,且未被篡改,这叫做数字签名。

其他人用公钥加密了一笔钱发送给你,只有你才能用私钥取出。这样也就实现了匿名,因为没人知道这个公钥对应的私钥是属于谁。(事实上,真实的交易流程稍有不同,私钥保证的不是取出支付给你的钱,而是保证只有你能把这些属于你的钱支付出去,详见后文。)

比特币钱包

比特币交易的第一件事,就是你必须拥有自己的公钥和私钥。你去网上那些比特币交易所开户,它们会让你首先生成一个比特币钱包(wallet)。这个钱包不是用来存放比特币,而是存放你的公钥和私钥。软件会帮你生成这两把钥匙,然后放在钱包里面。

根据协议,公钥的长度是512位。这个长度不太方便传播,因此协议又规定,要为公钥生成一个160位的指纹。所谓指纹,就是一个比较短的、易于传播的哈希值。160位是二进制,写成十六进制,大约是26到35个字符,比如 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2。这个字符串就叫做钱包的地址,它是唯一的,即每个钱包的地址肯定都是不一样的。

image-20240715094435644

你向别人收钱时,只要告诉对方你的钱包地址即可,对方向这个地址付款。由于你是这个地址的拥有者,所以你会收到这笔钱。

交易过程

一笔交易就是一个地址的比特币转移到另一个地址。由于比特币的交易记录全部都是公开的,哪个地址拥有多少比特币,都是可以查到的。因此,支付方是否拥有足够的比特币,完成这笔交易,这是可以轻易验证的。

如果某个人申报了一笔交易:A向B支付多少比特币。为了保证这个交易是A发起的,比特币协议规定:申报交易的时候,除了交易金额,转出比特币的一方还必须提供以下数据。

  • 上一笔交易的 Hash(你从哪里得到这些比特币)
  • 本次交易双方的地址
  • 支付方的公钥
  • 支付方的私钥生成的数字签名

验证这笔交易时是否属实,需要三步。

第一步,找到上一笔交易,确认支付方的比特币来源。

第二步,算出支付方公钥的指纹,确认与支付方的地址一致,从而保证公钥属实。

第三步,使用公钥去解开数字签名,保证私钥属实。

经过上面三步,就可以认定这笔交易是真实的。

交易确认与区块链

确认交易的真实性以后,交易还不算完成。交易数据必须写入数据库,才算成立,对方才能真正收到钱。

当你发生了一笔支付,你所在的节点就会把这笔交易告诉另一个节点,直至传遍整个网络。矿工从网上收集各种新发生的交易,将它们打包写入区块链。一旦写入成功, 矿工所在节点的区块链,就成为最新版本,其他节点都会来复制新增的区块,保证全网的区块链都是一致的。

最后,你所在的节点也拿到了最新的区块链,从而得知你早先的那笔交易,已经写在里面了,至此交易确认成功。

所有的交易数据都会传送到矿工那里。矿工负责把这些交易写入区块链。

根据比特币协议,一个区块的大小最大是 1MB,而一笔交易大概是500字节左右,因此一个区块最多可以包含2000多笔交易。矿工负责把这2000多笔交易打包在一起,组成一个区块,然后计算这个区块的哈希。

image-20240715095021422

计算哈希的过程叫做采矿,这需要大量的计算。矿工之间也在竞争,谁先算出哈希,谁就能第一个添加新区块进入区块链,从而享受这个区块的全部收益,而其他矿工将一无所获。

这里需要建立一个观念:比特币不存放在钱包或其他别的地方,而是只存在于区块链上面。区块链记载了你参与的每一笔交易,你得到过多少比特币,你又支付了多少比特币,因此可以算出来你拥有多少资产。

矿工的收益

比特币协议规定,挖到新区块的矿工将获得奖励,一开始(2008年)是50个比特币,然后每4年减半,目前(2018年)是12.5个比特币。这也是比特币的供给增加机制,流通中新增的比特币都是这样诞生的。

你可能看出来了,每4年奖励减半,由于比特币可以分割到小数点后八位,那么到了2140年,矿工将得不到任何奖励,比特币的数量也将停止增加。这时,矿工的收益就完全依靠交易手续费了。

所谓交易手续费,就是矿工可以从每笔交易抽成,具体的金额由支付方自愿决定(支付金额减去收款金额就是给矿工的手续费)。你完全可以一毛不拔,一分钱也不给矿工,但是那样的话,你的交易就会没人处理,迟迟无法写入区块链,得到确认。矿工们总是优先处理手续费最高的交易。

目前由于交易数量猛增,手续费已经水涨船高,一个区块2000多笔交易的手续费总额可以达到3~10个比特币。如果你的手续费给低了,很可能过了一个星期,交易还没确认。

一个区块的奖励金6.25个比特币(2024年),再加上手续费,收益是相当可观的。按照目前的价格,可以达到278万多的人民币。运气好的话,几分钟就能挖到一个区块,拿到这样一大笔钱,怪不得人们对挖矿趋之若鹜。

区块的扩容

比特币网络每10分钟,最多只能处理2000多笔交易,换算一下,就是处理速度为3~5笔/秒。全世界的比特币交易这么多,这个速度很难满足需求。

这件事在2017年8月有了一点眉目,当时区块链发生了一次分叉,诞生了一个新协议,称为 Bitcoin Cash(简称 BCH)。这种新货币其他方面都与比特币一致,就是每个区块的大小从 1MB 增加到了 8MB,因此处理速度提升了8倍,手续费也低得多。该协议是对原有区块链的分叉,因此当时持有比特币的人,等于一人获赠了一份同样数量的 BCH。

BCH 等于创造了一种新货币。

九、加密货币本质

现在,各种加密货币(cryptocurrency)不计其数。

之所以虚拟的货币能被人接受,因为人们普遍相信它的价值。就像黄金和美元,几乎可以在世界上任何一个国家使用。

所以加密货币的本质,就是可信性。

加密货币依靠密码学,一旦加密方式被破解,它就不能称为货币。

比特币的三个特点,保证了它的可信性:

  1. 它不会被(轻易)偷走。因为必须要有你的私钥,才能取出你的钱。正常情况下,别人拿不到你的私钥。
  2. 它无法伪造。每一个比特币都能追溯来源,而所有比特币都来源于矿工获得的奖励。矿工只有新建区块,才能获得奖励,这是很难的事情,所以无法伪造比特币。
  3. 它无法大批生成。原因跟上一条一样,比特币的发行速度是稳定的,现在每10分钟新增12.5个,然后每四年减半,最终停止增长。因此不会像纸币那样,政府滥发导致通货膨胀。

十、区块链在加密货币中的作用

区块链就是一个数据库,记载了所有的交易,用作中央记账系统,分布在无数个节点之上。

每笔交易的核心,就是一句话,比如"张三向李四转移了1个比特币"。为了证明这句话可信,张三为它加上了数字签名。任何人都可以用张三的公钥,证明这确实是张三本人的行为。另一方面,其他人无法伪造张三的数字签名,所以不可能伪造这笔交易。

矿工们收到这句话,首先验证数字签名的可信性,然后验证张三确实拥有这些比特币(每一笔交易都有上一笔交易的编号,用来查询比特币的来源)。验证通过以后,就着手把这句话写入区块链了。一旦写入区块链,所有人就都可以查询到,因此这笔比特币就被认为,从张三转移到了李四。

image-20240715101331863

数字货币的本质,就是一条可信的数据库记录。数据库记录了你拥有了多少钱,由于这个记录可信,你就真的因此拥有了这笔购买力。

原文链接:

区块链入门教程

比特币入门教程

加密货币的本质

posted @ 2025-01-26 11:32  落花人独立微雨燕双飞  阅读(25)  评论(0编辑  收藏  举报
欢迎访问我的个人博客