区块链面试问答
在比特币中交易和区块加密如何实现?
比特币区块不以任何方式加密:每个区块是公共的。 防止修改和保护数据完整性是一个称为区块哈希的值。 使用特殊的散列函数处理区块内容—在比特币中,是 SHA256—且结果值包含在区块链中。
解释为什么区块链需要代币来运转。
货币/代币用于实现状态间的变化。当有人进行交易时,是状态的变化,货币从一个地址转移到另一个地址。 除此之外,交易可以包含额外的数据,且状态的变化用于改变数据—在定义的不可变区块链上执行此操作的唯一方式。 从技术上来说,区块链对于其基本操作不需要货币,但没有它们的话,则需要引入其它方式来管理链状态和验证交易。
在 P2P 网络中节点发现是如何工作的?
当一个新节点启动时,它不知道关于网络的任何信息,因为没有中心服务器。 通常开发者提供一个直接写入代码的可信任的节点列表,用于初始化节点发现。
验证程序如何检查区块是否有效?
网络上的每个全(完整)节点进行区块验证。 当一个新区块被通告时,接收它的每个节点都会进行一系列的检查。 两个最重要的检查是工作量证明(区块是否提供足以包含进区块链的工作量)和全部交易的有效性(每笔交易都必须有效)。
什么是脚本公钥(scriptPubKey)?解释如何使用 P2SH 地址。
脚本公钥(scriptPubKey)是所谓的“锁定脚本”。 可在交易输出中找到它,是用于花费输出必须满足的条件。
P2SH 是特殊类型的地址,其中复杂的锁定脚本被其哈希值替换。 当稍后呈现尝试花费输出的交易时,除了解锁脚本,还必须包含匹配哈希值的脚本。
使用脚本,写一个赎回脚本,允许用户只有当其知道魔数 1234567 时花费输出。
OP_EQUALVERIFY
scriptPubKey: 1234567 OP_EQUALVERIFY
scriptSig: 1234567
使用脚本,写一个赎回脚本,允许任何人在其至少 30 天后花费输出。
scriptPubKey: "30d" OP_CHECKSEQUENCEVERIFY OP_VERIFY
scriptSig: empty
什么是陷门函数,为什么在区块链开发中需要它?
陷门(又称后门)函数是一种在一个方向上容易计算但在相反方向上难以计算的函数,除非你有特殊信息(陷门)。 陷门函数对于公钥加密是至关重要的—这就是为什么它们通常用于区块链开发来展现地址和私钥的思想。
什么是挖矿?
挖矿是在区块链网络中达成共识的过程。挖矿有两个目的。 首先,它在生成的区块中产生新货币。 其次,它通过向网络提供工作量证明来包含交易到分布式账本中; 也就是说,证明生成的区块是有效的。
什么是链分叉?
分类账本中的区块以一种方式包含在构建的最长的链上,即具有最大累积难度的链。 分叉是这样一种情况,有两个候选区块竞争形成最长的区块链,且两个矿工在短时间内发现工作量证明问题的解决方案。 然后划分网络,因为一些节点从矿工 #1 获得区块,另一些从矿工 #2 获得。
分叉通常在一个区块中被解决,因为这种情况再次发生的可能性随着下一个区块的出现变得非常低, 所以很快就会有一个最新最长的链被当作主链。
(注意:这种类型的分叉与硬分叉不同,硬分叉是一些开发者决定对区块链协议创建向后不兼容的更改,导致两个永远不同的区块链。)