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)
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))
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)
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)