From 874b52c6d5c0d8043f3250e2b80f5091c159ded1 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Wed, 8 Apr 2020 14:21:11 -0300 Subject: [wallet] add option to see exchange's fee structure --- .../java/net/taler/wallet/withdraw/ExchangeFees.kt | 99 ++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 wallet/src/main/java/net/taler/wallet/withdraw/ExchangeFees.kt (limited to 'wallet/src/main/java/net/taler/wallet/withdraw/ExchangeFees.kt') diff --git a/wallet/src/main/java/net/taler/wallet/withdraw/ExchangeFees.kt b/wallet/src/main/java/net/taler/wallet/withdraw/ExchangeFees.kt new file mode 100644 index 0000000..4494e38 --- /dev/null +++ b/wallet/src/main/java/net/taler/wallet/withdraw/ExchangeFees.kt @@ -0,0 +1,99 @@ +/* + * This file is part of GNU Taler + * (C) 2020 Taler Systems S.A. + * + * GNU Taler is free software; you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 3, or (at your option) any later version. + * + * GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with + * GNU Taler; see the file COPYING. If not, see + */ + +package net.taler.wallet.withdraw + +import net.taler.common.Amount +import net.taler.common.Timestamp +import org.json.JSONObject + +data class CoinFee( + val coin: Amount, + val feeDeposit: Amount, + val feeRefresh: Amount, + val feeRefund: Amount, + val feeWithdraw: Amount +) + +data class CoinFees( + val quantity: Int, + val coinFee: CoinFee +) + +data class WireFee( + val start: Timestamp, + val end: Timestamp, + val wireFee: Amount, + val closingFee: Amount +) + +data class ExchangeFees( + val withdrawFee: Amount, + val overhead: Amount, + val earliestDepositExpiration: Timestamp, + val coinFees: List, + val wireFees: List +) { + companion object { + fun fromExchangeWithdrawDetailsJson(json: JSONObject): ExchangeFees { + val earliestDepositExpiration = + json.getJSONObject("earliestDepositExpiration").getLong("t_ms") + + val selectedDenoms = json.getJSONArray("selectedDenoms") + val coinFees = HashMap(selectedDenoms.length()) + for (i in 0 until selectedDenoms.length()) { + val denom = selectedDenoms.getJSONObject(i) + val coinFee = CoinFee( + coin = Amount.fromJsonObject(denom.getJSONObject("value")), + feeDeposit = Amount.fromJsonObject(denom.getJSONObject("feeDeposit")), + feeRefresh = Amount.fromJsonObject(denom.getJSONObject("feeRefresh")), + feeRefund = Amount.fromJsonObject(denom.getJSONObject("feeRefund")), + feeWithdraw = Amount.fromJsonObject(denom.getJSONObject("feeWithdraw")) + ) + coinFees[coinFee] = (coinFees[coinFee] ?: 0) + 1 + } + + val wireFeesJson = json.getJSONObject("wireFees") + val feesForType = wireFeesJson.getJSONObject("feesForType") + val bankFees = feesForType.getJSONArray("x-taler-bank") + val wireFees = ArrayList(bankFees.length()) + for (i in 0 until bankFees.length()) { + val fee = bankFees.getJSONObject(i) + val startStamp = + fee.getJSONObject("startStamp").getLong("t_ms") + val endStamp = + fee.getJSONObject("endStamp").getLong("t_ms") + val wireFee = WireFee( + start = Timestamp(startStamp), + end = Timestamp(endStamp), + wireFee = Amount.fromJsonObject(fee.getJSONObject("wireFee")), + closingFee = Amount.fromJsonObject(fee.getJSONObject("closingFee")) + ) + wireFees.add(wireFee) + } + + return ExchangeFees( + withdrawFee = Amount.fromJsonObject(json.getJSONObject("withdrawFee")), + overhead = Amount.fromJsonObject(json.getJSONObject("overhead")), + earliestDepositExpiration = Timestamp(earliestDepositExpiration), + coinFees = coinFees.map { (coinFee, quantity) -> + CoinFees(quantity, coinFee) + }, + wireFees = wireFees + ) + } + } +} -- cgit v1.2.3