コード例 #1
0
 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 )
コード例 #2
0
    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)
コード例 #3
0
    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
コード例 #4
0
 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
コード例 #5
0
 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
コード例 #6
0
 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