我正在参加「掘金·启航计划」
一、区块链概述
1.区块链及其工作流程
一般认为,区块链是一种融合多种现有技术的新型分布式计算和存储范式。它利用分d布式共识算法生成和更新数据,并利用对等网络进行节点间的 数据传输,结合密码学原理和时间戳等技术的分布式账本保证存储数据的不可篡改,利用自动化脚本代码或智能合约实现上层应用逻辑。 区块链的工作流程主要包含生成区块、共识验证、账本维护 3 个步骤: (1)生成区块。区块链节点收集广播在网络中的交易——需要记录的数据条目,然后将这些交易打 包成区块——具有特定结构的数据集。 (2) 共识验证。节点将区块广播至网络中,全网节点接收大量区块后进行顺序的共识和内容的验 证,形成账本——具有特定结构的区块集。 (3) 账本维护。节点长期存储验证通过的账本数据并提供回溯检验等功能,为上层应用提供账本访问接口。
2.区块链类型
根据不同场景下的信任构建方式,可将区块链分为 2 类:非许可链(permissionless blockchain) 和许可链(permissioned blockchain)。
非许可链也称为公链(public blockchain),是一种完全开放的区块链,即任何人都可以加入网络 并参与完整的共识记账过程,彼此之间不需要信 任。公链多应用于比特币等去监管、匿名化、自由的加密货币场景。 许可链是一种半开放式的区块链,只有指定的成员可以加入网络,且每个成员的参与权各有不同。许可链往往通过颁发身份证书的方式事先建立信任关系,具备部分去中心化特点,相比于非许可链拥有更高的效率。
二、基础模型与关键技术
一般说来, 区块链系统由数据层、网络层、共识层、激励层、合约层和应用层组成. 其中, 数据层封装了底层 数据区块以及相关的数据加密和时间戳等技术; 网络层则包括分布式组网机制、数据传播机制和数据验证机制等; 共识层主要封装网络节点的各类共识算法; 激励层将经济因素集成到区块链技术体系中来, 主要包括经济激励的发行机制和分配机制等; 合约层主要封装各类脚本、算法和智能合约, 是区块链可编程特性的基础; 应用层则封装了区块链的各种应用场景和案例.
1.数据层
每个分布式节点都可以通过特定的哈希算法和 Merkle 树数据结构, 将一段时间内接收到的交易数据和代码封装到一个带有时间戳的数据区块中, 并链接到当前最长的主区块链上, 形成最新的区块. 该过程涉及区块、链式结构、哈希算法、Merkle 树和时间戳等技术要素.
(1)数据区块
数据区块一般包含区块头 (Header) 和区块体 (Body) 两部分. 区块头封装了当前版本号 (Version)、前一区块地址 (Prev-block)、当前区块的目标哈希值 (Bits)、当前区块 PoW 共识过程的解随机数 (Nonce)、Merkle 根 (Merkle-root) 以及时间戳 (Timestamp) 等信息.
(2)链式结构
取得记账权的矿工将当前区块链接到前一区块, 形成最新的区块主链. 各个区块依次环环相接, 形成从创世区块到当前区块的一条最长主链(longest chain,所有的节点都会遵循这条主链,并将其视为真正的区块链), 从而记录了区块链数据的完整历史。
分叉问题
如果短时间内有两个矿工同时 “挖出” 两个新的区块加以链接的话, 区块主链可能会出现暂时的 “分叉” 现象。 解决方法: 当出现分支时,节点会自动选择最长的分支作为主链,这样可以保证整个区块链系统的一致性。如果出现两条分支链长相等的情况,系统会根据一定的规则来选择其中一条作为主链。
(3)时间戳
区块链技术要求获得记账权的节点必须在当前数据区块头中加盖时间戳, 表明区块数据的写入时间。时间戳可以作为区块数据的存在性证明 (Proof of existence), 有助于形成不可篡改和不可伪造的区块链数据库。
(4)哈希函数
区块链通常并不直接保存原始数据或交易记录, 而是保存其哈希函数值, 即将原始数据编码为特定长度的由数字和字母组成的字符串后记入区块链。 哈希函数 (也称散列函数) 具有诸多优良特点, 通过哈希输出几乎不能反推输入值 (单向性), 不同 度输入的哈希过程消耗大约相同的时间 (定时性) 且产生固定长度的输出 (定长性), 即使输入仅相差一个字节也会产生显著不同的输出值 (随机性) 等.
(5)Merkle树
Merkle 树是区块链的重要数据结构, 其作用是快速归纳和校验区块数据的存在性和完整性. Merkle 树运算过程一般是将区块体的数据进行分组哈希, 并将生成的新哈希值插入到 Merkle树中, 如此递归直到只剩最后一个根哈希值并记为区块头的 Merkle 根。
优点:
- 由于Merkle树具有哈希指纹不可篡改的特性,因此只要根节点的哈希值不变,就可以保证整个数据块没有被篡改过。
- 在进行数据验证时,只需要验证Merkle树的根节点,就可以验证整个数据块的完整性,这样可以大大提高验证的效率。 例如:为验证图 3 中交易 6, 一个没有下载完整区块链数据的客户端可以通过向其他节点索要包括从交易 6 哈希值沿 Merkle 树上溯至区块头根哈希处的哈希序列 (即哈希节点 6, 5, 56, 78, 5 678, 1234) 来快速确认交易的存在性和正确性。一般说来, 在 N 个交易组成的区块体中确认任一交易的算法复杂度仅为 logN .
(6)非对称加密
非对称加密是为满足安全性需求和所有权验证需求而集成到区块链中的加密技术, 常见算法包括 RSA、Elgamal、Rabin、D-H、ECC (即椭圆曲线加密算法)。非对称加密技术在区块链的应用场景主要包括信息加密、数字签名和登录认证等。
比特币非对称加密机制
比特币系统一般通过调用操作系统底层的随机数生成器来生成 256 位随机数作为私钥. 比特币私钥的总量可达 2^256, 极难通过遍历全部私钥空间来获得存有比特币的私钥, 因而是密码学安全的. 为便于识别, 256 位二进制形式的比特币私钥将通过 SHA256 哈希算法和 Base58 转换, 形成 50 个字符长度的易识别和书写的私钥提供给用户; 比特币的公钥是由私钥首先经过 Secp256k1 椭圆曲线算法生成 65 字节长度的随机数. 该公钥可用于产生比特币交易时使用的地址, 其生成过程为首先将公钥 进行 SHA256 和 RIPEMD160 双哈希运算并生成 20 字节长度的摘要结果 (即 hash160 结果), 再经过 SHA256 哈希算法和 Base58 转换形成 33 字符长度 的比特币地址.
公钥生成过程是不可逆的, 即不能通过公钥反推出私钥.
2.网络层
网络层封装了区块链系统的组网方式、消息传播协议和数据验证机制等要素。
(1)组网方式
区块链网络层定义了节点之间的组网方式,即如何建立和维护节点之间的连接。在区块链系统中,节点之间的连接通常采用点对点 (peer-to-peer,P2P网络) 的方式建立,每个节点都可以直接和其他节点通信,承担网络路由、验证区块数据、传播区块数据、发现新节点等功能。
全节点:
全节点是指完整节点,它保存了整个区块链的完整副本,包括所有的交易和区块。它可以参与到区块链的所有活动中,比如交易、验证和打包区块等。全节点可以独立地进行数据验证和共识过程,因此对于保护网络安全和完整性非常重要。但是,由于保存了全部的数据,全节点的存储和计算资源要求较高,运行成本较大。
轻量级节点:
轻量级节点是指只保存区块头信息和一些与自己相关的交易信息,而不保存完整的区块链数据的节点。它们可以通过与其他节点通信来获得所需的数据,并进行验证和交易操作。轻量级节点对于区块链的扩展性和可用性非常重要,因为它们可以减轻全节点的负担,并提供更灵活的网络接入方式。但是,由于缺乏完整数据的备份,轻量级节点的安全性可能相对较低。
(2)数据传播协议
任一区块数据生成后, 将由生成该数据的节点广播到全网其他所有的节点来加以验证。 比特币系统的交易数据传播协议步骤: (1)比特币交易节点将新生成的交易数据向全网所有节点进行广播; (2)每个节点都将收集到的交易数据存储到一个区块中; (3)每个节点基于自身算力在区块中找到一个具有足够难度的工作量证明; (4)当节点找到区块的工作量证明后, 就向全网所有节点广播此区块; (5) 仅当包含在区块中的所有交易都是有效的且之前未存在过的, 其他节点才认同该区块的有效性; (6)其他节点接受该数据区块, 并在该区块的末尾制造新的区块以延长该链条, 而将被接受区块的 随机哈希值视为先于新区块的随机哈希值.
(3)数据验证机制
P2P 网络中的每个节点都时刻监听比特币网络中广播的数据与新区块. 节点接收到邻近节点发来的数据后, 将首先验证该数据的有效性. 如果数据有效, 则按照接收顺序为新数据建立存储池以暂存尚未记入区块的有效数据, 同时继 续向邻近节点转发; 如果数据无效, 则立即废弃该数据, 从而保证无效数据不会在区块链网络继续传播.
3.共识层
区块链的共识层是指一组算法和协议,用于确保在分布式环境下,所有节点对区块链的状态达成一致。在区块链中,由于没有中心化的权威机构,因此需要通过共识算法来解决节点间的信任问题,确保所有节点都在同一个状态下进行操作。
共识算法主要用于解决以下两个问题:
- 确定哪个节点有权生成下一个区块;
- 如何确保所有节点对区块链的状态达成一致。
在区块链中,常见的共识算法包括工作量证明(PoW)、权益证明(PoS)、权威证明(PoA)、拜占庭容错(BFT)等。下面分别介绍一下这些算法的原理:
- 工作量证明(PoW):PoW是最早被使用的共识算法,它的核心思想是通过大量的计算来找到一个符合条件的随机数,以证明自己对网络的贡献。在比特币中,每个节点都需要使用自己的计算资源来解决一个难题,也就是在当前网络难度下找到一个符合条件的哈希值。由于难度较高,因此只有算力足够强大的节点才有可能获得这个奖励,进而获得生成下一个区块的权利。其他节点会对该区块进行验证,如果验证通过,就会将该区块添加到自己的区块链上,这样整个网络就达成了共识。
- 权益证明(PoS):PoS是一种基于节点持有币数(或权益)来决定节点是否有权生成下一个区块的共识算法。持有更多币数的节点将更有可能获得权利,同时也会获得更多的奖励。在PoS中,节点可以将自己的币数抵押给网络来获得权益,这样就可以参与到生成区块的竞争中。与PoW相比,PoS的能源消耗更少,同时还有更好的抗攻击性。
- 权威证明(PoA):PoA是一种基于指定的节点或组织来决定节点是否有权生成下一个区块的共识算法。在PoA中,网络中的某些节点被授权为验证人,这些验证人会对交易进行验证,并且由他们决定哪些节点有权生成下一个区块。由于网络中只有少数几个验证人,因此PoA的能源消耗比PoW和PoS都要低。
4.激励层
区块链的激励层是指通过激励机制来推动节点参与维护区块链系统的运行和发展。 在比特币等PoW(Proof of Work)机制的区块链中,节点可以通过挖矿获得比特币奖励,同时也能够获取交易手续费,这种奖励机制可以激励节点参与竞争性的工作量证明计算,进而保证区块链的安全性和稳定性。 在PoS(Proof of Stake)机制的区块链中,节点需要抵押一定数量的代币来参与区块的验证和打包,随着代币的数量增加,节点的权益也会增加,因此节点会更加积极地参与到区块链的维护中来。 除此之外,还有一些其他的激励机制,如DPos(Delegated Proof of Stake)机制,其中节点可以通过被选为代表节点来获取奖励,或者一些基于共识的治理机制,如DAO(Decentralized Autonomous Organization),可以通过投票和决策来激励节点的参与和贡献。
5.合约层
区块链的合约层是指能够自动执行并保证可信执行结果的计算机程序。这些程序通常是以智能合约的形式编写,可以在区块链上运行。智能合约是一种基于区块链技术的自动执行合约,它是一种可编程的计算机代码,可以自动执行预定的合同条款。区块链上的智能合约通常使用Solidity等高级编程语言进行编写。 智能合约可以被用于多种场景,包括但不限于数字货币、投票、数字身份验证、供应链管理和不动产登记等领域。例如,以以太坊为代表的区块链平台提供了智能合约的支持,开发者可以使用Solidity等高级编程语言编写智能合约,并将其部署到以太坊网络上。智能合约可以自动执行,当满足一定的条件时,例如收到特定数量的加密货币,合约将自动执行相应的代码。 智能合约的执行是基于区块链上的共识机制,因此一旦智能合约被部署到区块链网络上,它的执行结果将被所有的节点验证和记录。智能合约的执行结果是不可更改的,因为它是记录在区块链上的不可变数据。智能合约还可以与外部数据源进行交互,例如通过Oracles机制来获取外部数据,从而使得智能合约的应用场景更加广泛。 总之,区块链的合约层提供了一种可编程、可靠、自动执行的计算机程序,可以使得区块链技术的应用场景更加广泛。
二、应用场景
由区块链独特的技术设计可见, 区块链系统具有分布式高冗余存储、时序数据且不可篡改和伪造、去中心化信用、自动执行的智能合约、安全和隐私 保护等显著的特点, 这使得区块链技术不仅可以成功应用于数字加密货币领域, 同时在经济、金融和社会系统中也存在广泛的应用场景.
1.数据存储
区块链的高冗余存储 (每个节点存储一份数据)、去中心化、高安全性和隐私保护等特点 使其特别适合存储和保护重要隐私数据, 以避免因中心化机构遭受攻击或权限管理不当而造成的大规模数据丢失或泄露.
2.数据鉴证
区块链数据带有时间戳、由共识节点共同验证和记录、不可篡改和伪造, 这些特点使得区块链可广泛应用于各类数据公证和审计场景。
3.金融交易
区块链技术与金融市场应用有非常高的契合度。 区块链可以在去中心化系统中自发地产生信用, 能够建立无中心机构信用背书的金融市场, 从而在很大程度上实现了 “金融脱媒”。
4.资产管理
区块链在资产管理领域的应用具有广泛前景, 能够实现有形和无形资产的确权、授权和实时监控。
5.选举投票
投票是区块链技术在政治事务中的代表性应用. 基于区块链的分布式共识验证、不可篡改等特点, 可以低成本高效地实现政治选举、企业股东投票等应用。