发明内容
本发明是为了解决上述现有技术存在的不足之处,提出一种基于区块链智能合约的预发布平台及其方法,以期能实现预发布成果的存证、追溯、授权、转让等功能,从而使得预发布成果可以方便、安全、高效地在广大用户中进行流转,同时简化传统预发布成果授权转让的流程,大大降低交易成本。
本发明为解决技术问题采用如下技术方案:
本发明一种基于区块链智能合约的预发布平台的特点包括:预发布成果提交与检索子***以及预发布成果追溯与交易子***;
所述预发布成果提交与检索子***包括:成果提交模块、成果检索模块;
所述预发布成果追溯与交易子***包括:智能合约模块、成果存储模块、成果验证模块、事件监听模块、订单发起模块、授权模块、转让模块以及提现模块;
所述成果提交模块获取当前周期的预发布成果的属性信息和源文件并存储到本地数据库中,再根据所述当前周期的预发布成果的源文件计算出当前周期的预发布成果的哈希值并存储到所述本地数据库中;同时根据所述当前周期的预发布成果的属性信息生成唯一编号,从而将所述唯一编号与所述当前周期的预发布成果的源文件进行关联;所述预发布成果的属性信息包括:成果名称、成果关键词、成果摘要、所有者账户、是否可转让、是否可授权;
所述成果检索模块获取所述成果关键词并从所述本地数据库中检索出对应的预发布成果属性信息和源文件,并将所检索到的所述预发布成果的属性信息进行展示;
所述智能合约模块包括:控制器合约CLC、工厂合约RFC、存储合约RSC、中转账户合约MAC、转让合约TOC以及授权合约AC;
所述控制器合约CLC包括:新建中转账户合约函数、新建中转账户合约事件;
所述工厂合约RFC包括:新建存储合约函数、成果哈希-合约映射、新建存储合约事件;
所述存储合约RSC用于存储成果的基本信息;
所述中转账户合约MAC包括:合约创建者、账户余额、冻结周期、授权提现方法、转让提现方法、解冻方法;
所述转让合约TOC包括:转让事件、转让函数;
所述授权合约AC包括:授权事件、授权函数;
所述成果存储模块从所述本地数据库中获取当前周期的预发布成果的唯一编号、当前周期的预发布成果的哈希值、前一周期的预发布成果的哈希值、当前周期的预发布成果的所有者账户,从而构成当前周期的预发布成果的基本信息,其中若不存在前一周期的预发布成果,则设置前一周期的预发布成果的哈希值为“空”;
所述成果存储模块访问所述工厂合约RFC,并调用所述新建存储合约函数创建一个存储合约RSC用于存储所述当前周期的预发布成果的基本信息;所述成果存储模块在所述存储合约RSC创建完成时生成所述存储合约RSC的合约地址以及存储合约RSC创建操作的交易哈希值;所述成果存储模块再访问所述工厂合约RFC中的成果哈希-合约映射并存储所述当前周期预发布成果的哈希值和所述存储合约RSC的合约地址之间的对应关系,并触发所述新建存储合约事件;
当所述事件监听模块监听到所述新建存储合约事件的触发信号,获取所述存储合约RSC的合约地址以及所述存储合约RSC创建操作的交易哈希值,并存储到所述本地数据库中;
所述成果验证模块获取到用户A上传的当前周期的预发布成果的源文件,并计算当前周期的预发布成果的源文件的哈希值,再根据所述源文件的哈希值到本地数据库中查询是否存在对应的存储合约RSC的合约地址,若不存在,则表明无法确定当前周期的预发布成果的真实性;若存在,则所述成果验证模块进一步访问所述工厂合约RFC,并根据所述源文件的哈希值查询所述成果哈希-合约映射来获取到对应的存储合约RSC,从而利用所述存储合约RSC中所存储的当前周期的预发布成果的基本信息来验证用户A上传的当前周期的预发布成果的源文件是否真实,若基本信息中当前周期的预发布成果的哈希值与所计算的当前周期的预发布成果的源文件的哈希值一致,则表明用户A上传的当前周期的预发布成果文件的源文件为真实有效;否则表明用户A上传的当前周期的预发布成果文件的源文件非真实有效;
所述订单发起模块获取用户B提交的授权申请信息或转让申请信息,并根据所述授权申请信息或所述转让申请信息,访问控制器合约CLC中的新建中转账户合约函数来创建所述中转账户合约MAC;
在所述中转账户合约MAC中限定相关条件;
所述订单发起模块在所述中转账户合约MAC创建完成时生成所述中转账户合约MAC的合约地址,并触发所述新建中转账户合约事件;
所述事件监听模块监听到所述新建中转账户合约事件的触发信号后,获取所述申请信息以及所述中转账户合约MAC的合约地址,并发送给所述预发布成果的所有者账户;
若所述预发布成果的所有者账户接收到所述授权申请信息,则调用所述授权模块;
所述授权模块通过访问所述存储合约RSC来验证所述预发布成果的所有者账户是否与所述授权合约的执行者一致;若验证通过,则所述授权合约AC调用所述授权函数用于存储所述授权申请信息,并触发所述授权事件,从而生成授权成功的交易日志;若验证不通过,则授权操作终止;
所述事件监听模块监听到授权事件的触发信号后,将所述授权成功的交易日志返回给所述用户B和所述预发布成果的所有者账户;
所述预发布成果的所有者账户接收到授权成功的交易日志后,通过所述提现模块访问所述授权合约,并验证所述授权合约中存储的授权信息是否与所述用户B的授权申请信息一致,若一致,则表示预发布成果授权成功,则所述预发布成果的所有者账户允许访问所述中转账户合约MAC,从而执行所述中转账户合约MAC中的授权提现方法,并将所述中转账户合约MAC中的授权费用转到所述预发布成果的所有者账户中,以完成所述授权费用的提现操作;若不一致,则表示预发布成果授权失败,终止提现操作;
若所述用户B接收到授权成功的交易日志,则表示所提交的授权信息通过;
若所述用户B没有接收到授权成功的交易日志,则记录用户B的等待授权时间;所述等待授权时间是从用户B发起授权申请开始一直到当前时间的累计值;
若所述用户B的等待授权时间超过所述中转账户合约MAC中的冻结周期,则所述用户B允许访问所述中转账户合约MAC中的解冻方法来将账户余额费用从所述中转账户合约MAC转到用户B中;
若所述预发布成果的所有者账户接收到所述转让申请,则调用所述转让模块;
所述转让模块通过访问所述存储合约RSC来验证所述预发布成果的所有者账户是否与所述转让合约的执行者一致;若验证通过,则所述转让合约TOC访问所述工厂合约RFC,调用所述新建存储合约函数创建所述存储合约RSC,并将所述存储合约RSC中的预发布成果所有者设置为所述申请转让的用户B,从而触发所述转让事件,并生成转让成功的交易日志;若验证不通过,则转让操作终止;
所述事件监听模块监听到转让事件的触发信号后,将所述转让成功的交易日志返回给所述用户B和所述预发布成果的所有者账户;
所述预发布成果的所有者账户接收到转让成功的交易日志后,通过所述提现模块访问所述工厂合约RFC,查询成果哈希-合约映射获取所述存储合约RSC,并根据所述存储合约RSC验证预发布成果所有者账户是否与所述申请转让的用户B一致,若一致,则表示预发布成果转让成功,则所述预发布成果的所有者账户允许访问所述中转账户合约MAC,从而执行所述中转账户合约MAC中的转让提现方法,并将所述中转账户合约MAC中的转让费用转到所述预发布成果的所有者账户中,以完成所述转让费用的提现操作;若不一致,则表示预发布成果转让失败,终止提现操作;
若所述用户B接收到转让成功的交易日志,则表示转让申请已完成;
若所述用户B没有接收到转让成功的交易日志,则记录用户B的等待转让时间;所述等待转让时间是从用户B发起转让申请开始一直到当前时间的累计值;
若所述用户B的等待转让时间超过所述中转账户合约MAC中的冻结周期,则所述用户B允许访问所述中转账户合约MAC中的解冻方法来将账户余额费用从所述中转账户合约MAC转到用户B中。
本发明所述的基于区块链智能合约的预发布平台的特点也在于,
所述相关条件包括:
1)设定所述中转账户合约MAC中的合约创建者为用户;
2)限定用户创建所述中转账户合约MAC时转入所述中转账户合约MAC的金额不小于所述转让费用或授权费用;
3)设置所述中转账户合约MAC的账户余额的冻结期限。
所述授权申请信息包括:预发布成果的名称、预发布成果的唯一编号、用户的账户地址、预发布成果的所有者账户、授权类别、授权时长以及授权费用;
所述转让申请信息包括:预发布成果的名称、预发布成果的唯一编号、用户的账户地址、预发布成果的所有者账户以及转让费用。
本发明一种基于区块链智能合约的预发布方法的特点是按如下步骤进行:
步骤1:获取用户提交的当前周期的预发布成果属性信息和源文件,并计算预发布成果源文件的哈希值,再将预发布成果的属性信息、源文件、源文件的哈希值存储到本地数据库中;同时根据当前周期的预发布成果的属性信息生成唯一编号,从而将所述唯一编号与所述当前周期的源文件进行关联;所述预发布成果的属性信息包括:成果名称、成果关键词、成果摘要、所有者账户、是否可转让、是否可授权;
步骤2:获取用户提交的成果关键词,并从所述本地数据库中检索出相对应的预发布成果属性信息和源文件的,再将所检索到的预发布成果的属性信息进行展示;
步骤3:从本地数据库中获取当前周期的预发布成果的唯一编号、当前周期的预发布成果的哈希值、前一周期的预发布成果的哈希值、当前周期的预发布成果的所有者账户从而构成当前周期的预发布成果的基本信息,其中若不存在前一周期的预发布成果,则设置前一周期的预发布成果的哈希值为“空”;
步骤4:从本地数据库中获取所述预发布成果的基本信息,调用所述工厂合约RFC中的新建存储合约函数创建存储合约RSC,从而将所述预发布成果的基本信息存储到所述存储合约RSC中,并生成所述存储合约RSC的合约地址以及存储合约RSC创建操作的交易哈希值;
步骤5:访问所述工厂合约RFC中的成果哈希-合约映射并存储所述当前周期预发布成果的哈希值与所述存储合约RSC的合约地址之间的对应关系,并触发所述新建存储合约事件,以获取所述存储合约RSC的合约地址以及存储合约RSC创建操作的交易哈希值,并将所述合约地址和交易哈希值存储到本地数据库中;
步骤6:获取用户提交的业务请求,若所述业务请求是成果验证请求,则获取用户提交的预发布成果的源文件,计算所述预发布成果的的源文件哈希值CalculatedHash;再根据所述源文件的哈希值在本地数据库中查询是否存在对应的所述存储合约RSC的合约地址,若不存在,则表示无法确定当前周期的预发布成果的真实性;若存在,则进一步访问所述工厂合约RFC,并根据所述源文件的预发布成果的哈希值CalculatedHash查询所述成果哈希-合约映射来获取对应的存储合约RSC,从而利用所述存储合约RSC中存储的预发布成果的哈希值与所述预发布成果的哈希值CalculatedHash进行比较,若一致,则表明用户提交的预发布成果真实有;否则表明用户提交的发布成果非真实有效;
若所述业务请求是成果追溯请求,则进入步骤7;
若所述业务请求是成果授权请求,则进入步骤9;
若所述业务请求是转让请求,则进入步骤12;
步骤7:获取所述当前周期的预发布成果的哈希值Hash,并根据所述当前周期的预发布成果的哈希值Hash访问所述工厂合约RFC中的成果哈希-合约映射以获取对应的所述存储合约RSC;
步骤8:获取所述存储合约RFC中存储的预发布成果的基本信息并存储到列表List中;并根据所述预发布成果的基本信息中的前一周期的预发布成果的哈希值prevHash进行追溯,若所述前一周期的预发布成果的哈希值prevHash为空,则返回所述列表List;反之将所述前一周期的预发布成果的哈希值prevHash赋值给所述当前周期的预发布成果的哈希值Hash,并返回步骤5;
步骤9:获取所述成果授权请求,并访问所述控制器合约CLC中的所述新建中转账户合约函数来新建所述中转账户合约MAC;
在所述中转账户合约MAC中限定相关条件;
在所述中转账户合约MAC创建完成时生成所述中转账户合约MAC的合约地址,并触发所述新建中转账户合约事件,以获取所述申请信息以及所述中转账户合约MAC的合约地址,并发送给所述预发布成果的所有者账户;
步骤10:访问所述存储合约RSC来验证所述预发布成果的所有者账户是否与所述授权合约AC的执行者一致,若一致,则调用所述授权函数将所述成果授权请求存储到所述授权合约AC中,并触发所述授权事件,从而获取授权成功的交易日志并返回给所述用户和所述预发布成果的所有者账户;若不一致,则授权操作终止;
若用户接收到所述授权成功的交易日志,则表明授权成功;若用户没接收到所述授权成功的交易日志,则记录用户的等待授权时间,并执行步骤9;所述等待授权时间是从用户B发起授权申请开始一直到当前时间的累计值;
若所述预发布成功的所有者账户接收到所述授权成功的交易日志,则访问所述授权合约,并验证所述授权合约中存储的授权信息是否与所述用户的授权申请信息一致,若一致,则表示预发布成果授权成功,则所述预发布成果的所有者账户允许访问所述中转账户合约MAC,从而执行所述中转账户合约MAC中的授权提现方法,并将所述中转账户合约MAC中的授权费用转到所述预发布成果的所有者账户中,以完成所述授权费用的提现操作;若不一致,则表示预发布成果授权失败,终止提现操作;
步骤11:若用户的等待授权时间超过所述中转账户合约MAC中的冻结周期,则调用所述中转账户合约中的解冻方法,将所述中转账户合约MAC中的账户余额转到所述用户中;
步骤12:获取所述成果转让请求,并访问所述控制器合约CLC中的所述新建中转账户合约函数来新建所述中转账户合约MAC,所述成果转让请求包括:预发布成果的名称、预发布成果的唯一编号、用户的账户地址、预发布成果的所有者账户以及转让费用;
在所述中转账户合约MAC中限定相关条件;
在所述中转账户合约MAC创建完成时生成所述中转账户合约MAC的合约地址,并触发所述新建中转账户合约事件,以获取所述申请信息以及所述中转账户合约MAC的合约地址,并发送给所述预发布成果的所有者账户;
步骤13:访问所述存储合约RSC来验证所述预发布成果的所有者账户是否与所述转让合约TOC的执行者一致,若一致,则调用所述工厂合约RFC的新建存储合约函数创建存储合约RSC,并将存储合约RSC中的预发布成果所有者账户设置为所述转让申请的用户,触发所述转让事件,以获取转让成功的交易日志并将返回给所述用户和所述预发布成果的所有者账户;若不一致,则转让操作终止;
若用户接收到所述转让成功的交易日志,则表示转让成功;若所述用户B没有接收到转让成功的交易日志,则记录用户B的等待转让时间,并进入步骤14;所述等待转让时间是从用户B发起转让申请开始一直到当前时间的累计值;
若所述预发布成功的所有者账户接收到所述转让成功的交易日志,则访问所述工厂合约RFC,查询成果哈希-合约映射获取所述存储合约RSC,并根据所述存储合约RSC验证预发布成果所有者账户是否与所述申请转让的用户一致,若一致,则表示预发布成果转让成功,则所述预发布成果的所有者账户允许访问所述中转账户合约MAC,从而执行所述中转账户合约MAC中的转让提现方法,并将所述中转账户合约MAC中的转让费用转到所述预发布成果的所有者账户中,以完成所述转让费用的提现操作;若不一致,则表示预发布成果转让失败,终止提现操作;
步骤14:若用户等待转让的时间超过了所述中转账户合约MAC中的冻结周期,则调用所述中转账户合约中的解冻方法,将所述中转账户合约中的账户余额转到所述用户账户中。
本发明所述的基于区块链智能合约的预发布方法的特点也在于,所述步骤9中的相关条件包括:
1)设定所述中转账户合约MAC中的合约创建者为用户;
2)限定用户创建所述中转账户合约MAC时转入所述中转账户合约MAC的金额不小于所述授权费用;
3)设置所述中转账户合约MAC的账户余额的冻结期限。
所述步骤12中的相关条件包括:
1)设定所述中转账户合约MAC中的合约创建者为用户;
2)限定用户创建所述中转账户合约MAC时转入所述中转账户合约MAC的金额不小于所述转让费用;
3)设置所述中转账户合约MAC的账户余额的冻结期限。
所述步骤9中的成果授权请求包括:预发布成果的名称、预发布成果的唯一编号、用户的账户地址、预发布成果的所有者账户、授权类别、授权时长以及授权费用;
所述中转账户合约MAC包括:合约创建者、账户余额、冻结周期、授权提现方法、转让提现方法、解冻方法。
与现有技术相比,本发明的有益效果在于:
1、本发明利用区块链技术保证了存证的可靠性和取证的有效性,通过智能合约实现去中心化的预发布成果授权与转让,提供了预发布成果的存证与追溯服务,实现了预发布成果存证、追溯、授权、转让等功能。不仅能够方便用户实现预发布成果的存证、取证,通过区块链技术,保证了存证的可靠性和取证的有效性,同时还开辟了预发布成果链上授权与转让的新型服务,并实现了所得收益的自动化分配,通过智能合约实现去中心化的预发布成果授权与转让,简化了传统预发布成果授权转让的流程,大大降低了交易成本。
2、本发明利用哈希函数计算预发布成果的数字指纹,并将数字指纹、时间戳存储到区块链中,并用用户的私钥对该笔存储交易进行签名,从而实现了科研成果所有权的链上存证。
3、本发明基于预发布成果的链上存证信息,可通过访问工厂合约和存储合约实现成果的验证与追溯。利用智能合约作为可信第三方,实现了申请者与所有者之间可直接进行成果授权与转让,从而最大程度上维护了所有者的利益。
具体实施方式
本实施例中,一种基于区块链智能合约的预发布平台的组成包括:预发布成果提交与检索子***以及预发布成果追溯与交易子***;预发布成果提交与检索子***包括:成果提交模块、成果检索模块;预发布成果追溯与交易子***包括:智能合约模块、成果存储模块、成果验证模块、事件监听模块、订单发起模块、授权模块、转让模块以及提现模块;
用户通过成果提交模块进行身份证明材料的上传、源文件的上传以及成果描述等,包括详细了解预发布平台的授权协议、承诺诚实行为、上传成果源文件及身份证明、对成果进行描述、确认成果的上传等步骤。成果提交模块获取当前周期的预发布成果的属性信息和源文件并存储到本地数据库中,再根据当前周期的预发布成果的源文件计算出当前周期的预发布成果的哈希值并存储到本地数据库中;同时根据当前周期的预发布成果的属性信息生成唯一编号,从而将唯一编号与当前周期的源文件进行关联;预发布成果的属性信息包括:成果名称、成果关键词、成果摘要、所有者账户、是否可转让、是否可授权;
当用户在预发布平台上进行检索操作时,成果检索模块获取成果关键词并从本地数据库中检索出相对应的预发布成果属性信息和源文件,并根据获取到的成果属性信息在区块链上进行查询,最后将所检索到的预发布成果的属性信息进行展示,流程如图1所示;检索方式包括两类:分别是模糊检索以及高级选择检索(精准查询)。
智能合约模块包括:控制器合约CLC、工厂合约RFC、存储合约RSC、中转账户合约MAC、转让合约TOC以及授权合约AC;
控制器合约CLC包括:新建中转账户合约函数、新建中转账户合约事件;其中,工厂合约、授权合约、转让合约以及中转账户合约都可以通过控制器合约来生成。
工厂合约RFC包括:新建存储合约函数、成果哈希-合约映射、新建存储合约事件;
中转账户合约MAC包括:合约创建者、账户余额、冻结周期、授权提现方法、转让提现方法、解冻方法;
转让合约TOC包括:转让事件、转让函数,记录了科研成果的转让过程,并在执行转让函数时需要访问存储合约来验证该科研成果的所有者信息。若验证通过,则调用工厂合约生成一份新的存储合约RSC;存储合约RSC主要存储成果的基本信息,用于成果的存证、追溯和验证;中转账户合约MAC的作用类似于中心化***中的可信第三方。在申请授权或转让预发布成果时,申请者首先会调用MAC执行转账和冻结操作(将授权或转让费用转到MAC账户中,且在合约中设定了冻结时间和解冻条件)。然后当授权或转让操作完成后,所有者会访问MAC合约并提取合约账户中的余额。当所有者执行提现操作时,该提现函数会先验证授权或转让操作是否成功。若验证成功则所有者可以继续执行提现操作,否则等超过解冻时间后可由申请者执行解冻操作取回预交的费用。
授权合约AC包括:授权事件、授权函数,用于记录预发布成果的授权过程;
成果存储模块从本地数据库中获取当前周期的预发布成果的唯一编号、当前周期的预发布成果的哈希值、前一周期的预发布成果的哈希值、当前周期的预发布成果的所有者账户从而构成当前周期的预发布成果的基本信息,其中若不存在前一周期的预发布成果,则设置前一周期的预发布成果的哈希值为“空”;
成果存储模块访问工厂合约RFC,并调用新建存储合约函数创建一个存储合约RSC用于存储当前周期的预发布成果的基本信息;成果存储模块在存储合约RSC创建完成时生成存储合约RSC的合约地址以及存储合约RSC创建操作的交易哈希值;成果存储模块再访问工厂合约RFC中的成果哈希-合约映射并存储当前周期预发布成果的哈希值和存储合约RSC的合约地址之间的对应关系,并触发新建存储合约事件;
当事件监听模块监听到新建存储合约事件的触发信号,获取存储合约RSC的合约地址以及存储合约RSC创建操作的交易哈希值,并存储到本地数据库中;
成果验证模块获取到用户A上传的当前周期的预发布成果的源文件,并计算当前周期的预发布成果的源文件的哈希值,再根据源文件的哈希值到本地数据库中查询是否存在对应的存储合约RSC的合约地址,若不存在,则表明无法确定当前周期的预发布成果的真实性;若存在,则成果验证模块进一步访问工厂合约RFC,并根据源文件的哈希值查询成果哈希-合约映射来获取到对应的存储合约RSC,从而利用存储合约RSC中所存储的当前周期的预发布成果的基本信息来验证用户A上传的当前周期的预发布成果的源文件是否真实,若基本信息中当前周期的预发布成果的哈希值与所计算的当前周期的预发布成果的源文件的哈希值一致,则表明用户A上传的当前周期的预发布成果文件的源文件为真实有效;否则表明用户A上传的当前周期的预发布成果文件的源文件非真实有效;
订单发起模块获取用户B提交的授权申请信息或转让申请信息,并根据授权申请信息或转让申请信息,访问控制器合约CLC中的新建中转账户合约函数来创建中转账户合约MAC;授权申请信息包括:预发布成果的名称、预发布成果的唯一编号、用户的账户地址、预发布成果的所有者账户、授权类别、授权时长以及授权费用;转让申请信息包括:预发布成果的名称、预发布成果的唯一编号、用户的账户地址、预发布成果的所有者账户以及转让费用;中转账户合约MAC包括:合约创建者、账户余额、冻结周期、授权提现方法、转让提现方法、解冻方法;
在中转账户合约MAC中限定相关条件,包括:
1)设定中转账户合约MAC中的合约创建者为用户;
2)限定用户创建中转账户合约MAC时转入中转账户合约MAC的金额不小于转让费用或授权费用;
3)设置中转账户合约MAC的账户余额的冻结期限;
订单发起模块在中转账户合约MAC创建完成时生成中转账户合约MAC的合约地址,并触发新建中转账户合约事件;
事件监听模块监听到新建中转账户合约事件的触发信号后,获取申请信息以及中转账户合约MAC的合约地址,并发送给预发布成果的所有者账户;
若预发布成果的所有者账户接收到授权申请信息,则调用授权模块;
授权模块通过访问存储合约RSC来验证预发布成果的所有者账户是否与授权合约的执行者一致;若验证通过,则授权合约AC调用授权函数用于存储授权申请信息,并触发授权事件,从而生成授权成功的交易日志;若验证不通过,则授权操作终止;
事件监听模块监听到授权事件的触发信号后,将授权成功的交易日志返回给用户B和预发布成果的所有者账户;
预发布成果的所有者账户接收到授权成功的交易日志后,通过提现模块访问授权合约,并验证授权合约中存储的授权信息是否与用户B的授权申请信息一致,若一致,则表示预发布成果授权成功,则预发布成果的所有者账户允许访问中转账户合约MAC,从而执行中转账户合约MAC中的授权提现方法,并将中转账户合约MAC中的授权费用转到预发布成果的所有者账户中,以完成授权费用的提现操作;若不一致,则表示预发布成果授权失败,终止提现操作;
若用户B接收到授权成功的交易日志,则表示所提交的授权信息通过;
若用户B没有接收到授权成功的交易日志,则记录用户B的等待授权时间;等待授权时间是从用户B发起授权申请开始一直到当前时间的累计值;
若用户B的等待授权时间超过中转账户合约MAC中的冻结周期,则用户B允许访问中转账户合约MAC中的解冻方法来将账户余额费用从中转账户合约MAC转到用户B中;
若预发布成果的所有者账户接收到转让申请,则调用转让模块;
转让模块通过访问存储合约RSC来验证预发布成果的所有者账户是否与转让合约的执行者一致;若验证通过,则转让合约TOC访问工厂合约RFC,调用新建存储合约函数创建存储合约RSC,并将存储合约RSC中的预发布成果所有者设置为申请转让的用户B,从而触发转让事件,并生成转让成功的交易日志;若验证不通过,则转让操作终止;
事件监听模块监听到转让事件的触发信号后,将转让成功的交易日志返回给用户B和预发布成果的所有者账户;
预发布成果的所有者账户接收到转让成功的交易日志后,通过提现模块访问工厂合约RFC,查询成果哈希-合约映射获取存储合约RSC,并根据存储合约RSC验证预发布成果所有者账户是否与申请转让的用户B一致,若一致,则表示预发布成果转让成功,则预发布成果的所有者账户允许访问中转账户合约MAC,从而执行中转账户合约MAC中的转让提现方法,并将中转账户合约MAC中的转让费用转到预发布成果的所有者账户中,以完成转让费用的提现操作;若不一致,则表示预发布成果转让失败,终止提现操作;
若用户B接收到转让成功的交易日志,则表示转让申请已完成;
若用户B没有接收到转让成功的交易日志,则记录用户B的等待转让时间;等待转让时间是从用户B发起转让申请开始一直到当前时间的累计值;
若用户B的等待转让时间超过中转账户合约MAC中的冻结周期,则用户B允许访问中转账户合约MAC中的解冻方法来将账户余额费用从中转账户合约MAC转到用户B中。
通过预发布成果追溯与交易子***,申请者和所有者可以在不需要可信第三方参与的情况下完成授权过程,具体的授权过程如下图2所示:
步骤1:申请者提交授权请求后,订单发起模块将会接收到申请者提交的申请信息。此时订单发起模块访问控制器合约CLC创建中转账户合约。在创建中转账户合约时会限定一系列条件:a.设定该合约的创建者即为申请者;b.合约中的转账对象即为成果所有者;c.限定申请者创建合约时转入合约账户的金额不小于授权费用;d.设定中转账户合约余额的冻结期限为一周。
步骤2:事件监听模块监听到成功创建中转账户合约后,将申请信息和中转账户合约地址发送给所有者。所有者接收到请求后,调用成果授权模块中的申请校验接口。该接口根据中转账户合约地址创建中转账户合约实例,并校验申请内容。验证通过后进行下一步操作。
步骤3:调用成果授权模块的授权接口。在该接口中通过调用授权合约来实现授权过程。首先调用存储合约RSC校验该成果的所有者是否为合约执行者。若验证通过,则继续授权过程,触发授权事件。申请者和所有者可通过事件监听模块监听合约执行的结果。若双方都接收到合约执行成功的回执信息,则获取授权交易日志并进行下一步操作。若申请者没有接收到授权成功的回执消息,则进入步骤5。
步骤4:在回调函数中调用提现模块中的提取授权费用接口,从而访问中转账户合约中的提现方法。在执行提现操作前,***会先调用授权合约验证授权是否成功。若验证成功,所有者才能继续提现。最后中转账户合约根据所有者的贡献值按比例将费用转到所有者账户,完成授权过程。
步骤5:若当前时间超过了中转账户合约中设定的费用冻结时间,那么申请者可以执行解冻操作,将费用从合约中取回。
具体转让过程与授权过程类似;
本实施例中,一种基于区块链智能合约的预发布方法是按如下步骤进行:
步骤1:获取用户提交的当前周期的预发布成果属性信息和源文件,并计算预发布成果源文件的哈希值,再将预发布成果的属性信息、源文件、源文件的哈希值存储到本地数据库中;同时根据当前周期的预发布成果的属性信息生成唯一编号,从而将唯一编号与当前周期的源文件进行关联;预发布成果的属性信息包括:成果名称、成果关键词、成果摘要、所有者账户、是否可转让、是否可授权;
步骤2:获取用户提交的成果关键词,并从本地数据库中检索出相对应的预发布成果属性信息和源文件的,再将所检索到的预发布成果的属性信息进行展示;
步骤3:从本地数据库中获取当前周期的预发布成果的唯一编号、当前周期的预发布成果的哈希值、前一周期的预发布成果的哈希值、当前周期的预发布成果的所有者账户从而构成当前周期的预发布成果的基本信息,其中若不存在前一周期的预发布成果,则设置前一周期的预发布成果的哈希值为“空”;
步骤4:从本地数据库中获取预发布成果的基本信息,调用工厂合约RFC中的新建存储合约函数创建存储合约RSC,从而将预发布成果的基本信息存储到存储合约RSC中,并生成存储合约RSC的合约地址以及存储合约RSC创建操作的交易哈希值;
步骤5:访问工厂合约RFC中的成果哈希-合约映射并存储当前周期预发布成果的哈希值与存储合约RSC的合约地址之间的对应关系,并触发新建存储合约事件,以获取存储合约RSC的合约地址以及存储合约RSC创建操作的交易哈希值,并将合约地址和交易哈希值存储到本地数据库中;
步骤6:获取用户提交的业务请求,若业务请求是成果验证请求,则获取用户提交的预发布成果的源文件,计算预发布成果的的源文件哈希值CalculatedHash;再根据源文件的哈希值在本地数据库中查询是否存在对应的存储合约RSC的合约地址,若不存在,则表示无法确定当前周期的预发布成果的真实性;若存在,则进一步访问工厂合约RFC,并根据源文件的预发布成果的哈希值CalculatedHash查询成果哈希-合约映射来获取对应的存储合约RSC,从而利用存储合约RSC中存储的预发布成果的哈希值与预发布成果的哈希值CalculatedHash进行比较,若一致,则表明用户提交的预发布成果真实有;否则表明用户提交的发布成果非真实有效;
若业务请求是成果追溯请求,则进入步骤7;
若业务请求是成果授权请求,则进入步骤9;
若业务请求是转让请求,则进入步骤12;
步骤7:获取当前周期的预发布成果的哈希值Hash,并根据当前周期的预发布成果的哈希值Hash访问工厂合约RFC中的成果哈希-合约映射以获取对应的存储合约RSC;
步骤8:如图3所示,获取存储合约RSC中存储的预发布成果的基本信息并存储到列表List中;并根据预发布成果的基本信息中的前一周期的预发布成果的哈希值prevHash进行追溯,若前一周期的预发布成果的哈希值prevHash为空,则返回列表List;反之将前一周期的预发布成果的哈希值prevHash赋值给当前周期的预发布成果的哈希值Hash,并返回步骤6;
步骤9:获取成果授权请求,并访问控制器合约CLC中的新建中转账户合约函数来新建中转账户合约MAC;成果授权请求包括:预发布成果的名称、预发布成果的唯一编号、用户的账户地址、预发布成果的所有者账户、授权类别、授权时长以及授权费用;中转账户合约MAC包括:合约创建者、账户余额、冻结周期、授权提现方法、转让提现方法、解冻方法;
在中转账户合约MAC中限定相关条件,包括:
1)设定中转账户合约MAC中的合约创建者为用户;
2)限定用户创建中转账户合约MAC时转入中转账户合约MAC的金额不小于授权费用;
3)设置中转账户合约MAC的账户余额的冻结期限;
在中转账户合约MAC创建完成时生成中转账户合约MAC的合约地址,并触发新建中转账户合约事件,以获取申请信息以及中转账户合约MAC的合约地址,并发送给预发布成果的所有者账户;
步骤10:访问存储合约RSC来验证预发布成果的所有者账户是否与授权合约AC的执行者一致,若一致,则调用授权函数将成果授权请求存储到授权合约AC中,并触发授权事件,从而获取授权成功的交易日志并返回给用户和预发布成果的所有者账户;若不一致,则授权操作终止;
若用户接收到授权成功的交易日志,则表明授权成功;若用户没接收到授权成功的交易日志,则记录用户的等待授权时间,并执行步骤11;等待授权时间是从用户B发起授权申请开始一直到当前时间的累计值;
若预发布成功的所有者账户接收到授权成功的交易日志,则访问授权合约,并验证授权合约中存储的授权信息是否与用户的授权申请信息一致,若一致,则表示预发布成果授权成功,则预发布成果的所有者账户允许访问中转账户合约MAC,从而执行中转账户合约MAC中的授权提现方法,并将中转账户合约MAC中的授权费用转到预发布成果的所有者账户中,以完成授权费用的提现操作;若不一致,则表示预发布成果授权失败,终止提现操作;
步骤11:若用户的等待授权时间超过中转账户合约MAC中的冻结周期,则调用中转账户合约中的解冻方法,将中转账户合约MAC中的账户余额转到用户中;
步骤12:获取成果转让请求,并访问控制器合约CLC中的新建中转账户合约函数来新建中转账户合约MAC,成果转让请求包括:预发布成果的名称、预发布成果的唯一编号、用户的账户地址、预发布成果的所有者账户以及转让费用;
在中转账户合约MAC中限定相关条件,包括:
1)设定中转账户合约MAC中的合约创建者为用户;
2)限定用户创建中转账户合约MAC时转入中转账户合约MAC的金额不小于转让费用;
3)设置中转账户合约MAC的账户余额的冻结期限;
在中转账户合约MAC创建完成时生成中转账户合约MAC的合约地址,并触发新建中转账户合约事件,以获取申请信息以及中转账户合约MAC的合约地址,并发送给预发布成果的所有者账户;
步骤13:访问存储合约RSC来验证预发布成果的所有者账户是否与转让合约TOC的执行者一致,若一致,则调用工厂合约RFC的新建存储合约函数创建存储合约RSC,并将存储合约RSC中的预发布成果所有者账户设置为转让申请的用户,触发转让事件,以获取转让成功的交易日志并将返回给用户和预发布成果的所有者账户;若不一致,则转让操作终止;
若用户接收到转让成功的交易日志,则表示转让成功;若用户B没有接收到转让成功的交易日志,则记录用户B的等待转让时间,并进入步骤14;等待转让时间是从用户B发起转让申请开始一直到当前时间的累计值;
若预发布成功的所有者账户接收到转让成功的交易日志,则访问工厂合约RFC,查询成果哈希-合约映射获取存储合约RSC,并根据存储合约RSC验证预发布成果所有者账户是否与申请转让的用户一致,若一致,则表示预发布成果转让成功,则预发布成果的所有者账户允许访问中转账户合约MAC,从而执行中转账户合约MAC中的转让提现方法,并将中转账户合约MAC中的转让费用转到预发布成果的所有者账户中,以完成转让费用的提现操作;若不一致,则表示预发布成果转让失败,终止提现操作;
步骤14:若用户等待转让的时间超过了中转账户合约MAC中的冻结周期,则调用中转账户合约中的解冻方法,将中转账户合约中的账户余额转到用户账户中。