一种利用浏览器执行区块链计算任务的方法、装置和浏览器与流程

文档序号:15802623发布日期:2018-11-02 21:33阅读:291来源:国知局
一种利用浏览器执行区块链计算任务的方法、装置和浏览器与流程

本发明涉及区块链技术领域,特别是一种利用浏览器执行区块链计算任务的方法、装置和浏览器。

背景技术

基于区块链的加密货币已经成为一种重要的数字货币,获取加密货币的一种途径简称为“挖矿”。挖矿制度为通过计算机硬件为在加密货币的区块链网络开展数学运算的过程,提供计算的用户被称为矿工,作为奖励,矿工可以得到一笔报酬,网络报酬依据矿工完成的任务来计算。

现有的挖矿软件需要用户专门下载到用户终端里,用户想要获得比特币等虚拟货币,需要打开挖矿软件,通过繁琐的操作来执行下载任务。对于一些不熟悉挖矿操作的用户来说,需要下载专门的软件挖矿,给用户操作上带来了不便。



技术实现要素:

本发明的目的是提供一种利用浏览器执行区块链计算任务的方法、装置和浏览器,以便用户不需要下载专门的挖矿应用程序,在浏览网页的同时可以执行区块链计算任务,即加密货币领域通常所称的挖矿,充分利用了浏览网页时的算力资源。

为了实现上述目的,本发明提供的一种利用浏览器执行区块链计算任务的方法,包括:

浏览器客户端从用户访问的网页加载哈希计算js脚本,并执行该脚本,从服务器获取区块中的计算任务,所述区块中的计算任务由js脚本从区块链上加密货币的矿池获得;

执行计算任务;

将计算结果返回到矿池验证,以获得奖励的加密货币。

可选地或优选地,在所述执行计算任务之前,根据cpu核心数创建计算任务的工作线程。

可选地或优选地,在所述执行计算任务之前,在浏览器的主进程中创建用于执行所述计算任务的子进程,所述主进程和所述子进程的任务并行处理。

可选地或优选地,所述执行计算任务包括:

加载核心算法;

设置随机数,通过核心算法计算区块的哈希值;

当计算出的哈希值满足预设的条件时,判断为完成计算任务。

可选地或优选地,在所述加载核心算法后,还包括:创建输入值和输出值的公共变量的内存分配空间,所述空间用于存取所述计算任务中产生的中间结果,即当一中间结果存入所述空间,在该中间结果使用完毕后从所述空间取出,再存入新的中间结果。

可选地或优选地,所述设置随机数包括:在一预设整数范围内随机取值以供进行哈希值计算;

当计算出的哈希值未满足预设的条件时,再次随机取值,直至完成计算任务。

可选地或优选地,所述将计算结果返回到矿池验证包括:先将所述计算结果进行验证,验证合格后发送到所述网页服务器,由网页服务器转发到所述矿池。

可选地或优选地,所述用于执行计算任务的工作进程使用javascript代码,根据浏览器的类型预先编制与其适应的javascript代码,在执行所述计算任务之前,先检测所打开浏览器的特性,根据所述特性为浏览器配置兼容的javascript代码执行计算任务。

另一方面,本发明还提供了一种利用浏览器执行区块链计算任务的装置,包括:

获取模块,用于从用户访问的网页加载哈希计算js脚本,并执行该脚本,从服务器获取区块中的计算任务,所述区块中的计算任务由js脚本从区块链上加密货币的矿池获得;

计算模块,用于执行计算任务;

返回模块,用于将计算结果返回到矿池验证,以获得奖励的加密货币。

本发明还提供了一种浏览器,包括上述的利用浏览器执行区块链计算任务的装置。

本发明提供的一种利用浏览器执行区块链计算任务的方法、装置和浏览器,利用浏览器从矿池领取计算任务并执行,用户不需要单独下载专门的应用程序来挖矿,此外还充分利用了浏览器运行时未被充分利用的算力资源。

附图说明

图1为本发明实施例提供的利用浏览器执行区块链计算任务的方法可实现于其中的系统结构图;

图2为本发明实施例提供的利用浏览器执行区块链计算任务的方法的流程图;

图3为本发明实施例提供的一种利用浏览器执行区块链计算任务的装置的结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。

“挖矿”是区块链和加密货币领域中的专业术语,加密货币的交易,需要将验证交易的工作去中心化,靠用户彼此协助验证,而验证过程就是让计算机解出一连串复杂的密码学题目,解完题目、完成验证后,便能将交易双方的钱包地址、交易金额和时间等相关信息新增至新的区块中。参与解密码学题目进行验证的过程就是挖矿,通过挖矿,就可以获得一定数量的加密货币作为奖励。参与挖矿的节点的用户称为矿工。

本发明实施例提供了一种利用浏览器执行区块链计算任务的方法,即不论用户是否了解加密货币的原理,都可以通过浏览器完成挖矿过程。

该方法可以实现于图1所示的系统架构中,该系统架构包括主链、矿池、用户访问网页的网页服务器,安装在用户设备上的浏览器客户端。

所述主链指的是区块链的主链,区块链是加密货币的基础技术,以区块链为技术基础的加密货币有多种类型,最常见的为比特币。当然,本发明的方法可以应用到任何一种加密货币中。

所述矿池指的是加密货币的矿池,其用于获取块数据,计算需要分配的哈希值。当浏览器完成计算任务后,校验由网页服务器提交的计算结果,校验成功后记录提交者,定时向矿池内的矿工进行加密货币结算,将计算结果提交到主链。

浏览器客户端用于访问网页。目前,浏览器客户端和网页大多是用javascript语言编制的。所以用javascript编制的程序(如插件等)可以加载到浏览器客户端上。本发明提供的方法可以按照计算机流程编制为javascript的计算机程序加载到浏览器客户端上运行,也可以在设计浏览器客户端时就作为浏览器客户端的一部分编制计算机程序。

本发明中所称的网页既可以是pc端的网页,也可以是移动设备上的网页。浏览器客户端既可以是ie、chrome等pc端常见的形式,也可以是移动设备app等形式。即本发明中所称的浏览器,为广义上的浏览器,只要可以浏览网站内容的应用程序都可以作为本发明实施例中的浏览器。

如图2所示,本发明实施例提供的一种利用浏览器执行区块链计算任务的方法,在浏览器客户端侧(即用户设备侧),包括如下步骤:

s101:从用户访问的网页加载哈希计算js脚本,并执行该脚本,从服务器获取区块中的计算任务,所述区块中的计算任务由js脚本从区块链上加密货币的矿池获得。

所述的js脚本,指的是用javascript语言编程的脚本,其用于哈希计算,指的是区块链加密货币挖矿中的哈希计算过程。哈希计算js脚本中既包括了执行计算任务的程序,也包括通过浏览器从区块链上加密矿池接收计算任务的程序。即js脚本用于领取区块的哈希计算任务并执行。在本步骤s101中,只介绍领取计算任务的流程。

浏览器客户端的计算任务,是通过其所访问网页的网页服务器直接获得的,而网页服务器的计算任务是通过矿池领取的。获得计算任务的整体流程为:矿池先从主链上获取区块数据,计算需要分配的哈希值,网页服务器与矿池建立通信后,从矿池领取计算任务,与客户端建立通信,实时获取客户登录信息,向用户派发计算任务。所以,所述的“从服务器获取区块中的计算任务,所述区块中的计算任务由js脚本从区块链上加密货币的矿池获得”可以理解为从网页服务器直接获取区块中的计算任务,从区块链上加密货币的矿池间接获取计算任务(即矿池将计算任务通过网页服务器转发给浏览器客户端)。

根据本发明的实施例,由于“挖矿”的过程需要占用用户设备的运算资源,因此浏览器客户端在获取计算任务时,或者网页服务器向浏览器客户端派发计算任务时,需要经过浏览器用户的同意。如向用户发送提示框,当接收到用户的同意确认操作后,才可判断为用户同意领取计算任务并执行。

s102:执行计算任务。

所述的执行计算任务,就是通过创建计算任务的工作进程,加载工作进程中的算法代码来进行区块中要求的运算,从而获得符合条件的运算结果。

在开始计算任务之前,需要说明的是,如果方法的流程通过上述的javascript语言实现时,由于javascript是单线程语言,其运行时是严格按照程序的上下文执行,只能同时进行单一计算任务,如果在主线程中执行区块链的运算任务将会对网站访问造成严重的体验问题,更严重的会使得浏览器崩溃。为了解决这一问题,根据本发明的实施例,在所述执行计算任务之前,首先在浏览器的主进程中创建用于执行所述计算任务的子进程,所述主进程和所述子进程的任务并行处理。主进程用于执行浏览器本身功能的运算任务,子进程用于执行区块的计算任务,两者之间并行处理,既不影响用户浏览网页时的用户体验,同时还可以完成区块的计算任务。

另外,用于执行计算任务的工作进程使用javascript代码时,本发明实施例先根据浏览器的类型预先编制与其适应的javascript代码,在执行所述计算任务之前,先检测所打开浏览器的特性,根据所述特性为浏览器配置兼容的javascript代码执行计算任务。例如,可以通过检测浏览器的useragent来确定浏览器的具体类型,以加载兼容的javascript挖矿程序。所以,无论用户使用哪种浏览器,都可以执行挖矿任务。

作为进一步改进,在创建完进程后,根据运行浏览器客户端的用户设备的cpu核心数,在每个工作进程下创建计算任务的工作线程。具体的创建规则可以是:工作线程数与cpu核心数的比值为1:1,即有几个cpu核心就创建几个工作线程。多线程处理计算任务时,各个线程之间互不干扰,提高了cpu的使用率。

作为更进一步的改进,本实施例对每个线程都可以控制cpu的占用率,即控制工作和空闲时间的占比。通过设置合理的cpu占用率能够在挖矿的货币收益和浏览网页的用户体验之间做出平衡。在cpu占用率不至于过高,即不严重影响用户体验的情况下进行挖矿,从而获得尽可能多的加密货币奖励。本实施中cpu占用率的设置由网页服务器进行设置,但在另一些实施例中也可以由用户自己设置。

执行计算任务的过程,可以包括如下步骤:

s1021:加载核心算法。

所述的加载核心算法,指的是用于执行计算任务的核心算法。以比特币的挖矿为例,所加载的核心算法就是计算区块哈希值的核心算法。

作为一个优选的实施例,在所述加载核心算法后,还包括如下步骤:创建输入值和输出值的公共变量的内存分配空间,所述空间用于存取所述计算任务中产生的中间结果,即当一中间结果存入所述空间,在该中间结果使用完毕后从所述空间取出,再存入新的中间结果。

在接下来进行的哈希运算过程中,会将输入值进行运算后得到输出值,在运算过程中会不断产生中间结果。对于这些中间结果,需要创建公共变量来存储。目前的挖矿应用程序是通过不断开辟新的内存空间进行存储表示中间结果的公共变量。在本发明中,用户既要浏览网页,又要执行区块的计算任务,会占用较多的计算资源,如果像现有技术一样,通过不断开辟新的内存空间来存储中间结果,就会导致浏览器主进程所能支配的内存越来越少,最终导致浏览器崩溃,基于浏览器的挖矿过程也无法进行下去。为了解决这一问题,本发明为运算中产生的中间结果单独开辟一段内存空间,新产生中间结果首先存入到该内存空间中,当中间结果带入到下一个计算步骤中,使用完毕后,将这个中间结果取出删除,然后将新产生的中间结果再存入同一内存空间中,如此循环往复,只利用一块固定的内存空间,避免不断开辟新的内存空间,既不影响挖矿中的哈希运算,又可在浏览网页过程中保持流畅,避免浏览器崩溃。

s1022:设置随机数,通过核心算法计算区块的哈希值。

s1023:当计算出的哈希值满足预设的条件时,判断为完成计算任务。

一个区块分为两部分,分别是区块头和区块体,其中区块头用来记录一些说明信息,而区块体是用来记录加密货币交易的列表。区块头共有六个字段,分别是版本号、前一区块的哈希值、梅克尔根、预设的难度值、时间戳、要寻找的随机数。其中,要寻找的随机数是要获得挖矿奖励的核心要素,也就是“矿机”(用户设备)穷尽算力要寻找的那个随机数值。

挖矿过程就是对以上这六个字段进行一系列的转换、连接和哈希运算(即本发明实施例所称的核心算法),并随着不断一个一个尝试要寻找的随机数,最后成功找到一个随机数满足下列预设条件:经过哈希运算后的哈希值,比预设难度值的哈希值小,此时判断为挖矿成功,节点可以向邻近节点进行广播该区块,邻近节点收到该区块,对以上六个字段进行同样的运算,验证合规,再向其它节点转播,其它节点也用同样的算法进行验证,验证成功的节点达到一定比例(如51%)后,这个区块就算真正地“挖矿”成功了,每个节点都把这个区块加在上一个区块的后面,并把区块中与自己记录相同的列表删除,再次复生上述过程。

现有技术在尝试寻找随机数时,是通过迭代的+1来“撞”出符合条件的随机数的。作为本发明的一个实施例,在设置随机数时,不采用迭代加法,而是在一预设整数范围内随机取值。例如,目前区块链的随机数范围在0~232,那么本发明实施例就是通过在该范围内不断取随机数来“碰撞”出符合条件的结果。发明人惊奇地发现,在随机取随机数的方式比迭代加法的方式,能够更快地得到符合条件的哈希值。

s103:将计算结果返回到矿池验证,以获得奖励的加密货币。

根据本发明的实施例,浏览器客户端先在本地将所述计算结果进行验证,验证合格后发送到用户所访问的网页服务器,再由网页服务器转发到矿池。矿池对挖矿结果进行记录,根据浏览器客户端所做的算力贡献向浏览器客户端绑定的加密货币钱包地址分配加密货币奖励。

获取加密货币奖励的账户既可以是浏览器的用户,也可以是运营网页服务器的网站主。用户既可以通过预先绑定自己的加密货币钱包地址访问浏览器的网页进行挖矿,此时加密货币的奖励会发送给用户的钱包地址。浏览器网页的网站主也可以在加载的挖矿程序中绑定自己的账户,这样用户挖矿的奖励就会发送给网站的钱包地址。

除了以上两种分配奖励的方式外,发明人还创新性的提出了其他分配奖励的技术方案。在现有技术中,用户浏览一些网页时会遇到许多限制。如浏览视频网站时会出现广告,下载软件时需要点击广告等。用户如果想要取消这些限制,只能够向网页的网站主付费,通过成为会员等方式解除上述限制。此外,一些网页中的其他服务也需要用户付费完成。但是,即便用户愿意付费,还需要通过支付操作来选择会员等级、登录第三方支付平台等方式来完成会费或其他服务费用的缴纳,造成了操作上的繁琐。为了解决这一技术问题,根据本发明的实施例,在执行计算任务之前,网页服务器先绑定了自己的加密货币钱包地址,当用户访问网页时,向用户提供询问入口,所述询问入口用于询问用户是否愿意通过执行所述计算任务来换取浏览页面时的限制或其他福利。当检测到用户反馈的结果为同意后,则根据用户对其所完成的计算任务所贡献的加密货币,为用户自动解除限制或分配用于享受网页提供服务的其他福利。用户可以通过参与挖矿的方式帮助网站赚取加密货币,而自己在浏览网页时不用执行其他操作,也不用访问其他页面和支付平台,就可以获得会员等福利。

如前所述,本发明中方法的流程可以通过编程为在浏览器上运行的程序来实现(如以方法的流程为依据编制程序写入js脚本中。作为本发明的一个具体的实施例,可以通过编制以下三段程序模块来实现上述方法的各步骤。三段程序模块依次为浏览器、控制器、工作进程。控制器和工作进程模块可以加载在浏览器上。以上三者所执行的流程步骤如下:

浏览器客户端:

1.处理通信请求。

2.验证特性方法,判断浏览器的类型和特性。根据需要加载不同的javascript挖矿程序;如前所述,不同浏览器对javascript的兼容性不一样,编程时准备多个版本的javascript,来适应不同的浏览器。

控制器:

1.获取计算任务;

2.根据cpu核心数创建工作线程;

3.加载工作进程代码;

4.下发工作内容到浏览器;

5.创建守护进程,用于实时监控工作进程,将工作进程上报结果进行转发,转发到矿池,矿池再进行验证,确认用户是否真的完成了计算任务。矿池记账后,根据用户的算力贡献来分配加密货币。

6.根据工作进程的汇总结果将计算结果及参数发送到网页服务器。

其中,所述计算结果是区块解出来的结果,所述参数就是用户的加密货币钱包地址。

7.获取新的工作内容,并重置工作线程内的计算任务。

工作进程:

1.加载核心算法;

2.创建输入值和输出值公共变量的内存分配空间;

3.监听由控制器下发的计算任务;

4.设置随机数(nonce);

5.完成计算任务(即将输入值内存地址传入核心算法);

6.校验核心算法的计算结果;

7.如果结果符合要求则将结果发送消息给控制器

8.如果不符合要求则启动下一轮计算,直至得到符合要求的计算结果。

在编程时,可以采用webassembly技术,其是可以让其他语言运行在javascript语言环境中,从而使得javascript运行的效率与c序言相差无几。提高挖矿的效率。即在编程时,先使用c语言编写,然后使用webassembly模块转换为可以被浏览器运行的javascript语言运行。

根据本发明的实施例,各终端之间的通信采用websocket通信协议,由于计算哈希值本身会耗费大量cpu计算能力,网站与服务器的通信就不能使用频繁的ajax来进行通信,所以使用websocket来通信可以减少很多比不必要的系统资源开销。

另一方面,本发明还提供了一种利用浏览器执行区块链计算任务的装置,如图3所示,包括:

获取模块,用于浏览器客户端从用户访问的网页加载哈希计算js脚本,并执行该脚本,从服务器获取区块中的计算任务,所述区块中的计算任务由js脚本从区块链上加密货币的矿池获得;

计算模块,用于执行计算任务;

返回模块,用于将计算结果返回到矿池验证,以获得奖励的加密货币。

进一步地,计算模块在所述执行计算任务之前,还根据cpu核心数创建计算任务的工作线程。

进一步地,计算模块在所述执行计算任务之前,在浏览器的主进程中创建用于执行所述计算任务的子进程,所述主进程和所述子进程的任务并行处理。

所述计算模块执行所述执行计算任务包括:

加载核心算法;

设置随机数,通过核心算法计算区块的哈希值;

当计算出的哈希值满足预设的条件时,判断为完成计算任务。

在所述加载核心算法后,所述计算模块还用于:创建输入值和输出值的公共变量的内存分配空间,所述空间用于存取所述计算任务中产生的中间结果,即当一中间结果存入所述空间,在该中间结果使用完毕后从所述空间取出,再存入新的中间结果。

所述计算模块在设置随机数时还包括:在一预设整数范围内随机取值以供进行哈希值计算;

当计算出的哈希值未满足预设的条件时,再次随机取值,直至完成计算任务。

进一步地,所述返回模块先将所述计算结果进行验证,验证合格后发送到所述网页服务器,由网页服务器转发到所述矿池。

所述用于执行计算任务的工作进程使用javascript代码,根据浏览器的类型预先编制与其适应的javascript代码,在执行所述计算任务之前,先检测所打开浏览器的特性,根据所述特性为浏览器配置兼容的javascript代码执行计算任务。

应当理解的是,本发明实施例中的装置和方法中的步骤流程相对应,各模块执行步骤的具体的实现方式可以参考方法实施例的描述,在此不再赘述。

本发明还提供了一种浏览器,包括上述的利用浏览器执行区块链计算任务的装置。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

本文中应用了具体个例对发明构思进行了详细阐述,以上实施例的说明只是用于帮助理解本发明的核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离该发明构思的前提下,所做的任何显而易见的修改、等同替换或其他改进,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1