深入区块链技术(一)基础介绍

本篇为第一篇:技术基础篇。简单介绍区块链领域涉及到的基础技术概念。

1.区块链的技术定义

从技术上说,区块链是一个提供了拜占庭容错、并保证最终一致性的分布式数据库;

从数据结构上看它是基于时间序列的链式结构;

从节点拓扑上看,它所有的节点互为冗余备份;

从操作上看,它提供了基于密码学的公私钥管理体系来管理账户。

概念很抽象,我来逐条解释:

首先,区块链是一个数据库。这个数据库是由分布在世界各地的许多个节点共同组成的,它能够在某种错误发生时继续维持运行而不崩溃,并且最终能够保证每个节点上的状态是一致的。

然后,区块链的结构是一个链条。链条是由许多个数据块一个接一个链接而成的,新的数据块链接在上次产生的最新数据块的后面,以此类推。

同时,因为区块链中的所有节点上的状态都是一致的,所以它们可以作为彼此的备份。如果某一个节点上的状态错误了,可以通过其他节点上的正确状态进行恢复。

最后,区块链提供了账户管理功能。这个功能是利用密码学中的公私钥方法实现的。公钥就像银行卡号,私钥就像银行卡密码。公钥可以告诉其他人,其他人知道你的公钥只能向你转入资金。私钥只有自己知道,知道私钥才能够支配账户里的资金。

2.区块链的类型

通常,可以将区块链分为公有链、联盟链、私有链三种。

公有链没有准入机制,理论上任何人都可以加入成为其中一个节点,它提供的服务也是面向所有人的。我们通常讨论的也是指的公有链。

联盟链有准入机制,加入者需要得到已有成员的许可,类似于加入一个联盟。联盟链由联盟中的成员维护,也只服务于这些成员。

私有链是一个比较早期的概念,实际上对于单个组织来说,实现一个私有链来进行数据保存其实意义不大。现有的分布式数据库技术已经能够很好满足现实需求。所以私有链其实大多数时候是个伪概念。

除此之外,不得不提的是侧链。侧链是相对于主链而言的,可以理解为一条大路的旁边修建的辅路。侧链的存在既为主链减轻了信息处理的压力,同时也丰富了主链的功能。侧链与主链之间可以进行通信,是对主链的耦合和拓展。

3.区块链的核心技术

在区块链中,核心的技术至少包括4个方面:P2P网络协议、分布式一致性算法(共识机制)、杂凑与非对称加密算法、账户与存储模型。

P2P网络协议

P2P网络协议是所有区块链的最底层协议,负责信息的网络传输和广播、节点发现和维护。

在比特币P2P网络协议模块中,一个节点在初次连接到其他节点时会被要求按照握手协议来确认状态,握手后开始请求peer节点的地址数据以及区块链数据。

这套P2P交互协议具有自己的指令集,指令在消息头的命令域中进行表示。这些命令为上层提供了节点发现、节点获取、区块头获取、区块获取等功能。

分布式一致性算法

在计算机应用方面,最初最多的是单点应用。为了维护应用的高度可用性,通常采用的是冷容灾备份技术,也就是说再多建立几个备份节点,防止主服务节点发生错误。后来随着应用规模的扩大和网络效应的增强,发展到了异地多点,从而也就渐渐带动了分布式技术的发展。

在单纯的分布式计算方面,有Raft和Paxos算法家族为代表的非拜占庭容错算法,以及具有拜占庭容错特性的PBFT共识算法。但是到了区块链领域,人们把传统的分布式一致性算法进行了经济学上的拓展。目前,常用的区块链共识机制包括工作量证明机制(PoW)、股权证明机制(PoS)和代理股权证明机制(DPoS)。

PoW:即比特币采用的共识机制。是指在给定的约束下,求解一个特定难度的数学问题。谁解的速度快,谁就能获得记账权,并获得相应奖励。这个求解过程与计算能力密切相关,因此谁拥有的设备计算性能越强,优势越大。

PoS:它的基本概念是产生区块的难度与你在网络里所占的股权成比例。如果你在网络中占有的股权(代币数量占总量的比值)越大,产生区块的难度越小,越容易获得记账权和奖励。

DPoS:是对PoS的改版,即不是让所有人都参与记账节点的竞争,而是先通过选举,选出指定数量的候选人,由他们来负责竞争记账权和奖励。这种方式能够更大提升系统的吞吐量,因为节点数量变少了,网络更加集中。

杂凑与非对称算法

杂凑算法也成为哈希算法。这种算法的特性是:已知A,通过算法很容易算出固定长度的B;但是知道B,几乎不可能反向算出A。而且,几乎不可能找到一个C,使得C经过计算后也得到B。

因为这个特性,如果我们想要得到一个特定的计算结果X,就只能通过不断的穷举各种可能,通过计算后与X进行对比,来找到答案。比特币中的“挖矿”,其实就是在做这件事。

除了杂凑算法外,还有非常重要的非对称算法。

非对称是相对于对称而言的。在非对称算法发明出来之前,人们采用的是对称加解密算法,即加密用的密钥和解密用的密钥是相同的。而在非对称算法中,加密密钥和解密密钥是不同的,也就是我们之前提到的公私钥。

公私钥是成对存在的,它们的使用方法可以分为两种:公钥加密私钥解密,或者私钥加密公钥解密。

前一种情况一般用于:A想向B传递某个信息,而且A知道B的公钥,于是A用B的公钥加密了这个信息,将密文传递给B。因为只有B自己拥有私钥,能够解开密文,所以保证这个信息只会传递给B。其他人就算拿到了密文,也无法解密。这种就类似于我们给指定的人写信,只有那个人才能拆开,所以也被称为“数字信封”。

后一种情况一般用于:A想对某个信息进行背书,声明这个信息是由A自己签发和认证的。于是A用自己的私钥加密这个信息,其他任何人都可以用A的公钥解密这个信息,从而知道信息是由A进行背书和认证的。这就类似于A对这段信息进行了签名,打上了自己的标记,所以也被称为“数字签名”。

私钥、公钥和我们常说的钱包地址之间的关系是:通过私钥可以计算出对应的公钥,反之不行。通过公钥可以生成相应的地址,反之不行。然后我们将地址告诉其他人,其他人就可以给我们转账了。

4.账户与存储模型

这其实是数据在区块链上存储的两种方式。一种是以账户-余额的方式存储(以以太坊为代表),一种是以UTXO的方式存储(以比特币为代表)。

账户-余额模型我们都好理解,最常见的就是银行卡了。在以太坊中,账户被分为外部账户和合约账户。前者用于普通用户的资产存储,后者用于智能合约的标记。

该模型的优点包括:

可以快速后去账户余额;

节省空间,每笔交易只有一个输入输出。

较容易实现图灵完备的智能合约。

UTXO模型则被认为是中本聪的天才设计,它的中文含义是未花费的交易输出。下面我们举个例子来理解一下这个模型。

比如你是一个卖家,小明拿着5块钱来买一瓶2块钱的水。他付给你5元,你要找给他3元。也就是说,我们把5块钱分成了两份,一份2元是给你的,一份3元是找给小明的。所以,这个5元是交易的输入,而2元和3元是交易的输出。对你来说,这个2元是还没有花出去的,对小明来说,这个3元是还没花出去的,所以叫未花费的交易输出。

该模型的优点包括:

私密性比较强,理论上可以为每一笔输出设置一个地址,这样就很难通过账户来追查到背后的人;

无需维护余额等状态值;

UTXO是独立数据记录,可以通过并行极大提升区块链交易验证速度;

无需关心事务问题,只需关心输出脚本即可。

总结

本文介绍了区块链的基础技术概念。通过介绍可以看出,虽然区块链的概念比较新,但背后依托的依然是传统领域已经发展较为成熟的底层技术。通过将不同技术的有效组合,就能创造许多全新的事物。

想要深入理解和掌握区块链技术,需要成为一个多面手,这也是区块链编程工程师比一般工程师更为难得的原因之一。但只要方向是对的,加上足够的努力,我们迟早会在这个领域有所成就。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180419A0HELU00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券