区块链是一种去中心化协议,它将数据库分布在其网络中的多个节点上,为过去、当前和未来的交易建立共识机制。区块链中的数据结构表示为区块。
在去中心化的区块链网络中,参与者同意什么是正确的,而不是中央权威。区块链也是透明和不可变的,所有网络参与者都可以看到网络上发生的事情,除非通过商定的机制,否则交易日期无法更改。
创世区块
创世区块是任何区块链的第一个区块,该区块是系统的基本起点,并与所有未来的交易相关联。世界上第一个创世区块是由中本聪创建的,并以此创造了比特币。
创世区块的存在使区块链能够通过允许新创建的区块与以前的区块相关联来生成其交易历史。此外,创世区块在同步网络节点方面具有重要作用——它们的数据库中必须具有相同的创世区块。这确保了区块链的分布式交易簿对每个人都是相同的,从而提供了安全性。
主链区块
主链区块是所有经过验证并包含在区块链中的区块。为了实现这一点,区块必须通过一个节点解决其分配的加密难题来获得网络的同意。一旦网络达成共识,区块就会包含在区块链中,并由所有节点传播。这样,该网络的每个节点都有新的区块,并作为它的验证点。
每个有效区块都包含一系列与该区块一起验证的交易。例如,在比特币中,每个有效区块平均承载2100笔交易。确认有效区块中的每笔交易。
所有有效区块继续确认之前的交易,完全保护网络上的所有区块和交易。当然,每个有效区块包括允许验证的数据结构。该结构包括区块的哈希值、时间戳、nuncio和区块交易数据。搜索候选解决方案的过程称为挖矿,参与节点称为矿工。每个为区块的加密难题生成有效解决方案的矿工都成为领导者,并被允许确定未确认的交易集,然后将这些附加到区块链。
孤立区块
孤立区块或陈旧区块是不属于区块链的有效区块。当两个矿工几乎同时验证区块时,或者当具有足够哈希能力的攻击者试图逆转交易时,可以创建这些数据。在这些情况下,网络共识协议将发挥作用,以决定哪些区块将被包含在区块链中,哪些区块将被孤立。
实际上,区块链网络被编程为始终支持最长的区块链。也就是说,它会选择包含更多信息或处理过交易的区块。在比特币区块链中,孤立区块被丢弃,矿工所做的工作是无用的。
此外,正是由于这种类型的区块,大多数交易所和一些钱包会在提供资金之前自动等待额外的确认。他们通过计算您正在接收的交易和当前块之间开采了多少块来做到这一点。
>eth.getBlock(blockNumber)}>eth.syncing.highestBlock-eth.getTransaction(““).blockNumber
区块链系统使用Merkle树数据结构运行,这使得它们(在理论上)不可变。Merkle树是RalphMerkle在1979年申请专利的,在加密学中被广泛使用。Merkle树是验证共享数据未更改、损坏或更改的基本方法,并且非常适合区块链,因为它是轻量级的。例如,由于比特币的Merkle树结构,用户的移动钱包不需要下载所有的比特币交易来验证它们。
给区块中的每笔交易对应于Merkle树中的一个叶子,通过散列单笔交易从这些叶子递归构建。
交易对(叶子)被哈希以创建可能对应于区块链网络中的交易的其他叶子节点。尽管可以从大量交易中创建Merkle树,但Merkle根始终对应一个32字节或256位的字符串(例如SHA256哈希算法总是输出32字节的固定长度,无论输入中的大小)。通过这种方式,我们可以使用小至32字节的数据来验证多达数千笔交易。
根据案例,任何更改,无论多么微小,都会阻止Merkle根的验证,并使区块链的部分或全部历史失效。
以太坊与比特币的不同之处在于是它具有更快的区块创建机制,旨在加快交易过程。但是,当区块生成之间的时间间隔很短(大约15秒)时,会创建大量的孤立区块,因为将所有这些区块都包含在区块链中是低效的。
这导致了矿工浪费时间在区块上工作而得不到报酬的问题。为了解决这个问题,以太坊的开发者推出了GHOST协议。
GHOST代表Greedy Heaviest Observed Subtree,概念很简单。它奖励验证孤立区块的矿工,尽管其奖励低于标准区块。为了释放奖励,该区块必须被主链中的区块或叔块引用。
该机制的另一个优点是解决了网络中心化的问题。当区块被快速创建时,大型矿池很容易垄断区块验证,从而导致较小的竞争对手创建无穷无尽的孤块区块。
以太坊区块链中有两种类型的区块:
主链区块是包含在以太坊区块链中的区块。发现它的矿工将获得奖励。
叔块是经过身份验证但未包含在主链中的区块。矿工为此获得的奖励低于有效区块。
想象一下,世界不同地区的两个矿工同时挖出同一个区块。然后他们在网络中传播他们的区块。这可能会在区块链中造成的分歧,因此必须选择一个,而较大的区块将永远获胜。未选中的区块成为孤立区块(在比特币中)或叔块(在以太坊中)。与比特币不同,以太坊矿工挖矿将获得整个区块的1/8奖励。
主链区块的矿工可以参考叔块,当他们这样做时,额外的奖励分配给主链区块的矿工和叔块的矿工。主链中包含的每个区块最多可以引用两个叔块,并为每个引用的叔块提供1/32的完整区块奖励。然而,支付给叔块矿工的奖励会随着时间的推移而减少。
通过保证对否则会浪费的计算工作进行补偿,并通过使奖励随着时间的推移而减少,竞争链上的矿工有动力重新加入主链。这些叔块有助于区块链安全,也降低了51%的攻击概率。
在以太坊矿池中,可以通过多种方式进行分布:
按比例支付计划
在这个简单的方案中,矿工将根据在矿池发现的两个区块之间的时间间隔内提交的代币数量获得相应的奖励。因此,区块奖励B根据他们各自提交的代币数量在资金池中的N个矿工之间进行分配。
按最后N股支付(PPLNS)
PPLNS计划按照最近提交的N股成比例分配奖励。
基于队列的支付方案
Ethpool3是第一个引入基于队列的奖励机制的以太坊矿池。在该计划下,矿工为提交给矿池运营商的每份代币累积信用。每当矿池挖出一个完整的区块时,区块奖励就会分配给矿池中累积信用余额最高的矿工。然后,顶级矿工将其信用余额重置为他们自己与矿池中第二高信用余额之间的差额。
引用关系创建了额外的薄荷奖励,普通区块所有者的完整区块奖励的1/32和叔块的 (8-i)/8。根据引用的块高度,变量 i的范围从 1到6 。
除了完善区块链的结构外,以太坊还有另外两项安全改进。一种是随机打破平局规则。一个节点不接受第一个接收的链,而是在所有接收到的相同长度的链中随机选择一个链。数γ不再固定,等于竞争链数的倒数。另一个目的是赦免叔块挖矿的策略。
日食攻击如何工作?
日食攻击要求攻击者控制主机节点的僵尸网络(每个节点都有自己的IP地址),并找出受害者的相邻节点,基本上是通过反复试验。实现这一目标所需的努力取决于网络的规模和性质,但如果成功,在受害者注销并重新加入网络后,攻击者将控制所有受害者的连接节点。
在这种情况下,存在三个参与者——攻击者、受害者和诚实节点。如果受害者找到一个区块,攻击者就不会将该区块传播到网络。如果攻击者发现了一个区块,他们就会与受害者分享。通过这种方式,攻击者为自己和被遮蔽的节点创建了一个私有区块链。
通过这样做,攻击者可以获得比诚实挖矿多96.4%的收益。日食攻击是可能的,因为在去中心化网络中,一个节点无法同时连接到网络上的所有其他节点。相反,为了提高效率,给定节点将连接到一组选定的其他节点,而这些节点又连接到自己的选定组。因此,仅使用两台具有唯一IP地址的机器就可以发起日食攻击。
以太坊依赖于基于名为Kademlia的协议的结构化网络,该协议旨在让节点更有效地连接到其他节点。通过使用密钥生成算法,攻击者可以非常迅速地创建无限数量的节点ID(点对点网络上的标识符)。更糟糕的是,攻击者甚至可能以一种比随机节点ID更吸引受害者的方式创建节点ID,基本上把受害者吸引到这些节点ID上。
以太坊有三个特征可能使其容易受到日食攻击。首先,快速创建区块会产生无穷无尽的松散区块,通过增加以太坊的供应量间接侵犯了诚实矿工的利益。其次,叔块机制意味着节点可以从这些区块中获利。第三,以太坊增强的节点连接性为攻击者提供了动力。