区块链习题复习
括号中的内容用于补充,来不及可以不看
一、
1、解释比特币私钥、公钥和地址的关系。比特币私钥、公钥和地址长度分别多少?
私钥、公钥和地址之间的关系可以表示为:
私钥可以通过加密算法计算得出公钥,再由公钥经数字签名和哈希算法进行运算得到钱包地址。
公钥无法运算出私钥;钱包地址不等于公钥,钱包地址也无法运算出公钥。
私钥长度:32byte
公钥长度:64byte
地址长度:20byte
2、什么是哈希函数。解释哈希函数的单向性。举例两个常用的哈希函数。
哈希函数它接受任意长度的输入,并将其转换为固定长度的字符串。
(即散列函数。它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射)
哈希函数的单向性就是指只能从输入推导出输出,而不能从输出计算出输入
(哈希函数的单向性是指,对于给定的哈希值,很难或几乎不可能逆向推导出原始数据。这是因为哈希函数是一种不可逆的映射,它将任意长度的输入消息映射成为一个较短的定长哈希值。)
常用的哈希函数
MD5:MD5是一种密码散列函数,可以产生出一个128位(16字节)的散列值,通常以32个十六进制数字呈现。
(它被广泛用于数据完整性校验,但由于已知的漏洞,现在不再适合用于SSL证书和加密技术,这些需要防止信息被篡改的地方。)
SHA-1:SHA-1是一种密码散列函数,产生一个160位(20字节)的散列值,通常以40个十六进制数字呈现。
(虽然SHA-1比MD5更安全,但现在也不再推荐用于大多数安全性要求高的场合,因为已经存在针对SHA-1的有效攻击1。)
二、
1、简述比特币UTXO模型
在这个模型中任何一个交易,它总是由若干个输入(Input)和若干个输出(Output)构成,一个Input指向的是前面区块的某个Output。只有Coinbase交易(矿工奖励的铸币交易)没有输入,只有凭空输出。任何交易总是可以由Input溯源到Coinbase交易。还没有被下一个交易花费的Output被称为UTXO,即未花费交易输出。给定任何一个区块,计算当前所有的UXTO金额之和,等同于钱包的当前余额(自创世区块到给定区块的挖矿奖励之和)。
2、比特币交易中发送者地址和接收者地址在哪?
发送者地址是交易输入部分(Input)的一部分,它指向一个或多个未花费的交易输出(UTXO)。
接收者地址出现在交易的输出部分(Output)。
3、简述锁定脚本和解锁脚本的关系。
锁定脚本和解锁脚本的关系是,解锁脚本需要提供满足锁定脚本设定条件的证据,以解锁UTXO,使其可以被用于新的交易。
(当一笔交易发生时,比特币将解锁脚本与锁定脚本拼接后,使用堆栈语言按后进先出的顺序执行,最后完成CHECK,如果返回结果为TRUE,代表解锁成功,用户可以使用该笔输出作为新交易的输入进行交易。如果返回为FALSE或者执行过程中出现问题,则花费这笔输出的请求被拒绝。)
解释:当比特币交易时,UTXO带有一个锁定脚本,为交易设置障碍。当接收方要接收比特币,就要给出一个解锁脚本,解锁脚本是签名和公钥组合,签名是接收方的私钥对该笔交易的信息加密的结果,公钥就是指接收方的公钥。所以只有接收方通过私钥给出正确的签名。
4、简述随机性钱包和分层确定性钱包的区别。
随机性钱包是通过随机数生成互不相关的多个私钥。
分层确定性钱包是一种使用“种子”通过哈希函数单向生成一组私钥的方法。
随机性钱包和分层确定性钱包的主要区别在于私钥的生成和管理方式。随机性钱包每次生成新的私钥都需要备份,而分层确定性钱包只需要备份一次种子,就可以恢复所有的私钥。
5、如果其中一个私钥丢失了,分层确定性钱包如何恢复它?
当你创建一个分层确定性钱包时,钱包会生成一个随机的种子,并提示你备份这个种子。这个种子通常会被表示为一组助记词。
如果你丢失了一个私钥,你可以使用备份的种子在同一个钱包软件或者其他兼容的钱包软件中恢复你的钱包。恢复过程中,钱包软件会使用同样的算法和种子,重新生成所有的私钥。
三、
1、简述工作量证明(POW)的过程
矿工生产一个新的区块时,通过数学运算大量的计算资源和时间,解决一个复杂的数学难题——找到一个满足特定条件的随机数。然后马上对全网进行广播打包区块,网络上的节点收到广播打包区块,会立即进行验证。有效哈希值必须经过无数次哈希运算才能算出,但时哈希值却非常容易验证。
2、为什么工作量证明能够抵抗sybil攻击?
Sybil攻击是一种网络攻击,攻击者通过创建大量的虚假身份来控制网络。在没有任何限制的情况下,一个攻击者可以轻易地创建大量的节点,从而控制网络。
因此,工作量证明机制通过引入计算能力这种稀缺资源,使得Sybil攻击变得不切实际,要想获取记账权,节点必须通过解决复杂的数学难题来证明它的工作量。这个过程需要大量的计算资源和时间,对于大多数攻击者来说,进行Sybil攻击的成本会变得非常高。
3、解释硬分叉和软分叉的区别。
硬分叉是一种完全替换旧规则的升级方式,它需要所有节点强制升级到新规则。在硬分叉过程中,新规则与旧规则不兼容,因此会导致网络分裂,产生两条不同的区块链。
软分叉是在原有的区块链规则上进行的一次修改,而不是完全替换旧的规则。在软分叉过程中,新规则与旧规则并存,旧规则仍然有效,但新规则会优先被网络节点所接受。总的来说,硬分叉和软分叉的主要区别在于新旧节点相互兼容性。硬分叉不向前兼容,而软分叉向前兼容。
4、解释最长链原则。
最长链原则是比特币网络中的一种共识机制。根据这个原则,节点永远认为最长链才是有效的区块链。
在比特币网络中,比特币区块是依靠矿工们不断进行数学运算而产生的,每一个区块都必须引用其上一个区块。因此,最长的链也是最难以推翻和篡改的,所以节点永远认为最长链才是有效的区块链。只有在最长链上挖矿的矿工才能够获得奖励。
5、51%攻击如何造成双花攻击。
51%攻击能够实施双花攻击,是因为攻击者通过控制超过一半的网络算力,可以创建一个新的分支链,并使其成为主链,从而撤销原本的交易。
发起交易:攻击者在主链上进行一次交易,例如购买商品。
创建分支链:同时,攻击者创建一个新的分支链,在该分支链上撤销之前的交易。
挖矿:攻击者在新的分支链上进行挖矿,由于其控制了51%以上的算力,那么攻击者获得记账权的概率很大,于是很快,新的分支链的长度就超过了主链。
替换主链:一旦新的分支链比主链更长,攻击者便会立即向全网广播这条新的分支链,而其他矿工检测到这条新的分支链比他们原本挖矿的主链要长,按照协议,他们必须丢弃原本的主链,替换成这条新的分支链。
双花成功:此时,原本的主链上的交易被回滚,也就是说,攻击者在主链上的支付被撤销,攻击者在新的主链上再次拥有了他曾经已经花掉了的资金。
6、全节点如何向轻量节点证明某个交易tx已经存储在区块链中。
一个节点只需要log2(N)个32字节的哈希值,形成一条从特定交易到树根的认证路径或者Merkle路径即可
四、
1、什么是Remix和Ganache?
Remix是一个开源的Solidity智能合约开发环境。
Ganache是一个可以在本地模拟以太坊环境的客户端。
2、简述外部账户和合约账户区别。
外部账户和合约账户的主要区别在于,外部账户由私钥控制,拥有私钥的账号,没有代码,可以发起交易,控制以太坊的访问;而合约账户由代码控制,含有代码,没有私钥,不可以主动生成交易,只能在收到交易时发送交易。
3、外部账户如何调用合约上的函数?
外部账户调用合约上的函数主要通过发送交易来实现。
创建交易:外部账户创建一个交易,该交易包含合约地址和需要调用的函数的信息。
发送交易:外部账户使用其私钥对交易进行签名,然后将交易发送到以太坊网络。
执行函数:一旦交易被矿工打包进区块并添加到区块链中,合约就会执行交易中指定的函数。
4、简述solidity的状态变量、全局变量和局部变量。
状态变量是存储在合约存储空间中的变量,其值会永久保存。这些变量的值在合约的所有函数中都可以访问和修改。
全局变量保存在全局命名空间,用于获取区块链相关信息的特殊变量。这些变量提供了有关当前交易和区块的信息。
局部变量是在函数内部声明的变量,其值仅在函数执行过程中有效,函数退出后,变量无效。这些变量只能在声明它们的函数内部访问。
五、
1、简述智能合约重入攻击,举例两种防御方法
重入攻击是一种常见的智能合约安全漏洞,攻击者利用合约中存在的逻辑漏洞,在调用合约函数时,利用合约逻辑漏洞,反复调用合约的函数,并利用这种递归调用的机制,以欺骗合约的计算,从而使攻击者获得非法利益。
防御方法:
给变量加互斥锁的方式
逻辑状态更新在移送以太币之前。这称为检查-生效-交互模式
2、什么是智能合约上溢和下溢,分别举例说明
上溢是指在进行数值计算时,如果计算结果非常大,超过了存储器或寄存器所能存储或表示的能力限制,就会产生上溢。
下溢是指在进行数值计算时,如果计算结果非常小,小于存储器或寄存器所能存储或表示的能力限制,就会产生下溢。
例如:
在Solidity中,uint8类型的变量能表示的范围是0 - 255这256个数。
如果我们试图将一个uint8类型的变量加上一个大于255的数,那么结果就会超过uint8的最大值,导致上溢,它会越过256,变成0。
如果我们试图将一个uint8类型的变量减去一个大于它的数,那么结果就会小于uint8的最小值(即0),导致下溢,它会越过-1,变成255。
六、
1、加密货币(cryptocurrency)和代币(Token)的区别
加密货币是区块链的原生资产,尤其运行的区块链协议直接发行,例如比特币上的BTC或以太坊上的ETH。
代币是由各类智能合约平台的特殊费用载体,用户可以在此类平台上创建、发行并管理代币。
2、同质化代币和非同质化代币(NFT)的区别,写出它们分别的标准名字
同质化代币不同单元是恶可互换的,没有唯一属性,使用最广泛的代币标准是ERC-20
非同质化代币单独唯一且无法与其他代币互换的不可替代代币。如标准ERC-721.
3、简述ERC20标准的单步转账和两步式转账的区别
这两种转账方式的主要区别在于,单步转账直接将代币从一个账户转移到另一个账户,而两步式转账则需要用户先授权,然后由合约执行转账。
七、
1、简述区块链链上扩容和链下扩容区别。
在区块链中,链上扩容和链下扩容是两种主要的扩容方式,它们的区别主要在于扩容的实现层面
链上扩容是直接在区块链上进行的,通过改变区块大小或数据结构从而达到提高处理交易能力的解决方案。
链下扩容则是在加密货币的主链之外,建立外围或第二层交易网络。
2、状态通道(或闪电网络)扩容原理。
通过在不同用户之间后用户和服务之间建立一个双向通道,为不同实体之间提供状态维护服务。允许把区块链上的许多操作在链外进行管理,等完成来链外操作多方签确认后,才最终结果上链。
3、隔离见证扩容原理。
将签名信息从基本结构里拿出来。放在心得数据结构中,本质上将区块中的是交易结构同时处理改为拆分处理。
4、如何理解隔离见证是软分叉
主要是因为它的实现方式并不会导致比特币网络的分裂,保持了网络的一致性。具体来说,隔离见证的主要目标是优化比特币交易和区块的结构,将交易的签名从交易中移到一个独立的结构中。
旧版本的比特币节点可以处理隔离见证的交易,即使真实的区块已超过1MB,它们仍会以为没有超过限制而会接受区块。隔离见证的升级可以被忽略,无需强制,未升级的节点可以处理隔离见证类型的输出。