aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2020-03-09 14:29:13 +0530
committerFlorian Dold <florian.dold@gmail.com>2020-03-09 14:29:13 +0530
commitbf1b350d4410cfc7c3e9ae3a717343c9ef19625a (patch)
tree93db95280047db412c50fb68030853449beffe68
parent7ba1f918233aa3068877adfc1d2016ed661b6400 (diff)
abort exchange update if version does not match
-rw-r--r--src/operations/exchanges.ts20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/operations/exchanges.ts b/src/operations/exchanges.ts
index ca8c94ecc..89f89ec10 100644
--- a/src/operations/exchanges.ts
+++ b/src/operations/exchanges.ts
@@ -39,8 +39,12 @@ import {
OperationFailedAndReportedError,
guardOperationException,
} from "./errors";
-import { WALLET_CACHE_BREAKER_CLIENT_VERSION } from "./versions";
+import {
+ WALLET_CACHE_BREAKER_CLIENT_VERSION,
+ WALLET_EXCHANGE_PROTOCOL_VERSION,
+} from "./versions";
import { getTimestampNow } from "../util/time";
+import { compare } from "../util/libtoolVersion";
async function denominationRecordFromKeys(
ws: InternalWalletState,
@@ -161,6 +165,20 @@ async function updateExchangeWithKeys(
throw new OperationFailedAndReportedError(m);
}
+ const versionRes = compare(WALLET_EXCHANGE_PROTOCOL_VERSION, protocolVersion);
+ if (versionRes?.compatible != true) {
+ const m = "exchange protocol version not compatible with wallet";
+ await setExchangeError(ws, baseUrl, {
+ type: "protocol-incompatible",
+ details: {
+ exchangeProtocolVersion: protocolVersion,
+ walletProtocolVersion: WALLET_EXCHANGE_PROTOCOL_VERSION,
+ },
+ message: m,
+ });
+ throw new OperationFailedAndReportedError(m);
+ }
+
const currency = Amounts.parseOrThrow(exchangeKeysJson.denoms[0].value)
.currency;