比特币矿池源码(以太坊矿池源码)

静香

比特币矿池源码(以太坊矿池源码)


比特币矿池有什么差别?


                
主要是获得的比特币分配模式不同:根据运营模式,常见的比特币矿池有如下几种:PPLNS、PPS、DGM、P2Pool等

      PPLNS:(最纯正的组队挖矿)全称Pay Per Last N Shares,意思是说“根据过去的N个股份来支付收益”,这意味着,所有的矿工一旦发现了一个区块,大家将根据每个人自己贡献的股份数量占比来分配区块中的货币。(share就是股份的意思)

  在PPLNS模式下,运气成份非常重要,如果矿池一天能够发现很多个区块,那么大家的分红也会非常多,如果矿池一天下来都没有能够发现区块,那么大家也就没有任何收益。

  PPS:Pay-Per-Share方式---该方式为立即为每一个share支付报酬。该支出来源于矿池现有的比特币资金,因此可以立即取现,而不用等待区块生成完毕或者确认。这样可以避免矿池运营者幕后操纵。这中方法减少了矿工的风险,但将风险转移给了矿池的运营者。运营者可以收取手续费来弥补这些风险可能造成的损失。

  为了解决PPLNS那种有时候收益很高,有时候没有收益的情况,PPS采用了新的算法。PPS根据你的算力在矿池中的占比,并估算了矿池每天可以获得的矿产,给你每天基本固定的收益。

  怎么样,有没有感觉这就是一个稳定的工作?实际上,PPS模式的矿池为了避免亏本风险,往往会收取7%-8%的高额手续费。

  DGM:Double Geometric Method. 双几何制. 结合了 PPLNS 和几何奖励类型, 使得矿池运营者能规避一部分风险. 矿池运营者在短期内收取部分挖出的货币, 然后在之後以正规化过的值返还给矿工,像电容充放电, 运气好每 blockquan 少给你点, 运气差多给你点。

  175btc:175btc的挖矿节点工作在类似比特币区块链的一种shares链上。由于没有中心,所以也不会受到DoS攻击。和其他现有的矿池技术都不一样---每个节点工作的区块,都包括支付给前期shares的所有者以及该节点自己的比特币。99%的奖励(50BTC+交易费用)会平均分给矿工,另外0.5%会奖励给生成区块的人。

比特币之家网有详细的介绍。

比特币矿池的协议stratum


                

转自: https://zhuanlan.zhihu.com/p/23558268
   getblockquantemplate协议诞生于2012年中叶,此时矿池已经出现。矿池采用getblockquantemplate协议与节点客户端交互,采用stratum协议与矿工交互,这是最典型的矿池搭建模式。

  

与getwork相比,getblockquantemplate协议最大的不同点是:getblockquantemplate协议让矿工自行构造区块。如此一来,节点和挖矿完全分离。对于getwork来说,区块链是黑暗的,getwork对区块链一无所知,他只知道修改data字段的4个字节。对于getblockquantemplate来说,整个区块链是透明的,getblockquantemplate掌握区块链上与挖矿有关的所有信息,包括待确认交易池,getblockquantemplate可以自己选择包含进区块的交易。

  

挖矿有两种方式,一种叫SOLO挖矿,另一种是去矿池挖矿。前文所述的在节点客户端直接启动CPU挖矿,以及依靠getwork+cgminer驱动显卡直接连接节点客户端挖矿,都是SOLO挖矿,SOLO好比自己独资买彩票,不轻易中奖,中奖则收益全部归自己所有。去矿池挖矿好比合买彩票,大家一起出钱,能买一堆彩票,中奖后按出资比率分配收益。理论上,矿机可以借助getblockquantemplate协议链接节点客户端SOLO挖矿,但其实早已没有矿工会那么做,在写这篇文章时,比特币全网算力1600P+,而当前最先进的矿机算力10T左右,如此算来,单台矿机SOLO挖到一个块的概率不到16万分之一,矿工(人)投入真金白银购买矿机、交付电费,不会做风险那么高的投资,显然投入矿池抱团挖矿以降低风险,获得稳定收益更加适合。因此矿池的出现是必然,也不可消除,无论是否破坏系统的去中心化原则。

  

矿池的核心工作是给矿工分配任务,统计工作量并分发收益。矿池将区块难度分成很多难度更小的任务下发给矿工计算,矿工完成一个任务后将工作量提交给矿池,叫提交一个share。假如全网区块难度要求Hash运算结果的前70个比特位都是0,那么矿池给矿工分配的任务可能只要求前30位是0(根据矿工算力调节),矿工完成指定难度任务后上交share,矿池再检测在满足前30位为0的基础上,看看是否碰巧前70位都是0。

  

矿池会根据每个矿工的算力情况分配不同难度的任务,矿池是如何判断矿工算力大小以分配合适的任务难度呢?调节思路和比特币区块难度一样,矿池需要借助矿工的share率,矿池希望给每个矿工分配的任务都足够让矿工运算一定时间,比如说1秒,如果矿工在一秒之内完成了几次任务,说明矿池当前给到的难度低了,需要调高,反之。如此下来,经过一段时间调节,矿池能给矿工分配合理难度,并计算出矿工的算力。

  

矿池通过getblockquantemplate协议与网络节点交互,以获得区块链的最新信息,通过stratum协议与矿工交互。此外,为了让之前用getwork协议挖矿的软件也可以连接到矿池挖矿,矿池一般也支持getwork协议,通过阶层挖矿代理机制实现(Stratum mining proxy)。须知在矿池刚出现时,显卡挖矿还是主力,getwork用起来非常方便,另外早期的FPGA矿机有些是用getwork实现的,stratum与矿池采用TCP方式通信,数据使用JSON封装格式。

  

先来说一下getblockquantemplate遗留下来的几个问题:

  

矿工驱动:在getblockquantemplate协议里,依然是由矿工主动通过HTTP方式调用RPC接口向节点申请挖矿数据,这就意味着,网络最新区块的变动无法及时告知矿工,造成算力损失。

  

数据负载:如上所述,如今正常的一次getblockquantemplate调用节点都会反馈回1.5M左右的数据,其中主要数据是交易列表,矿工与矿池需频繁交互数据,显然不能每次分配工作都要给矿工附带那么多信息。再者巨大的内存需求将大大影响矿机性能,增加成本。

  

Stratum协议彻底解决了以上问题。

  

Stratum协议采用主动分配任务的方式,也就是说,矿池任何时候都可以给矿工指派新任务,对于矿工来说,如果收到矿池指派的新任务,应立即无条件转向新任务;矿工也可以主动跟矿池申请新任务。

  

现在最核心的问题是如何让矿工获得更大的搜索空间,如果参照getwork协议,仅仅给矿工可以改变nNonce和nTime字段,则交互的数据量很少,但这点搜索空间肯定是不够的。想增加搜索空间,只能在hashMerkleroot下功夫,如果让矿工自己构造coinbase,那么搜索空间的问题将迎刃而解,但代价是必要要把区块包含的所有交易都交给矿工,矿工才能构造交易列表的Merkleroot,这对于矿工来说压力更大,对于矿池带宽要求也更高。

  

Stratum协议巧妙解决了这个问题,成功实现既可以给矿工增加足够的搜索空间,又只需要交互很少的数据量,这也是Stratum协议最具创新的地方。

  

再来回顾一下区块头的6个字段80字节,这个很关键,nVersion,nBits,hashPrevblockquan这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协议核心理念基本解析清楚,在getblockquantemplate协议和Stratum协议的配合下,矿池终于可以大声的对矿工说,让算力来的更猛烈些吧。


比特币矿池有哪些?国内外比特币矿池地址及端口汇总


                
目前全球有很多比特币矿池,想要挖比特币需要先选择一个矿池。选择一个稳定矿池是十分必要的。不然很有可能你辛辛苦苦挖出来的比特币会不翼而飞。爱比特中文矿池界面友好,拥有中文版用户界面,界面友好,稳定性强,个人觉得是很好的中文矿池。

我们都知道比特币矿池是一个组队挖矿的服务器,你想要挖矿就要加入一个稳...


                
世界上比特币70%的算力有中国提供,其中比较有名的是:
1、比特币中国
2、f2poll鱼池
……
不列举了。
每个人都可以组建矿池,只要你愿意,另外有人愿意加入。
注意如果没人加入,就只有你自己在这个矿池里和别人竞争,你的算力在全网恐怕沧海一粟都算不上,成功率太低。
所以一般的矿工都加入大矿池,不自己组建。

当然,如果你有实力,也可以自己组建矿池,这个资料是公开的,百度即可。谢谢。

什么是比特币矿池,哪些矿池比较厉害的?


                

挖矿,也许是比特币生态系统最重要的组成部分之一。矿工需要解决复杂的数学计算问题,从而保障交易的顺利执行。这些问题如此复杂,即使对于功能极其强大的计算机而言,这些问题也很难解决。计算机需要工作和运气来解决这些数学问题,就像矿工在地下挖矿一样。正确解决这一问题的几率,约为13万亿分之一。


比特币挖矿有两个目的。 首先,通过解决数学问题,比特币矿工可以验证交易信息,从而保障比特币支付网络的安全性和可靠性。矿工是确保交易准确且不会出现“双重支付”的人。


其次,当计算机解决了比特币网络上的这些复杂的数学问题时,系统会产生新的比特币,这与从地面开采黄金的过程类似。该奖励称为“区块奖励”,在称为“减半”的事件后,其数额会周期性的减少一半。新挖出的比特币的概念,是比特币协议的重要组成部分。矿工获取的比特币是全新的,在此之前从未流通。


由于矿工最终将出售该比特币,因此这也是供给和流动性的重要来源。正如Chainalysis报道的那样,许多数字货币交易所都依靠矿工来接收比特币,并增加交易所的流动性。通常,交易所从其他交易所获得约88%的比特币,而比特币矿工则是剩余百分比的最大来源。可以想象,因为要直接从矿工那里接收比特币,交易所之间存在激烈的竞争。


资料来源:Chainalysis


从在家挖矿到比特币产业农场


最初,比特币挖矿涉及许多在家中使用简单设备进行挖矿的个人。随着时间的流逝,矿工开始使用越来越好的设备。2013年,他们开始使用被称为专用集成电路(ASIC)的专门用于比特币挖矿的计算机。这种计算机功能强大且高效,目前,大多数(即使不是全部)挖矿都通过这种设备进行。实际上,如果使用普通台式计算机进行比特币挖矿,所需的能源成本可能会超过预期收入。


但是,即使能够获得合适的设备,与矿池(大型比特币挖矿公司联盟)相比,仍然相形见绌。比特币矿池现在占据市场的主导地位,少数池控制着大多数比特币的算力,而算力是对比特币网络处理能力的总体衡量。


在哪里进行比特币挖矿?


剑桥大学创建的比特币挖矿地图,显示了全球比特币算力的地理分布。乍看之下,比特币挖矿的分布似乎令人满意。



仔细观察后,我们发现平均月算力的70%实际上位于同一个国家,中国。



进一步放大地图,大多数挖矿活动仅在4个省中进行,前两个省份是新疆和四川,占中国所有比特币挖矿量的近一半。这些地区的电价便宜,且天气寒冷。这有助于在比特币挖矿的24/7运维期间,保持挖矿的利润和设备的凉爽。


但是对于数字货币发行来说,这并不是什么新鲜事。多年来,由于其廉价的电力和丰富的资源,中国一直是比特币矿工的主要市场。比特币网络的算力中占有很大比重的公司,如Bitmain,f2pool和Canaan都位于中国。


这属于消极的还是积极的信息,取决于你的观点。但是对于去中心化的,分布式的,无许可的网络而言,地理区域跨越多个实体对于整个生态系统而言更为健康。

更多交易所入口

一站式注册各大交易所、点击进入加密世界、永不失联,币安Binance/欧易OKX/GATE.IO芝麻开门/Bitget/抹茶MEXC/火币Huobi

点击进入 永不失联

目录[+]