0%

区块链

区块链

区块链是一个共享的、不可更改的账本,可以促进在业务网络中记录交易和跟踪资产的过程。资产可以是有形的(例如房屋、汽车、现金、土地),也可以是无形的(例如知识产权、专利、版权、品牌)。几乎任何有价值的东西都可以在区块链网络上进行跟踪和交易,从而降低各方面的风险和成本。

比特币介绍

区块链技术是由比特币创造的,所以从介绍比特币的区块链开始。

2008 年 10 月 31 日,中本聪向一个密码学邮件列表的所有成员发送了一个电子邮件,标题为“比特币:点对点电子现金论文”。

比特币的三个组成部分为加密数字货币(cryptocurrency)、分布式账本(distributed ledger)、去中心网络(decentralized network),如下图所示

比特币的三个组成部分

比特币系统包括三层:

  • 最上一层是比特币这种电子现金。这是整个系统的应用层。
  • 中间一层的功能是发行比特币与处理用户间的比特币转移。这一层也叫比特币协议(bitcoin protocol),是整个系统的应用协议层。
  • 最底层是比特币的分布式账本和去中心网络。这一层也被称为比特币区块链(bitcoin blockchain),是整个系统的通用协议层。

比特币系统实现的去中心化的点对点电子现金,其发行与转账靠的是中间的比特币协议层。类比现实货币系统,这一层的角色相当于中央银行(发行货币)与银行(处理转账)等金融机构。

“比特币协议”的这一层,又常被进一步细分为五层。它对应的是比特币协议和比特币区块链两个部分。在这个五层架构中,比特币协议层被细分为:应用层、激励层和共识层。

在设计比特币系统时,创造性地把计算机算力竞争和经济激励相结合,形成了工作量证明(POW)共识机制,让挖矿计算机节点在计算竞争中完成了货币发行和记账功能,也完成了区块链账本和去中心网络的运维。

比特币的去中心化

在互联网上的数字世界中,人们曾设计出各种各样的电子现金或数字现金方案。一直以来,数字世界中的“货币”有两种形式

  • 中心化的在线支付;例如 支付宝、微信支付
  • 中心化的计算机点数或互联网积分;例如 Q币、游戏币等互联网积分

与现有中心化的电子现金系统(在线支付系统)相比,比特币是与之完全相反的:比特币的区块链系统是由分布式账本(即狭义的区块链)和去中心网络(点对点网络)组成的,形成链条的方式是工作量证明共识机制。最长链是由网络中的算力共同决定的,因而它是可信的,节点离开和加入依据的是最长链是可信的这一原则。这些组合起来形成了比特币系统。

1) 去中心化的点对点电子现金系统

比特币要做的是一个“点对点的电子现金系统”,发送方和接收方直接交易,它们之间不需要中介机构的介入。

要去掉可信第三方等中介机构,就需要解决“双花问题”。在摘要中,中本聪给出了点对点网络的解决方案,并介绍了这个方案的核心——区块链。他并没有提到区块链(blockchain)这个词,但在论文中分别提到了区块(block)和链(chain)这两个概念。

2) 分布式账本

比特币的区块链是基于工作量证明形成的带时间戳、存储数据的数据块和由哈希指针连接成的链条。这个链条或者说账本以分布式的方式存储在比特币网络的各个节点上,因而也被称为分布式账本。

3) 工作量证明

比特币网络中的节点按照规则进行加密哈希计算,以竞争获得生成新区块的权利。节点在竞争获胜后就获得记账权,它生成区块成为最新区块后,就获得与新区块对应的挖矿奖励。

工作量证明也是区块链账本的安全机制。如果不重做“工作量证明”所需的大量计算则此链条不可修改,这一共识机制保证了区块链上的数据的可靠性。

4) 最长链原则

在任何时刻,最长的链条是所有人都接受的最终记录。

由于最长链是由网络中的主要算力完成的,因而只要它们不都与攻击者合作,那么它们生成的最长链就是可信的。这个原则被称为“最长链原则”。

5) 去中心网络

比特币的去中心网络的架构非常简洁,本身需要的基础设施很少。它可以在互联网网络上运行。计算机节点可以随时离开或加入这个去中心网络,在加入时它们只需遵守最长链原则即可。

比特币中区块链技术
本质

区块链是什么?一句话,它是一种特殊的分布式数据库。

首先,区块链的主要作用是储存信息。任何需要保存的信息,都可以写入区块链,也可以从里面读取,所以它是“数据库”。

其次,任何人都可以架设服务器,加入区块链网络,成为一个节点。区块链的世界里面,没有中心节点,每个节点都是平等的,都保存着整个数据库。你可以向任何一个节点,写入/读取数据,因为所有节点最后都会同步,保证区块链一致。

因为人人都可以往里面写入数据,怎么才能保证数据是可信的呢?计算每个区块头的哈希来保证数据无法修改。

区块

区块链由一个个区块(block)组成。区块很像数据库的记录,每次写入数据,就是创建一个区块。

每个区块包含两个部分

  • 区块头(Head):记录当前区块的特征值
  • 区块体(Body):实际数据(比特币中的交易记录)

区块链的哈希长度是256位,这就是说,不管原始内容是什么,最后都会计算出一个256位的二进制数字。而且可以保证,只要原始内容不同,对应的哈希一定是不同的。

区块与哈希是一一对应的,每个区块的哈希都是针对”区块头”(Head)计算的。也就是说,把区块头的各项特征值,按照顺序连接在一起,组成一个很长的字符串,再对这个字符串计算哈希。

1
Hash = SHA256( 区块头 )

区块头包含很多内容,其中有当前区块体的哈希,还有上一个区块的哈希。这意味着,如果当前区块体的内容变了,或者上一个区块的哈希变了,一定会引起当前区块的哈希改变。

每个区块都连着上一个区块,这也是”区块链”这个名字的由来。

挖矿(mining)

在候选区块的头部有一个 32 位的随机数区域,矿工需要反复调整随机数并计算,目标是让整个区块的哈希值小于一个“目标值”。如果试过所有的 32 位随机数可能性后,计算仍未能成功,那么就要改变币基(coinbase)的一个随机数,接着进行反复计算。计算哈希的过程叫做采矿,这需要大量的计算。

这个计算是加密哈希计算(对比特币来说是 SHA-256),除了反复计算别无他法。

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

交易

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

比特币协议规定,申报交易的时候,除了交易金额,转出比特币的一方还必须提供以下数据。

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

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

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

点对点网络

比特币是一个全世界的开放网络,只要你有服务器,就能加入这个网络,成为一个节点。每个节点都包含了整个区块链(目前大概 100多 GB),并且节点之间时刻不停地在同步信息。

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

P2P交易原理

比特币的交易是一种无需信任中介参与的P2P(Peer-to-peer)交易。

传统的电子交易,交易双方必须通过银行这样的信任机构作为中介,这样可以保证交易的安全性,因为银行记录了交易双方的账户资金,能保证在一笔交易中,要么保证成功,要么交易无效,不存在一方到账而另一方没有付款的情况。

但是在比特币这种去中心化的P2P网络中,并没有一个类似银行这样的信任机构存在,要想在两个节点之间达成交易,就必须实现一种在零信任的情况下安全交易的机制。

数字签名

在比特币交易中,付款方就是通过数字签名来证明自己拥有某一笔比特币,并且,要把这笔比特币转移给指定的收款方。

使用签名是为了验证某个声明确实是由某个人做出的。例如,在付款合同中签名,可以通过验证笔迹的方式核对身份。

而在计算机中,用密码学理论设计的数字签名算法比验证笔迹更加可信。使用数字签名时,每个人都可以自己生成一个秘钥对,这个秘钥对包含一个私钥和一个公钥:私钥被称为Secret Key或者Private Key,私钥必须严格保密,不能泄漏给其他人;公钥被称为Public Key,可以公开给任何人。

比特币采用的ECDSA签名算法需要一个私钥和公钥组成的秘钥对:私钥本质上就是一个1~2256的随机数,公钥是由私钥根据ECDSA算法推算出来的,通过私钥可以很容易推算出公钥,所以不必保存公钥,但是,通过公钥无法反推私钥,只能暴力破解。

比特币使用数字签名保证零信任的可靠P2P交易:

  • 私钥是花费比特币的唯一手段;
  • 钱包软件是用来帮助用户管理私钥;
  • 所有交易被记录在区块链中,可以通过公钥查询所有交易信息。
比特币网络

比特币的 P2P 网络基于 TCP 构建,主网默认通信端口为 8333。

以太坊的 P2P 网络则与比特币不太相同,以太坊 P2P 网络是一个完全加密的网络,提供 UDP 和 TCP 两种连接方式,主网默认 TCP 通信端口是 30303,推荐的 UDP 发现端口为 30301。

比特币全节点组成的网络是一种全分布式的拓扑结构,节点与节点之间的传输过程更接近“泛洪算法”,即:交易从某个节点产生,接着广播到临近节点,临近节点一传十十传百,直至传播到全网。

如何加入区块链网络?

如果节点A是第一次连入比特币网络,那它首先会通过一种算法找到距离它最近的一个网络节点。

节点将一条包含自身IP地址的消息发送给相邻节点,相邻的节点再将这条消息向与自己连接的节点进行分发广播,以此类推,最终导致新节点的IP地址在全网进行分发,每个网络节点都知道节点A的地址,可以与之建立直接连接。

节点A 如何找到其他节点?

节点A在找到相邻最近的节点之后,还会向与它相邻的节点索要它们已知节点的IP地址列表,拿到这些节点的IP地址列表之后,节点A便可以主动与这些节点建立直接的连接。

比特币网络中不同节点的数据如何同步?

比特币网络中的节点在连接到相邻的节点之后,首先会和相邻的节点同步数据,然后再去和更多的节点进行数据交换和同步。

在节点与节点之间进行数据同步的过程中会根据一个哈希值来判断谁的数据为最新的数据。

如果节点发现本身的数据不是最新的,就会寻找拥有最新数据的节点进行下载。如果发现自己的数据为最新数据,则会告诉其他节点需要从它这里补充数据。其他的节点下载数据并验证通过之后,将会更新到自己的本地数据中。

通过这种方式能保证网络中的所有节点都能及时得到最新数据。

参考:

IBM《区块链傻瓜书》

比特币白皮书

赞赏是最好的支持