Changeset 297

Show
Ignore:
Timestamp:
05/01/09 15:25:21 (3 years ago)
Author:
ocjhb
Message:

freshenUp works

Location:
trunk/sandbox/jhb
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/sandbox/jhb/mobile/ocwallet.py

    r293 r297  
    1414        self.actions=[(u'Send',u'Send coins to someone',self.getDetails), 
    1515                      (u'Receive',u'Receive coins',self.getReceiveDetails), 
    16                       (u'Freshen up',u'Freshen up the coins',self.getFreshenUpDetails), 
     16                      (u'Freshen up',u'Freshen up the coins',self.freshenUp), 
    1717                      (u'Buy',u'Buy new coins',self.mintCoins), 
    1818                      (u'Sell',u'Sell coins',self.redeemCoins), 
     
    100100        self.execute() 
    101101 
    102     def getFreshenUpDetails(self): 
    103         self.getMethod() 
    104         self.execute() 
     102 
    105103 
    106104    def getMethod(self): 
     
    195193 
    196194 
     195    def freshenUp(self): 
     196        cdd,alreadythere = self.getCurrentCurrency() 
     197        transport = transports.HTTPTransport(cdd.issuerServiceLocation) 
     198        self.wallet.freshenUp(transport,cdd) 
     199        self.makeWalletMenu() 
     200        self.displayWalletMenu() 
     201 
     202 
    197203    def execute(self): 
    198204        #print 'execute' 
  • trunk/sandbox/jhb/oc2/wallet.py

    r294 r297  
    199199        currency = self.getCurrency(cdd.currencyId) 
    200200        tokenized =  self.tokenizeForBuying(amount,cdd.denominations) #what coins do we need 
    201         wanted = list(set(tokenized)) #what mkcs do we want 
    202          
     201        tid = self.makeSerial() 
     202        secrets,data = self.prepareBlanks(transport,cdd,tokenized) 
     203        response = self.requestTransfer(transport,tid,target,data,[])                          
     204        signatures = response.signatures 
     205        currency['coins'].extend(self.unblindWithSignatures(secrets,signatures)) 
     206        self.storage.save() 
     207 
     208    def prepareBlanks(self,transport,cdd,values):         
     209        wanted = list(set(values)) #what mkcs do we want 
    203210        keys = self.fetchMintKeys(transport,denominations=wanted) 
    204211        mkcs = {} 
     
    210217        secrets = [] 
    211218        data = [] 
    212         for denomination in tokenized: 
     219        for denomination in values: 
    213220            mkc = mkcs[str(denomination)] 
    214221            blank = self._makeBlank(cdd,mkc) 
     
    216223            secrets.append((blank,blind,mkc,secret)) 
    217224            data.append((mkc.keyId,blind)) 
    218  
    219         tid = self.makeSerial()  
    220         response = self.requestTransfer(transport,tid,target,data,[])                  
     225        return secrets,data 
     226 
     227 
     228        
     229    def unblindWithSignatures(self,secrets,signatures):         
    221230        i = 0 
    222         signatures = response.signatures 
     231        coins = [] 
    223232        for signature in signatures: 
    224233            blank,blind,mkc,secret = secrets[i] 
     
    228237            if not key.verifyContainerSignature(coin): 
    229238                raise 'Invalid signature'  
    230             currency['coins'].append(coin) 
     239            coins.append(coin) 
    231240            i += 1 
    232         self.storage.save() 
     241        return coins             
    233242 
    234243    def getAllCoins(self,currencyId): 
     
    247256        newcoins = [c for c in coins if c not in picked] 
    248257        currency['coins'] = newcoins 
    249  
    250  
     258        self.storage.save() 
     259 
     260 
     261 
     262    def freshenUp(self,transport,cdd):         
     263        currency = self.getCurrency(cdd.currencyId) 
     264        paycoins,secrets,data = self.prepare4exchange(transport,cdd,currency['coins'],[]) 
     265        tid = self.makeSerial() 
     266        response = self.requestTransfer(transport,tid,None,data,paycoins) 
     267        coins = currency['coins'] 
     268        for coin in paycoins: 
     269            coins.pop(coins.index(coin)) 
     270        coins.extend(self.unblindWithSignatures(secrets,response.signatures))  
     271        self.storage.save() 
     272 
     273    def prepare4exchange(self,transport,cdd,oldcoins,newcoins): 
     274        oldcoins = [c for c in oldcoins] 
     275        newcoins = [c for c in newcoins] 
     276         
     277        oldvalues = [int(c.denomination) for c in oldcoins] 
     278        newvalues = [int(c.denomination) for c in newcoins] 
     279        denominations = [int(d) for d in cdd.denominations] 
     280        keep,pay,blank = coinsplitting.prepare_for_exchange(denominations,oldvalues,newvalues) 
     281         
     282        paycoins = [] 
     283        for value in pay: 
     284            for coin in oldcoins: 
     285                if int(coin.denomination) == value: 
     286                    paycoins.append(oldcoins.pop(oldcoins.index(coin))) 
     287                    break 
     288         
     289        secrets,data = self.prepareBlanks(transport,cdd,blank) 
     290        return paycoins,secrets,data