CN111833510B - 基于区块链的投票处理方法及装置、设备、存储介质 - Google Patents
基于区块链的投票处理方法及装置、设备、存储介质 Download PDFInfo
- Publication number
- CN111833510B CN111833510B CN201911360272.1A CN201911360272A CN111833510B CN 111833510 B CN111833510 B CN 111833510B CN 201911360272 A CN201911360272 A CN 201911360272A CN 111833510 B CN111833510 B CN 111833510B
- Authority
- CN
- China
- Prior art keywords
- voting
- voter
- line segment
- tree
- parent node
- 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
- G07—CHECKING-DEVICES
- G07C—TIME OR ATTENDANCE REGISTERS; REGISTERING OR INDICATING THE WORKING OF MACHINES; GENERATING RANDOM NUMBERS; VOTING OR LOTTERY APPARATUS; ARRANGEMENTS, SYSTEMS OR APPARATUS FOR CHECKING NOT PROVIDED FOR ELSEWHERE
- G07C13/00—Voting apparatus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Abstract
本申请公开了一种基于区块链的投票处理方法及装置、设备、存储介质。该方法包括在投票开始阶段,在链下对每个参与投票者的数据预处理;其中所述数据预处理包括:实际票权、前序序列编号以及括号序列编号;对于每次的投票行为,基于前序序列的线段树查找出与所述投票者最近的投过票的父亲节点;对于每次的投票行为,基于括号序列编号的线段树更新从所述投票者到该投票者最近投过票的父亲节点的路径上所有节点已损失票权。本申请解决了流民主问题解决效果不佳的技术问题。通过本申请解决流民主问题链上gas费消耗过多的缺陷,且不增加任何约束条件,用户可以任意进行委托,并且链下的时间复杂度也能承受。
Description
技术领域
本申请涉及区块链领域,具体而言,涉及一种基于区块链的投票处理方法及装置、设备、存储介质。
背景技术
在现代社会中存在大量涉及人民投票选举/提案的场景。通常认为,为进一步保证民主性,每个拥有投票权的人都应该对每一次提案行使投票权。然而通常,人们没有那么多的时间参与每一次的提案投票,或者投票者不是提案所涉及领域的专家,无法给出正确判断。这导致大量的投票权实际并没有被行使。
对于上述问题,流民主的概念被提出。其核心思想为,每个投票者(称为委托人)可以将自己的票权委托给另一个投票者(称为被委托人),当被委托人投票时,默认将其委托人(包括多级委托人)所有的票权也一起投出。每个投票者的委托人是可以任意指定的,但假设在一次投票提案过程中,每个投票者只能委托一次,且不存在循环委托(即A委托给B,B委托给C,C又委托给A)。在流民主问题中,所有投票者委托关系可以用一个委托图表示,如图1所示。
具体地,如图1所示,一共有11个投票者,对应图上的11个节点,每个节点所指向的父亲节点为其被委托人。(实际可能存在多个投票者没有委托给任何人(即1号节点),体现为委托图为一个森林,即由多棵不连通子树构成)每个投票者拥有一定数量的票权。同时我们假设有若干个候选者,用英文字母A,B,C表示。
如图1,假设每个投票者的票权等于其在图中的编号。当投票者1把票投给候选者A时,根据我们的定义,由于所有的票权最终都汇聚到投票者1,故A的总获票数为1+2+…+12=78。同时,流民主问题允许任何投票者对自己的被委托人(包括多级委托)投票结果不满意时改变自己的投票,同时被委托人的实际票权相应减少。如图1,当1投完票之后,5再将票投给B,此时B的票数为5+6=11,A的票数相应减少11,变成67。如果之后投票者3再将票投给候选者C,则C的得票数为3+4+7+8=22,A的票数变为45,B的票数仍为11。
发明人发现,流民主问题中存在的投票问题。进一步,如何针对链上流民主和链下流民主问题的解决。
针对相关技术中,流民主问题解决效果不佳的问题,目前尚未提出有效的解决方案。
发明内容
本申请的主要目的在于提供一种基于区块链的投票处理方法及装置、设备、存储介质,以解决流民主问题解决效果不佳的问题。
为了实现上述目的,根据本申请的一个方面,提供了一种基于区块链的投票处理方法,基于区块链的智能合约实现投票。
根据本申请的基于区块链的投票处理方法包括:在投票开始阶段,在链下对每个参与投票者的数据预处理;其中所述数据预处理包括:实际票权、前序序列编号以及括号序列编号;对于每次的投票行为,基于前序序列的线段树查找出与所述投票者最近的投过票的父亲节点;对于每次的投票行为,基于括号序列编号的线段树更新从所述投票者到该投票者最近投过票的父亲节点的路径上所有节点已损失票权。
进一步地,对于每次的投票行为,基于前序序列的线段树查找出与所述投票者最近的投过票的父亲节点包括:
将每次查找最近父亲节点转化为连续的子树区间进行最大值更新的问题,并结合线段树数据结构在O(log n)时间复杂度内实现查找或者维护。
进一步地,对于每次的投票行为,基于括号序列编号的线段树更新从所述投票者到该投票者最近投过票的父亲节点的路径上所有节点已损失票权包括:
将需要更新的路径转化为括号序列的连续区间,使所述括号序列的连续区间可结合线段树数据结构在O(log n)时间复杂度内实现更新。
进一步地,将每次查找最近父亲节点转化为连续的子树区间进行最大值更新的问题,并结合线段树数据结构在O(log n)时间复杂度内实现查找或者维护时,还包括:
基于线段树,对一个连续区间进行的调整操作;
所述线段树数据结构,用于保证在O(log n)时间内对连续区间进行修改和查找,
其中,所述线段树是一个平衡二叉树,每个节点对应一个区间,每个父亲节点区间均匀分给两个子节点对应区间。
进一步地,将需要更新的路径转化为括号序列的连续区间,使所述括号序列的连续区间可结合线段树数据结构在O(log n)时间复杂度内实现更新时,还包括:
通过链上记录merkel树的根节点,在每次用户提交merkel树叶子节点数据以及一个merkel证明,智能合约根据该用户提交的数据以及merkel证明计算出merkel根,并判断所述merkel根与存在链上的merkel树根节点是否相同,若相同即认为数据合法,
其中所述merkel树为一个平衡二叉树,每个父亲节点的值其子节点值拼接起来做不可逆哈希函数运算。
为了实现上述目的,根据本申请的另一方面,提供了一种基于区块链的投票处理装置,基于区块链的智能合约实现投票。
根据本申请的基于区块链的投票处理装置包括:预处理模块,用于在投票开始阶段,在链下对每个参与投票者的数据预处理;其中所述数据预处理包括:实际票权、前序序列编号以及括号序列编号;第一处理模块,用于对于每次的投票行为,基于前序序列的线段树查找出与所述投票者最近的投过票的父亲节点;第二处理模块,用于对于每次的投票行为,基于括号序列编号的线段树更新从所述投票者到该投票者最近投过票的父亲节点的路径上所有节点已损失票权。
进一步地,所述第一处理模块包用于
将每次查找最近父亲节点转化为连续的子树区间进行最大值更新的问题,并结合线段树数据结构在O(log n)时间复杂度内实现查找或者维护。
进一步地,所述第二处理模块,用于
将需要更新的路径转化为括号序列的连续区间,使所述括号序列的连续区间可结合线段树数据结构在O(log n)时间复杂度内实现更新。
为了实现上述目的,根据本申请的又一方面,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述的基于区块链的投票处理方法的步骤。
为了实现上述目的,根据本申请的再一方面,提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现所述的基于区块链的投票处理方法的步骤。
在本申请实施例中基于区块链的投票处理方法及装置、设备、存储介质,采用在投票开始阶段,在链下对每个参与投票者的数据预处理的方式,通过对于每次的投票行为,基于前序序列的线段树查找出与所述投票者最近的投过票的父亲节点,对于每次的投票行为,基于括号序列编号的线段树更新从所述投票者到该投票者最近投过票的父亲节点的路径上所有节点已损失票权,达到了用O(log n)的链上时间复杂度和O(n)的链下时间复杂度解决了流民主问题的目的,从而实现了链上gas费用的消耗为实际可接受水平的同时不需要对用户委托行为做任何限制,即用户可以任意指定委托对象的技术效果,进而解决了流民主问题解决效果不佳的技术问题。
附图说明
构成本申请的一部分的附图用来提供对本申请的进一步理解,使得本申请的其它特征、目的和优点变得更明显。本申请的示意性实施例附图及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是现有技术中的委托示意图;
图2是根据本申请实施例的基于区块链的投票处理方法流程示意图;
图3是根据本申请实施例的基于区块链的投票处理装置结构示意图;
图4是根据本申请实施例的设备结构示意图;
图5是本申请中的线段树结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本申请中,术语“上”、“下”、“左”、“右”、“前”、“后”、“顶”、“底”、“内”、“外”、“中”、“竖直”、“水平”、“横向”、“纵向”等指示的方位或位置关系为基于附图所示的方位或位置关系。这些术语主要是为了更好地描述本申请及其实施例,并非用于限定所指示的装置、元件或组成部分必须具有特定方位,或以特定方位进行构造和操作。
并且,上述部分术语除了可以用于表示方位或位置关系以外,还可能用于表示其他含义,例如术语“上”在某些情况下也可能用于表示某种依附关系或连接关系。对于本领域普通技术人员而言,可以根据具体情况理解这些术语在本申请中的具体含义。
此外,术语“安装”、“设置”、“设有”、“连接”、“相连”、“套接”应做广义理解。例如,可以是固定连接,可拆卸连接,或整体式构造;可以是机械连接,或电连接;可以是直接相连,或者是通过中间媒介间接相连,又或者是两个装置、元件或组成部分之间内部的连通。对于本领域普通技术人员而言,可以根据具体情况理解上述术语在本申请中的具体含义。
本申请主要解决流民主问题链上gas费消耗过多的缺陷,且不增加任何约束条件,用户可以任意进行委托,并且链下的时间复杂度也能承受。
具体地,可以包括两种存储方式。一种叫merkel树的链上存储方式和一种叫线段树的数据结构。其中,merkel树为一个平衡二叉树,每个父亲节点的值其子节点值拼接起来做一次不可逆的哈希函数运算。其中线段树也是一个平衡二叉树,每个节点对应一个区间,每个父亲节点区间均匀分给两个子节点对应区间,
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
如图2所示,该方法包括如下的步骤S101至步骤S103:
步骤S101,在投票开始阶段,在链下对每个参与投票者的数据预处理;其中所述数据预处理包括:实际票权、前序序列编号以及括号序列编号;
具体地,投票开始阶段链下对每个参与投票用户的数据预处理,包括他们的实际票权,前序序列编号,括号序列编号等。这些数据均通过merkel树技术在用户发起投票的同时顺便提交到链上。
步骤S102,对于每次的投票行为,基于前序序列的线段树查找出与所述投票者最近的投过票的父亲节点;
具体地,对每次投票行为,查找投票者最近的投过票的父亲节点。该部分通过基于前序序列的线段树来实现。
步骤S103,对于每次的投票行为,基于括号序列编号的线段树更新从所述投票者到该投票者最近投过票的父亲节点的路径上所有节点已损失票权。
具体地,对每次投票行为,更新从投票者到他最近投过票的父亲节点的路径上所有节点已损失票权。该部分通过基于括号序列编号的线段树来实现。
从以上的描述中,可以看出,本申请实现了如下技术效果:
在本申请实施例中基于区块链的投票处理方法及装置、设备、存储介质,采用在投票开始阶段,在链下对每个参与投票者的数据预处理的方式,通过对于每次的投票行为,基于前序序列的线段树查找出与所述投票者最近的投过票的父亲节点,对于每次的投票行为,基于括号序列编号的线段树更新从所述投票者到该投票者最近投过票的父亲节点的路径上所有节点已损失票权,达到了用O(log n)的链上时间复杂度和O(n)的链下时间复杂度解决了流民主问题的目的,从而实现了链上gas费用的消耗为实际可接受水平的同时不需要对用户委托行为做任何限制,即用户可以任意指定委托对象的技术效果,进而解决了流民主问题解决效果不佳的技术问题。
根据本申请实施例,作为本实施例中的优选,对于每次的投票行为,基于前序序列的线段树查找出与所述投票者最近的投过票的父亲节点包括:将每次查找最近父亲节点转化为连续的子树区间进行最大值更新的问题,并结合线段树数据结构在O(log n)时间复杂度内实现查找或者维护。
根据本申请实施例,作为本实施例中的优选,对于每次的投票行为,基于括号序列编号的线段树更新从所述投票者到该投票者最近投过票的父亲节点的路径上所有节点已损失票权包括:将需要更新的路径转化为括号序列的连续区间,使所述括号序列的连续区间可结合线段树数据结构在O(log n)时间复杂度内实现更新。
根据本申请实施例,作为本实施例中的优选,将每次查找最近父亲节点转化为连续的子树区间进行最大值更新的问题,并结合线段树数据结构在O(log n)时间复杂度内实现查找或者维护时,还包括:基于线段树,对一个连续区间进行的调整操作;所述线段树数据结构,用于保证在O(log n)时间内对连续区间进行修改和查找,其中,所述线段树是一个平衡二叉树,每个节点对应一个区间,每个父亲节点区间均匀分给两个子节点对应区间。
具体地,线段树适用于对一个连续区间进行的调整操作。比如说链上记录了一个长为n的数组s[],用户每次可能对s[]中的连续几个数进行修改,比如修改s[a-b]。线段树数据结构以及所谓的延迟标记技巧,能保证在O(log n)时间内对s[]进行修改和查找。
根据本申请实施例,作为本实施例中的优选,将需要更新的路径转化为括号序列的连续区间,使所述括号序列的连续区间可结合线段树数据结构在 O(log n)时间复杂度内实现更新时,还包括:通过链上记录merkel树的根节点,在每次用户提交merkel树叶子节点数据以及一个merkel证明,智能合约根据该用户提交的数据以及merkel证明计算出merkel根,并判断所述merkel根与存在链上的merkel树根节点是否相同,若相同即认为数据合法,其中所述 merkel树为一个平衡二叉树,每个父亲节点的值其子节点值拼接起来做不可逆哈希函数运算。
具体地,链上记录merkel树的根节点,每次用户提交merkel树叶子节点数据以及一个merkel证明(也叫merkel路径,即对叶子节点数据以及这个路径进行多次哈希运算能够算出根节点的值,长度仅为O(log n))。智能合约能够根据该用户提交的数据以及merkel证明计算出一个值(即时间复杂度也为 O(log n)),并判断这个值与存在链上的merkel树根节点是否相同,若相同即认为数据合法(数据在merkel树叶子节点里存在)。哈希函数的不可逆性保证用户难以伪造出一个不存在于merkel树叶子节点的数据并通过智能合约检验。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
根据本申请实施例,还提供了一种用于实施上述方法的基于区块链的投票处理装置,基于区块链的智能合约实现投票,如图3所示,该装置包括:预处理模块10,用于在投票开始阶段,在链下对每个参与投票者的数据预处理;其中所述数据预处理包括:实际票权、前序序列编号以及括号序列编号;第一处理模块11,用于对于每次的投票行为,基于前序序列的线段树查找出与所述投票者最近的投过票的父亲节点;第二处理模块12,用于对于每次的投票行为,基于括号序列编号的线段树更新从所述投票者到该投票者最近投过票的父亲节点的路径上所有节点已损失票权。
本申请实施例的预处理模块10中具体地,投票开始阶段链下对每个参与投票用户的数据预处理,包括他们的实际票权,前序序列编号,括号序列编号等。这些数据均通过merkel树技术在用户发起投票的同时顺便提交到链上。
本申请实施例的第一处理模块11中具体地,对每次投票行为,查找投票者最近的投过票的父亲节点。该部分通过基于前序序列的线段树来实现。
本申请实施例的第二处理模块12中具体地,对每次投票行为,更新从投票者到他最近投过票的父亲节点的路径上所有节点已损失票权。该部分通过基于括号序列编号的线段树来实现。
根据本申请实施例,作为本实施例中的优选,所述第一处理模块包用于将每次查找最近父亲节点转化为连续的子树区间进行最大值更新的问题,并结合线段树数据结构在O(log n)时间复杂度内实现查找或者维护。
根据本申请实施例,作为本实施例中的优选,所述第二处理模块,用于将需要更新的路径转化为括号序列的连续区间,使所述括号序列的连续区间可结合线段树数据结构在O(log n)时间复杂度内实现更新。
本申请实施例还提供了一种计算机设备。如图4所示,计算机设备20可以包括:至少一个处理器201,例如CPU,至少一个网络接口204,用户接口 203,存储器205,至少一个通信总线202,可选地,还可以包括显示屏206。其中,通信总线202用于实现这些组件之间的连接通信。其中,用户接口203 可以包括触摸屏、键盘或鼠标等等。网络接口204可选的可以包括标准的有线接口、无线接口(如WI-FI接口),通过网络接口204可以与服务器建立通信连接。存储器205可以是高速RAM存储器,也可以是非不稳定的存储器 (non-volatilememory),例如至少一个磁盘存储器,存储器205包括本发明实施例中的flash。存储器205可选的还可以是至少一个位于远离前述处理器201 的存储系统。如图4所示,作为一种计算机存储介质的存储器205中可以包括操作系统、网络通信模块、用户接口模块以及程序指令。
需要说明的是,网络接口204可以连接接收器、发射器或其他通信模块,其他通信模块可以包括但不限于WiFi模块、蓝牙模块等,可以理解,本发明实施例中计算机设备也可以包括接收器、发射器和其他通信模块等。
处理器201可以用于调用存储器205中存储的程序指令,并使计算机设备 20执行以下操作:
在投票开始阶段,在链下对每个参与投票者的数据预处理;其中所述数据预处理包括:实际票权、前序序列编号以及括号序列编号;
对于每次的投票行为,基于前序序列的线段树查找出与所述投票者最近的投过票的父亲节点;
对于每次的投票行为,基于括号序列编号的线段树更新从所述投票者到该投票者最近投过票的父亲节点的路径上所有节点已损失票权。
如图5所示,当投票者1投票给A后,其他所有人的已损失票权不变(仍为0)
首先,当投票者5投票给B后,候选者B实际增加票数为11-0=11(5的总票权减去5的已损失票权)。同时投票者2,3,4的已损失票权均需要加上 11,其他未投票的投票者已损失票权不变。
其次,当投票者3投票给C后,候选者C实际增加票数为33-11=22(3 的总票权减去3的已损失票权)。同时投票者2的已损失票权需要再加上22,变成33。其他未投票的投票者已损失票权不变。
最后,每当有投票者投完票之后,需要更新已损失票权的节点为从投票者到离他最近的投过票的父亲节点的路径上的所有节点。(注意到在树结构里,每个节点有且仅有一条路径到他某个指定的父亲节点)在这个例子中,B投票时,最近的父亲节点是1,需要更新的路径为(5)->4->3->2->(1)。C投票时,最近的父亲节点还是1,需要更新的路径为(3)->2->(1)。
本申请中所采取的算法的关键目标为:
i)找到投票者最近的投过票的父亲节点
ii)更新从投票者到最近投过票父亲节点路径上所有节点的已损失票权。
然而,传统的方法无论实现i)或ii)都至少需要对图的一条路径进行遍历,当图的深度较高时,遍历的时间复杂度仍在O(n)级别,无法满足流民主问题的需求。本发明的解决方案为利用线段树的方式解决,同时用merkel树进行预处理。
接下来算法需要用到两个序列,树的前序序列和括号序列:
1.前序序列,即按照根->叶的顺序遍历树T,图1的前序遍历为1 2 3 4 5 6 7 8 91011 12,即节点的编号和前序序列编号一致。
2.括号序列,仍按照前序遍历,但每次进入和离开节点时均记录一次,图1的括号序列为1 2 3 4 5 6 6 5 4 7 8 8 7 3 2 9 10 10 11 11 12 12 9 1。
具体步骤如下:
步骤1,每个投票者提交(或不提交)其被委托人信息,信息收集完毕后,链下建立委托关系图,同时建立一个虚拟节点(编号0),让所有没有出度(被委托人)的节点全部指向这个虚拟节点,这样,整个委托图变成了一棵连通的树T。
步骤2,给定每个人的票权,投票者本地计算其总票权(node.votingpower,包括其所有委托人的票权),然后对树T进行前序遍历(本地调用 Preorder(T.root)),记录所有投票者的前序序列编号(node.index),子树终端编号(node.endpoint),左括号编号(node.leftbracket),右括号编号 node.rightbracket),并记录在data里。
具体伪代码如下:
步骤3,每个投票者根据上述信息构建merkel树,其每个叶子节点对应一个投票者(node),包含的信息为hash(node.adddress,node.votingpower, node.index,node.endpoint,node.leftbracket,node.rightbracket)。所有投票者构建的merkel树应该都是相同的。同时merkel root(根节点)上链存到智能合约中。这个操作可以由此次投票提案的发起者完成。
步骤4,投票者进行投票操作,发送一个投票信息,包含(data,proof,node.candidate),其中data为该投票者在步骤2本地计算的涉及该投票者的所有数据,proof即为merkel路径,用于判断data是否存在于merkel树上, node.candidate为该投票者投的候选者。
步骤5,智能合约接收到一个投票信息后,首先获取发送方地址,看是否和data中node.address数据吻合。若吻合,对data和proof(调用merkel树计算根的流程)计算结果,并判断该结果是否和存在合约里的merkel root吻合,若不吻合返回信息错误。若吻合,智能合约记录一个从用户前序序列编号到节点的映射(即下面的b[node.index]=node),并开始处理投票信息。
具体实现伪代码如下:
步骤6,查找最近的投过票的父亲节点:为针对前序序列构建线段树,并实现更新功能。Lazy1[]数组记录的是一个区间里所有节点(即线段树节点) 最近父亲节点编号的最小值。当需要查找一个节点的最近父亲节点时,调用 update1(node.index,node.index,1,n,1,0)即可,即对只这个节点的单区间进行更新操作。
具体伪代码如下:
值得一提的是,线段树每次查找操作都要从根节点开始执行一次更新,因为为保证效率每次更新可能只停留到了中间节点,叶子节点还未得到更新,需要在查找时触发lazy标记下沉才能更新到叶子节点。每次查找操作的时间复杂度均为O(log n)。
步骤7,更新其他节点的最近投过票的父亲节点
当投票者(node)投完票之后,所有需要更新的节点为这个投票者的子节点。而这些需要更新的节点对应的前序遍历编号恰为从node.index+1到 node.endpoint,是一个连续的区间,故调用update1(node.index+1,node.endpoint, 1,n,1,node.index)进行最大值更新即可。(因为在先序遍历中父亲节点的编号总是小于子节点的编号,故对节点进行更新时,判断当前存储在lazy[]中的编号是否小于node.index,若小于则用node.index替换,否则不替换)。
步骤8,更新路径上(从投票者到离他最近投过票的父亲节点)所有节点的已损失票权:当投票者8投票时,如果8的最近投过票的父亲节点为1,则需要更新的路径为7->3->2->1,在先序遍历序列中不是连续区间,不适用于线段树。
解决方案采用括号序列。针对括号序列构建线段树,并实现更新功能。针对括号序列定义一个s[]数组,称为s值,初始为0。Lazy2[]数组用于处理线段树区间的s值。
具体伪代码如下:
定义parent为投票者(node)最近的父亲节点,每次需要更新时,我们让所有从node的左括号编号(node.leftbracket,第一次出现在括号序列的位置) 到parent的左括号编号-1(parent.leftbracket-1)这个区间内所有s值加上需要更新的数。这个区间称为路径对应的括号序列区间。在图1的例子中,当8投票时,让s[1-10]都加上8(投票者1的左括号编号为1,投票者8的左括号编号为11)。
计算节点(node)的已损失票权时,用s[node.leftbracket]-s[node.rightbracket] 来计算。
括号序列满足这么一个性质:假设有一条待更新的路径,比如8->7->3->2->1,对应的括号序列区间为1-10。对于不在路径上的所有点,比如4,5,6,11,12等等,它们区间1-10中或者不出现,或者出现了两次。对于出现在路径上的所有点,如7,3,2,它们恰在对应区间1-10中出现一次。故按照上述方式计算已损失票权时,仅在路径上的点增加了已损失票权(其他未在路径上的点的s值或者不变,或者左右括号s值都增加同样的数,互相抵消)。
步骤9,智能合约处理投票信息总流程,假设投票信息验证通过,智能合约依次进行如下调用:
a)计算该投票者的已损失票权(分别调用括号序列线段树查找其左右括号的s值,取差值)
b)将所投候选人票数加上投票者总票权减去已损失票权,用t表示。
c)查找该投票者的最近父亲节点(对前序序列线段树进行两次调用,一次查找一次更新),用parent表示。
d)parent所投候选者的票数减少t
e)更新从投票者到parent路径上所有点的已损失票权(调用括号序列线段树,将对应区间所有s值均加上t)
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (6)
1.一种基于区块链的投票处理方法,其特征在于,基于区块链的智能合约实现投票,所述方法包括:
在投票开始阶段,在链下对每个参与投票者的数据预处理;其中所述数据预处理包括:实际票权、前序序列编号以及括号序列编号;
对于每次的投票行为,基于前序序列的线段树查找出与所述投票者最近的投过票的父亲节点;
对于每次的投票行为,基于括号序列编号的线段树更新从所述投票者到该投票者最近投过票的父亲节点的路径上所有节点已损失票权;
对于每次的投票行为,基于前序序列的线段树查找出与所述投票者最近的投过票的父亲节点包括:
将每次查找最近父亲节点转化为连续的子树区间进行最大值更新的问题,并结合线段树数据结构在O(log n)时间复杂度内实现查找或者维护;
将每次查找最近父亲节点转化为连续的子树区间进行最大值更新的问题,并结合线段树数据结构在O(log n)时间复杂度内实现查找或者维护时,还包括:
基于线段树,对一个连续区间进行的调整操作;
所述线段树数据结构,用于保证在O(log n)时间内对连续区间进行修改和查找,
其中,所述线段树是一个平衡二叉树,每个节点对应一个区间,每个父亲节点区间均匀分给两个子节点对应区间。
2.根据权利要求1所述的基于区块链的投票处理方法,其特征在于,对于每次的投票行为,基于括号序列编号的线段树更新从所述投票者到该投票者最近投过票的父亲节点的路径上所有节点已损失票权包括:
将需要更新的路径转化为括号序列的连续区间,使所述括号序列的连续区间可结合线段树数据结构在O(log n)时间复杂度内实现更新。
3.根据权利要求2所述的基于区块链的投票处理方法,其特征在于,将需要更新的路径转化为括号序列的连续区间,使所述括号序列的连续区间可结合线段树数据结构在O(logn)时间复杂度内实现更新时,还包括:
通过链上记录merkel树的根节点,在每次用户提交merkel树叶子节点数据以及一个merkel 证明,智能合约根据该用户提交的数据以及merkel证明计算出merkel根,并判断所述merkel根与存在链上的merkel树根节点是否相同,若相同即认为数据合法,
其中所述merkel树为一个平衡二叉树,每个父亲节点的值其子节点值拼接起来做不可逆哈希函数运算。
4.一种基于区块链的投票处理装置,其特征在于,基于区块链的智能合约实现投票,所述装置包括:
预处理模块,用于在投票开始阶段,在链下对每个参与投票者的数据预处理;其中所述数据预处理包括:实际票权、前序序列编号以及括号序列编号;
第一处理模块,用于对于每次的投票行为,基于前序序列的线段树查找出与所述投票者最近的投过票的父亲节点;
将每次查找最近父亲节点转化为连续的子树区间进行最大值更新的问题,并结合线段树数据结构在O(log n)时间复杂度内实现查找或者维护;
将每次查找最近父亲节点转化为连续的子树区间进行最大值更新的问题,并结合线段树数据结构在O(log n)时间复杂度内实现查找或者维护时,还包括:
基于线段树,对一个连续区间进行的调整操作;
所述线段树数据结构,用于保证在O(log n)时间内对连续区间进行修改和查找,
其中,所述线段树是一个平衡二叉树,每个节点对应一个区间,每个父亲节点区间均匀分给两个子节点对应区间;
第二处理模块,用于对于每次的投票行为,基于括号序列编号的线段树更新从所述投票者到该投票者最近投过票的父亲节点的路径上所有节点已损失票权,将需要更新的路径转化为括号序列的连续区间,使所述括号序列的连续区间可结合线段树数据结构在O(logn)时间复杂度内实现更新。
5.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至3任一项所述的基于区块链的投票处理方法的步骤。
6.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至3任一项所述的基于区块链的投票处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911360272.1A CN111833510B (zh) | 2019-12-25 | 2019-12-25 | 基于区块链的投票处理方法及装置、设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911360272.1A CN111833510B (zh) | 2019-12-25 | 2019-12-25 | 基于区块链的投票处理方法及装置、设备、存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111833510A CN111833510A (zh) | 2020-10-27 |
CN111833510B true CN111833510B (zh) | 2021-12-14 |
Family
ID=72911741
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911360272.1A Active CN111833510B (zh) | 2019-12-25 | 2019-12-25 | 基于区块链的投票处理方法及装置、设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111833510B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115514816A (zh) * | 2021-06-03 | 2022-12-23 | 中移雄安信息通信科技有限公司 | 分布式边缘云资源调度方法、装置、设备及介质 |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102968475A (zh) * | 2012-11-16 | 2013-03-13 | 上海交通大学 | 基于最小化冗余数据划分的安全最近邻查询的方法及系统 |
CN106411503A (zh) * | 2016-11-28 | 2017-02-15 | 中国银行股份有限公司 | 区块链投票记账模式的记账方法及系统、投票及记账节点 |
CN107146318A (zh) * | 2017-06-05 | 2017-09-08 | 上海交通大学 | 基于虚拟货币的投票系统 |
CN107294727A (zh) * | 2017-05-22 | 2017-10-24 | 联动优势科技有限公司 | 一种电子投票方法、终端设备以及区块链网络 |
CN108109257A (zh) * | 2018-01-05 | 2018-06-01 | 杭州电子科技大学 | 一种基于区块链的匿名电子投票方法 |
CN108389306A (zh) * | 2018-05-05 | 2018-08-10 | 广州智汇信息技术有限公司 | 一种基于区块链的公平电子投票协议 |
CN108494091A (zh) * | 2018-04-19 | 2018-09-04 | 湖南德熠智能科技有限公司 | 应用于物联网的智能配电终端及用电监控方法 |
EP3429122A1 (en) * | 2017-07-11 | 2019-01-16 | Panasonic Intellectual Property Corporation of America | Methods and apparatuses for controlling electronic voting |
CN109272631A (zh) * | 2017-07-17 | 2019-01-25 | 卡巴斯基实验室股份制公司 | 确定借助电子投票收集的投票者的选票的系统和方法 |
TW201913515A (zh) * | 2017-08-24 | 2019-04-01 | 香港商阿里巴巴集團服務有限公司 | 選擇共識節點的處理方法、裝置及伺服器 |
CN109583903A (zh) * | 2018-11-28 | 2019-04-05 | 杭州复杂美科技有限公司 | 区块确认方法、设备和存储介质 |
WO2019072289A2 (en) * | 2018-11-30 | 2019-04-18 | Alibaba Group Holding Limited | INTELLIGENT BLOCK CHAIN CONTRACT UPDATES USING A DECENTRALIZED DECISION |
EP3518188A1 (en) * | 2018-01-29 | 2019-07-31 | Accenture Global Solutions Limited | Blockchain-based anonymized cryptologic voting |
EP3518187A1 (en) * | 2018-01-29 | 2019-07-31 | Accenture Global Solutions Limited | Blockchain-based cryptologic ballot organization |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104714852B (zh) * | 2015-03-17 | 2018-05-22 | 华中科技大学 | 一种适用于分布式机器学习的参数同步优化方法及其系统 |
CN108335084A (zh) * | 2018-02-05 | 2018-07-27 | 上海千加信息科技有限公司 | 一种组织机构的智能运行系统 |
CN108390546A (zh) * | 2018-04-19 | 2018-08-10 | 湖南德熠智能科技有限公司 | 一种应用于物联网的智能配电终端 |
CN108597090A (zh) * | 2018-04-20 | 2018-09-28 | 济南浪潮高新科技投资发展有限公司 | 一种基于区块链的投票方法、装置及系统 |
CN108933656B (zh) * | 2018-07-18 | 2021-09-10 | 京东方科技集团股份有限公司 | 在线作品投票方法及装置、计算机设备、可读存储介质 |
CN109830029B (zh) * | 2019-01-18 | 2021-05-14 | 深圳智链物联科技有限公司 | 投票方法、装置、系统及服务器、计算机可读存储介质 |
-
2019
- 2019-12-25 CN CN201911360272.1A patent/CN111833510B/zh active Active
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102968475A (zh) * | 2012-11-16 | 2013-03-13 | 上海交通大学 | 基于最小化冗余数据划分的安全最近邻查询的方法及系统 |
CN106411503A (zh) * | 2016-11-28 | 2017-02-15 | 中国银行股份有限公司 | 区块链投票记账模式的记账方法及系统、投票及记账节点 |
CN107294727A (zh) * | 2017-05-22 | 2017-10-24 | 联动优势科技有限公司 | 一种电子投票方法、终端设备以及区块链网络 |
CN107146318A (zh) * | 2017-06-05 | 2017-09-08 | 上海交通大学 | 基于虚拟货币的投票系统 |
EP3429122A1 (en) * | 2017-07-11 | 2019-01-16 | Panasonic Intellectual Property Corporation of America | Methods and apparatuses for controlling electronic voting |
CN109272631A (zh) * | 2017-07-17 | 2019-01-25 | 卡巴斯基实验室股份制公司 | 确定借助电子投票收集的投票者的选票的系统和方法 |
TW201913515A (zh) * | 2017-08-24 | 2019-04-01 | 香港商阿里巴巴集團服務有限公司 | 選擇共識節點的處理方法、裝置及伺服器 |
CN108109257A (zh) * | 2018-01-05 | 2018-06-01 | 杭州电子科技大学 | 一种基于区块链的匿名电子投票方法 |
EP3518188A1 (en) * | 2018-01-29 | 2019-07-31 | Accenture Global Solutions Limited | Blockchain-based anonymized cryptologic voting |
EP3518187A1 (en) * | 2018-01-29 | 2019-07-31 | Accenture Global Solutions Limited | Blockchain-based cryptologic ballot organization |
CN108494091A (zh) * | 2018-04-19 | 2018-09-04 | 湖南德熠智能科技有限公司 | 应用于物联网的智能配电终端及用电监控方法 |
CN108389306A (zh) * | 2018-05-05 | 2018-08-10 | 广州智汇信息技术有限公司 | 一种基于区块链的公平电子投票协议 |
CN109583903A (zh) * | 2018-11-28 | 2019-04-05 | 杭州复杂美科技有限公司 | 区块确认方法、设备和存储介质 |
WO2019072289A2 (en) * | 2018-11-30 | 2019-04-18 | Alibaba Group Holding Limited | INTELLIGENT BLOCK CHAIN CONTRACT UPDATES USING A DECENTRALIZED DECISION |
Non-Patent Citations (6)
Title |
---|
《基于投票机制的拜占庭容错共识算法》;王海勇,郭凯璇,潘启青;《计算机应用》;20190610;第39卷(第6期);全文 * |
《计算机科学》2018年第45卷总目次;《计算机科学》;20181215(第12期);全文 * |
《论区块链的流民主》;胖车库;《https://www.chainnews.com/articles/571754687608.htm》;20191221;第1-7页 * |
untangling Blockchain: A Data Processing View of Blockchain Systems;Tien Tuan Anh Dinh,Rui Liu,Meihui Zhang;《IEEE Transactions on knowledge and data engineering》;20180630;第30卷(第7期);全文 * |
一种基于区块链技术的可信电子投票方法;范洪博等;《软件导刊》;20180515(第05期);全文 * |
基于区块链的电子投票选举系统研究分析;张昕伟等;《电子技术应用》;20171106(第11期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111833510A (zh) | 2020-10-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
She et al. | Utility-aware social event-participant planning | |
CN110533183A (zh) | 一种流水线分布式深度学习中异构网络感知的模型划分与任务放置方法 | |
CN109949160A (zh) | 一种区块链的分片方法及装置 | |
CN108322541B (zh) | 一种自适应的分布式体系架构 | |
CN104076809B (zh) | 数据处理装置以及数据处理方法 | |
CN110825980B (zh) | 一种基于对抗生成网络的微博话题推送方法 | |
CN106610867B (zh) | 一种片上网络任务调度方法及装置 | |
CN111833510B (zh) | 基于区块链的投票处理方法及装置、设备、存储介质 | |
CN106372101A (zh) | 一种视频推荐方法和装置 | |
CN108334997A (zh) | 基于支撑故障事件约束机组组合的备用优化方法和装置 | |
CN103942197A (zh) | 数据监控处理方法及设备 | |
CN102231757A (zh) | 一种在线的服务组合推荐系统及其推荐方法 | |
CN111905377A (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN112149990A (zh) | 一种基于预测的模糊供需匹配方法 | |
CN111414589A (zh) | 基于区块链的作品原创审核方法、装置及设备 | |
Folino et al. | Discovering High-Level Performance Models for Ticket Resolution Processes: (Short Paper) | |
CN103995886A (zh) | 一种多维度产品设计知识推送框架与构建方法 | |
US20200394465A1 (en) | Updating learned models | |
CN110196951A (zh) | 用户匹配方法及设备 | |
CN108334645A (zh) | 一种基于图模型反馈更新的活动推荐方法 | |
CN114492849B (zh) | 一种基于联邦学习的模型更新方法及装置 | |
CN112037078B (zh) | 一种对异构网络异质结点上谣言传播情况预测方法和系统 | |
Haimes | Multiple-criteria decisionmaking: A retrospective analysis | |
CN103645889B (zh) | 软件自适应的动态生成方法 | |
CN114036262A (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 | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230718 Address after: 100085 1127-25, 11 / F, 18 Zhongguancun Street, Haidian District, Beijing Patentee after: Beijing Yizhi Technology Co.,Ltd. Address before: 100085 1127-25, 11 / F, 18 Zhongguancun Street, Haidian District, Beijing Patentee before: Beijing Yizhi Technology Co.,Ltd. Patentee before: Nanjing Yizhi Zhixing Technology Co.,Ltd. |