比特币如何添加矿工 比特币怎么弄矿工
一、比特币矿池的协议stratum
转自:
getblocktemplate协议诞生于2012年中叶,此时矿池已经出现。矿池采用getblocktemplate协议与节点客户端交互,采用stratum协议与矿工交互,这是最典型的矿池搭建模式。
与getwork相比,getblocktemplate协议最大的不同点是:getblocktemplate协议让矿工自行构造区块。如此一来,节点和挖矿完全分离。对于getwork来说,区块链是黑暗的,getwork对区块链一无所知,他只知道修改data字段的4个字节。对于getblocktemplate来说,整个区块链是透明的,getblocktemplate掌握区块链上与挖矿有关的所有信息,包括待确认交易池,getblocktemplate可以自己选择包含进区块的交易。
挖矿有两种方式,一种叫SOLO挖矿,另一种是去矿池挖矿。前文所述的在节点客户端直接启动CPU挖矿,以及依靠getwork+cgminer驱动显卡直接连接节点客户端挖矿,都是SOLO挖矿,SOLO好比自己独资买彩票,不轻易中奖,中奖则收益全部归自己所有。去矿池挖矿好比合买彩票,大家一起出钱,能买一堆彩票,中奖后按出资比率分配收益。理论上,矿机可以借助getblocktemplate协议链接节点客户端SOLO挖矿,但其实早已没有矿工会那么做,在写这篇文章时,比特币全网算力1600P+,而当前最先进的矿机算力10T左右,如此算来,单台矿机SOLO挖到一个块的概率不到16万分之一,矿工(人)投入真金白银购买矿机、交付电费,不会做风险那么高的投资,显然投入矿池抱团挖矿以降低风险,获得稳定收益更加适合。因此矿池的出现是必然,也不可消除,无论是否破坏系统的去中心化原则。
矿池的核心工作是给矿工分配任务,统计工作量并分发收益。矿池将区块难度分成很多难度更小的任务下发给矿工计算,矿工完成一个任务后将工作量提交给矿池,叫提交一个share。假如全网区块难度要求Hash运算结果的前70个比特位都是0,那么矿池给矿工分配的任务可能只要求前30位是0(根据矿工算力调节),矿工完成指定难度任务后上交share,矿池再检测在满足前30位为0的基础上,看看是否碰巧前70位都是0。
矿池会根据每个矿工的算力情况分配不同难度的任务,矿池是如何判断矿工算力大小以分配合适的任务难度呢?调节思路和比特币区块难度一样,矿池需要借助矿工的share率,矿池希望给每个矿工分配的任务都足够让矿工运算一定时间,比如说1秒,如果矿工在一秒之内完成了几次任务,说明矿池当前给到的难度低了,需要调高,反之。如此下来,经过一段时间调节,矿池能给矿工分配合理难度,并计算出矿工的算力。
矿池通过getblocktemplate协议与网络节点交互,以获得区块链的最新信息,通过stratum协议与矿工交互。此外,为了让之前用getwork协议挖矿的软件也可以连接到矿池挖矿,矿池一般也支持getwork协议,通过阶层挖矿代理机制实现(Stratum mining proxy)。须知在矿池刚出现时,显卡挖矿还是主力,getwork用起来非常方便,另外早期的FPGA矿机有些是用getwork实现的,stratum与矿池采用TCP方式通信,数据使用JSON封装格式。
先来说一下getblocktemplate遗留下来的几个问题:
矿工驱动:在getblocktemplate协议里,依然是由矿工主动通过HTTP方式调用RPC接口向节点申请挖矿数据,这就意味着,网络最新区块的变动无法及时告知矿工,造成算力损失。
数据负载:如上所述,如今正常的一次getblocktemplate调用节点都会反馈回1.5M左右的数据,其中主要数据是交易列表,矿工与矿池需频繁交互数据,显然不能每次分配工作都要给矿工附带那么多信息。再者巨大的内存需求将大大影响矿机性能,增加成本。
Stratum协议彻底解决了以上问题。
Stratum协议采用主动分配任务的方式,也就是说,矿池任何时候都可以给矿工指派新任务,对于矿工来说,如果收到矿池指派的新任务,应立即无条件转向新任务;矿工也可以主动跟矿池申请新任务。
现在最核心的问题是如何让矿工获得更大的搜索空间,如果参照getwork协议,仅仅给矿工可以改变nNonce和nTime字段,则交互的数据量很少,但这点搜索空间肯定是不够的。想增加搜索空间,只能在hashMerkleroot下功夫,如果让矿工自己构造coinbase,那么搜索空间的问题将迎刃而解,但代价是必要要把区块包含的所有交易都交给矿工,矿工才能构造交易列表的Merkleroot,这对于矿工来说压力更大,对于矿池带宽要求也更高。
Stratum协议巧妙解决了这个问题,成功实现既可以给矿工增加足够的搜索空间,又只需要交互很少的数据量,这也是Stratum协议最具创新的地方。
再来回顾一下区块头的6个字段80字节,这个很关键,nVersion,nBits,hashPrevBlock这3个字段是固定的,nNonce,nTime这两个字段是矿工现在就可以改变的。增加搜索空间只能从hashMerkleroot下手,这个绕不过去。Stratum协议让矿工自己构造coinbase交易,coinbase的scriptSig字段有很多字节可以让矿工自由填充,而coinbase的改动意味着hashMerkleroot的改变。从coinbase构造hashMerkleroot无需全部交易,
如上图所示,假如区块将包含13笔交易,矿池先对这13笔交易进行处理,最后只要把图中的4个黑点(Hash值)交付给矿工,同时将构造coinbase需要的信息交付给矿工,矿工就可以自己构造hashMerkleroot(图中的绿点都是矿工自行计算获得,两两合并Hash时,规定下一个黑点代表的hash值总是放在右边)
。按照这种方式,假如区块包含N笔交易,矿池可以浓缩成log2(N)个hash值交付给矿工,这大大降低了矿池和矿工交互的数据量。
Stratum协议严格规定了矿工和矿池交互的接口数据结构和交互逻辑,具体如下:
1.矿工订阅任务
启动挖矿机器,使用mining.subscribe方法链接矿池
返回数据很重要,矿工需本地记录,在整个挖矿过程中都用到,其中:
Extranonce1,和 Extranonce2对于挖矿很重要,增加的搜索空间就在这里,现在,我们至少有了8个字节的搜索空间,即nNonce的4个字节,以及 Extranonce2的4个字节。
2.矿池授权
在矿池注册一个账号,添加矿工,矿池允许每个账号任意添加矿工数,并取不同名字以区分。矿工使用mining.authorize方法申请授权,只有被矿池授权的矿工才能收到矿池指派任务。
3.矿池分配任务
以上每个字段信息都是必不可少,其中:
有了以上信息,再加上之前拿到的Extranonce1和Extranonce2_size,就可以挖矿了。
4.挖矿
1)构造coinbase交易
用到的信息包括Coinb1, Extranonce1, Extranonce2_size以及Coinb2,构造很简单:
为啥可以这样,因为矿池帮矿工做了很多工作,矿池已经构建了coinbase交易,系列化后在指定位置分割成coinb1和coinb2,coinb1和coinb2包含指定信息,比如coinb1包含区块高度,coinb2包含了矿工的收益地址和收益额等信息,但是这些信息对于矿工来说无关紧要,矿工挖矿的地方只是Extranonce2的4个字节。另外Extranonce1是矿池写入区块的指定信息,一般来说,每个矿池会写入自己矿池的信息,比如矿池名字或者域名,我们就是根据这个信息统计每个矿池在全网的算力比重。
2)构建Merkleroot
利用coinbase和merkle_branch,按照上图方式构造hashMerkleroot字段。
3)构建区块头
填充余下的5个字段,现在,矿池可以在nNonce和Extranonce2里搜索进行挖矿,如果嫌搜索空间还不够,只要增加Extranonce2_size为多几个字节就可轻而易举解决。
5.矿工提交工作量
当矿工找到一个符合难度的shares时,提交给矿池,提交的信息量很少,都是必不可少的字段:
矿池拿到以上5个字段后,首先根据任务号ID找出之前分配任务前存储的信息(主要是构建的coinbase交易以及包含的交易列表等),然后重构区块,再验证shares难度,对于符合难度要求的shares,再检测是否符合全网难度。
6.矿池给矿工调节难度
矿池记录每个矿工的难度,并根据shares率不断调节以指定合适难度。矿池可以随时通过mining.set_difficulty方法给矿工发消息另其改变难度。
如上,Stratum协议核心理念基本解析清楚,在getblocktemplate协议和Stratum协议的配合下,矿池终于可以大声的对矿工说,让算力来的更猛烈些吧。
二、中国比特币矿工的新根据地:埃塞俄比亚
中国的比特币矿工近年来在全球范围内寻找新的根据地,以寻找电力成本低廉且对加密货币行业友好的地区。去年春天,这一趋势在非洲大陆找到了新的落脚点——埃塞俄比亚。随着货运集装箱出现在埃塞俄比亚复兴大坝附近的变电站,其中装载着高功率、高能耗的比特币矿机,标志着中国矿工们在经历了两年多的迁移后,终于找到了一个新家。
受到政治和经济环境的推动,中国的比特币矿工被吸引至电力成本低廉且对加密货币行业友好的国家,埃塞俄比亚便是其中之一。尽管埃塞俄比亚仍禁止加密货币交易,但自2022年起允许比特币挖矿,并在过去十年中与中国加强了合作关系,多家中国公司参与了价值48亿美元大坝的建设。矿工们计划从这些大坝中获取电力。
对于中国矿工而言,埃塞俄比亚成为了一个难得的机会。气候变化和电力短缺导致其他地区对加密货币挖矿的抵制加剧,而埃塞俄比亚的电力成本相对较低,对于矿工们具有吸引力。此外,埃塞俄比亚与中国公司有着特殊的历史联系,这使得中国矿工对这个国家产生了特殊兴趣。
2021年,中国政府禁止了比特币挖矿,导致大量矿工离开中国。然而,对于中国矿工和埃塞俄比亚而言,这是一场风险与机遇并存的赌博。其他国家,如哈萨克斯坦和伊朗,曾一度接纳比特币挖矿,但因能源使用可能引发国内不满而转向其他领域。埃塞俄比亚虽然面临近一半人口无法获得电力的挑战,但其加密货币挖矿在政府看来是一个潜在的外汇收入来源。
加密货币挖矿服务提供商Luxor Technology估计,埃塞俄比亚已成为全球最大的比特币矿机接收国之一。埃塞俄比亚国家电力公司已与21家比特币矿工达成供电协议,其中19家来自中国。中国数字矿业协会创始人Nuo Xu认为,埃塞俄比亚将成为最受中国矿工欢迎的目的地之一。
比特币矿工愿意将价值数千万美元的设备运送到一个刚刚从内战中崛起的国家,这表明他们面临着严峻的政治和经济环境。比特币矿机需要大量电力,因此获得廉价电力是矿工们的主要竞争优势之一。剑桥大学替代金融中心估计,2023年比特币挖矿消耗了121万亿瓦时的电力,与阿根廷的电力使用量相当。
哈萨克斯坦的一个比特币矿场。对丰富电力的依赖也是一个主要弱点,因为它可能使矿工与工厂和家庭争夺电力,从而使他们面临政治抵制。然而,比特币矿工仍然愿意冒险,尤其是在寻求稳定和低廉电力的背景下。
埃塞俄比亚信息网络安全管理局副局长Yodahe A. Zemichael表示,政府允许比特币挖矿主要是因为这些公司用外币支付消耗的电力,而非直接交易加密货币。政府通过一项指令来监管包括挖矿在内的加密货币产品,许可证的发放正在沙盒环境中进行,但具体细节尚未公开。
比特币矿工对当局的长期监管措施保持怀疑态度。尽管如此,埃塞俄比亚对于比特币矿工,尤其是中国矿工而言,代表着经济和政治优势的独特结合。一些高管甚至将埃塞俄比亚视为德克萨斯州的潜在竞争对手,后者在全球比特币算力中占约四分之一份额。
埃塞俄比亚电力公司表示,一旦复兴大坝项目全面竣工,该国的发电能力将增加一倍。公司为比特币矿工提供了每千瓦时3.14美分的固定费率。尽管这与德克萨斯州的平均水平相似,但德克萨斯州的电价波动较大,使得利润难以预测。在埃塞俄比亚,一旦矿工直接连接到发电厂,价格会有所下降。
在地缘政治的支持下,中国成为埃塞俄比亚最大的外商直接投资来源国和双边债权国。中国为埃塞俄比亚提供了大量贷款,用于70个大型项目,总额接近150亿美元。
比特币矿工面临着全球气候变暖的挑战,尽管他们声称越来越多地利用清洁能源,但比特币挖矿仍被视为全球变暖的一个因素。联合国去年10月发布的一项研究估计,2020年至2021年期间,比特币挖矿所用电力的三分之二使用化石燃料。
然而,埃塞俄比亚的电力资源为比特币矿工提供了独特优势。比特大陆的高管表示,埃塞俄比亚的电力供应能力可能在几年内与德克萨斯州相媲美。理想的是,挖矿的温度范围在5至25摄氏度之间,这与埃塞俄比亚的平均气温相符。这种气候条件和丰富的电力资源使得埃塞俄比亚成为矿工们的新选择。
面对风险与机遇并存的市场环境,比特币矿工在寻找新的根据地时需要权衡各种因素,包括电力成本、政治稳定性和环境保护。埃塞俄比亚作为新兴的比特币矿场目的地,展示了在全球范围内寻求经济和政治优势的独特路径。
三、比特币是如何产生的
比特币是通过计算机进行复杂的数学运算来验证交易的合法性,并获得相应数量的比特币作为奖励的过程产生的。这一过程被称为“挖矿”。
挖矿是一种计算过程,矿工需要使用计算能力来解决复杂的数学问题。这些数学问题是通过SHA-256哈希算法生成的,该算法保证了问题的复杂性和安全性。为了挖到比特币,矿工需要在比特币网络中拥有足够的计算资源,通过不断尝试将新的区块加入比特币网络来获得比特币奖励。具体来说,矿工需要利用计算机硬件进行哈希运算,以找到一个符合比特币网络要求的哈希值。这个哈希值必须满足一定的条件,比如前n位必须是0,而这个条件的难度会定期自动调整,以保持整个网络约每10分钟得到一个合格答案的速度。一旦找到符合条件的哈希值,矿工就可以将这个新区块添加到比特币的区块链上,并获得一定数量的比特币作为奖励。
比特币的产生不仅依赖于矿工的计算能力,还依赖于整个比特币网络的安全性和去中心化的特性。每个新的区块都包含了前一个区块的哈希值,形成了一条不可篡改的链条,即区块链。这种机制保证了比特币交易的安全性和可靠性。
值得注意的是,比特币的供应量是有限的,总量被限制在2100万枚。随着时间的推移,挖到新比特币的难度会逐渐增加,需要投入更多的计算资源和能源。这是比特币网络设定的一种自动调节机制,以确保比特币的稳定产生和流通。同时,由于比特币的去中心化和匿名性特点,它也成为了一种备受欢迎的数字货币,引领了数字货币领域的全新发展。
四、比特币挖矿如何提高效率
目前全网P2POOL节点矿池的算力是20T左右,但是实际利用率仅有10-15T算力,浪费了很多算力。
全网的算力以及出块情况在这里看
算力被浪费了很多,造成这个原因还的从P2POOL矿池的结构说起,P2POOL节点矿池会根据工人挖矿设备的算力自动调节矿池的难度,而这个过程是相当快的,几分钟就会调整一次难度,导致挖矿的设备很容易报错,就是产生大量的R,效率降低。而P2POOL矿池是PPLNS模式,需要提交一个有效的SHARE,才会有有收益,提交有效SHARE后,24小时内产生的块你都可以分到。有效SHARE的难度比较大,在我的池子里反应出来的是1G的算力根本挖不到有效SHARE。
如何提高P2POOL矿池的效率呢?
1.首先作为节点矿池,矿池建设的本身需要添加节点文件,显示在比特币钱包下方的连接数,增加节点后连接数能达到几十个连接甚至更多,要看你添加的节点有多少,有效减少无效的SHARE。
2.矿工需要固定挖矿设备的算力难度,要怎么做呢?在你的挖矿设备启动bat里面设置即可。
比如你的单个挖矿设备是10G,你就在bat文件里,用户名(既钱包地址)后面加
/1000+10。比如我的bat里
-u
1HxUFVoswKShdH6WP931TRvsRgsWuEo5XN/1000+10
-p
1,这是什么意思呢?意思就是说你的这个设备是10G算力,你在P2POOL矿池挖矿使用固定难度10G的难度。如果你是1G的设备就在后面写/1000+1,这样难度就固定了,有效提高了设备效率。