mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2024-11-17 09:47:37 +00:00
trocador api and response DTOs
This commit is contained in:
parent
05dc2a23e6
commit
9c414068d3
7 changed files with 699 additions and 0 deletions
|
@ -0,0 +1,44 @@
|
|||
import 'package:decimal/decimal.dart';
|
||||
|
||||
class TrocadorCoin {
|
||||
final String name;
|
||||
final String ticker;
|
||||
final String network;
|
||||
final bool memo;
|
||||
final String image;
|
||||
final Decimal minimum;
|
||||
final Decimal maximum;
|
||||
|
||||
TrocadorCoin({
|
||||
required this.name,
|
||||
required this.ticker,
|
||||
required this.network,
|
||||
required this.memo,
|
||||
required this.image,
|
||||
required this.minimum,
|
||||
required this.maximum,
|
||||
});
|
||||
|
||||
factory TrocadorCoin.fromMap(Map<String, dynamic> json) => TrocadorCoin(
|
||||
name: json['name'] as String,
|
||||
ticker: json['ticker'] as String,
|
||||
network: json['network'] as String,
|
||||
memo: json['memo'] as bool,
|
||||
image: json['image'] as String,
|
||||
minimum: Decimal.parse(json['minimum'].toString()),
|
||||
maximum: Decimal.parse(json['maximum'].toString()),
|
||||
);
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'TrocadorCoin( '
|
||||
'name: $name, '
|
||||
'ticker: $ticker, '
|
||||
'network: $network, '
|
||||
'memo: $memo, '
|
||||
'image: $image, '
|
||||
'minimum: $minimum, '
|
||||
'maximum: $maximum '
|
||||
')';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
import 'package:decimal/decimal.dart';
|
||||
|
||||
class TrocadorQuote {
|
||||
final String provider;
|
||||
final String kycRating;
|
||||
final int insurance;
|
||||
final bool fixed;
|
||||
final Decimal amountTo;
|
||||
final Decimal waste;
|
||||
|
||||
TrocadorQuote({
|
||||
required this.provider,
|
||||
required this.kycRating,
|
||||
required this.insurance,
|
||||
required this.fixed,
|
||||
required this.amountTo,
|
||||
required this.waste,
|
||||
});
|
||||
|
||||
factory TrocadorQuote.fromMap(Map<String, dynamic> map) {
|
||||
return TrocadorQuote(
|
||||
provider: map['provider'] as String,
|
||||
kycRating: map['kycrating'] as String,
|
||||
insurance: map['insurance'] as int,
|
||||
// wtf trocador?
|
||||
fixed: map['fixed'] == "True",
|
||||
amountTo: Decimal.parse(map['amount_to'].toString()),
|
||||
waste: Decimal.parse(map['waste'].toString()),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'TrocadorQuote( '
|
||||
'provider: $provider, '
|
||||
'kycRating: $kycRating, '
|
||||
'insurance: $insurance, '
|
||||
'fixed: $fixed, '
|
||||
'amountTo: $amountTo, '
|
||||
'waste: $waste '
|
||||
')';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,84 @@
|
|||
import 'package:decimal/decimal.dart';
|
||||
import 'package:stackwallet/services/exchange/trocador/response_objects/trocador_quote.dart';
|
||||
|
||||
class TrocadorRate {
|
||||
final String tradeId;
|
||||
final DateTime date;
|
||||
final String tickerFrom;
|
||||
final String tickerTo;
|
||||
final String coinFrom;
|
||||
final String coinTo;
|
||||
final String networkFrom;
|
||||
final String networkTo;
|
||||
final Decimal amountFrom;
|
||||
final Decimal amountTo;
|
||||
final String provider;
|
||||
final bool fixed;
|
||||
final bool payment;
|
||||
final String status;
|
||||
final List<TrocadorQuote> quotes;
|
||||
|
||||
TrocadorRate({
|
||||
required this.tradeId,
|
||||
required this.date,
|
||||
required this.tickerFrom,
|
||||
required this.tickerTo,
|
||||
required this.coinFrom,
|
||||
required this.coinTo,
|
||||
required this.networkFrom,
|
||||
required this.networkTo,
|
||||
required this.amountFrom,
|
||||
required this.amountTo,
|
||||
required this.provider,
|
||||
required this.fixed,
|
||||
required this.payment,
|
||||
required this.status,
|
||||
required this.quotes,
|
||||
});
|
||||
|
||||
factory TrocadorRate.fromMap(Map<String, dynamic> map) {
|
||||
final list =
|
||||
List<Map<String, dynamic>>.from(map['quotes']['quotes'] as List);
|
||||
final quotes = list.map((quote) => TrocadorQuote.fromMap(quote)).toList();
|
||||
|
||||
return TrocadorRate(
|
||||
tradeId: map['trade_id'] as String,
|
||||
date: DateTime.parse(map['date'] as String),
|
||||
tickerFrom: map['ticker_from'] as String,
|
||||
tickerTo: map['ticker_to'] as String,
|
||||
coinFrom: map['coin_from'] as String,
|
||||
coinTo: map['coin_to'] as String,
|
||||
networkFrom: map['network_from'] as String,
|
||||
networkTo: map['network_to'] as String,
|
||||
amountFrom: Decimal.parse(map['amount_from'].toString()),
|
||||
amountTo: Decimal.parse(map['amount_to'].toString()),
|
||||
provider: map['provider'] as String,
|
||||
fixed: map['fixed'] as bool,
|
||||
payment: map['payment'] as bool,
|
||||
status: map['status'] as String,
|
||||
quotes: quotes,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
final quotesString = quotes.map((quote) => quote.toString()).join(', ');
|
||||
return 'TrocadorRate('
|
||||
'tradeId: $tradeId, '
|
||||
'date: $date, '
|
||||
'tickerFrom: $tickerFrom, '
|
||||
'tickerTo: $tickerTo, '
|
||||
'coinFrom: $coinFrom, '
|
||||
'coinTo: $coinTo, '
|
||||
'networkFrom: $networkFrom, '
|
||||
'networkTo: $networkTo, '
|
||||
'amountFrom: $amountFrom, '
|
||||
'amountTo: $amountTo, '
|
||||
'provider: $provider, '
|
||||
'fixed: $fixed, '
|
||||
'payment: $payment, '
|
||||
'status: $status, '
|
||||
'quotes: [$quotesString] '
|
||||
')';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,116 @@
|
|||
import 'package:decimal/decimal.dart';
|
||||
import 'package:stackwallet/services/exchange/trocador/response_objects/trocador_quote.dart';
|
||||
|
||||
class TrocadorTrade {
|
||||
final String tradeId;
|
||||
final DateTime date;
|
||||
final String tickerFrom;
|
||||
final String tickerTo;
|
||||
final String coinFrom;
|
||||
final String coinTo;
|
||||
final String networkFrom;
|
||||
final String networkTo;
|
||||
final Decimal amountFrom;
|
||||
final Decimal amountTo;
|
||||
final String provider;
|
||||
final bool fixed;
|
||||
final String status;
|
||||
final String addressProvider;
|
||||
final String addressProviderMemo;
|
||||
final String addressUser;
|
||||
final String addressUserMemo;
|
||||
final String refundAddress;
|
||||
final String refundAddressMemo;
|
||||
final String password;
|
||||
final String idProvider;
|
||||
final List<TrocadorQuote> quotes;
|
||||
final bool payment;
|
||||
|
||||
TrocadorTrade({
|
||||
required this.tradeId,
|
||||
required this.date,
|
||||
required this.tickerFrom,
|
||||
required this.tickerTo,
|
||||
required this.coinFrom,
|
||||
required this.coinTo,
|
||||
required this.networkFrom,
|
||||
required this.networkTo,
|
||||
required this.amountFrom,
|
||||
required this.amountTo,
|
||||
required this.provider,
|
||||
required this.fixed,
|
||||
required this.status,
|
||||
required this.addressProvider,
|
||||
required this.addressProviderMemo,
|
||||
required this.addressUser,
|
||||
required this.addressUserMemo,
|
||||
required this.refundAddress,
|
||||
required this.refundAddressMemo,
|
||||
required this.password,
|
||||
required this.idProvider,
|
||||
required this.quotes,
|
||||
required this.payment,
|
||||
});
|
||||
|
||||
factory TrocadorTrade.fromMap(Map<String, dynamic> map) {
|
||||
final list =
|
||||
List<Map<String, dynamic>>.from(map['quotes']['quotes'] as List);
|
||||
final quotes = list.map((quote) => TrocadorQuote.fromMap(quote)).toList();
|
||||
|
||||
return TrocadorTrade(
|
||||
tradeId: map['trade_id'] as String,
|
||||
date: DateTime.parse(map['date'] as String),
|
||||
tickerFrom: map['ticker_from'] as String,
|
||||
tickerTo: map['ticker_to'] as String,
|
||||
coinFrom: map['coin_from'] as String,
|
||||
coinTo: map['coin_to'] as String,
|
||||
networkFrom: map['network_from'] as String,
|
||||
networkTo: map['network_to'] as String,
|
||||
amountFrom: Decimal.parse(map['amount_from'].toString()),
|
||||
amountTo: Decimal.parse(map['amount_to'].toString()),
|
||||
provider: map['provider'] as String,
|
||||
fixed: map['fixed'] as bool,
|
||||
status: map['status'] as String,
|
||||
addressProvider: map['address_provider'] as String,
|
||||
addressProviderMemo: map['address_provider_memo'] as String,
|
||||
addressUser: map['address_user'] as String,
|
||||
addressUserMemo: map['address_user_memo'] as String,
|
||||
refundAddress: map['refund_address'] as String,
|
||||
refundAddressMemo: map['refund_address_memo'] as String,
|
||||
password: map['password'] as String,
|
||||
idProvider: map['id_provider'] as String,
|
||||
quotes: quotes,
|
||||
payment: map['payment'] as bool,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
final quotesString = quotes.map((quote) => quote.toString()).join(', ');
|
||||
return 'TrocadorTrade( '
|
||||
'tradeId: $tradeId, '
|
||||
'date: $date, '
|
||||
'tickerFrom: $tickerFrom, '
|
||||
'tickerTo: $tickerTo, '
|
||||
'coinFrom: $coinFrom, '
|
||||
'coinTo: $coinTo, '
|
||||
'networkFrom: $networkFrom, '
|
||||
'networkTo: $networkTo, '
|
||||
'amountFrom: $amountFrom, '
|
||||
'amountTo: $amountTo, '
|
||||
'provider: $provider, '
|
||||
'fixed: $fixed, '
|
||||
'status: $status, '
|
||||
'addressProvider: $addressProvider, '
|
||||
'addressProviderMemo: $addressProviderMemo, '
|
||||
'addressUser: $addressUser, '
|
||||
'addressUserMemo: $addressUserMemo, '
|
||||
'refundAddress: $refundAddress, '
|
||||
'refundAddressMemo: $refundAddressMemo, '
|
||||
'password: $password, '
|
||||
'idProvider: $idProvider, '
|
||||
'quotes: [ $quotesString ], '
|
||||
'payment: $payment '
|
||||
')';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,106 @@
|
|||
import 'package:decimal/decimal.dart';
|
||||
|
||||
class TrocadorTradeNew {
|
||||
final String tradeId;
|
||||
final DateTime date;
|
||||
final String tickerFrom;
|
||||
final String tickerTo;
|
||||
final String coinFrom;
|
||||
final String coinTo;
|
||||
final String networkFrom;
|
||||
final String networkTo;
|
||||
final Decimal amountFrom;
|
||||
final Decimal amountTo;
|
||||
final String provider;
|
||||
final bool fixed;
|
||||
final String status;
|
||||
final String? addressProvider;
|
||||
final String? addressProviderMemo;
|
||||
final String addressUser;
|
||||
final String addressUserMemo;
|
||||
final String refundAddress;
|
||||
final String refundAddressMemo;
|
||||
final String password;
|
||||
final String idProvider;
|
||||
final bool payment;
|
||||
|
||||
TrocadorTradeNew({
|
||||
required this.tradeId,
|
||||
required this.date,
|
||||
required this.tickerFrom,
|
||||
required this.tickerTo,
|
||||
required this.coinFrom,
|
||||
required this.coinTo,
|
||||
required this.networkFrom,
|
||||
required this.networkTo,
|
||||
required this.amountFrom,
|
||||
required this.amountTo,
|
||||
required this.provider,
|
||||
required this.fixed,
|
||||
required this.status,
|
||||
required this.addressProvider,
|
||||
required this.addressProviderMemo,
|
||||
required this.addressUser,
|
||||
required this.addressUserMemo,
|
||||
required this.refundAddress,
|
||||
required this.refundAddressMemo,
|
||||
required this.password,
|
||||
required this.idProvider,
|
||||
required this.payment,
|
||||
});
|
||||
|
||||
factory TrocadorTradeNew.fromMap(Map<String, dynamic> map) {
|
||||
return TrocadorTradeNew(
|
||||
tradeId: map['trade_id'] as String,
|
||||
date: DateTime.parse(map['date'] as String),
|
||||
tickerFrom: map['ticker_from'] as String,
|
||||
tickerTo: map['ticker_to'] as String,
|
||||
coinFrom: map['coin_from'] as String,
|
||||
coinTo: map['coin_to'] as String,
|
||||
networkFrom: map['network_from'] as String,
|
||||
networkTo: map['network_to'] as String,
|
||||
amountFrom: Decimal.parse(map['amount_from'].toString()),
|
||||
amountTo: Decimal.parse(map['amount_to'].toString()),
|
||||
provider: map['provider'] as String,
|
||||
fixed: map['fixed'] as bool,
|
||||
status: map['status'] as String,
|
||||
addressProvider: map['address_provider'] as String,
|
||||
addressProviderMemo: map['address_provider_memo'] as String,
|
||||
addressUser: map['address_user'] as String,
|
||||
addressUserMemo: map['address_user_memo'] as String,
|
||||
refundAddress: map['refund_address'] as String,
|
||||
refundAddressMemo: map['refund_address_memo'] as String,
|
||||
password: map['password'] as String,
|
||||
idProvider: map['id_provider'] as String,
|
||||
payment: map['payment'] as bool,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'TrocadorTradeNew( '
|
||||
'tradeId: $tradeId, '
|
||||
'date: $date, '
|
||||
'tickerFrom: $tickerFrom, '
|
||||
'tickerTo: $tickerTo, '
|
||||
'coinFrom: $coinFrom, '
|
||||
'coinTo: $coinTo, '
|
||||
'networkFrom: $networkFrom, '
|
||||
'networkTo: $networkTo, '
|
||||
'amountFrom: $amountFrom, '
|
||||
'amountTo: $amountTo, '
|
||||
'provider: $provider, '
|
||||
'fixed: $fixed, '
|
||||
'status: $status, '
|
||||
'addressProvider: $addressProvider, '
|
||||
'addressProviderMemo: $addressProviderMemo, '
|
||||
'addressUser: $addressUser, '
|
||||
'addressUserMemo: $addressUserMemo, '
|
||||
'refundAddress: $refundAddress, '
|
||||
'refundAddressMemo: $refundAddressMemo, '
|
||||
'password: $password, '
|
||||
'idProvider: $idProvider, '
|
||||
'payment: $payment '
|
||||
')';
|
||||
}
|
||||
}
|
306
lib/services/exchange/trocador/trocador_api.dart
Normal file
306
lib/services/exchange/trocador/trocador_api.dart
Normal file
|
@ -0,0 +1,306 @@
|
|||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter_native_splash/cli_commands.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:stackwallet/exceptions/exchange/exchange_exception.dart';
|
||||
import 'package:stackwallet/services/exchange/exchange_response.dart';
|
||||
import 'package:stackwallet/services/exchange/trocador/response_objects/trocador_coin.dart';
|
||||
import 'package:stackwallet/services/exchange/trocador/response_objects/trocador_rate.dart';
|
||||
import 'package:stackwallet/services/exchange/trocador/response_objects/trocador_trade.dart';
|
||||
import 'package:stackwallet/services/exchange/trocador/response_objects/trocador_trade_new.dart';
|
||||
import 'package:stackwallet/utilities/logger.dart';
|
||||
|
||||
const kTrocadorApiKey = "8rFqf7QLxX1mUBiNPEMaLUpV2biz6n";
|
||||
const kTrocadorRefCode = "9eHm9BkQfS";
|
||||
|
||||
abstract class TrocadorAPI {
|
||||
static const String authority = "trocador.app";
|
||||
static const String onionAuthority =
|
||||
"trocadorfyhlu27aefre5u7zri66gudtzdyelymftvr4yjwcxhfaqsid.onion";
|
||||
|
||||
static const String markup = "1";
|
||||
static const String minKYCRating = "C";
|
||||
|
||||
static Uri _buildUri({
|
||||
required String method,
|
||||
required bool isOnion,
|
||||
Map<String, String>? params,
|
||||
}) {
|
||||
return isOnion
|
||||
? Uri.http(onionAuthority, "api/$method", params)
|
||||
: Uri.https(authority, "api/$method", params);
|
||||
}
|
||||
|
||||
static Future<dynamic> _makeGetRequest(Uri uri) async {
|
||||
int code = -1;
|
||||
try {
|
||||
print("URI: $uri");
|
||||
final response = await http.get(
|
||||
uri,
|
||||
headers: {'Content-Type': 'application/json'},
|
||||
);
|
||||
|
||||
code = response.statusCode;
|
||||
|
||||
print("CODE: $code");
|
||||
print("BODY: ${response.body}");
|
||||
|
||||
final json = jsonDecode(response.body);
|
||||
|
||||
return json;
|
||||
} catch (e, s) {
|
||||
Logging.instance.log(
|
||||
"_makeRequest($uri) HTTP:$code threw: $e\n$s",
|
||||
level: LogLevel.Error,
|
||||
);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
/// fetch all supported coins
|
||||
static Future<ExchangeResponse<List<TrocadorCoin>>> getCoins({
|
||||
required bool isOnion,
|
||||
}) async {
|
||||
final uri = _buildUri(
|
||||
isOnion: isOnion,
|
||||
method: "coins",
|
||||
params: {
|
||||
"api_key": kTrocadorApiKey,
|
||||
"ref": kTrocadorRefCode,
|
||||
},
|
||||
);
|
||||
|
||||
try {
|
||||
final json = await _makeGetRequest(uri);
|
||||
|
||||
if (json is List) {
|
||||
final list = List<Map<String, dynamic>>.from(json);
|
||||
final List<TrocadorCoin> coins = list
|
||||
.map(
|
||||
(e) => TrocadorCoin.fromMap(e),
|
||||
)
|
||||
.toList();
|
||||
|
||||
return ExchangeResponse(value: coins);
|
||||
} else {
|
||||
throw Exception("unexpected json: $json");
|
||||
}
|
||||
} catch (e, s) {
|
||||
Logging.instance.log("getCoins exception: $e\n$s", level: LogLevel.Error);
|
||||
return ExchangeResponse(
|
||||
exception: ExchangeException(
|
||||
e.toString(),
|
||||
ExchangeExceptionType.generic,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// get trade info
|
||||
static Future<ExchangeResponse<TrocadorTrade>> getTrade({
|
||||
required bool isOnion,
|
||||
required String tradeId,
|
||||
}) async {
|
||||
final uri = _buildUri(
|
||||
isOnion: isOnion,
|
||||
method: "trade",
|
||||
params: {
|
||||
"api_key": kTrocadorApiKey,
|
||||
"ref": kTrocadorRefCode,
|
||||
"id": tradeId,
|
||||
},
|
||||
);
|
||||
|
||||
try {
|
||||
final json = await _makeGetRequest(uri);
|
||||
final map = Map<String, dynamic>.from(json as Map);
|
||||
|
||||
return ExchangeResponse(value: TrocadorTrade.fromMap(map));
|
||||
} catch (e, s) {
|
||||
Logging.instance.log("getTrade exception: $e\n$s", level: LogLevel.Error);
|
||||
return ExchangeResponse(
|
||||
exception: ExchangeException(
|
||||
e.toString(),
|
||||
ExchangeExceptionType.generic,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// get standard/floating rate
|
||||
static Future<ExchangeResponse<dynamic>> getNewStandardRate({
|
||||
required bool isOnion,
|
||||
required String fromTicker,
|
||||
required String fromNetwork,
|
||||
required String toTicker,
|
||||
required String toNetwork,
|
||||
required String fromAmount,
|
||||
}) async {
|
||||
final params = {
|
||||
"api_key": kTrocadorApiKey,
|
||||
"ref": kTrocadorRefCode,
|
||||
"ticker_from": fromTicker,
|
||||
"network_from": fromNetwork,
|
||||
"ticker_to": toTicker,
|
||||
"network_to": toNetwork,
|
||||
"amount_from": fromAmount,
|
||||
"min_kycrating": minKYCRating,
|
||||
"markup": markup,
|
||||
};
|
||||
|
||||
return await _getNewRate(isOnion: isOnion, params: params);
|
||||
}
|
||||
|
||||
/// get fixed rate/payment rate
|
||||
static Future<ExchangeResponse<dynamic>> getNewPaymentRate({
|
||||
required bool isOnion,
|
||||
required String fromTicker,
|
||||
required String fromNetwork,
|
||||
required String toTicker,
|
||||
required String toNetwork,
|
||||
required String toAmount,
|
||||
}) async {
|
||||
final params = {
|
||||
"api_key": kTrocadorApiKey,
|
||||
"ref": kTrocadorRefCode,
|
||||
"ticker_from": fromTicker,
|
||||
"network_from": fromNetwork,
|
||||
"ticker_to": toTicker,
|
||||
"network_to": toNetwork,
|
||||
"amount_to": toAmount,
|
||||
"min_kycrating": minKYCRating,
|
||||
"markup": markup,
|
||||
};
|
||||
|
||||
return await _getNewRate(isOnion: isOnion, params: params);
|
||||
}
|
||||
|
||||
static Future<ExchangeResponse<TrocadorRate>> _getNewRate({
|
||||
required bool isOnion,
|
||||
required Map<String, String> params,
|
||||
}) async {
|
||||
final uri = _buildUri(
|
||||
isOnion: isOnion,
|
||||
method: "new_rate",
|
||||
params: params,
|
||||
);
|
||||
|
||||
try {
|
||||
final json = await _makeGetRequest(uri);
|
||||
final map = Map<String, dynamic>.from(json as Map);
|
||||
|
||||
return ExchangeResponse(value: TrocadorRate.fromMap(map));
|
||||
} catch (e, s) {
|
||||
Logging.instance
|
||||
.log("getNewRate exception: $e\n$s", level: LogLevel.Error);
|
||||
return ExchangeResponse(
|
||||
exception: ExchangeException(
|
||||
e.toString(),
|
||||
ExchangeExceptionType.generic,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// create new floating rate/standard trade
|
||||
static Future<ExchangeResponse<TrocadorTradeNew>> createNewStandardRateTrade({
|
||||
required bool isOnion,
|
||||
required String? rateId,
|
||||
required String fromTicker,
|
||||
required String fromNetwork,
|
||||
required String toTicker,
|
||||
required String toNetwork,
|
||||
required String fromAmount,
|
||||
required String receivingAddress,
|
||||
required String? receivingMemo,
|
||||
required String refundAddress,
|
||||
required String? refundMemo,
|
||||
required String exchangeProvider,
|
||||
required bool isFixedRate,
|
||||
}) async {
|
||||
final Map<String, String> params = {
|
||||
"api_key": kTrocadorApiKey,
|
||||
"ref": kTrocadorRefCode,
|
||||
"id": rateId ?? "",
|
||||
"ticker_from": fromTicker,
|
||||
"network_from": fromNetwork,
|
||||
"ticker_to": toTicker,
|
||||
"network_to": toNetwork,
|
||||
"amount_from": fromAmount,
|
||||
"address": receivingAddress,
|
||||
"address_memo": receivingMemo ?? "0",
|
||||
"refund": refundAddress,
|
||||
"refund_memo": refundMemo ?? "0",
|
||||
"provider": exchangeProvider,
|
||||
"fixed": isFixedRate.toString().capitalize(),
|
||||
"payment": "False",
|
||||
"min_kycrating": minKYCRating,
|
||||
"markup": markup,
|
||||
};
|
||||
|
||||
return await _getNewTrade(isOnion: isOnion, params: params);
|
||||
}
|
||||
|
||||
static Future<ExchangeResponse<TrocadorTradeNew>> createNewPaymentRateTrade({
|
||||
required bool isOnion,
|
||||
required String fromTicker,
|
||||
required String fromNetwork,
|
||||
required String toTicker,
|
||||
required String toNetwork,
|
||||
required String toAmount,
|
||||
required String receivingAddress,
|
||||
required String? receivingMemo,
|
||||
required String refundAddress,
|
||||
required String? refundMemo,
|
||||
required String exchangeProvider,
|
||||
required bool isFixedRate,
|
||||
}) async {
|
||||
final params = {
|
||||
"api_key": kTrocadorApiKey,
|
||||
"ref": kTrocadorRefCode,
|
||||
"ticker_from": fromTicker,
|
||||
"network_from": fromNetwork,
|
||||
"ticker_to": toTicker,
|
||||
"network_to": toNetwork,
|
||||
"amount_to": toAmount,
|
||||
"address": receivingAddress,
|
||||
"address_memo": receivingMemo ?? "0",
|
||||
"refund": refundAddress,
|
||||
"refund_memo": refundMemo ?? "0",
|
||||
"provider": exchangeProvider,
|
||||
"fixed": isFixedRate.toString().capitalize(),
|
||||
"payment": "True",
|
||||
"min_kycrating": minKYCRating,
|
||||
"markup": markup,
|
||||
};
|
||||
|
||||
return await _getNewTrade(isOnion: isOnion, params: params);
|
||||
}
|
||||
|
||||
static Future<ExchangeResponse<TrocadorTradeNew>> _getNewTrade({
|
||||
required bool isOnion,
|
||||
required Map<String, String> params,
|
||||
}) async {
|
||||
final uri = _buildUri(
|
||||
isOnion: isOnion,
|
||||
method: "new_trade",
|
||||
params: params,
|
||||
);
|
||||
|
||||
try {
|
||||
final json = await _makeGetRequest(uri);
|
||||
final map = Map<String, dynamic>.from(json as Map);
|
||||
|
||||
return ExchangeResponse(value: TrocadorTradeNew.fromMap(map));
|
||||
} catch (e, s) {
|
||||
Logging.instance
|
||||
.log("_getNewTrade exception: $e\n$s", level: LogLevel.Error);
|
||||
return ExchangeResponse(
|
||||
exception: ExchangeException(
|
||||
e.toString(),
|
||||
ExchangeExceptionType.generic,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
0
lib/services/exchange/trocador/trocador_exchange.dart
Normal file
0
lib/services/exchange/trocador/trocador_exchange.dart
Normal file
Loading…
Reference in a new issue