主页 > imtoken中国版 > 区块链学习笔记(1)--区块链工作原理part1

区块链学习笔记(1)--区块链工作原理part1

imtoken中国版 2023-02-12 06:54:44

区块链的工作原理

《区块链技术综述》论文研究

注:本文图片来自论文《区块链技术评论》张亮2017

入侵

文章目录

*区块链的工作原理

*比特币的工作原理

* 默克尔树

* 分布式账本

* 账本存储模型

* 加密货币和数字资产

* 账本分类

* 共识算法

* 共识算法分类

* 常见的共识算法

* 战俘

*位置

* BFT(拜占庭容错)

* DPOS(委托权益证明)

* 共识算法对比

* 智能合约

* 区块链上的智能合约

* 从脚本到智能合约

* 工作原理

* 合约运行环境

* 密码学

* 常用理论技巧

*哈希

* 加解密

* 数字签名和验证

* 身份管理

*隐私保护

* 区块链安全

* 51% 攻击

* 分叉

* 智能合约安全

* 欺诈攻击

* 钱包安全

* 热点研究

比特币的理论原理

比特币如何运作

1) 节点构造新交易并将新交易广播到全网。

2) 接收节点检查接收到的交易,判断交易是否合法。检查通过后,该交易将被包含在一个新的区块中。

3)全网所有矿工节点对上述区块执行共识算法,选择打包节点。

4)节点通过共识算法,将自己打包的新区块广播到全网。

5)其他节点验证打包节点的区块,多次确认后,区块附加到区块链上。

默克尔树

比特币系统的数据结构如图所示。比特币中的交易被组织成一个默克尔树结构。交易存储在 Merkle 树的叶子节点上,哈希成对合并

直到获得根节点。根节点的哈希值作为区块头的元素。此外,该区块还包括时间戳、Nonce 和前一个区块的哈希值。 Nonce是矿工完成工作量证明算法的输入,也是矿工获得奖励的凭证。区块头包含前一个区块的哈希值,因此每个区块在逻辑上链接在一起。

Merkle 树结构可以在只有部分节点的情况下快速验证交易的有效性,大大减少了节点的存储空间,适用于轻节点。

分布式账本

分布式账本≠区块链

分布式账本是指可以在多个站点、不同地理位置或多个机构群体的网络中实现共同治理和共享的资产数据库。分布式账本技术是指实现分布式账本的技术集合。

账本是一系列包含交易和信息的数据结构。账本可以记录多方资金的交易记录、物品交换记录等信息。

区块链中的账本 因为账本在所有参与节点之间复制,交易被组织成块,然后被组织成逻辑链,区块链是一个不断增长的账本。

账本存储模型

*

UTXO 模型:每笔交易由交易输入和交易输出组成。可以有多个交易输入和交易输出,这意味着一笔交易可以将之前多个账户中的比特币组合起来,转移到其他多个账户。每个账户的余额由账户下所有UTXO的总和获得。

* 账户模型:与UTXO模型相比,账户模型更符合人类思维的认知,可以直接读出账户的相关信息。

* 键值模型:在某些情况下,区块链技术作为分布式账本存在,存储模型往往借鉴键值数据存储模型,数据访问简单。

加密货币和数字资产

加密货币≠数字资产

一般数字资产是指不包括加密货币的其他资产,如电子文档、图片、音视频文档等。

账本分类

根据区块链系统的建设目标,账本会呈现不同的形式。本节从长账本的归属和账本的数量来介绍账本的特点。

* 账本所有权:在比特币等公链系统中,所有用户都拥有账本的全貌。在共识算法的前提下,特定节点有权写入区块链;在 Fabric 等系统中,仅在某些通道中

中的节点

拥有通道内账本的所有权,账本上的操作也需要在共识机制下完成。

*

账本数量:区块链系统可以包含一个或多个账本。 Fabric致力于解决企业和问题。大型企业往往伴随着各种合作任务,账本也不少。但是账本之间是相互隔离的,同一个节点或组织可以同时存在于多个通道中,从而完成多个账本之间的数据交换。

共识算法

区块链节点可以公开、自由地参与,形成自治系统。为了更好地适应区块链系统,大部分系统都使用点对点网络,即P2P网络进行数据传播。

P2P网络中的每个节点都会承担网络路由、验证区块数据、传播区块数据、发现新节点等功能。为了鼓励区块链中的节点有效参与共识过程,区块链的共识算法往往由两部分组成,

一是设计合理的经济激励机制,二是公平选择具体的打包节点。

传统分布式系统的评价标准:

* 数据一致性

*数据可用性

* 分区容错

对应于区块链系统,有人提出了“不可能三角”的评价标准,任何区块链系统都不可能同时满足这三个方面。

比特币的理论原理

* 去中心化

主要描述参与共识的节点数量。参与共识的节点越多,去中心化程度越高。

* 可扩展性

主要看吞吐量,是否适合各种场景。

*安全

考虑做坏事的经济成本。作恶的成本越高,安全性就越高。安全性需要多方面来保证,包括共识算法的确定性,确定性包括及时确认和概率确认。

共识算法的分类

传统的共识算法也称为部分共识算法。大部分都没有考虑拜占庭容错,比如:

* Paxos

* 扎布

*卡夫卡

在区块链环境中,考虑拜占庭容错的算法有:

* 工作证明 (POW)

证明矿工的算力

* 权益证明 (POS)

证明参与者在虚拟资源中的权益。

通用共识算法

战俘

* 核心思想:通过节点的算力竞争选择打包节点。

* 特点:该算法最早应用于比特币系统,各节点根据自己的算力相互竞争,共同解决一个复杂但简单的验证SHA256

数学题,解决这个问题的节点将获得下一个节点的计费权和自动生成的比特币奖励。

* 优点:保证系统的安全性和去中心化,有效防止女巫攻击。

* 缺点:矿工的反复计算能力会消耗巨大的资源,造成浪费。

矿工不断尝试随机数,使计算出的哈希值小于难度值,找到合适的随机数后广播,其他节点验证。因此,计算能力较高的节点更有可能获得记账权。

去中心化程度高,可以抵抗高达50%的攻击。 POW中的区块是概率确定的,也就是说,附加到区块的区块越多,区块的确定性就越高。

比特币系统认为至少有 6 个区块被确认后,该区块才被认为被确认。比特币系统每秒只能处理 7 笔交易,因此一笔交易的确认至少需要一个小时。这种效率有时令人无法忍受。

(没听懂)

位置

*

核心思想:系统中权益最高而非算力最高的节点获得记账权,权益体现在节点对系统虚拟资源的所有权上。例如币龄或币龄天数(用户持有的代币数量或持有的天数)。

* 特点:出块成功后,清零币龄或其他权益,保证区块链的有效性由有经济权利的人和用户保证,同时避免大量浪费 POW 资源。

* 优点:缩短出块时间和交易处理时间,提高区块链的TPS(Transactions Per Second)。

* 缺点:基于POS共识算法的系统还需要挖矿,所以其区块的确定性也是概率性的,需要多个节点确认区块才能最终确定。

BFT(拜占庭容错)

拜占庭将军问题只有在拜占庭节点总数不超过节点总数的1/3时才能解决。

原BFT算法分为两种协议:

* 口头协议:节点需要将收到的“命令”相互传递,最终根据获得的各个节点的信息确定最终结果。

* 书面协议:传输的信息需要签名和验证。该协议可以防止拜占庭节点随意更改接收到的信息,使最终结果更加可靠。

1999年提出的实用拜占庭PBFT算法,解决了传统BFT算法信息传输复杂度高的问题。 PBFT的过程分为三个阶段:预准备、准备和提交。该算法可以快速得出最终结果,但PBFT不适用于节点较多的联盟链和私有链。

比特币的理论原理

PBFT主要解决原BFT共识算法效率低的问题

问题,将通信的复杂性从指数降低到二次,使其能够在实际系统中使用。当系统中的拜占庭节点数小于总数的1/3时,BFT

共识算法能够正确运行,保证区块链系统的可靠性。

DPOS(委托权益证明)

2013年提出的delegated proof-of-stake算法,即系统中的每个节点都可以将自己的stake作为投票权授予代表,希望参与记账,获得票数最多的前N名

p>

代表节点进入“板”比特币的理论原理,按照既定的时间表轮流打包结算交易,产生新的区块。

该系统不仅可以解决 PoW 的能源浪费问题和矿池对去中心化的威胁,还可以弥补 PoS 中拥有记账权的参与者可能不想参与记账的缺点。

DPoS 共识算法可以与 PBFT 一起使用。首先,通过 DPoS 在区块链系统中选出一定数量的区块生产者。出块人出块后,使用PBFT。

算法在所有区块生产者之间进行区块共识,只有在PBFT共识过程结束后,区块才能记录在账本中。

在DPOS算法下,用户抵押一定的权益成为记账人选。其他用户使用投票结果来确定簿记候选人的排名。得票最多的节点在一定的时间片上有记账。对。

* 优点:由于共识节点数量少,节点间通信速度快,DPoS共识可以快速完成区块的打包、广播和验证,显着提升系统的TPS,

增强平台上应用程序的可用性。

* 缺点:DPoS算法中涉及记账的节点大大减少,因此其TPS的提升被认为是以去中心化的损失为代价来实现的。

共识算法对比

在“不可能三角”的评价体系中,任何共识算法都无法达到三个特征的最佳状态,因此需要在三个特征之间进行权衡。战俘

选择去中心化和安全,可用性低。 PoS 相比 PoW 节省了能源,但它仍然不够灵活。 PBFT

算法保证去中心化和安全性,但在存在大规模节点的情况下可用性较差。 DPoS算法选择高可用性和安全性,但去中心化程度低。

目前的区块链系统没有最好的共识算法,只能通过权衡系统要求来达到特定的目标。在保证区块链系统安全的同时,需要不断提高可用性以适应大规模应用落地,同时在满足一定程度去中心化的情况下,系统内的用户可以主动参与共识,让参与投票、共识、验证的所有节点都能从中获利,所以共识算法的经济激励也是不可或缺的一环。只有在系统中充分循环资源,让用户交互参与,区块链系统才能稳定运行。

智能合约

定义:智能合约是一组数字定义的承诺,包括各方可以执行这些承诺的协议。

这些承诺是指合约参与方约定的权利和义务,在智能合约中有明确的实施方式。区块链技术可以很好地支持智能合约,即传统合约的数字版本和区块链上的可执行程序。

与传统程序一样,区块链智能合约具有接受和响应外部消息的接口,以及处理和存储外部消息。

区块链上的智能合约

基于区块链的智能合约是沙盒环境中的可执行程序。与传统程序不同,智能合约更强调事物。智能合约本身也是生成事物的程序。

智能合约的输入、输出和状态变化都存在于区块链中,即需要在节点间共识算法的基础上完成。就是让可以被条件触发的功能,按照调用者的意愿,准确的执行。在预设条件下,合同条款可以自动执行,达到“代码即法律”的目的。

智能合约在共识和网络封装的基础上,隐藏了区块链网络中各个节点的复杂行为,同时提供了区块链应用层的接口,因此区块链技术的应用前景广阔。智能合约也是区块链的重要功能,这标志着区块链不再只是一种加密货币,而是可以形成基于区块链的服务和BaaS。智能合约是可以承载可编程程序、运行去中心化应用程序并构建需要信任的合作环境的区块链。

从脚本到智能合约

比特币脚本在功能上完成了账户间的转账和转账的有效性测试,其脚本具有一定的扩展性。不过,剧本的缺点也很明显。脚本处于交易的数字化阶段,逻辑部分与数据部分耦合,缺乏灵活性;指令扩展容易造成系统安全隐患;脚本的指令功能不是图灵完备的。

图灵完备:所有可计算的问题都可以计算出来,这样的虚拟机或编程语言称为图灵完备。

比特币的脚本系统是图灵完备的,而一些Token智能合约系统是图灵完备的。

图灵完备和图灵不完备各有优势。图灵不完备更安全,图灵完备更智能。

工作原理

在加密货币中,类似智能合约的功能是:

1)验证交易中的签名正确

2)验证交易的输入输出金额是否匹配

3)更新输入输出账户余额状态

受加密货币脚本语言的影响,只有胡悦这个具有图灵完备运行环境的区块链系统,通常会定义多个合约,包括初始状态、转换规则、触发条件以及相应的操作;然后通过提交交易,经过共识算法,将合约安装部署到区块链上;区块链可以实时监控整个智能合约的状态,当一笔新的交易满足一定条件时,会触发合约相应条款的执行;共识后,交易的输入输出和合约内的状态变化都记录在链上。

以太坊就是一个例子。首先,以太坊的账户分为外部账户和合约账户。外部账户只能以交易的形式发送消息,从而产生交易。此类交易可以是普通交易,创建合约或调用合约。如果事务是创建一个合约,那么一个

比特币的理论原理

合约账户,如果交易是调用合约,对应的合约条款,即代码会被激活执行,代码的状态操作变化会记录在区块链上。

合约运行环境

智能合约不会直接在区块链节点已知的环境中运行,因为如果合约代码直接操作区块链比特币的理论原理,尤其是区块链的数据,合约将不受监管,区块链结构将被破坏,威胁到区块链节点的安全性,因此智能合约必须在隔离的沙箱环境中运行。

合约运行环境与宿主系统,合约与合约之间通过沙盒环境有效隔离,既符合解耦设计,又提高了智能合约的安全性。目前主流区块链平台对沙箱的支持主要包括虚拟机和容器。

以太坊环境中的智能合约以高级编程语言实现。在solidity编程语言中,contract关键字定义了一个合约。

合约由一组代码和数据组成,合约数据的共享规则由合约制造者设定。在下面的例子中,SimpleStorage 是一个合约,storedData

是合同中的一个字段。 set 和 get 函数指定合约的 storedData 字段将被区块链上的任何人读取和修改。

合约 SimpleStorage { 单位 storeData;函数集(单位 x){ storeData = x;

} function get() 常量返回 (unit retVal) { return storedData; } }

密码学

为了保证账本的完整性、公开性、隐私保护、不可篡改和可验证性,区块链技术高度依赖密码学。正是密码学的理论研究和技术特性使公链的所有节点在一定程度上实现了公平、安全和可信。

常用的理论技巧

哈希

哈希函数是指将任意长度的字符串映射到固定长度l的字符串,记为H:{0,1}* → {0, 1}l。散列函数

H(x)可以认为是在一个映射集中找到x对应的值,如果x不在映射集中,则计算一个数y,并将y赋给上述映射集中的H(x) 一个“好”

哈希函数通常有

* 1.抗修改性:当x的任意一位改变时,H(x)变化很大;

* 2.不可逆性:给定H(x),得到x的概率极低;

* 3.防撞:对于任意x和x',H(x)=H(x')的概率极低。

加解密

加解密贯穿密码学,公钥密码学也称为非对称密码学,是相对对称的密码学。在对称密码学中,

加密和解密使用相同的密钥。在非对称密码学中,加密和解密是使用公私钥对完成的。常用寻找大数分解和离散对数难题的原理来生成非对称密码学的公钥和私钥对。通常公钥是公开的,

私钥。为了安全起见,在区块链中经常使用椭圆曲线选择群,然后根据求解离散对数难题来构造非对称密码学的公钥和私钥。

数字签名和验证

在公钥密码学中,在保护隐私的情况下,可以通过签名和验证来完成所有权证明过程。加解密过程中的发送者

用私钥(签名)加密,用接收者的公钥解密(验证签名);在签名验证过程中,常用的是私钥签名和公钥验证。签名验证具体是指:私钥持有者对消息m进行hash得到H(m),并使用私钥进行配对

H(m)对签名s进行加密,将消息m和签名s发送给其他人,其他人用公钥解密签名s,得到H'(m),对消息m进行哈希处理

H(m),然后通过比较H'(m)和H(m)是否一致来判断签名验证是否成功。

身份管理

公钥或公钥哈希被认为是区块链中用户的身份。在比特币系统中,公钥哈希直接用于表明用户的身份。在交易过程中,用户不需要提供其他信息,用户可以在交易中使用不同的公钥地址来增加隐私性,因此比特币具有一定的匿名性。 比特币系统使用椭圆曲线数字签名算法(ECDSA)生成用户的公私钥对,然后将公钥的哈希值作为用户的身份,作为接收数字货币的地址。用户可以用自己的私钥签名完成对交易输出的确认,也可以花费交易输出。

私钥对区块链系统至关重要,但从用户的角度来看,私钥是一串杂乱无章的字符串。这给私钥管理带来了困难,尤其是当用户拥有多个区块链地址时。分层确定性钱包

指在没有私钥参与的情况下,通过公钥直接分发子公钥

,去中心化的子公钥可以通过子私钥进行认证。一方面,分层确定性钱包只需备份一次私钥,即可管理多个不相关的子公钥。和隐私保护。

隐私保护

* 混合协议

* 加密协议 - Monero、Zerocoin、Zeronote

* 安全通道协议

区块链安全

区块链在设计之初就从不同维度解决了一些安全问题。比如它使用非对称加密来保证支付的可靠性,

比特币的理论原理

利用哈希和签名的唯一性保证数据不可篡改,利用去中心化分布式设计防止数据丢失等。即便如此,随着区块链规模逐渐扩大,也暴露出越来越多的安全问题.

51% 攻击

工作负载算法是最早应用于区块链的共识算法,对算力的攻击一直备受争议。在比特币的工作量证明机制中,节点挖出区块的概率与其算力成正比,因为算力越大,计算出正确哈希值的速度越快,越容易掌握打包力量。因此,不同的节点想要联合起来,成为一个“矿池”来挖矿

挖掘更多的块以获得更大的收益。一旦矿池总算力大到超过全网算力的51%,就可以破坏整个区块链系统,造成一些安全问题:

*

* 修改交易数据可能导致双花攻击。

*

* 防止区块部分确认或全部交易。

*

* 防止矿工挖掘任何可用区块。

分叉

分叉问题的意识是,当区块链系统升级时,共识规则中的新协议也发生了变化,部分矿工还没来得及升级。对于节点来说,已经升级的节点是新节点,尚未升级的节点是老节点。当新节点的算力超过 51% 时,就会出现遵循不同机制的分叉。分叉有硬分叉和软分叉两种。

软分叉:软分叉是指当系统开始升级时,引入新版本或新协议,与之前的版本兼容,新节点产生的区块可以被旧节点接受。当网络有软分叉时:

一开始,老节点生成的区块中的交易不被新节点识别,会发生短期分叉

。但是新版本的分叉会超过旧版本的分叉,成为最长的链。因此网络中的节点不必同时升级到新协议,它允许逐步升级。节点升级时,软分叉不会影响系统的稳定性和有效性。

硬分叉:硬分叉是指当系统遇到新版本或新协议时,与之前的版本不兼容,老节点不能同意新节点出块,所以老新节点将在不同区域启动。在区块链上运行,一条链变成两条链。虽然新节点比旧节点拥有更多的计算能力,但旧节点将继续维护它认为正确的链。

未经生态系统几乎所有参与者的同意,硬分叉可能导致整个区块链生态系统的分裂,因此这是一个极具争议和风险的安全问题。一旦发生硬分叉,区块链作为可信平台的信任度就会降低。

智能合约安全

智能合约的本质是在区块链网络中运行的一段代码,

完成用户设定的业务逻辑,规范互不信任的参与者的行为。最突出的框架是以太坊。但是,只要是人为编写的程序,就有可能出现错误和缺陷。与传统程序不同,智能合约以不可逆的形式存在。一旦出现漏洞,可能会带来致命的损失。

欺诈攻击

欺诈攻击是一种创造性的方式,使得攻击者在没有达到 51% 的算力的情况下,仍然有能力干扰区块链的正常工作。

*

自私矿工:攻击者隐藏新区块,不发布。其他诚实的矿工在旧区块的基础上继续挖矿,因为他们不知道新区块的存在。当攻击者挖到第二个区块时,隐藏在他手中的两个区块会同时公布。这时会出现区块链分叉。

只要攻击者比诚实的矿工多挖一个区块,攻击者所在的分叉就是最长的链:根据比特币的共识机制,矿工只在最长的链后面挖矿。因此,诚实矿工的原链是无效的,因为它比攻击者的叉子短。

* Eclipse 攻击:区块链上的节点必须保持不间断的通信,然后才能比较数据。 Eclipse攻击由其他节点实现

通过囤积和占用受害者的点对点连接槽,将节点保持在隔离网络中的网络级攻击。

钱包安全

在区块链中,资产的管理也是一个非常大的安全问题。区块链具有去中心化的结构。 Users declare asset ownership through a public address and key. Once the key is lost, due to the immutable nature of the blockchain, it means that it is impossible to get it back by modifying the blockchain records.资产。 Therefore, incidents of theft of coins often occur, mainly through the trading platform to guard themselves

Theft, the exchange is attacked by hackers, the user's trading account is stolen, etc.

Hot Research

* Improvement of consensus mechanism

* Cross-chain

*Privacy Protection

* Performance optimization

* Multichain and Sidechains

* Block Database

*Safety and autonomy

* Distributed Verifiable Random Number Generator