示例#1
0
  def start_payment_loop(self):
    coin = Bank.get().get_acoins(1)
    if not coin:
      log_msg("No ACoins left!")
      return
    coin = coin[0]
    #generate ACoin request
    request = BankMessages.make_acoin_request(Bank.get(), Bank.get().currentACoinInterval, 1)
    #make the message:
    bankMsg = Basic.write_byte(1)
    bankMsg += coin.write_binary() + request.msg
    key = EncryptedDatagram.ClientSymKey(Bank.get().PUBLIC_KEY)
    bankMsg = Basic.write_byte(1) + key.encrypt(Basic.write_byte(3) + bankMsg)
    payment = UDPPayment.UDPPayment(Bank.get(), bankMsg)
    paymentDeferred = payment.get_deferred()
    def success(result, request=request):
      log_msg("success")
      self.payments += 1
#      self.start_payment_loop()
      #validate the ACoin
      code, sig = Basic.read_byte(result)
      coin = BankMessages.parse_acoin_response(Bank.get(), sig, request, False)
      if not coin:
        log_msg("Invalid ACoin sent for payment!")
      else:
        Bank.get().on_earned_coin(coin)
    paymentDeferred.addCallback(success)
    def failure(error):
      self.start_payment_loop()
      log_ex(error, "Failure during test?")
      self.failures += 1
    paymentDeferred.addErrback(failure)
 def generate_payment_request_message(self):
   """Create a payment request object, store it for later, increase ID, and create the message associated with it
   @returns: str (message for payment request)"""
   #REFACTOR
   cost = self.torApp.get_relay().get_cost()
   interval = self.bank.currentACoinInterval
   #generate ACoin request
   request = BankMessages.make_acoin_request(self.bank, interval, cost)
   request.id = self.currentRequestId
   self.requests[request.id] = request
   self.currentRequestId += 1
   return Basic.write_long(request.id) + request.msg + Globals.PRIVATE_KEY.sign(request.msg)
示例#3
0
 def __init__(self, bank, value, number):
   BankMessages.BankConnectionFactory.__init__(self, bank)
   #: the value for each ACoin to have, individually
   self.value = value
   #:  a list of all ACoinRequests
   self.requests = []
   #: how many coins to request
   self.number = number
   interval = self.bank.currentACoinInterval
   for i in range(0, number):
     #store the values for later:
     self.requests.append(BankMessages.make_acoin_request(self.bank, interval, value))
示例#4
0
 def generate_payment_request_message(self):
     """Create a payment request object, store it for later, increase ID, and create the message associated with it
 @returns: str (message for payment request)"""
     #REFACTOR
     cost = self.torApp.get_relay().get_cost()
     interval = self.bank.currentACoinInterval
     #generate ACoin request
     request = BankMessages.make_acoin_request(self.bank, interval, cost)
     request.id = self.currentRequestId
     self.requests[request.id] = request
     self.currentRequestId += 1
     return Basic.write_long(
         request.id) + request.msg + Globals.PRIVATE_KEY.sign(request.msg)
示例#5
0
    def start_payment_loop(self):
        coin = Bank.get().get_acoins(1)
        if not coin:
            log_msg("No ACoins left!")
            return
        coin = coin[0]
        #generate ACoin request
        request = BankMessages.make_acoin_request(
            Bank.get(),
            Bank.get().currentACoinInterval, 1)
        #make the message:
        bankMsg = Basic.write_byte(1)
        bankMsg += coin.write_binary() + request.msg
        key = EncryptedDatagram.ClientSymKey(Bank.get().PUBLIC_KEY)
        bankMsg = Basic.write_byte(1) + key.encrypt(
            Basic.write_byte(3) + bankMsg)
        payment = UDPPayment.UDPPayment(Bank.get(), bankMsg)
        paymentDeferred = payment.get_deferred()

        def success(result, request=request):
            log_msg("success")
            self.payments += 1
            #      self.start_payment_loop()
            #validate the ACoin
            code, sig = Basic.read_byte(result)
            coin = BankMessages.parse_acoin_response(Bank.get(), sig, request,
                                                     False)
            if not coin:
                log_msg("Invalid ACoin sent for payment!")
            else:
                Bank.get().on_earned_coin(coin)

        paymentDeferred.addCallback(success)

        def failure(error):
            self.start_payment_loop()
            log_ex(error, "Failure during test?")
            self.failures += 1

        paymentDeferred.addErrback(failure)