转自: https://zhuanlan.hu.com/p/23558268
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协议的配合下,矿池终于可以大声的对矿工说,让算力来的更猛烈些吧。
❷ 购买的T数等于算力大小么为什么需要有效算力持续增长
购买的T数实际上是获得的有效算力的最大上限值,但不意味着买入即获得有效算力。假设你购买100T,有效算力会从0开始线性增长,收益也会随着线性增加。如果封装了50T的数据,表明你当前的算力为50T,而非100T。
全网的有效处理持续增长,如果节点的有效处理不增长,所占比相对就会越来越小,所分得的收益只会越来越少。举个例子:假设节点A平均每天的有效处理增长为1T,节点B平均每天的有效处理增长为3T,到了第10天,A的有效处理为10T,B的有效处理为30T,而全网总的有效处理为200T,则两者的收益:
A可以拿到10T/200T,即全网收益的1/20
B可以拿到30T/200T,即全网收益的3/20
❸ 区块链中什么是矿池(区块链中什么是矿池的)
什么是矿池矿场?在全网算力提升到了一定程度后,单台机器挖到块的概率变得非常的低。这种现象的发展,促使一些“bitcointalk”上的极客开发出一种可以将少量算力合并联合运作的方法,使用这种方式建立的网站便被称作“矿池”(MiningPool)。
?
矿池的收益分配主要有:PPLNS、PPS、PROP三种形式。
?
所谓的比特币矿场就是建造一个工厂,将数十台、数千台采矿机器放在一起进行数学运算和挖掘比特币。这涉及电力消耗问题。一个矿场的成本包含:建设成本、设备成本、维护成本网络成本、还有其他成本。
矿场跟矿池有什么区别?矿场跟矿池都分不清楚,千万别进场挖矿,容易被宰。总的来说,矿场就是人们为了管理方便,选择一个电费比较低廉的地方,例如作为消纳区的四川,将许多矿机放在一起进行挖矿,这个地方就是矿场。而矿池的话,实际上就是一个网络平台,它是将不同空间的矿机的算力有机结合,然后进行挖矿,提高挖矿效率,届时挖矿得到的收益也会按一定的分配机制分配收益。要是还是不懂,那就找一个专门挖矿的矿企详细问问,世链矿业就不错,他们家在海外诸多地区都有矿场的,例如美国、俄罗斯等,网络了解清楚了再入场??
什么是矿池?矿池是一个组队挖矿的服务器。比特币每10分钟产生一个区块,会有千万人竞争,而这个区块最终只归1个人所有,其它人都颗粒无收。你也许要挖5年才能获得一个区块。组队挖矿就是,一旦队伍里任何人获得了一个区块,就将区块中的货币按大家的性能分给大家,这样大家就能很快地获得比特币。
比特币矿池:什么是比特币矿池矿池是比特币(数字货币)等P2P密码学虚拟货币开采所必须的基础设施,一般是对外开放的团队开采服务器,其存在意义为提升比特币开采稳定性,使矿工薪酬趋于稳定。目前全球算力较大的矿池有鱼池(F2Pool)、蚁池(AntPool)、币网(BWPool)、国池(BTCCPool)、BitFury。除了BitFury,其余都来自中国。
随着参与挖矿的人数越来越多,比特币全网的算力不断上涨,单个设备或少量的算力都很难再挖到比特币。这时候,矿池诞生了。
比特币矿池运作原理
矿池突破地理位置的限制,将分散在全球的矿工及矿场的算力进行联结,一起挖矿。
矿池负责信息打包,接入进来的矿场负责竞争记账权。
由于集合了很多矿工的算力,所以矿池的算力占比大,挖到比特币的概率更高。
举例
假设100万人参与比特币挖矿,全网400P算力,其中90%的矿工为1P(1000T)以下的算力,如果投入一台1T矿机,将占全网算力的40万分之1,理论上平均每40万个10分钟能挖到一个区块,也就是7.6年才能挖到一个区块然后一次性拿到50个比特币。
那么,假如我再找9个拥有1T算力矿机的矿工,达成协定,我们总共10个人,其中任何一个人挖到区块,都按照每人的算力占比来进行平分,那么我们就是一个整体,总共10T算力,那么平均0.76年即可挖到一个区块,然后算下来到我们手上的就是0.76年开采到5个比特币,如果组织100人、1000人、1万人甚至10万人呢?
如果是10万人,那么平均100分钟就能挖到1个区块,作为团队的一份子,我的收入将会趋于稳定。
这就是矿池的基本原理,即大家组队进行比特币开采,可以参考彩票中的合买。
当然,以上只是对矿池的基本原理和性质进行简单的描述,实际情况会非常复杂。
矿池是一个全自动的开采平台,即矿机接入矿池——提供算力——获得收益。
矿池挖矿所产生的比特币奖励会按照每个矿工贡献算力的占比进行分配。
相较单独挖矿,加入矿池可以获得更加稳定的收益。
希望这个回答对你有帮助
❹ MiningCity鏄浠涔堬紵BTCV鎬庝箞鎸栵紵
涓銆佷粈涔堟槸MiningCity锛
MiningCity鏄涓椤瑰¤锛屾棬鍦ㄥ皢閭d簺甯屾湜鍥㈢粨鑷宸辩殑鍔涢噺澧炲姞寮閲嘼tc姣旂壒甯/btcv姣旂壒甯佷繚闄╁簱鏈轰細鐨勪汉浠鑱氶泦鍦ㄤ竴璧枫侻iningCity鑷村姏浜庢墦閫犲叏鐞冩渶澶т簯绠楀姏鐭夸笟鍩庯紝鐩存帴璐涔癕C鎺橀噾涔嬪煄浜戠畻鍔涙寲鐭跨渷鏃剁渷鍔涚渷蹇
闅忕潃MC鐭夸笟鍩庡競鍙戝睍澹澶э紝Mining City 鐭挎睜宸插湪 BTC.com 鍜 Blockchain.com 涓婃帹鍑猴紝杩欐槸涓氬唴涓や釜鏈鍙椾俊浠诲拰閫忔槑鐨勭綉绔欍俠tcv_瀵规帴_a788796
浜屻佷粈涔堟槸浜戠畻鍔涙寲鐭匡紵
浜戠畻鍔涚敱澶у瀷鐭垮満鎻愪緵绠楀姏璐涔版湇鍔★紝鐢ㄦ埛鍙浠ラ氳繃璐涔扮畻鍔涘悎绾︼紝璧氬彇鐩稿簲绠楀姏鎵鎸栫殑甯佺嶏紝鑳藉熷厤闄や釜浜烘寲鐭挎墍甯︽潵鐨勭熆鍦哄缓璁俱佺熆鏈鸿剧疆銆佹寲鐭垮櫔闊崇瓑绻佺悙鐨勬ラわ紝鍙闇鍦ㄥ钩鍙拌よ喘浜戠畻鍔涘悎绾︼紝鍗冲彲瀹炴椂寮鍚姣旂壒甯佺瓑鐭垮竵鎸栫熆銆
浜戠畻鍔涚殑浼樺娍鏄锛
1.鎸栫熆鐢佃垂姣旇嚜鐢ㄧ數渚垮疁
浜戠畻鍔涚殑鐢佃垂鍥犱负鏄澶у瀷鐭垮満鎸栫熆锛屽浗鍐呭崟浣嶇數浠蜂竴鑸鍦0.35-0.42鍏冨乏鍙筹紝瀹剁敤鐢电殑0.8鍏冧互涓婏紱MiningCity鍝堣惃鍏嬫柉鍧︾熆鍦虹敤鐢靛潎浠蜂竴姣涘氫竴搴︼紱鐩稿瑰崟浣嶇敤鐢典究瀹3鍊嶏紝鍗犳嵁浜嗚緝澶х殑浼樺娍锛
2.瀵规瘮鑷鎸栫熆锛屼簯绠楀姏鏀剁泭鏇寸ǔ瀹
浜戠畻鍔涚殑鏀剁泭鍙戞斁姣忓ぉ閮戒細鎸塒PS鏀剁泭瀹氭椂缁欎粯锛岃繖鏈熼棿浣犳棤闇鎷呭績鍗曚竴鐭挎満闂棰樹互鍙婂仠鐢电瓑鍏朵粬鍋滄満椋庨櫓閫犳垚鐨勬敹鐩婃崯澶憋紝鎵浠ヤ簯绠楀姏鐨勬敹鐩婂规瘮浼犵粺鎸栫熆鏂瑰紡锛屾敹鐩婅佺ǔ瀹氱殑澶氾紱
3锛氭棤闇鑷宸辨搷浣滄寲鐭匡紝鐭挎満鏃犻渶缁存姢锛屽潗浜琚鍔ㄦ敹鍏
鎸栫熆鐭挎満鏄24灏忔椂婊¤礋鑽疯繍琛岋紝鑷鎸栫熆寰堝规槗鍙楀埌绠楀姏鏉挎崯鍧忋佺熆鏈轰腑姣掋佺數鍔涙晠闅滅瓑浼犵粺鐭垮伐鏈澶寸棝鐨勭熆鏈虹淮鎶ら棶棰樸備簯绠楀姏鎸栫熆鐨勮瘽锛岃繖浜涘氨鏃犻渶鎷呭績锛屽洜涓轰綘涔扮殑鍙鏄绠楀姏鍚堢害鏀剁泭锛屽叾浠栭棶棰樻偍閮芥棤闇鎷呭績銆
MiningCity涓瀹剁姽澶浜虹殑鐭垮満锛屾寲涓や釜甯侊紝涓鏄痓tc姣旂壒甯侊紝涓鏄痓tcV姣旂壒甯佷繚闄╁簱锛堝牚姣10骞村墠鐨勬瘮鐗瑰竵閲囩熆鑹鏈猴紝鑷2019.12.21锛1涓婄嚎娑ㄥ箙20鍊嶏級2020鏁璇锋妸鎻
涓夈佷粈涔堟槸BTCV姣旂壒甯佷繚闄╁簱锛
閫氳繃寮哄寲鐨勯槻鐩楁妧鏈鎴愪负浠峰艰串钘忕殑鎵嬫点傦紙浣跨敤涓変釜瀵嗛挜鍙纭淇24灏忔椂鍐呭嶅師鍙鑳界殑浜ゆ槗锛屼笁涓瀵嗛挜鍒嗗埆涓猴細鏃ュ父璁块棶鐨勫瘑閽ャ佹仮澶嶄氦鏄撶殑瀵嗛挜銆佹彁鍗囦氦鏄撻熷害鐨勫瘑閽ワ級涓庢瘮鐗瑰竵瀹屽叏鐩稿悓锛孊TCV鐨勬绘暟閲忎负 21,000,000 鏋氥
濡傚浘绀猴細鑷20191217鍒涗笘鍖哄潡涔嬪悗鐨4骞村崐鏄鎸栫熆绾㈠埄鏈
锛堝傚浘绀猴細鑷20191217鍒涗笘鍖哄潡涔嬪悗鐨4骞村崐鏄鎸栫熆绾㈠埄鏈燂級
鐪熷疄瀹炰綋鐭挎満绠楀姏鍚堢害鎸栫熆锛24灏忔椂鎸栫熆鍙瀹炲湴鑰冨療锛涗竴娆℃姇璧勬寲鐭夸笁骞达紱澶╁ぉ鎻愰噾搴揵tcv
🉑鍚屾椂鍙戣捣澶氱瑪鎻愮幇
🉑姣忓ぉ鎻愮幇N娆
🉑0.0001btc璧
🉑鍒拌处鐏板父蹇
🉑骞冲彴0鍏嬫墸
鍥涖丅TCV鎬庝箞鎸栵紵鏀剁泭鎬庝箞鏍
渚濅釜浜洪庨櫓鍠滃ソ锛宐tc涓巄tcv🉑浠ユ寲涓绉嶏紝涔熷彲浠ヤ袱涓涓骞舵寲
鐨嗗洓涓閰嶅(鎴栧叾鏁存暟鍊) 瀵瑰簲绠楀姏(绠楀姏瓒婂ぇ鎸栧竵瓒婂)
500锛1000锛2000锛3500锛 5TH 10TH 20TH 35TH
⚒MiningCity鍥涚岯TCV鎸栫熆鍚堢害锛屼换鍚涢夋嫨
500缇庨噾(3550鍏)锛5T绠楀姏锛屾瘡澶╂寲0.1涓猙tcv锛屼笁骞存寲110涓猙tcv锛
1000缇庨噾(7100鍏)锛10T绠楀姏锛屾瘡澶╂寲0.2涓猙tcv锛屼笁骞存寲220涓猙tcv锛
2000缇庨噾(14200鍏)锛20T绠楀姏锛屾瘡澶╂寲0.4涓猙tcv锛屼笁骞存寲440涓猙tcv锛
3500缇庨噾(24850鍏)锛35T绠楀姏锛屾瘡澶╂寲0.7涓猙tcv锛屼笁骞存寲770涓猙tcv锛
姣忎唤鍚堢害鍙浠ユ寲3骞达紒鍙浠ヨよ喘澶氫唤锛岀畻鍔涜秺澶ф寲甯佽秺澶氾紒
涓夊勾鍐呮瘮鐗瑰竵淇濋櫓搴撲环鏍间笉鍙橈紝鍒╂鼎4鍊嶃
涓夊勾鍐呮瘮鐗瑰竵淇濋櫓搴撲环鏍兼定5鍊嶏紝鍒╂鼎20鍊嶃
涓夊勾鍐呮瘮鐗瑰竵淇濋櫓搴撲环鏍兼定10鍊嶏紝鍒╂鼎40鍊嶃
褰撶劧锛屾偍涔熷彲浠ラ夋嫨璁よ喘BTC姣旂壒甯侀噰鐭垮悎绾︺傞壌浜庢枃绔犵瘒骞咃紝鏈鏂囦笉鍐嶈禈杩般