コード例 #1
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)
コード例 #2
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)
コード例 #3
0
 def send_receipt_message(self, theirId, numTokens):
     """Send a new payment request after a successful payment
 @param theirId:  the id that the origin has associated with this payment
 @type  theirId:  int
 @param numTokens:  how many payment requests to send back to the origin
 @type  numTokens:  int
 @returns:  deferred (triggered when message is done sending)"""
     msg = self.get_prefix()
     msg += Basic.write_long(theirId)
     msg += Basic.write_byte(numTokens)
     for i in range(0, numTokens):
         msg += self.generate_payment_request_message()
     return self.send_direct_tor_message(msg, "receipt", False, 3)
コード例 #4
0
 def send_receipt_message(self, theirId, numTokens):
   """Send a new payment request after a successful payment
   @param theirId:  the id that the origin has associated with this payment
   @type  theirId:  int
   @param numTokens:  how many payment requests to send back to the origin
   @type  numTokens:  int
   @returns:  deferred (triggered when message is done sending)"""
   msg = self.get_prefix()
   msg += Basic.write_long(theirId)
   msg += Basic.write_byte(numTokens)
   for i in range(0, numTokens):
     msg += self.generate_payment_request_message()
   return self.send_direct_tor_message(msg, "receipt", False, 3)
コード例 #5
0
  def start_bank_process(self, readTokens, writeTokens, paymentId):
    """Create the bank message, and send it to the payment proxy for relaying to the bank.
    @param readTokens:  how many read tokens to pay the merchant for
    @type  readTokens:  int
    @param writeTokens:  how many write tokens to pay the merchant for
    @type  writeTokens:  int
    @param paymentId:  the id for this payment, for tracking when it is completed
    @type  paymentId:  int
    """
    #generate the response message:
    msg  = Basic.write_byte(PAR_VERSION)
    msg += Basic.write_int(readTokens)
    msg += Basic.write_int(writeTokens)
    msg += Basic.write_long(paymentId)
    #figure out how many payments must be made:
    totalTokens = readTokens + writeTokens
    numPayments = totalTokens / Globals.CELLS_PER_PAYMENT
    msg += Basic.write_byte(numPayments)
    bankMsg = Basic.write_byte(numPayments)
    for i in range(0, numPayments):
      #get a token to use for this payment:
      requestId, token = self.paymentTokens.popitem()
      #send it to the bank for signing
      coin = self.parClient.bank.get_acoins(1)
      if not coin:
        paymentDeferred = self.paymentDeferreds[paymentId]
        del self.paymentDeferreds[paymentId]
        paymentDeferred.errback(InsufficientACoins("No ACoins left."))
        return
      coin = coin[0]
      self.parClient.circ.app.coinsSpent += 1
#      log_msg("Srsly, wtf is going on? %s" % (coin.interval), 4)
      bankMsg += coin.write_binary() + token
      msg += Basic.write_byte(COIN_TYPES['A']) + Basic.write_long(requestId)
    key = EncryptedDatagram.ClientSymKey(self.parClient.bank.PUBLIC_KEY)
    bankMsg = Basic.write_byte(1) + key.encrypt(Basic.write_byte(3) + bankMsg)
    msg = Basic.write_byte(PAR_VERSION) + Basic.write_byte(self.hop-1) + Basic.write_lenstr(bankMsg) + Basic.write_lenstr(msg)
    self.parClient.send_direct_tor_message(msg, "bank_relay", True, self.paymentProxyHop)