今日实时汇率

1 美元(USD)=

7.3042 人民币(CNY)

反向汇率:1 CNY = 0.1369 USD   更新时间:2025-04-20 08:02:31

一、比特币矿池的协议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协议的配合下,矿池终于可以大声的对矿工说,让算力来的更猛烈些吧。

二、手把手教你搭建比特币卫星接收节点

原文:

比特币区块链实际上是一个账本,所以需要将全部交易信息包含在账本内,从而体现每个比特币的所有权。账本需要在节点之间相互广播,以达到分布式备份账本的目的,这是比特币的关键特征。目前,节点广播几乎完全依赖互联网,这给比特币带来了潜在的「单点故障」问题,降低了整个网络的稳健性和安全性。

例如,海底光缆出现故障,或受政策影响的针对性断网都可能导致大范围的网络断连,从而影响该地区比特币节点的同步,损害比特币的可用性。

同步卫星的出现,减少了比特币对互联网的依赖,使节点同步可以通过接收卫星信号的形式完成。只需要一个卫星天线和一个接收器,就可以接收从卫星传来的区块数据,保持节点同步。同时,这也降低了运行节点的成本,在某些欠发达地区,网络连接费用高昂,使用卫星同步区块数据可以省下网费,让更多人有机会运行节点,从而提高比特币的覆盖率。

国外早有大神自制了卫星接收节点,本文将其整理成简略教程,供大家参考。

首先调节三脚架高低。

然后将卫星盘连接到三脚架上,并调节方位和高低。

然后将高频头安装到高频头支架上。

如果一切顺利,你的卫星天线应该是这样的。

使用 F转接头将 SDR连接到高频头电源上,然后使用同轴电缆将高频头也连接到电源上。连接前需要确认电源与 SDR是匹配的,否则错误的电源将损坏 SDR。

Blockstream为所需软件提供了预建的二进制文件。

打开「终端」后,输入

回车输入密码,密码是安装时设置的。然后可以看到待更新列表,输入 y,回车。

升级结束后,重启。

在「终端」中,输入

回车后屏幕出现 Is this ok [y/N],输入 y,回车。

完成后,将 Blockstream Satellite在 Github的库克隆到本地,创建一个项目。

首先要创建卫星接收器,输入如下命令:

安装好后开始克隆 Github库

去刚才克隆好的文件夹

现在我们已经准备好所有 gr-framer GNUradio模组需要的软件了,开始执行安装脚本:

输入密码

创建 gr-framers

恭喜,你已经安装了 gr-framers GNUradio!

现在开始执行 Blockstream GNUradio安装脚本:

创建 Blockstream模组

现在已经安装好 Blockstream模组了。

我们需要设置 PYTHONPATH和 LD_LIBRARY_PATH,来让接收器正常工作:

到这里,所有关于 GNUradio的设置都已经完成了!

安装相关软件:

安装 FIBRE相关软件

现在,克隆 FIBRE库:

然后去克隆的文件夹:

开始创建:

现在创建 FIBRE

(此处可以添加-jn来加速编译,其中 n是 cpu核心数。如果你是四核处理器,就输入命令 make-j4)

已完成创建

完成后,开始安装:

FIBRE安装好了

FIBRE已经安装好了!你现在可以开始同步,或者将已经同步好的节点复制过来。

到此为止,你已经准备好前期工作,下面开始对齐卫星盘。

Blockstream目前有 5颗卫星,确定你所在地区被哪一颗所覆盖。

可在 Blockstram官网查询:

本文选择的是 Galaxy 18卫星。

官网也有对齐工具,你可以输入你的地址或经纬度,它会告诉你如何调整天线的高度、方位和极性。这里是对齐工具。

为了得到一个 Galaxy 18大概的可视化方位,我用了 SatellitePointer这个 App。

确保在视线的 30度之内没有建筑、树、或其他遮挡物。理想的视线是这样的:

视线越好,你接收的信号也就越好。

当你已经确定好卫星盘的摆放地点,你可以开始设置方位和高度。

信号质量与高度角密切相关,所以把高度角调节得越准确越好。

当你觉得高度已经调好了,就可以开始设置高频头的方位了。

设置高频头极性有点难办。我用了 SatellitePointer这个 App来帮助设置。我把手机的顶边贴近高频头底部的平边(图中红线处),然后看 App中的指示:

虽然高频头上也有角度器,但是我觉得 App更方便。

在启动接收器之前,你需要确定卫星的频率,并将其输入 rx_gui.py文件。之前的教程里已经说过如何查询频率了。我使用的 Galaxy 18卫星的频率是 12022.85 MHz。

要计算输入到 rx_gui.py的频率,需要用卫星频率减去你高频头的 LO频率。本文使用的高频头 LO频率为 10750 MHz,因此最后的结果是 1272.85 MHz。

需要将 MHz转化为 Hz,最后结果是 1272850000 Hz。

现在你可以将频率和增益(设为 40即可)写入文件中,然后运行。

rx_gui.py文件在 Blockstream库的 satellite/grc文件夹中。

当你运行 rx_gui.py时,会弹出一个窗口。我们需要用到 FLL In这个选项卡。

图形显示波动很大,刷新很快。要解决这个问题,你可以设置一下 average参数,设为 15即可。

缓慢地左右旋转卫星盘,观察 FLL In的变化。我同样用了之前的 App来帮助寻找方位。

如果你成功了,你会看到如下所示的图表。

现在你需要调整方位(左右)、高度(上下)和高频头的极性,来让信号更好。最后会得到如下所示的图表。

要确认你的信号是好的,你可以到 Abs PMF Out选项卡,看一下有没有峰值。

你也可以到 Costas Sym Out选项卡去看散点图。

最后,「终端」会显示:

恭喜!你成功对齐了卫星盘!

输入指令:

可以在 debug.log文件中看到有没有成功接收区块,如果你看到如下的信息:

那么就已经成功了!

现在,你可以断网,试着只通过卫星来接收区块。

三、比特币节点是什么

比特币是一种点对点的电子系统,直接来说是节点对节点。每笔交易由发起方向周围的节点进行广播,节点收到之后,广播给自己周围的节点,并将节点扩散至全网。每一个比特币钱包都是一个节点,拥有完整区块链账本的节点叫全节点。

根据《关于防范代币发行融资风险的公告》,我国境内没有批准的数字货币交易平台。根据我国的数字货币监管规定,投资者在自担风险的前提下拥有参与数字货币交易的自由。

温馨提示:

1、根据中国人民银行等部门发布的通知、公告,虚拟货币不是货币当局发行,不具有法偿性和强制性等货币属性,并不是真正意义上的货币,不具有与货币等同的法律地位,不能且不应作为货币在市场上流通使用,公民投资和交易虚拟货币不受法律保护。

2、在投资之前,建议您先去了解一下项目存在的风险,对项目的投资人、投资机构、链上活跃度等信息了解清楚,而非盲目投资或者误入资金盘。

3、以上解释仅供参考,投资者不应以该等信息取代其独立判断或仅根据该等信息做出决策,不构成任何投资操作。

应答时间:2021-08-13,最新业务变化请以平安银行官网公布为准。

[平安银行我知道]想要知道更多?快来看“平安银行我知道”吧~