-
Notifications
You must be signed in to change notification settings - Fork 221
/
Copy pathnft_withdraw_repo.dart
90 lines (83 loc) · 2.95 KB
/
nft_withdraw_repo.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import 'package:easy_localization/easy_localization.dart';
import 'package:web_dex/generated/codegen_loader.g.dart';
import 'package:web_dex/mm2/mm2_api/mm2_api.dart';
import 'package:web_dex/mm2/mm2_api/rpc/base.dart';
import 'package:web_dex/mm2/mm2_api/rpc/errors.dart';
import 'package:web_dex/mm2/mm2_api/rpc/nft/withdraw/withdraw_nft_request.dart';
import 'package:web_dex/mm2/mm2_api/rpc/nft/withdraw/withdraw_nft_response.dart';
import 'package:web_dex/mm2/mm2_api/rpc/send_raw_transaction/send_raw_transaction_request.dart';
import 'package:web_dex/mm2/mm2_api/rpc/send_raw_transaction/send_raw_transaction_response.dart';
import 'package:web_dex/mm2/mm2_api/rpc/validateaddress/validateaddress_response.dart';
import 'package:web_dex/mm2/mm2_api/rpc/withdraw/withdraw_errors.dart';
import 'package:web_dex/model/coin.dart';
import 'package:web_dex/model/nft.dart';
import 'package:web_dex/model/text_error.dart';
import 'package:web_dex/shared/utils/utils.dart';
class NftWithdrawRepo {
const NftWithdrawRepo({required Mm2Api api}) : _api = api;
final Mm2Api _api;
Future<WithdrawNftResponse> withdraw({
required NftToken nft,
required String address,
int? amount,
}) async {
final request = WithdrawNftRequest(
type: nft.contractType,
chain: nft.chain,
toAddress: address,
tokenAddress: nft.tokenAddress,
tokenId: nft.tokenId,
amount: amount,
);
final Map<String, dynamic> json = await _api.nft.withdraw(request);
if (json['error'] != null) {
log(
json['error'] as String? ?? 'unknown error',
path: 'nft_main_repo => getNfts',
isError: true,
).ignore();
final BaseError error =
withdrawErrorFactory.getError(json, nft.parentCoin.abbr);
throw ApiError(message: error.message);
}
if (json['result'] == null) {
throw ApiError(message: LocaleKeys.somethingWrong.tr());
}
try {
final WithdrawNftResponse response = WithdrawNftResponse.fromJson(json);
return response;
} catch (e) {
throw ParsingApiJsonError(message: e.toString());
}
}
Future<SendRawTransactionResponse> confirmSend(
String coin,
String txHex,
) async {
try {
final request = SendRawTransactionRequest(coin: coin, txHex: txHex);
final response = await _api.sendRawTransaction(request);
return response;
} catch (e) {
return SendRawTransactionResponse(
txHash: null,
error: TextError(error: LocaleKeys.somethingWrong.tr()),
);
}
}
Future<ValidateAddressResponse> validateAddress(
Coin coin,
String address,
) async {
try {
final Map<String, dynamic>? responseRaw =
await _api.validateAddress(coin.abbr, address);
if (responseRaw == null) {
throw ApiError(message: LocaleKeys.somethingWrong.tr());
}
return ValidateAddressResponse.fromJson(responseRaw);
} catch (e) {
throw ApiError(message: e.toString());
}
}
}