CN111062060B - 一种基于智能合约的投票提案生命周期管理方法 - Google Patents
一种基于智能合约的投票提案生命周期管理方法 Download PDFInfo
- Publication number
- CN111062060B CN111062060B CN201911188201.8A CN201911188201A CN111062060B CN 111062060 B CN111062060 B CN 111062060B CN 201911188201 A CN201911188201 A CN 201911188201A CN 111062060 B CN111062060 B CN 111062060B
- Authority
- CN
- China
- Prior art keywords
- proposal
- contract
- state data
- voting
- function
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Finance (AREA)
- Accounting & Taxation (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Health & Medical Sciences (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- General Business, Economics & Management (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开一种基于智能合约的投票提案生命周期管理方法,该方法通过在智能合约的功能逻辑之外封装一个投票提案管理组件,作为对功能逻辑调用的中介,通过投票提案管理组件所暴露的查询、提案、投票、执行接口来进行智能合约中投票提案生命周期的管理,使得用户可以借助区块链平台上的智能合约,经过若干用户授权认证以执行合约的功能逻辑。由于本发明与智能合约的实现语言无关、与智能合约的功能逻辑无关、与智能合约的部署方式无关,因此用户可以基于本发明所描述的方法自由扩展,设计任意区块链平台和任意语言、任意需要多用户授权功能的智能合约。
Description
技术领域
本发明涉及区块链智能合约的设计和开发技术领域,具体涉及一种基于智能合约的投票提案生命周期管理方法。
背景技术
区块链是一种新型去中心化协议,能安全地存储数字货币交易或其他数据,信息不可伪造和篡改,区块链上的交易确认由区块链上的所有节点共同完成,由共识算法保证其一致性,区块链上维护一个公共的账本,用于存储区块链网络上所有用户的余额,公共账本位于存储区块上任何节点可见,从而保证其不可伪造和篡改。
区块链由于其特殊的链式数据存储结构,使得直接基于区块链实现结构化数据的增删改查操作变得困难,而开发智能合约可以将结构化数据上链并实现相关的操作。
区块链智能合约从本质上讲是区块链上的可执行语言,其工作原理类似于其它计算机程序语句,以这种方式与真实世界的资产等数据进行交互。智能合约往往用Solidity(与Javascript类似的专用语言)高级语言编写。
结构化数据也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。如果将二维表结构数据和智能合约中的存储结构建立一一映射,即可通过智能合约将结构化数据在区块链上进行存储和管理。
现有的智能合约的执行权限控制大多数都是基于单一用户地址检查进行的。在智能合约中需要将权限分配给多个用户时,只能使用多重签名技术。而通过多重签名的技术手段只能将权限均匀分配到指定的若干个地址。另外,在需要获取权限时,需要取得所有具有权限的账号的签名才能够获取指定权限。这种多用户权限分配的方式在权重分配和权限阈值方面都很不灵活,在权限分配方案复杂的情况下很难使用。
发明内容
针对现有技术的不足,本发明提供一种基于智能合约的投票提案的生命周期管理方法,该方法提供了一种解决区块链上智能合约多用户授权问题的通用方案。具体技术方案如下:
一种基于智能合约的投票提案生命周期管理方法,包括如下步骤:
步骤一:初始化合约:
通过内置合约或者部署合约的方式,使得区块链上具有一个逻辑执行需要经过若干具有投票权限的用户许可的投票提案合约;投票提案合约所包含的要素包括:一个投票提案管理组件和若干个负责执行具体逻辑的功能组件;所述的功能组件具有各自的数据结构和函数,但是函数不对合约外部暴露,也就是不可以由用户直接调用,只允许通过所述的投票提案管理组件进行间接调用。
步骤二:根据用户的需求对投票提案合约进行对应操作,进而进行提案状态变更:
(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)检查查询请求的正确性,如果投票的发送者能够在投票者地址到权重的映射表中找到,那么认为查询请求是正确的,那么将直接返回提案的序列化结果;否则,将错误返回并退出。
进一步地,步骤一中所述投票提案管理组件所包含的特征要素有:投票者地址到权重的映射表、标识符到功能函数的映射表、数据序列化反序列化协议、提案数据结构定义、提案计数器、提案超时时限、提案要通过所需的权重阈值,对合约外部暴露proposal提案、 vote投票、execute执行和query查询四种函数接口。
进一步地,所述的提案是否超时的判断方法为比较提案的超时时间戳与交易打包时间戳的大小,当提案的超时时间戳大于等于交易打包时间戳,则提案未超时;当提案的超时时间戳小于交易打包时间戳,则提案超时。
与现有技术相比,本发明的有益效果如下:
(1)本发明应用于区块链平台上需要多人签名授权执行实际逻辑的智能合约,本发明为这一类智能合约的设计提供了一种与智能合约的实现语言无关、与智能合约的实际执行逻辑无关、与智能合约的部署方式无关的通用的投票提案生命周期管理方法,为实现基于投票提案智能合约的区块链多重签名授权提供解决方案,更易于维护和拓展;
(2)本方法使用在各个区块链节点上一致的智能合约调用请求的交易打包时间作为判断“超时”的依据,不需要维护定时器。利用区块链系统的特性,为分布式环境下“超时”状态机制的设计提供解决方案。
附图说明
图1是通过提案调用智能合约的四管理员与区块链系统的协作图;
图2是投票提案合约中描述一个提案生命周期的状态变更示意图;
图3是区块链节点处理对投票提案合约的调用请求的流程示意图。
具体实施方式
下面根据附图和具体实施实例详细描述本发明,本发明的目的和效果将更加明显。
如图1-3所示,一种基于智能合约的投票提案生命周期管理方法,包括如下步骤:
步骤一:初始化合约:
通过内置合约或者部署合约的方式,使得区块链上具有一个逻辑执行需要经过若干具有投票权限的用户许可的投票提案合约。投票提案合约所包含的要素包括:一个投票提案管理组件和若干个负责执行具体逻辑的功能组件。合约的功能组件具有各自的数据结构和函数,但是函数不对合约外部暴露,也就是不可以由用户直接调用,只允许通过投票提案管理组件进行间接调用;投票提案管理组件所包含的特征要素有:投票者地址到权重的映射表、标识符到功能函数的映射表、数据序列化反序列化协议、提案数据结构定义、提案计数器、提案超时时限、提案要通过所需的权重阈值,对合约外部暴露proposal提案、vote投票、execute执行query查询四种函数接口。
步骤二:根据用户的需求对投票提案合约进行对应操作,进而进行提案状态变更:
(1)当需要发起提案希望通过投票执行某一个合约不对外暴露的功能函数时:发起者确定希望调用的智能合约的目标函数和参数,在客户端根据投票提案管理组件中的标识符到功能函数的映射表以及数据序列化协议,将调用所需要的函数和参数的信息转换为函数标识符和参数序列化字符串。然后将函数标识符和参数序列化字符串作为合约调用的参数,以合约调用交易的形式向区块链节点发送带有数字签名的请求,调用投票提案合约对外暴露的proposal提案函数。当交易被发送到区块链节点上后,首先验证数字签名,然后进行共识。在共识结束后,会产生所有区块链节点一致的区块时间戳,即交易打包时间戳。在这之后,区块链节点的执行器运行请求调用的proposal提案函数时,分为以下几个子步骤来执行:
1)检查合约状态数据中已有的提案。如果当前状态数据中没有提案,那么直接进入下一子步骤。如果合约的状态数据中已有提案,并且提案的超时时间戳小于交易打包时间戳,则将状态数据中提案状态置为“超时”,进入下一子步骤。如果当前状态数据中已有提案,并且提案的超时时间戳大于交易打包时间戳,则直接进入下一子步骤。
2)分别检查新提案和已有提案正确性。
对于新提案,如果合约调用交易中交易的发起者能够在投票者地址到权重的映射表中找到,目标函数标识符能根据标识符到功能函数的映射表正确地映射到相应的功能函数,序列化参数字符串能根据序列化协议正确转换成函数所需要的参数,那么将执行步骤(1.3),否则将返回错误并退出;
对于已有提案,检查当前状态数据中提案状态为“超时”、“禁止”或“生效”时,则执行步骤(1.3),否则将返回错误并退出;
3)更新合约状态数据中的提案。将已有提案从状态数据中销毁,令状态数据中的提案计数器加一,其结果作为新提案的编号。将当前交易中包含的发起者、函数标识符、参数序列化字符串、提案编号以及根据交易打包时间戳与提案超时时限所生成的提案超时时间戳组合,一起构成新提案的信息。接着将新提案的状态置为“审批”。在这之后,将提案的数据存放到状态数据中。最后,将提案的数据序列化,通过区块链平台提供的消息接口,将新提案的信息推送到其他具有投票权利的用户的客户端。
(2)当具有投票权利的用户收到提案信息的推送,希望对提案进行投票时:投票者根据所获得的提案信息,评估合约执行的后果,进而产生对提案的支持或反对意见。投票者在客户端组合提案编号、提案的交易打包时间和本人的投票,生成带有数字签名的请求并发送到区块链节点上,以调用投票提案合约的vote投票函数。区块链节点在收到了请求之后,首先验证请求的签名,然后进行共识。共识结束之后,会生成所有区块链节点一致的区块时间戳,即交易打包时间戳。在这之后,区块链节点的执行器运行请求调用的vote投票函数是,分为以下几个子步骤来执行:
1)检查合约状态数据中已有的提案。如果当前状态数据中没有提案,则将错误返回并退出。如果合约的状态数据中已有提案,并且提案的超时时间戳小于交易打包时间戳,则将状态数据中提案状态置为“超时”,然后将错误返回并退出。如果当前状态数据中已有提案,并且提案的超时时间戳大于交易打包时间,则进入下一子步骤。
2)检查投票的正确性。如果投票的发送者能够在投票者地址到权重的映射表中找到,投票请求中的提案编号、提案的交易打包时间等于合约状态数据中提案的编号和交易打包时间,并且当前合约状态数据中的提案状态为“审批”,那么认为投票是正确的,执行下一子步骤;否则,将错误返回并退出。
3)更新投票结果。如果投票者同意执行提案,则将投票者的地址更新到合约状态数据中提案的同意者列表中,再根据提案同意者列表和投票者地址到权重的映射表,计算同意提案的投票者的总权重,如果计算结果大于等于提案通过的最小阈值,则将合约状态数据中当前提案状更新为“通过”,并通过区块链平台提供的消息接口将提案的状态、编号、交易打包时间戳组成消息发送提案发起者,然后结束执行。如果投票者反对执行提案,则将投票者的地址更新到合约状态数据中的提案的反对者列表中,再根据提案反对者列表和投票者地址到权重的映射表,计算反对者的总权重和所有投票者的总权重,如果所有投票者的总权重减去反对者的总权重小于提案通过的最小阈值,那么将合约状态数据中提案状态更新为“禁止”,并区块链平台提供的消息接口将提案的状态、编号、交易打包时间戳组成消息发送给提案发起者,然后结束执行。
(3)当提案发起者希望执行自己发起的提案时:提案的发起者应该以自己收到的提案通过消息中所附带的提案编号、交易打包时间戳作为参数,在客户端生成请求调用合约的 execute函数发送到区块链节点上。区块链节点在收到了请求之后,首先验证请求的签名,然后进行共识。共识结束之后,会生成所有区块链节点一致的区块时间戳,即交易打包时间戳。在这之后,区块链节点的执行器运行请求调用的execute执行函数,分为以下几个子步骤来执行:
1)检查合约状态数据中已有的提案。如果当前状态数据中没有提案,则将错误返回并退出。如果合约的状态数据中已有提案,并且提案的超时时间戳小于交易打包时间戳,则将状态数据中提案状态置为“超时”,然后将错误返回并退出。如果当前状态数据中已有提案,并且提案的超时时间戳大于交易打包时间,则进入下一子步骤。
2)检查执行请求的正确性。如果执行请求的发起者是当前合约状态数据中提案的发起者,且执行请求中的提案编号、交易打包时间戳等于当前合约状态数据中提案的编号、交易打包时间,并且当前合约状态数据中提案为通过,则认为执行请求是正确的,进行下一子步骤。否则,直接结束执行,将返回错误并退出。
3)执行提案。根据函数标识符到目标函数的映射表,将合约状态数据中当前提案所包含的目标函数标识符映射到提案所要执行的函数,再通过反序列化协议将参数序列化字符串转换成实际参数,调用目标函数真正执行,执行的结果通过序列化协议转化成字符串存入回执。
(4)当用户希望查询合约状态中的提案时:用户在客户端构建带有数字签名的请求发送到区块链节点,以调用提案投票合约的query函数。区块链节点在收到了请求之后,首先验证请求的签名,然后进行共识。共识结束之后,会生成所有区块链节点一致的区块时间戳,即交易打包时间戳。在这之后,区块链节点的执行器运行请求调用的query执行函数时,分为以下几个子步骤来执行:
1)检查合约状态数据中已有的提案。如果当前状态数据中没有提案,则将错误返回并退出。如果合约的状态数据中已有提案,并且提案的超时时间戳小于交易打包时间戳,则将状态数据中提案状态置为“超时”,然后进入下一子步骤。如果当前状态数据中已有提案,并且提案的超时时间戳大于交易打包时间,则进入下一子步骤。
2)检查查询请求的正确性。如果投票的发送者能够在投票者地址到权重的映射表中找到,那么认为查询请求是正确的,那么将直接返回提案的序列化结果;否则,将错误返回并退出。
所述步骤一中所部署的智能合约不直接对外暴露功能模块接口,仅仅对外暴露投票提案组件的接口。功能模块接口需要通过投票提案组件上传提案,经投票统一后间接调用。同一时刻合约状态数据中要么没有提案,要么有唯一一个提案,不存在复数个提案。
所述步骤二中进行的对投票提案智能合约进行的任何调用,都有可能引起合约状态数据中的提案状态的变更。其中,对proposal提案函数的调用可能引发提案状态置为“超时”,或者整个提案被更新且状态被置为“审批”;对vote投票函数的调用可能引发提案状态被置为“超时”、“禁止”或“通过”;对execute执行函数的调用可能引发提案状态被置为“超时”或“生效”;对query查询函数的调用可能提案状态被置为“超时”。提案的状态被置为“超时”是由合约调用的交易打包时间戳超过提案的超时时间戳导致的,与调用哪个合约函数无关。
Claims (3)
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)检查查询请求的正确性,如果投票的发送者能够在投票者地址到权重的映射表中找到,那么认为查询请求是正确的,那么将直接返回提案的序列化结果;否则,将错误返回并退出。
2.如权利要求1中所述的基于智能合约的投票提案生命周期管理方法,其特征在于,步骤一中所述投票提案管理组件所包含的特征要素有:投票者地址到权重的映射表、标识符到功能函数的映射表、数据序列化反序列化协议、提案数据结构定义、提案计数器、提案超时时限、提案要通过所需的权重阈值,对合约外部暴露proposal提案、vote投票、execute执行和query查询四种函数接口。
3.如权利要求1中所述的基于智能合约的投票提案生命周期管理方法,其特征在于,所述的提案是否超时的判断方法为比较提案的超时时间戳与交易打包时间戳的大小,当提案的超时时间戳大于等于交易打包时间戳,则提案未超时;当提案的超时时间戳小于交易打包时间戳,则提案超时。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911188201.8A CN111062060B (zh) | 2019-11-28 | 2019-11-28 | 一种基于智能合约的投票提案生命周期管理方法 |
CN202210251660.1A CN114692221A (zh) | 2019-11-28 | 2019-11-28 | 提案投票方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911188201.8A CN111062060B (zh) | 2019-11-28 | 2019-11-28 | 一种基于智能合约的投票提案生命周期管理方法 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210251660.1A Division CN114692221A (zh) | 2019-11-28 | 2019-11-28 | 提案投票方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111062060A CN111062060A (zh) | 2020-04-24 |
CN111062060B true CN111062060B (zh) | 2022-04-26 |
Family
ID=70299087
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911188201.8A Active CN111062060B (zh) | 2019-11-28 | 2019-11-28 | 一种基于智能合约的投票提案生命周期管理方法 |
CN202210251660.1A Pending CN114692221A (zh) | 2019-11-28 | 2019-11-28 | 提案投票方法 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210251660.1A Pending CN114692221A (zh) | 2019-11-28 | 2019-11-28 | 提案投票方法 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN111062060B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114422535B (zh) * | 2022-01-18 | 2024-04-09 | 网易(杭州)网络有限公司 | 区块链中部署合约的方法、装置、计算机设备及存储介质 |
CN115204845A (zh) * | 2022-08-12 | 2022-10-18 | 中国电信股份有限公司 | 基于区块链的协同处理方法、装置、设备及介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107562513A (zh) * | 2017-07-18 | 2018-01-09 | 杭州趣链科技有限公司 | 一种基于java的智能合约生命周期的管理方法 |
CN109358881A (zh) * | 2018-10-24 | 2019-02-19 | 杭州趣链科技有限公司 | 一种基于智能合约的权限可控的智能合约升级方法 |
CN109671205A (zh) * | 2018-09-25 | 2019-04-23 | 深圳壹账通智能科技有限公司 | 基于区块链的投票方法、装置、设备及计算机存储介质 |
CN109710384A (zh) * | 2018-12-29 | 2019-05-03 | 杭州趣链科技有限公司 | 一种安全的Java智能合约解释执行引擎及方法 |
KR102014647B1 (ko) * | 2018-06-21 | 2019-10-21 | 이화여자대학교 산학협력단 | 블록체인 기반 전자투표방법 |
-
2019
- 2019-11-28 CN CN201911188201.8A patent/CN111062060B/zh active Active
- 2019-11-28 CN CN202210251660.1A patent/CN114692221A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107562513A (zh) * | 2017-07-18 | 2018-01-09 | 杭州趣链科技有限公司 | 一种基于java的智能合约生命周期的管理方法 |
KR102014647B1 (ko) * | 2018-06-21 | 2019-10-21 | 이화여자대학교 산학협력단 | 블록체인 기반 전자투표방법 |
CN109671205A (zh) * | 2018-09-25 | 2019-04-23 | 深圳壹账通智能科技有限公司 | 基于区块链的投票方法、装置、设备及计算机存储介质 |
CN109358881A (zh) * | 2018-10-24 | 2019-02-19 | 杭州趣链科技有限公司 | 一种基于智能合约的权限可控的智能合约升级方法 |
CN109710384A (zh) * | 2018-12-29 | 2019-05-03 | 杭州趣链科技有限公司 | 一种安全的Java智能合约解释执行引擎及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114692221A (zh) | 2022-07-01 |
CN111062060A (zh) | 2020-04-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11743137B2 (en) | Systems, methods, and apparatuses for implementing a metadata driven rules engine on blockchain using distributed ledger technology (DLT) | |
US11824970B2 (en) | Systems, methods, and apparatuses for implementing user access controls in a metadata driven blockchain operating via distributed ledger technology (DLT) using granular access objects and ALFA/XACML visibility rules | |
CN110915166B (zh) | 区块链 | |
US10896195B2 (en) | Automatic generation of smart contracts | |
US11070360B2 (en) | Parallel transaction validation and block generation in a blockchain | |
US10896149B2 (en) | Composition operators for smart contract | |
US20200177373A1 (en) | System and method for storing contract data structures on permissioned distributed ledgers | |
US20200034453A1 (en) | Smart contract input mapping | |
CN107562513B (zh) | 一种基于java的智能合约生命周期的管理方法 | |
CN110874739B (zh) | 实现高完整性、高带宽、低延迟、安全处理的分布式计算和存储网络 | |
US20210357195A1 (en) | Method and System for Executable Smart Legal Contract Construction and Execution over Legal Contracts | |
CN111445333A (zh) | 区块生成方法、装置、计算机设备以及存储介质 | |
US20220067730A1 (en) | Data processing method and device and computer-readable storage medium | |
CN113037817B (zh) | 启动智能合约的方法及装置、电子设备、存储介质 | |
CN112632629B (zh) | 基于区块链的投票管理方法、装置、介质及电子设备 | |
US9697042B2 (en) | Extensibility of business process and application logic | |
CN110851127B (zh) | 一种基于区块链的通用存证方法 | |
CN111062060B (zh) | 一种基于智能合约的投票提案生命周期管理方法 | |
CN115701078B (zh) | 跨链交易处理方法、装置、电子设备以及存储介质 | |
KR102431835B1 (ko) | 토큰 모델링 장치 및 이를 포함하는 데이터 무결성 검증 시스템 및 방법 | |
CN113469811A (zh) | 区块链交易处理方法及装置 | |
CN114493493A (zh) | 决策引擎及决策引擎实现方法 | |
US20240104558A1 (en) | Blockchain transaction execution method and apparatus, program product, device, and medium | |
CN114285552B (zh) | 基于区块链的n次方投票方法及装置 | |
CN117453654A (zh) | 基于区块链的版本处理方法、装置及相关设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |