コード例 #1
0
ファイル: masternode.py プロジェクト: mygirl8893/PIVX-SPMT
 def finalizeStartMessage(self, text):
     sig1 = text
     if sig1=="None":
         # Signature refused by the user
         self.sigdone.emit("None")
         return
     
     printOK("first signature: %s" % sig1)
     # ------ some default config
     scriptSig = ''
     sequence = 0xffffffff
     
     try:
         # block_hash = hash(currBlock-12)
         currBlock = self.rpcClient.getBlockCount()
         if currBlock is None:
             raise Exception('Unable to get current block number')
         block_hash = self.rpcClient.getBlockHash(currBlock - 12)
         if block_hash is None:
             raise Exception('Unable to get blockhash for block %d' % currBlock - 12)
         
         printDbg("Current block from PIVX client: %s" % str(currBlock))
         printDbg("Hash of 12 blocks ago: %s" % block_hash)
     
         vintx = bytes.fromhex(self.collateral['txid'])[::-1].hex()
         vinno = self.collateral['txidn'].to_bytes(4, byteorder='big')[::-1].hex()
         vinsig = num_to_varint(len(scriptSig) / 2).hex() + bytes.fromhex(scriptSig)[::-1].hex()
         vinseq = sequence.to_bytes(4, byteorder='big')[::-1].hex()
         
         ipv6map = ipmap(self.ip, self.port)
         #printDbg("ipv6map: %s" % ipv6map)
     
         collateral_in = num_to_varint(len(self.collateral['pubKey'])/2).hex() + self.collateral['pubKey']
         delegate_in = num_to_varint(len(self.mnPubKey)/2).hex() + self.mnPubKey
         
     except Exception as e:
         err_msg = "error in startMessage"
         printException(getCallerName(), getFunctionName(), err_msg, e)
         return
             
     work_sig_time = self.sig_time.to_bytes(8, byteorder='big')[::-1].hex()
     work_protoversion = self.protocol_version.to_bytes(4, byteorder='big')[::-1].hex()
     last_ping_block_hash = bytes.fromhex(block_hash)[::-1].hex()
     serializedData = serialize_input_str(self.collateral['txid'], self.collateral['txidn'], sequence, scriptSig) + block_hash + str(self.sig_time)
     
     printDbg("serializedData: %s" % serializedData)
     sig2 = self.signature2(serializedData)
     printOK("second signature: %s" % sig2)
     
     work = vintx + vinno + vinsig + vinseq
     work += ipv6map + collateral_in + delegate_in
     work += num_to_varint(len(sig1) / 2).hex() + sig1
     work += work_sig_time + work_protoversion
     work += vintx + vinno + vinsig + vinseq
     work += last_ping_block_hash + work_sig_time
     work += num_to_varint(len(sig2) / 2).hex() + sig2
     # nnLastDsq to zero
     work += "0"*16
     # Emit signal
     self.sigdone.emit(work)  
コード例 #2
0
 def getNewBroadcastMessage(self):
     self.sig_time = int(time.time())
     pk1 = bytes.fromhex(self.collateral['pubKey'])
     pk2 = bytes.fromhex(self.mnPubKey)
     ss = (1).to_bytes(4, byteorder='little')
     ss += bytes.fromhex(ipmap(self.ip, self.port))
     ss += (self.sig_time).to_bytes(8, byteorder='little')
     ss += (len(pk1).to_bytes(1, byteorder='little') + pk1)
     ss += (len(pk2).to_bytes(1, byteorder='little') + pk2)
     ss += (self.protocol_version).to_bytes(4, byteorder='little')
     res = bitcoin.bin_dbl_sha256(ss)[::-1]
     return res.hex()