Commit 31939bc9 authored by THAKARE AKSHAY HARIBHAU's avatar THAKARE AKSHAY HARIBHAU

Merge branch 'algorand' into 'master'

Fianlly submitted the project but not the complete

See merge request !10
parents 9b7da117 9098140d
lambda_proposer = 30# wait time for priority messages to be received
tou_proposer = 26 # proposer rolecount
ROLE_BLOCK_PROPOSER = 'BLOCK_PROPOSER'
tou_step = 28 # tou is expected number of users that sortition selects for committee
ROLE_COMMITEE_FOR_VOTE = 'committee'
lambda_block = 300 #seconds
lambda_step = 30
BLOCK_PROPOSAL_MSG_type = 'BLOCK_PROPOSAL_MSGs'
PRIORITY_MSG_type = 'PRIORITY_MSG'
COMMITTEE_VOTE_MSG_type = "COMMITTEE_VOTE"
TIMEOUT = "TIMEOUT"
T = 0.001 # 2/3 # T isa a fraction of expected committee size that defines BA*`s voting thershold
T_FINAL = 0.001
tou_FINAL = 28
FINALIZED_BLOCK_msg_type = "FINALIZED_BLOCK"
TENTATIVE_BLOCK_msg_type = "TENTATIVE_BLOCK"
NUMBER_OF_NODES_IN_NETWORK = 50
MAXSTEP = 15
FINAL_STEP = 9999999999
'''------------------------------------------------------------------------------'''
Experiment_1_OBS = {} #KEY : (subusercount,sortitionCount)
\ No newline at end of file
......@@ -78,8 +78,9 @@ class Link(SystemEntity):
'''
#todo process messages in queue
# generate tasks for todolist based on messges
for message in self.messageQueue:
for message in list(self.messageQueue):
self.scheduleMessageDelievery(message[0],message[1])
self.dequeMessage()
# TODO : perform task from todolist which are relevant for current tick
......
......@@ -2,3 +2,7 @@
2 3
3 4
4 1
3 5
2 6
3 7
7 4
\ No newline at end of file
0 57
0 62
0 58
1 23
1 65
1 10
2 84
2 58
2 90
2 99
3 22
3 56
4 72
4 62
4 38
5 52
5 57
5 42
6 10
6 90
7 21
7 45
8 76
8 71
9 32
9 97
9 46
10 59
10 79
11 83
11 81
11 23
12 27
12 75
12 59
13 66
13 44
13 41
14 99
14 65
15 16
15 71
15 95
16 40
17 95
17 74
17 34
17 29
18 39
18 52
19 96
19 82
20 81
20 90
21 26
21 91
22 26
22 92
23 97
23 44
24 27
24 94
25 80
25 77
25 46
26 48
26 30
27 83
27 80
28 40
28 44
28 98
29 78
30 74
30 48
30 50
31 52
31 55
31 49
32 91
32 93
33 47
33 51
34 37
35 85
35 61
35 48
36 98
36 93
37 57
37 51
37 55
38 73
38 67
38 81
39 40
39 94
40 59
41 48
42 85
42 68
42 78
43 53
43 98
44 65
45 80
46 88
46 56
47 74
49 82
49 68
49 53
50 89
51 93
51 68
54 99
54 63
55 96
55 87
56 71
56 91
58 83
60 78
60 97
61 63
62 68
62 98
63 74
64 70
64 88
66 87
67 90
67 99
69 89
69 81
70 86
72 93
72 73
75 82
76 77
78 84
79 97
83 85
85 86
92 94
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
10 11
11 12
12 13
13 14
14 15
15 16
16 17
17 18
18 19
19 20
20 21
21 22
22 23
23 24
24 25
25 26
26 27
27 28
28 29
29 30
30 31
31 32
32 33
33 34
34 35
35 36
36 37
37 38
38 39
39 40
40 41
41 42
42 43
43 44
44 45
45 46
46 47
47 48
48 49
......@@ -4,16 +4,22 @@ import csv
from Node import Node
from OverlayNode import OverlayNode
import logging
logger = logging.getLogger(__name__)
import random
from numpy.random import randint
import numpy as np
import Config
class Network():
def __init__(self):
self.logger = logging.getLogger(__name__)
self.nodes = {}#{1 : Node(1),2:Node(2)}
self.links = {} #{(1,2):Link(1-2),(2,1):Link(2,1),(3,2):Link(3*2)} linkID = tuple(1,2)
self.networkClockTime = 0
self.pk_weight_map = {}
self.time = 0
self.BlocksHashTOBLOCK_MAP = {}
def setupNetwork(self):
'''
......@@ -27,19 +33,34 @@ class Network():
:return:
'''
with open('Nodes.dat', 'r') as f:
w = randint(1, 51, Config.NUMBER_OF_NODES_IN_NETWORK) # 51 is excluded - range (1,50)
print('Stakes that are given to the nodes are : \n')
print(w)
print('\n')
self.badaW = np.sum(w)
print(self.badaW)
i = 0
with open('Nodes1.dat', 'r') as f:
reader = csv.reader(f)
for row in reader:
node = row[0] # tuple of a link
self.nodes.update({node:OverlayNode(node,self)})
node = row[0] # Node id
xnode = {node:OverlayNode(node,self,w[i])}
self.pk_weight_map.update({xnode[node].pk:w[i]})
self.nodes.update(xnode)#added node to network
# print(self.nodes.get('1')) #keys are strings
i = i+1
with open('Links.dat', 'r') as f:
with open('Links1.dat', 'r') as f:
reader = csv.reader(f)
for row in reader:
link = tuple(row[0].split()) # tuple of a link
tup = row[0].split()
link = None # tuple of a link
if int(tup[0]) < int(tup[1]):
link = (tup[0],tup[1])
else:
link = (tup[1],tup[0])
linkDelay = 1
self.links.update({link:Link(link,self,linkDelay)})
......@@ -47,15 +68,23 @@ class Network():
self.nodes.get(link[0]).adjacentNodes.append(link[1])
self.nodes.get(link[1]).adjacentNodes.append(link[0])
# print(self.links.get(('1', '2'))) #keys are strings
for node in self.nodes.values():
self.logger.info("node {}".format((node.id,node.adjacentNodes)))
pass
def getLink(self,tup):
if int(tup[0]) < int(tup[1]) :
return self.links.get(tup)
else:
return self.links.get((tup[1],tup[0]))
def simulate(self,time):
self.time = time
# logger.info("simulating .. ")
self.networkClockTime = time
# Note links should be simulated before nodes
# Note links should be simulated before nodeself.ResumeTasks.append(("nextOn", self.startNodeLifeCycleGenerator,))s
# in order to receive the messge which is supposed to be received in this tick
for link in self.links.values():
link.simulate(time)
......@@ -63,6 +92,14 @@ class Network():
for node in self.nodes.values():
node.simulate(time)
if time == str(99999):
for link in self.links.values():
self.logger.info("remaining tasks : {}".format((link.link,link.todoList)))
for node in self.nodes.values():
self.logger.info("reamaining tasks : {}".format((node.id,node.todoList)))
self.logger.info("reamaining tasks : {}".format(node.ResumeTasks))
pass
if __name__ == '__main__':
......
from SystemEntity import SystemEntity
import logging
import Utility
import hashlib
from collections import defaultdict
class Node(SystemEntity):
def __init__(self,id,network):
def __init__(self,id,network,weight):
SystemEntity.__init__(self,network)
self.logger = logging.getLogger(__name__ + "-" + str(id))
self.id = id
self.weight = weight
self.adjacentNodes = []
self.messageQueue = []
self.sk,self.pk = Utility.genratePublicPrivateKey()
self.ResumeTasks = defaultdict(list)
'''make sure methods included here are not overriddenn'''
self.commands={"sendMessage":self.sendMessage,
"nextOn":self.nextOn
}
self.messagesTillNow = [] # list of messages forwarded
self.uniqueReceivedMessages = defaultdict(list) #this is a list of messages in buffer which were not processed, expecting two list of 'BLOCK_PROPOSAL_MSG','PRIORITY_MSG'
def enqueMessage(self,message):
......@@ -37,23 +47,45 @@ class Node(SystemEntity):
:param params: ('1','2','hello2')
:return:
'''
link = self.network.links.get((params[0],params[1]))
link = self.network.getLink((params[0],params[1]))
link.enqueMessage((time,params))
self.logger.info("Sending : " + str((time,params)))
# any message going out is recorded as sent and will be checked for duplicates
self.messagesTillNow.append(hashlib.sha256((str(params[2])).encode('utf-8')).hexdigest())
###### self.logger.info("Sending : " + str((time,params)))#(time,(sender,receiver,payload))
pass
def broadcast(self,time,gossipPayload):
for node in self.adjacentNodes:
link = self.network.links.get((self.id, node.id))
'''
:param time:
:param gossipPayload:
:return:
broadcast and processMessage together makes it gossip protocol
'''
self.messagesTillNow.append(hashlib.sha256((str(gossipPayload)).encode('utf-8')).hexdigest())
for nodeid in self.adjacentNodes:
node = self.network.nodes.get(nodeid)
link = self.network.getLink((self.id, node.id))
link.enqueMessage((time, (self.id, node.id,gossipPayload)))
self.logger.info("Sending : " + str((time, (self.id, node.id,gossipPayload))))
###### self.logger.info("Sending : " + str((time, (self.id, node.id,gossipPayload))))#(time,(sender,receiver,payload))
def processMessage(self,time,payload):
print("fianlly reached : " + str(payload))
'''remove any extra headers like source and destination here '''
payload.pop(0) # removed source header
payload.pop(0) #removed destination header
# TODO check messages for duplicates and brodacast them : Done
if not (hashlib.sha256((str(payload[0])).encode('utf-8')).hexdigest() in self.messagesTillNow) :
self.broadcast(time,payload[0])
self.uniqueReceivedMessages[payload[0][0]].append(payload[0])
def nextOn(self,time,generator):
return next(generator[0])
def startNodeLifeCycle(self):
pass
def simulate(self,time):
# self.logger.info("simulating .. ")
......@@ -69,9 +101,31 @@ class Node(SystemEntity):
# generate tasks for todolist based on messges
for message in list(self.messageQueue): #this creates adupliacte list and iterate over it while making changes to original queue
self.processMessage(message[0],list(message[1])) # message : (time,(payload))
self.logger.info("received : "+str(message))
# self.logger.info("received : "+str(message))
self.dequeMessage()
# check if main ba* has to be resumed or not
try:
ResumeTasks = self.ResumeTasks.pop(time)
for ResumeTask in ResumeTasks:
command = self.commands.get(ResumeTask[0])
ResumeOut = command(time,ResumeTask[1:])
'''
synatx for proper return commands
yield "resume",timeafter_which_to_resume
'''
if ResumeOut and ResumeOut[0] == "resume":
# self.logger.info("resume has been called")
self.ResumeTasks[str(int(time)+int(ResumeOut[1]))].append(("nextOn", self.startNodeLifeCycleGenerator,))
except KeyError as ke:
# not task pending at this time
pass
except StopIteration as si:
pass
except IndexError as Ie:
self.logger.info("No resume task from ba*")
# TODO : perform task from todolist which are relevant for current tick
......@@ -79,12 +133,12 @@ class Node(SystemEntity):
tasks = self.todoList.pop(time)
for task in tasks:
command = self.commands.get(task[0])
command(time,task[1:])
out = command(time,task[1:])
except KeyError as ke:
# not task pending at this time
pass
pass
if __name__ == '__main__':
# node = Node('1')
......@@ -100,4 +154,3 @@ if __name__ == '__main__':
......@@ -2,3 +2,6 @@
2
3
4
5
6
7
\ No newline at end of file
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
from Node import Node
import logging
import Utility
import hashlib
import Config
import random
from ecdsa import SigningKey,SECP256k1
from ecdsa.keys import BadSignatureError
genesisBlock = ("I am the first block")
#
# class Role:
# def __init__(self):
# self.role =
class OverlayNode(Node):
def __init__(self,id,network):
Node.__init__(self,id,network)
self.commands.update({})
def processMessage(self,time,payload):
super(OverlayNode, self).processMessage(time,payload)
print("from overlay node : "+str(payload))
class OverlayNode(Node):
def __init__(self,id,network,weight):
Node.__init__(self,id,network,weight)
self.blockchain = [genesisBlock]
self.tentativeblockchain = []
self.currentRound = 1 # round is equivalent ot block height
self.step = 0
self.currentRoleCount = 20
self.currentRole = "BLOCK_PROPOSER"
self.currentSeed = None
self.currentPreviousHash = None
self.startNodeLifeCycleGenerator = self.startNodeLifeCycle()
# adding initial task of bootstraping node.and it only contains ba* resume tasks
# self.ResumeTasks.append(("nextOn", self.startNodeLifeCycleGenerator,))
self.ResumeTasks['1'].append(("nextOn", self.startNodeLifeCycleGenerator,))
self.commands.update({})
def printStats(self):
print('----------------------------------------------------------------------------------------------------------------')
print(Config.BLOCK_PROPOSAL_MSG_type," : counts : {}".format(len(self.uniqueReceivedMessages[Config.BLOCK_PROPOSAL_MSG_type])))
print(Config.COMMITTEE_VOTE_MSG_type," : counts : {}".format(len(self.uniqueReceivedMessages[Config.COMMITTEE_VOTE_MSG_type])))
print(Config.TENTATIVE_BLOCK_msg_type," : counts : {}".format(len(self.uniqueReceivedMessages[Config.TENTATIVE_BLOCK_msg_type])))
print(Config.FINALIZED_BLOCK_msg_type," : counts : {}".format(len(self.uniqueReceivedMessages[Config.FINALIZED_BLOCK_msg_type])))
print("MESSAGES TILL NOW :COUNT : {}".format(len(self.messagesTillNow)))
print('----------------------------------------------------------------------------------------------------------------')
# def processMessage(self,time,payload):
# super(OverlayNode, self).processMessage(time,payload)
# ##print("from overlay node : "+str(payload))
def committeeVote(self,seed ,round,step,tou,value,fromwhere_it_is_called):
role = (Config.ROLE_COMMITEE_FOR_VOTE, round, step)
sorthash, proof, j = Utility.sortition(self.sk, seed,
tou,
role,
self.weight, self.network.badaW,
self.pk)
if j > 0:
self.logger.info("selection for VOTING COMMITEE :[ "+ str(fromwhere_it_is_called)+" ] with J = {}".format(j))
payload = (
self.currentRound, step,sorthash,
proof, self.currentPreviousHash, value)
committeeVoteMsg = (Config.COMMITTEE_VOTE_MSG_type,
(self.pk, payload,
self.sk.sign(bytes(
str(payload).encode(
'UTF8')))))
self.broadcast(self.network.time, committeeVoteMsg)
self.logger.info(
"Broadcasting commitee messgae : ["+fromwhere_it_is_called+" : {}".format(committeeVoteMsg))
pass
def algo_processMsg(self,msg,tou):
pk = msg[1][0]
sign = msg[1][2]
payload = msg[1][1]
try:
pk.verify(sign,bytes(str(payload).encode('UTF8')) )
except BadSignatureError as badSign:
##print("bad signature")
return 0,None,None
round, step, sorthash, proof, previousblockHash, value = payload
if previousblockHash != hashlib.sha256(self.blockchain[-1].encode('utf-8')).hexdigest() :
##print("not in the right chain")
return 0, None, None
seed = self.currentSeed
role= (Config.ROLE_COMMITEE_FOR_VOTE, round, step)
# Todo something is wrong here not getting correct votes back
self.logger.info("inputs to verify sort : {}".format((pk, sorthash, proof, seed, tou, role, self.network.pk_weight_map.get(pk), self.network.badaW)))
votes = Utility.verifySort(pk, sorthash, proof, seed, tou, role, self.network.pk_weight_map.get(pk), self.network.badaW)
self.logger.info("outpusts of veifysort : {}".format(votes))
if votes :
self.logger.info("THese are valid committee votes with votes : "+str(votes))
##print(votes,"\t",value,"\t",sorthash)
return votes,value,sorthash
pass
def partOfCountVotes(self,round,step,start,counts,voters,T,tou):
msgs = self.uniqueReceivedMessages.pop(Config.COMMITTEE_VOTE_MSG_type)
##print("-------------msgs , ", self.id)
#print(msgs)
for msg in msgs:
msg_round = msg[1][1][0]
msg_step = msg[1][1][1]
payload = msg[1][1]
msg_pk = msg[1][0]
# ##print(round, " # ",step )
if msg_round== round and msg_step==step : #check if message belong to current round and current step or not
votes,value,sorthash = self.algo_processMsg(msg,tou)
if msg_pk in voters or votes == 0:
##print(self.id + " continuing")
continue
voters.append(msg_pk)
##print("yup its wrong here")
counts[value] = counts.get(value, votes)
##print('--------------counts-------------',self.id)
##print(counts)
if counts[value] > T*tou :
##print("returning value")
return value
pass
else:
self.uniqueReceivedMessages[Config.COMMITTEE_VOTE_MSG_type].append(msg)
pass
pass
def commonCoin(self,round,step,tou):
msgs = self.uniqueReceivedMessages.pop(Config.COMMITTEE_VOTE_MSG_type)
minhash = 2**256
for msg in msgs:
msg_round = msg[1][1][0]
msg_step = msg[1][1][1]
payload = msg[1][1]
msg_pk = msg[1][0]
if msg_round== round and msg_step==step : #check if message belong to current round and current step or not
votes,value,sorthash = self.algo_processMsg(msg,tou)
for i in range(1,votes):
input_to_SHA256 = (sorthash, i)
temp = hashlib.sha256((str(input_to_SHA256)).encode('utf-8')).hexdigest()
h = int(temp,16)
if h < minhash :
minhash = h
else:
self.uniqueReceivedMessages[Config.COMMITTEE_VOTE_MSG_type].append(msg)
pass
return minhash % 2
pass
def startNodeLifeCycle(self):
'''THis is monolithic algorand algorithm for a NOde'''
self.logger.info("Life cycle started")
while True:
#increment round number
self.logger.info("STARTING ROUND NUMBER : {}".format(self.currentRound))
blockForBA = None
# Checking if I am a Block Propser
previousHash = hashlib.sha256(self.blockchain[-1].encode('utf-8')).hexdigest()
self.currentPreviousHash = previousHash
seed = ( previousHash,self.currentRound,0)
self.currentSeed= (previousHash, self.currentRound, 0)
self.logger.info("priority sortiion ip : {}".format((self.sk,seed,Config.tou_proposer, Config.ROLE_BLOCK_PROPOSER, self.weight, self.network.badaW, self.pk)))
hash, proof, j = Utility.sortition(self.sk,seed,Config.tou_proposer, Config.ROLE_BLOCK_PROPOSER, self.weight, self.network.badaW, self.pk)
self.logger.info("priority sortition op : {}".format(( hash, proof, j )))
if j > 0 : # only the block proposer commity mebers can enter here
self.logger.info("selection for BLOCK PROPOSAL with J ={}".format(j))
min_sha_priority = None
# min_sub_user_index = None
# msg_to_broadcast = ( currentRound, hash , min_sub_user_index , min_sha_priority )
for sub_user_index in range(self.weight):
input_to_SHA256 = (hash , sub_user_index,)
sha256_hash = hashlib.sha256((str(input_to_SHA256)).encode('utf-8')).hexdigest()
if not min_sha_priority :
min_sha_priority = sha256_hash
min_sub_user_index = sub_user_index
if sha256_hash < min_sha_priority:
min_sha_priority = sha256_hash
min_sub_user_index = sub_user_index
priority_msg_to_broadcast = ( Config.PRIORITY_MSG_type,self.currentRound, hash , min_sub_user_index , min_sha_priority,proof )
self.logger.info("broadcsting priority message : {}".format(priority_msg_to_broadcast))
self.broadcast(self.network.time, priority_msg_to_broadcast)
self.logger.info("WAITING FOR PRIORITY MESSAGES from others")
yield "resume",Config.lambda_proposer
greater_flag = True
msgs = self.uniqueReceivedMessages.pop(Config.PRIORITY_MSG_type)
msgs.sort(key=lambda priority_msg_other: priority_msg_other[4])
self.logger.info("Priority proposals from other nodes (number of proposal, proposals) : {}".format((len(msgs),list(map(lambda x: x[4], msgs)))))
# self.logger.info("Priority proposals from other nodes (number of proposal, proposals) : {}".format((len(msgs),msgs)))
for priority_msg_other in msgs :
if min_sha_priority > priority_msg_other[4]:
greater_flag = False
if greater_flag :
self.logger.info("I am the block proposer")
'''
BLOCK_PROPOSAL_MSG_to_broadcast : ("BLOCK_PROPOSAL_MSG", previousblockhash,A random string as txns,Nod`s priority payload)
'''
BLOCK_PROPOSAL_MSG_to_broadcast = (Config.BLOCK_PROPOSAL_MSG_type,
previousHash,
Utility.pseudoRandomGenerator(random.randint(0,1000)),
priority_msg_to_broadcast[1:])
self.logger.info("broadcsting BLOCK Proposal Message : {}".format(BLOCK_PROPOSAL_MSG_to_broadcast))
self.broadcast(self.network.time, BLOCK_PROPOSAL_MSG_to_broadcast)
blockForBA = (previousHash,BLOCK_PROPOSAL_MSG_to_broadcast[2])
self.network.BlocksHashTOBLOCK_MAP[Utility.pseudoRandomGenerator(blockForBA)] = blockForBA
self.logger.info('Proposed block : {}'.format(blockForBA))
else: # others than block proposers
# everybody except highest priority block proposer is waiting for lambda_proposer+ lambda_block 33 seconds
yield "resume", Config.lambda_proposer + Config.lambda_block
else: # others than block proposers
# everybody is waiting for lambda_proposer+ lambda_block 33 seconds
self.logger.info("GOING TO SLEEP for {}".format(Config.lambda_proposer+Config.lambda_block))
yield "resume", Config.lambda_proposer+Config.lambda_block
# TODO:done : drop any priority messages in queue
try :
self.uniqueReceivedMessages.pop(Config.PRIORITY_MSG_type)
except Exception:
pass
######### Performing selection of block BA* ############################
if not (self.uniqueReceivedMessages[Config.BLOCK_PROPOSAL_MSG_type] or blockForBA) :
blockForBA = (previousHash,"Empty")
self.network.BlocksHashTOBLOCK_MAP[Utility.pseudoRandomGenerator(blockForBA)] = blockForBA
elif not blockForBA :
# Todo select block from highest priority node
blockForBA = (self.uniqueReceivedMessages[Config.BLOCK_PROPOSAL_MSG_type][0][1],
self.uniqueReceivedMessages[Config.BLOCK_PROPOSAL_MSG_type][0][2])
pk = self.uniqueReceivedMessages[Config.BLOCK_PROPOSAL_MSG_type][0][3][4]
hash = self.uniqueReceivedMessages[Config.BLOCK_PROPOSAL_MSG_type][0][3][1]
proof = self.uniqueReceivedMessages[Config.BLOCK_PROPOSAL_MSG_type][0][3][4]
w = self.network.pk_weight_map.get(pk)
seed = (previousHash, self.currentRound, 0)
# TODO verify block proposal
j = Utility.verifySort(pk, hash, proof, seed, Config.tou_proposer, Config.ROLE_BLOCK_PROPOSER, w, self.network.badaW)
if j :
self.logger.info("it is a valid block proposed message with j : {}".format(j))
#todo : DONE : drop block proposal msges
try :
self.uniqueReceivedMessages.pop(Config.BLOCK_PROPOSAL_MSG_type)
except Exception as e:
self.logger.error(e)
# #print(blockForBA)
hashof_blockForBA = Utility.pseudoRandomGenerator(blockForBA)
######### END : Performing selection of block BA* ############################
self.printStats()
''' START : REDUCTION ALGORITHM '''
''' COmmitte vote reduction step 1'''
reduct_step_1 = 1
# reduct_seed = (previousHash, self.currentRound, reduct_step_1)
reduct_seed = self.currentSeed
reduct_role_1 = (Config.ROLE_COMMITEE_FOR_VOTE,self.currentRound,reduct_step_1)
self.logger.info("sortition inside reduction step 1 ip : {}".format((self.sk, reduct_seed, Config.tou_step, reduct_role_1,
self.weight, self.network.badaW, self.pk)))
reduct_sorthash, reduct_proof, reduct_j = Utility.sortition(self.sk, reduct_seed, Config.tou_step, reduct_role_1,
self.weight, self.network.badaW, self.pk)
self.logger.info("sortition inside reduction step 1 op : {}".format((reduct_sorthash, reduct_proof, reduct_j )))
if reduct_j > 0:
self.logger.info("selection for VOTING COMMITEE with J ={}".format(reduct_j))
payload = (self.currentRound,reduct_step_1,reduct_sorthash,reduct_proof,previousHash,hashof_blockForBA)
committeeVoteMsg = (Config.COMMITTEE_VOTE_MSG_type,(self.pk,payload,self.sk.sign(bytes(str(payload).encode('UTF8')))))
self.broadcast(self.network.time,committeeVoteMsg)
self.logger.info("Broadcasting commitee messgae : {}".format(committeeVoteMsg))
# ##print(self.uniqueReceivedMessages[Config.COMMITTEE_VOTE_MSG_type])
yield "resume",Config.lambda_block+Config.lambda_step
######## count votes for hblock1 ###########
countVote_round = self.currentRound
countVote_reduct_step_1 = 1
# Config.T
# Config.tou_step
countVote_lmbda = Config.lambda_block+Config.lambda_step
start = int(self.network.time)
counts = {}
voters = []
hblock1 = None
while True:
if not self.uniqueReceivedMessages[Config.COMMITTEE_VOTE_MSG_type] :
if int(self.network.time) > start + countVote_lmbda:
##print(self.id + "Timing out")
hblock1 = Config.TIMEOUT
break
pass
else:
temp_return = self.partOfCountVotes(countVote_round,countVote_reduct_step_1,start,counts,voters,Config.T,Config.tou_step)
##print("temp_retiurn " ,temp_return)
if temp_return :
hblock1 = temp_return
break
yield "resume",1 # this is to allow other nodes to be simulated and not get this node into infinite waiting on single node
self.logger.info("returning from first count values with return value : {}".format(hblock1))
##print("returning from first count values with return value",hblock1)
self.logger.info("votes count reduction step 1 : {}".format(counts))
######## END : count votes for hblock1 ###########
self.printStats()
self.uniqueReceivedMessages[Config.COMMITTEE_VOTE_MSG_type].clear()
yield 'resume',50
''' END : COmmitte vote reduction step 1'''
''' Start : COmmitte vote reduction step 2 '''
empty_hash = Utility.pseudoRandomGenerator((previousHash, "Empty"))
# which block to vote empty or hblock1
reduct_step2_block_to_vote = None
if hblock1 == Config.TIMEOUT :
reduct_step2_block_to_vote = empty_hash
self.logger.info("consensus for block in reduction step 1 : {}".format((previousHash, "Empty")))
pass
else:
reduct_step2_block_to_vote = hblock1
self.logger.info("consensus for block in reduction step 1 : {}".format(reduct_step2_block_to_vote))
pass
''' COmmitte vote reduction step2 : reduct_step2_block_to_vote'''
variables_reduct_step_2 = {}
variables_reduct_step_2['step'] = 2
# variables_reduct_step_2['seed'] = (previousHash, self.currentRound, variables_reduct_step_2['step'])
variables_reduct_step_2['seed'] = self.currentSeed
variables_reduct_step_2['role'] = (
Config.ROLE_COMMITEE_FOR_VOTE, self.currentRound, variables_reduct_step_2['step'])
variables_reduct_step_2['sorthash'], variables_reduct_step_2['proof'], variables_reduct_step_2[
'j'] = Utility.sortition(self.sk, variables_reduct_step_2['seed'],
Config.tou_step,
variables_reduct_step_2['role'],
self.weight, self.network.badaW,
self.pk)
# ##print("Reduction algo " + self.id," : ",reduct_j)
if variables_reduct_step_2['j'] > 0:
self.logger.info("selection for VOTING COMMITEE with J =" + str(variables_reduct_step_2['j']))
variables_reduct_step_2['payload'] = (
self.currentRound, variables_reduct_step_2['step'], variables_reduct_step_2['sorthash'],
variables_reduct_step_2['proof'], previousHash, reduct_step2_block_to_vote)
variables_reduct_step_2['committeeVoteMsg'] = (Config.COMMITTEE_VOTE_MSG_type,
(self.pk, variables_reduct_step_2['payload'],
self.sk.sign(bytes(
str(variables_reduct_step_2['payload']).encode(
'UTF8')))))
self.broadcast(self.network.time, variables_reduct_step_2['committeeVoteMsg'])
self.logger.info("Broadcasting commitee messgae" + str(variables_reduct_step_2['committeeVoteMsg']))
# yield "resume", Config.lambda_block + Config.lambda_step
''' COmmitte vote reduction step2 : reduct_step2_block_to_vote'''
######## count votes for hblock1 ###########
CountVotes_step2 = {}
CountVotes_step2['countVote_round'] = self.currentRound
CountVotes_step2['countVote_step'] = 2
# Config.T
# Config.tou_step
CountVotes_step2['countVote_lmbda'] = Config.lambda_block + Config.lambda_step
CountVotes_step2['start'] = int(self.network.time)
CountVotes_step2['counts'] = {}
CountVotes_step2['voters'] = []
CountVotes_step2['hblock2'] = None
while True:
if not self.uniqueReceivedMessages[Config.COMMITTEE_VOTE_MSG_type]:
if int(self.network.time) > CountVotes_step2['start'] + CountVotes_step2[
'countVote_lmbda']:
##print(self.id + "Timing out")
CountVotes_step2['hblock2'] = Config.TIMEOUT
break
pass
else:
CountVotes_step2['temp_return'] = self.partOfCountVotes(
CountVotes_step2['countVote_round'], CountVotes_step2['countVote_step'],
CountVotes_step2['start'], CountVotes_step2['counts'],
CountVotes_step2['voters'], Config.T, Config.tou_step)
#print("CountVotes_step2",CountVotes_step2['temp_return'])
if CountVotes_step2['temp_return']:
CountVotes_step2['hblock2'] = CountVotes_step2['temp_return']
break
yield "resume", 1 # this is to allow other nodes to be simulated and not get this node into infinite waiting on single node
self.logger.info(
"returning from first count values with return value : " + str(CountVotes_step2['hblock2']))
#print("CountVotes_step2",CountVotes_step2['hblock2'])
######## END : count votes for hblock1 ###########
var_BBA_star = {}
#print('++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++')
if CountVotes_step2['hblock2'] == Config.TIMEOUT:
var_BBA_star['block_hash']= empty_hash
else:
var_BBA_star['block_hash'] = CountVotes_step2['hblock2']
#print("I am culprit " )
#print(var_BBA_star['block_hash'])
self.printStats()
# self.uniqueReceivedMessages[Config.COMMITTEE_VOTE_MSG_type].clear()
yield 'resume', 50
''' END : COmmitte vote reduction step 2 '''
''' END : REDUCTION ALGORITHM '''
''' START : BBA* ALGORITHM '''
var_BBA_star['step'] = 1
var_BBA_star['r'] = var_BBA_star['block_hash']
var_BBA_star['empty_hash'] = Utility.pseudoRandomGenerator((previousHash, "Empty"))
while var_BBA_star['step'] < Config.MAXSTEP :
''' COmmitte vote BBA_CASE_1 : BBA_CASE_1'''
self.committeeVote(self.currentSeed,
self.currentRound,
var_BBA_star['step'],
Config.tou_step,
var_BBA_star['r'],
'BBA_CASE_1')
''' COmmitte vote BBA_CASE_1 :BBA_CASE_1'''
######## count votes for CountVotes_BBA_CASE_1 ###########
CountVotes_BBA_CASE_1 = {}
CountVotes_BBA_CASE_1['countVote_round'] = self.currentRound
CountVotes_BBA_CASE_1['countVote_step'] = var_BBA_star['step']
# Config.T
# Config.tou_step
CountVotes_BBA_CASE_1['countVote_lmbda'] = Config.lambda_step
CountVotes_BBA_CASE_1['start'] = int(self.network.time)
CountVotes_BBA_CASE_1['counts'] = {}
CountVotes_BBA_CASE_1['voters'] = []
CountVotes_BBA_CASE_1['return_block_hash'] = None
while True:
if not self.uniqueReceivedMessages[Config.COMMITTEE_VOTE_MSG_type]:
if int(self.network.time) > CountVotes_BBA_CASE_1['start'] + CountVotes_BBA_CASE_1[
'countVote_lmbda']:
#print(self.id + "Timing out")
CountVotes_BBA_CASE_1['return_block_hash'] = Config.TIMEOUT
break
pass
else:
CountVotes_BBA_CASE_1['temp_return'] = self.partOfCountVotes(
CountVotes_BBA_CASE_1['countVote_round'], CountVotes_BBA_CASE_1['countVote_step'],
CountVotes_BBA_CASE_1['start'], CountVotes_BBA_CASE_1['counts'],
CountVotes_BBA_CASE_1['voters'], Config.T, Config.tou_step)
#print("CountVotes_BBA_CASE_1", CountVotes_BBA_CASE_1['temp_return'])
if CountVotes_BBA_CASE_1['temp_return']:
CountVotes_BBA_CASE_1['return_block_hash'] = CountVotes_BBA_CASE_1['temp_return']
break
yield "resume", 1 # this is to allow other nodes to be simulated and not get this node into infinite waiting on single node
self.logger.info("CountVotes_BBA_CASE_1 o/p : {}".format( CountVotes_BBA_CASE_1['return_block_hash']))
#print("CountVotes_BBA_CASE_1", CountVotes_BBA_CASE_1['return_block_hash'])
var_BBA_star['r'] = CountVotes_BBA_CASE_1['return_block_hash']
self.printStats()
# self.uniqueReceivedMessages[Config.COMMITTEE_VOTE_MSG_type].clear()
yield 'resume', 50
######## END : count votes for CountVotes_BBA_CASE_1 ###########
if var_BBA_star['r'] == Config.TIMEOUT :
var_BBA_star['r'] = var_BBA_star['block_hash']
elif var_BBA_star['r'] != var_BBA_star['empty_hash'] :
for i in range(1,4):
self.committeeVote(self.currentSeed,
self.currentRound,
var_BBA_star['step']+i,
Config.tou_step,
var_BBA_star['r'],
'BBA_CASE_1_if_not_emptyhashCase')
if var_BBA_star['step'] == 1:
self.committeeVote(self.currentSeed,
self.currentRound,
Config.FINAL_STEP,
Config.tou_step,
var_BBA_star['r'],
'BBA_CASE_1_Reached final consensu in step 1')
var_BBA_star['return_value'] = var_BBA_star['r']
break
pass
var_BBA_star['step'] += 1
self.printStats()
''' START : BBAstar_case 2'''
''' COmmitte vote BBA_CASE_2 : BBA_CASE_2'''
self.committeeVote(self.currentSeed,
self.currentRound,
var_BBA_star['step'],
Config.tou_step,
var_BBA_star['r'],
'BBA_CASE_2')
''' COmmitte vote BBA_CASE_2 :BBA_CASE_2'''
######## count votes for CountVotes_BBA_CASE_2 ###########
CountVotes_BBA_CASE_2 = {}
CountVotes_BBA_CASE_2['countVote_round'] = self.currentRound
CountVotes_BBA_CASE_2['countVote_step'] = var_BBA_star['step']
# Config.T
# Config.tou_step
CountVotes_BBA_CASE_2['countVote_lmbda'] = Config.lambda_step
CountVotes_BBA_CASE_2['start'] = int(self.network.time)
CountVotes_BBA_CASE_2['counts'] = {}
CountVotes_BBA_CASE_2['voters'] = []
CountVotes_BBA_CASE_2['return_block_hash'] = None
while True:
if not self.uniqueReceivedMessages[Config.COMMITTEE_VOTE_MSG_type]:
if int(self.network.time) > CountVotes_BBA_CASE_2['start'] + CountVotes_BBA_CASE_2[
'countVote_lmbda']:
#print(self.id + "Timing out")
CountVotes_BBA_CASE_2['return_block_hash'] = Config.TIMEOUT
break
pass
else:
CountVotes_BBA_CASE_2['temp_return'] = self.partOfCountVotes(
CountVotes_BBA_CASE_2['countVote_round'], CountVotes_BBA_CASE_2['countVote_step'],
CountVotes_BBA_CASE_2['start'], CountVotes_BBA_CASE_2['counts'],
CountVotes_BBA_CASE_2['voters'], Config.T, Config.tou_step)
#print("CountVotes_BBA_CASE_2", CountVotes_BBA_CASE_2['temp_return'])
if CountVotes_BBA_CASE_2['temp_return']:
CountVotes_BBA_CASE_2['return_block_hash'] = CountVotes_BBA_CASE_2['temp_return']
break
yield "resume", 1 # this is to allow other nodes to be simulated and not get this node into infinite waiting on single node
self.logger.info("CountVotes_BBA_CASE_2 o/p : {}".format(CountVotes_BBA_CASE_2['return_block_hash']))
#print("CountVotes_BBA_CASE_2", CountVotes_BBA_CASE_2['return_block_hash'])
var_BBA_star['r'] = CountVotes_BBA_CASE_2['return_block_hash']
######## END : count votes for CountVotes_BBA_CASE_2 ###########
if var_BBA_star['r'] == Config.TIMEOUT:
var_BBA_star['r'] = var_BBA_star['block_hash']
elif var_BBA_star['r'] != var_BBA_star['empty_hash']:
for i in range(1, 4):
self.committeeVote(self.currentSeed,
self.currentRound,
var_BBA_star['step'] + i,
Config.tou_step,
var_BBA_star['r'],
'BBA_CASE_2_if_not_emptyhashCase')
pass
var_BBA_star['return_value'] = var_BBA_star['r']
break
pass
var_BBA_star['step'] += 1
self.printStats()
# self.uniqueReceivedMessages[Config.COMMITTEE_VOTE_MSG_type].clear()
yield 'resume', 50
''' END : BBAstar_case 2'''
'''START : BBAStar case 3'''
''' COmmitte vote BBA_CASE_3 : BBA_CASE_3'''
self.committeeVote(self.currentSeed,
self.currentRound,
var_BBA_star['step'],
Config.tou_step,
var_BBA_star['r'],
'BBA_CASE_3')
''' COmmitte vote BBA_CASE_3 :BBA_CASE_3'''
######## count votes for CountVotes_BBA_CASE_3 ###########
CountVotes_BBA_CASE_3 = {}
CountVotes_BBA_CASE_3['countVote_round'] = self.currentRound
CountVotes_BBA_CASE_3['countVote_step'] = var_BBA_star['step']
# Config.T
# Config.tou_step
CountVotes_BBA_CASE_3['countVote_lmbda'] = Config.lambda_step
CountVotes_BBA_CASE_3['start'] = int(self.network.time)
CountVotes_BBA_CASE_3['counts'] = {}
CountVotes_BBA_CASE_3['voters'] = []
CountVotes_BBA_CASE_3['return_block_hash'] = None
while True:
if not self.uniqueReceivedMessages[Config.COMMITTEE_VOTE_MSG_type]:
if int(self.network.time) > CountVotes_BBA_CASE_3['start'] + CountVotes_BBA_CASE_3[
'countVote_lmbda']:
#print(self.id + "Timing out")
CountVotes_BBA_CASE_3['return_block_hash'] = Config.TIMEOUT
break
pass
else:
CountVotes_BBA_CASE_3['temp_return'] = self.partOfCountVotes(
CountVotes_BBA_CASE_3['countVote_round'], CountVotes_BBA_CASE_3['countVote_step'],
CountVotes_BBA_CASE_3['start'], CountVotes_BBA_CASE_3['counts'],
CountVotes_BBA_CASE_3['voters'], Config.T, Config.tou_step)
#print("CountVotes_BBA_CASE_3", CountVotes_BBA_CASE_3['temp_return'])
if CountVotes_BBA_CASE_3['temp_return']:
CountVotes_BBA_CASE_3['return_block_hash'] = CountVotes_BBA_CASE_3['temp_return']
break
yield "resume", 1 # this is to allow other nodes to be simulated and not get this node into infinite waiting on single node
self.logger.info("CountVotes_BBA_CASE_3 o/p : {}".format(CountVotes_BBA_CASE_3['return_block_hash']))
#print("CountVotes_BBA_CASE_3", CountVotes_BBA_CASE_3['return_block_hash'])
var_BBA_star['r'] = CountVotes_BBA_CASE_3['return_block_hash']
######## END : count votes for CountVotes_BBA_CASE_3 ###########
if var_BBA_star['r'] == Config.TIMEOUT:
if self.commonCoin(self.currentRound,var_BBA_star['step'],Config.tou_step) :
var_BBA_star['r'] = var_BBA_star['block_hash']
else :
var_BBA_star['r'] = var_BBA_star['empty_hash']
pass
var_BBA_star['step'] += 1
self.printStats()
# self.uniqueReceivedMessages[Config.COMMITTEE_VOTE_MSG_type].clear()
yield "resume", 50
'''END : BBAStar case 3'''
yield "resume",1
if var_BBA_star['step'] == Config.MAXSTEP :
self.logger.info("I AM GOING TO HANG FOREVER")
yield "resume", 40120000 # hang forever
# exit(0)
''' END : BBA* ALGORITHM '''
hblockSTAR = var_BBA_star['return_value']
######## count votes for CountVotes_FINAL ###########
CountVotes_FINAL = {}
CountVotes_FINAL['countVote_round'] = self.currentRound
CountVotes_FINAL['countVote_step'] = Config.FINAL_STEP
# Config.T
# Config.tou_step
CountVotes_FINAL['countVote_lmbda'] = Config.lambda_step
CountVotes_FINAL['start'] = int(self.network.time)
CountVotes_FINAL['counts'] = {}
CountVotes_FINAL['voters'] = []
CountVotes_FINAL['return_block_hash'] = None
while True:
if not self.uniqueReceivedMessages[Config.COMMITTEE_VOTE_MSG_type]:
if int(self.network.time) > CountVotes_FINAL['start'] + CountVotes_FINAL[
'countVote_lmbda']:
##print(self.id + "Timing out")
CountVotes_FINAL['return_block_hash'] = Config.TIMEOUT
break
pass
else:
CountVotes_FINAL['temp_return'] = self.partOfCountVotes(
CountVotes_FINAL['countVote_round'], CountVotes_FINAL['countVote_step'],
CountVotes_FINAL['start'], CountVotes_FINAL['counts'],
CountVotes_FINAL['voters'], Config.T_FINAL, Config.tou_FINAL)
##print("CountVotes_FINAL", CountVotes_FINAL['temp_return'])
if CountVotes_FINAL['temp_return']:
CountVotes_FINAL['return_block_hash'] = CountVotes_FINAL['temp_return']
break
yield "resume", 1 # this is to allow other nodes to be simulated and not get this node into infinite waiting on single node
self.logger.info("CountVotes_FINAL o/p : {}".format(CountVotes_FINAL['return_block_hash']))
##print("CountVotes_FINAL", CountVotes_FINAL['return_block_hash'])
######## END : count votes for CountVotes_FINAL ###########
if hblockSTAR == CountVotes_FINAL['return_block_hash']:
FNALIZED_BLOCK_msg = (
Config.FINALIZED_BLOCK_msg_type,hblockSTAR )
self.logger.info("FINALIZED BLOCK in round :"+str(self.currentRound)+" : {}".format(FNALIZED_BLOCK_msg))
self.blockchain.append(str(self.network.BlocksHashTOBLOCK_MAP[hblockSTAR]))
else:
TENTATIVE_BLOCK_msg = (Config.TENTATIVE_BLOCK_msg_type, hblockSTAR)
self.logger.info("TENTATIVE BLOCK in round :"+str(self.currentRound)+" : {}".format(TENTATIVE_BLOCK_msg))
self.tentativeblockchain.append(str(self.network.BlocksHashTOBLOCK_MAP[hblockSTAR]))
self.logger.info("BLOCKCHAIN : {}".format(self.blockchain))
self.printStats()
self.uniqueReceivedMessages[Config.COMMITTEE_VOTE_MSG_type].clear()
self.messagesTillNow.clear()
self.logger.info("PROPOSED BLOCKS IN ROUND :"+str(self.currentRound)+" : {} ".format(self.network.BlocksHashTOBLOCK_MAP))
self.network.BlocksHashTOBLOCK_MAP.clear()
yield 'resume', 10
print("stats for experiment 1 : {}".format(Config.Experiment_1_OBS))
self.currentRound = self.currentRound + 1
# self.logger.info(self.uniqueReceivedMessages)
'''
TODo check if node is selected as BLOCK_PROPOSER
if yes
then
select highest priority subuser and gossip the message
wait for lambda_proposer=3 sec and hear other block propositions
take decision based on received propositions and determine if himself is a highest priority or not
if yes
broacast the block proposal <format of block proposal>
everybody except highest priority block proposer waits for t_proposer+t_block time to here the proposed block
if received proposal
then
start BA* with this new block
validate sortition of proposed block
if yes
then
start reduction
else
vote for empty block
else
start BA* with empty block
'''
pass
self.ResumeTasks[str(int(self.network.time)+10)].append(("nextOn", self.startNodeLifeCycleGenerator,))
pass
......@@ -45,11 +793,29 @@ class OverlayNode(Node):
def m(v):
v.append('ganesh')
def takeSecond(elem):
return elem[1]
if __name__ == '__main__':
x = ['I am the first block', "('812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 84736415767811103652304891014813354728426533548611541614918993721182826986444)", "('d31fbe19c2e713985ecdf394969c7790d19a87dcafa9c02cba0558bf12d544d4', 103122347745550455001943383981344366012988901432495847445355962900079905936198)", "('fd5a205348d15fc21b256ebd303a135857bda77a1993cf11303e45785aefb332', 47823573000215416532528435656381159431075140417141700821011381942532282748521)", "('9c868518b4d10e1a4a13046f6097f97d6df6dc1e95a661953d527a823ee6f050', 55460601694948737718196781018048019511931736228223657848800923874020053551928)", "('c2a3b56930d43645a93e865782abb0b4bac6681e693c9d50c13fd7391b4b7f25', 58707674458812810357241716928176455160340351916543706621213043845025913695452)", "('b03f15d0e7782a7f95fab6617411aa03f21cd9229e8e4f242ea4079ecd920cc2', 67573794190754323804116586417572734088575374646300010693539061879295897305162)", "('98d98b0732f5c5218a3b2ad49b5cba8c7d17c996ff4ea5689937684f2b20d79d', 69633357725200221165001650735647103204316958836713683487178046118094356870936)", "('9f4af3721891d947075907ba44c0d3587a6be51214b56be4478cbbfb54d5d88b', 66422139942822171704688570027380253905979677843036084427158008574677456200809)", "('86231ce45686fdafc82dc4159ba710e3f8b7fa31cf78dd25dcb8dfca313b4ac2', 108471944712883743347571235551646957426255157519283101098519720665762066857519)"]
y = ['I am the first block', "('812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 84736415767811103652304891014813354728426533548611541614918993721182826986444)", "('d31fbe19c2e713985ecdf394969c7790d19a87dcafa9c02cba0558bf12d544d4', 103122347745550455001943383981344366012988901432495847445355962900079905936198)", "('fd5a205348d15fc21b256ebd303a135857bda77a1993cf11303e45785aefb332', 47823573000215416532528435656381159431075140417141700821011381942532282748521)", "('9c868518b4d10e1a4a13046f6097f97d6df6dc1e95a661953d527a823ee6f050', 55460601694948737718196781018048019511931736228223657848800923874020053551928)", "('c2a3b56930d43645a93e865782abb0b4bac6681e693c9d50c13fd7391b4b7f25', 58707674458812810357241716928176455160340351916543706621213043845025913695452)", "('b03f15d0e7782a7f95fab6617411aa03f21cd9229e8e4f242ea4079ecd920cc2', 67573794190754323804116586417572734088575374646300010693539061879295897305162)", "('98d98b0732f5c5218a3b2ad49b5cba8c7d17c996ff4ea5689937684f2b20d79d', 69633357725200221165001650735647103204316958836713683487178046118094356870936)", "('9f4af3721891d947075907ba44c0d3587a6be51214b56be4478cbbfb54d5d88b', 66422139942822171704688570027380253905979677843036084427158008574677456200809)", "('86231ce45686fdafc82dc4159ba710e3f8b7fa31cf78dd25dcb8dfca313b4ac2', 108471944712883743347571235551646957426255157519283101098519720665762066857519)"]
['I am the first block',
"('812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 84736415767811103652304891014813354728426533548611541614918993721182826986444)",
"('d31fbe19c2e713985ecdf394969c7790d19a87dcafa9c02cba0558bf12d544d4', 103122347745550455001943383981344366012988901432495847445355962900079905936198)",
"('fd5a205348d15fc21b256ebd303a135857bda77a1993cf11303e45785aefb332', 47823573000215416532528435656381159431075140417141700821011381942532282748521)",
"('9c868518b4d10e1a4a13046f6097f97d6df6dc1e95a661953d527a823ee6f050', 55460601694948737718196781018048019511931736228223657848800923874020053551928)",
"('c2a3b56930d43645a93e865782abb0b4bac6681e693c9d50c13fd7391b4b7f25', 58707674458812810357241716928176455160340351916543706621213043845025913695452)",
"('b03f15d0e7782a7f95fab6617411aa03f21cd9229e8e4f242ea4079ecd920cc2', 67573794190754323804116586417572734088575374646300010693539061879295897305162)",
"('98d98b0732f5c5218a3b2ad49b5cba8c7d17c996ff4ea5689937684f2b20d79d', 69633357725200221165001650735647103204316958836713683487178046118094356870936)",
"('9f4af3721891d947075907ba44c0d3587a6be51214b56be4478cbbfb54d5d88b', 66422139942822171704688570027380253905979677843036084427158008574677456200809)",
"('86231ce45686fdafc82dc4159ba710e3f8b7fa31cf78dd25dcb8dfca313b4ac2', 108471944712883743347571235551646957426255157519283101098519720665762066857519)"]
print(len(x))
......@@ -67,37 +833,12 @@ class OverlayNode(Node):
class A(object):
def __init__(self,id):
self.id = id
self.commands = {"sendMessage": self.sendMessage,
}
def sendMessage(self):
pass
def process(self,param):
print("from A " +str(param) )
param.pop(0)
param.pop(0)
class B(A):
def __init__(self,id):
A.__init__(self, id)
self.commands.update({"hello":self.working})
def working(self):
pass
def process(self,param):
super(B, self).process(param)
print("from B" + str(param))
if __name__ == '__main__':
l = (1,2,tuple(str('3|4|5').split('|')))
x = B(2)
print(x.commands)
x.process(list(l))
import matplotlib.pyplot as plt
stats= {49: [5, 3], 41: [14, 12], 23: [7, 5], 40: [5, 4], 19: [3, 3], 31: [7, 6], 28: [1, 1], 33: [7, 5], 38: [10, 8], 16: [2, 2], 48: [3, 3], 50: [4, 2], 12: [1, 1], 17: [3, 1], 42: [2, 2], 35: [1, 1], 45: [2, 2], 37: [7, 6], 36: [4, 2], 7: [1, 1], 29: [1, 1], 26: [4, 3], 32: [1, 1], 34: [1, 1], 39: [1, 1], 25: [5, 3], 46: [1, 1], 8: [1, 1], 30: [1, 1]}
stats2 ={38: [2, 2], 20: [2, 2], 37: [2, 2], 47: [2, 2], 41: [11, 8], 46: [1, 1], 49: [4, 3], 40: [2, 2], 32: [1, 1], 45: [4, 3], 24: [2, 2], 30: [1, 1], 31: [2, 2], 28: [2, 2], 35: [2, 2], 22: [1, 1], 43: [3, 3], 23: [1, 1], 39: [1, 1], 27: [2, 2], 7: [1, 1], 29: [3, 2]}
stats3 = {41: [2, 2], 16: [2, 2], 48: [1, 1], 5: [1, 1], 21: [2, 2], 39: [1, 1], 47: [2, 2], 46: [1, 1], 38: [1, 1], 45: [1, 1], 42: [1, 1], 40: [1, 1]}
dict = {}
for key, val in stats.items():
# print(key)
# print(val)
dict[key] = (val[0]/val[1])
# print(sorted(dict))
lists = sorted(dict.items()) # sorted by key, return a list of tuples
x, y = zip(*lists)
plt.xlabel('Stake')
plt.ylabel('Sub User')
plt.plot(x, y)
plt.savefig('stats.png')
plt.show()
#Algorand
* Basic requirements
* Dsicrete Event Simulator
* Gossip Protocol
* Installation
`pip3 install -r requirements.txt `
`pip3 install -r requirements.txt`
* Setup
* Requirements
* Configure Nodes and Links using Nodes.dat and Links.dat
* Stakes are randomly assigned to nodes between 1 and 50
* How to run
`$ ./start.sh`
### Nilesh doubts:
......@@ -4,7 +4,9 @@ from TestCases import populateTodolist
import logging
logging.basicConfig(filename='ASim.log', level=logging.INFO)
# logging.basicConfig(filename='ASim.log', level=logging.INFO)
# logging.basicConfig(filename='ASim.log', format="%(funcName)s():%(lineno)i: %(message)s")
logging.basicConfig(filename='ASim.log',level=logging.INFO, format="%(levelname)s [%(name)s.%(funcName)s:%(lineno)d] %(message)s")
logger = logging.getLogger(__name__)
......@@ -12,6 +14,6 @@ if __name__ == '__main__':
metronome = TimeSimulator()
network = Network()
network.setupNetwork()
populateTodolist(network)
# populateTodolist(network)
metronome.startTicking(network.simulate)
pass
\ No newline at end of file
......@@ -22,3 +22,4 @@ class SystemEntity(object):
'''
pass
......@@ -18,9 +18,12 @@ def populateTodolist(net):
instruction = row[0].split() # tuple of a link
node = network.nodes.get(instruction[0])
node.todoList[instruction[1]].append(tuple(instruction[2:]))
# for id, node in network.nodes.items():
# node.todoList['0'].append(("nextOn",node.startNodeLifeCycleGenerator,))
for id,node in network.nodes.items():
logger.info(id +" : "+str(node.todoList))
# logger.info(id +" : "+str(node.todoList))
pass
def simulateNetwork(net):
if not net:
......@@ -38,7 +41,12 @@ def simulateNetwork(net):
if __name__ == '__main__':
logging.basicConfig(filename='TestCases.log', level=logging.INFO)
# populateTodolist()
simulateNetwork(None)
# populateTodolist(None)
# simulateNetwork(None)
ak = ['hello','ramesh']
ak.append('rao')
if 'hello' in ak:
print("yay")
print(ak.pop())
pass
class Generator:
def __init__(self):
# self.todoList = [self.gen]
self.todoList = [(0, 0)]
#LIST OF GENERATOR OBJECTS OF METHODS
#generator object of self task creating method genrefer
self.refGen = self.genRefer("+")
def gen(self):
x = 0
count = 0
while True:
# print("generator : ", todoList)
self.todoList.insert(0, (count, x))
count += 1
self.todoList.insert(0, (count, x))
count += 1
self.todoList.insert(0, (count, x))
count += 1
yield x
x += 1
def genRefer(self,dot):
'''
THis method adds itself to to-do list by use of its own generator object which will be unique for different instances of generator class
:return:
'''
print("Gen refer Started",dot)
x = 0
count = 0
# while True:
while x<5:
# print("generator : ", todoList)
self.todoList.insert(0, (count, self.refGen))
count += 1
self.todoList.insert(0, (count, self.refGen))
count += 1
yield x
print("------",x)
x += 1
# return
def callgenRefer(self,dot):
'''this adapter method wil ensure that gen refer stats executing as soon as it is called by user, so only call this method not to genRefer from outside of this class'''
self.refGen = self.genRefer(dot)
next(self.refGen)
def testGeneratorClass():
ob = Generator()
m = ob.gen()
while True:
print("tester : " , ob.todoList)
time.sleep(5)
if len(ob.todoList):
i = next(m)
task = ob.todoList.pop(-1)
print(task)
print(i)
def testSelfReferGen():
'''
THis function test , If a generator method of a class can add itself to todolist and can be invoked by others with same context as yielded itself
IN this case all generator methods of a class has to generate there own generator object object at the time of instantiating the class
:return:
'''
print("Started testSelfReferGen")
ob = Generator()
print("Created Generator object")
ob.callgenRefer("*")
ob.todoList = [(0,ob.refGen)]
while True:
print("tester : " , ob.todoList)
time.sleep(5)
if len(ob.todoList):
#popoing task from to-do list and performing that task
task = ob.todoList.pop(-1)
print(task)
i = next(task[1])
print(i)
todoList = []
import time
def gen():
global todoList
x=0
count = 0
while True:
# print("generator : ", todoList)
print()
todoList.insert(0,(count,x))
count+=1
todoList.insert(0, (count, x))
count += 1
todoList.insert(0, (count, x))
count += 1
yield x
x += 1
def testclassLessGenerator():
global todoList
todoList = [(0,0)]
m = gen()
while True:
print("tester : " , todoList)
time.sleep(5)
if len(todoList):
i = next(m)
task = todoList.pop(-1)
print(task)
print(i)
class TestYieldSequence:
def __init__(self):
self.o = self.A()
def A(self):
print("started A")
yield 2
print("Finishing A")
def B(self):
print("Started B")
try:
next(self.o)
except StopIteration:
pass
print("Ending B")
def C(self):
print("started C")
try:
next(self.o)
except StopIteration:
pass
print("Ending C")
def testExecutionSequenceYield(self):
self.B()
self.C()
def gen():
for i in range(5):
yield 'ram', 'ganesh'
def testit():
for k1 in gen():
print(k1[1])
if __name__ == '__main__':
# testSortition()
# testVerifyVRF()
# testVerifySort(
# testclassLessGenerator()
# testGeneratorClass()
# testSelfReferGen()
testit()
......@@ -12,7 +12,7 @@ class TimeSimulator(object):
return "Time : "+ str(self._systemTime)
def startTicking(self,callback):
for i in range(10):
for i in range(100000):
self._systemTime = self._systemTime + 1
logger.info(self)
callback(str(self._systemTime))
......
......@@ -2,7 +2,7 @@ from ecdsa import SigningKey,SECP256k1
from ecdsa.keys import BadSignatureError
from numpy.random import randint
import numpy as np
import Config
import binascii
import random
import scipy.stats as stats
......@@ -48,6 +48,14 @@ def verifyVRF(pk,hash,proof,seed):
return False
return True
def gatherStatsExperiment1(w,j):
temp = Config.Experiment_1_OBS.get(w, [0,0])
temp[0]=temp[0]+j
temp[1]=temp[1]+1
Config.Experiment_1_OBS[w] = temp
def sortition(sk,seed,rolecount,role,w,badaW,pk):
'''
......@@ -64,6 +72,7 @@ def sortition(sk,seed,rolecount,role,w,badaW,pk):
newseed = (seed,role)
hash,proof = VRF(sk, newseed, pk)
p = rolecount/badaW
# p = 0.5
j=0
#simplifying the computation : hash/(2**hashlen)
......@@ -72,7 +81,7 @@ def sortition(sk,seed,rolecount,role,w,badaW,pk):
# print(x)
lastValue = 0;
lastValue = 0
# print("probability : ",p)
......@@ -81,13 +90,20 @@ def sortition(sk,seed,rolecount,role,w,badaW,pk):
lastValue = lastValue + stats.binom.pmf(j, w, p)
nextvalue = lastValue + stats.binom.pmf(j + 1, w, p)
# print(lastValue,nextvalue)
if (((lastValue<=x) and (nextvalue>x))):
if (((lastValue<=x) and (x<nextvalue))):
break
if j == w+1:
j=0
break
j = j+1
# added by nilesh
if j > 0 :
print('\n')
print('===============> The j value is >>>' , j)
print('\n')
gatherStatsExperiment1(w,j)
return (hash,proof,j)
......@@ -133,6 +149,9 @@ def verifySort(pk,hash,proof,seed,rolecount,role,w,badaW):
break
j = j+1
# if j :
# print("Verification success : J :",j,role)
return j
# def computeRange():
......@@ -243,6 +262,29 @@ def testVerifySort():
print(y)
assert (y==0),"Test Verify sort failed : change of seed not detected"
def tester():
'''
tests if sortition distributes the stake
:return:
'''
sk,pk = genratePublicPrivateKey()
seed = ("a",1,2)
roleCount = 26
role = "LEAD"
# w= randint(1,100000,10)
w = randint(1, 51, 50)
w.sort()
print(w)
# w = 20
badaW = np.sum(w)
print(badaW)
for i in w:
hash,proof,j = sortition(sk,seed,roleCount,role,i,badaW,pk)
# print(hash) #this is a real content of hash it should be used as final thing and not hexlify
# print(binascii.hexlify(hash))
# print(proof)
print("w = " + str(i) , "w/badaW = ", str(i/badaW), "j = " ,str(j))
def testVerifyVRF():
sk,pk = genratePublicPrivateKey()
......@@ -253,12 +295,8 @@ def testVerifyVRF():
print(status)
if __name__ == '__main__':
# testSortition()
# testVerifyVRF()
# testVerifySort(0
tester()
import hashlib
h1 = hashlib.sha256((str('asda')).encode('utf-8'))
h1hex = h1.hexdigest()
print(int(h1hex,16)% 2)
x = (1,2)
y = (3,2)
x[0] = 5
print(x[1]+y[1])
\ No newline at end of file
import hashlib
from numpy.random import randint
import sys
import networkx as nx
from networkx.algorithms import community
import numpy
'''
Generates a file of nodes
'''
f = open("Nodes1.dat", "w")
for i in range(int(sys.argv[1])):
f.write(str(i)+"\n")
# print(i)
f.close()
'''
Generates a graph given degree sequence
'''
sequence = numpy.random.uniform(2,4.1,int(sys.argv[1])).round()
while 1:
sequence1 = numpy.random.random_integers(2,4,int(sys.argv[1]))
try :
G5 = nx.random_degree_sequence_graph(list(sequence1),tries=10)
break
except nx.NetworkXUnfeasible :
pass
except nx.NetworkXError:
pass
print(sorted(G5.degree()))
if nx.is_connected(G5):
print("Graph is connected")
f = open("Links1.dat", "w")
count = 0
for edge in G5.edges():
# print(edge)
# print(str(edge[0])+'\t'+str(edge[1])+'\n')
f.write(str(edge[0])+'\t'+str(edge[1])+'\n')
count += 1
f.close()
print('Nodes: ',sys.argv[1],'Edges: ',count)
'''
generates a file given nodes and randomly links
'''
# G2=nx.erdos_renyi_graph(int(sys.argv[1]),0.1)
#
# if nx.is_connected(G2):
# f = open("Links1.dat", "w")
# count = 0
# for edge in G2.edges():
# # print(edge)
# # print(str(edge[0])+'\t'+str(edge[1])+'\n')
# f.write(str(edge[0])+'\t'+str(edge[1])+'\n')
# count += 1
# f.close()
#
# print('Nodes: ',sys.argv[1],'Edges: ',count)
# G = nx.Graph()
# G=nx.complete_graph(100)
# G1=nx.path_graph(100)
# G3=nx.fast_gnp_random_graph(100,0.1)
# G4=nx.connected_caveman_graph(100,0)
# print(nx.is_connected(G2))
# print(G2.edges())
# nx.draw(G)
#
# from igraph import Graph
# # g = Graph.Erdos_Renyi(n=10000, m=100000)
# input_to_SHA256 = "asd"
#
# sha256_hash = hashlib.sha256()
# hs = hashlib.sha256(input_to_SHA256.encode('utf-8')).hexdigest()
#
# # print(pow(2,256))
#
# print(randint(1, 51, 1))
# print(randint(1, 51, 1))
# print(randint(1, 51, 1))
# print(randint(1, 51, 1))
# print(randint(1, 51, 1))
# print(randint(1, 51, 1))
# print(randint(1, 51, 1))
# print(randint(1, 51, 1))
# print(randint(1, 51, 1))
#
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
-------------msgs , 26
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
Verification success : J : 1 BLOCK_PROPOSER
Verification success : J : 1 BLOCK_PROPOSER
-------------msgs , 0
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 1
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 2
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 3
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 5
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 6
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 7
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 8
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 9
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 10
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 11
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 12
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 13
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 14
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 16
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 17
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 18
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 19
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 20
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 21
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 22
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 23
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 24
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 25
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 27
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 28
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 29
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 30
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 31
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 32
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 33
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 34
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 36
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 37
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 38
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 39
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 42
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 43
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 44
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 45
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 46
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 47
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 48
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 49
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 4
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 15
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 35
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
-------------msgs , 41
[('COMMITTEE_VOTE', (<ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, (1, 1, b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb", <ecdsa.keys.VerifyingKey object at 0x7f8a76f58898>, '812a53b631914a36764fc9f8328dd019ce50f5c4b6051f670fbe0efb705efc77', 31253279896976564096567400489491991615820346255351894897290433663108598683040), b"a\xc5\xbf\xb0\xcf\x94!)\x1c/'`7\xee\xda2~y\xfc\x91\xac\xaa\x80\xec\xdd\xae$m\xf3\xeb\xf9d\xbd\x1e\xa9\xfd,\xe2[\xce\xeb>\xfa\xeb\xb2\x85\xc2\xd5\xc9\x80\xbf\xc1\xe3\xb4\xf7\xa3\xa2VIu\x93;\xb5\xaa"))]
Verification success : J : 1 ('committee', 1, 1)
why votes be zero : ('committee', 1, 1)
1 31253279896976564096567400489491991615820346255351894897290433663108598683040 b"\xfd\xee\x02\x82nr\\\xf9$\xbaYV\xde\x8e\x80\xe2\xd8N\xa0P\xae\xc3]r\xbc\x14\xc2\xd1\x86p\x03'\x98\x03\\c\x96N\xfcj\x04^Q\x05\xda\x9d)\xe3p\xe7\x19\xcc\xf8\xc7\xfeX\xaeJ\xdb\xb9q\xe7(\xbb"
40Timing out
returning from first count values with return value TIMEOUT
apturl==0.5.2
asn1crypto==0.24.0
backcall==0.1.0
Brlapi==0.6.6
certifi==2018.1.18
cffi==1.12.2
chardet==3.0.4
command-not-found==0.3
cryptography==2.6.1
cupshelpers==1.0
cycler==0.10.0
decorator==4.4.0
defer==1.0.6
distro-info===0.18ubuntu0.18.04.1
ecdsa==0.13
numpy==1.16.2
httplib2==0.9.2
idna==2.6
igraph==0.1.11
ipython==7.5.0
ipython-genutils==0.2.0
jedi==0.13.3
kazam==1.4.5
keyring==10.6.0
keyrings.alt==3.0
kiwisolver==1.1.0
language-selector==0.1
launchpadlib==1.10.6
lazr.restfulclient==0.13.5
lazr.uri==1.0.3
louis==3.5.0
macaroonbakery==1.1.3
Mako==1.0.7
MarkupSafe==1.0
matplotlib==3.0.3
netifaces==0.10.4
networkx==2.3
numpy==1.16.3
oauth==1.0.1
olefile==0.45.1
parso==0.4.0
pexpect==4.7.0
pickleshare==0.7.5
Pillow==5.1.0
prompt-toolkit==2.0.9
protobuf==3.0.0
ptyprocess==0.6.0
pycairo==1.16.2
pycparser==2.19
pycrypto==2.6.1
pycups==1.9.73
Pygments==2.3.1
pygobject==3.26.1
pymacaroons==0.13.0
PyNaCl==1.1.2
pyparsing==2.4.0
pyRFC3339==1.0
python-apt==1.6.3+ubuntu1
python-dateutil==2.8.0
python-debian==0.1.32
python-louvain==0.5
pytz==2018.3
pyxdg==0.25
PyYAML==3.12
reportlab==3.4.0
requests==2.18.4
requests-unixsocket==0.1.5
scipy==1.2.1
SecretStorage==2.3.1
simplejson==3.13.2
six==1.12.0
sortedcontainers==2.1.0
system-service==0.3
systemd-python==234
traitlets==4.3.2
ubuntu-drivers-common==0.0.0
ufw==0.36
unattended-upgrades==0.1
urllib3==1.22
usb-creator==0.3.3
wadllib==1.3.2
wcwidth==0.1.7
xkit==0.0.0
zope.interface==4.3.2
Received proposal from other nodes : Priority proposals from other nodes
listing block proposals : broadcsting BLOCK Proposal Message
To search votes in reduction step 1 : votes count reduction step 1
reduction step 1 consensus : consensus for block in reduction step 1
#!/usr/bin/env bash
python3 filegen.py 50
rm -rf ASim.log
rm -rf console.log
#python3 Starter.py > console.log
python3 Starter.py | tee console.log
\ No newline at end of file
1 5 sendMessage 1 2 hello2
2 3 sendMessage 2 3 hello3
4 5 sendMessage 4 1 hello1
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment