mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2025-05-05 12:32:14 +00:00
- Add whether this provide supports fixed rate or not
- Fix Change now fixed rate exchange due to wrong rate id
This commit is contained in:
parent
e65bd87f06
commit
f14c01303f
7 changed files with 31 additions and 13 deletions
lib
|
@ -11,7 +11,6 @@ import 'package:cake_wallet/exchange/trade_request.dart';
|
||||||
import 'package:cake_wallet/exchange/trade_state.dart';
|
import 'package:cake_wallet/exchange/trade_state.dart';
|
||||||
import 'package:cake_wallet/exchange/changenow/changenow_request.dart';
|
import 'package:cake_wallet/exchange/changenow/changenow_request.dart';
|
||||||
import 'package:cake_wallet/exchange/exchange_provider_description.dart';
|
import 'package:cake_wallet/exchange/exchange_provider_description.dart';
|
||||||
import 'package:cake_wallet/exchange/trade_not_created_exeption.dart';
|
|
||||||
|
|
||||||
class ChangeNowExchangeProvider extends ExchangeProvider {
|
class ChangeNowExchangeProvider extends ExchangeProvider {
|
||||||
ChangeNowExchangeProvider()
|
ChangeNowExchangeProvider()
|
||||||
|
@ -21,8 +20,7 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
|
||||||
.where((i) => i != CryptoCurrency.xhv)
|
.where((i) => i != CryptoCurrency.xhv)
|
||||||
.map((i) => CryptoCurrency.all
|
.map((i) => CryptoCurrency.all
|
||||||
.where((i) => i != CryptoCurrency.xhv)
|
.where((i) => i != CryptoCurrency.xhv)
|
||||||
.map((k) => ExchangePair(from: i, to: k, reverse: true))
|
.map((k) => ExchangePair(from: i, to: k, reverse: true)))
|
||||||
.where((c) => c != null))
|
|
||||||
.expand((i) => i)
|
.expand((i) => i)
|
||||||
.toList());
|
.toList());
|
||||||
|
|
||||||
|
@ -43,6 +41,9 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
|
||||||
@override
|
@override
|
||||||
bool get isEnabled => true;
|
bool get isEnabled => true;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get supportsFixedRate => true;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
ExchangeProviderDescription get description =>
|
ExchangeProviderDescription get description =>
|
||||||
ExchangeProviderDescription.changeNow;
|
ExchangeProviderDescription.changeNow;
|
||||||
|
@ -109,6 +110,15 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
|
||||||
};
|
};
|
||||||
|
|
||||||
if (isFixedRateMode) {
|
if (isFixedRateMode) {
|
||||||
|
// since we schedule to calculate the rate every 5 seconds we need to ensure that
|
||||||
|
// we have the latest rate id with the given inputs before creating the trade
|
||||||
|
await calculateAmount(
|
||||||
|
from: _request.to,
|
||||||
|
to: _request.from,
|
||||||
|
amount: double.tryParse(_request.toAmount) ?? 0,
|
||||||
|
isFixedRateMode: true,
|
||||||
|
isReceiveAmount: true,
|
||||||
|
);
|
||||||
body['rateId'] = _lastUsedRateId;
|
body['rateId'] = _lastUsedRateId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -180,9 +190,7 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
|
||||||
final extraId = responseJSON['payinExtraId'] as String;
|
final extraId = responseJSON['payinExtraId'] as String;
|
||||||
final outputTransaction = responseJSON['payoutHash'] as String;
|
final outputTransaction = responseJSON['payoutHash'] as String;
|
||||||
final expiredAtRaw = responseJSON['validUntil'] as String;
|
final expiredAtRaw = responseJSON['validUntil'] as String;
|
||||||
final expiredAt = expiredAtRaw != null
|
final expiredAt = DateTime.tryParse(expiredAtRaw)?.toLocal();
|
||||||
? DateTime.parse(expiredAtRaw).toLocal()
|
|
||||||
: null;
|
|
||||||
|
|
||||||
return Trade(
|
return Trade(
|
||||||
id: id,
|
id: id,
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import 'package:flutter/foundation.dart';
|
|
||||||
import 'package:cw_core/crypto_currency.dart';
|
import 'package:cw_core/crypto_currency.dart';
|
||||||
import 'package:cake_wallet/exchange/trade_request.dart';
|
import 'package:cake_wallet/exchange/trade_request.dart';
|
||||||
import 'package:cake_wallet/exchange/exchange_pair.dart';
|
import 'package:cake_wallet/exchange/exchange_pair.dart';
|
||||||
|
@ -14,6 +13,7 @@ abstract class ExchangeProvider {
|
||||||
ExchangeProviderDescription get description;
|
ExchangeProviderDescription get description;
|
||||||
bool get isAvailable;
|
bool get isAvailable;
|
||||||
bool get isEnabled;
|
bool get isEnabled;
|
||||||
|
bool get supportsFixedRate;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() => title;
|
String toString() => title;
|
||||||
|
|
|
@ -66,6 +66,9 @@ class MorphTokenExchangeProvider extends ExchangeProvider {
|
||||||
@override
|
@override
|
||||||
bool get isEnabled => true;
|
bool get isEnabled => true;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get supportsFixedRate => false;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
ExchangeProviderDescription get description =>
|
ExchangeProviderDescription get description =>
|
||||||
ExchangeProviderDescription.morphToken;
|
ExchangeProviderDescription.morphToken;
|
||||||
|
|
|
@ -12,7 +12,6 @@ import 'package:cw_core/crypto_currency.dart';
|
||||||
import 'package:cake_wallet/exchange/trade_request.dart';
|
import 'package:cake_wallet/exchange/trade_request.dart';
|
||||||
import 'package:cake_wallet/exchange/trade.dart';
|
import 'package:cake_wallet/exchange/trade.dart';
|
||||||
import 'package:cake_wallet/exchange/limits.dart';
|
import 'package:cake_wallet/exchange/limits.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
|
||||||
import 'package:http/http.dart';
|
import 'package:http/http.dart';
|
||||||
|
|
||||||
class SideShiftExchangeProvider extends ExchangeProvider {
|
class SideShiftExchangeProvider extends ExchangeProvider {
|
||||||
|
@ -48,8 +47,7 @@ class SideShiftExchangeProvider extends ExchangeProvider {
|
||||||
|
|
||||||
return supportedCurrencies
|
return supportedCurrencies
|
||||||
.map((i) => supportedCurrencies
|
.map((i) => supportedCurrencies
|
||||||
.map((k) => ExchangePair(from: i, to: k, reverse: true))
|
.map((k) => ExchangePair(from: i, to: k, reverse: true)))
|
||||||
.where((c) => c != null))
|
|
||||||
.expand((i) => i)
|
.expand((i) => i)
|
||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
|
@ -257,8 +255,7 @@ class SideShiftExchangeProvider extends ExchangeProvider {
|
||||||
state = TradeState.deserialize(raw: status ?? 'created');
|
state = TradeState.deserialize(raw: status ?? 'created');
|
||||||
|
|
||||||
final expiredAtRaw = responseJSON['expiresAtISO'] as String;
|
final expiredAtRaw = responseJSON['expiresAtISO'] as String;
|
||||||
final expiredAt =
|
final expiredAt = DateTime.tryParse(expiredAtRaw)?.toLocal();
|
||||||
expiredAtRaw != null ? DateTime.parse(expiredAtRaw).toLocal() : null;
|
|
||||||
|
|
||||||
return Trade(
|
return Trade(
|
||||||
id: id,
|
id: id,
|
||||||
|
@ -278,6 +275,9 @@ class SideShiftExchangeProvider extends ExchangeProvider {
|
||||||
@override
|
@override
|
||||||
bool get isEnabled => true;
|
bool get isEnabled => true;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get supportsFixedRate => true;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get title => 'SideShift';
|
String get title => 'SideShift';
|
||||||
|
|
||||||
|
|
|
@ -209,6 +209,9 @@ class SimpleSwapExchangeProvider extends ExchangeProvider {
|
||||||
@override
|
@override
|
||||||
bool get isEnabled => true;
|
bool get isEnabled => true;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get supportsFixedRate => false;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get title => 'SimpleSwap';
|
String get title => 'SimpleSwap';
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,9 @@ class XMRTOExchangeProvider extends ExchangeProvider {
|
||||||
@override
|
@override
|
||||||
bool get isEnabled => true;
|
bool get isEnabled => true;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get supportsFixedRate => false;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
ExchangeProviderDescription get description =>
|
ExchangeProviderDescription get description =>
|
||||||
ExchangeProviderDescription.xmrto;
|
ExchangeProviderDescription.xmrto;
|
||||||
|
|
|
@ -306,10 +306,11 @@ abstract class ExchangeViewModelBase with Store {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _calculateBestRate() async {
|
Future<void> _calculateBestRate() async {
|
||||||
final amount = double.tryParse(depositAmount) ?? 1;
|
final amount = double.tryParse(isFixedRateMode ? receiveAmount : depositAmount) ?? 1;
|
||||||
|
|
||||||
final result = await Future.wait<double>(
|
final result = await Future.wait<double>(
|
||||||
_tradeAvailableProviders
|
_tradeAvailableProviders
|
||||||
|
.where((element) => element.supportsFixedRate)
|
||||||
.map((element) => element.calculateAmount(
|
.map((element) => element.calculateAmount(
|
||||||
from: depositCurrency,
|
from: depositCurrency,
|
||||||
to: receiveCurrency,
|
to: receiveCurrency,
|
||||||
|
|
Loading…
Reference in a new issue