2022-10-02 19:37:11 +00:00
|
|
|
import 'package:decimal/decimal.dart';
|
2022-10-03 16:30:50 +00:00
|
|
|
import 'package:stackwallet/models/exchange/response_objects/estimate.dart';
|
2022-10-02 19:37:11 +00:00
|
|
|
import 'package:stackwallet/models/exchange/response_objects/range.dart';
|
|
|
|
import 'package:stackwallet/models/exchange/response_objects/trade.dart';
|
2023-02-05 20:32:39 +00:00
|
|
|
import 'package:stackwallet/models/isar/exchange_cache/currency.dart';
|
|
|
|
import 'package:stackwallet/models/isar/exchange_cache/pair.dart';
|
2022-10-04 17:06:14 +00:00
|
|
|
import 'package:stackwallet/services/exchange/change_now/change_now_exchange.dart';
|
2022-10-02 19:37:11 +00:00
|
|
|
import 'package:stackwallet/services/exchange/exchange_response.dart';
|
2023-02-05 20:32:39 +00:00
|
|
|
import 'package:stackwallet/services/exchange/majestic_bank/majestic_bank_exchange.dart';
|
2022-10-04 17:06:14 +00:00
|
|
|
import 'package:stackwallet/services/exchange/simpleswap/simpleswap_exchange.dart';
|
2023-04-28 20:31:26 +00:00
|
|
|
import 'package:stackwallet/services/exchange/trocador/trocador_exchange.dart';
|
2022-10-02 19:37:11 +00:00
|
|
|
|
|
|
|
abstract class Exchange {
|
2023-02-05 20:32:39 +00:00
|
|
|
static Exchange get defaultExchange => ChangeNowExchange.instance;
|
|
|
|
|
2022-10-04 17:06:14 +00:00
|
|
|
static Exchange fromName(String name) {
|
|
|
|
switch (name) {
|
|
|
|
case ChangeNowExchange.exchangeName:
|
2023-02-05 20:32:39 +00:00
|
|
|
return ChangeNowExchange.instance;
|
2022-10-04 17:06:14 +00:00
|
|
|
case SimpleSwapExchange.exchangeName:
|
2023-02-05 20:32:39 +00:00
|
|
|
return SimpleSwapExchange.instance;
|
|
|
|
case MajesticBankExchange.exchangeName:
|
|
|
|
return MajesticBankExchange.instance;
|
2023-04-28 20:31:26 +00:00
|
|
|
case TrocadorExchange.exchangeName:
|
|
|
|
return TrocadorExchange.instance;
|
2022-10-04 17:06:14 +00:00
|
|
|
default:
|
2023-04-28 20:40:36 +00:00
|
|
|
final split = name.split(" ");
|
|
|
|
if (split.length >= 2) {
|
|
|
|
// silly way to check for 'Trocador ($providerName)'
|
|
|
|
return fromName(split.first);
|
|
|
|
}
|
2022-10-04 17:06:14 +00:00
|
|
|
throw ArgumentError("Unknown exchange name");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-10-03 00:54:35 +00:00
|
|
|
String get name;
|
2022-10-02 19:37:11 +00:00
|
|
|
|
|
|
|
Future<ExchangeResponse<List<Currency>>> getAllCurrencies(bool fixedRate);
|
|
|
|
|
2023-02-13 15:05:22 +00:00
|
|
|
Future<ExchangeResponse<List<Currency>>> getPairedCurrencies(
|
|
|
|
String forCurrency,
|
|
|
|
bool fixedRate,
|
|
|
|
);
|
|
|
|
|
2022-10-02 19:37:11 +00:00
|
|
|
Future<ExchangeResponse<List<Pair>>> getPairsFor(
|
|
|
|
String currency,
|
|
|
|
bool fixedRate,
|
|
|
|
);
|
|
|
|
|
|
|
|
Future<ExchangeResponse<List<Pair>>> getAllPairs(bool fixedRate);
|
|
|
|
|
|
|
|
Future<ExchangeResponse<Trade>> getTrade(String tradeId);
|
2022-10-02 21:48:43 +00:00
|
|
|
Future<ExchangeResponse<Trade>> updateTrade(Trade trade);
|
2022-10-02 19:37:11 +00:00
|
|
|
|
|
|
|
Future<ExchangeResponse<List<Trade>>> getTrades();
|
|
|
|
|
2022-10-02 21:48:43 +00:00
|
|
|
Future<ExchangeResponse<Range>> getRange(
|
2022-10-02 19:37:11 +00:00
|
|
|
String from,
|
|
|
|
String to,
|
|
|
|
bool fixedRate,
|
|
|
|
);
|
|
|
|
|
2022-10-03 16:30:50 +00:00
|
|
|
Future<ExchangeResponse<Estimate>> getEstimate(
|
2022-10-02 19:37:11 +00:00
|
|
|
String from,
|
|
|
|
String to,
|
|
|
|
Decimal amount,
|
|
|
|
bool fixedRate,
|
2022-10-02 21:48:43 +00:00
|
|
|
bool reversed,
|
2022-10-02 19:37:11 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
Future<ExchangeResponse<Trade>> createTrade({
|
|
|
|
required String from,
|
|
|
|
required String to,
|
|
|
|
required bool fixedRate,
|
|
|
|
required Decimal amount,
|
|
|
|
required String addressTo,
|
2022-10-03 00:54:35 +00:00
|
|
|
String? extraId,
|
2022-10-02 19:37:11 +00:00
|
|
|
required String addressRefund,
|
|
|
|
required String refundExtraId,
|
2023-04-28 20:29:10 +00:00
|
|
|
Estimate? estimate,
|
2022-10-04 00:55:12 +00:00
|
|
|
required bool reversed,
|
2022-10-02 19:37:11 +00:00
|
|
|
});
|
|
|
|
}
|