基于区块链的软件分发及更新方法和装置、服务器、客户端
技术领域
本申请涉及区块链、软件技术领域,具体而言,涉及一种基于区块链的软件分发及更新方法和装置、服务器、客户端。
背景技术
已有的软件分发及更新方法主要有两种:一种是用户通过光盘、网络下载等手段主动获得软件及更新;另一种是用户通过软件中心连接软件分发商的中心化服务器被动的获得软件及更新。
发明人发现,目前采用主动获得软件的方式面临着不能及时更新软件的问题,而被动获得软件的方法存在着隐私泄漏的风险。
针对相关技术中软件更新存在隐私泄露的问题,目前尚未提出有效的解决方案。
发明内容
本申请的主要目的在于提供一种基于区块链的软件分发及更新方法和装置、服务器、客户端,以解决软件更新存在隐私泄露的问题。
为了实现上述目的,根据本申请的一个方面,提供了一种基于区块链的软件分发及更新方法,用户通过预置软件客户端获取软件及更新,并通过所述软件客户端生成最新的软件版本,所述软件客户端包括:软件及更新的获取组件和软件生成组件。
根据本申请的基于区块链的软件分发及更新方法方法包括:通过点对点网络模块下载最新的区块;解析得到每个所述区块中的交易信息,并提取出每个所述区块中的预设交易类型的数据,并抛弃非预设交易类型交易相关的数据;将所述预设交易类型的交易数据写入本地数据库;通过检查所述本地数据库,确认预设交易类型的交易中的代码数据是否被已经在本地生成的可执行软件程序依赖;如果确认预设交易类型的交易中的代码数据被已经在本地生成的可执行软件程序依赖,则调用软件生成更新本地软件。
进一步地,所述调用软件生成更新本地软件包括:根据软件名从本地数据库中取出预设交易类型中相关的数据;根据预设交易类型中相关的数据中的所依赖的库及版本号,从本地数据库中取出所有依赖项相关的预设交易类型中相关的数据;如果依赖项存在依赖项,则递归的取出所有依赖项的预设交易类型中相关的数据;根据预设交易类型中相关的数据中的元信息数据,并选择不同的编译器工具链,将多个不同的代码数据以及客户端提供的运行时环境链接,生成最后的可执行软件;将已经生成的可执行软件的元信息数据写入本地数据库。
进一步地,通过点对点网络模块下载最新的区块之前包括:使用相关开发语言及工具将相应的软件,按照固定格式提交到区块链上。
进一步地,所述固定格式中包括:在区块链配置预设的交易类型为:napp 交易,napp_name 为软件的名字,napp_version 为软件的版本号,napp_intro 为软件的介绍,napp_icon_url 为软件的图标的URL;napp_depends 定义了该交易类型所依赖的库及版本号,其中,napp_ir 为软件的代码数据,可以为Java 字节码,LLVM 中间表示LLVM IR,napp_meta 为napp_ir 的描述,当napp_ir 为Java 字节码时,字段为java_bc,当napp_ir 为LLVM 中间表示时,字段为llvm_ir。
进一步地,通过检查所述本地数据库,确认预设交易类型的交易中的代码数据是否被已经在本地生成的可执行软件程序依赖之后包括:如果确认预设交易类型的交易中的代码数据没有被已经在本地生成的可执行软件程序依赖,则退出配置。
为了实现上述目的,根据本申请的另一方面,提供了一种基于区块链的软件分发及更新装置,用户通过预置软件客户端获取软件及更新,并通过所述软件客户端生成最新的软件版本,所述软件客户端包括:软件及更新的获取组件和软件生成组件。
根据本申请的基于区块链的软件分发及更新装置包括:下载模块,用于通过点对点网络模块下载最新的区块;解析模块,用于解析得到每个所述区块中的交易信息,并提取出每个所述区块中的预设交易类型的数据,并抛弃非预设交易类型交易相关的数据;储存写入模块,用于将所述预设交易类型的交易数据写入本地数据库;确认模块,用于通过检查所述本地数据库,确认预设交易类型的交易中的代码数据是否被已经在本地生成的可执行软件程序依赖;调用模块,用于确认预设交易类型的交易中的代码数据被已经在本地生成的可执行软件程序依赖时,调用软件生成更新本地软件。
进一步地,调用模块包括:第一提取单元,用于根据软件名从本地数据库中取出预设交易类型中相关的数据;第二提取单元,用于根据预设交易类型中相关的数据中的所依赖的库及版本号,从本地数据库中取出所有依赖项相关的预设交易类型中相关的数据;第三提取单元,用于依赖项存在依赖项时,递归的取出所有依赖项的预设交易类型中相关的数据;执行单元,用于根据预设交易类型中相关的数据中的元信息数据,并选择不同的编译器工具链,将多个不同的代码数据以及客户端提供的运行时环境链接,生成最后的可执行软件;写入单元,用于将已经生成的可执行软件的元信息数据写入本地数据库。
进一步地,装置还包括:上链模块,所述上链模块,用于使用相关开发语言及工具将相应的软件,按照固定格式提交到区块链上。
为了实现上述目的,根据本申请的又一方面,提供了一种服务器,包括:所述的装置。
为了实现上述目的,根据本申请的再一方面,提供了一种客户端包括:所述的方法。
本申请提出一种软件更新存在隐私泄露的,既能保证软件的及时更新,又能从根本上避免隐私泄漏的问题。
在本申请实施例中基于区块链的软件分发及更新方法和装置、服务器、客户端,采用区块链的方式,通过点对点网络模块下载最新的区块,解析得到每个所述区块中的交易信息,并提取出每个所述区块中的预设交易类型的数据,并抛弃非预设交易类型交易相关的数据;将所述预设交易类型的交易数据写入本地数据库;通过检查所述本地数据库,确认预设交易类型的交易中的代码数据是否被已经在本地生成的可执行软件程序依赖;达到了如果确认预设交易类型的交易中的代码数据被已经在本地生成的可执行软件程序依赖,则调用软件生成更新本地软件的目的,从而实现了软件的分发及更新的及时性,软件的分发及更新完全不会涉及用户隐私的泄露问题的技术效果,进而解决了软件更新存在隐私泄露的技术问题。
附图说明
构成本申请的一部分的附图用来提供对本申请的进一步理解,使得本申请的其它特征、目的和优点变得更明显。本申请的示意性实施例附图及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请第一实施例的基于区块链的软件分发及更新方法示意图;
图2是根据本申请实第二施例的基于区块链的软件分发及更新方法示意图;
图3是根据本申请第一实施例的基于区块链的软件分发及更新装置示意图;
图4是根据本申请第二实施例的基于区块链的软件分发及更新装置示意图;
图5是软件及更新的获取组件的工作流程示意图;
图6是软件生成组件的工作流程示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本申请中,术语“上”、“下”、“左”、“右”、“前”、“后”、“顶”、“底”、“内”、“外”、“中”、“竖直”、“水平”、“横向”、“纵向”等指示的方位或位置关系为基于附图所示的方位或位置关系。这些术语主要是为了更好地描述本申请及其实施例,并非用于限定所指示的装置、元件或组成部分必须具有特定方位,或以特定方位进行构造和操作。
并且,上述部分术语除了可以用于表示方位或位置关系以外,还可能用于表示其他含义,例如术语“上”在某些情况下也可能用于表示某种依附关系或连接关系。对于本领域普通技术人员而言,可以根据具体情况理解这些术语在本申请中的具体含义。
此外,术语“安装”、“设置”、“设有”、“连接”、“相连”、“套接”应做广义理解。例如,可以是固定连接,可拆卸连接,或整体式构造;可以是机械连接,或电连接;可以是直接相连,或者是通过中间媒介间接相连,又或者是两个装置、元件或组成部分之间内部的连通。对于本领域普通技术人员而言,可以根据具体情况理解上述术语在本申请中的具体含义。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
如图1所示,该方法包括如下的步骤S101至步骤S105:
步骤S101,通过点对点网络模块下载最新的区块;
用户通过预置软件客户端获取软件及更新,并通过所述软件客户端生成最新的软件版本,所述软件客户端包括:软件及更新的获取组件和软件生成组件。通过点对点网络模块下载最新的区块。点对点网络模块是区块链系统的基础模块,用于接入区块链系统的点对点网络,并从邻居节点上获取必要的区块。
步骤S102,解析得到每个所述区块中的交易信息,并提取出每个所述区块中的预设交易类型的数据,并抛弃非预设交易类型交易相关的数据;
通过相关算法可解析得到每个区块中各个交易的信息,提取每个区块中的预设交易类型的数据,并抛弃非预设交易类型的交易相关的数据。
优选地,在步骤S102,之前,本申请的实施例中还包括如下的步骤:
使用相关开发语言及工具将相应的软件,按照固定格式提交到区块链上。
所述固定格式中包括:在区块链配置预设的新的交易类型为:napp 交易,napp 交易仅为举例,并不表述对本申请实施例中保护范围的限定。
具体地,所提交的软件应该包括如下信息,
struct napp_dep_meta{
std::string name;
uint64 version;
};
struct napp_data{
std::string napp_name;
uint64 napp_version;
std::string napp_intro;
std::string napp_icon_url;
std::vector<napp_dep_meta> napp_depends;
std::string napp_meta;
std::string napp_ir;
};
其中,napp_name 为软件的名字,
napp_version 为软件的版本号,
napp_intro 为软件的介绍,
napp_icon_url 为软件的图标的URL;
napp_depends 定义了该交易类型所依赖的库及版本号,
其中,napp_ir 为软件的代码数据,可以为Java 字节码,LLVM 中间表示LLVM IR,napp_meta 为napp_ir 的描述,
当napp_ir 为Java 字节码时,字段为java_bc,
当napp_ir 为LLVM 中间表示时,字段为llvm_ir。
步骤S103,将所述预设交易类型的交易数据写入本地数据库;
将所述预设交易类型的交易中包含的数据为交易数据。通常地,预设交易类型的交易由开发者提交申请。
步骤S104,通过检查所述本地数据库,确认预设交易类型的交易中的代码数据是否被已经在本地生成的可执行软件程序依赖;
检查本地数据库,确认预设交易类型交易中的代码数据,是否被已经在本地生成的可执行软件依赖。
步骤S105,如果确认预设交易类型的交易中的代码数据被已经在本地生成的可执行软件程序依赖,则调用软件生成更新本地软件。
待更新的软件相应的元信息及软件的代码数据存储到了用户本地的设备中,从而完成了软件分发及更新。
需要注意的是,用户本地的设备存储的是软件的代码数据,并未生成最终的代码,所以还需要软件客户端中的软件生成组件生成代码。
优选地,还可以包括:如果确认预设交易类型的交易中的代码数据没有被已经在本地生成的可执行软件程序依赖,则退出配置的判断步骤。
从以上的描述中,可以看出,本申请实现了如下技术效果:
在本申请实施例中基于区块链的软件分发及更新方法和装置、服务器、客户端,采用区块链的方式,通过点对点网络模块下载最新的区块,解析得到每个所述区块中的交易信息,并提取出每个所述区块中的预设交易类型的数据,并抛弃非预设交易类型交易相关的数据;将所述预设交易类型的交易数据写入本地数据库;通过检查所述本地数据库,确认预设交易类型的交易中的代码数据是否被已经在本地生成的可执行软件程序依赖;达到了如果确认预设交易类型的交易中的代码数据被已经在本地生成的可执行软件程序依赖,则调用软件生成更新本地软件的目的,从而实现了软件的分发及更新的及时性软件的分发及更新完全不会涉及用户隐私的泄露问题的技术效果,进而解决了软件更新存在隐私泄露的技术问题。
根据本申请实施例,作为本实施例中的优选,如图2所示,所述调用软件生成更新本地软件包括:
步骤S201,根据软件名从本地数据库中取出预设交易类型中相关的数据;
根据软件名从本地数据库中取出预设交易类型的相关的数据。
步骤S202,根据预设交易类型中相关的数据中的所依赖的库及版本号,从本地数据库中取出所有依赖项相关的预设交易类型中相关的数据;
根据上述相关的数据中的所依赖的库及版本号,从本地数据库中取出所有依赖项相关的数据,如果依赖项进一步存在依赖项,则递归的取出所有依赖项的数据。
步骤S203,如果依赖项存在依赖项,则递归的取出所有依赖项的预设交易类型中相关的数据;
如果依赖项有缺失,则返回错误信息,并退出。
步骤S204,根据预设交易类型中相关的数据中的元信息数据,并选择不同的编译器工具链,将多个不同的代码数据以及客户端提供的运行时环境链接,生成最后的可执行软件;
根据交易类型的数据中的元组数据选择不同的编译器工具链,将多个不同的代码数据以及客户端提供的运行时环境链接生成最后的可执行软件。
步骤S205,将已经生成的可执行软件的元信息数据写入本地数据库。
将已经生成的可执行软件的元信息数据写入本地数据库完成软件的生成后即可视为完成软件的分发及更新。
在本申请的再一实施例中还提供了一种客户端,包括:所述的基于区块链的软件分发及更新方法。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
根据本申请实施例,还提供了一种用于实施上述方法的基于区块链的软件分发及更新装置,如图3所示,该装置包括:下载模块10,用于通过点对点网络模块下载最新的区块;解析模块20,用于解析得到每个所述区块中的交易信息,并提取出每个所述区块中的预设交易类型的数据,并抛弃非预设交易类型交易相关的数据;储存写入模块30,用于将所述预设交易类型的交易数据写入本地数据库;确认模块40,用于通过检查所述本地数据库,确认预设交易类型的交易中的代码数据是否被已经在本地生成的可执行软件程序依赖;调用模块50,用于确认预设交易类型的交易中的代码数据被已经在本地生成的可执行软件程序依赖时,调用软件生成更新本地软件。
本申请实施例的下载模块10中用户通过预置软件客户端获取软件及更新,并通过所述软件客户端生成最新的软件版本,所述软件客户端包括:软件及更新的获取组件和软件生成组件。通过点对点网络模块下载最新的区块。点对点网络模块是区块链系统的基础模块,用于接入区块链系统的点对点网络,并从邻居节点上获取必要的区块。
本申请实施例的解析模块20中通过相关算法可解析得到每个区块中各个交易的信息,提取每个区块中的预设交易类型的数据,并抛弃非预设交易类型的交易相关的数据。
优选地,还包括:上链模块(图中未示出),所述上链模块,用于使用相关开发语言及工具将相应的软件,按照固定格式提交到区块链上。
所述固定格式中包括:在区块链配置预设的新的交易类型为:napp 交易,napp 交易仅为举例,并不表述对本申请实施例中保护范围的限定。
具体地,所提交的软件应该包括如下信息,
struct napp_dep_meta{
std::string name;
uint64 version;
};
struct napp_data{
std::string napp_name;
uint64 napp_version;
std::string napp_intro;
std::string napp_icon_url;
std::vector<napp_dep_meta> napp_depends;
std::string napp_meta;
std::string napp_ir;
};
其中,napp_name 为软件的名字,
napp_version 为软件的版本号,
napp_intro 为软件的介绍,
napp_icon_url 为软件的图标的URL;
napp_depends 定义了该交易类型所依赖的库及版本号,
其中,napp_ir 为软件的代码数据,可以为Java 字节码,LLVM 中间表示LLVM IR,napp_meta 为napp_ir 的描述,
当napp_ir 为Java 字节码时,字段为java_bc,
当napp_ir 为LLVM 中间表示时,字段为llvm_ir。
本申请实施例的储存写入模块30中将所述预设交易类型的交易中包含的数据为交易数据。通常地,预设交易类型的交易由开发者提交申请。
本申请实施例的确认模块40中检查本地数据库,确认预设交易类型交易中的代码数据,是否被已经在本地生成的可执行软件依赖。
本申请实施例的调用模块50中待更新的软件相应的元信息及软件的代码数据存储到了用户本地的设备中,从而完成了软件分发及更新。
需要注意的是,用户本地的设备存储的是软件的代码数据,并未生成最终的代码,所以还需要软件客户端中的软件生成组件生成代码。
优选地,还可以包括:如果确认预设交易类型的交易中的代码数据没有被已经在本地生成的可执行软件程序依赖,则退出配置的判断步骤。
根据本申请实施例,作为本实施例中的优选,如图4所示,所述调用模块50包括:第一提取单元501,用于根据软件名从本地数据库中取出预设交易类型中相关的数据;第二提取单元502,用于根据预设交易类型中相关的数据中的所依赖的库及版本号,从本地数据库中取出所有依赖项相关的预设交易类型中相关的数据;第三提取单元503,用于依赖项存在依赖项时,递归的取出所有依赖项的预设交易类型中相关的数据;执行单元504,用于根据预设交易类型中相关的数据中的元信息数据,并选择不同的编译器工具链,将多个不同的代码数据以及客户端提供的运行时环境链接,生成最后的可执行软件;写入单元505,用于将已经生成的可执行软件的元信息数据写入本地数据库。
本申请实施例的第一提取单元501中根据软件名从本地数据库中取出预设交易类型的相关的数据。
本申请实施例的第二提取单元502中根据上述相关的数据中的所依赖的库及版本号,从本地数据库中取出所有依赖项相关的数据,如果依赖项进一步存在依赖项,则递归的取出所有依赖项的数据。
本申请实施例的第三提取单元503中如果依赖项有缺失,则返回错误信息,并退出。
本申请实施例的执行单元504中根据交易类型的数据中的元组数据选择不同的编译器工具链,将多个不同的代码数据以及客户端提供的运行时环境链接生成最后的可执行软件。
本申请实施例的写入单元505中将已经生成的可执行软件的元信息数据写入本地数据库完成软件的生成后即可视为完成软件的分发及更新。
在本申请的另一实施例中还提供了一种服务器,包括:所述的基于区块链的软件分发及更新装置,所述装置的实现原理和有益效果如上述,在此不再赘述。
本申请的实现原理如下:
区块链上的软件表示,及用于执行区块链上软件的客户端。本申请提供的软件分发及更新方法,要求软件开发人员按照如下方式将软件提交到区块链上:使用相关的开发语言及工具将相应的软件,按照本发明所描述的格式提交到区块链上。具体而言,所提交的软件应该包括如下信息:
struct napp_dep_meta{
std::string name;
uint64 version;
};
struct napp_data{
std::string napp_name;
uint64 napp_version;
std::string napp_intro;
std::string napp_icon_url;
std::vector<napp_dep_meta> napp_depends;
std::string napp_meta;
std::string napp_ir;
};
其中,napp_name 为软件的名字,napp_version 为软件的版本号,napp_intro 为软件的介绍,napp_icon_url 为软件的图标的URL。napp_depends 定义了该NApp 所依赖的库及版本号,napp_ir 为软件的代码数据,可以为Java 字节码,LLVM 中间表示(LLVM IR)等,napp_meta 为napp_ir 的描述,当napp_ir 为Java 字节码时,字段为java_bc,当napp_ir 为LLVM 中间表示时,字段为llvm_ir。
需要说明的而是,对于区块链上的软件表示,本发明需要在区块链上引入一种特别的交易类型,定义为napp 交易,napp 交易中包含的数据为如前所述的napp_data,napp交易由开发者提交。应当理解,此处所描述的napp 交易仅仅定于解释本发明,并不用与限定本发明。在本发明提供的软件分发及更新方法中,用户通过客户端获取软件及更新,并通过客户端生成最新的软件。客户端包括两个组件,软件及更新的获取组件,软件生成组件。
请参考图5,描述了软件及更新的获取组件的工作流程,具体包括:
通过点对点网络模块下载最新的区块;
解析得到每个所述区块中的交易信息,并提取出每个所述区块中的预设交易类型的数据napp 交易,并抛弃非预设交易类型交易相关的数据;
将所述预设交易类型的交易数据napp_data写入本地数据库;
通过检查所述本地数据库,确认预设交易类型的交易中的代码数据是否被已经在本地生成的可执行软件程序依赖;
如果确认预设交易类型的交易中的代码数据被已经在本地生成的可执行软件程序依赖,则调用软件生成更新本地软件。
经过上述步骤,一个软件相应的元信息及软件的代码数据存储到了用户本地的设备中,从而完成了软件分发及更新。然而此时,用户本地的设备存储的是软件的代码数据,并未生成最终的代码,为此,需要客户端中的软件生成组件。
请参考图6,描述了软件生成组件的工作流程,具体包括:
根据软件名从本地数据库中取出预设交易类型中相关的数据napp_data;
根据预设交易类型中相关的数据napp_data中的所依赖的库及版本号napp_depends,从本地数据库中取出所有依赖项相关的预设交易类型中相关的数据;
如果依赖项存在依赖项,则递归的取出所有依赖项的预设交易类型中相关的数据;
根据预设交易类型中相关的数据napp_data中的元信息数据napp_meta,并选择不同的编译器工具链,将多个不同的代码数据以及客户端提供的运行时环境链接,生成最后的可执行软件;
将已经生成的可执行软件的元信息数据写入本地数据库。
通过本申请中的方法,实现了软件的分发及更新的及时性,以及软件的分发及更新完全不会涉及用户隐私的泄露的效果。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。