以太坊挖矿是什么?
挖矿是指创建要添加到以太坊区块链的交易块的过程,在以太坊现已弃用的工作量证明架构中进行。
挖矿一词源于将加密货币比作黄金的比喻。
黄金或贵金属很稀缺,数字代币也很稀缺,在工作量证明体系中,只能通过挖矿增加总量。
在工作量证明以太坊中,只能通过挖矿进行发行。
然而,与黄金或贵金属不同,以太坊挖矿也是一种通过在区块链中创建、验证、发布和传播区块来保护网络的方式。
以太币挖矿 = 保护网络安全
挖矿是任何工作量证明区块链的命脉。
在过渡到权益证明之前,以太坊矿工,即运行软件的计算机,利用它的时间和算力处理交易并产生区块。
为什么存在矿工?
在以太坊这样的去中心化系统中,需要确保每个人都同意交易的顺序。
矿工通过解决计算难题来产生区块并保护网络免受攻击,从而帮助实现这一目标。
以前任何人都能使用他们的计算机在以太坊网络上挖矿。
然而,并非每个人都可以通过挖矿实现以太币 (ETH) 获利。
在大多数情况下,矿工必须购买专用计算机硬件,并且能够获得廉价能源。 普通计算机不太可能获得足够的区块奖励来支付相关的挖矿成本。
挖矿成本
-
建造和维护矿机所需硬件的潜在成本
-
矿机的电力成本
-
如果你在矿池中挖矿,这些矿池通常对矿池生成的每个区块收取固定百分比的费用
-
支持矿机的潜在成本(通风、能源监测、电线等)
要进一步探索挖矿收益,请使用挖矿收益计算器,例如 Etherscan 提供的挖矿收益计算器。
如何开采以太坊交易
用户编写和通过一些帐户私钥来签署交易请求。
用户通过一些节点将自己的交易请求广播到整个以太坊网络。
在听到新的转账请求时,每个以太坊网络节点会添加这笔交易到本地的内存池,这些内存池包括他们收到的没有被添加到区块链以承认的所有转账请求。
在这个时候,一个挖矿节点将几十或上百个交易请求汇总到潜在区块中,从而尽量多收取交易手续费,同时保证不超出区块燃料限制。
采矿节点将:
验证每个交易请求的有效性(例如没有人试图将以太币从他们没有签名的帐户中转移出来,请求是否有格式错误等),然后执行请求的本地代码,改变本地副本 EVM 的状态。
矿工获得每个交易请求的转账的手续费到他们的帐户。
一旦在本地 EVM 副本上验证并执行了块中的所有转账请求,就开始为潜在块生成工作证明“合法性证书”。
最终,矿工将完成为包含我们特定交易请求的区块生成的证书。 然后,矿工广播完成的区块,其中包括证书和校验新 EVM 状态。
其他节点将收到新的区块。 他们将验证证书,执行区块上所有的转账(包括最初由用户广播的交易),然后校验新 EVM 状态,之后执行所有满足 EVM 校验和的转账。
只有这样,这些节点才会将该块附加到区块链的尾部,并接受新的 EVM 状态作为新的规范状态。
每个节点将从其未完成的本地内存池的转账请求中删除新区块中已经存在的转账请求。
加入网络的新节点将按顺序下载所有块,包括未被打包的交易块。 初始化本地 EVM 副本(作为空白状态的 EVM 开始),在本地 EVM 副本上执行每个块中的每个转账,校验各块的校验和。
每个交易都只会被挖矿(首次包含在新区块中并传播)一次,但在推进规范以太坊虚拟机状态的过程中,每个参与者都会执行和验证交易。
这凸显出区块链的核心准则之一:不信任,就验证。
挖矿算法
以太坊主网只使用过一种挖矿算法 - “Ethash”。
Ethhash 是称为“Dagger-Hashimoto”的最初研发挖矿算法的继承者。
以太坊挖矿使用过一种称为 Ethash 的算法。
该算法的基本思想是,矿工尝试使用蛮力计算找到一个随机数输入,使得生成的哈希小于一个取决于计算难度的阈值。 此难度级别可以动态调整,从而允许定期进行区块生产。
DAGGER HASHIMOTO
Dagger Hashimoto 是以太坊挖矿的先导研究算法,现已被 Ethash 取代。
它是两种不同算法:Dagger 和 Hashimoto 的融合。
它只是一个研究实现,并在以太坊主网启动时被 Ethash 取代。
Dagger 会生成一个有向无环图,将共同取哈希值的内容随机划分。
其核心原理是,每个随机数只取总数据树的一小部分。
挖矿禁止为每个随机数重新计算子树,因此需要总存储树,但若为验证某个随机数的价值,则可以重新计算。
Dagger 的设计目的是替代诸如 Scrypt 的已有算法。后者是“内存困难算法”,但当它们的内存困难程度增加到可信的安全水平时将很难验证。
然而,Dagger 容易受到共享内存硬件加速的影响,因此我们放弃了这种算法,转而采用了其他研究途径。
Hashimoto 算法通过实现输入/输出密集的特性(即,内存读取速度是挖矿过程中的限制因素)来增加对专用集成电路的抵抗性。
理论上来说使用内存比使用计算能力更容易;已有价值数十亿美元的经费投入被用于研究针对不同应用场景的内存优化,通常涉及近随机访问模式(即“随机存取存储器”)。
因此,现有的内存对评价算法效率的能力更接近最优。 Hashimoto 使用区块链作为数据源,同时满足上述第 (1) 和第 (3) 条。
Dagger-Hashimoto 是在 Dagger 和 Hashimoto 的基础上改进而来的以太币挖矿算法。
Dagger Hashimoto 和 Hashimoto 的差别在于,Dagger Hashimoto 的数据来源并非是区块链,而是自定义生成的数据集,这些数据集将基于所有 N 区块上的区块数据进行更新。
这些数据集采用 Dagger 算法生成,可为轻量级客户端的验证算法高效计算特定于每个随机数的子集。
Dagger Hashimoto 算法和 Dagger 算法的差别在于,与原来的 Dagger 不同,用于查询区块的数据集只是暂时的,只会偶尔更新(例如每周更新一次)。
这意味着生成数据集的工作量接近于零,所以 Sergio Lerner 关于共享内存加速的论据变得微不足道。
参考资料
https://ethereum.org/zh/developers/docs/consensus-mechanisms/pow/mining/
https://ethereum.org/zh/developers/docs/consensus-mechanisms/pow/mining-algorithms/
https://ethereum.org/zh/developers/docs/consensus-mechanisms/pow/mining-algorithms/ethash/
https://ethereum.org/zh/developers/docs/consensus-mechanisms/pow/mining-algorithms/ethash