精华内容
下载资源
问答
  • 2018-09-12 12:01:39

    [区块链从原理到实现]-索引

    [区块链从原理到实现]- 以太坊挖矿原理及实现

    本文章主要介绍了以太坊区块链的挖矿流程.
    分为以下几个部分说明:

    • 什么是挖矿
    • 静态代码分析
    • 挖矿流程分析

    什么是挖矿

    以太坊的挖矿类似于现实生活中在金矿的矿山上挖矿.
    现实生活中在矿山中挖金矿有几个角色可以与以太坊区块链的挖矿过程很好的对应.

    • 以太坊区块链 : 链就是一个金矿,里面有多少金子是由以太坊的源代码来定义的.
    • 区块 : 区块对应现实中从金矿挖出来的金子(每挖出一个区块,挖出区块的节点都会有一定的奖励,正是因为这个奖励才促使大家都参与到挖矿的行为中来.)
    • 矿工 : 参与以太坊网络挖矿的节点称为矿工.矿工通过执行"挖矿"这一动作使得以太坊持续不断的产生新的区块,每个区块包含在一段时间内的交易.区块不断的被挖掘并被所有节点确认,从而保证了以太坊网络的交易被确认并上链.
    • 挖矿 : 所谓挖矿即节点利用自己的算力,通过计算产生区块的过程.目前的以太坊公网采用的共识机制为POW(Proof Of Work)工作量证明机制,节点使用这个机制产生区块的过程叫做"挖矿"非常形象,因为在PoW的过程中,节点并没有与其他节点协商,而只是单纯的凭借自己的算力计算出符合标准的数值,一旦算出的结果符合标准那么就说这个节点挖出了一个块.
    • 共识算法 : 节点间达成协商一致的一种分布式算法,目前除了PoW还有其他共识机制,例如:PBFT/IBFT(拜占庭容错算法),PoS(Proof Of Stack)权益证明,DPOS(Delegated Proof Of Stack)股份授权证明,PoA(Proof of Authority)权威证明,POB(Proof Of Burn)等等各种共识算法,这些共识算法的侧重点不同,都是为了解决各自领域的问题,通过一定的手段达成节点间的共识.后续文章会对目前流行的共识算法做说明总结.

    静态代码分析

    挖矿相关的代码都在miner文件夹下.
    这里写图片描述

    • agent.go: agent代码实现,agent对象负责与共识模块交互.

    • miner.go: miner对象控制挖矿过程的开始,结束及参数转换等.

    • remote_agent.go: 没有深入分析,remote_agent继承了agent.

    • unconfirmed.go: unconfirmed模块负责存储已经上链但是未经过后续6个块确认的块,从代码中来看,unconfirmed模块影响挖矿即出块过程,其代码逻辑只负责日志输出,用于提醒用户.

    • worker.go: worker对象也是挖矿过程中的重要对象,其负责与agent交互,负责给agent提供生成块需要的原始数据,然后接收agent返回来的已经经过共识,可以上链的块.
      共识协议相关代码如下,后续专门文章分析各种共识算法的实现:
      这里写图片描述

    • clique: ethereum的POA实现.

    • ethash: ethereum的POW实现.

    • istanbul: 此为wanchain链新添加的IBFT(PBFT)共识实现,在ethereum不包括此文件夹.

    • misc: 未关注.

    • consensus.go: 共识接口定义.

    • errors.go: 共识相关error定义.

    • protocol.go: protocol接口实现.

    挖矿流程分析

    以太坊挖矿整体流程如下图所示:
    这里写图片描述
    下面按照流程图说明以太坊挖矿的过程:

    • 运行以太坊客户端程序geth(或者运行wanchain的gwan),启动节点.
    • 调用eth.New()函数创建ethereum对象.
    • eth的New()函数调用函数CreateConsensusEngine()创建共识算法引擎.
      • 如何确定需要使用哪种共识算法引擎? (后续确认)
    • 共识算法引擎创建完成之后eth.New()接着调用函数miner.New()创建miner对象,miner对象负责控制挖矿的过程,与其他模块交互,控制挖矿过程的启动及停止等.
    • 在miner.New()函数中调用newWorker()函数创建了一个worker对象,然后调用NewCpuAgent()函数创建了一个cpuAgent对象.其中worker负责给cpuAgent发送出块需要的数据,cpuAgent才是实际与共识引擎交互负责出块的对象,在其内部调用共识引擎的各种接口来出块,最终cpuAgent把产生的新块返回给worker对象,然后worker对象发送新块上链的通知并同时向它的peer广播新块消息.
    • worker对象创建之后会创建一个协程go worker.wait(),此协程负责接收cpuAgent返回给worker的新块,进行新块的处理同时调用commitNewWork()函数发送新的出块请求给cpuAgent对象.
    • cpuAgent对象创建之后会创建一个协程go self.update(),此协程负责接收从worker对象发送过来的出块请求,cpuAgent()对象收到新的出块请求之后创建一个协程go self.mine()用于对新区块进行挖掘(对每个新区块的出块请求都会新创建一个协程来执行出块的动作.)
    • worker对象有一个recv通道,用于从cpuAgent接收挖矿的返回结果;cpuAgent的通道workCh用于从worker对象接收发送过来的用于出块的原始数据,cpuAgent的returnCh指针在cpuAgent创建之后会被赋值为worker对象的recv通道,这样worker和cpuAgent的交互通道就关联了起来:worker把原始数据发送给cpuAgent的workCh通道,cpuAgent把出块结果放到worker的recv通道返回给worker对象.
    • 图示中蓝色的箭头表示代码的静态流程,即个对象的创建逻辑.
    • 图示中黄色的箭头表示消息流向,黄色和蓝色箭头结合起来后挖矿流程就形成了一个闭环.
    • 紫色箭头关联的逻辑为挖矿的开始流程,执行miner.start()开始挖矿, cpuAgent在miner.start()之后才开始监听workCh通道,等待接收组装区块的原始数据的.

    总结

    上述部分分析了以太坊挖矿的原理及实现. 在本部分的挖矿流程示意图中共识机制部分只涉及到了共识的接口,并没有对各种共识内部进行深入分析.在后续章节会多各种共识机制的原理及流程进行详细分析.

    ---- END ----

    更多相关内容
  • 2021最详细的以太坊挖矿教程第一弹

    万次阅读 热门讨论 2021-03-09 02:39:05
    既然是新手我们来讲一下显卡矿机,目前显卡挖矿收益最大的就是以太坊,同时以挖ETH(以太坊)为例,讲解新手如何挖矿,如下图: 挖矿需要三部分:钱包、矿池和挖矿软件。 1.钱包 钱包的话需要注册,实名认证,找到...

    目前数字货币有很多种,比如比特币,以太坊,莱特币等。因币种的不同,其挖矿的算法也不同,总的来说有专业算法矿机和显卡(GUP)矿机。既然是新手我们来讲一下显卡矿机,目前显卡挖矿收益最大的就是以太坊,同时以挖ETH(以太坊)为例,讲解新手如何挖矿,如下图:
    在这里插入图片描述
    挖矿需要三部分:钱包、矿池和挖矿软件。
    1.钱包

    • 钱包的话需要注册,实名认证,找到对应货币,比如eth,点充值,找到自己的钱包地址,粘贴到挖矿软件里。然后挖矿软件点开始就行了。后面我会写一篇专门的钱包的文章,既然是新手,推荐使用云钱包,或者三大交易所钱包,今天以我使用的钱包Cobo钱包(云钱包)为例:

    在这里插入图片描述

    2.矿池

    • 比如F2Pool矿池(鱼池),星火矿池,一般情况下你的贡献度达到0.1个ETH币就会给你打一次。矿池也都是大同小异,1%-2%的抽水。当然,矿池其实也可以不注册,只要你在软件里填写对你的钱包地址即可。我使用的矿池为星火矿池,如下图:
      在这里插入图片描述

    (给小白补充一下,散户只靠自己基本是没办法挖到的,所以就有了矿池,然后按照你机器的算力给你分成。抽水方式也有很多,比较稳定的是pps+,一般是1%-2%)

    3.挖矿软件
    在这里插入图片描述

    软件蛮多的,试了几个大同小异,一般主流的都不抽水。使用方法也很简单,钱包地址填写对,矿池选对,点击开始,一键挖矿。比如说轻松矿工:

    上图中的钱包就填你上一步注册钱包的ETH地址。

    最后给大家几点需要注意的地方:

    1.ETH挖矿,需要大于4G的显卡(等于4G的也不行)

    2.显卡挖矿一定要做好扇热,能够延长显卡的使用时间

    3.以目前的行情即使是使用笔记本挖矿,也是能够有收益的

    最后欢迎大家关注,评论,收藏

    展开全文
  • 以太坊挖矿算法及其难度调整.,

    以太坊 挖矿算法

    对于基于工作量证明的系统来说,挖矿是保障区块链安全的重要手段,有时候说Block chain is secured by mining,比特币里面的挖矿算法总的来说是比较成功的,经受了时间的检验,到目前为止,没有人发现,也没有什么大的漏洞。

    bug bounty:bounty(赏金)

    美国电影有一个叫bounty hunter(赏金猎人),专门去抓那些政府悬赏捉拿的逃犯

    bug bounty:有的公司悬赏来找软件中的漏洞,如果能找到软件中的安全漏洞就可以得到一笔赏金。

    比特币的挖矿算法是一个天然的bug bounty,如果你能找到里面的漏洞,或者是某一个挖矿的捷径就能取得很大的利益。但是到目前为止还没有人发现有什么捷径可走,所以比特币的挖矿算法总的来说是比较成功的,是经受住时间检验的,但是比特币的挖矿算法也有一些值得改进得地方,其中有一个保守争议得问题就是挖矿设备得专业化,有普通的计算机挖不倒矿,只能用专门的设备,专用的ASIC芯片来挖矿,那么很多人认为这种去中心化的做法和去中心化的理念是背道而驰的,也跟比特币的设计初衷相违背的,中本聪最早的一篇论文,提出One cpu,one vote,理想状况下,应该让普通老百姓也能参与挖矿过程,就用家里的桌面机,笔记本电脑,甚至手机来挖矿,这样也更安全,因为算力分散之后,有恶意的攻击者想要聚集到51%的算力发动攻击,这个难度就会大得多。所以比特币之后出现的加密货币包括以太坊设计mining puzzle的时候,一个目标就是要做到ASIC resistance,那么怎么才能设计出对ASIC芯片不友好的mining puzzle呢?

    一个常用的做法就是增加mining puzzle对内存访问的需求,也就是所谓的memory hard mining puzzle,ASIC芯片相对于普通计算机而言,主要优势是算力强,但是在内存访问的性能上没有那么大的优势,同样的价格买一个ASIC矿机和买一个普通的计算机,这个ASIC矿机的计算能力是普通计算机的几千倍,但是内存访问方面的性能差距远远没有这么大,所以能设计出一个对内存要求很高的puzzle,就能起到遏制芯片的作用。

    • 怎么设计呢?

    一个早期的例子是莱特币LiteCoin,曾经是市值仅次于比特币的第二大加密货币,他用的Puzzle是基于Scrypt,这个是对内存要求很高的哈希函数,以前用于计算机安全领域,跟密码相关,那么他的具体设计思想是说,开一个很大的数组,然后按照顺序填充一些伪随机数,比如说有一个种子节点,seed的值通过一些运算,算出一个数来,填在第一个位置,然后后面每个位置都是前一个位置的值取哈希得到的,伪随机数是说取哈希值后的值你也不知道,看上去就是乱七八糟的数一样,就好像随机数,但我们不可能真的用随机数,真的用随机数没法验证。填充完之后,里面的数值是有前后依赖关系的,是从第一个数依次算出来的,然后需要求解这个puzzle的时候,按照伪随机数的顺序从数组当中读取一些数,每次读取的位置跟前一个数相关,比如说要解puzzle了,一开始读取A这个位置的数,把A位置的值读取出来之后,根据他的取值进行一些运算,算出下次要读取的位置,比如说是B这个位置,然后把B这个位置的数读出来,再进行一些运算得到下一个读取的位置,比如说C这个位置,这个也是一种伪随机数的顺序,因为经过哈希运算之后得到下一个读取的位置。
    image-20210813211553593

    这样做的好处:
    如果这个数组开的足够大的时候,挖矿的矿工就是memory hard,因为如果不保存数组,那么挖矿的计算复杂度会大幅度上升,比如说,在读取数组里面这些数的时候,你没有保存数组,那要怎么办,比如说求解puzzle的时候,一开始在A这个位置,如果没有数组的话,还得从第一个数,依次算出这个值,然后要读取第二个位置的数,这些没有存起来,再算一遍算到B位置的值,下面是C,也一样,要算到C位置的值,这个计算复杂度会大幅度上升。

    所以要想高效地挖矿,这个内存区域是需要保存的,有的矿工可能保存一部分内存区的内容,比如说,这个数组当中只保留奇数位置地元素,偶数位置地元素就不存了,这样数组可以少一半,那用到偶数位置的数怎么办呢,要根据另外一半去算一下,计算复杂度会提高一点,但是内存量可以减小一半,管它叫做time-memory trade off。

    这个设计的核心思想是不能像比特币那样主要进行哈希运算,比特币其实也不是取一次哈希,他是取两次哈希,但这个不够,要增加他的运算过程中对内存访问的需求,要设计一个对ASIC芯片不友好的,对普通计算机能参与的。设计的任务更像是普通计算机干的事情,而不是像一个挖矿专用的ASIC芯片干的事情,普通计算机内存很大,就要利用这个特性,设计puzzle对资源的需求,特别像是普通计算机对资源的配备比例。

    这个puzzle好的地方:对于矿工挖矿的时候是memory hard。

    坏的地方:对轻节点来说也是memory hard。

    前面讲过设计puzzle的一个原则:difficult to solve,but easy to verify,这个问题就在于验证这个puzzle需要的内存区域跟求解这个puzzle需要的区域几乎是一样大的,轻节点验证的时候也得保存这个数组,要不然他的计算复杂度也是大幅度提高,对于scrypt早期计算机的安全领域,这个密码方面的话他不是一个问题,他没有轻节点验证这个问题,但对于我们这个来说是不行的,这样造成一个结果就是莱特币在真正使用的时候,这个内存区域不敢设置的太大,比如说你设一个1G的数组,这对于计算机来说是不大的,但是如果是一个手机上的app,1G的内存可能就太大了,因为这个原因,实际莱特币在使用的时候,这个数组只有128Ks,这个是非常小的,连1M都不到,就是为了照顾轻节点,那么最后的效果怎么样呢

    当初莱特币在发行的时候,目标不仅仅是ASIC resistance,还是GPU resistance,就是挖矿最好连GPU都不要用,都用普通的CPU挖矿就行了,结果后来就出现GPU挖矿的,再后来就出现用ASIC芯片挖矿的,实践证明莱特币要求的128k内存不足以对ASIC芯片的生产和设计带来实际上的障碍,所以从这一点来说,莱特币的设计目标没有达到,但是他早期宣传的设计目标对于解决能启动问题是很有帮助的,任何一个加密货币,都存在能启动问题,包括比特币,一开始的时候,没有人知道这个加密货币,你就发行一个货币,也没有人理你,那怎么办呢,没有人参与,这是一个问题,而且对于基于工作量证明的加密货币来说,挖矿人太少是不安全的,因为发动恶意攻击难度太低,比特币早期也是不安全的,一开始只有中本聪一个人在用,后来变成少数几个人在挖矿,那个时候,如果想对比特币发动恶意攻击是很容易的,那么比特币是怎么解决这个能启动的问题呢,现在谁也说不清楚了,但总的来说是一个循坏迭代的过程,中本聪宣传的多了,对比特币感兴趣的人就多了,然后参与挖矿人就多了,变得更安全,价值也提高了,然后对比特币感兴趣的人就更多了,挖矿的人也更多了,然后比特币变得更安全了,价值就更进一步提高了,形成一个良性循坏。莱特币虽然没有达到当初的设计目标,但是他早期的宣传,更民主,让更多人参与的理念对于聚集人气来说是很重要的,所以莱特币一直到现在也是一个比较主流的加密货币,除了这个mining puzzle之外,莱特币跟比特币的另一个区别是来特比的出块速度是比特币的4倍,他的出块间隔是两分半,而不是十分钟,除此之外,这两种加密货币基本上是一样的。

    以太坊也是用一种memory hard mining puzzle,但是在设计上,跟莱特币有很大的不同

    以太坊用的是两个数据集,一大一小,小的是16M cache,大的数据集是一个1G dataset,DAG,这1G的数据集是从16M的cache生成出来的,为什么要设计成一大一小的两个数据集呢,就是为了便于验证,轻节点只要保存16M cache就行了,只有需要挖矿的矿工才需要保存1G的dataset。

    基本思想:
    小的数据集的生成方式跟前面讲的数组的生成方式是比较类似的,首先从一个种子节点seed,进行一些运算,算出数组的第一个元素,然后依次取哈希,第一个元素取哈希得到第二个元素,第二个元素取哈希得到第三个元素,这样从前往后,把这个数组从前往后,填充一些伪随机数得到一个cache,下面和莱特币就不一样了,莱特币是直接从数组当中按照伪随机数的顺序读取一些数,然后进行运算,以太坊是要先生成一个更大的数组,这里没有按比例画,就这个大数组应该比下面的小数组要大得多,下图看就大了一点,因为黑板画不下了,就意思意思,而且小的cache和大的dataset都是定期增长的,每隔一段时间,大小要增大,因为计算机的内存容量也是定期增长的,比如说这个大的dataset涨到了2.5G,就已经不是一个G了,那大的dataset是怎么生成的呢,他的每个元素小的cache里按照伪随机数的顺序读取一些元素,方法和刚才讲的莱特币里面求解puzzle的过程是类似的,比如说,第一次读取A位置的元素,读取完之后,对当前的哈希值进行一些更新迭代,算出下一个要读取的位置,比如说B这个位置,然后把B位置的数再进行一些哈希值的更新,算出C这个位置,那么从这个cache里面这么来回读,一共读256次,读256个数,最后算出来一个数放在大的dataset的第一个元素,然后第二个元素也是一样的,dataset的每个元素都是从这个cache里面按照伪随机数的顺序,不断进行迭代更新,最后得到一个值存在里面,然后求解puzzle的时候,用的是大数据集中的数,这个cache是不用的,按照伪随机数的顺序在大的数据集中读取128个数,就是一开始的时候根据区块的块头,包括里面的nonce值算出一个初始的哈希,根据这个哈希,映射到大数据集里面的某个位置,把这个数读取出来,然后进行一些运算,算出下一个要读取的位置,比如说又在大数据集里面的另一个位置,又把这个数读取出来,这里有一个区别:他每次读取的时候除了计算出这个元素的位置之外,还要把相邻元素也要读取出来,这个例子当中每次读取的时候是读取两个相邻元素,这样循环64次,每次读两个元素,所以一共是符合难度要求128个数,最后算出一个哈希值来,跟挖矿难度的目标域值比较是不是符合难度要求,如果不是,把block header 里面的nonce替换一下,换另外一个nonce,因为换了nonce之后,第一次算的那个哈希值就变了,然后重复这个过程,根据这个哈希值找到数组中的元素,读取两个相邻的元素,反复循环64次,再得到一个哈希值,然后再去比较。
    image-20210813211608230

    上面讲的比较抽象,下面是写的一个伪代码,没有直接用以太坊中的源代码,这个伪代码省略了源代码中的一些实现的细节,更有利于理解。


    ethash算法伪代码

    第一步首先生成16M cache,cache中每个元素都是64个字节的哈希值,生成的方法与莱特币类似,第一个元素是种子的哈希,就是这个seed的哈希,后面每个元素是前一个的哈希,这个哈希的内容每隔3万个区块会变化一次,这个seed每隔3万个区块会发生变化,然后重新生成cache中的内容,同时cache的容量要增加原始大小的1/128,也就是16M的1/128=128K。
    image-20210813211618636

    第二步是从这个cache生成1G的大数据集,这个函数的功能是通过cache来生成dataset中的第i个元素,基本思想是按照伪随机数的顺序读取cache中的256个数,每次读取的位置是由上一个位置的数值经过计算得到的,这里用的两个函数get_int_from_item和make_item,是自己定义的,源代码中是没有的,把源代码中一些相关的内容总结成了这两个函数,可以避免源代码中不是很重要的细节,这个get_int_from_item函数就是用当前算出来的哈希值求出下一个要读取的位置,然后make_item函数用cache中这个位置的数和当前的哈希值计算出下一个哈希值,这样迭代256轮,最后得到一个64字节的哈希值,作为大数据集中的第i个元素。

    image-20210813211633339

    这个calc_dataset是生成整个1G数据集的过程,就是不断调用前的函数来依次生成大数据集中的每个元素

    image-20210813211643556

    这一页的两个函数,分别是矿工用来挖矿的函数,和轻节点用来验证的函数,先看一下上面这个函数,这个矿工用来挖矿的函数,他有四个参数,header是当前要生成的区块的块头,以太坊和比特币一样,挖矿只用到块头的信息,这样设计的原因,是轻节点只下载块头,就可以验证这个区块是否符合挖矿的难度要求,第二个参数nonce就是当前尝试的nonce值,以太坊就像比特币一样,挖矿的时候,也是要尝试大量的nonce才能找到一个符合要求的,第三个参数full_size是大数据集中元素的个数,元素的个数每3万个区块会增加一次,增加原始大小的1/128也就是1G的1/128=8M,最后参数dataset就是前面生成的大数据集,挖矿的过程是这样的,首先根据块头的信息,和当前Nonce算出一个初始哈希值,然后要经过64轮的循环,每一轮循环读取大数据集中两个相邻的数,读取的位置是由当前哈希值计算出来的,然后再根据这个位置上的数值来更新当前的哈希值,这跟前面生成大数据集的方法是类似的,循环64次,最后返回一个哈希值,跟挖矿难度目标域值相比较。

    这里提个小问题,每次读取大数据集中两个相邻位置的哈希值,这两个哈希值有什么联系吗?

    其实是没有联系的,他们虽然位置相邻,但是生成的过程是独立的,每个都是由前面那个16M的cache中的256个数生成的,而且256个数的位置是按照伪随机数的顺序产生的,这个是构造大数据集的一个特点,每个元素独立生成,这才给轻节点的验证提供了方便,所以每次读取的相邻两个位置的哈希值是没有什么联系的。

    下面这个函数是轻节点用来验证的函数,也是有四个参数,但是含义跟上面那个矿工用的函数有所不同,轻节点不挖矿,当他收到某个矿工发的区块的时候,这里用来验证的函数的第一个参数header是这个区块的块头,第二参数是包含在这个块头里的Nonce,是发布这个区块的矿工选好的,轻节点的任务是验证这个nonce是否符合要求,验证用的是16M的cache,也就是最后的参数cache,注意,第三个参数full_size仍然是大数据集的元素个数,跟上面那个挖矿的那个full_size含义是一样的,并不是cache中的元素个数,验证的过程也是64轮循环,看上去与挖矿的过程类似,只有一个地方有区别,比较这一页的上下两个函数,有什么区别?

    每次需要从大数据集中读取元素的时候,因为轻节点没有保留大数据集,所以要从cache中重新生成其他地方的代码逻辑是一样的,每次从当前的哈希值算出要读取的元素的位置,这个位置是指在在大数据集中的位置,但是轻节点并没有这个大数据集,所以要从cache中生成大数据集中这个位置的元素,我们前面说过大数据集中每个元素都可以独立生成出来。
    image-20210813223417890

    最后这个函数,是矿工挖矿的主循环,其实是不断尝试nonce的过程,这里的target就是挖矿的难度目标,跟比特币类似,也是可以动态调整的,nonce的可能取值是从0-2的64次方,对每个nonce用前面讲的那个函数算出一个哈希值,看看是不是小于难度目标,如果不行的话,就再试下一个nonce。

    image-20210813223432497

    最后这一页是前面讲过的所有函数的一个汇总,同时解释了为什么轻节点可以只保存cache,而矿工要保存整个大数据集。其实轻节点做一次验证的计算量也不算少,同样要经过64轮循环,每次循环用到大数据集中的两个数,所以是128个数,每个数是从cache里的256个数计算得到的,跟比特币相比,以太坊中验证一个nonce的计算量要大很多,但是仍然在可以接受的范围内,相比之下,如果矿工每次都这么折腾的话,代价就太大了,因为要尝试的nonce就太多了。

    image-20210813223449656


    那以太坊设计的这个puzzle实际效果怎么样呢?

    到目前为止,以太坊挖矿主要还是以GPU为主,用ASIC矿机的很少,所以从这一点来说,他比莱特币来说要成功,起到了ASIC resistance的作用,这个跟以太坊的挖矿算法需要的大内存是很有关系的,这个挖矿算法就是ethash,这个起的很有意思,前三个字母eth是以太坊的代码,后面这个hash,h用了两遍,矿工挖矿需要1G的内存,跟莱特币的128K比,差了有八千多倍,即使是16M的cache跟128K比,也要大了一百多倍,所以这个差距是很大的,而且还是按照这两个数据集的最初的大小算的,因为定期会增长嘛,如果按照现在这个2.5G差距就更大了,以太坊没有出现ASIC矿机还有另外一个原因,以太坊从很早就计划要从工作量证明转移到权益证明,所谓的PoW->PoS(Proof of Stake),所谓的权益证明,就是按照所占的权益进行投票来形成共识,就不用挖矿了,权益证明是不挖矿,就类似于股份公司按照股票多少来进行投票,这个对于ASIC矿机的厂商来说是个威胁,因为ASIC芯片的研发周期是很长的,一款芯片从设计研发流片到最后生产出来,一年的周期就已经算是很快的了,而且研发的成本也很高,将来以太坊转入权益证明之后,就不挖矿,那些投入的研发费用就白费了,其实到目前为止,以太坊是基于工作量证明,以太坊很早就说要转入权益证明,但是转移的时间点一再往后推迟,到现在也没转过来,但是他不停的宣称要这么做,所以要想达到ASIC resistance一个简单的办法就是不断地吓唬大家:大家注意哦,下面要搞权益证明就不挖矿了,所以你就不要设计ASIC矿机了,你设计出来到时候也没用了,因为要设计一年嘛,一年以后,我们就不挖矿了。

    等过了一年,不行,还是得继续挖矿,那怎么办呢,再吓唬一次:我们真的再挖一年,然后就再也不挖了,所以你还是不要再设计了。

    从历史看,以太坊成为一个主流的加密货币,其实就是最近两年的事情(2018),以前市值很小的时候,没有人会去设计ASIC芯片,因为划不来啊,无利可图,等到市值上来之后呢,你这么吓唬他几次,就能起到ASIC resistance的作用,这也是另外一方面的原因。

    关于以太坊的挖矿还有一个要说明的

    以太坊中采用了预挖矿,叫pre-mining,所谓预挖矿并不是说真的去挖矿,而是说,在当初发行货币的时候,预留一部分货币给以太坊的开发者,有点像创业公司会留一部分股票给创始人和早期员工一样,将来这个加密货币成功了的话,这些预留的币就变得是很值钱了。

    像以太坊的早期开发者,现在就都很有钱,比北大教授要有钱多了,跟这个比特币相比呢,比特币就没有采用pre-mining的模式,所有的比特币都是挖出来的,只不过早期的时候,挖矿的难度,要容易的多,与pre-mining相关的一个概念叫pre-sale(就是把pre-mining预留的那些币通过出售的方法来换取一些资产用于加密货币的开发工作),有点类似于众筹,如果你看好这个加密货币的未来,可以在pre-sale的时候买入,将来这个加密货币成功之后呢,同样可以赚很大一笔钱

    下面看一下以太坊上的一些统计数据

    下面这个图显示了以太坊中货币供应量的分布情况,总共有大约一亿个以太币,每个以太币的市场价格是五百多美元,这里的数据是以前的,现在以太币的价格没有了解,整个以太坊的市值大概是五百多亿美元,下面这个图显示了这一亿的来源,绝大部分是通过pre-mining方法产生的,这个蓝色部分Genesis是指创世纪块中就已经包含了这些以太币,上线以后,再挖出来的以太币中Block Rewrad占了绝大多数,Uncle Reward就是前面讲的叔父区块得到的奖励只占很少一部分。有没有觉得毁三观,挖矿挖的再努力,关键还是不能输在起跑线上。
    image-20210813223510176

    下图显示的是最大的以太坊矿池所占的算力比重,可以看出挖矿集中化的程度也是很高的,尤其是最大的几个矿池所占的比例很高,与比特币的情况类似

    image-20210813223520824

    下图显示的是以太币的价格随时间变化的情况,可以看到在以太坊早期的那几年价格基本没怎么涨,真正的大涨是2017年,这一年的价格涨得非常猛,直到2018年初达到了顶峰,然后开始走下坡路,这个图显示的是以太坊的市值,叫Market Capitalization,这个跟价格的走势基本上是符合的

    image-20210813223534420

    下图显示的是以太坊HashRate的变化情况,HashRate是指系统中所有的矿工加在一起,每秒钟计算的哈希次数,可以看到HashRate从总体来说是处于上升趋势的,而且也是从2017年开始大幅度上升的,2018年以太币的价格下跌了不少,HashRate总体上趋于平稳,并没有出现明显的下降,不同的货币入宫采用的mining puzzle不一样的话,那么它们的HashRate是不可比的,比特币和以太坊的HashRate就不能直接比较,因为以太坊中尝试一个nonce的工作量要比比特币大得多。
    image-20210813223546195

    这篇文章讲的是挖矿的算法设计要尽可能让通用的设备也能参加,参加的人越多,挖矿的过程越民主,那么区块链就越安全,这也是为什么莱特币,以太坊要设计memory hard mining puzzle,但是也有一些人有不同的观点,认为让通用设备参加反而是不安全的,像比特币那样只能用专门的ASIC芯片挖矿才是更安全的,假设要对比特币系统发动攻击,需要投入大量资金买入ASIC矿机,才能聚集到发动攻击所需要的算力,而这些矿机除了挖矿之外,干不了别的任何事情,而且是为某一个加密货币设计的加密芯片,只能挖这一种加密货币,像比特币的ASIC芯片去挖莱特币就不行,所以呢,发动这个攻击的成本是很高的,早期需要投入大量的硬件资源,而且一旦攻击成功比特币系统的安全性被证明存在安全问题,大家对比特币的信心会大幅度下跌,然后比特币的价格也会跳水,这样早期投入的硬件成本就收不回来了,因为比特币本身就不值钱了,你买的那些比特币的矿机当然也不值钱了。相反如果让通用设别参与挖矿的话,发动攻击的成本就大幅度下降。所以有些人认为让通用设备参与挖矿是不安全的,让ASIC矿机一统天下才是安全的

    挖矿难度调整

    比特币是每隔2016个区块会调整一下挖矿难度,目的是维持出块时间在十分钟左右,以太坊是每个区块都有可能调整挖矿难度,调整的方法也比较复杂也改过好几个版本,网上的一些资料,像论坛,博客对这些介绍也有很多不一致的地方包括以太坊的黄皮书和实际代码也有一些出入,我们遵循以代码为准的原则,从以太坊的代码当中找到了这部分的内容,把他们总结了一个ppt。

    image-20210813224338610

    这是难度调整的公式,这里的H是指当前这个区块,Hi是这个区块的序号,D(H)是这个区块当前的难度,那么这个难度调整的公式有两部分,这个max括号里的是第一部分,管它叫基础部分,目的是为了维持出块时间大概在十五秒左右,后面跟的是第二部分,也称为难度炸弹,主要是为了向权益证明过渡,将来的以太坊想把共识机制从工作量证明逐步转入权益证明。

    第一部分调整的方法是在父区块的难度基础上,加上一些自调整的部分,这个P(H)就是红框里的父区块的难度

    所谓的父区块就是当前区块链的最后一个区块,对于我们正在挖的这个区块来说,他是这个区块的父区块。

    第一部分的难度调整有一个下限,就是这里的D0,131072,这一部分无论你去怎么调整,最小不能低于这个难度,这是为了保证挖矿有一个最低的难度。

    image-20210813224411745

    后面的红框里的就是难度炸弹部分

    image-20210813224423303

    先看一下第一部分,这个x是调整的力度,是父区块的难度除以2048,所以调整难度时,无论上调下调,都是按照这个力度的整数倍进行调整的,按照父区块的难度的1/2048作为调整的一个单位。

    image-20210813224433619

    下面那个奇怪的符号是y-后面的一项,奇怪符号的取值跟两个因素有关,一个是出块时间,另外一个是有没有叔父区块,就是父区块有没有叔父区块,那么为什么要跟叔父区块相关呢?
    因为如果是当前区块的最后一个区块,它包含有一个叔父区块的话,这个时候,系统中的货币总供应量是增加的,因为叔父区块要得到出块奖励,那么包含叔父区块的这个父区块也有得到一定的奖励,所以这两个合在一起就会使货币的总供应量增加,那么他为了维持系统中的总供应量的稳定,一种平衡,所以挖这个区块的难度就要提高一个单元,
    image-20210813224448052

    后面这个-99是说难度调整系数部分有一个下限,Max前面这部分有可能是正的,有可能是负的,如果是负的话,那么难度要往下调,最多一次性只能调整99个单元,每个单位是父区块难度的1/2048,所以一次性下调难度最多是99/2048,

    image-20210813224457860

    仔细看一下这个公式,这个y就是我们说的取决于有没有叔父区块,有叔父区块的话,y=2,没有叔父区块的话,y=1,那么不论是哪种情况,都是常数,所以都是常数减去后面这一项,但如果后面这一项比前面这个常数大的话,减出来是个负数,说明这个难度是要下调的。相反,如果后面那一项比前面那一项要小的话,减出来就是个正数,说明难度要上调。
    image-20210813224510962

    看几个具体的例子,这个Hs是当前区块的时间戳

    image-20210813224521461

    P(H)是父区块的时间戳,这两项相减,就是当前区块的出块间隔,这个出块间隔除以9,然后向下取整

    image-20210813224531182

    为什么要这么设计?

    比如说,我们当前这个区块的出块时间是在18s之间,这个时候,后面往下取整的那一部分算出来是0对吧,那么y-0=y,假设没有叔父区块,那么y是等于1的,那么这整个就是等于是1,说明这种情况下,难度要上调一个单位,这个也是可以的,因为我们希望保证稳定的出块时间是在15秒,现在的出块时间变成了18s,说明出块速度有点太快了,把难度上调一个单位维持下平衡。相反如果出块时间是在917s之间,后面是1,前面也是1,1-1=0,说明这个时候出块时间是符合要求的,希望是15s,他是917s之间,这个时候可以不用调,光考虑基础部分,不考虑难度炸弹的话,就是基本上可以不用调。最后一项,如果出块时间是在18~26s之间,那么后面那项算出来是2,变成了1-2=-1,说明难度要下调一个单位,如果出块时间更长呢,比26s更长,那么下调的幅度也会更大

    image-20210813224603500

    但是不要忘了,上面那个公式里max的第二项有一个-99,如果单次的出块时间非常非常长,你可能前面算出来是个负的很厉害的数,但是你一次性下调也不能超过99个单位,这是为了防止一些系统中出现的异常情况,像一些黑天鹅事件,正常情况下,不能出现这个幅度的下调,前面又讲完了第一部分,基础部分。

    image-20210813224618129

    下面讲难度炸弹,他的初衷是这样的,以太坊的共识机制要从工作量证明逐步转入权益证明,而权益证明是不挖矿的,这就带来一个问题,那些已经在挖矿设备上投入大量资金的矿工会不会联合起来抵制这个转换。比如说,我已经花了好多钱买这个矿机,现在被告知要搞权益证明了,那我这些挖矿设备都没用了,那我肯定有意见,所以以太坊就担心大家不愿意转入权益证明,本来从工作量证明转入权益证明就是要经过硬分叉来实现,相当于你改了这个共识协议了,如果因为这些挖矿设备有些人不原意转过来,造成社区的分裂,可能出现的情况是,以太坊可能出现两条平行的链,那怎么办呢,为了避免这种情况,所以以太坊在设计这个难度调整公式的时候就加了一个难度炸弹,看一下难度炸弹设计的特点

    当初设计这个难度炸弹的时候,没有第二行,没有减去三百万这一行,第一行直接用的就是Hi,当前区块的序号,没有Hi一撇这一项。

    当前的区块号除以10万,向下取整,然后作为2的指数,也就是说,难度炸弹这部分的取值,是从指数形式增长的,那么指数函数的特点是什么,早期的时候,以太坊刚刚上线不久的时候,区块号都比较小,所以难度炸弹这部分算出来的值是很小的,基本上可以忽略不计,那么难度调整主要还是由刚才讲完的第一部分,基础部分来决定的,或者是由系统中的出块时间来决定的,然而随着时间的推移,区块号变得越来越大,这个时候难度炸弹的威力开始显现出来,我们知道指数函数增长到后期,速度是非常恐怖的,所以当初设计的思想是等到这个难度炸弹的威力开始发挥出来的时候,也正是从以太坊需要从工作量证明转入权益证明的时候,那个时候因为挖矿变得越来越难了,所以大家也就原意转入权益证明了,因为如果不转的话,要挖出矿来,就太费劲了,这是当初设计以太坊时候的如意算盘,但实际情况,基于权益证明的共识机制实际设计出来有很多问题要解决,远远没有当初想象的那么顺利,这样造成的结果就是,转入权益证明的时间点被一再的推迟,然后出现的情况就是挖矿已经变得越来越难了,因为难度炸弹的威力已经显现出来了,但是大家还是得继续挖,因为没有别的方法可以达成共识。

    原来是担心大家不愿意转,现在变成了想转也没法转,因为权益证明的共识机制还没有开发出来,这个情况到2017年四五月份中旬的时候就已经很明显了,就出块时间已经逐渐开始增长了,原来是说要稳定在15秒,那个时候就不断的变成了从15秒不断地增加,从十五秒,十六秒,十七秒,最后增加到三十秒左右,而且如果不采取措施,还会继续增长上去,那怎么办呢

    以太坊最后在一个EIP当中,决定计算难度炸弹地时候,要把区块号,回退三百万个区块来计算,就这个公式中,把真实的区块号减去三百万,算出Hi一撇,这个可以看成是假的区块号,然后算难度炸弹的时候是用这个假的区块号算的。这个给权益证明的上限争取了一些时间。

    image-20210813224632142

    那么这样做的结果怎么样呢

    y轴是难度炸弹的取值,x轴是区块号,是以10万为单位,可以看到早期的时候,区块号比较小的时候,这个难度炸弹的作用是很不明显的,基本可以忽略不计,难度调整基本上是根据系统中的出块时间进行调整的,然后,这个图的前半部分是按照原来那个公式算的,就是在没有决定回调之间的原始公式算的,直接用正常的区块号算,大概是370万个区块左右,这个难度炸弹的威力开始指数上升,到上面这个尖峰,这个尖峰的位置就是以太坊决定回调这个难度炸弹的时候,减了三百万个区块,所以他一下就掉下来了,这个难度炸弹的取值一下就掉下来了,后面看上去好像是个平的直线,其实也是在增长,只不过是因为那个尖峰的位置太高了,所以看上去好像是直线,前面这个部分其实也是在增长,也是因为这个尖峰太高了,所以看不出来

    image-20210813224644811

    以太坊的发展被分成了四个阶段,Frontier,Homestead,Metropolis,Serenity,其中Metropolis又分为两个阶段,Byzantium和Constantinople,我们处于Byzantium阶段,难度炸弹的回调就是在Byzantium阶段进行的

    image-20210813224655092

    EIP:Ethereum Improvement Proposal,BIP:BitCoin Improvement Proposal

    在难度回调的同时,把出块奖励从五个以太币降到了三个以太币,因为如果不这么调的话,对于回调之前的矿工是不公平的,他这个回调是突然进行的,昨天挖矿的时候挖的很辛苦,得到的是五个以太币,结果今天一夜之间难度降低了,你挖矿也是得了五个以太币,那对我来说就不公平,而且从系统当中获益的总供应量来说要维护总供应量的稳定,现在变得是挖矿要容易了,所以就相应的把出块奖励减少一些,这里说明一点,比特币当中每隔一段时间出块奖励减半的做法在以太坊中是没有的,像这个把五个以太币降低三个就是一次性的,并不是说以后定期都这么做。

    image-20210813224705817

    下面看一下具体的代码实现

    这个是Byzantium阶段,挖矿难度调整的代码,输入时父区块的时间戳和父区块的难度,计算出当前挖的这个区块的难度,这里面的注释给出了难度计算公式,也是分成两部分,括号里面是第一部分是难度调整的基础部分,后面加上2的periodCount-2次方,这就是难度炸弹,基础部分是在parent_diff的基础上加上后面那一项,后面那一项就是前面这个难度调整的力度,parent_diff/2048乘以后面的系数,后面max的前面那一串就是前面ppt公式的那个y,如果有叔父区块是2,没有的话是1,减去后面这个就是出块间隔除以9向下取整,后面这个-99也是难度调整的下限。

    下面这几行代码,这个BigTime就是当前区块的时间戳,bigParentTime就是父区块的时间戳

    image-20210813224719207

    这一页的代码主要是计算基础部分的难度调整,第一行就是把当前时间戳减去父区块的时间戳算出出块时间,然后第二行除以9向下取整。

    下面这个if.else就是判断一下是不是有叔父区块,有的话,是用2减去前面这个数x,没有的话用1减去前面这个数x,然后接下来跟负的99相比,往下调有一个节限,不能比-99还要小,接下来算的是难度调整的力度,父区块的难度除以这个DifficultyBoundDivisor实际上就是2048,然后跟前面算出的系数相乘,加到父区块的难度上面去,基础部分的难度调整有一个下限,难度再小也不能小于那个D0,这个MinimumDifficulty就是那个D0,131072

    image-20210813224733827

    下一页就是难度炸弹的计算,fakeBlockNumber假的区块号就是前面讲的Hi一撇。下面这个if的判断跟2999999相比,比她大的话,就要减掉2999999,为什么不减3000000,前面的公式不是减三百万吗,其实是因为,这里判断的是父区块的序号,而我当前挖的这个区块,比父区块要多一个,所以按照父区块的序号算的话,就正好差一个

    image-20210813224748259

    下面看一下以太坊中实际统计情况

    这个就是以太坊中的难度统计

    显示的是以太坊中挖矿难度的变化曲线,可以看到在以太坊早期,挖矿难度的变化是不明显的,增长的是比较慢的,当时以太坊市值很小,谁也没有想到以太坊未来会成为一个主流的加密货币,从2017年开始,挖矿难度的增长就比较明显了,尤其是难度炸弹这一部分

    image-20210813224801321

    看到这一部分的曲线,看上去像是指数形状,到尖峰的位置就是以太坊决定回滚难度炸弹,回滚三百万个区块,所以挖矿难度一下就掉下来了,就好像从悬崖中掉下来了,之后又震荡一会,之后又逐步上升,2018年以太坊的挖矿难度已经恢复到了以前的水平,而且还略有些增加,从图上看出,目前以太坊的挖矿难度基本上是区域稳定的

    image-20210813224820584

    这个图显示的是出块时间,不考虑个别波动,总体来说,出块时间稳定在十五秒上下有了很长时间,说明以太坊在早期的时候,挖矿难度额调整主要是以稳定出块时间为主的,达到这个预期的效果,同样是在2017年中旬5,6月份的时候,出块时间出现了大幅度增长,就是这个难度炸弹的效应

    image-20210813224830674

    到这个地方,可以看到出块时间达到了 三十秒左右,然后是难度炸弹的回调,一下子断崖似的下降,又恢复到了十五秒,而且一直维持到现在,这个图跟前一个图对比,前一个图显示的是难度炸弹回调之后总的挖矿难度逐渐又恢复到了原来的水平,这个是因为挖矿变容易之后,有更多的矿工加入,竞争更激烈了,而我们这个图显示呢,从出块角度来讲并没有收到影响,出块时间一直到现在还算是维持的比较好的15秒左右

    image-20210813224842546

    最后这个图显示的之前看过的两个区块,讲GHOST协议的时候看过的两个区块

    image-20210813224851390

    主要看这两行

    Difficulty就是当前区块的难度,Total Difficulty是把当前这个区块所在的这条链上的所有区块的难度加在一起,也就是这条链的总难度,所以之前讲的最长合法链对于以太坊来说,其实应该叫做最难合法链,就是总难度最大额合法链,每个区块的难度,反应的是挖出这个区块所需要的工作量,而总难度最大,就是挖出这条链上的所有区块需要的总工作量最大,一般来说,靠后的区块,他挖出来需要的工作量也是比较大的

    image-20210813224902561

    展开全文
  • 2021最详细的以太坊挖矿教程第二弹

    千次阅读 2021-03-09 02:46:16
    如何组装一台以太坊(ETH)矿机 ** 设备清单 主板:专用控制卡 * 1 CPU:控制卡已集成 内存:DDR3L-1600 4G * 1 电源:矿机专用电源 * 1 硬盘:64G SSD (mSATA) * 1 拓展板:9卡拓展板 * 1 机箱:矿机专用机箱 * 1 ...

    在这里插入图片描述
    **

    如何组装一台以太坊(ETH)矿机

    **
    设备清单
    主板:专用控制卡 * 1
    CPU:控制卡已集成
    内存:DDR3L-1600 4G * 1
    电源:矿机专用电源 * 1
    硬盘:64G SSD (mSATA) * 1
    拓展板:9卡拓展板 * 1
    机箱:矿机专用机箱 * 1
    显卡:ETHCOIN RX570/RX470 V1.1 * 9
    控制卡

    首先,让我们来看一下控制卡,控制卡上集成了低功耗CPU,既减少了能耗又节约成本。
    在这里插入图片描述
    控制卡的背面有两个插槽,左侧稍长的是内存插槽,右侧的那个是mSATA接口。
    在这里插入图片描述
    在收到的矿机套件中找到内存,它长这个样子。
    在这里插入图片描述
    将内存插入内存插槽,内存是有方向的,不要“大力出奇迹”。
    注意要确保两侧的卡子正确卡在内存的缺口处。
    在这里插入图片描述
    然后拿出矿机套件中的SSD,它长这个样子。

    在这里插入图片描述
    把SSD插入右侧的mSATA接口,并拧上螺丝固定,这里只有图中右上角的一个螺丝需要拧上,不是少了一个螺丝哦,设计就是一个螺丝的。
    在这里插入图片描述
    完工后的控制卡如图。
    在这里插入图片描述
    机箱与风扇
    为了方便矿厂的迁移和提高稳定性,机箱是非常必要的。

    矿厂都是“逐水草而居”的,哪里电力便宜,就去哪里。

    没人想每次迁徙都要几天时间重新调试,或者频繁有矿机掉线吧,停机的每一秒可都是在损失真金白银。

    相比凌乱的矿架方案,机箱方案在散热和稳定性上,有着极大的优势。
    在这里插入图片描述
    专业矿机都配备了机箱,提供良好的风道以加强散热,提高稳定性,并便于搬运迁移。
    在这里插入图片描述

    找到矿机套件中的风扇套件,一套风扇套件由一个风扇、四个螺丝、一个网罩组成,一台矿机需要10套风扇套件。

    在这里插入图片描述

    风扇侧面有两个箭头,上面那个代表风扇的旋转方向,下面那个代表风扇的气流方向,是不是很人性化?再也不怕搞错方向了。

    在这里插入图片描述

    逐个安装好风扇,网罩在机箱外侧,确保两侧风扇气流方向一致。
    在这里插入图片描述

    如果你一侧风扇如上图安装,标贴朝外的话,那么另一侧的标贴就要朝机箱内,这样风向才是一致的。

    在这里插入图片描述
    使用串接线把风扇串接起来,包装中共有两跟串接线,每根可以串接5个风扇,一侧一根。
    在这里插入图片描述
    串接线的线头要留在机箱下部有开口的那一侧哦,等下拓展板上的风扇供电插口就在这里。
    在这里插入图片描述
    拓展板
    包装中最大的那块板子就是拓展板,上面共有10个PCIE插槽,说好的9卡,为什么有10个槽呢?先别急,等下你就知道了。
    在这里插入图片描述
    拓展板的安装要注意方向,拓展板上的那7个供电接口对齐机箱上的开口就说明方向正确了。
    在这里插入图片描述
    在矿机套件随附的螺丝包里找到如下图的带垫片的螺丝,共有12个。
    在这里插入图片描述
    拧紧螺丝。
    在这里插入图片描述
    在矿机套件中找到9条6pin电源线,就是下面这个东西。
    在这里插入图片描述

    一端连接在拓展板上,另一端未来连接显卡。这个电源线是没有方向的,哪头连接都行。
    在这里插入图片描述
    不要忘了把两条风扇串接线连接到拓展板上的插口,这两个插口是相同的,连接哪个都可以。
    在这里插入图片描述
    显卡
    矿机包装中共有9张显卡,就是下面这个。

    没有游戏卡那夸张的散热器,没有收智商税的信仰灯,专为挖矿而生的显卡是如此低调。

    钱要花在刀刃上,矿卡只追求稳定高效和经济性。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    整体组装
    在拓展板的一侧,有个插槽与众不同,带有一个白色的锁紧器。
    这个插槽不是用来连接显卡的,而是用来连接控制板的,现在知道为什么9卡拓展板会有10个插槽了吧。为了避免大家插错,这个插槽故意设计成有所区别的。然而,还是有朋友粗心大意,这个版本的机箱专门为此做出了改进,如果用这个插控制板的插槽连接显卡,显卡会被机箱挡住,插不进去。
    在这里插入图片描述
    把组装好的控制板插入插槽,并锁紧下面的锁紧器。
    在这里插入图片描述
    机箱外侧还有上下两个螺丝要拧紧。

    在这里插入图片描述
    把9张显卡上的6pin供电接口与电源线逐个连接好,并插入拓展板上的插槽。
    在这里插入图片描述
    拧紧显卡上的螺丝。

    在这里插入图片描述

    盖上机箱上盖,拧紧螺丝,完成组装。

    在这里插入图片描述

    电源
    想要高效稳定地挖矿,电源绝对不能马虎,矿机随附了专用的矿机电源。

    在这里插入图片描述

    这个电源只有一种6pin接口,共有10个,任选7个连接到矿机的供电接口即可。
    在这里插入图片描述

    矿机已经被配置成上电自动开挖,接通电源和网络,矿机将源源不断地为你挖掘电子币。
    这样一台矿机,挖掘以太坊(ETH)能够达到260M算力,功耗大约1.4KW。
    矿厂运行时,可以使用廉价的暴力风扇,在45度左右的环境温度下稳定工作。
    办公室、家庭等噪音敏感的区域,可以换装静音风扇,在30度以下的环境温度下几乎无声运行。
    经验
    由于控制卡控制着整个矿机的运行,最靠近控制卡的显卡的高温,很容易烘烤控制卡,造成控制卡死机。
    因此,通常实际运行中,最靠近控制卡的那个槽位,一般不会安装显卡。
    这样8卡的算力一般有234-235M左右,就非常稳定了。
    在这里插入图片描述
    最后,求大家关注,评论,收藏

    展开全文
  • 十八、以太坊挖矿算法 对于基于工作量证明的系统来说,挖矿是保障区块链安全的重要手段,有时候说Block chaim is secured by mining,比特币里面的挖矿算法总的来说是比较成功的,经受了时间的检验,到目前为止,...
  • 与比特币挖矿相比,以太坊挖矿的运营成本和能耗都比较低,但挖矿利润却一直高于比特币,这意味着只要抓住合适入场时机,就有可能获取较大利润空间。现在,第一梯队里的矿企仍在投入数以亿计的资金积极加...
  • 以太坊挖矿奖励机制研究 1. 目前ETH的奖励机制 目前ETH的区块分为两种,普通区块和叔块: 普通区块的奖励: 固定奖励3ETH 区块内包含所有程序的Gas花费 如果这个普通区块包含了叔块(最多两个叔块),则包含一个叔块...
  • 以太坊挖矿源码分析

    千次阅读 2018-06-05 20:45:29
    这篇开始研究以太坊挖矿流程,基本框架参见下图: 其中涉及到的组件之间的关系可以参见下面的UML图: 1. Miner启动打包 在eth Service初始化的时候,会创建一个Miner实例: eth.miner = ...
  • 以太坊挖矿软件配置

    千次阅读 2020-12-23 15:39:37
    关键词: 以太坊挖矿 挖矿软件配置 ETH挖矿软件配件在挖矿系统选择上,可以选择windows 或者Linux,我们以windows为例 。(如果想要超频的矿友建议使用Windows系统,因为它对驱动的支持全面,超频工具种类多)系统设置...
  • 以太坊“难度炸弹”是以太坊开发人员 2015 年嵌入的一段代码,通过逐步增加区块链挖矿难度,从而人为减慢以太坊发行速度。这一机制是为了使以太坊向权益证明机制算法的巨大转变而设计的。 在目前的工作量证明共识...
  • 以太坊(ETH)是什么?它是公链之王,有人说它可能会超越比特币(BTC),其应用非常广泛,在以太坊世界里挖矿可以得到奖励,那么怎么挖矿?一下是以太坊挖矿教程,相信看完教程后,你也能迅速的开始自己的挖矿之旅!我...
  • 以太坊挖矿的利润究竟有多大?

    万次阅读 2018-03-04 00:00:00
    编译 | 马晶慧责编 | 言则以太坊挖矿的利润究竟有多大?为了正确地回答这个问题,让我们从头说起:先假设一台挖矿设备,然后使用合理的数据,再经过实际分析,看看以太坊挖矿可以赚到多少钱。图片来源:VentureBeat...
  • 比特币挖矿和以太坊挖矿对比

    千次阅读 2018-08-27 14:39:30
    比特币挖矿采用的是“工作量证明”机制(PoW, Proof of Work)。这种机制在加密货币领域被广泛应用。矿工们“不停的工作”,通过一个名为哈希(hash)的特殊数学方程式进行打包交易,将一笔笔交易以密码学方式打包到...
  • 比特币以太坊 区块链以太坊挖矿原理 关于比特币和以太坊,熟悉区块链的朋友相比都不陌生。比特币是一种加密数字货币,可从别人手中购买或通过挖矿获得。通常是加入比特币矿池进行挖,2020年比特币第3次减产,之后...
  • 以太坊挖矿奖励规则

    千次阅读 2018-08-08 15:03:44
    但在以太坊网络中,由于出块时间短会有更多的叔块被挖出来,为了避免这种大量的无用功,以太坊制定了自己的挖矿奖励规则。 挖矿奖励分为三种: 1,区块奖励,每挖出一个区块奖励3eth。 2,叔块奖励,每引用一个叔...
  • 最近技术群中的朋友经常问到这样的问题,环境搭建已经搭建好,geth节点也成功启动,可为什么当执行miner.start()方法时却没有挖矿,返回null。 其实,不仅仅这些朋友,本人在启动最新节点进行挖矿的时候也遇到类似...
  • 以太坊GPU挖矿什么显卡好

    千次阅读 2021-04-15 14:51:05
    2、硬件支出 挖矿实际是性能的竞争、装备的竞争,有些挖矿机是更多这样的显卡阵列组成的,数十乃至过百的显卡一起来,硬体价格等各种成本本身就很高,挖矿存在相当大的支出。 3、货币安全 比特币的支取需要多达数百...
  • 以太坊挖矿前提

    2020-08-19 11:28:03
  • 比特币是每隔2016个区块会调整一下挖矿难度,目的是维持出块时间在十分钟左右,以太坊是每个区块都有可能调整挖矿难度,调整的方法也比较复杂也改过好几个版本,网上的一些资料,像论坛,博客对这些介绍也有很多不...
  • 使用Ubuntu系统进行以太坊挖矿

    千次阅读 2021-04-15 21:01:58
    进入以太坊挖矿地址 点击 Start Mining,显示四个不同的挖矿地址 矿池地址选择 us2.ethermine.org 软件版本选择 T-Rex0.19.14 cuda10稳定版本 使用命令 wgethttps://github....
  • 以太坊挖矿--谈谈挖矿圈子里的那些坑[纯干货]1.预期收益2.矿池抽成3.算力4.抽成返水 1.预期收益 纵观现在大量的以太坊矿池,绝大多数的挖矿模式都是PPS/PPS+. 这种每日相对稳定的收益模式也被大多数的矿工们所接受.相...
  • 以太坊挖矿算法

    千次阅读 2020-01-09 19:59:06
    为了抵制矿机,以太坊设计了一中memory hard mining puzzle,以太坊用了两个数据集,一个是16M的cache,一个是1G的dataset叫做DAG,DAG是从cache中生成,这样设计的目的是便于轻节点验证,轻节点只需要保存16M的...
  • 以太坊挖矿原理

    2018-04-10 21:14:13
    以太坊的共识机制是 PoW(Proof of Work 工作量证明机制),使用的算法是Ethash,这种算法是对 Dagger-Hashimoto算法的改良版本,流程大概如下1.对于每一个块,首先计算一个种子(seed),该种子只和当前块的信息有关;...
  • 在本周比特币和以太币接连突破新高的影响下,全球挖矿...Nvidia昨日发布的声明指出,公司将把即将上市的GeForce RTX 3060芯片算力(Hash Rate)限制在50%,减少以太坊矿工购买RTX 3060的动机,游戏主营业务优先,但是此
  • 以太坊挖矿的主要流程是由miner包负责的,下面是基本的一个架构: 首先外部是通过miner对象进行了操作,miner里面则是实用worker对象来实现挖矿的整体功能。miner决定着是否停止挖矿或者是否可以开始挖矿,同时还...
  • 周四,世界第二大加密货币以太坊很快将进行一次重大的软件升级,而此次升级将有可能提振以太坊的价格。以太坊「伦敦升级」已准备就绪,预计在区块高度12965000时激活,官方博客推算的时间为8月3日至5日之间,中文...
  • 以太坊启动挖矿却卡在这里不动时,很可能是创世区块没有正确初始化,需要检查一下genesis.json文件。
  • 安装以太坊源码,即安装Go Ethereum(安装Geth) 1、安装Golang 可以直接使用 yum 这个包管理器安装Golang yum install golang 2、下载以太坊源码(Go Ethereum) 首先下载geth源码go-ethereum,这里以go-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,587
精华内容 6,634
关键字:

以太坊挖矿什么