cake_wallet/cw_zano/lib/pending_zano_transaction.dart

69 lines
2.2 KiB
Dart
Raw Normal View History

import 'dart:convert';
2023-12-16 12:19:11 +00:00
import 'package:cw_zano/api/exceptions/transfer_exception.dart';
import 'package:cw_zano/api/model/destination.dart';
import 'package:cw_zano/api/model/transfer_params.dart';
import 'package:cw_zano/api/model/transfer_result.dart';
2023-10-02 14:17:35 +00:00
import 'package:cw_core/crypto_currency.dart';
import 'package:cw_core/amount_converter.dart';
import 'package:cw_core/pending_transaction.dart';
import 'package:cw_zano/zano_wallet.dart';
2023-10-02 14:17:35 +00:00
class PendingZanoTransaction with PendingTransaction {
PendingZanoTransaction({
required this.zanoWallet,
required this.destinations,
required this.fee,
required this.comment,
});
2023-10-02 14:17:35 +00:00
2023-12-16 12:19:11 +00:00
final ZanoWalletBase zanoWallet;
final List<Destination> destinations;
final int fee;
final String comment;
2023-10-02 14:17:35 +00:00
@override
String get id => transferResult?.txHash ?? '';
2023-10-02 14:17:35 +00:00
@override
String get hex => '';
@override
String get amountFormatted => AmountConverter.amountIntToString(CryptoCurrency.zano, destinations.first.amount);
2023-10-02 14:17:35 +00:00
@override
String get feeFormatted => AmountConverter.amountIntToString(CryptoCurrency.zano, fee);
TransferResult? transferResult;
2023-10-02 14:17:35 +00:00
@override
Future<void> commit() async {
2024-03-06 06:48:59 +00:00
final params = TransferParams(
destinations: destinations,
2024-03-06 06:48:59 +00:00
fee: fee,
mixin: zanoMixin,
paymentId: '',
comment: comment,
pushPayer: false,
hideReceiver: true,
2024-03-06 06:48:59 +00:00
);
final result = await zanoWallet.invokeMethod('transfer', params);
final map = jsonDecode(result);
final resultMap = map['result'] as Map<String, dynamic>?;
if (resultMap != null) {
final transferResultMap = resultMap['result'] as Map<String, dynamic>?;
if (transferResultMap != null) {
transferResult = TransferResult.fromJson(transferResultMap);
print('transfer success hash ${transferResult!.txHash}');
await zanoWallet.fetchTransactions();
2023-12-16 12:19:11 +00:00
} else {
final errorCode = resultMap['error']['code'];
final code = errorCode is int ? errorCode.toString() : errorCode as String? ?? '';
final message = resultMap['error']['message'] as String? ?? '';
print('transfer error $code $message');
throw TransferException(code, message);
2023-12-16 12:19:11 +00:00
}
}
2023-10-02 14:17:35 +00:00
}
}