一、区块链概述

单选

image-20230216203024802

image-20230216203042358

image-20230216203050458

image-20230216203101576

image-20230216203107715

image-20230216203120367

image-20230216203155851

image-20230216203347222

image-20230216203416289

image-20230216203432829

image-20230216203602147

image-20230216203617643

多选

image-20230216203705908

image-20230216203945223

image-20230216204013918

image-20230216204038905

image-20230216204104268

判断题

image-20230216204121487

公有区块链中的每个节点通常会记录整个区块链中的所有交易信息,而不是只记录其中的一部分。

image-20230216204239954

在区块链系统中,交易一旦被打包上链,并被足够数量的节点确认,就可以被确认为交易成功。

具体来说,在区块链系统中,交易是被打包在区块中,并通过加密哈希值链接到先前的区块上形成一个不可篡改的区块链。一旦一个新的区块被添加到区块链中,其中包含的交易也就被确认为有效的交易。

image-20230216204251893

image-20230216204306708

image-20230216204353634

image-20230216204405723

image-20230216204411655

二、区块链体系架构

填空

image-20230216204730925

image-20230216204756388

image-20230216204804050

image-20230216204810679

image-20230216204817256

image-20230216204826785

image-20230216204947579

单选题

image-20230216205002476

image-20230216205013280

image-20230216205021319

image-20230216205028285

image-20230216205056222

多选题

image-20230216205113723

image-20230216205125296

image-20230216205134202

image-20230216205141321

image-20230216205153091

image-20230216205209988

image-20230216205221024

判断题

image-20230216205232538

image-20230216205240387

image-20230216205248250

区块链3.0系统是区块链技术的最新发展阶段,它通常涉及到改进性能、安全性、可扩展性、智能合约功能和其他方面的改进。由于这些改进,一些区块链3.0系统可能不需要传统意义上的激励层,因为它们可以通过其他机制来激励节点参与网络的运行和维护。

image-20230216205309570

事实上,在非对称加密中,私钥可以用于加密,公钥用于解密。

使用私钥加密消息,可以确保消息的机密性和完整性,因为只有持有相应私钥的人才能解密该消息。这种加密方式在数字签名中经常被使用。

image-20230216205318423

image-20230216205326891

三、比特币

填空题

image-20230216205640769

image-20230216205729589

image-20230216205738318

image-20230216205833483

image-20230216205849976

image-20230216210138954

image-20230216210152082

image-20230216210158806

单选题

image-20230216210248431

image-20230216210306205

image-20230216210318315

image-20230216210347489

image-20230216210354077

image-20230216210414806

多选题

image-20230216210443940

image-20230216210549872

image-20230216210559644

image-20230216210610347

image-20230216210620236

image-20230216210741799

image-20230216210749085

image-20230216210808264

image-20230216210815406

image-20230216210858392

image-20230216210909477

判断题

image-20230216211057889

事实上,比特币地址是通过公钥生成的,而不是私钥。具体来说,比特币地址是将公钥进行哈希计算得到的。这个哈希计算可以让比特币地址更简短和易于使用,同时也可以提高安全性,因为比特币地址不能反向计算得到公钥。

image-20230216211105341

image-20230216211119642

image-20230216211129367

在一些情况下,一个区块链中的交易是可以被推翻的,但这并不是常见情况。

在某些区块链系统中,如果在添加一个新的区块之前发现该区块中存在问题,比如交易被篡改或者区块被恶意节点产生,那么该区块可能会被标记为无效并从区块链中删除。这个过程被称为区块回滚,它允许恢复区块链上的错误操作并保护区块链的完整性。但是,这个过程并不是轻松的,需要经过一定的验证和共识机制才能进行。

另外,在某些情况下,比如双花攻击,一个交易也可能会被推翻。双花攻击是指恶意用户在区块链上提交两个交易,旨在通过先发送一个交易然后尝试撤销该交易来欺诈其他人。为了防止这种攻击,区块链系统通常采取一系列的防御措施,比如确认交易的等待时间、增加交易确认数等。

image-20230216211135433

在比特币系统中,如果一个交易脚本通过了您的节点的验证,那么它应该能够通过其他节点的验证,因为比特币网络的每个节点都会执行相同的规则和验证过程,以确保交易和区块是有效的。

比特币使用的是基于脚本的交易验证机制,交易脚本通常由输入脚本和输出脚本组成。在输入脚本中,交易的签名被验证,以确保该交易只能由拥有相应私钥的人进行授权。在输出脚本中,通常定义了一个加密哈希函数,以确保只有符合特定条件的人才能够获得该输出的控制权。

无论您在比特币网络的哪个节点上运行您的比特币客户端,只要该节点的软件和规则是正确的,并且与其他节点相同,那么您的节点就应该能够正确地验证和处理交易和区块。如果交易脚本通过了您的节点的验证,那么它也应该能够通过其他节点的验证。

image-20230216211206293

在比特币交易中,一个UTXO(未花费的交易输出)可以被一个或多个输出项花费。输出项定义了花费UTXO的方式,可以是一个或多个地址,也可以是一些脚本条件。

如果输出项的总价值小于输入项的总价值,则需要增加一个特殊的输出项来支付交易费用。交易费用是由交易的发起者支付的,作为交易的处理费用,用来激励比特币矿工打包和验证该交易。

image-20230216211212077

image-20230216211216628

虽然在比特币交易中填写一个特殊的输出项来支付矿工手续费是一种通常的做法,但并不是绝对必要的。如果没有指定交易费用的输出项,则交易可能会被矿工添加一个特殊的输出项来支付矿工费用,但这通常需要更长的确认时间。

image-20230216211222258

image-20230216211229668

image-20230216211241591

比特币系统中,不包含矿工费的交易可以被打包和添加到区块链中,但它们的处理优先级可能较低,需要更长的时间才能得到确认。

image-20230216211249271

image-20230216211255709

四、以太坊

填空题

image-20230216212144196

image-20230216212216868

image-20230216212325246

image-20230216212342955

image-20230216212456755

image-20230216212502089

image-20230216212540723

image-20230216212550050

image-20230216212736847

image-20230216212829525

image-20230216212855252

单选题

image-20230216212906976

image-20230216213010828

image-20230216213100356

image-20230216213245479

image-20230216213352993

image-20230216213404499

多选题

image-20230216213441812

image-20230216213450963

image-20230216213555415

image-20230216213630098

image-20230216213643209

image-20230216213652686

image-20230216213703484

image-20230216214013242

判断题

在以太坊系统中,合约账户可以创建和发送交易,但它们不能直接触发交易。触发合约代码的执行需要外部账户或其他合约账户向合约账户发送交易,并且这些交易必须包含调用合约代码的指令和参数。

image-20230216214152095

在以太坊系统中,每个账户都有一个余额,包括外部账户和智能合约账户。这个余额可以通过以太坊网络的状态来查询。在以太坊系统中,智能合约也是一种特殊的账户,它们有自己的地址和余额。

智能合约账户与外部账户不同的是,它们不是由私钥控制的账户,而是由智能合约代码控制。智能合约可以执行特定的功能,例如管理数字资产、执行分布式投票、记录交易等等。

image-20230216214159555

image-20230216214210808

image-20230216214216392

以太坊智能合约是以字节码的形式部署在区块链节点上的,而不是源码的形式。源码需要通过编译器编译成字节码后才能被部署在以太坊网络上。

image-20230216214221461

image-20230216214227273

image-20230216214232400

image-20230216214243524

以太坊智能合约可以通过调用其他智能合约来实现更复杂的功能。这种调用是通过以太坊虚拟机(EVM)提供的特定指令完成的。

image-20230216214302037

image-20230216214306894

世界状态树是以太坊中用于保存所有账户状态的一种数据结构。在世界状态树中,每个节点代表一个账户,节点包含了账户的地址、余额、状态、代码、存储、合约创建者等信息。账户的状态表示账户的当前状态,包括是否被激活、是否被冻结、合约创建者等信息。账户的代码表示智能合约的代码。账户的存储表示智能合约的持久化存储,可以存储状态和其他数据。通过这些信息,以太坊网络可以对账户进行管理和交互。

在以太坊中,世界状态树是以默克尔树(Merkle Tree)的形式实现的,它是一种树形数据结构,每个节点都包含了其子节点的哈希值。通过这种数据结构,以太坊可以保证数据的完整性和安全性。

因此,世界状态树不仅保存了账户的余额,还保存了账户的状态、代码、存储、以及其他相关信息,这些信息共同构成了以太坊中所有账户的完整状态。

image-20230216214317052

image-20230216214321992

image-20230216214326719

在以太坊最初的版本中,使用的是PoW共识机制。但是,PoW存在一些问题,如能源消耗大、矿池垄断等。因此,在2018年,以太坊开始采用PoS共识机制来替代PoW。

在PoS共识机制中,参与者是通过锁定一定数量的以太币(即抵押)来参与共识的。根据抵押数量的大小,参与者有不同的几率被选为验证者,从而获得奖励。PoS相比PoW来说,具有能源消耗小、安全性高等优点。

image-20230216214333553

image-20230216214345283

在以太坊中,智能合约是一段被编写成代码形式的程序,存储在以太坊的区块链上,并且由合约账户进行控制。智能合约被编写成代码形式后,需要外部账户(如用户)向合约账户发送交易请求,才能启动运行智能合约。外部账户向合约账户发送的交易请求,可以是调用智能合约中的函数、向智能合约中转账等。

image-20230216214352042

image-20230216214401562

image-20230216214409265

在以太坊中,一旦智能合约被部署到区块链上,它的代码就无法被修改或删除。这是因为智能合约的代码是以太坊区块链上的不可变记录之一,任何对智能合约代码的修改都需要通过创建一个新的智能合约来实现。

image-20230216214417014

image-20230216214424268

五、超级账本

填空题

image-20230216214928999

image-20230216214942646

image-20230216214952816

image-20230216214959916

image-20230216215005654

image-20230216215013349

image-20230216215021129

image-20230216215030753

image-20230216215039065

image-20230216215102541

image-20230216215111124

单选题

image-20230216215123314

image-20230216215140951

image-20230216215146997

image-20230216215152260

image-20230216215159896

image-20230216215240089

image-20230216215258330

多选题

image-20230216215313458

image-20230216215325918

image-20230216215346258

image-20230216215357933

image-20230216215403623

image-20230216215409148

image-20230216215415200

image-20230216215420318

image-20230216215425945

判断题

image-20230216215534745

Hyperledger Fabric 是超级账本项目的一个模块化区块链框架,它支持构建私有链、联盟链和公有链等不同类型的区块链网络,因此不仅支持私密交易,也支持公开透明的交易。

image-20230216215540555

image-20230216215546154

在Hyperledger Fabric中,节点可以通过在其配置文件中设置多个通道(channel)来同时参与多个链。通道是在Hyperledger Fabric中用于实现数据隔离和隐私保护的一种机制,不同的通道可以在同一个Hyperledger Fabric网络上同时运行,而且通道之间的交互是相互独立的,从而保证了链之间的数据隔离和安全性。

因此,超级账本区块链系统中的节点并不只能参加一个私链,而是可以同时参与多个链,实现跨链数据交换和共识。

image-20230216215637239

在Hyperledger Fabric中,背书节点是一组动态选举产生的节点,它们的任务是对提交的交易进行背书并生成交易背书结果,从而为后续的交易验证和提交打下基础。

Hyperledger Fabric的动态选举机制可以保证每个背书节点都有平等的机会参与背书,从而提高了整个网络的安全性和可用性。同时,该机制还可以自动适应网络中节点的变化,保证了背书节点的可扩展性和动态性。

image-20230216215641286

image-20230216215646475

Hyperledger Fabric中的交易流程包括背书、排序和提交三个阶段。在背书阶段,客户端向通道中的背书节点发起背书请求,并获得背书结果;在排序阶段,客户端将交易发送给排序节点,并等待排序节点生成区块;在提交阶段,客户端将区块提交到区块链中。

在这个过程中,与排序节点进行通信的权限只有被授权的背书节点客户端。通道管理员可以通过通道配置文件中的Access Control List (ACL)来控制不同类型的节点对排序服务的访问权限。只有被授权的背书节点和客户端才能够向排序节点发送交易,而其他节点没有权限直接与排序节点进行通信。

image-20230216215651505

在Hyperledger Fabric中,排序节点是不会模拟交易结果的。排序节点的主要职责是对交易进行排序,仅保证每个区块中的交易顺序是一致的,并将排序后的交易打包成区块广播给其他节点

image-20230216215655687

image-20230216215712722

在Hyperledger Fabric中,并没有“主节点”的概念。Fabric是一种分布式的区块链系统,所有节点都具有相同的地位和功能,每个节点都可以接受和广播交易,参与交易的排序和验证等过程。没有一个节点是特别的、被强制设置为主节点的,每个节点都有相同的权利和职责,任何一个节点出现故障或离线都不会影响整个网络的正常运行。

image-20230216215740634

image-20230216215745094

image-20230216215750460

image-20230216215859705

一个交易需要被多个背书节点背书之后才能被提交到区块链中。背书节点之间的计算顺序可能会影响背书的结果,因此应用程序给背书节点发送背书请求的顺序可能会影响交易是否能够被提交到区块链中。

image-20230216215910228

image-20230216220017903

背书节点在验证交易提案时,不会直接更新账本数据。背书节点只是对交易提案进行背书验证,验证交易是否合法和有效,并对交易结果进行签名。交易的实际提交和更新账本数据是由排序节点完成的。

排序节点会收集足够的背书结果,并对交易进行排序和检查,确保所有背书结果是一致的。如果交易通过了排序节点的检查,排序节点会将交易写入账本中,并将交易的结果广播给所有的节点,从而更新账本数据。这样,所有节点都能保持一致的状态。

image-20230216220022953

image-20230216220029371

在Hyperledger Fabric中,因为使用了崩溃容错拜占庭容错(Crash Fault Tolerance with Byzantine Fault Tolerance,简称 CFT/BFT)共识机制,因此该共识机制能够保证网络不会出现分叉的情况,即使存在节点崩溃或者出现恶意行为。

image-20230216220034125

image-20230216220044242

image-20230216220053005

链码(Chaincode)是指运行在区块链网络中的智能合约。当需要更新已部署的链码时,可以使用新的链码版本替换原来的版本。

image-20230216220059572

image-20230216220112653

image-20230216220117813

在Hyperledger Fabric中,不同通道之间的数据是相互隔离的,它们使用不同的账本(Ledger)来记录交易信息和状态数据,因此不会共享数据账本。

通道(Channel)是指一组参与者之间进行交易的逻辑子网络,通常用于隔离敏感信息或者实现多租户的应用场景。不同的通道之间是相互隔离的,它们有不同的链码、账本和访问控制策略。

image-20230216220151396

image-20230216220223602

应用程序不仅可以运行在区块链网络节点上,还可以运行在其他独立的计算机或云服务上。

image-20230216220228641

在Hyperledger Fabric中,应用程序不能直接访问区块链账本数据。相反,应用程序需要通过调用链码(Chaincode)来与账本进行交互。

image-20230216220233360

链码需要部署到通道的一个或多个组织的对等节点上,而不是所有的记账节点。这些节点将链码安装在它们的本地文件系统上,然后对链码进行实例化以在通道中创建对该链码的访问。

image-20230216220238814

记账节点不需要执行交易调用的链码以添加新块到本地账本。相反,它们只需要验证交易是否有效,并将其包含在新块中,然后将新块广播给网络上的其他节点。

image-20230216220245374

image-20230216220256535

image-20230216220300712

解答题

1、 区块链要解决什么问题?

  • 第三方信任问题

第三方信任是指在特定的范围内,即使通信双方以前并没有建立过关系,他们也可以毫无保留地信任对方。双方之所以相互信任,是因为他们和一个共同的第三方建立了信任关系,第三方为通信的双方提供信任担保。

  • 数据会被篡改的问题

  • 货币发行的成本与结算的实时性问题

2、 区块链的技术路径时什么?

  • 分布式账本

分布式账本是一种在网络成员之间共享、复制和同步的数据库。分布式账本记录网络参与者之间的交易,比如资产或数据的交换。这种共享账本降低了因调解不同账本所产生的时间和开支成本。

3、比特币是什么?

分布式记账系统(点对点电子货币系统)

比特币是一个价值传输网络,参与比特币系统运作的人(包括用户),就是网络中一个个节点,节点彼此等权,没有中心,相互之间连接完全自由,各自保存着完全一致的比特币账本,运行着遵循相同规则的比特币程序。任何人都可以加入比特币网络,新加入比特币网络的节点,都可以向原有节点要一份比特币账本

4、什么是比特币的私钥、公钥、地址及其他们之间的关系

  • 私钥是证明用户持有某一账户的密码学工具

私钥,本质上是一个随机数,由32个byte组成的数组,1个byte等于8位二进制,一个二进制只有两个值0或者1。所以私钥的总数是将近2(8*32)=2256个

  • 公钥是验证私钥正确性的密码学工具。

公钥是由私钥生成的,通过椭圆曲线(ECPoint)生成,一个私钥经过椭圆曲线变换之后能够得到公钥,公钥是一个65个byte数组。

  • 地址是用于代指某一账户的公钥的哈希的友好名称。

公钥太长了,所以就有更短一些的地址的概念,另一方面没有发送过交易的地址,并不想暴露自己的公钥,而地址是通过摘要算法生成的,不会暴露公钥的真实内容

  • 关系

公钥可以生成地址,并被用来验证数字签名的有效性。私钥可以生成数字签名,并用于花费某个地址中的数字资产。地址是公开可见的,用于接收数字资产,并由公钥生成。

5、什么是比特币交易

比特币交易是指通过比特币网络进行的数字货币交易。它类似于传统货币的交易,但交易的记录和验证是通过分布式的区块链技术实现的。比特币交易记录在区块链上的交易本身是一段数字签名的代码,它描述了转移比特币的所有必要信息。

6、什么是比特币交易的锁定脚本?

比特币交易中的锁定脚本是一种用于验证交易输出的条件的脚本。它指定了交易输出只能在满足特定条件时才能被花费。例如,一个锁定脚本可能要求收款人提供一个特定的公钥才能花费交易输出。锁定脚本通常在创建交易输出时设置,并保存在区块链上。

7、什么是比特币交易的解锁脚本?

比特币交易中的解锁脚本是一种用于提供交易输入所需条件的脚本。它提供了交易输入的签名和其他必要的数据,以证明这个交易的发送者有权花费该交易输出。例如,一个解锁脚本可能包括一个数字签名和一个公钥,以证明该交易的发送者有权花费交易输出。

8、比特币是如何进行交易验证?

比特币交易验证通过网络中的矿工节点来完成。当一个比特币节点接收到一笔新的交易时,它将首先验证交易是否符合比特币协议的规则。

接着,该节点将尝试验证这笔交易的签名和脚本。这需要使用交易的解锁脚本来计算交易的哈希,并将其与交易输出的锁定脚本进行比较。如果两个脚本匹配,交易就被视为有效,并被广播到网络中的其他节点。

一旦交易被验证并包含在一个区块中,它就被视为永久的,并保存在区块链上。

9、比特币的数据结构由什么组成?

比特币的数据结构主要由交易、区块头和区块体三部分组成。交易是比特币系统中的基本单位,记录了比特币网络中的货币转移信息。区块头是一个包含元数据的结构,用于验证和链接区块,包括区块的版本号、前一个区块的哈希值、时间戳、难度目标和随机数等信息。区块体包括交易列表和相关元数据,记录了一个区块中所有交易的详细信息。

10、比特币区块头部包含哪几类信息?

  • 版本号:用于标识区块的版本。
  • 前一个区块的哈希值:用于将区块链接起来形成区块链。
  • 默克尔根:用于验证该区块中所有交易的完整性。
  • 时间戳:记录该区块被创建的时间。
  • 难度目标:一个固定的难度值,用于控制比特币挖矿的难度。
  • 随机数:一个用于区块挖矿的随机数值。

11、比特币区块体记录了哪些信息?采用的是什么数据结构?

比特币区块体包括所有的交易列表和相关元数据,记录了一个区块中所有交易的详细信息,包括输入、输出、交易哈希和锁定脚本等信息。比特币区块体采用了一种名为“默克尔树”的数据结构来存储所有交易的哈希值,并计算出一个唯一的“默克尔根”,以验证交易的完整性。

12、比特币挖矿的流程是什么?

比特币挖矿是指通过解决一个数学难题来创建新的区块并获取比特币奖励的过程。比特币挖矿的流程如下:

  1. 矿工通过集成一定数量的比特币交易来创建新的区块。
  2. 矿工将该区块的头部信息和一个随机数放入一个哈希函数中计算哈希值。
  3. 如果该哈希值小于当前的难度目标,矿工就可以把该区块广播到比特币网络中,成为区块链上的新区块,并获得一定数量的比特币奖励和交易手续费。
  4. 如果该哈希值大于难度目标,则矿工需要改变随机数并重新计算哈希值,直到找到一个合适的随机数为止,这个过程被称为“挖矿”。

13、比特币交易流程是什么?每一步完成哪些任务?

  1. 发送交易:用户将交易信息通过比特币客户端发送到比特币网络中。
  2. 确认交易:比特币节点将交易广播到整个网络中,其他节点将交易验证,并将其包含在下一个新的区块中,完成交易确认过程。
  3. 挖矿打包:矿工将多个未确认的交易打包进一个新的区块,并通过挖矿来验证和确认这些交易。
  4. 区块广播:矿工将新的区块广播到比特币网络中,其他节点接收到新区块后验证其有效性,并将其添加到自己的区块链上。
  5. 更新账本:比特币节点更新各自的账本,记录交易的最新状态。

14、比特币系统架构是什么?每一层完成哪些功能?

  • 应用层:比特币应用程序,如比特币钱包和交易所等。
  • 协议层:比特币网络协议,实现节点之间的通信和数据传输。
  • 网络层:比特币网络,包括矿工、矿池和普通用户等。
  • 数据层:比特币交易和区块数据。
  • 共识层:比特币共识算法,用于验证和链接区块,并控制比特币发行速度。

15、 以太坊系统是什么?其主要特点有哪些?

  1. 以太坊系统是一个基于区块链技术的去中心化智能合约平台,其主要特点包括:具有自己的虚拟机(EVM);可以自由创建智能合约;支持去中心化应用开发;支持发行代币等。

16、以太坊系统与比特币系统的最大差别是什么?

以太坊系统与比特币系统的最大差别在于:以太坊不仅具有交易功能,还支持执行智能合约。

17、以太坊有哪两类账号?并对其进行描述。

以太坊有两类账号:外部账号(Externally Owned Account,EOA)和合约账号(Contract Account)。EOA 是由私钥控制的账户,可以发送以太币和交易;而合约账号是由智能合约控制的账户,不能自主发送以太币或交易。

18、以太坊的交易类型有哪几种?并对其进行描述。

普通交易、合约创建交易、消息调用交易

普通交易是发送以太币的交易;合约创建交易是在以太坊上创建新的智能合约;合约调用交易是执行已有智能合约中的方法;

19、在一个调用智能合约交易过程中,以太坊的智能合约需要在哪些阶段执行?

在一个调用智能合约交易过程中,以太坊的智能合约需要在如下阶段执行:编译合约代码、发布合约、合约调用。