一种基于区块链的智能合约的众包构建方法与流程

文档序号:12664125阅读:461来源:国知局
一种基于区块链的智能合约的众包构建方法与流程

本发明属于区块链技术领域,具体的说是一种基于区块链的智能合约的众包构建方法。



背景技术:

在社会生产中,不管是公司、机构还是个人都会遇到一些自身难以解决的问题。这时,公司或机构可能会选择将这样的问题外包给别的公司或机构去完成。随着互联网的发展,人们提出了一种新的解决办法,将企业自身不能解决的问题以自由自愿的形式外包给非特定的大众的方法。这种外包的任务通常由个人来承担,但如果涉及到需要多人协作完成的任务,也有可能以依靠开源的个体生产的形式出现。

传统意义上的外包更多是交给专业性的组织或团队,这种关系是有针对性和契约性的;而互联网上的外包范围则更加宽泛,参与者可以是该领域的专业人士,也可以是非专业人士。人们将这种一对多的外包形式称为众包,众包充分利用了互联网用户多元化的背景。在某种程度上说,众包提供了一种组织劳动力的全新方式。互联网用户复杂、多元化的文化、教育、地域背景则进一步吸引了众多企业转向利用互联网众包获取解决方案。

然而目前的众包协议的签订必须依赖于第三方平台,需求任务的信息来源的真实性完全取决于第三方的可信度得不到实质性的保障,且需要耗费较多的管理成本。对于需求任务的解决方,由于没有有效的解决方案监控措施,导致目前众包的解决方案良莠不齐,甚至于存在很多抄袭、虚假的现象,任务提出者并不能得到满意的解决方案且耗费时间和成本;另一方面解决方案提出者的知识产权也因为对合约执行过程缺乏监控,而得不到有效的保护。



技术实现要素:

本发明是为了解决上述现有技术存在的不足之处,提出一种基于区块链的智能合约的众包构建方法,以期能通过去中心化的分布式数据存储方法解决中心化的数据存储存在的信息易篡改、不可靠问题,通过智能合约程序自动执行的方式解决对合约执行状态的监控问题,从而降低众包合约构建及执行过程中存在的风险。

本发明为解决技术问题采用如下技术方案:

本发明一种基于区块链的智能合约的众包构建方法的特点是按如下步骤执行:

步骤一、定义所述智能合约的用户集合为U={Vα,V},Vα为所述智能合约的甲方,V为所述智能合约的乙方集合,并有:V={V1,V2,...,Vi,...,Vm},Vi为所述乙方集合中第i个用户,1≤i≤m;

步骤二、智能合约任务和规则的发布:

所述甲方Vα用自身私钥对包含任务和规则的智能合约进行签名,并由矿工将签名过的智能合约作为区块TR添加到区块链的主链上;所述智能合约的任务记为T={t1,t2,...,tp,...,tn},tp为第p个子任务;1≤p≤n;

步骤三、合约任务的认领:

步骤3.1、定义以所述区块TR为起点的支链上的区块数量为ρ,并初始化ρ=0;

步骤3.2、假设第i个用户Vi期望认领所述任务中的若干个子任务,则第i个用户Vi查询所述区块TR为起点的支链上是否存在终止区块;若存在,则表示所述智能合约已经签订完成,若不存在,则执行步骤3.3;

步骤3.3、初始化p=1;

步骤3.4、由所述第i个用户Vi标记所述任务中第p个子任务tp的认领意愿状态当代表第i个用户Vi期望认领第p个子任务tp;当代表第i个用户Vi不认领第p个子任务tp

步骤3.5、将p+1赋值给p后,返回步骤3.4,直到p=n为止,从而得到所述第i个用户Vi对所有子任务的认领意愿状态;

步骤3.6、判断是否成立,若成立,则表示第i个用户Vi期望认领所有子任务并能独立完成,从而根据所述智能合约的规则签订所述智能合约后,执行步骤3.7;否则,执行步骤3.8;

步骤3.7、所述甲方Vα和第i个用户Vi分别对所签订的智能合约进行联合签名,并由矿工将联合签名过的智能合约作为区块添加到区块链的主链上后,矿工在以所述区块TR为起点的支链上的添加终止区块;

步骤3.8、第i个用户Vi对所述任务中的每个子任务的认领意愿状态进行签名,并由矿工将签名过的所有认领意愿状态添加到区块链的支链上,同时将ρ+1赋值给ρ;

步骤四、检查区块链的支链,判断支链上参与智能合约的所有用户是否能众包完成所述智能合约的所有子任务:

步骤4.1、定义所述区块链的支链上的所有用户为{V1′,V2′,...,Vk′,...,Vρ′};Vk′表示所述支链上的第k个用户,1≤k≤ρ;定义第q个子任务tq所分配给的用户记为Vq″;1≤q≤n;初始化Vq″=NULL;

步骤4.2、初始化q=1;

步骤4.3、初始化k=1;

步骤4.4、判断是否成立,若成立,则将Vk′赋值给Vq″,并将q+1赋值给q,返回步骤4.3,直到q=n为止;否则,将k+1赋值给k,返回步骤4.4,直到k=ρ为止;

步骤4.5、初始化q=1;

步骤4.6、判断Vq″=NULL是否成立,若成立,表示存在未认领的子任务,则等待其他用户认领并返回步骤3.2;若不成立,则将q+1赋值给q,返回步骤4.6,直到q=n为止;

步骤4.7、所有子任务均被认领和分配完成,从而根据所述智能合约的规则签订所述智能合约;

步骤4.8、所述甲方Vα和所有分配子任务的用户分别对所签订的智能合约进行联合签名,并由矿工将联合签名过的智能合约作为区块添加到区块链的主链上后,矿工在以所述区块TR为起点的支链上的添加终止区块。

与现有技术相比,本发明的有益效果在于:

1、本发明利用基于区块链的分布式数据存储技术使得构建的众包智能合约在没有第三方的情况下可靠且不可篡改,且众包智能合约以程序的方式执行保障了合约执行结果的可预知性。

2、本发明通过将合约任务以区块的形式分布式发布在区块链主链上,从而省去了第三方的中间环节,使得任务发布方和问题解决者可以直接取得联系;将合约任务发布在区块链主链上也使得任务的来源公开透明、需求的内容和规则不可篡改,从而保证了合约任务发布的可靠性。

3、本发明通过将用户对合约任务的完成意愿记录在以该合约任务区块为首的支链上,从而记录了合约任务认领的整个过程,保证了合约签订过程的公开透明,也保证了签订的合约的可靠性。

4、本发明签订的众包合约是通过双方联合签名的、以可执行程序的形式发布在区块链主链的智能合约,具有自动执行的特点,从而保障了合约执行结果的可预知性,从而避免了合约双方在合约执行过程中可能因结果不满发生纠纷的问题。

附图说明

图1本发明流程图;

图2本发明区块链示意图。

具体实施方式

如图1所示,本实施例中,一种基于区块链的智能合约的众包构建方法是应用于区块链用户之间建立众包的智能合约的,具体的说是按如下步骤执行:

步骤一、定义区块链用户中参与构建众包智能合约的用户集合为U={Vα,V},Vα为众包智能合约构建的甲方,V为众包智能合约构建的乙方集合,并有:V={V1,V2,...,Vi,...,Vm},Vi为乙方集合中的第i个用户,且有1≤i≤m;

本实施例中,分布式的区块链数据存储方式对应的是一个P2P网络,所有使用该区块链存储信息的用户都处于一个对等网络中,无中心节点;区块链的一个区块可以是一段时间内用户之间发生交易的总和,也可以是一个智能合约任务和规则或由合约双方签订并联合签名的自动执行的智能合约,每个区块由区块头和区块主体两部分组成;区块头包含区块主体的哈希值、时间戳和用于链接区块的上一区块哈希值等,区块主体包含实际有效的信息。

步骤二、智能合约任务和规则的发布:

甲方Vα用自身私钥对包含任务和规则的智能合约进行签名,然后由矿工通过共识算法验证签名信息,并将签名过的智能合约作为区块TR添加到区块链的主链上;智能合约的任务记为T={t1,t2,...,tp,...,tn},tp为第p个子任务;1≤p≤n;区块链的其他用户可通过查询主链上的数据或者建立区块链合约任务查询网站获取区块链需求任务信息。因为需求任务通过了全网的共识且通过密码学方法链接在区块链上,所以保证了需求任务的真实和不可篡改。

步骤三、合约任务的认领:

步骤3.1、定义以区块TR为起点的支链上的区块数量为ρ,并初始化ρ=0;

本实施例中,支链是指记录其他用户对该合约任务认领信息的链,所以以合约任务和规则发布在主链上的区块TR为支链起点,如图2所示。将用户认领需求任务的信息记录在区块链上使得该信息公开透明,且通过密码学方法链接使得认领信息不可篡改,防止虚假认领。

步骤3.2、假设第i个用户Vi期望认领合约任务中的若干个子任务,则第i个用户Vi查询区块TR为起点的支链上是否存在终止区块;若存在,则表示智能合约已经签订完成,该合约不会再接受其他用户提出完成合约任务的申请;若不存在,则执行步骤3.3;

步骤3.3、初始化p=1;

步骤3.4、由第i个用户Vi标记任务中第p个子任务tp的认领意愿状态当代表第i个用户Vi期望认领第p个子任务tp;当代表第i个用户Vi不认领第p个子任务tp

步骤3.5、将p+1赋值给p后,返回步骤3.4,直到p=n为止,完成通过从1到n的一次循环完成用户Vi对任务中愿意完成子任务的标记,从而得到第i个用户Vi对所有子任务的认领意愿状态;

步骤3.6、判断是否成立,若成立,则表示第i个用户Vi能够独立完成所有合约子任务,这时合约任务发布的甲方用户和认领合约任务的乙方用户根据智能合约的规则签订所述智能合约,执行步骤3.7;若不成立,则表示第i个用户Vi只能完成合约的部分子任务,执行步骤3.8,将用户Vi的认领意愿记录在支链上;

本实施例中,若有用户能独立完成甲方发布的所有合约子任务,则甲方优先与该乙方签订智能合约而不再考虑其他用户对该合约子任务的认领,且能独立完成合约所有子任务的乙方不必将自己对合约任务的认领记录在支链上。

步骤3.7、甲方Vα和第i个用户Vi分别对所签订的智能合约进行联合签名,并由矿工将联合签名过的智能合约作为区块添加到区块链的主链上,然后由矿工在以区块TR为起点的支链上的添加终止区块;防止其他用户再对该合约任务的认领。

步骤3.8、第i个用户Vi对任务中的n个子任务的认领意愿状态进行签名,然后由矿工通过共识算法验证,并将签名过的认领意愿状态添加到区块链的支链上,同时将ρ+1赋值给ρ;

步骤四、检查区块链的支链,判断支链上参与智能合约的所有用户是否能众包完成智能合约的所有子任务:

步骤4.1、定义区块链的支链上的所有用户为{V1′,V2′,...,Vk′,...,Vρ′};Vk′表示支链上的第k个用户,1≤k≤ρ;定义第q个子任务tq所分配给的用户记为Vq″;1≤q≤n;初始化所有的Vq″=NULL;

步骤4.2、初始化q=1;

步骤4.3、初始化k=1;

步骤4.4、判断是否成立,若成立,则表示支链上的第k个用户能完成第q个合约子任务,将第q个子任务tq拟分配给用户Vk′执行Vq″=Vk′、q=q+1,返回步骤4.3,直到q=n为止;否则,将k+1赋值给k,返回步骤4.4,直到k=ρ为止;

本实施例中,上述双层循环是对支链上用户认领合约子任务的状态进行检查;一次内层循环检查一个子任务是否有用户认领,外层循环q从1到n表示依次对n个子任务进行检查。

步骤4.5、初始化q=1;

步骤4.6、判断Vq″=NULL是否成立,若成立,表示存在未认领的子任务,则等待其他用户认领并返回步骤3.2;若不成立,则将q+1赋值给q,返回步骤4.6,直到q=n为止;用一次循环查找是否还有未被领取的子任务。若不存在Vq″=NULL则表示所有子任务均可被完成,执行步骤4.7。

步骤4.7、所有子任务均被认领和分配完成,从而根据智能合约的规则签订智能合约;

步骤4.8、甲方Vα和所有分配子任务的用户对所签订的智能合约进行联合签名,并由矿工将联合签名过的智能合约作为区块添加到区块链的主链上后,矿工在以区块TR为起点的支链上的添加终止区块。

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