stratumbtctop8888
『壹』 挖矿协议stratum
Stratum 协议于2012年底开发,专为扩展支持矿池挖矿而设计,取代了过时的getwork协议。其最初在Slush's pool's网站公布,随后BTCGuild提供了备忘单形式的文档。
在Stratum挖矿过程中,矿机使用subscribe方法连接矿池。连接后,矿机记录矿池返回的数据,包括用于设置难度值、发送任务、Extranonce1和Extranonce2等信息。Extranonce1和Extranonce2用于增加搜索空间,是挖矿的关键元素。
矿机接着使用authorize方法向矿池授权,注册账号并添加矿工,矿池允许每个账号添加任意数量的矿工,并分配钱包地址用于收益分配。某些矿池如F2Pool允许直接使用钱包地址挖矿,此时授权时不需注册账号。
矿池通过notify方法分配任务给矿机。任务包括任务号ID、前一个区块的HASH值、coinbase、merkle_branch、区块版本号、当前难度、当前时间戳、以及一个清除工作标志。有了这些信息和之前的Extranonce1和Extranonce2_size,矿机就能开始挖矿。
矿机开始挖矿,构造coinbase信息,将Extranonce2与coinbase合并。构建merkleroot,利用coinbase和merkle_branch进行哈希运算得到最终结果。之后填充区块头的剩余字段,进行挖矿。矿机使用submit方法向矿池提交工作量,矿池验证难度和全网难度。
矿池使用set_difficulty方法调整矿机的难度值,以适应矿工的效率。难度值通过特定公式计算得出,表示任务难度相对于比特币难度单位的倍数。如果矿机在规定时间内未提交结果,矿池将重新发送任务,连续三次未提交任务后认为矿机断开连接,需要重新连接。