def initialize( self ): """ Initialization function, override this in extending classes. Run all initialization here instead of in the constructor """ # If no public keys provided or at least one unknown public key, # try to load the public keys from the addresses to see if we # now have all required public keys if self.public_keys is None or (None,None) in self.public_keys: self.load_public_keys() self.extract_signing_keys() if not self.dont_check: self.check_voting_values() ConsensusData.__init__(self, ConsensusData.DATA_TYPE_VOTING, self.blockchain, self.time_data )
def initialize(self): """ Initialization function, override this in extending classes. Run all initialization here instead of in the constructor """ # If no public keys provided or at least one unknown public key, # try to load the public keys from the addresses to see if we # now have all required public keys if self.public_keys is None or (None, None) in self.public_keys: self.load_public_keys() self.extract_signing_keys() if not self.dont_check: self.check_voting_values() ConsensusData.__init__(self, ConsensusData.DATA_TYPE_VOTING, self.blockchain, self.time_data)
def pack_binary(self): """ Pack the data into a binary string for storage in DB. The standard format is [ dataType(varInt) ][ actual data ] The actual data is stored as follows: [ length of question (varInt) ][ question ] [ amount of answers (varInt) ] for each answer: [ length of answer (varInt) ][ answer } [ amount of addresses (varInt) ] for each address: [ length of address (varInt) ][ address } [ amount of public keys (varInt) ] for each pubkey: [ length of signing pubkey (varInt) ][ signing pubkey } [ length of encryption pubkey (varInt) ][ encryption pubkey ] """ result = ConsensusData.pack_binary_header( ConsensusData.DATA_TYPE_VOTING, self.blockchain, self.time_data) result += encodeVarint(len(self.question)) result += self.question result += encodeVarint(len(self.answers)) for answer in self.answers: result += encodeVarint(len(answer)) result += answer result += encodeVarint(len(self.addresses)) for address in self.addresses: result += encodeVarint(len(address)) result += address if self.public_keys is None: result += encodeVarint(0) else: result += encodeVarint(len(self.public_keys)) for pubkey in self.public_keys: if pubkey is None: result += encodeVarint(0) result += encodeVarint(0) else: # Signing key first if pubkey[0] is None: result += encodeVarint(0) else: result += encodeVarint(len(pubkey[0])) result += pubkey[0] # Then encryption key if pubkey[1] is None: result += encodeVarint(0) else: result += encodeVarint(len(pubkey[1])) result += pubkey[1] return result
def pack_binary( self ): """ Pack the data into a binary string for storage in DB. The standard format is [ dataType(varInt) ][ actual data ] The actual data is stored as follows: [ length of question (varInt) ][ question ] [ amount of answers (varInt) ] for each answer: [ length of answer (varInt) ][ answer } [ amount of addresses (varInt) ] for each address: [ length of address (varInt) ][ address } [ amount of public keys (varInt) ] for each pubkey: [ length of signing pubkey (varInt) ][ signing pubkey } [ length of encryption pubkey (varInt) ][ encryption pubkey ] """ result = ConsensusData.pack_binary_header(ConsensusData.DATA_TYPE_VOTING, self.blockchain, self.time_data) result += encodeVarint( len( self.question ) ) result += self.question result += encodeVarint( len( self.answers ) ) for answer in self.answers: result += encodeVarint( len( answer ) ) result += answer result += encodeVarint( len( self.addresses ) ) for address in self.addresses: result += encodeVarint( len( address ) ) result += address if self.public_keys is None: result += encodeVarint( 0 ) else: result += encodeVarint( len( self.public_keys ) ) for pubkey in self.public_keys: if pubkey is None: result += encodeVarint( 0 ) result += encodeVarint( 0 ) else: # Signing key first if pubkey[0] is None: result += encodeVarint( 0 ) else: result += encodeVarint( len( pubkey[0] ) ) result += pubkey[0] # Then encryption key if pubkey[1] is None: result += encodeVarint( 0 ) else: result += encodeVarint( len( pubkey[1] ) ) result += pubkey[1] return result
def to_json(self): result = ConsensusData.to_json(self) result.update({ "question": self.question, "answers": self.answers, "addresses": self.addresses, "pubkeys": map(lambda pk: (pk[0].encode('hex'), pk[1].encode('hex')), self.public_keys) }) return result
def to_json(self): result = ConsensusData.to_json(self) result.update( { "question": self.question, "answers": self.answers, "addresses": self.addresses, "pubkeys": map( lambda pk: ( pk[0].encode('hex'), pk[1].encode('hex') ), self.public_keys ) } ) return result