一、比特币矿池的协议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协议的配合下,矿池终于可以大声的对矿工说,让算力来的更猛烈些吧。
二、区块链人才如何搭建服务器,如何搭建区块链局域网服务器
如何搭建代理服务器
如何搭建代理服务器?下面就给大家分享一下搭建代理服务器的基本步骤。
1、打开我的电脑,在电脑中,打开浏览器,用IE浏览器来举例,其它浏览器大同小异,单击“工具”菜单下的“interent选项”
2、在弹出的interent选项窗口上,单击“连接”标签页,在上面有“局域网设置”这个按钮,单击一下。
3、在局域网设置的这个窗口上,选择为LAN使用代理服务器,其上的选项,自动检测和使用自动配置脚本不用勾选。
4、在LAN使用代理服务器上勾选后,要输入代理服务器的IP,端口默认80。
如何搭建一个服务器,供自己远程使用?搭建一个服务器供自己远程使用需要先准备一些基本的材料,如服务器硬件、操作系统(例如WindowsServer或Linux)以及必要的应用软件。然后,你将需要正确地安装和配置服务器,以确保它能正常运行,将其接入因特网,并根据自己的需求安装相关的应用软件。之后,如果你需要,可以通过在本地主机或服务器上安装一个远程桌面软件来连接远程服务器。
区块链中的数据存储通过什么完成超级服务器可信第三方你好,区块链中的数据存储通过什么完成超级服务器可信第三方?区块链的主要角色是扮演可信第三方,如搭建基于区块链的交易中心、数据中心等。现有中心化方式建立一套公共数据库或者说建立多个企业数据库的连接,呈现出费用高、低效率、安全性低等缺陷。通常需要找到一个具有公信力的社会组织、权威的政府部门、或者是被认可的第三方行业的领军企业,来建立一个中心化的数据库,通过互动服务来完成数据的存储、交换和共享。在这种场景下,每个企业自己也有自己相关联的数据库系统,不同数据库之间的一致性、同步性需要与拥有共享数据库的第三方反复确认核验,甚至人工验证,导致共享数据的产生与复用的流程比较复杂和低效。另外,由于所有数据放在所谓权威的第三方,自然就存在外部攻击、内部员工窃取数据的风险,而一旦这个权威的中心服务器瘫痪就会导致所有与之相连的外部业务中断。这实际上是目前互联网服务商特别是巨头目前面临的潜在挑战,同时也是一颗定时炸弹。而区块链的核心能力是提供一致的账套,利用区块链技术替代这个第三方互联网服务巨头的角色,让多家企业使用同一套记账系统,记录同一个账本,鉴于区块链数据库的一致性、历史的不可篡改,可以简化和变革业务流程,保护数据完整性,提高业务的运营质量与管理效率。并且某一个节点瘫痪时,也不会造成整个业务的中断。请参考!
如何构建区块链服务?
区块链服务是指根据公链提供的基础设施开发公链应用,并运行应用提供服务。如在以太坊上使用智能合约开发公链应用,并在以太坊节点上运行对公众提供有效服务。在比特币上,利用比特币有限的功能,提供一些存证服务。
区块链开发者应当建立有效的渠道,能够收集当前区块链的不足,并进行针对性的改进,这种过程我们称之为ImprovementProposals(改进提案):比特币隔离见证(由一系列BIP组成)就是一个很好的例子。应用层的开发者利用IP过程可以将在使用过程中发现的问题反馈给开发者,形成一个良性循环。且IP过程不应当仅限在技术领域,而应当深入BusinessLayer。
链乔教育在线旗下学硕创新区块链技术工作站是中国教育部学校规划建设发展中心开展的“智慧学习工场2020-学硕创新工作站”唯一获准的“区块链技术专业”试点工作站。专业站立足为学生提供多样化成长路径,推进专业学位研究生产学研结合培养模式改革,构建应用型、复合型人才培养体系。
如何搭建云服务器第一种是购买利用传统的物理服务器,通过虚拟化技术来进行搭建,属于硬件范畴。不过耗费的人力、物力和财力比较大,需要专业的技术团队,个人一般是很难实现的。
这种方式适合大型的企业,看重数据安全,希望建立自有的独立数据资源池,当然在业务稳定、连续、快速方面有很好的优势。
第二种是直接从IDC云服务商那里购买云服务器。这种方式更适合于中小型企业和个人站长,前期投入成本低,搭建简单,在服务器维护、数据安全等方面均有云服务商提供支持,自己无需配备专业技术团队。
企业选择云服务器一定是有优势的:
一、云计算降低了管理成本
企业进行云服务器租用,也许在前期的投入相对共享主机来说要高一点,但是在后期,企业对云平台的运维,云服务器的维护等方面会节约不少成本。企业的信息化管理更加高效便捷,节约技术和人力成本。
二、数据安全更有保障
企业云就是建立在云端的独属于企业的资源池,云主机基于庞大的云计算集群,当中的所有数据都是独立于其他资源池的,完美支持热迁移,用户的数据可以很好的被保护起来。
三、灵活扩展业务需求
“云”带给了企业IT应用更大的灵活性和移动性。使用云服务,企业可以拥有更灵活的选择,企业可以在任何时间并且花费很少的前提下,停止使用现在所不需要的东西。也可以在业务增加时,方便地扩展资源。
西部数码云服务器简单高效、处理能力可弹性伸缩,用户可根据不同需求,自由选择vCPU、内存、数据盘、带宽等配置,还可随时不停机升级带宽,1分钟内停机升级vCPU和内存,支撑业务的持续发展。云服务器产品链接
区块链人才培养体系区块链人才培养可以围绕5大核心岗位:区块链运维工程师、智能合约开发工程师、联盟链开发工程师、区块链售前工程师、区块链应用开发工程师,培养技术技能型人才。
一、区块链运维工程师
1、区块链应用平台的搭建、部署;
2、区块链应用平台的系统维护;
3、区块链应用平台的系统监测;
4、参与区块链应用平台的优化和升级。
二、智能合约开发工程师
1、区块链智能合约平台的搭建、部署;
2、智能合约的开发和优化;
3、智能合约的部署和测试;
4、参与开发智能合约交互的前端服务。
三、联盟链开发工程师
1、区块链联盟链平台的搭建、部署;
2、联盟链链码开发;
3、联盟链组件开发;
4、联盟链服务的部署、测试和优化;
5、参与业务系统的设计与实施。
四、区块链售前工程师
1、支持业务团队进行售前工作,理解客户需求,为客户进行技术答疑和提供技术咨询,负责区块链目标客户的开发、维护和项目落地;
2、根据客户需求,设计、制定和编写区块链解决方案,并为客户提供区块链方案的咨询服务;
3、区块链应用平台的系统监测。
五、区块链应用开发工程师
1、区块链平台的搭建、部署,选择合适的区块链平台,并制定合理的架构,满足新产品、新项目需求;
2、区块链应用组件和智能合约的开发、优化、部署和测试;
3、立足具体业务需求,结合业务问题设计、优化、实现区块链应用。
校企联动打造课证融通体系,在完成正常专业课程建设的同时,融入《区块链智能合约开发》1+X证书考核内容,并进行职业技能标准对应的实操练习,在不增加学生额外负担的情况下完成1+X证书考试。
同时,全面推动院校参与区块链相关的省级、国家级职业技能竞赛,以及“一带一路”金砖国际大赛区块链赛项,筛选优秀学生培养孵化,力争竞赛获得最高奖项。
三、手把手教你搭建比特币卫星接收节点
原文:
比特币区块链实际上是一个账本,所以需要将全部交易信息包含在账本内,从而体现每个比特币的所有权。账本需要在节点之间相互广播,以达到分布式备份账本的目的,这是比特币的关键特征。目前,节点广播几乎完全依赖互联网,这给比特币带来了潜在的「单点故障」问题,降低了整个网络的稳健性和安全性。
例如,海底光缆出现故障,或受政策影响的针对性断网都可能导致大范围的网络断连,从而影响该地区比特币节点的同步,损害比特币的可用性。
同步卫星的出现,减少了比特币对互联网的依赖,使节点同步可以通过接收卫星信号的形式完成。只需要一个卫星天线和一个接收器,就可以接收从卫星传来的区块数据,保持节点同步。同时,这也降低了运行节点的成本,在某些欠发达地区,网络连接费用高昂,使用卫星同步区块数据可以省下网费,让更多人有机会运行节点,从而提高比特币的覆盖率。
国外早有大神自制了卫星接收节点,本文将其整理成简略教程,供大家参考。
首先调节三脚架高低。
然后将卫星盘连接到三脚架上,并调节方位和高低。
然后将高频头安装到高频头支架上。
如果一切顺利,你的卫星天线应该是这样的。
使用 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文件中看到有没有成功接收区块,如果你看到如下的信息:
那么就已经成功了!
现在,你可以断网,试着只通过卫星来接收区块。
本站所有软件信息均由用户上传发布,版权归原著所有。如有侵权/违规内容,敬请来信告知邮箱:764327034@qq.com,我们将及时撤销! 转载请注明出处:https://czxurui.com/jys/153001.html
发表回复
评论列表(0条)