// 东西好多,未完待续,I will have my word.
本文主要叙述了目前主流的比特币矿池协议,目前比特币矿池主要分为两种类型:托管矿池和P2P矿池
大部分矿池是托管的,意思是有一个公司或者个人经营一个矿池服务器。矿池服务器的所有者叫矿池管理员,同时他从矿工的收入中收取一个百分比的费用
矿池服务器运行专业软件以及协调池中矿工们活动的矿池采矿协议。矿池服务器同时也连接到一个或更多比特币完全节点并直接访问一个块链数据库的完整副本。
这使得矿池服务器可以代替矿池中的矿工验证区块和交易,缓解他们运行一个完整节点的负担。对于池中的矿工,这是一个重要的考量,因为一个完整节点要求一个拥有最少116G以上(见下图)的永久存储和最小2GB内存(RAM)(这配置只是理论上,现在上玩不动的)。此外运行一个完整节点的比特币软件需要监控、维护和频繁升级。由于缺乏维护或资源导致的任何宕机都会伤害到矿工的利润。对很多矿工来说,不需要跑一个完整节点就能采矿,也是加入托管矿池的一大好处。
矿工连接到矿池服务器使用一个采矿协议比如Stratum (STM)或者GetBlockTemplate (GBT)。一个旧标准GetWork (GWK)自从2012年底已经基本上过时了,因为它不支持在hash速度超过4GH/S时采矿。STM和GBT协议都创建包含候选区块头模块的区块模板。矿池服务器通过聚集交易,添加coinbase交易 (和额外的随机值空间),计算Merkle根,并连接到上一个块hash来建立一个候选区块。这个时候候选区块的头部作为模板分发给每个矿工。矿工用这个区块模板在低于比特币网络的难度下采矿,并发送成功的结果返回矿池服务器赚取份额。
矿工获得任务,并对任务中的数据每4字节解码成大端模式。
矿工解析自己工作的部分,其实就是nonce值的位置