From 0d5c37a49e688503dc2933d379c68541dd432248 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 17 Dec 2015 23:34:39 +0100 Subject: [PATCH] Fix some payment bugs. It still doesn't work, some of the emscripten interface stuff still needs to be finished. --- extension/background/db.ts | 3 +- extension/background/wallet.js | 14 +++++-- extension/background/wallet.ts | 23 ++++++++--- extension/popup/balance-overview.html | 58 +++++++++++++-------------- extension/popup/balance-overview.js | 2 + extension/popup/balance-overview.tsx | 4 +- 6 files changed, 63 insertions(+), 41 deletions(-) diff --git a/extension/background/db.ts b/extension/background/db.ts index 12d944a83..40c1cdaca 100644 --- a/extension/background/db.ts +++ b/extension/background/db.ts @@ -19,7 +19,7 @@ namespace Db { } export interface Keys { - denoms: { [key: string]: Denomination }; + denoms: Denomination[]; } export interface Denomination { @@ -47,6 +47,7 @@ namespace Db { denomPub: string; denomSig: string; currentAmount: AmountJson; + mintBaseUrl: string; } diff --git a/extension/background/wallet.js b/extension/background/wallet.js index f915187ab..422e60ca5 100644 --- a/extension/background/wallet.js +++ b/extension/background/wallet.js @@ -61,7 +61,7 @@ function signDeposit(db, offer, cds) { * @param db * @param paymentAmount * @param depositFeeLimit - * @param mintKeys + * @param allowedMints */ function getPossibleMintCoins(db, paymentAmount, depositFeeLimit, allowedMints) { return new Promise((resolve, reject) => { @@ -83,10 +83,14 @@ function getPossibleMintCoins(db, paymentAmount, depositFeeLimit, allowedMints) if (!cursor) { return; } + let value = cursor.value; let cd = { coin: cursor.value, - denom: mint.keys.denoms[cursor.value.denomPub] + denom: mint.keys.denoms.find((e) => e.denom_pub === value.denomPub) }; + if (!cd.denom) { + throw Error("denom not found"); + } let x = m[mint.baseUrl]; if (!x) { m[mint.baseUrl] = [cd]; @@ -94,6 +98,7 @@ function getPossibleMintCoins(db, paymentAmount, depositFeeLimit, allowedMints) else { x.push(cd); } + cursor.continue(); }; }; } @@ -278,7 +283,7 @@ function withdrawPrepare(db, denom, reserve) { coinPub: coinPub.toCrock(), coinPriv: coinPriv.toCrock(), denomPub: denomPub.encode().toCrock(), - mintBaseUrl: reserve.mintBaseUrl, + mintBaseUrl: reserve.mint_base_url, withdrawSig: sig.toCrock(), coinEv: ev.toCrock(), coinValue: denom.value @@ -330,7 +335,8 @@ function withdrawExecute(db, pc) { coinPriv: pc.coinPriv, denomPub: pc.denomPub, denomSig: denomSig.encode().toCrock(), - currentAmount: pc.coinValue + currentAmount: pc.coinValue, + mintBaseUrl: pc.mintBaseUrl, }; console.log("unblinded coin"); resolve(coin); diff --git a/extension/background/wallet.ts b/extension/background/wallet.ts index 281a24c6e..a2ac45dfa 100644 --- a/extension/background/wallet.ts +++ b/extension/background/wallet.ts @@ -131,7 +131,7 @@ interface MintInfo { * @param db * @param paymentAmount * @param depositFeeLimit - * @param mintKeys + * @param allowedMints */ function getPossibleMintCoins(db: IDBDatabase, paymentAmount: AmountJson, @@ -156,16 +156,21 @@ function getPossibleMintCoins(db: IDBDatabase, if (!cursor) { return; } + let value: Db.Coin = cursor.value; let cd = { coin: cursor.value, - denom: mint.keys.denoms[cursor.value.denomPub] + denom: mint.keys.denoms.find((e) => e.denom_pub === value.denomPub) }; + if (!cd.denom) { + throw Error("denom not found"); + } let x = m[mint.baseUrl]; if (!x) { m[mint.baseUrl] = [cd]; } else { x.push(cd); } + cursor.continue(); } } } @@ -340,9 +345,16 @@ function rankDenom(denom1: any, denom2: any) { } +interface Reserve { + mint_base_url: string + reserve_priv: string; + reserve_pub: string; +} + + function withdrawPrepare(db: IDBDatabase, denom: Db.Denomination, - reserve): Promise { + reserve: Reserve): Promise { let reservePriv = new EddsaPrivateKey(); reservePriv.loadCrock(reserve.reserve_priv); let reservePub = new EddsaPublicKey(); @@ -383,7 +395,7 @@ function withdrawPrepare(db: IDBDatabase, coinPub: coinPub.toCrock(), coinPriv: coinPriv.toCrock(), denomPub: denomPub.encode().toCrock(), - mintBaseUrl: reserve.mintBaseUrl, + mintBaseUrl: reserve.mint_base_url, withdrawSig: sig.toCrock(), coinEv: ev.toCrock(), coinValue: denom.value @@ -444,7 +456,8 @@ function withdrawExecute(db, pc: Db.PreCoin): Promise { coinPriv: pc.coinPriv, denomPub: pc.denomPub, denomSig: denomSig.encode().toCrock(), - currentAmount: pc.coinValue + currentAmount: pc.coinValue, + mintBaseUrl: pc.mintBaseUrl, }; console.log("unblinded coin"); resolve(coin); diff --git a/extension/popup/balance-overview.html b/extension/popup/balance-overview.html index a3aeae697..bb9726ab2 100644 --- a/extension/popup/balance-overview.html +++ b/extension/popup/balance-overview.html @@ -1,37 +1,35 @@ - - - - - - - - - + + + + + + + - - - + -
-
+ + + - +
+
+ + diff --git a/extension/popup/balance-overview.js b/extension/popup/balance-overview.js index b2c5e0837..946ddc6b3 100644 --- a/extension/popup/balance-overview.js +++ b/extension/popup/balance-overview.js @@ -20,6 +20,7 @@ document.addEventListener('DOMContentLoaded', (e) => { let context = document.getElementById("balance-template").innerHTML; let template = Handlebars.compile(context); document.getElementById("content").innerHTML = template(wallet); + console.log("got wallet", JSON.stringify(wallet)); let el = document.getElementById("link-kudos"); if (el) { el.onclick = (e) => { @@ -37,5 +38,6 @@ document.addEventListener('DOMContentLoaded', (e) => { }); document.getElementById("reset").addEventListener("click", (e) => { chrome.runtime.sendMessage({ type: "reset" }); + window.close(); }); }); diff --git a/extension/popup/balance-overview.tsx b/extension/popup/balance-overview.tsx index 38be50375..bc0e80ee6 100644 --- a/extension/popup/balance-overview.tsx +++ b/extension/popup/balance-overview.tsx @@ -14,7 +14,7 @@ let React = { } return e; } -} +}; document.addEventListener('DOMContentLoaded', (e) => { @@ -23,6 +23,7 @@ document.addEventListener('DOMContentLoaded', (e) => { let context = document.getElementById("balance-template").innerHTML; let template = Handlebars.compile(context); document.getElementById("content").innerHTML = template(wallet); + console.log("got wallet", JSON.stringify(wallet)); let el = document.getElementById("link-kudos"); if (el) { el.onclick = (e) => { @@ -41,5 +42,6 @@ document.addEventListener('DOMContentLoaded', (e) => { }); document.getElementById("reset").addEventListener("click", (e) => { chrome.runtime.sendMessage({type: "reset"}); + window.close(); }); });