[发明专利]一种基于智能合约的投票提案生命周期管理方法有效
申请号: | 201911188201.8 | 申请日: | 2019-11-28 |
公开(公告)号: | CN111062060B | 公开(公告)日: | 2022-04-26 |
发明(设计)人: | 尹可挺;邱炜伟;李伟;匡立中;薛英才 | 申请(专利权)人: | 杭州趣链科技有限公司 |
主分类号: | G06F21/64 | 分类号: | G06F21/64;G06Q40/04 |
代理公司: | 杭州求是专利事务所有限公司 33200 | 代理人: | 贾玉霞 |
地址: | 310051 浙江省杭州市*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 智能 合约 投票 提案 生命周期 管理 方法 | ||
1.一种基于智能合约的投票提案生命周期管理方法,其特征在于,包括如下步骤:
步骤一:初始化合约:
通过内置合约或者部署合约的方式,使得区块链上具有一个逻辑执行需要经过若干具有投票权限的用户许可的投票提案合约;投票提案合约所包含的要素包括:一个投票提案管理组件和若干个负责执行具体逻辑的功能组件;所述的功能组件具有各自的数据结构和函数,但是函数不对合约外部暴露,也就是不可以由用户直接调用,只允许通过所述的投票提案管理组件进行间接调用;
步骤二:根据用户的需求对投票提案合约进行对应操作,进而进行提案状态变更:
(1)当用户需要发起提案,希望通过投票执行某一个合约不对外暴露的功能函数时,发起者确定希望调用的智能合约的目标函数和参数,在客户端根据投票提案管理组件中的标识符到功能函数的映射表以及数据序列化协议,将调用所需要的函数和参数的信息转换为函数标识符和参数序列化字符串,然后将函数标识符和参数序列化字符串作为合约调用的参数,以合约调用交易的形式向区块链节点发送带有数字签名的请求,调用投票提案管理组件的对外暴露的proposal提案函数;当交易被发送到区块链节点上后,首先验证数字签名,然后进行共识;在共识结束后,产生所有区块链节点一致的区块时间戳,即交易打包时间戳;在这之后,区块链节点的执行器运行请求调用的proposal提案函数时,分为以下几个子步骤来执行:
(1.1)检查合约状态数据中已有的提案:如果当前状态数据中没有提案,那么直接进入步骤(1.2);如果合约的状态数据中已有提案,且提案超时,则先将状态数据中提案状态置为“超时”,然后进入步骤(1.2);如果当前状态数据中已有提案,并且提案未超时,则直接进入步骤(1.2);
(1.2)分别检查新提案和已有提案正确性;
对于新提案,如果合约调用交易中交易的发起者能够在投票者地址到权重的映射表中找到,目标函数标识符能根据标识符到功能函数的映射表正确地映射到相应的功能函数,序列化参数字符串能根据序列化协议正确转换成函数所需要的参数,那么将执行步骤(1.3),否则将返回错误并退出;
对于已有提案,检查当前状态数据中提案状态为“超时”、“禁止”或“生效”时,则执行步骤(1.3),否则将返回错误并退出;
(1.3)更新合约状态数据中的提案;
将已有提案从状态数据中销毁,令状态数据中的提案计数器加一,其结果作为新提案的编号;将当前交易中包含的发起者、函数标识符、参数序列化字符串、提案编号以及根据交易打包时间戳与提案超时时限所生成的提案超时时间戳组合,一起构成新提案的信息;接着将新提案的状态置为审批;在这之后,将提案的数据存放到状态数据中;最后,将提案的数据序列化,通过区块链平台提供的消息接口,将新提案的信息推送到其他具有投票权利的用户的客户端;
(2)当具有投票权利的用户收到提案信息的推送,希望对提案进行投票时:投票者根据所获得的提案信息,评估合约执行的后果,进而产生对提案的支持或反对意见;投票者在客户端组合提案编号、提案的交易打包时间和本人的投票,生成带有数字签名的请求并发送到区块链节点上,以调用投票提案合约的vote投票函数;区块链节点在收到了请求之后,首先验证请求的签名,然后进行共识;共识结束之后,生成所有区块链节点一致的区块时间戳,即交易打包时间戳;在这之后,区块链节点的执行器运行请求调用的vote投票函数时,分为以下几个子步骤来执行:
(2.1)检查合约状态数据中已有的提案:如果当前状态数据中没有提案,则将错误返回并退出;如果合约的状态数据中已有提案,并且提案超时,则将状态数据中提案状态置为超时,然后将错误返回并退出;如果当前状态数据中已有提案,并且提案未超时,则进入步骤(2.2);
(2.2)检查投票的正确性:如果投票的发送者能够在投票者地址到权重的映射表中找到,投票请求中的提案编号、提案的交易打包时间等于合约状态数据中提案的编号和交易打包时间,并且当前合约状态数据中的提案状态为审批,那么认为投票是正确的,执行步骤(2.3);否则,将错误返回并退出;
(2.3)更新投票结果:如果投票者同意执行提案,则将投票者的地址更新到合约状态数据中提案的同意者列表中,再根据提案同意者列表和投票者地址到权重的映射表,计算同意提案的投票者的总权重,如果计算结果大于等于提案通过的最小阈值,则将合约状态数据中当前提案状更新为通过,并通过区块链平台提供的消息接口将提案的状态、编号、交易打包时间戳组成消息发送提案发起者,然后结束执行;如果投票者反对执行提案,则将投票者的地址更新到合约状态数据中的提案的反对者列表中,再根据提案反对者列表和投票者地址到权重的映射表,计算反对者的总权重和所有投票者的总权重,如果所有投票者的总权重减去反对者的总权重小于提案通过的最小阈值,那么将合约状态数据中提案状态更新为禁止,并在区块链平台提供的消息接口将提案的状态、编号、交易打包时间戳组成消息发送给提案发起者,然后结束执行;如果同意提案的投票者的总权重和反对者的总权重均未超过阈值,直接结束执行;
(3)当提案发起者希望执行自己发起的提案时:提案的发起者应该以自己收到的提案通过消息中所附带的提案编号、交易打包时间戳作为参数,在客户端生成请求调用合约的execute函数发送到区块链节点上;区块链节点在收到了请求之后,首先验证请求的签名,然后进行共识;共识结束之后,生成所有区块链节点一致的区块时间戳,即交易打包时间戳;在这之后,区块链节点的执行器运行请求调用的execute执行函数,分为以下几个子步骤来执行:
(3.1)检查合约状态数据中已有的提案:如果当前状态数据中没有提案,则将错误返回并退出;如果合约的状态数据中已有提案,并且提案超时,则将状态数据中提案状态置为超时,然后将错误返回并退出如果当前状态数据中已有提案,并且提案未超时,则进入步骤(3.2);
(3.2)检查执行请求的正确性:如果执行请求的发起者是当前合约状态数据中提案的发起者,且执行请求中的提案编号、交易打包时间戳等于当前合约状态数据中提案的编号、交易打包时间,并且当前合约状态数据中提案为通过,则认为执行请求是正确的,进行步骤(3.3);否则,直接结束执行,将返回错误并退出;
(3.3)执行提案:根据函数标识符到目标函数的映射表,将合约状态数据中当前提案所包含的目标函数标识符映射到提案所要执行的函数,再通过反序列化协议将参数序列化字符串转换成实际参数,调用目标函数真正执行,执行的结果通过序列化协议转化成字符串存入回执;
(4)当用户希望查询合约状态中的提案时:用户在客户端构建带有数字签名的请求发送到区块链节点,以调用提案投票合约的query函数;区块链节点在收到了请求之后,首先验证请求的签名,然后进行共识;共识结束之后,会生成所有区块链节点一致的区块时间戳,即交易打包时间戳;在这之后,区块链节点的执行器运行请求调用的query执行函数时,分为以下几个子步骤来执行:
(4.1)检查合约状态数据中已有的提案,如果当前状态数据中没有提案,则将错误返回并退出;如果合约的状态数据中已有提案,并且提案超时,则将状态数据中提案状态置为超时,然后进入步骤(4.2);如果当前状态数据中已有提案,并且提案未超时,则进入步骤(4.2);
(4.2)检查查询请求的正确性,如果投票的发送者能够在投票者地址到权重的映射表中找到,那么认为查询请求是正确的,那么将直接返回提案的序列化结果;否则,将错误返回并退出。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州趣链科技有限公司,未经杭州趣链科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201911188201.8/1.html,转载请声明来源钻瓜专利网。
- 上一篇:塔杆巡检系统
- 下一篇:具悬浮自走旋翼飞刀的割草机