1.区块链基本概念

1.发展历史

比特币诞生:

2008年,化名为中本聪的人发表了论文《Bitcoin:A Peer-to-Peer Electronic Cash System》

2009年1月3日,中本聪开发运行了比特币客户端程序并进行了首次挖矿,获得了第一批的50比特币

比特币一种基于密码学原理,无需第三方介入的电子支付系统。

2.区块链定义

区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学的方式保证不可篡改和不可伪造的分布式账本。

3.区块链特征

区块链的特征:公开透明、可追溯且不可篡改、系统高可用、用户匿名

4.区块链分类

在区块链技术中,存在三种主要类型的链:公有链、联盟链和私有链。它们在许多方面有所不同,包括访问权限、去中心化程度和用例。

公有链联盟链私有链
访问权限开放式网络,任何人可加入只有授权的节点或实体可以参与网络仅有单个组织或实体控制
去中心化高度去中心化,每个节点都可以验证区块和挖矿中度去中心化,网络由一组实体共同管理部分去中心化,网络控制在单一实体中
安全性通过共识算法保障安全性和透明度依赖于参与方之间建立的信任关系安全性依赖于访问权限控制和网络管理员的管理
示例比特币(Bitcoin)和以太坊(Ethereum)Hyperledger Fabric、R3 Corda一些企业内部应用的区块链系统
  • 公有链是对所有人开放的去中心化网络。
  • 联盟链是由已授权的实体参与的中度去中心化网络。
  • 私有链是由单一实体或组织完全控制的网络。

区块链不可能三角:去中心化、效率以及安全性不可能同时做到最优,需要在三者之间兼容均衡!

根据不可能三角原理,在区块链系统中,难以同时实现这三个目标的最佳状态。改进某一个方面通常会对其他方面产生影响。例如:

  • 提高去中心化可能降低可扩展性: 更多节点参与验证可能会减慢交易速度,导致可扩展性问题。
  • 追求更高的效率可能牺牲安全性或去中心化: 提高吞吐量可能意味着对安全性或去中心化程度的降低。

5.区块链架构

区块链由应用层、合约层、激励层、共识层、网络层以及数据层组成;

应用层:最顶层的应用

合约层:即智能合约、脚本代码

激励层:数字货币的发行机制等

共识层:PoW、PoS共识机制

网络层:P2P网络、验证机制

数据层:交易数据、链式结构、时间戳、默克尔树、加密等

2.P2P&密码学

1.P2P

P2P即,Peer-to-Peer,对等网络,相对于CS架构,P2P有以下特点:

1.没有服务器

2.任意端系统之间直接通信

3.节点阶段性接入Internet

4.节点可能更换IP

如果使用P2P网络,就失去了中心化服务器,那怎么知道去哪里下载文件呢?如何索引呢?

P2P网络中一般有三种索引方式,分别对应着P2P网络架构:

1.集中式索引,在集中式索引中,内容和文件传输是分布式的,但是内容定位趋势高度集中化的。

2.洪泛式索引,洪泛式查询是完全的分布式架构,每个节点对它共享的文件进行索引,且只对它共享的文件进行索引,一定查询命中,则利用反向路径返回查询节点地址。

3.层次式覆盖网络,层次式覆盖介于集中式和洪泛查询之间的方法

2.密码学

哈希函数是密码学中的一个特殊而重要的密码算法,是一个单向函数,其运算过程中会有信息熵的丢失!

哈希函数能够将一段任意长度的消息转换成固定长度的哈希值!

此外,网上也有很多在线哈希计算的工具,例如:在线哈希计算

一个优秀的哈希函数应具备以下性质:

1.可以作用于任意长度的数据块

2.可以产生固定长度的输出

3.给定任意长度输入,输出的计算相对容易

4.对于给定的哈希值,要找到原数据在计算上是不可行的(单向性

5.对于一条消息及其哈希值,无法找到另一条消息使其计算出同样的哈希值(抗碰撞性

哈希函数常用于数字签名和检查文件完整性方面。

1.对称加密

对称加密指的是加密解密使用同一个密钥,主要加密算法代码是DES和AES

DES密钥长度是64位,但是实际有效位数是56位,因为每个第八位用于奇偶校验,由于其长度较短,容易被暴力破解,目前已经认为不在安全;

AES密钥长度是128、192等长度,比DES更安全,目前被广泛使用。

因此:虽然DES和AES都是对称加密算法,但由于DES密钥长度较短且易受到暴力破解攻击的影响,因此已被AES所取代。AES具有更长的密钥长度和更高的安全性,因此在实际应用中更为普遍,并被视为更加安全可靠的加密标准。

2.非对称加密

非对称加密是一种加密方法,与对称加密不同,它使用一对密钥进行加密和解密:公钥(Public Key)和私钥(Private Key)。这种加密方式也被称为公钥加密。

发送方可以使用接收方的公钥对数据进行加密,只有拥有对应私钥的接收方才能解密数据。

但是相对于对称加密,非对称加密的运算速度较慢,效率较低

常见的非对称加密算法:RSA、ECC

3.数字签名

数字签名是网络通信中,附加在原文信息上的一端额外的数据,是哈希函数和非对称加密的一种综合应用模式。

4.环签名

定义:环签名是数字签名的一种变种,允许签名者保持匿名性。它允许签名者使用自己的私钥在一组用户中生成一个签名,但不泄露签名者的身份。

工作原理:在环签名中,签名者能够生成一个签名,并且不必暴露自己的身份。签名的验证方仅知道签名来自特定群体的一个成员,而无法确认是其中的哪个成员。

环签名的签名方掌握一组公钥及其中一个公钥的私钥。

应用:环签名可用于匿名投票、隐私保护的交易、身份验证等场景,允许进行匿名签名和验证。

数字签名和环签名的主要区别在于匿名性。数字签名是为了确认消息的真实性和发送者身份,而环签名是为了确保签名的匿名性,即签名者的身份不被披露。

5.门限签名
  • 定义: 门限签名是一种多方安全协议,它允许由多个签名者(例如一个组织或多个个人)共同生成一个签名,而不需要将私钥集中存储。

  • 工作原理: 在门限签名中,私钥被分成多个部分,例如 n 个部分中的 t个部分能够生成有效的签名。这意味着任意 t 个签名者可以合作生成签名,但少于 t 个签名者无法完成签名过程。

  • 优势: 门限签名提供更高的安全性和弹性,因为它不要求单一实体拥有整个私钥,而是分散存储,减少了单点失败和潜在的攻击风险。

  • 应用: 门限签名通常用于需要多方参与和高度安全性的场景,如金融交易、多方授权操作、多重签名钱包等。

  • 数字签名是由单个实体使用其私钥对数据签名。

  • 门限签名是由多个实体共同合作完成签名,其中仅需部分实体的授权。

3.共识算法

1.共识定义

在分布式计算理论中:共识是指在计算过程中需要的某些数据值达成一致

在区块链中:共识是指所有共识节点(参与验证节点)按照相同顺序执行交易,写入账本

我们把存在作恶节点的系统成为拜占庭错误,否则称为非拜占庭错误,相应地,把能够应对拜占庭错误的共识算法称为拜占庭容错的,否则为非拜占庭容错的。

2.PoW算法

PoW(Proof-of-Work,工作量证明)是比特币中所使用的共识算法

比特币共识的目的是使得每个节点的账本一致。

所有节点通过工作量证明来争夺记账权,最先提供工作量证明的节点向全网广播自己的区块(账单),其他所有节点验证无误后将该区块同步到自己的区块链(账本)中。

可以把工作量证明体现为一个难题,但是这个难题的选取有三个条件:

1.难题的条件比较复杂

2.对计算结果的验证非常方便

3.关于每个区块的难题都不同

3.PoS算法

PoS(Proof-of-Stack)权益证明

虽然PoW巧妙利用工作量证明成功防止了女巫攻击,但是PoW带来的资源浪费是不可忽视的,在这一背景下,PoS应运而生。

PoS认为:持有货币越多的人越不可能作恶

PoS巧妙的使用币龄的大小来衡量获得记账权的概率,同时,一旦挖出一个区块便将该节点币龄清零

币龄=持有货币数量*持有时间

但是PoS仍然有资源浪费,同时容易形成财富中心,不是一个健康的系统,PoS首次在点点币中被使用

4.DPos算法

DPoS(Delegated Proof-of-Stake,委托权益证明)

在DPoS中,所有节点分为记账节点和普通节点

共识流程:

1.节点申请成为候选记账节点

2.所有持币节点参与投票,选出n个记账节点

3.由n个记账节点轮流参与记账

4.每一轮记账过后调整记账节点,同时剔除作恶节点和未能完成记账的节点


虽然DPoS避免了挖矿带来的资源浪费,但是记账权仅仅掌握在少数几个节点手上,因此被质疑违背去中心化的初衷。

5.VRF

PoW、PoS、DPoS的算法核心都是随机地选取一个节点进行记账打包区块,其他所有节点验证并接受区块。

而VRF本身不是共识算法,其是一种随机机制

随机机制必须满足

1.能够抵御女巫攻击

2.随机的结果全网统一

3.随机结果不可预测

4.随机的结果可验证

在区块链中,使用 VRF(可验证随机函数)来选择出块节点通常涉及以下过程:

  1. 节点注册和证明: 首先,网络中的节点需要注册并证明其身份。通常,节点需要提供一定数量的抵押或具有一定数量的代币来参与这个过程,以显示其参与区块生产的权益。

  2. VRF的使用: 一旦节点在网络上注册,它们可以使用 VRF 来生成一个随机数。这个随机数通常是基于节点的私钥和一些随机输入的函数运算结果。此数被认为是不可预测的。

  3. 验证过程: 节点生成随机数后,它会将这个随机数提交到网络中,随后其他节点会验证这个随机数的合法性和正确性。其他节点能够使用 VRF 的公钥和生成该随机数所需的输入来验证这个随机数的有效性,从而确认该节点生成随机数的合法性。

  4. 选取出块节点: 一旦验证通过,网络可以根据生成的随机数来确定哪个节点将被选为下一个出块节点。通常情况下,选取出块节点的条件可能与该随机数与一定区间的大小有关。比如,选择随机数最小的节点来出块。

通过使用 VRF,区块链网络可以实现一种随机但又可验证的出块机制。这种方法通过随机数确保了公平性和抗攻击性,而其他节点可以验证这个随机数的合法性。 VRF被认为是一个有效且安全的方式来选择出块节点,同时避免了中心化的控制。

4.比特币介绍

1.比特币概念

比特币是由一系列概念和技术作为基础构建的数字货币生态系统

比特币代表了数十年密码学和分布式系统研究的高潮

比特币包括四个关键创新:

2.比特币工作原理

比特币系统由用户、交易以及旷工组成。

比特币交易:告知全网这部分比特币的持有者已授权把它转给新的持有者。

比特币交易可以分为以下三类

1.一般交易 2.集合型交易 3.分发型交易

比特币交易的构建一般会经历三个过程:

1.获取交易输入 2.创建交易输出 3.广播交易

4.交易广播后会通过比特币P2P网络传送到各个节点进行验证计算

交易只有被找到工作量证明的旷工打包到区块中之后,这个交易才会成为区块链的一部分。

此外,一般认为一个区块经过六次以上确认就被认为是不可撤销的!

区块链深度与高度的区别:

“深度”通常指的是一个特定区块相对于区块链中的最新区块的距离。它表示某个特定区块相对于当前最新区块的区块数。例如,如果最新区块的高度是 100,而某个特定区块的高度是 90,那么这个特定区块的深度就是 10(最新区块的高度减去该特定区块的高度)。

深度可以用于描述交易的确认次数或确定交易在区块链上的位置。当一个交易被包含在区块链中越来越多的区块中,它的深度也会不断增加,这通常表示交易被越来越多的区块确认。

“高度”通常是指区块链中特定区块在整个区块链中的位置或编号。它代表着区块在区块链中的顺序或序号。例如,第一个区块(创世块)的高度是 0,而每新增一个区块,区块链的高度就加一。

因此,区块链的高度表示了区块链的长度,即当前区块链中已经包含的区块数量。

总结:深度指的是特定区块相对于最新区块的距离,而高度表示了区块在整个区块链中的顺序或编号。深度用于描述区块或交易在区块链中的相对位置,而高度表示区块链中的绝对位置。

5.比特币核心客户端

1.获取指定高度区块的哈希值

bitcoin-cli getblockhash

2.获取指定区块的信息

bitcoin-cli getblock

3.查看核心客户端状态信息

bitcoin-cli getinfo

4.查看命令列表

bitcoin-cli help

5.以十六进制返回交易信息

bitcoin-cli getrawtransaction

6.解码序列化后的交易信息

bitcoin-cli decoderawtransaction

7.创建新的比特币地址

bitcoin-cli getnewaddress

8.获取指定地址对应的私钥

bitcoin-cli dumpprivkey

9.获取全部对等节点的连接信息

bitcoin-cli getpeerinfo

bitcoin-cli getblockhash <index> # 获取指定高度区块的哈希值bitcoin-cli getblock <hash> [verbosity]# 获取指定区块的信息bitcoin-cli getinfo# 查看核心客户端状态信息bitcoin-cli help # 查看命令列表bitcoin-cli help getblockhash# 查看特定命令说明bitcoin-cli getrawtransaction <txid> # 查看十六进制返回交易信息bitcoin-cli decoderawtransaction <hexstring> # 查看解码后的交易信息bitcoin-cli getnewaddress# 创建新的比特币地址bitcoin-cli dumpprivkey address# 获取指定地址对应的私钥bitcoin-cli getpeerinfo# 列出全部对等节点连接信息

6.密钥和地址

1.公钥与私钥

私钥通过椭圆曲线乘法计算得到公钥。

椭圆曲线乘法特点就是向一个方向计算很容易,但是不可以向反方向推导!

每个比特币账户包括一个私钥和一个公钥。私钥(k)是一个随机产生的数字。有了私

钥,我们就可以使用椭圆曲线数乘这个单向加密函数产生一个公钥(K)。有了公钥(K),

我们就可以使用一个单向加密哈希函数生成比特币地址(A)。私钥、公钥和比特币地址之

间的关系如下图所示:

1.私钥

生成一个比特币私钥在本质上是在1- 2256 2^{256}2256之间随机选一个数字

原始生成私钥方法:可以用硬币来随机生成私钥:抛硬币256次,正面记1,反面记0。

这样就可以得到一个256位的二进制数字,作为比特币私钥。

WIF格式私钥:

WIF(Wallet Import Format)是一种用于在各种比特币钱包之间导入私钥的标准格式。WIF格式的私钥是对原始私钥的编码,以便更容易地管理和传输私钥信息。

WIF格式私钥的主要特征是,它以一种易于识别和使用的格式表示私钥。通常它以一个字母开头,表明私钥的网络(如主网或测试网),后面接着一个私钥的哈希值(Base58编码)。此格式不仅包含私钥,还包含校验和和其他信息,使其更容易识别和转换为十六进制私钥。

使用WIF格式的私钥使得用户能够在不暴露私钥的情况下更方便地导入到比特币钱包中,并在比特币交易中使用。

2.公钥

比特币公钥是通过密码学算法生成的

K = k ∗ GK=k*GK=kG

从私钥计算得到公钥,这是一个不可逆转的过程,椭圆曲线乘法在密码学称之为陷阱门的一种函数,在一个方向很容易计算,而相反的方向不可能计算。这是比特币所有权不可伪造和安全数字签名的基础。

公钥格式:

传统公钥通常表示为前缀04紧接着两个256比特的数字,其中一个是x坐标,另一个是y坐标

那可以想办法压缩吗?

毕竟x与y满足椭圆曲线关系式,因此只需要存储x即可计算出y坐标,但是还需要保留y的符号。

因此,压缩办法就出来了!

如果y坐标是奇数,压缩公钥的前缀是03

如果y坐标是偶数,压缩公钥的前缀是02

2.比特币地址

公钥经过双哈希或者Hash160后即可变成公钥哈希,公钥哈希经过Base58check编码后即可变成比特币地址!具体过程如下所示:

Base64表示法是使用26个小写字母,26个大写字母以及0-9的10个数字以及+和/两个字符组成!

而Base58是Base64的子集,但是Base58舍弃了Base64中容易读错和混淆的子串,简而言之,Base就是由不包括0(零)、O(大写O)、l(小写字母L)、I(大写字母i)四个字符的大小写和数字组成。

Base58编码过程:

3.高级密钥和地址

假设你穿越到10年前,购买了一大笔bitcoin后,如何安全地保管私钥,等待多年后的升值?

1.可以使用一个长密码对经过WIF编码的私钥进行加密,然后将WIF格式私钥和长密码分别存储在不同的纸钱包中

2.另外,还可以使用多重签名技术,需要使用多个私钥进行授权才能进行一笔交易

3.不要在公开的网络上公布私钥或让其暴露在未经加密的环境中

7.比特币交易原理

1.基本概念

UTXO:为花费交易输出

其实,比特币系统中是没有余额的概念的,实际上一个钱包地址对应的所有可用的UTXO

比特币存储的实际上是一笔又一笔的交易,最后永远只有未花费过的交易输出,也就是UTXO

交易类型主要分为创币交易和普通交易

2.交易介绍

交易包括交易输入和交易输出

交易输入中有:交易ID(txid)、输出索引(vout)、解锁脚本(scriptSig)以及序列化(sequence)

而交易输出中包括多个输出,每个输出都对应的着交易金额(value)以及锁定脚本(scriptPubKey)

此外,可以在比特币核心客户端中经过解码查看具体的交易结构,步骤如下:

bitcoin-cli getrawtransaction txid # 查看txid对应的系列化后的原始交易数据bitcoin-cli decoderawtransaction <origin data> # 即可查看对应的交易数据结构

另外,交易的总输入减去总输出,就是每笔交易的交易手续费,其用以补偿比特币旷工在保障网络安全的付出,同时可以防止交易泛滥。

1.比特币脚本语言

比特币交易脚本语言称为脚本,是一种基于栈执行的逆波兰表达式语言,其是非图灵完备的,每一笔交易被验证时,每一个输入中的解锁脚本scriptSig与对应的输出中的锁定脚本scriptPubKey一起执行,以确定交易是否满足支付条件。

解锁脚本由签名和公钥组成,而锁定脚本中主要是包括操作符和公钥哈希,具体如下图所示:

比特币脚本语言是非图灵完备的,这样可以防止交易验证机制被作为一个漏洞而加以利用!

3.时间锁

时间锁可以分为相对时间锁和绝对时间锁,其又分别可以分为交易级和脚本级的时间锁。
对于脚本级别的时间锁需要和交易级别的时间锁结合来使用,例如,使用CLTV交易级别的时间锁,就需要在交易输出中的锁定脚本添加Time ClockLockTimeVerify Drop,验证的时候需要字段中的nLockTime的时间大于CLTV对应的时间才可以使用,否则交易无法通过验证。
相对时间的锁定原理也是类似。

8.比特币网络

1.网络模型

1.CS架构

由终端用户发起请求,服务端进行处理各个请求。

2.P2P架构

同一网络中的每台计算机都彼此对等,每个节点共同提供网络服务,不存在任何特殊节点

比特币为什么要使用P2P模型:

1.拓扑结构简单

2.比特币本身设计就是一种点对点的数字现金系统

3.节点功能

节点的功能:钱包、挖矿、保存完整区块链以及路由

Wallet:收集钱包地址相关的UTXO、计算余额以及构建交易

Miner:收集交易、制作区块头获得出块奖励和交易费

Network:路由功能,所有的节点都有这个功能,其实验证和传播交易

Blockchain:保存完整的区块链信息

4.节点类型

1.普通全节点

只要是下载了完整且最新的区块链数据,那它就是一个全节点

2.比特币核心全节点

是功能最全的节点,首先是一个全节点,另外还有钱包Wallet和Miner功能

3.SPV节点

又称轻节点,没有完整的区块链信息,需要通过向全节点请求必要的交易数据,仅有Wallet和Network功能

4.独立挖矿节点
主要挖矿,收集交易,制作区块头,获得出快奖励和交易费

2.通信过程

前面谈到了四个节点类型,那么新入网的节点,如何接入比特币网络呢?需要哪些条件呢?

通信过程如下所示:

1.通过DNS种子节点发现对等节点

2.与其中一个对等节点建立TCP连接,端口在8333(这个端口通过被当做比特币使用的)

3.在建立连接时,新节点首先发送verson信息(版本号、区块数以及时间)给其对等节点

4.对等节点收到版本信息后检查其版本信息是否与本地兼容,如果兼容的话便会发送一个verack确认连接的信息

5.建立连接后,新的节点会向其邻居节点发送包含自己IP地址的Addr消息,此外还可以发送getaddr消息给邻居,要求返回其他对等节点的IP地址列表。

此外,每一个在线节点都必须定时进行两项工作:

1.新节点加入时引荐工作

2.定时发送消息,90分钟内通信消息,认为已经断开连接

3.布隆过滤器

1.SPV节点和全节点对比

这里需要注意,SPV节点只会收集并验证涉及它们钱包地址的交易,而不存储整个区块链,这样它们可以验证支付和余额而无需下载整个区块链。

那SPV节点没有完整区块链信息是如何验证交易的存在以及合法的呢?

当SPV接受到某个交易信息时,会先使用布隆过滤器来筛选,看看是不是自己感兴趣的地址,如果成功通过布隆过滤器筛选,则向全节点请求默克尔路径来验证某个交易的合法性,此外使用布隆过滤器还可以极大的保护SPV节点的隐私,不需要对外暴露自己感兴趣的地址。

Bloom过滤器被SPV节点用来过滤从它的对等节点接收到的交易,仅选择SPV节点感兴趣的交易,而不用暴露它感兴趣的地址或者密钥。

2.布隆过滤器

布隆过滤器(Bloom Filter)是一种数据结构,用于快速检查一个元素是否属于某个集合,其设计基于哈希函数和位数组。

布隆过滤器具有以下特点:

  1. 高效的成员检查: 可以快速判断一个元素是否可能在集合中,或者一定不在集合中。
  2. 占用空间少: 使用的空间较小,比其他数据结构存储相同数量的元素所需空间更小。
  3. 哈希函数: 布隆过滤器利用多个哈希函数对元素进行哈希,将结果映射到位数组的多个位上。
  4. 存在误判: 存在一定的误判率,即可能将不属于集合的元素误认为属于集合,但不会出现漏判。

基本操作包括插入和检查:

  • 插入(Add): 对于要插入的元素,对其进行多次哈希,将对应的位数组位置标记为1。
  • 检查(Check): 对于待检查的元素,对其进行相同次数的哈希,检查所有对应的位数组位置是否均为1。如果有任意一个位置不为1,则该元素一定不在集合中;若全部位置均为1,该元素可能在集合中(可能存在误判)。

布隆过滤器常见的应用包括网络缓存、拼写检查、防止重复提交等场景,其中对于误判率的容忍度是一个需要权衡的因素。

9.区块和链

1.基本概念

区块是一种被包含在区块链里的聚合了交易信息的容器数据结构。

区块有区块头和区块体组成,区块头只有80Byte,而区块体大小不确定,其主要记录交易信息,同时每个区块大小不超过1MB。

区块头包括版本协议、前一区块哈希值、时间戳、难度目标、默克尔树根、随机数等

1.区块标识符

区块标识符主要包括区块头哈希值和区块高度。

区块哈希值可以唯一、明确地标识一个区块,并且任何节点通过简单对区块头进行哈希计算都可以获取该区块的哈希值。此外,需要注意的是,区块头哈希值通过不包含在本区块的数据结构里,但通常作为元数据存储在一个索引数据库表中,以便于快速检索。

区块高度:通过该区块在区块链中的位置进行识别。

虽然一个单一的区块总是会有一个明确的、固定的区块高度,但是反过来不成立,一个区块高度并不总是识别一个单一的区块。

那这里思考一下,区块哈希值可以唯一标识一个区块,那么区块高度可以唯一标识一个区块吗?

哈哈,这里当然是不能,因为可能会有多个旷工同时挖出一个合法的区块,那么这样就会出现分叉的情况,就会导致多个区块拥有同一个区块高度,况且区块链中本身也有区块主链和备用链等。

2.创世区块

区块链中的第一个区块被称为创世区块,它是所有区块的共同祖先,也就是说,无论从任何区块高度出发回溯,最终都可以找到创世区块

每个区块中的第一笔交易都是Coinbase交易,其因为是发行比特币,所以其中没有交易输入,因此可以在交易输入中添加自定义的数据,早先也有人在里面示爱表白等。

而在创世区块中的Coinbase交易输入中包含“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks.”这句话是泰晤士报当天的头版文章标题。这句话是告诉人们,一个独立的货币体系的重要性!

3.默克尔树

比特币区块链中的每个区块都包含该区块中所有的交易,以默克尔树(merkle tree)表示。
默克尔树是一种哈希二叉树,它是一种用作快速归纳和交易大规模数据完整性的数据结构。

因为默克尔树是二叉树,所以它需要偶数个叶子节点,如果仅有奇数个交易需要归纳,那最后的交易就会被复制一份以构成偶数个叶子节点。

此外,为了证明一个块中包含一个特定的交易,一个交易只要计算 l o g2Nlog_{2}Nlog2N*32字节的哈希值,形成一条从特定交易到树根的认证路径或者默克尔路径,随着交易数量的增长,这样的计算量显得尤为重要。

有了默克尔树,一个节点能够仅下载区块头(80Byte/区块),然后通过一个全节点会是一条默克尔路径就能认证一条交易的存在,而不需要存储或者传输大量区块链中大多数内容了。

10.挖矿机制

1.挖矿介绍

其实挖矿这个词有点误导,一般意义的挖矿类似于贵金属的提取,于是人们将更多的注意力集中到创造每个区块后获得的奖励。虽然挖矿的行为会被这种奖励所激励,但挖矿的主要目的不是这个奖励或者产生的新币。挖矿的过程会创建新币,但是挖矿不是最终目的,而是一种激励手段,通过挖矿能够实现去中心化的安全。

挖矿是一种去中心化的交易清算机制,通过这种机制,交易得到验证和清算。

比特币系统中平均每十分钟会产生一个区块,这个区块里包含了从上一个区块产生到目前这段时间内发生的所有交易,这些交易依次被添加到区块链中。

挖矿保证了系统的安全,旷工们在挖矿过程中会得到两种类型的奖励:创建新区块的新币奖励以及该区块中所有交易的交易费。

为了得到这些奖励,旷工们争相完成一种基于加密散列算法的数学难题。这些被称为工作量证明的难题的答案会放在新区块中,作为旷工付出大量计算工作的证明。在工作量证明的竞争中,获胜者会得到奖励并且拥有在区块链上的记账权,这是比特币安全模型的基础。

此外,奖励机制被设计为收益递减模式,旷工通过创造新区块得到的比特币数量大约每四年减少一半,到2140年后,不会在有新的比特币产生。除了创币奖励外,旷工们还会争相获取交易费,每笔交易都可能包含一笔交易费,交易费是每笔交易输入与输出的差值。

由于随机数是32位的,可能尝试了全部的随机数仍没有找到符合要求的解,此时可以在coinbase交易中添加数据实现,然后重新从0开始尝试随机数,如果后序仍无法找到解,还可以更新时间戳。

2.挖矿难度调整

简单来说,挖矿的难度会随着全网的算力进行动态调整,如果难题是固定不变的,那随着全网算力的增加,挖矿的难度越来越简单,那可能到后期挖出一个区块的时间远远小于十分钟,这是不满足要求的。因此比特币难度会随着全网算力来进行动态调整。

具体难度调整是由最近的2016个区块的花费时长与20160分钟比较得出的。
简单来说,如果网络发现区块产生周期比10分钟要快,则增加挖矿难度;反之则降低难度。
这个公式可以总结为如下格式:

3.挖矿手段

挖矿经历了四个过程,从最初的CPU挖矿到GUP挖矿,然后到ASIC矿机挖矿,目前使用运算力挖矿了!、

由于比特币全网的运算水准在不断的呈指数级别上涨,单个设备或少量的算力都无法在比特币网络上获取到比特币网络提供的区块奖励。在全网算力提升到一定程度后,过低的获取奖励的概率,促使一些人开发出一种可以将少量算力合并联合运作的方法,使用这种方式建立的网站便称为矿池!

如果旷工加入矿池,成功出块的奖励支付到矿池的比特币地址,而不是单个旷工的。参加矿池的旷工把搜寻候选区块的工作量分割,并根据他们挖矿的贡献赚取份额,矿池为赚取份额设置了一个较高的目标值(较低难题),通常比比特币网络的难度低1000倍以上。

通过设置一个较低的取得份额的难度,矿池可以计量出每个旷工完成的工作量,每当旷工发现一个小于矿池难度的区块头散列值,就证明它已经完成了分配给自己的寻找结果所需的散列计算。

11.比特币的应用

1.基础模块

为了使应用程序能正常且长期运行,比特币提供了一系列的保证,可以作为基础模块来创建应用程序。

这些包括:

1.杜绝双重支付:确保UTXO不会被花费两次

2.不可篡改:一旦交易被记录到区块,并随后添加足够多的确认区块(超过6个),则交易数据可以认为不可篡改

3.中立:任何节点都可以支付足够多的费用来创建有效的交易

4.安全时间戳:拒绝任何时间戳距离现在太远的区块(曾经或未来)

5.授权:数字签名提供授权担保

6.可审计性:所有交易公开、可审计

7.可核算:交易输入=交易输出+交易费

8.永不过期:有效的交易永不过期

9.公正性:无法通过破坏签名来修改交易

10.交易原子性:交易要么经过验证并被确认,要么不是

11**.面值固定**:交易输出是固定面值和不可分割的单位

12.法定人数:多重签名强调授权人数

13.时间锁:支持相对和绝对时间锁

14.复制性:交易被创建并验证有效后会被全网复制广播

15.防伪保护:无法凭空创建或伪造比特币

16.一致性:区块深度越深就与不可能被改变

17.可记录外部状态:每个交易可以通过OP_RETURN提交一个数据,来表示外部系统的状态改变

18.可预测发行量:总计不到2100万比特币

基于这些基础模块,有一些典型的应用:

1.数字公证(不可篡改性+时间戳+持久性)

数字指纹可以通过一个交易提给区块链,以证明文件在此存档的时间内是存在的(安全时间戳)。数字指纹不能在任何时候修改((不可篡改性),证据将被永久存储(持久性)。

2.支付通道(法定人数+时间锁+杜绝双花+永不过期+可审计+授权)

一个带有时间锁的法定人数为2-2的多重签名被作为支付通道的结算交易时,可以被持有或者可以在任何实践由任何一方授权的情况下进行花费。然后双方可以在更短的实践锁创建双重支出结算的确认交易。

2.典型应用

1.染色币

染色币是指利用比特币交易来记录除比特币之外的外部资产以及外部资产的创建、所有权确认和转让的这类技术。

染色币用于跟踪第三方持有的数字资产和实物资产,并通过染色币所有权证书来进行交易。

例如:

可以在一张纸币上记录下,这是一张汽车兑换券,那么这张纸币就包含了一辆车的资产信息,可以通过交易这张纸币,达到车辆所有权买卖的目的。同样的,可以在一笔比特币交易上,记录类型的信息,以达到外部资产的转移。

当今主流的染色币:Open Assets和Colu两种

此外,这两种系统对染色币的使用是相互隔离的,并不兼容,并且在普通系统中无法使用染色币

染色币的本质

染色币交易本质上就是一笔合法的比特币交易,特殊之处在于交易的输出中包含一笔OP_RETURN交易,其中包含一块数据域,可以填入任意数据,染色币就是在这块数据域内记录数据的。

另外,一般的区块链浏览器不支持染色币协议,因此无法解析这块数据,而染色币浏览器中可以使用相应的染色币协议解析。

2.简单支付通道

由于比特币系统10分钟出一个区块,每个区块的大小是1MB,最多有2000-3000笔交易,一次比特币每秒的交易量最多只有7次,这远远不能满足大众的需求。因此便诞生了支付通道。

支付通道:比特币区块链之外双方之间交换比特币交易的一种无须双方相互信任的机制。

状态通道:支付通道就是一种状态通道,其中被改变的状态是虚拟货币余额。

支付通道建立的过程如下所示:

1.资金交易:在交易双方之间建立一个状态通道,锁定的状态即为通道的初始余额

2.承诺交易:双方交换已签名的交易,任何一方都可提交结算到区块链上,但是等到通道关闭后再做结算。可以有多笔承诺交易,最新的承诺交易可以废止之前的。

3.结算交易:合作结束时发生,代表通道的最终状态。

3.无须信任的通道

简单支付通道是在理想情况下建立的,即双方均在合作,没有任何交易失败或者企图作弊的情况下工作。

但是真实情况下不能这么顺利,例如:

如果有人给支付通道付款后,某人掉线后,那么在通道中的资金就无法取出。此外,任何一方都可以向区块链上提交有利于自己的交易,例如,我买了1个小时的视频,但是我向区块链上提交的却是半个小时的费用,那该如何避免这样的情况呢?

这时候就需要使用无须信任的通道
其核心思想是:消费者在签署资金交易时,建立退款交易(第一笔承诺交易),该交易的时间锁更长。另外,每个新产生的承诺交易,其锁定时间更短一些,具体如下所示:

但是,其也有不少的缺点:

1.在通道首次打开时建立最大时间锁,限制了通道的使用寿命

2.承诺交易设置时间锁间隔为1个区块,这让参与者必须时刻保持警惕,保持在线并实时监控,并随时准备传送正确的承诺交易

3.双方之间的承诺交易也有数量限制

4.非对称可撤销承诺

其核心思想是通过撤销密钥和承诺交易来异步控制比特币和交易所有权

其非对称体现在:每个人手持的承诺交易都是立即支付对方的金额,而自己需要等待一段时间才能收到资金。即,单方面广播承诺交易会能让自己处于不利的状态。

此外:还有一个撤销密钥,因为撤销密钥的存在,允许被欺诈的一方通过占有通道的所有余额来惩罚不守信用的骗子。

通过这种设计结构,通道可以无限期地保持开放,并且可以拥有数十亿的中间承诺交易。

简单支付通道无序信任通道非对称可撤销承诺
说明适合无欺骗的场景可以解决欺骗和掉线问题可以解决欺骗问题和掉线问题
优点简单不需要担心掉线,欺骗问题通道可以无限使用
缺点容易造成BTC的丢失限制了通道的寿命,双方之间的承诺交易有限
5.散列时间锁合约


恭喜你,你已经学完了关于区块链的几乎全部的基础知识,区块链是一个新型的技术,是一个可以和多种技术集合的新型技术,目前区块链大多数还是和人结合应用为主,主要实现支付功能,未来将会与物结合,比例,区块链与物联网、5G结合,通过物联网采集设备的信息数据,通过5G技术传递到区块链后台存储等。