Changeset 297
- Timestamp:
- 05/01/09 15:25:21 (3 years ago)
- Location:
- trunk/sandbox/jhb
- Files:
-
- 2 modified
-
mobile/ocwallet.py (modified) (3 diffs)
-
oc2/wallet.py (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/sandbox/jhb/mobile/ocwallet.py
r293 r297 14 14 self.actions=[(u'Send',u'Send coins to someone',self.getDetails), 15 15 (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), 17 17 (u'Buy',u'Buy new coins',self.mintCoins), 18 18 (u'Sell',u'Sell coins',self.redeemCoins), … … 100 100 self.execute() 101 101 102 def getFreshenUpDetails(self): 103 self.getMethod() 104 self.execute() 102 105 103 106 104 def getMethod(self): … … 195 193 196 194 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 197 203 def execute(self): 198 204 #print 'execute' -
trunk/sandbox/jhb/oc2/wallet.py
r294 r297 199 199 currency = self.getCurrency(cdd.currencyId) 200 200 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 203 210 keys = self.fetchMintKeys(transport,denominations=wanted) 204 211 mkcs = {} … … 210 217 secrets = [] 211 218 data = [] 212 for denomination in tokenized:219 for denomination in values: 213 220 mkc = mkcs[str(denomination)] 214 221 blank = self._makeBlank(cdd,mkc) … … 216 223 secrets.append((blank,blind,mkc,secret)) 217 224 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): 221 230 i = 0 222 signatures = response.signatures231 coins = [] 223 232 for signature in signatures: 224 233 blank,blind,mkc,secret = secrets[i] … … 228 237 if not key.verifyContainerSignature(coin): 229 238 raise 'Invalid signature' 230 c urrency['coins'].append(coin)239 coins.append(coin) 231 240 i += 1 232 self.storage.save()241 return coins 233 242 234 243 def getAllCoins(self,currencyId): … … 247 256 newcoins = [c for c in coins if c not in picked] 248 257 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
