コード例 #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
コード例 #2
0
 def _on_command_retrieve_coin(self, newpacket, info):
     query_j = coins_io.read_query_from_packet(newpacket)
     if not query_j:
         p2p_service.SendFail(newpacket, 'incorrect query received')
         return False
     coins, error = coins_db.query_json(query_j)
     if error:
         p2p_service.SendFail(newpacket, error)
         return False
     result_coins = []
     for coin in coins:
         result_coins.append(coin)
         if len(result_coins) > self.max_coins_per_packet:
             result_coins.append(None)
             break
     if not result_coins:
         p2p_service.SendFail(newpacket, 'no coins found')
         return False
     p2p_service.SendCoin(newpacket.CreatorID, result_coins, packet_id=newpacket.PacketID)
     return True