步骤2:交易由钱包传达出去并等待对应的区块链上的矿工接收。只要没有接受,它就会等待在“未确认的交易池”中。这是一个待处理的未确认的交易集合池。而这些手机挖矿待确认的交易通常不会集中在一个巨型池中,而是在分开的小型本地池中。
步骤3:网络上的矿工(有时称为节点,但不完全相同!)从这些池中选择交易并形成“区块”。除了一些额外的元数据之外,块区基本上是交易的集合(此时,仍然是未经确认的交易)。每个矿工都构建自己的交易块,多个矿工可以选择同样的交易包含在自己的区块中。
示例:有两名矿工,矿工A和矿工B。矿工A和矿工B都可以将交易X包含在自己的区块中。每个区块链都有自己的区块规模。在比特币区块链上,区块最大可存储1MB数据。在向区块添加交易之前,矿工需要根据区块链历史检查交易是否有能够进行。根据当前区块链历史记录,如果发起人的钱包余额充足,则交易被认为是有效的并且可以添加到该区块中。矿工通常会优先考虑高交易费的交易,这样回报更高。
步骤4:通过选择交易并将其添加到自己的区块,矿工创建了一个交易块。为了把交易块添加到区块链(让所有矿工和节点记录),该区块需要签名(也称为工作证明)。此签名是通过解决每个交易块所特有的数学问题来创建。每个区块都有不同的数学题,因此每个矿工需要处理他们构建的区块所特有的问题,所有这些问题难度相同。为了解决这个数学问题,大量算力被占用(因此需要大量的电力)。你可以想象成在计算器上运行计算,只是在电脑上更难,这就是挖矿的过程。如果你想了解更多数学问题的解决过程,请继续阅读下文,或者请跳至步骤5。
挖矿又叫哈希(工作量证明共识算法)
当在区块链上添加区块时,每个矿工面临的数学问题是为其区块中的数据找到哈希输出(也称为签名),该输出以一定量的连续零开始。哈希函数是一个很难解决的数学问题,但答案很容易验证。哈希函数接收数字和字母的字符串,并将其转换为由随机字母和数字组成的新的32位字符串。这个32位数字符串是哈希输出。现在将区块内的数据想象为哈希输入,当对此输入进行哈希处理时,它会得到哈希输出(32位字符串)。比特币区块链的一个规则是,如果一个区块的签名(哈希输出)以一定量的零开始,才能将其添加到区块链中。但是,输出字符串每次都是由随机的输入字符串产生的,那么如果区块的数据字符串不能产生以多个连续零开头的签名(哈希输出)怎么办?好吧,这就是为什么矿工需要反复更改其区块内数据,这称为nonce。每次矿工更改nonce时输入字符串都会改变,因此也会产生随机的输出字符串(签名)。矿工一直重复此过程直到找到满足签名要求(以多个连续零开始)的输出字符串。挖矿过程中需要大量的算力和时间。如果你很好地理解这个过程,现在让我们来看第5步。
步骤5:矿工首先为区块找到合格的签名,然后再把该区块及其签名广播给其他矿工。
步骤6:其他矿工需要确认签名的合法性,通过接收被广播的区块的数据串来计算输出的字符串是否匹配签名。如果它是有效的,其他矿工将确认其有效性并同意该区块可以添加到区块链中(他们达成共识,也就是说彼此一致,因此术语叫共识算法)。这也是“工作量证明”的来源。签名就是所执行工作的“证明”(花费了算力)。然后该区块就可以添加到区块链中,并被网络上的其他节点传播。只要区块内的交易与当前钱包余额(通过交易历史)能对应,其他节点就会接受该区块并保存到其交易数据中。
步骤7:将一个区块添加到链上后,之后添加的每个区块都被看成该区块再次的“确认”。例如,如果我的交易包含在区块502中,总共链长是507个区块,则意味着我的交易被5次确认(从502-507)。之所以被称为确认,因为之后添加区块时,区块链会在整体交易历史上再次达成共识,包括你的交易及区块