Web3 → 区块链

157 阅读19分钟

相关理念

简介

区块链技术是一种分布式不可篡改的加密数据库技术,主要解决的是去中心化节点间的数据一致性问题,并融入了通证(Token)的经济激励机制,可以大幅度的增加了数据的安全度和可信度。
区块链本质上是一个去中心化的分布式账本,其本身是一系列使用密码学而产生的互相关联的数据块,每一个数据块中都包含了多条经比特币的网络交易有效确认的信息

image.png image.png

定义

  • 一串包含交易信息的数据块按照时间顺序有序链接组成的链表结构
  • 区块通过哈希信息链接在一起,并以密码学方式保证的不可篡改、可追溯的去中心化分布式数据库账本
  • 用途:解决交易的信任和安全问题

架构发展

区块链1.0 - 区块链雏形阶段(数字货币应用)
  • 数字货币应用
    • 该阶段解决了货币和支付的去中心问题,该阶段的区块链应用多为货币转移、兑换和支付,以比特币为代表的虚拟货币是现实应用
    • 通过全网共享账本和N次确认不可逆,有效防止了双花问题(双重支付:是数字现金系统中的潜在问题,是指同一笔资金同时支付给两位收款方)的出现
  • 比特币时代
    • 区块链系统都是面向数字货币的,如比特币,莱特币等
    • 此阶段是一个支持数字货币合约的系统,主要是用来实现数字货币的
  • 架构核心:核心节点和前端工具
    • 核心节点-矿工功能简介
      • 任务一:竞争区块数据的打包权,然后负责交易数据的确认和打包进区块链中,并且广播给其他节点
      • 接收系统对打包行为的数字货币奖励,从而系统通过这种奖励方式完成数字货币的发行
    • 前端工具
      • 钱包:提供给用户管理自己账户地址以及余额的
      • 浏览器:用来查看当前区块链中发生的数据情况,比如最新的区块高度、内存池的交易数、单位时间的网络处理能力等
      • RPC客户端和命令行接口是用来访问核心节点的功能的,此时核心节点就相当于一个服务器,通过RPC服务提供功能调用接口

image.png

区块链2.0 - 区块链体系化阶段(智能合约应用)
  • 智能合约系统
    • 是市场的去中心化问题
    • 以以太坊为代表的智能合约系统拓展了区块链的功能,当然也是内置了数字货币的功能
    • 由于兼顾了智能合约和数字货币等功能,从而使得以太坊的应用面向了金融、市场、经济的范畴
    • 使用智能合约开发合约程序,并且编译为字节码,最终部署到以太坊的区块链账本中,部署后的智能合约是运行在虚拟机上的,称为「以太坊虚拟机」,正是由于这种智能合约的实现,拓展了区块链系统的功能,同时也具备1.0中的已有功能
  • 以区块链为底层的平台如EOS、以太坊、NEO和QTUM等
    • 这些平台对共识机制、智能合约、开发组件、交易处理速度、开发语言进行的升级与革新那个,通过分片、跨链、侧链、数字身份、评审和设计进行了技术创新

image.png

区块链3.0 - 区块链规模应用阶段(泛社会应用)

image.png

超越了对数字货币或者金融的范畴,将区块链技术作为一种泛解决方案,可以应用在其他领域

  • 泛社会应用
    • 应用从DApp到DAC(Decentralized Autonomous Corporation,去中心化自治公司),再到DAO(Decentralized Autonomous Organization,去中心化自治组织)
  • 超级账本项目 - Fabric
    • 这个版本超越了对金融范畴的应用,拓展支持了各个领域的数据定义,以Fabric子项目为代表
  • 网关控制
    • 增加了对安全保密的需求支持,并且通过数据审计加强对数据的可靠性管理
    • 通过对框架的配置和二次开发可以适应各行各业的需求,如可插拔共识,意思就是共识机制不是固定的,而是通过用户自己去选用配置

行业应用一般是需要具备企业级的属性的,如身份认证、许可授权、加密传输等,且对数据的处理性能也会有要求,此时这些应用都是联盟链或者私有链

主要构成

  1. 加密哈希函数
    • 需要满足的条件
      • 接收任意长度的字符串作为输入
      • 产生一个固定长度的输出值
      • 计算时间在合理范围内
    • 目前用于比特币等数字货币的哈希函数则是加密哈希函数,除了上述条件,还需满足
      • 无碰撞性
        • 强无碰撞性:对于一个哈希函数H,我们无法找到两个不同的x和y值,使得H(x) = H(y)
        • 弱无碰撞性:对于一个哈希函数H以及输入x的值,无法找到另一个y值,使得H(x) = H(y)
        • 应用在于:消息摘要(Message Digest);
          • 消息摘要是指对于任意长度的输入,通过加密哈希函数运算后得到的哈希值,由于无碰撞性的存在,可以认为这个字符串就可以唯一代表输入值;
          • 在网站下载软件时会提供一个该软件的md5sum值,自下载完该软件后会手工计算一遍该软件的MD5sum值,当两个一致时就认为软件是无误的
      • 隐藏性
        • 给定H(x)无法推测出x的值(包括x的任何特点,如奇偶性等)
      • 结果随机性
  2. 数字签名

是对现实签名的一种电子实现,常用的签名算法有RSA(Rivest-Shamir-Adleman Scheme)和DSS(Digital Signature Standard)等,比特币使用ECDSA(椭圆曲线数字签名算法)来生成账户的公私钥以及对交易和区块进行验证;

工作原理

  • Alice 生成一对密钥,一个是sk(signing key),是非公开的;另一个是vk(verification key),是公开的,这一对密钥是同时生成的,且相互关联,但是互相无法推测出对方的任何信息;
  • 数字签名算法接收两个输入:信息M和sk,生成一个数字签名Sm;
  • 验证函数接收信息M、sM和vk作为信息输入,返回结果是yes或no,用于验证信息与签名是否相符 - 验证信息M的数字签名确实是由Alice的sk来签发的
  • 但是一般都不会直接对信息进行数字签名,而是对信息的哈希值进行签名的
  1. 共识机制 - 分布式网络中的数据一致性问题

共识机制是指在一个分布式网络中,让各个参与网络的节点达成数据上的一致性,在区块链中,共识机制的作用还包括区块链的生产、区块链的验证以及系统的经济激励等功能;

应用场景

  • 工作量证明(Proof of Work,POW):
    • 是比特币使用的共识机制
    • 系统会根据当前全网的算力动态调整难度值,保证平均每10分钟网络会根据后续区块的态度来决定认可哪个区块;
    • 一般一笔交易在经过6次确认(约1h)后被认为是比较安全且不可逆的
    • 其核心是"one cpu one vote",期望将比特币设计成一个完全去中心化的系统,任何人都可以使用电脑等终端设备参与进来 - 「中本聪」
    • 生成区块链的概率和拥有的算力成正比
    • 解决区块链数据一致性问题
    • 存在算力集中(矿池)的问题
  • 股权证明(Proof of Stake,POS)
    • 生产区块链的难度和你在系统中的占有股份成正比
    • 在该场景中,区块的生产过程为:节点通过保证金()来对赌一个合法的区块会成为新的区块,其收益为抵押资本的利息和交易的服务费,提供测保证金越多,获得记账权的概率就越大
    • 目的是为了解决工作量证明机制里大量能源被浪费的问题、恶意参与者存在保证金被罚没的风险
    • 根据保证金的数量来调节生产区块难度的方式,会导致“马太效应”的出现(即拥有大量货币的账户权利越来越大,有可能支配记账权)
  • 股权授权证明(Delegated Proof of Stake,POS)
    • 在这个机制里,系统里的每个持币用户都可以投票给某些代表,最终在前101名的代表可以获得系统的记账权,这些代表在既定的时间内锻造区块,并从中收益
    • 既可以提高共识的效率(比特币每10分钟产生一个区块,这种机制可以每10秒内产生一个区块)、又避免了能源浪费和马太效应;
  1. 交易的区块链

在比特币的网络中,每笔交易完成后,这笔交易会广播到比特币的P2P网络,矿工不仅可以接受到这笔交易,还可以接受同时间段内的其他所有未被交易的所有未被记录的交易;

  • 矿工的工作就是将这些所有的交易打包成一个交易区块,具体工作:
    • 矿工会将这些交易凉凉配对,通过默克尔树计算出根节点的值
    • 根节点和上一个区块的哈希值结合,作为一个Challenge String,供矿工作为工作量证明的输入值
    • 矿工完成工作量证明后,并把proof公开出去供其他节点验证。同时在第一条记录(也被称为coinbase transaction)里给自己分配挖矿的奖励
    • 其他节点验证通过后,该区块作为新区块加入到区块链中
    • 矿工也可以收集其他交易记录即的交易费分配给自己

技术理念

区块链本质上是一种记账方法,其记录的内容不仅仅局限于日常的记账,还会记录一些商业合约等等;区块链中“记账”的一方叫做节点,“掷骰子”的操作称为“共识算法”,共识算法会随机挑选出一个节点来记账,当有新内容记录时就会广播到其他节点进行核查与同步,信息正确时就会记录到各自的账本中;

相关概念
  • 区块:区块是区块链中的存储单元,每个区块存储了一组交易信息及这些交易信息的哈希数据和前一个区块的哈希信息
    • 由包含元数据的区块头和包含交易数据的区块主体构成;区块头包含三组元数据:
      • 用于连接前面的区块、索引自父区块哈希值的数据;
      • 挖矿难度、Nonce(随机数、用于工作量证明算法的计数器)、时间戳;
      • 能够总结并快速归纳校验区块中所有交易数据的Merkle(默克尔)树根数据
  • 节点:每个安装有区块链客户端软件且连接在区块链网络上的智能设备如矿机、电脑、手机、服务器等,包括全节点和轻节点
  • 以太坊虚拟机(EVM):用来执行以太坊上的交易,提供智能合约的运行环境,运行在以太坊节点客户端上,类似于jave的JVM
  • DApp(Decentralized APP)去中心化APP,是部署并运行在区块链上的APP,包括前端页面和智能合约
  • 智能合约
    • 本质就是运行在区块链上的程序代码,以太坊首次引入,实现了交易时可以执行定制化的业务逻辑
    • 以太坊提供了图灵设备完整的智能合约编程语言 - Solidity
  • 共识算法
    • 大家都遵循的‘掷骰子’逻辑,用于挑选出一个负责记账的节点来
    • 为了持续生成区块而被所有网络节点认可的方案叫做共识算法,而为了找到一个满足条件的数字,矿工需要付出算力来进行查找,当有节点算出该数字后,其他节点会很快的验证该数字的有效性
    • PoW(Proof of Work)工作量证明
    • PoS(Proof of Stake)权益证明
    • DPoS(Delegated Proof of Stake)授权权益证明
  • 挖矿
    • 节点生成区块的过程
    • 系统会设计一种激励机制,负责奖励记账的那个节点的奖励,而各个节点会去争取这个奖励(即总记账的权限),这个竞争关系被称为‘挖矿’
  • 公私钥
    • 用于身份的标识与识别验证,类似于“虎符”,相互配合使用,可以互相用于加解密;公钥用于身份识别,一般不会直接用公钥,都会采用复杂转化成一种易于记住的字段
  • 脚本系统
    • 用于区块链中的支付交易等程序,交易双方会用对方的公钥进行加密然后附带上自己的签名后传送出去,因为有加密签名等逻辑的存在,所以即使被别人拿到了,也没有用,因为只有交易对方的密钥才能进行解密数据,这个功能的设计在区块链系统中称为“脚本系统”

区块链的技术理念,其实就是大家共同来参与记账,通过一种规则不断地选出账务打包者,其他节点接收验证,并且每个用户都有一对密钥表示自己,通过脚本系统的功能实现在公共网络中定向发送有价值的数据 - 区块链技术丛书

工作流程

区块链的衍生系统有:比特币(最先使用区块链,提出了区块链的概念)、闪电网络、公证通、以太坊、超级账本等。

转账交易流程

转账交易本质上是发送一笔数据,这个数据可以表示为资产、订单或者其他形式的数据

image.png

消息发送出去后,会被打包到区块,然后广播到所有节点进行确认,确认没有问题后就会写入到各自的本地区块链账本中,当网络中大多数节点都确认写入后这个转账就算成功了;

  • 系统所拥有的功能
    • 身份认证功能,确保只有符合身份验证的用户才可以发送数据
    • 拓展交易数据的表达能力,标识一些一般的转账交易,还可以表达更复杂的商业逻辑

区块链中,各个节点都维护自己的账本,然后又共同的维护一份公共的账本(所有账本的交际相同部分),区块链技术其实就是围绕如何保持数据的一致、如何让这个公共账本的数据不被篡改来展开的

区块链技术栈

区块链本身是一种数据的记录格式,其将产生的数据按照一定的时间间隔分割成一个个的数据块记录,然后再根据数据块的先后关系串起来,也就形成了所谓的区块链

区块链账本

所谓区块链就是「区块+链」,区块是指数据块的意思,每一个数据块之间通过某个标志连接起来,形成一条按照先后顺序关系连接起来的一条链;
对于比特币来说,大约每10分钟产生一个区块,区块中主要包含了交易事务数据以及区块的摘要信息;

比特币中的区块链组成 image.png

  • 区块头
    • 区块头通过梅克尔根关联了当前区块中众多的事务所
    • 每个区块间通过区块头哈希值(区块的身份信息标识)串联起来
  • 区块体
  • 相互关系
    • 将新的数据分成了一个一个的数据块,下载数据时是通过并行下载的,不在乎先后顺序,当下载完毕后按照区块头中的身份信息-哈希值进行组装串联起来即可
    • 数据的篡改需要更改其他区块的数据,难度极大,况且在区块链体系中,一个数据的改动需要广播到网络中的其他节点进行验证,当验证通过后才可以进行修改

共识机制

共识机制其实就是一个规则,每个节点都按照这个规则去确认自己的数据,在常规的软件结构中,由于有一个中心服务的存在,就不可能实现这一套机制;
共识算法就是让各个节点通过一个规则将各自的数据保持一致,在区块链中会存在很多的算法去筛选出具有代表性的节点去进行共同维护各自账本的一致性

密码算法

哈希算法是区块链中保证交易信息不被篡改的单项密码机制。哈希算法接收到一段明文后,以一种不可逆的方式将其转化为一段长度较短、位数固定的散列数据;

image.png

哈希算法会对一段数据进行计算从而得到一段摘要的字符串,这段字符串与原数据是唯一对应的;区块账本会对每个区块都计算出一个哈希值,称为区块哈希,然后通过区块哈希进行串联区块,加密过程是不可逆的,意味着无法通过输出的散列数据倒推出原本的明文是什么;
当有人更改了某个区块的内容时,区块哈希也会对应的更改,然后就会导致后续的区块不能与此区块哈希一一对应了;

脚本系统

所谓脚本就是指一组程序的规则,脚本也有固定的程序规则,如比特币系统中的比特币的发送和接收就是通过实现在比特币中的一组脚本程序完成的,而在像以太坊的系统中则是通过实现一套自己的功能脚本系统实现了智能合约的功能;
通过脚本系统可以实现各种各样的业务功能,从而打破常规的区块链记账的单一功能。比如订单、物流信息、供应链信息等都记录到区块链上,凭借着区块链的优点就可以使得对应的功能充分返回出来

网络路由

区块链系统是一个分布式网络,这些网络中的节点通过网络路由来实现通信联系的,对应的协议也被称为「节点发现协议」
还有一个功能就是数据的实时准确同步功能,存在于网络路由中的区块节点是没有中心网络的,不能从指定的节点进行数据获取,而是节点间进行彼此联系并传播数据信息,节点间彼此充当着服务者和被服务者;

区块链系统实际上就是一个维护公共数据账本的系统,一切技术单元的设计都是为了更好地维护好这个公共数据账本 - 区块链技术丛书

  • 通过共识算法达成节点的账本数据的一致
  • 通过密码算法确保账本数据的不可篡改性以及数据发送的安全性
  • 通过脚本系统扩展账本数据的功能范畴

区块链架分类

公有链

共有即完全对外开放,无权限限制,任何人都可以使用、查看,完全公开透明,具有代表性的就是 - 比特币公有链网络系统

  • 存在的问题
    • 由于没有第三方管理,就存在数据不确定性的问题,暂定的方案就是通过不断的相互同步,最终网络中大多数节点都同步一致的区块数据所形成的链就是被承认的主链

私有链

私有即不对外开放,仅仅在个人或组织内部使用的系统,如企业内部的票据管理,财务审计、供应链管理等

  • 特点
    • 需要进行身份的相关验证,同时具备一套权限管理体系
    • 在私有环境中,节点数量和节点的状态是可控的,因此私有环境中不需要通过竞争的方式来筛选区块数据的打包者;

联盟链

介于公有链和私有链之间,这些场景下往往都是由不同权限的成员参与的,与私有链一样,也是需要身份认证权限设置的,数量也是确定的,其中的某些数据也是部分公开的,采用了共识机制进行设计的

其他分类

按照使用目的和场景的不同,又可以分为以数字货币为目的的货币链,以记录产权为目的的产权链,以众筹为目的的众筹链、不局限特定应用场景的通用链等;

区块链不可能三角

image.png

安全性、去中心化和可拓展性

  • 一个区块链的三个要素:安全性、去中心化和可拓展性;但是找到三者之间的平衡是困难的
  • 可拓展性和去中心化通常受到安全性的阻碍,现有的可拓展性方案往往与安全性有冲突
  • 以太坊的相关升级,之所以要有Layer2网络,追根溯源就是因为「区块链不可能三角」这个核心问题导致的

拓展

相关技术栈

  • 前端
    • Scaffold-eth 等脚手架大大降低程序员 dApp 上手成本