Exemplo n.º 1
0
 def _on_inbox_packet(self, newpacket, info, status, error_message):
     if status != "finished":
         return False
     if newpacket.Command == commands.RetreiveCoin():
         query_j = coins_db.read_query_from_packet(newpacket)
         if not query_j:
             p2p_service.SendFail(newpacket, "incorrect query received")
             return False
         coins = coins_db.query_json(query_j)
         p2p_service.SendCoin(newpacket.CreatorID, coins, packet_id=newpacket.PacketID)
         return True
     if newpacket.Command == commands.Coin():
         coins_list = coins_db.read_coins_from_packet(newpacket)
         if not coins_list:
             p2p_service.SendFail(newpacket, "failed to read coins from packet")
             return True
         if len(coins_list) == 1:
             acoin = coins_list[0]
             if not coins_db.validate_coin(acoin):
                 p2p_service.SendFail(newpacket, "coin validation failed")
                 return True
             if not coins_db.verify_coin(acoin):
                 p2p_service.SendFail(newpacket, "coin verification failed")
                 return True
             if coins_db.exist(acoin):
                 self.automat("valid-coins-received", [acoin])
             else:
                 self.automat("new-coin-mined", acoin)
             return True
         valid_coins = []
         for acoin in coins_list:
             if not coins_db.validate_coin(acoin):
                 continue
             if not coins_db.verify_coin(acoin):
                 continue
             valid_coins.append(acoin)
         if len(valid_coins) == len(coins_list):
             self.automat("valid-coins-received", valid_coins)
         else:
             p2p_service.SendFail(newpacket, "some non-valid coins received")
         return True
     return False
Exemplo n.º 2
0
 def doVerifyCoin(self, arg):
     """
     Action method.
     """
     if not coins_db.validate_coin(self.current_coin):
         self.current_coin = None
         self.automat("coin-not-valid")
         return
     d = self._verify_coin(self.current_coin)
     d.addCallback(lambda coin: self.automat("coin-verified"))
     d.addErrback(lambda err: self.automat("coin-not-valid"))