打字猴:1.70387598e+09
1703875980
1703875981 如果确定交易将永久地出现在区块链中,则称为交易已确认。推荐在假设交易已确认之前,等待15个确认(15个区块产生在交易所在的区块后面)。
1703875982
1703875983
1703875984
1703875985
1703875986 区块链项目开发指南 [:1703875271]
1703875987 区块链项目开发指南 2.4 共识
1703875988
1703875989 以太坊网络中的每个节点包含区块链的一个备份。用户需要确保节点不能够篡改区块链,还需要一个机制检查区块是否合法,如果遇到两个不同的合法区块链,需要有办法确定选择哪个。
1703875990
1703875991 以太坊使用工作量证明共识协议防止区块链被篡改。工作量证明系统需要解决一个复杂问题以创建一个新的区块。解决问题需要大量算力,这就使创建区块很困难了。在工作量证明系统中,创建区块的过程称为挖矿。矿工(miner)是网络中挖区块的节点。使用工作量证明的所有DApp并不一定都使用同样的算法。使用什么算法取决于矿工需要解决的问题、问题难度值、需要多长时间解决等。我们将学习与以太坊有关的工作量证明。
1703875992
1703875993 任何人都可以成为网络中的矿工。每个矿工独自解决问题,第一个解决问题的矿工是胜利者,它得到的回报是5个以太币和该区块中全部交易的交易费。如果你的处理器比网络中的其他节点更强大,也并不意味着你总会成功,因为所有矿工要解决的问题的参数并不完全相同。但是如果你有一台比网络中的其他节点都强大的处理器,成功的概率会比较大。网络安全不是用矿工总数衡量的,而是用网络的全部算力衡量的。
1703875994
1703875995 区块链中有多少个区块没有限制,可以生成的以太币总数也没有限制。矿工一旦成功挖到区块,就向网络中的所有其他节点广播该区块。区块有一个区块头(header)和一系列交易。每一个区块存储前一个区块的哈希值,由此创建一个相连的链。
1703875996
1703875997 让我们来看矿工需要解决的问题是什么以及如何在高水平解决问题。为了挖区块,矿工首先从收到的广播中收集新的、未挖出的交易,然后滤掉不合法的交易。合法的交易必须满足正确地使用私钥签名、账户有足够的余额进行交易等条件。现在矿工创建一个有区块头和内容的区块。内容(content)是区块包含的交易列表。区块头包含前一个区块的哈希、区块序号、随机数(nonce)、目标值(target)、时间戳(timestamp)、难度值(difficulty)、矿工地址(address)等内容。时间戳表示区块初始时间。随机数是一个没有意义的值,纯粹是为了设置一个小于或等于目标值的区块哈希。以太坊使用ethash哈希算法。发现随机数的唯一方法是穷尽所有可能。目标值是一个256位的数字,根据不同的因素计算。区块头的难度值是目标值的一种不同表述方法。目标值越低,发现随机数需要的时间越多;目标值越高,需要的时间越少。计算问题难度值的公式如下:
1703875998
1703875999
1703876000
1703876001
1703876002 网络中的任何节点都可以检查区块链是否合法,首先检查交易在区块链中是否合法以及时间戳的验证情况,然后检查区块的目标值和随机数是否合法、矿工是否得到合法的回报等。
1703876003
1703876004
1703876005 如果网络中的节点接收到两个不同的合法区块链,那么所有区块的整体难度值较高的那个区块链被视为合法的区块链。
1703876006
1703876007 例如,假设网络中的一个节点想改变一个区块中的一些交易,就需要重新计算该块以及该块后面所有区块的随机数。可是在该节点计算的同时,网络其他节点已经又挖出了许多新的区块,因此当它重新计算到最新区块时会因整体难度值较低而被系统拒绝。可见,私自篡改账本的难度是非常大的。
1703876008
1703876009
1703876010
1703876011
1703876012 区块链项目开发指南 [:1703875272]
1703876013 区块链项目开发指南 2.5 时间戳
1703876014
1703876015 计算区块目标值的公式需要用到当前时间戳,且每个区块在区块头附加了当前时间戳。没有什么机制可以阻止矿工在挖新区块时使用其他时间戳(而非当前时间戳),但是它们一般不会那么做,因为时间戳验证会失败,其他节点不会接受该区块,这样就浪费了矿工的资源。当一个矿工广播一个新挖出的区块时,其他节点对其时间戳的验证取决于其时间戳是否大于前一个区块的时间戳。如果一个矿工使用的时间戳大于当前时间戳,则难度值较低,因为难度值与当前时间戳成反比,因此网络将接受区块时间戳是当前时间戳的矿工,因为它的难度值比较高。如果一个矿工使用的时间戳大于前一个区块时间戳,且小于当前时间戳,难度值会高一些,因此要花费更多时间挖区块。等到区块被挖出的时候,网络可能产生了更多区块,因此该区块会被拒绝,因为往往恶意矿工的区块链难度值会低于网络中的区块链难度值。出于以上原因,矿工总是使用准确的时间戳,否则他们会一无所获。
1703876016
1703876017
1703876018
1703876019
1703876020 区块链项目开发指南 [:1703875273]
1703876021 区块链项目开发指南 2.6 随机数
1703876022
1703876023 随机数是一个64位未签名证书。随机数是一个问题的解决办法,矿工不断地尝试随机数,直到发现目标值。有人也许会好奇,如果某个矿工拥有的算力比网络中的任何其他矿工都大,他是否总会第一个发现随机数?答案是不会。
1703876024
1703876025 每个矿工挖的区块的哈希是不同的,因为哈希取决于如时间戳、矿工地址等内容,而且对于所有矿工来说这些内容很可能是不一样的。因此,解决问题并不是一场比赛,而更像是一件碰运气的事。当然,矿工可能因为算力大而走运,但那并不意味着该矿工总会发现下一个区块。
1703876026
1703876027
1703876028
1703876029
[ 上一页 ]  [ :1.70387598e+09 ]  [ 下一页 ]