mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2024-12-22 19:49:22 +00:00
added pending transfer, some cleanup of unused
This commit is contained in:
parent
8d3dd6f202
commit
3eaec03b6c
57 changed files with 314 additions and 16189 deletions
|
@ -1,85 +0,0 @@
|
|||
import 'dart:ffi';
|
||||
import 'package:ffi/ffi.dart';
|
||||
import 'package:cw_zano/api/signatures.dart';
|
||||
import 'package:cw_zano/api/types.dart';
|
||||
import 'package:cw_zano/api/zano_api.dart';
|
||||
import 'package:cw_zano/api/structs/account_row.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:cw_zano/api/wallet.dart';
|
||||
|
||||
// final accountSizeNative = zanoApi
|
||||
// .lookup<NativeFunction<account_size>>('account_size')
|
||||
// .asFunction<SubaddressSize>();
|
||||
|
||||
// final accountRefreshNative = zanoApi
|
||||
// .lookup<NativeFunction<account_refresh>>('account_refresh')
|
||||
// .asFunction<AccountRefresh>();
|
||||
|
||||
// final accountGetAllNative = zanoApi
|
||||
// .lookup<NativeFunction<account_get_all>>('account_get_all')
|
||||
// .asFunction<AccountGetAll>();
|
||||
|
||||
// final accountAddNewNative = zanoApi
|
||||
// .lookup<NativeFunction<account_add_new>>('account_add_row')
|
||||
// .asFunction<AccountAddNew>();
|
||||
|
||||
// final accountSetLabelNative = zanoApi
|
||||
// .lookup<NativeFunction<account_set_label>>('account_set_label_row')
|
||||
// .asFunction<AccountSetLabel>();
|
||||
|
||||
bool isUpdating = false;
|
||||
|
||||
/**void refreshAccounts() {
|
||||
try {
|
||||
isUpdating = true;
|
||||
accountRefreshNative();
|
||||
isUpdating = false;
|
||||
} catch (e) {
|
||||
isUpdating = false;
|
||||
rethrow;
|
||||
}
|
||||
}*/
|
||||
|
||||
/**List<AccountRow> getAllAccount() {
|
||||
final size = accountSizeNative();
|
||||
final accountAddressesPointer = accountGetAllNative();
|
||||
final accountAddresses = accountAddressesPointer.asTypedList(size);
|
||||
|
||||
return accountAddresses
|
||||
.map((addr) => Pointer<AccountRow>.fromAddress(addr).ref)
|
||||
.toList();
|
||||
}*/
|
||||
|
||||
/**void addAccountSync({required String label}) {
|
||||
final labelPointer = label.toNativeUtf8();
|
||||
accountAddNewNative(labelPointer);
|
||||
calloc.free(labelPointer);
|
||||
}*/
|
||||
|
||||
/**void setLabelForAccountSync(
|
||||
{required int accountIndex, required String label}) {
|
||||
final labelPointer = label.toNativeUtf8();
|
||||
accountSetLabelNative(accountIndex, labelPointer);
|
||||
calloc.free(labelPointer);
|
||||
}*/
|
||||
|
||||
/**void _addAccount(String label) => addAccountSync(label: label);*/
|
||||
|
||||
/**void _setLabelForAccount(Map<String, dynamic> args) {
|
||||
final label = args['label'] as String;
|
||||
final accountIndex = args['accountIndex'] as int;
|
||||
|
||||
setLabelForAccountSync(label: label, accountIndex: accountIndex);
|
||||
}*/
|
||||
|
||||
/**Future<void> addAccount({required String label}) async {
|
||||
await compute(_addAccount, label);
|
||||
await store();
|
||||
}*/
|
||||
|
||||
/**Future<void> setLabelForAccount(
|
||||
{required int accountIndex, required String label}) async {
|
||||
await compute(
|
||||
_setLabelForAccount, {'accountIndex': accountIndex, 'label': label});
|
||||
await store();
|
||||
}*/
|
|
@ -1,23 +0,0 @@
|
|||
import 'dart:ffi';
|
||||
import 'package:cw_zano/api/convert_utf8_to_string.dart';
|
||||
import 'package:cw_zano/api/signatures.dart';
|
||||
import 'package:cw_zano/api/types.dart';
|
||||
import 'package:cw_zano/api/zano_api.dart';
|
||||
import 'package:ffi/ffi.dart';
|
||||
|
||||
final assetTypesSizeNative = zanoApi
|
||||
.lookup<NativeFunction<account_size>>('asset_types_size')
|
||||
.asFunction<SubaddressSize>();
|
||||
|
||||
final getAssetTypesNative = zanoApi
|
||||
.lookup<NativeFunction<asset_types>>('asset_types')
|
||||
.asFunction<AssetTypes>();
|
||||
|
||||
List<String> getAssetTypes() {
|
||||
List<String> assetTypes = [];
|
||||
Pointer<Pointer<Utf8>> assetTypePointers = getAssetTypesNative();
|
||||
Pointer<Utf8> assetpointer = assetTypePointers.elementAt(0)[0];
|
||||
String asset = convertUTF8ToString(pointer: assetpointer);
|
||||
|
||||
return assetTypes;
|
||||
}
|
|
@ -1,55 +0,0 @@
|
|||
import 'dart:ffi';
|
||||
import 'package:cw_zano/api/signatures.dart';
|
||||
import 'package:cw_zano/api/types.dart';
|
||||
import 'package:cw_zano/api/zano_api.dart';
|
||||
import 'package:cw_zano/api/structs/zano_balance_row.dart';
|
||||
import 'package:cw_zano/api/structs/zano_rate.dart';
|
||||
import 'asset_types.dart';
|
||||
|
||||
List<ZanoBalanceRow> getZanoFullBalance({int accountIndex = 0}) {
|
||||
final size = assetTypesSizeNative();
|
||||
final balanceAddressesPointer = getZanoFullBalanceNative(accountIndex);
|
||||
final balanceAddresses = balanceAddressesPointer.asTypedList(size);
|
||||
|
||||
return balanceAddresses
|
||||
.map((addr) => Pointer<ZanoBalanceRow>.fromAddress(addr).ref)
|
||||
.toList();
|
||||
}
|
||||
|
||||
List<ZanoBalanceRow> getZanoUnlockedBalance({int accountIndex = 0}) {
|
||||
final size = assetTypesSizeNative();
|
||||
final balanceAddressesPointer = getZanoUnlockedBalanceNative(accountIndex);
|
||||
final balanceAddresses = balanceAddressesPointer.asTypedList(size);
|
||||
|
||||
return balanceAddresses
|
||||
.map((addr) => Pointer<ZanoBalanceRow>.fromAddress(addr).ref)
|
||||
.toList();
|
||||
}
|
||||
|
||||
List<ZanoRate> getRate() {
|
||||
updateRateNative();
|
||||
final size = sizeOfRateNative();
|
||||
final ratePointer = getRateNative();
|
||||
final rate = ratePointer.asTypedList(size);
|
||||
|
||||
return rate.map((addr) => Pointer<ZanoRate>.fromAddress(addr).ref).toList();
|
||||
}
|
||||
|
||||
final getZanoFullBalanceNative = zanoApi
|
||||
.lookup<NativeFunction<get_full_balance>>('get_full_balance')
|
||||
.asFunction<GetZanoFullBalance>();
|
||||
|
||||
final getZanoUnlockedBalanceNative = zanoApi
|
||||
.lookup<NativeFunction<get_unlocked_balance>>('get_unlocked_balance')
|
||||
.asFunction<GetZanoUnlockedBalance>();
|
||||
|
||||
final getRateNative =
|
||||
zanoApi.lookup<NativeFunction<get_rate>>('get_rate').asFunction<GetRate>();
|
||||
|
||||
final sizeOfRateNative = zanoApi
|
||||
.lookup<NativeFunction<size_of_rate>>('size_of_rate')
|
||||
.asFunction<SizeOfRate>();
|
||||
|
||||
final updateRateNative = zanoApi
|
||||
.lookup<NativeFunction<update_rate>>('update_rate')
|
||||
.asFunction<UpdateRate>();
|
|
@ -2,18 +2,24 @@ import 'dart:ffi';
|
|||
import 'dart:convert';
|
||||
|
||||
import 'package:cw_zano/api/convert_utf8_to_string.dart';
|
||||
import 'package:cw_zano/api/model.dart';
|
||||
import 'package:cw_zano/api/model/get_recent_txs_and_info_params.dart';
|
||||
import 'package:cw_zano/api/model/transfer_params.dart';
|
||||
import 'package:cw_zano/api/zano_api.dart';
|
||||
import 'package:ffi/ffi.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
||||
final _asyncCallNative = zanoApi
|
||||
.lookup<NativeFunction<_async_call>>('async_call')
|
||||
.asFunction<_AsyncCall>();
|
||||
typedef _async_call = Pointer<Utf8> Function(
|
||||
Pointer<Utf8>, Int64, Pointer<Utf8>);
|
||||
// create_wallet
|
||||
final _createWalletNative =
|
||||
zanoApi.lookup<NativeFunction<_create_wallet>>('create_wallet').asFunction<_CreateWallet>();
|
||||
typedef _create_wallet = Pointer<Utf8> Function(
|
||||
Pointer<Utf8>, Pointer<Utf8>, Pointer<Utf8>, Int32, Pointer<Utf8>);
|
||||
typedef _CreateWallet = Pointer<Utf8> Function(
|
||||
Pointer<Utf8>, Pointer<Utf8>, Pointer<Utf8>, int, Pointer<Utf8>);
|
||||
|
||||
// async_call
|
||||
final _asyncCallNative =
|
||||
zanoApi.lookup<NativeFunction<_async_call>>('async_call').asFunction<_AsyncCall>();
|
||||
typedef _async_call = Pointer<Utf8> Function(Pointer<Utf8>, Int64, Pointer<Utf8>);
|
||||
typedef _AsyncCall = Pointer<Utf8> Function(
|
||||
Pointer<Utf8> methodName, int hWallet, Pointer<Utf8> params);
|
||||
|
||||
|
@ -39,18 +45,15 @@ typedef _get_connectivity_status = Pointer<Utf8> Function();
|
|||
typedef _GetConnectivityStatus = Pointer<Utf8> Function();
|
||||
|
||||
// get_version
|
||||
final _getVersionNative = zanoApi
|
||||
.lookup<NativeFunction<_get_version>>('get_version')
|
||||
.asFunction<_GetVersion>();
|
||||
final _getVersionNative =
|
||||
zanoApi.lookup<NativeFunction<_get_version>>('get_version').asFunction<_GetVersion>();
|
||||
typedef _get_version = Pointer<Utf8> Function();
|
||||
typedef _GetVersion = Pointer<Utf8> Function();
|
||||
|
||||
// load_wallet
|
||||
final _loadWalletNative = zanoApi
|
||||
.lookup<NativeFunction<_load_wallet>>('load_wallet')
|
||||
.asFunction<_LoadWallet>();
|
||||
typedef _load_wallet = Pointer<Utf8> Function(
|
||||
Pointer<Utf8>, Pointer<Utf8>, Int8);
|
||||
final _loadWalletNative =
|
||||
zanoApi.lookup<NativeFunction<_load_wallet>>('load_wallet').asFunction<_LoadWallet>();
|
||||
typedef _load_wallet = Pointer<Utf8> Function(Pointer<Utf8>, Pointer<Utf8>, Int8);
|
||||
typedef _LoadWallet = Pointer<Utf8> Function(Pointer<Utf8>, Pointer<Utf8>, int);
|
||||
|
||||
// try_pull_result
|
||||
|
@ -61,9 +64,8 @@ typedef _try_pull_result = Pointer<Utf8> Function(Int64);
|
|||
typedef _TryPullResult = Pointer<Utf8> Function(int hWallet);
|
||||
|
||||
// close_wallet
|
||||
final _closeWalletNative = zanoApi
|
||||
.lookup<NativeFunction<_close_wallet>>('close_wallet')
|
||||
.asFunction<_closeWalletStatus>();
|
||||
final _closeWalletNative =
|
||||
zanoApi.lookup<NativeFunction<_close_wallet>>('close_wallet').asFunction<_closeWalletStatus>();
|
||||
typedef _close_wallet = Void Function(Int64);
|
||||
typedef _closeWalletStatus = void Function(int hWallet);
|
||||
|
||||
|
@ -75,25 +77,20 @@ typedef _get_current_tx_fee = Int64 Function(Int64);
|
|||
typedef _getCurrentTxFee = int Function(int priority);
|
||||
|
||||
final _restoreWalletFromSeedNative = zanoApi
|
||||
.lookup<NativeFunction<_restore_wallet_from_seed>>(
|
||||
'restore_wallet_from_seed')
|
||||
.lookup<NativeFunction<_restore_wallet_from_seed>>('restore_wallet_from_seed')
|
||||
.asFunction<_RestoreWalletFromSeed>();
|
||||
typedef _restore_wallet_from_seed = Pointer<Utf8> Function(
|
||||
Pointer<Utf8>, Pointer<Utf8>, Pointer<Utf8>, Int32, Int64, Pointer<Utf8>);
|
||||
typedef _RestoreWalletFromSeed = Pointer<Utf8> Function(
|
||||
Pointer<Utf8>, Pointer<Utf8>, Pointer<Utf8>, int, int, Pointer<Utf8>);
|
||||
|
||||
String doAsyncCall(
|
||||
{required String methodName,
|
||||
required int hWallet,
|
||||
required String params}) {
|
||||
String doAsyncCall({required String methodName, required int hWallet, required String params}) {
|
||||
final methodNamePointer = methodName.toNativeUtf8();
|
||||
final paramsPointer = params.toNativeUtf8();
|
||||
|
||||
debugPrint(
|
||||
'async_call method_name $methodName hWallet $hWallet params $params');
|
||||
final result = convertUTF8ToString(
|
||||
pointer: _asyncCallNative(methodNamePointer, hWallet, paramsPointer));
|
||||
debugPrint('async_call method_name $methodName hWallet $hWallet params $params');
|
||||
final result =
|
||||
convertUTF8ToString(pointer: _asyncCallNative(methodNamePointer, hWallet, paramsPointer));
|
||||
|
||||
calloc.free(methodNamePointer);
|
||||
calloc.free(paramsPointer);
|
||||
|
@ -101,8 +98,25 @@ String doAsyncCall(
|
|||
return result;
|
||||
}
|
||||
|
||||
Future<String> invokeMethod(
|
||||
int hWallet, String methodName, String params) async {
|
||||
String createWallet(
|
||||
{required String path, required String password, required String language, int nettype = 0}) {
|
||||
final pathPointer = path.toNativeUtf8();
|
||||
final passwordPointer = password.toNativeUtf8();
|
||||
final languagePointer = language.toNativeUtf8();
|
||||
final errorMessagePointer = ''.toNativeUtf8();
|
||||
debugPrint('create_wallet path $path password $password language $language');
|
||||
final result = convertUTF8ToString(
|
||||
pointer: _createWalletNative(
|
||||
pathPointer, passwordPointer, languagePointer, nettype, errorMessagePointer));
|
||||
debugPrint('create_wallet result $result');
|
||||
calloc.free(pathPointer);
|
||||
calloc.free(passwordPointer);
|
||||
calloc.free(languagePointer);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
Future<String> invokeMethod(int hWallet, String methodName, String params) async {
|
||||
debugPrint('invoke method $methodName params $params');
|
||||
final invokeResult = doAsyncCall(
|
||||
methodName: 'invoke',
|
||||
|
@ -134,6 +148,7 @@ Future<String> transfer(int hWallet, TransferParams params) async {
|
|||
debugPrint('invoke result $invokeResult');
|
||||
var map = json.decode(invokeResult);
|
||||
if (map['job_id'] != null) {
|
||||
// TODO: fixit
|
||||
await Future.delayed(Duration(seconds: 3));
|
||||
final result = tryPullResult(map['job_id'] as int);
|
||||
return result;
|
||||
|
@ -151,9 +166,7 @@ Future<String> getRecentTxsAndInfo(
|
|||
'get_recent_txs_and_info',
|
||||
json.encode(
|
||||
GetRecentTxsAndInfoParams(
|
||||
offset: offset,
|
||||
count: count,
|
||||
updateProvisionInfo: updateProvisionInfo),
|
||||
offset: offset, count: count, updateProvisionInfo: updateProvisionInfo),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
@ -202,8 +215,9 @@ String restoreWalletFromSeed(String path, String password, String seed) {
|
|||
final passwordPointer = password.toNativeUtf8();
|
||||
final seedPointer = seed.toNativeUtf8();
|
||||
final errorMessagePointer = ''.toNativeUtf8();
|
||||
final result = convertUTF8ToString(pointer: _restoreWalletFromSeedNative(pathPointer,
|
||||
passwordPointer, seedPointer, 0, 0, errorMessagePointer));
|
||||
final result = convertUTF8ToString(
|
||||
pointer: _restoreWalletFromSeedNative(
|
||||
pathPointer, passwordPointer, seedPointer, 0, 0, errorMessagePointer));
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
class ConnectionToNodeException implements Exception {
|
||||
ConnectionToNodeException({required this.message});
|
||||
|
||||
final String message;
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
class CreationTransactionException implements Exception {
|
||||
CreationTransactionException({required this.message});
|
||||
|
||||
final String message;
|
||||
|
||||
@override
|
||||
String toString() => message;
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
class SetupWalletException implements Exception {
|
||||
SetupWalletException({required this.message});
|
||||
|
||||
final String message;
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
class WalletCreationException implements Exception {
|
||||
WalletCreationException({required this.message});
|
||||
|
||||
final String message;
|
||||
|
||||
@override
|
||||
String toString() => message;
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
class WalletOpeningException implements Exception {
|
||||
WalletOpeningException({required this.message});
|
||||
|
||||
final String message;
|
||||
|
||||
@override
|
||||
String toString() => message;
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
class WalletRestoreFromSeedException implements Exception {
|
||||
WalletRestoreFromSeedException({required this.message});
|
||||
|
||||
final String message;
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
// class Destination {
|
||||
// final String amount;
|
||||
// final String address;
|
||||
// final String assetId;
|
||||
|
||||
// Destination({required this.amount, required this.address, required this.assetId});
|
||||
|
||||
// Map<String, dynamic> toJson() => {
|
||||
// "amount": amount,
|
||||
// "address": address,
|
||||
// "asset_id": assetId,
|
||||
// };
|
||||
// }
|
||||
|
||||
// class TransferParams {
|
||||
// final List<Destination> destinations;
|
||||
// final int fee;
|
||||
// final int mixin;
|
||||
// final String paymentId;
|
||||
// final String comment;
|
||||
// final bool pushPayer;
|
||||
// final bool hideReceiver;
|
||||
|
||||
// TransferParams({required this.destinations, required this.fee, required this.mixin, required this.paymentId, required this.comment, required this.pushPayer, required this.hideReceiver});
|
||||
|
||||
// Map<String, dynamic> toJson() => {
|
||||
// "destinations": destinations,
|
||||
// "fee": fee,
|
||||
// "mixin": mixin,
|
||||
// "payment_id": paymentId,
|
||||
// "comment": comment,
|
||||
// "push_payer": pushPayer,
|
||||
// "hide_receiver": hideReceiver,
|
||||
// };
|
||||
// }
|
||||
|
||||
// class GetRecentTxsAndInfoParams {
|
||||
// final int offset;
|
||||
// final int count;
|
||||
// final bool updateProvisionInfo;
|
||||
|
||||
// GetRecentTxsAndInfoParams({required this.offset, required this.count, required this.updateProvisionInfo});
|
||||
|
||||
// Map<String, dynamic> toJson() => {
|
||||
// "offset": offset,
|
||||
// "count": count,
|
||||
// "update_provision_info": updateProvisionInfo,
|
||||
// };
|
||||
// }
|
|
@ -1,5 +1,3 @@
|
|||
import 'dart:convert';
|
||||
|
||||
import 'package:cw_zano/api/model/asset_info.dart';
|
||||
|
||||
class Balance {
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
import 'dart:convert';
|
||||
|
||||
import 'package:cw_zano/api/model/recent_history.dart';
|
||||
import 'package:cw_zano/api/model/wi.dart';
|
||||
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
import 'dart:convert';
|
||||
|
||||
import 'package:cw_zano/api/model/receive.dart';
|
||||
|
||||
class EmployedEntries {
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
import 'dart:convert';
|
||||
|
||||
import 'package:cw_zano/api/model/employed_entries.dart';
|
||||
import 'package:cw_zano/api/model/subtransfer.dart';
|
||||
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
import 'dart:convert';
|
||||
|
||||
import 'package:cw_zano/api/model/history.dart';
|
||||
|
||||
class RecentHistory {
|
||||
|
|
13
cw_zano/lib/api/model/transfer_result.dart
Normal file
13
cw_zano/lib/api/model/transfer_result.dart
Normal file
|
@ -0,0 +1,13 @@
|
|||
class TransferResult {
|
||||
final String txHash;
|
||||
final int txSize;
|
||||
final String txUnsignedHex;
|
||||
|
||||
TransferResult({required this.txHash, required this.txSize, required this.txUnsignedHex});
|
||||
|
||||
factory TransferResult.fromJson(Map<String, dynamic> json) => TransferResult(
|
||||
txHash: json['tx_hash'] as String,
|
||||
txSize: json['tx_size'] as int,
|
||||
txUnsignedHex: json['tx_unsigned_hex'] as String,
|
||||
);
|
||||
}
|
|
@ -1,5 +1,3 @@
|
|||
import 'dart:convert';
|
||||
|
||||
import 'package:cw_zano/api/model/balance.dart';
|
||||
|
||||
class Wi {
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
import 'dart:ffi';
|
||||
import 'package:cw_zano/api/structs/pending_transaction.dart';
|
||||
import 'package:cw_zano/api/structs/ut8_box.dart';
|
||||
import 'package:ffi/ffi.dart';
|
||||
|
||||
typedef create_wallet = Pointer<Utf8> Function(
|
||||
Pointer<Utf8>, Pointer<Utf8>, Pointer<Utf8>, Int32, Pointer<Utf8>);
|
||||
// typedef create_wallet = Pointer<Utf8> Function(
|
||||
// Pointer<Utf8>, Pointer<Utf8>, Pointer<Utf8>, Int32, Pointer<Utf8>);
|
||||
|
||||
typedef restore_wallet_from_seed = Int8 Function(
|
||||
Pointer<Utf8>, Pointer<Utf8>, Pointer<Utf8>, Int32, Int64, Pointer<Utf8>);
|
||||
|
@ -22,7 +21,7 @@ typedef restore_wallet_from_keys = Int8 Function(
|
|||
|
||||
typedef is_wallet_exist = Int8 Function(Pointer<Utf8>);
|
||||
|
||||
typedef load_wallet = Int8 Function(Pointer<Utf8>, Pointer<Utf8>, Int8);
|
||||
//typedef load_wallet = Int8 Function(Pointer<Utf8>, Pointer<Utf8>, Int8);
|
||||
|
||||
typedef error_string = Pointer<Utf8> Function();
|
||||
|
||||
|
@ -68,60 +67,60 @@ typedef get_syncing_height = Int64 Function();
|
|||
|
||||
typedef is_needed_to_refresh = Int8 Function();
|
||||
|
||||
typedef is_new_transaction_exist = Int8 Function();
|
||||
// typedef is_new_transaction_exist = Int8 Function();
|
||||
|
||||
typedef subaddrress_size = Int32 Function();
|
||||
// typedef subaddrress_size = Int32 Function();
|
||||
|
||||
typedef subaddrress_refresh = Void Function(Int32);
|
||||
// typedef subaddrress_refresh = Void Function(Int32);
|
||||
|
||||
typedef subaddress_get_all = Pointer<Int64> Function();
|
||||
// typedef subaddress_get_all = Pointer<Int64> Function();
|
||||
|
||||
typedef subaddress_add_new = Void Function(
|
||||
Int32 accountIndex, Pointer<Utf8> label);
|
||||
// typedef subaddress_add_new = Void Function(
|
||||
// Int32 accountIndex, Pointer<Utf8> label);
|
||||
|
||||
typedef subaddress_set_label = Void Function(
|
||||
Int32 accountIndex, Int32 addressIndex, Pointer<Utf8> label);
|
||||
// typedef subaddress_set_label = Void Function(
|
||||
// Int32 accountIndex, Int32 addressIndex, Pointer<Utf8> label);
|
||||
|
||||
typedef account_size = Int32 Function();
|
||||
// typedef account_size = Int32 Function();
|
||||
|
||||
typedef account_refresh = Void Function();
|
||||
// typedef account_refresh = Void Function();
|
||||
|
||||
typedef account_get_all = Pointer<Int64> Function();
|
||||
// typedef account_get_all = Pointer<Int64> Function();
|
||||
|
||||
typedef account_add_new = Void Function(Pointer<Utf8> label);
|
||||
// typedef account_add_new = Void Function(Pointer<Utf8> label);
|
||||
|
||||
typedef account_set_label = Void Function(
|
||||
Int32 accountIndex, Pointer<Utf8> label);
|
||||
// typedef account_set_label = Void Function(
|
||||
// Int32 accountIndex, Pointer<Utf8> label);
|
||||
|
||||
typedef transactions_refresh = Void Function();
|
||||
//typedef transactions_refresh = Void Function();
|
||||
|
||||
typedef get_tx_key = Pointer<Utf8>? Function(Pointer<Utf8> txId);
|
||||
//typedef get_tx_key = Pointer<Utf8>? Function(Pointer<Utf8> txId);
|
||||
|
||||
typedef transactions_count = Int64 Function();
|
||||
//typedef transactions_count = Int64 Function();
|
||||
|
||||
typedef transactions_get_all = Pointer<Int64> Function();
|
||||
//typedef transactions_get_all = Pointer<Int64> Function();
|
||||
|
||||
typedef transaction_create = Int8 Function(
|
||||
Pointer<Utf8> address,
|
||||
Pointer<Utf8> assetType,
|
||||
Pointer<Utf8> paymentId,
|
||||
Pointer<Utf8> amount,
|
||||
Int8 priorityRaw,
|
||||
Pointer<Utf8Box> error,
|
||||
Pointer<PendingTransactionRaw> pendingTransaction);
|
||||
// typedef transaction_create = Int8 Function(
|
||||
// Pointer<Utf8> address,
|
||||
// Pointer<Utf8> assetType,
|
||||
// Pointer<Utf8> paymentId,
|
||||
// Pointer<Utf8> amount,
|
||||
// Int8 priorityRaw,
|
||||
// Pointer<Utf8Box> error,
|
||||
// Pointer<PendingTransactionRaw> pendingTransaction);
|
||||
|
||||
typedef transaction_create_mult_dest = Int8 Function(
|
||||
Pointer<Pointer<Utf8>> addresses,
|
||||
Pointer<Utf8> assetType,
|
||||
Pointer<Utf8> paymentId,
|
||||
Pointer<Pointer<Utf8>> amounts,
|
||||
Int32 size,
|
||||
Int8 priorityRaw,
|
||||
Pointer<Utf8Box> error,
|
||||
Pointer<PendingTransactionRaw> pendingTransaction);
|
||||
// typedef transaction_create_mult_dest = Int8 Function(
|
||||
// Pointer<Pointer<Utf8>> addresses,
|
||||
// Pointer<Utf8> assetType,
|
||||
// Pointer<Utf8> paymentId,
|
||||
// Pointer<Pointer<Utf8>> amounts,
|
||||
// Int32 size,
|
||||
// Int8 priorityRaw,
|
||||
// Pointer<Utf8Box> error,
|
||||
// Pointer<PendingTransactionRaw> pendingTransaction);
|
||||
|
||||
typedef transaction_commit = Int8 Function(
|
||||
Pointer<PendingTransactionRaw>, Pointer<Utf8Box>);
|
||||
// typedef transaction_commit = Int8 Function(
|
||||
// Pointer<PendingTransactionRaw>, Pointer<Utf8Box>);
|
||||
|
||||
typedef secret_view_key = Pointer<Utf8> Function();
|
||||
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
import 'dart:ffi';
|
||||
import 'package:ffi/ffi.dart';
|
||||
|
||||
class AccountRow extends Struct {
|
||||
@Int64()
|
||||
external int id;
|
||||
|
||||
external Pointer<Utf8> label;
|
||||
|
||||
String getLabel() => label.toDartString();
|
||||
int getId() => id;
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
import 'dart:ffi';
|
||||
import 'package:ffi/ffi.dart';
|
||||
|
||||
class PendingTransactionRaw extends Struct {
|
||||
@Int64()
|
||||
external int amount;
|
||||
|
||||
@Int64()
|
||||
external int fee;
|
||||
|
||||
external Pointer<Utf8> hash;
|
||||
|
||||
String getHash() => hash.toDartString();
|
||||
}
|
||||
|
||||
class PendingTransactionDescription {
|
||||
PendingTransactionDescription({
|
||||
required this.amount,
|
||||
required this.fee,
|
||||
required this.hash,
|
||||
required this.pointerAddress});
|
||||
|
||||
final int amount;
|
||||
final int fee;
|
||||
final String hash;
|
||||
final int pointerAddress;
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
import 'dart:ffi';
|
||||
import 'package:ffi/ffi.dart';
|
||||
|
||||
class SubaddressRow extends Struct {
|
||||
@Int64()
|
||||
external int id;
|
||||
|
||||
external Pointer<Utf8> address;
|
||||
|
||||
external Pointer<Utf8> label;
|
||||
|
||||
String getLabel() => label.toDartString();
|
||||
String getAddress() => address.toDartString();
|
||||
int getId() => id;
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
import 'dart:ffi';
|
||||
import 'package:ffi/ffi.dart';
|
||||
|
||||
class TransactionInfoRow extends Struct {
|
||||
@Uint64()
|
||||
external int amount;
|
||||
|
||||
@Uint64()
|
||||
external int fee;
|
||||
|
||||
@Uint64()
|
||||
external int blockHeight;
|
||||
|
||||
@Uint64()
|
||||
external int confirmations;
|
||||
|
||||
@Uint32()
|
||||
external int subaddrAccount;
|
||||
|
||||
@Int8()
|
||||
external int direction;
|
||||
|
||||
@Int8()
|
||||
external int isPending;
|
||||
|
||||
@Uint32()
|
||||
external int subaddrIndex;
|
||||
|
||||
external Pointer<Utf8> hash;
|
||||
|
||||
external Pointer<Utf8> paymentId;
|
||||
|
||||
external Pointer<Utf8> assetType;
|
||||
|
||||
@Int64()
|
||||
external int datetime;
|
||||
|
||||
int getDatetime() => datetime;
|
||||
int getAmount() => amount >= 0 ? amount : amount * -1;
|
||||
bool getIsPending() => isPending != 0;
|
||||
String getHash() => hash.toDartString();
|
||||
String getPaymentId() => paymentId.toDartString();
|
||||
String getAssetType() => assetType.toDartString();
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
import 'dart:ffi';
|
||||
import 'package:ffi/ffi.dart';
|
||||
|
||||
class ZanoBalanceRow extends Struct {
|
||||
@Int64()
|
||||
external int amount;
|
||||
|
||||
external Pointer<Utf8> assetType;
|
||||
|
||||
int getAmount() => amount;
|
||||
String getAssetType() => assetType.toDartString();
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
import 'dart:ffi';
|
||||
import 'package:ffi/ffi.dart';
|
||||
|
||||
class ZanoRate extends Struct {
|
||||
@Int64()
|
||||
external int rate;
|
||||
|
||||
external Pointer<Utf8> assetType;
|
||||
|
||||
int getRate() => rate;
|
||||
String getAssetType() => assetType.toDartString();
|
||||
}
|
|
@ -1,103 +0,0 @@
|
|||
import 'dart:ffi';
|
||||
import 'package:ffi/ffi.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:cw_zano/api/signatures.dart';
|
||||
import 'package:cw_zano/api/types.dart';
|
||||
import 'package:cw_zano/api/zano_api.dart';
|
||||
import 'package:cw_zano/api/structs/subaddress_row.dart';
|
||||
import 'package:cw_zano/api/wallet.dart';
|
||||
|
||||
/**
|
||||
final subaddressSizeNative = zanoApi
|
||||
.lookup<NativeFunction<subaddrress_size>>('subaddrress_size')
|
||||
.asFunction<SubaddressSize>();
|
||||
|
||||
final subaddressRefreshNative = zanoApi
|
||||
.lookup<NativeFunction<subaddrress_refresh>>('subaddress_refresh')
|
||||
.asFunction<SubaddressRefresh>();
|
||||
|
||||
final subaddrressGetAllNative = zanoApi
|
||||
.lookup<NativeFunction<subaddress_get_all>>('subaddrress_get_all')
|
||||
.asFunction<SubaddressGetAll>();
|
||||
|
||||
final subaddrressAddNewNative = zanoApi
|
||||
.lookup<NativeFunction<subaddress_add_new>>('subaddress_add_row')
|
||||
.asFunction<SubaddressAddNew>();
|
||||
|
||||
final subaddrressSetLabelNative = zanoApi
|
||||
.lookup<NativeFunction<subaddress_set_label>>('subaddress_set_label')
|
||||
.asFunction<SubaddressSetLabel>();
|
||||
|
||||
bool isUpdating = false;
|
||||
|
||||
void refreshSubaddresses({required int accountIndex}) {
|
||||
try {
|
||||
isUpdating = true;
|
||||
subaddressRefreshNative(accountIndex);
|
||||
isUpdating = false;
|
||||
} catch (e) {
|
||||
isUpdating = false;
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
List<SubaddressRow> getAllSubaddresses() {
|
||||
final size = subaddressSizeNative();
|
||||
final subaddressAddressesPointer = subaddrressGetAllNative();
|
||||
final subaddressAddresses = subaddressAddressesPointer.asTypedList(size);
|
||||
|
||||
return subaddressAddresses
|
||||
.map((addr) => Pointer<SubaddressRow>.fromAddress(addr).ref)
|
||||
.toList();
|
||||
}
|
||||
|
||||
void addSubaddressSync({required int accountIndex, required String label}) {
|
||||
final labelPointer = label.toNativeUtf8();
|
||||
subaddrressAddNewNative(accountIndex, labelPointer);
|
||||
calloc.free(labelPointer);
|
||||
}
|
||||
|
||||
void setLabelForSubaddressSync(
|
||||
{required int accountIndex,
|
||||
required int addressIndex,
|
||||
required String label}) {
|
||||
final labelPointer = label.toNativeUtf8();
|
||||
|
||||
subaddrressSetLabelNative(accountIndex, addressIndex, labelPointer);
|
||||
calloc.free(labelPointer);
|
||||
}
|
||||
|
||||
void _addSubaddress(Map<String, dynamic> args) {
|
||||
final label = args['label'] as String;
|
||||
final accountIndex = args['accountIndex'] as int;
|
||||
|
||||
addSubaddressSync(accountIndex: accountIndex, label: label);
|
||||
}
|
||||
|
||||
void _setLabelForSubaddress(Map<String, dynamic> args) {
|
||||
final label = args['label'] as String;
|
||||
final accountIndex = args['accountIndex'] as int;
|
||||
final addressIndex = args['addressIndex'] as int;
|
||||
|
||||
setLabelForSubaddressSync(
|
||||
accountIndex: accountIndex, addressIndex: addressIndex, label: label);
|
||||
}
|
||||
|
||||
Future addSubaddress({required int accountIndex, required String label}) async {
|
||||
await compute<Map<String, Object>, void>(
|
||||
_addSubaddress, {'accountIndex': accountIndex, 'label': label});
|
||||
await store();
|
||||
}
|
||||
|
||||
Future setLabelForSubaddress(
|
||||
{required int accountIndex,
|
||||
required int addressIndex,
|
||||
required String label}) async {
|
||||
await compute<Map<String, Object>, void>(_setLabelForSubaddress, {
|
||||
'accountIndex': accountIndex,
|
||||
'addressIndex': addressIndex,
|
||||
'label': label
|
||||
});
|
||||
await store();
|
||||
}
|
||||
*/
|
|
@ -1,250 +0,0 @@
|
|||
import 'dart:ffi';
|
||||
import 'package:cw_zano/api/convert_utf8_to_string.dart';
|
||||
import 'package:cw_zano/api/zano_output.dart';
|
||||
import 'package:cw_zano/api/structs/ut8_box.dart';
|
||||
import 'package:ffi/ffi.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:cw_zano/api/signatures.dart';
|
||||
import 'package:cw_zano/api/types.dart';
|
||||
import 'package:cw_zano/api/zano_api.dart';
|
||||
import 'package:cw_zano/api/structs/transaction_info_row.dart';
|
||||
import 'package:cw_zano/api/structs/pending_transaction.dart';
|
||||
import 'package:cw_zano/api/exceptions/creation_transaction_exception.dart';
|
||||
|
||||
/**final transactionsRefreshNative = zanoApi
|
||||
.lookup<NativeFunction<transactions_refresh>>('transactions_refresh')
|
||||
.asFunction<TransactionsRefresh>();*/
|
||||
|
||||
/**final transactionsCountNative = zanoApi
|
||||
.lookup<NativeFunction<transactions_count>>('transactions_count')
|
||||
.asFunction<TransactionsCount>();*/
|
||||
|
||||
final transactionsGetAllNative = zanoApi
|
||||
.lookup<NativeFunction<transactions_get_all>>('transactions_get_all')
|
||||
.asFunction<TransactionsGetAll>();
|
||||
|
||||
final transactionCreateNative = zanoApi
|
||||
.lookup<NativeFunction<transaction_create>>('transaction_create')
|
||||
.asFunction<TransactionCreate>();
|
||||
|
||||
final transactionCreateMultDestNative = zanoApi
|
||||
.lookup<NativeFunction<transaction_create_mult_dest>>(
|
||||
'transaction_create_mult_dest')
|
||||
.asFunction<TransactionCreateMultDest>();
|
||||
|
||||
// final transactionCommitNative = zanoApi
|
||||
// .lookup<NativeFunction<transaction_commit>>('transaction_commit')
|
||||
// .asFunction<TransactionCommit>();
|
||||
|
||||
final getTxKeyNative = zanoApi
|
||||
.lookup<NativeFunction<get_tx_key>>('get_tx_key')
|
||||
.asFunction<GetTxKey>();
|
||||
|
||||
String getTxKey(String txId) {
|
||||
final txIdPointer = txId.toNativeUtf8();
|
||||
final keyPointer = getTxKeyNative(txIdPointer);
|
||||
|
||||
calloc.free(txIdPointer);
|
||||
|
||||
if (keyPointer != null) {
|
||||
return convertUTF8ToString(pointer: keyPointer);
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
// void refreshTransactions() {
|
||||
// // TODO: fix it
|
||||
// //transactionsRefreshNative();
|
||||
// debugPrint("refreshing transactions");
|
||||
// }
|
||||
|
||||
int countOfTransactions() {
|
||||
//return transactionsCountNative();
|
||||
// TODO: fix it
|
||||
debugPrint("count of transactions");
|
||||
return 0;
|
||||
}
|
||||
|
||||
List<TransactionInfoRow> getAllTransations() {
|
||||
// TODO: fix it
|
||||
return [];
|
||||
/*final size = transactionsCountNative();
|
||||
final transactionsPointer = transactionsGetAllNative();
|
||||
final transactionsAddresses = transactionsPointer.asTypedList(size);
|
||||
|
||||
return transactionsAddresses
|
||||
.map((addr) => Pointer<TransactionInfoRow>.fromAddress(addr).ref)
|
||||
.toList();*/
|
||||
}
|
||||
|
||||
PendingTransactionDescription createTransactionSync(
|
||||
{required String address,
|
||||
required String assetType,
|
||||
required String paymentId,
|
||||
required int priorityRaw,
|
||||
String? amount}) {
|
||||
final addressPointer = address.toNativeUtf8();
|
||||
final assetTypePointer = assetType.toNativeUtf8();
|
||||
final paymentIdPointer = paymentId.toNativeUtf8();
|
||||
final amountPointer = amount != null ? amount.toNativeUtf8() : nullptr;
|
||||
final errorMessagePointer = calloc<Utf8Box>();
|
||||
final pendingTransactionRawPointer = calloc<PendingTransactionRaw>();
|
||||
final created = transactionCreateNative(
|
||||
addressPointer,
|
||||
assetTypePointer,
|
||||
paymentIdPointer,
|
||||
amountPointer,
|
||||
priorityRaw,
|
||||
errorMessagePointer,
|
||||
pendingTransactionRawPointer) !=
|
||||
0;
|
||||
|
||||
calloc.free(addressPointer);
|
||||
calloc.free(assetTypePointer);
|
||||
calloc.free(paymentIdPointer);
|
||||
|
||||
if (amountPointer != nullptr) {
|
||||
calloc.free(amountPointer);
|
||||
}
|
||||
|
||||
if (!created) {
|
||||
final message = errorMessagePointer.ref.getValue();
|
||||
calloc.free(errorMessagePointer);
|
||||
throw CreationTransactionException(message: message);
|
||||
}
|
||||
|
||||
return PendingTransactionDescription(
|
||||
amount: pendingTransactionRawPointer.ref.amount,
|
||||
fee: pendingTransactionRawPointer.ref.fee,
|
||||
hash: pendingTransactionRawPointer.ref.getHash(),
|
||||
pointerAddress: pendingTransactionRawPointer.address);
|
||||
}
|
||||
|
||||
PendingTransactionDescription createTransactionMultDestSync(
|
||||
{required List<ZanoOutput> outputs,
|
||||
required String assetType,
|
||||
required String paymentId,
|
||||
required int priorityRaw}) {
|
||||
final int size = outputs.length;
|
||||
final List<Pointer<Utf8>> addressesPointers =
|
||||
outputs.map((output) => output.address.toNativeUtf8()).toList();
|
||||
final Pointer<Pointer<Utf8>> addressesPointerPointer = calloc(size);
|
||||
final List<Pointer<Utf8>> amountsPointers =
|
||||
outputs.map((output) => output.amount.toNativeUtf8()).toList();
|
||||
final Pointer<Pointer<Utf8>> amountsPointerPointer = calloc(size);
|
||||
|
||||
for (int i = 0; i < size; i++) {
|
||||
addressesPointerPointer[i] = addressesPointers[i];
|
||||
amountsPointerPointer[i] = amountsPointers[i];
|
||||
}
|
||||
|
||||
final assetTypePointer = assetType.toNativeUtf8();
|
||||
final paymentIdPointer = paymentId.toNativeUtf8();
|
||||
final errorMessagePointer = calloc<Utf8Box>();
|
||||
final pendingTransactionRawPointer = calloc<PendingTransactionRaw>();
|
||||
final created = transactionCreateMultDestNative(
|
||||
addressesPointerPointer,
|
||||
assetTypePointer,
|
||||
paymentIdPointer,
|
||||
amountsPointerPointer,
|
||||
size,
|
||||
priorityRaw,
|
||||
errorMessagePointer,
|
||||
pendingTransactionRawPointer) !=
|
||||
0;
|
||||
|
||||
calloc.free(addressesPointerPointer);
|
||||
calloc.free(assetTypePointer);
|
||||
calloc.free(amountsPointerPointer);
|
||||
|
||||
addressesPointers.forEach((element) => calloc.free(element));
|
||||
amountsPointers.forEach((element) => calloc.free(element));
|
||||
|
||||
calloc.free(paymentIdPointer);
|
||||
|
||||
if (!created) {
|
||||
final message = errorMessagePointer.ref.getValue();
|
||||
calloc.free(errorMessagePointer);
|
||||
throw CreationTransactionException(message: message);
|
||||
}
|
||||
|
||||
return PendingTransactionDescription(
|
||||
amount: pendingTransactionRawPointer.ref.amount,
|
||||
fee: pendingTransactionRawPointer.ref.fee,
|
||||
hash: pendingTransactionRawPointer.ref.getHash(),
|
||||
pointerAddress: pendingTransactionRawPointer.address);
|
||||
}
|
||||
|
||||
void commitTransactionFromPointerAddress({required int address}) =>
|
||||
commitTransaction(
|
||||
transactionPointer:
|
||||
Pointer<PendingTransactionRaw>.fromAddress(address));
|
||||
|
||||
void commitTransaction(
|
||||
{required Pointer<PendingTransactionRaw> transactionPointer}) {
|
||||
final errorMessagePointer = calloc<Utf8Box>();
|
||||
print("commit transaction");
|
||||
final isCommited = true;
|
||||
//transactionCommitNative(transactionPointer, errorMessagePointer) != 0;
|
||||
|
||||
if (!isCommited) {
|
||||
final message = errorMessagePointer.ref.getValue();
|
||||
calloc.free(errorMessagePointer);
|
||||
throw CreationTransactionException(message: message);
|
||||
}
|
||||
}
|
||||
|
||||
PendingTransactionDescription _createTransactionSync(Map args) {
|
||||
final address = args['address'] as String;
|
||||
final assetType = args['assetType'] as String;
|
||||
final paymentId = args['paymentId'] as String;
|
||||
final amount = args['amount'] as String;
|
||||
final priorityRaw = args['priorityRaw'] as int;
|
||||
|
||||
return createTransactionSync(
|
||||
address: address,
|
||||
assetType: assetType,
|
||||
paymentId: paymentId,
|
||||
amount: amount,
|
||||
priorityRaw: priorityRaw);
|
||||
}
|
||||
|
||||
PendingTransactionDescription _createTransactionMultDestSync(Map args) {
|
||||
final outputs = args['outputs'] as List<ZanoOutput>;
|
||||
final assetType = args['assetType'] as String;
|
||||
final paymentId = args['paymentId'] as String;
|
||||
final priorityRaw = args['priorityRaw'] as int;
|
||||
|
||||
return createTransactionMultDestSync(
|
||||
outputs: outputs,
|
||||
assetType: assetType,
|
||||
paymentId: paymentId,
|
||||
priorityRaw: priorityRaw);
|
||||
}
|
||||
|
||||
Future<PendingTransactionDescription> createTransaction(
|
||||
{required String address,
|
||||
required String assetType,
|
||||
required int priorityRaw,
|
||||
String? amount,
|
||||
String paymentId = ''}) =>
|
||||
compute(_createTransactionSync, {
|
||||
'address': address,
|
||||
'assetType': assetType,
|
||||
'paymentId': paymentId,
|
||||
'amount': amount,
|
||||
'priorityRaw': priorityRaw,
|
||||
});
|
||||
|
||||
Future<PendingTransactionDescription> createTransactionMultDest(
|
||||
{required List<ZanoOutput> outputs,
|
||||
required int priorityRaw,
|
||||
String? assetType,
|
||||
String paymentId = ''}) =>
|
||||
compute(_createTransactionMultDestSync, {
|
||||
'outputs': outputs,
|
||||
'assetType': assetType,
|
||||
'paymentId': paymentId,
|
||||
'priorityRaw': priorityRaw,
|
||||
});
|
|
@ -1,5 +1,4 @@
|
|||
import 'dart:ffi';
|
||||
import 'package:cw_zano/api/structs/pending_transaction.dart';
|
||||
import 'package:cw_zano/api/structs/ut8_box.dart';
|
||||
import 'package:ffi/ffi.dart';
|
||||
|
||||
|
@ -22,7 +21,7 @@ typedef RestoreWalletFromKeys = int Function(
|
|||
|
||||
typedef IsWalletExist = int Function(Pointer<Utf8>);
|
||||
|
||||
typedef LoadWallet = int Function(Pointer<Utf8>, Pointer<Utf8>, int);
|
||||
//typedef LoadWallet = int Function(Pointer<Utf8>, Pointer<Utf8>, int);
|
||||
|
||||
typedef ErrorString = Pointer<Utf8> Function();
|
||||
|
||||
|
@ -99,27 +98,27 @@ typedef TransactionsCount = int Function();
|
|||
|
||||
typedef TransactionsGetAll = Pointer<Int64> Function();
|
||||
|
||||
typedef TransactionCreate = int Function(
|
||||
Pointer<Utf8> address,
|
||||
Pointer<Utf8> assetType,
|
||||
Pointer<Utf8> paymentId,
|
||||
Pointer<Utf8> amount,
|
||||
int priorityRaw,
|
||||
Pointer<Utf8Box> error,
|
||||
Pointer<PendingTransactionRaw> pendingTransaction);
|
||||
// typedef TransactionCreate = int Function(
|
||||
// Pointer<Utf8> address,
|
||||
// Pointer<Utf8> assetType,
|
||||
// Pointer<Utf8> paymentId,
|
||||
// Pointer<Utf8> amount,
|
||||
// int priorityRaw,
|
||||
// Pointer<Utf8Box> error,
|
||||
// Pointer<PendingTransactionRaw> pendingTransaction);
|
||||
|
||||
typedef TransactionCreateMultDest = int Function(
|
||||
Pointer<Pointer<Utf8>> addresses,
|
||||
Pointer<Utf8> assetType,
|
||||
Pointer<Utf8> paymentId,
|
||||
Pointer<Pointer<Utf8>> amounts,
|
||||
int size,
|
||||
int priorityRaw,
|
||||
Pointer<Utf8Box> error,
|
||||
Pointer<PendingTransactionRaw> pendingTransaction);
|
||||
// typedef TransactionCreateMultDest = int Function(
|
||||
// Pointer<Pointer<Utf8>> addresses,
|
||||
// Pointer<Utf8> assetType,
|
||||
// Pointer<Utf8> paymentId,
|
||||
// Pointer<Pointer<Utf8>> amounts,
|
||||
// int size,
|
||||
// int priorityRaw,
|
||||
// Pointer<Utf8Box> error,
|
||||
// Pointer<PendingTransactionRaw> pendingTransaction);
|
||||
|
||||
typedef TransactionCommit = int Function(
|
||||
Pointer<PendingTransactionRaw>, Pointer<Utf8Box>);
|
||||
// typedef TransactionCommit = int Function(
|
||||
// Pointer<PendingTransactionRaw>, Pointer<Utf8Box>);
|
||||
|
||||
typedef SecretViewKey = Pointer<Utf8> Function();
|
||||
|
||||
|
|
|
@ -14,7 +14,6 @@ import 'package:cw_zano/api/signatures.dart';
|
|||
import 'package:cw_zano/api/types.dart';
|
||||
import 'package:cw_zano/api/zano_api.dart';
|
||||
import 'package:cw_zano/api/calls.dart' as calls;
|
||||
import 'package:cw_zano/api/exceptions/setup_wallet_exception.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:mobx/mobx.dart' as mobx;
|
||||
|
@ -163,9 +162,9 @@ int getNodeHeightSync(int hWallet) {
|
|||
// return 0;
|
||||
// }
|
||||
|
||||
int getTxFee(int priority) {
|
||||
return calls.getCurrentTxFee(priority);
|
||||
}
|
||||
// int getTxFee(int priority) {
|
||||
// return calls.getCurrentTxFee(priority);
|
||||
// }
|
||||
|
||||
bool isConnectedSync() => isConnectedNative() != 0;
|
||||
|
||||
|
@ -325,7 +324,7 @@ class SyncListener {
|
|||
wallet.balance = mobx.ObservableMap.of(
|
||||
{CryptoCurrency.zano: ZanoBalance(total: balance.total, unlocked: balance.unlocked)});
|
||||
|
||||
getTxFee(hWallet);
|
||||
///getTxFee(hWallet);
|
||||
|
||||
if (_initialSyncHeight <= 0) {
|
||||
_initialSyncHeight = syncHeight;
|
||||
|
|
|
@ -5,15 +5,11 @@ import 'package:cw_zano/api/convert_utf8_to_string.dart';
|
|||
import 'package:cw_zano/api/signatures.dart';
|
||||
import 'package:cw_zano/api/types.dart';
|
||||
import 'package:cw_zano/api/zano_api.dart';
|
||||
import 'package:cw_zano/api/wallet.dart';
|
||||
import 'package:cw_zano/api/exceptions/wallet_opening_exception.dart';
|
||||
import 'package:cw_zano/api/exceptions/wallet_creation_exception.dart';
|
||||
import 'package:cw_zano/api/exceptions/wallet_restore_from_keys_exception.dart';
|
||||
import 'package:cw_zano/api/exceptions/wallet_restore_from_seed_exception.dart';
|
||||
|
||||
final createWalletNative = zanoApi
|
||||
.lookup<NativeFunction<create_wallet>>('create_wallet')
|
||||
.asFunction<CreateWallet>();
|
||||
// final createWalletNative = zanoApi
|
||||
// .lookup<NativeFunction<create_wallet>>('create_wallet')
|
||||
// .asFunction<CreateWallet>();
|
||||
|
||||
final restoreWalletFromSeedNative = zanoApi
|
||||
.lookup<NativeFunction<restore_wallet_from_seed>>(
|
||||
|
@ -29,15 +25,15 @@ final isWalletExistNative = zanoApi
|
|||
.lookup<NativeFunction<is_wallet_exist>>('is_wallet_exist')
|
||||
.asFunction<IsWalletExist>();
|
||||
|
||||
final loadWalletNative = zanoApi
|
||||
.lookup<NativeFunction<load_wallet>>('load_wallet')
|
||||
.asFunction<LoadWallet>();
|
||||
// final loadWalletNative = zanoApi
|
||||
// .lookup<NativeFunction<load_wallet>>('load_wallet')
|
||||
// .asFunction<LoadWallet>();
|
||||
|
||||
final errorStringNative = zanoApi
|
||||
.lookup<NativeFunction<error_string>>('error_string')
|
||||
.asFunction<ErrorString>();
|
||||
|
||||
String createWalletSync(
|
||||
/*String createWalletSync(
|
||||
{required String path,
|
||||
required String password,
|
||||
required String language,
|
||||
|
@ -63,7 +59,7 @@ String createWalletSync(
|
|||
|
||||
return hWallet;
|
||||
// setupNodeSync(address: "node.moneroworld.com:18089");*/
|
||||
}
|
||||
}*/
|
||||
|
||||
bool isWalletExistSync({required String path}) {
|
||||
final pathPointer = path.toNativeUtf8();
|
||||
|
@ -74,34 +70,34 @@ bool isWalletExistSync({required String path}) {
|
|||
return isExist;
|
||||
}
|
||||
|
||||
void restoreWalletFromSeedSync(
|
||||
{required String path,
|
||||
required String password,
|
||||
required String seed,
|
||||
int nettype = 0,
|
||||
int restoreHeight = 0}) {
|
||||
final pathPointer = path.toNativeUtf8();
|
||||
final passwordPointer = password.toNativeUtf8();
|
||||
final seedPointer = seed.toNativeUtf8();
|
||||
final errorMessagePointer = ''.toNativeUtf8();
|
||||
final isWalletRestored = restoreWalletFromSeedNative(
|
||||
pathPointer,
|
||||
passwordPointer,
|
||||
seedPointer,
|
||||
nettype,
|
||||
restoreHeight,
|
||||
errorMessagePointer) !=
|
||||
0;
|
||||
// void restoreWalletFromSeedSync(
|
||||
// {required String path,
|
||||
// required String password,
|
||||
// required String seed,
|
||||
// int nettype = 0,
|
||||
// int restoreHeight = 0}) {
|
||||
// final pathPointer = path.toNativeUtf8();
|
||||
// final passwordPointer = password.toNativeUtf8();
|
||||
// final seedPointer = seed.toNativeUtf8();
|
||||
// final errorMessagePointer = ''.toNativeUtf8();
|
||||
// final isWalletRestored = restoreWalletFromSeedNative(
|
||||
// pathPointer,
|
||||
// passwordPointer,
|
||||
// seedPointer,
|
||||
// nettype,
|
||||
// restoreHeight,
|
||||
// errorMessagePointer) !=
|
||||
// 0;
|
||||
|
||||
calloc.free(pathPointer);
|
||||
calloc.free(passwordPointer);
|
||||
calloc.free(seedPointer);
|
||||
// calloc.free(pathPointer);
|
||||
// calloc.free(passwordPointer);
|
||||
// calloc.free(seedPointer);
|
||||
|
||||
if (!isWalletRestored) {
|
||||
throw WalletRestoreFromSeedException(
|
||||
message: convertUTF8ToString(pointer: errorMessagePointer));
|
||||
}
|
||||
}
|
||||
// if (!isWalletRestored) {
|
||||
// throw WalletRestoreFromSeedException(
|
||||
// message: convertUTF8ToString(pointer: errorMessagePointer));
|
||||
// }
|
||||
// }
|
||||
|
||||
void restoreWalletFromKeysSync(
|
||||
{required String path,
|
||||
|
@ -144,37 +140,37 @@ void restoreWalletFromKeysSync(
|
|||
}
|
||||
}
|
||||
|
||||
void loadWallet(
|
||||
{required String path, required String password, int nettype = 0}) {
|
||||
final pathPointer = path.toNativeUtf8();
|
||||
final passwordPointer = password.toNativeUtf8();
|
||||
final loaded = loadWalletNative(pathPointer, passwordPointer, nettype) != 0;
|
||||
calloc.free(pathPointer);
|
||||
calloc.free(passwordPointer);
|
||||
// void loadWallet(
|
||||
// {required String path, required String password, int nettype = 0}) {
|
||||
// final pathPointer = path.toNativeUtf8();
|
||||
// final passwordPointer = password.toNativeUtf8();
|
||||
// final loaded = loadWalletNative(pathPointer, passwordPointer, nettype) != 0;
|
||||
// calloc.free(pathPointer);
|
||||
// calloc.free(passwordPointer);
|
||||
|
||||
if (!loaded) {
|
||||
throw WalletOpeningException(
|
||||
message: convertUTF8ToString(pointer: errorStringNative()));
|
||||
}
|
||||
}
|
||||
// if (!loaded) {
|
||||
// throw WalletOpeningException(
|
||||
// message: convertUTF8ToString(pointer: errorStringNative()));
|
||||
// }
|
||||
// }
|
||||
|
||||
String _createWallet(Map<String, dynamic> args) {
|
||||
final path = args['path'] as String;
|
||||
final password = args['password'] as String;
|
||||
final language = args['language'] as String;
|
||||
// String _createWallet(Map<String, dynamic> args) {
|
||||
// final path = args['path'] as String;
|
||||
// final password = args['password'] as String;
|
||||
// final language = args['language'] as String;
|
||||
|
||||
return createWalletSync(path: path, password: password, language: language);
|
||||
}
|
||||
// return createWalletSync(path: path, password: password, language: language);
|
||||
// }
|
||||
|
||||
void _restoreFromSeed(Map<String, dynamic> args) {
|
||||
final path = args['path'] as String;
|
||||
final password = args['password'] as String;
|
||||
final seed = args['seed'] as String;
|
||||
final restoreHeight = args['restoreHeight'] as int;
|
||||
// void _restoreFromSeed(Map<String, dynamic> args) {
|
||||
// final path = args['path'] as String;
|
||||
// final password = args['password'] as String;
|
||||
// final seed = args['seed'] as String;
|
||||
// final restoreHeight = args['restoreHeight'] as int;
|
||||
|
||||
restoreWalletFromSeedSync(
|
||||
path: path, password: password, seed: seed, restoreHeight: restoreHeight);
|
||||
}
|
||||
// restoreWalletFromSeedSync(
|
||||
// path: path, password: password, seed: seed, restoreHeight: restoreHeight);
|
||||
// }
|
||||
|
||||
void _restoreFromKeys(Map<String, dynamic> args) {
|
||||
final path = args['path'] as String;
|
||||
|
@ -195,8 +191,8 @@ void _restoreFromKeys(Map<String, dynamic> args) {
|
|||
spendKey: spendKey);
|
||||
}
|
||||
|
||||
Future<void> _openWallet(Map<String, String> args) async => loadWallet(
|
||||
path: args['path'] as String, password: args['password'] as String);
|
||||
// Future<void> _openWallet(Map<String, String> args) async => loadWallet(
|
||||
// path: args['path'] as String, password: args['password'] as String);
|
||||
|
||||
bool _isWalletExist(String path) => isWalletExistSync(path: path);
|
||||
|
||||
|
@ -206,34 +202,34 @@ bool _isWalletExist(String path) => isWalletExistSync(path: path);
|
|||
// int nettype = 0}) async =>
|
||||
// loadWallet(path: path, password: password, nettype: nettype);
|
||||
|
||||
Future<void> openWalletAsync(Map<String, String> args) async =>
|
||||
compute(_openWallet, args);
|
||||
// Future<void> openWalletAsync(Map<String, String> args) async =>
|
||||
// compute(_openWallet, args);
|
||||
|
||||
Future<String> createWallet(
|
||||
{required String path,
|
||||
required String password,
|
||||
required String language,
|
||||
int nettype = 0}) async =>
|
||||
compute<Map<String, dynamic>, String>(_createWallet, {
|
||||
'path': path,
|
||||
'password': password,
|
||||
'language': language,
|
||||
'nettype': nettype
|
||||
});
|
||||
// Future<String> createWallet(
|
||||
// {required String path,
|
||||
// required String password,
|
||||
// required String language,
|
||||
// int nettype = 0}) async =>
|
||||
// compute<Map<String, dynamic>, String>(_createWallet, {
|
||||
// 'path': path,
|
||||
// 'password': password,
|
||||
// 'language': language,
|
||||
// 'nettype': nettype
|
||||
// });
|
||||
|
||||
Future<void> restoreFromSeed(
|
||||
{required String path,
|
||||
required String password,
|
||||
required String seed,
|
||||
int nettype = 0,
|
||||
int restoreHeight = 0}) async =>
|
||||
compute<Map<String, Object>, void>(_restoreFromSeed, {
|
||||
'path': path,
|
||||
'password': password,
|
||||
'seed': seed,
|
||||
'nettype': nettype,
|
||||
'restoreHeight': restoreHeight
|
||||
});
|
||||
// Future<void> restoreFromSeed(
|
||||
// {required String path,
|
||||
// required String password,
|
||||
// required String seed,
|
||||
// int nettype = 0,
|
||||
// int restoreHeight = 0}) async =>
|
||||
// compute<Map<String, Object>, void>(_restoreFromSeed, {
|
||||
// 'path': path,
|
||||
// 'password': password,
|
||||
// 'seed': seed,
|
||||
// 'nettype': nettype,
|
||||
// 'restoreHeight': restoreHeight
|
||||
// });
|
||||
|
||||
Future<void> restoreFromKeys(
|
||||
{required String path,
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
|
||||
class ZanoOutput {
|
||||
ZanoOutput({required this.address, required this.amount});
|
||||
|
||||
final String address;
|
||||
final String amount;
|
||||
}
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,19 +0,0 @@
|
|||
import 'package:cw_core/wallet_addresses.dart';
|
||||
|
||||
class NewZanoWalletAddresses extends WalletAddresses {
|
||||
@override
|
||||
String address;
|
||||
|
||||
NewZanoWalletAddresses(super.walletInfo): address = "";
|
||||
|
||||
@override
|
||||
Future<void> init() async {
|
||||
print("NewZanoWalletAddresses init");
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> updateAddressesInBox() async {
|
||||
print("NewZanoWalletAddresses updateAddressesInBox");
|
||||
}
|
||||
|
||||
}
|
|
@ -1,239 +0,0 @@
|
|||
import 'dart:async';
|
||||
|
||||
import 'package:cw_core/crypto_currency.dart';
|
||||
import 'package:cw_core/node.dart';
|
||||
import 'package:cw_core/pending_transaction.dart';
|
||||
import 'package:cw_core/sync_status.dart';
|
||||
import 'package:cw_core/transaction_priority.dart';
|
||||
import 'package:cw_core/wallet_addresses.dart';
|
||||
import 'package:cw_core/wallet_base.dart';
|
||||
import 'package:cw_zano/api/model/balance.dart';
|
||||
import 'package:cw_zano/api/model/create_wallet_result.dart';
|
||||
import 'package:cw_zano/api/zano_api.dart';
|
||||
import 'package:cw_zano/zano_balance.dart';
|
||||
import 'package:cw_zano/zano_transaction_history.dart';
|
||||
import 'package:cw_zano/zano_transaction_info.dart';
|
||||
import 'package:mobx/src/api/observable_collections.dart';
|
||||
import 'package:cw_zano/api/wallet.dart' as zano_wallet;
|
||||
import 'dart:convert';
|
||||
import 'dart:ffi';
|
||||
|
||||
import 'package:cw_zano/api/signatures.dart';
|
||||
import 'package:cw_zano/api/types.dart';
|
||||
import 'package:ffi/ffi.dart';
|
||||
|
||||
import 'api/model/zano_wallet_keys.dart';
|
||||
import 'new_zano_addresses_base.dart';
|
||||
|
||||
typedef _load_wallet = Pointer<Utf8> Function(Pointer<Utf8>, Pointer<Utf8>, Int8);
|
||||
typedef _LoadWallet = Pointer<Utf8> Function(Pointer<Utf8>, Pointer<Utf8>, int);
|
||||
|
||||
class NewZanoWallet extends WalletBase<ZanoBalance, ZanoTransactionHistory, ZanoTransactionInfo> {
|
||||
@override
|
||||
SyncStatus syncStatus;
|
||||
|
||||
Timer? _autoSaveTimer;
|
||||
|
||||
static const int _autoSaveInterval = 30;
|
||||
|
||||
NewZanoWallet(super.walletInfo)
|
||||
: balance = ObservableMap.of({CryptoCurrency.zano: ZanoBalance(total: 0, unlocked: 0)}),
|
||||
walletAddresses = NewZanoWalletAddresses(walletInfo),
|
||||
syncStatus = NotConnectedSyncStatus() {
|
||||
transactionHistory = ZanoTransactionHistory();
|
||||
}
|
||||
|
||||
Future<void> init() async {
|
||||
print("NewZanoWallet init");
|
||||
if (walletInfo.isRecovery) {
|
||||
print("is recovery");
|
||||
}
|
||||
_autoSaveTimer =
|
||||
Timer.periodic(Duration(seconds: _autoSaveInterval), (_) async => await save());
|
||||
}
|
||||
|
||||
String getTransactionAddress(int accountIndex, int addressIndex) {
|
||||
print("NewZanoWallet getTransactionAddress");
|
||||
return "";
|
||||
}
|
||||
|
||||
@override
|
||||
ObservableMap<CryptoCurrency, ZanoBalance> balance;
|
||||
|
||||
@override
|
||||
int calculateEstimatedFee(TransactionPriority priority, int? amount) {
|
||||
// TODO: implement calculateEstimatedFee
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> changePassword(String password) {
|
||||
// TODO: implement changePassword
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
void close() {
|
||||
// TODO: implement close
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> connectToNode({required Node node}) async {
|
||||
print("NewZanoWallet connecttoNode");
|
||||
try {
|
||||
syncStatus = ConnectingSyncStatus();
|
||||
_setupNode(address: "195.201.107.230:33336", login: "", password: "");
|
||||
syncStatus = ConnectedSyncStatus();
|
||||
} catch (e) {
|
||||
syncStatus = FailedSyncStatus();
|
||||
print("connectToNode error $e");
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<PendingTransaction> createTransaction(Object credentials) {
|
||||
// TODO: implement createTransaction
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Map<String, ZanoTransactionInfo>> fetchTransactions() {
|
||||
// TODO: implement fetchTransactions
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
ZanoWalletKeys get keys => ZanoWalletKeys(
|
||||
privateSpendKey: "", privateViewKey: "", publicSpendKey: "", publicViewKey: "");
|
||||
|
||||
@override
|
||||
Future<void> renameWalletFiles(String newWalletName) {
|
||||
// TODO: implement renameWalletFiles
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> rescan({required int height}) {
|
||||
// TODO: implement rescan
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> save() async {
|
||||
await walletAddresses.updateAddressesInBox();
|
||||
if (hWallet != null) await zano_wallet.store(hWallet!);
|
||||
}
|
||||
|
||||
@override
|
||||
// TODO: implement seed
|
||||
String? seed = "Тут пока пусто";
|
||||
|
||||
@override
|
||||
Future<void> startSync() {
|
||||
// TODO: implement startSync
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void>? updateBalance() {
|
||||
// TODO: implement updateBalance
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
NewZanoWalletAddresses walletAddresses;
|
||||
|
||||
CreateWalletResult? createWalletResult;
|
||||
List<Balance>? balances;
|
||||
int? hWallet;
|
||||
final assetIds = <String, String>{};
|
||||
|
||||
final _setupNodeNative =
|
||||
zanoApi.lookup<NativeFunction<setup_node>>('setup_node').asFunction<SetupNode>();
|
||||
final _createWalletNative =
|
||||
zanoApi.lookup<NativeFunction<create_wallet>>('create_wallet').asFunction<CreateWallet>();
|
||||
|
||||
final _loadWalletNative =
|
||||
zanoApi.lookup<NativeFunction<_load_wallet>>('load_wallet').asFunction<_LoadWallet>();
|
||||
|
||||
bool _setupNode(
|
||||
{required String address,
|
||||
required String login,
|
||||
required String password,
|
||||
bool useSSL = false,
|
||||
bool isLightWallet = false}) {
|
||||
final addressPointer = address.toNativeUtf8();
|
||||
final loginPointer = login.toNativeUtf8();
|
||||
final passwordPointer = password.toNativeUtf8();
|
||||
final errorMessagePointer = ''.toNativeUtf8();
|
||||
print(
|
||||
"setup_node address $address login $login password $password useSSL $useSSL isLightWallet $isLightWallet");
|
||||
final result = _intToBool(_setupNodeNative(addressPointer, loginPointer, passwordPointer,
|
||||
_boolToInt(useSSL), _boolToInt(isLightWallet), errorMessagePointer));
|
||||
print("setup_node result $result");
|
||||
calloc.free(addressPointer);
|
||||
calloc.free(loginPointer);
|
||||
calloc.free(passwordPointer);
|
||||
return result;
|
||||
}
|
||||
|
||||
String _createWalletSync(
|
||||
{required String path, required String password, required String language, int nettype = 0}) {
|
||||
final pathPointer = path.toNativeUtf8();
|
||||
final passwordPointer = password.toNativeUtf8();
|
||||
final languagePointer = language.toNativeUtf8();
|
||||
final errorMessagePointer = ''.toNativeUtf8();
|
||||
print("create_wallet path $path password $password language $language");
|
||||
final result = _convertUTF8ToString(
|
||||
pointer: _createWalletNative(
|
||||
pathPointer, passwordPointer, languagePointer, nettype, errorMessagePointer));
|
||||
print("create_wallet $result");
|
||||
calloc.free(pathPointer);
|
||||
calloc.free(passwordPointer);
|
||||
calloc.free(languagePointer);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void createWallet({required String path, required String password}) {
|
||||
final createResult = _createWalletSync(path: path, password: password, language: "");
|
||||
final address = _parseResult(createResult)!;
|
||||
walletAddresses.address = address;
|
||||
}
|
||||
|
||||
String loadWallet(String path, String password) {
|
||||
print('load_wallet path $path password $password');
|
||||
final pathPointer = path.toNativeUtf8();
|
||||
final passwordPointer = password.toNativeUtf8();
|
||||
final result = _convertUTF8ToString(
|
||||
pointer: _loadWalletNative(pathPointer, passwordPointer, 0),
|
||||
);
|
||||
print('load_wallet result $result');
|
||||
return result;
|
||||
}
|
||||
|
||||
int _boolToInt(bool value) => value ? 1 : 0;
|
||||
bool _intToBool(int value) => value != 0;
|
||||
String _convertUTF8ToString({required Pointer<Utf8> pointer}) {
|
||||
final str = pointer.toDartString();
|
||||
calloc.free(pointer);
|
||||
return str;
|
||||
}
|
||||
|
||||
// TODO: kind of stupid thing, in one method parsing json and then setting properties of a class
|
||||
String? _parseResult(String result) {
|
||||
final map = json.decode(result) as Map<String, dynamic>;
|
||||
if (map['result'] != null) {
|
||||
createWalletResult =
|
||||
CreateWalletResult.fromJson(map['result'] as Map<String, dynamic>);
|
||||
balances = createWalletResult!.wi.balances;
|
||||
hWallet = createWalletResult!.walletId;
|
||||
assetIds.clear();
|
||||
for (final balance in createWalletResult!.wi.balances) {
|
||||
assetIds[balance.assetInfo.assetId] = balance.assetInfo.ticker;
|
||||
}
|
||||
return createWalletResult!.wi.address;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -1,54 +1,87 @@
|
|||
import 'package:cw_zano/api/structs/pending_transaction.dart';
|
||||
import 'package:cw_zano/api/transaction_history.dart'
|
||||
as zano_transaction_history;
|
||||
import 'dart:convert';
|
||||
|
||||
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';
|
||||
import 'package:cw_core/crypto_currency.dart';
|
||||
import 'package:cw_core/amount_converter.dart';
|
||||
import 'package:cw_core/pending_transaction.dart';
|
||||
|
||||
class DoubleSpendException implements Exception {
|
||||
DoubleSpendException();
|
||||
|
||||
@override
|
||||
String toString() =>
|
||||
'This transaction cannot be committed. This can be due to many reasons including the wallet not being synced, there is not enough XMR in your available balance, or previous transactions are not yet fully processed.';
|
||||
}
|
||||
import 'package:cw_zano/api/calls.dart' as calls;
|
||||
import 'package:cw_zano/zano_wallet.dart';
|
||||
|
||||
class PendingZanoTransaction with PendingTransaction {
|
||||
PendingZanoTransaction(
|
||||
this.pendingTransactionDescription, this.cryptoCurrency);
|
||||
{required this.fee,
|
||||
required this.intAmount,
|
||||
//required this.stringAmount,
|
||||
required this.hWallet,
|
||||
required this.address,
|
||||
required this.assetId,
|
||||
required this.comment});
|
||||
|
||||
final PendingTransactionDescription pendingTransactionDescription;
|
||||
final CryptoCurrency cryptoCurrency;
|
||||
final int hWallet;
|
||||
final int intAmount;
|
||||
//final String stringAmount;
|
||||
final int fee;
|
||||
final String address;
|
||||
final String assetId;
|
||||
final String comment;
|
||||
|
||||
final CryptoCurrency cryptoCurrency = CryptoCurrency.zano;
|
||||
|
||||
@override
|
||||
String get id => pendingTransactionDescription.hash;
|
||||
String get id => transferResult != null ? transferResult!.txHash : '';
|
||||
|
||||
@override
|
||||
String get hex => '';
|
||||
|
||||
@override
|
||||
String get amountFormatted {
|
||||
return AmountConverter.amountIntToString(
|
||||
cryptoCurrency, pendingTransactionDescription.amount);
|
||||
return AmountConverter.amountIntToString(cryptoCurrency, intAmount);
|
||||
}
|
||||
|
||||
@override
|
||||
String get feeFormatted => AmountConverter.amountIntToString(
|
||||
cryptoCurrency, pendingTransactionDescription.fee);
|
||||
String get feeFormatted => AmountConverter.amountIntToString(cryptoCurrency, fee);
|
||||
|
||||
TransferResult? transferResult;
|
||||
|
||||
@override
|
||||
Future<void> commit() async {
|
||||
try {
|
||||
zano_transaction_history.commitTransactionFromPointerAddress(
|
||||
address: pendingTransactionDescription.pointerAddress);
|
||||
} catch (e) {
|
||||
final message = e.toString();
|
||||
|
||||
if (message.contains('Reason: double spend')) {
|
||||
throw DoubleSpendException();
|
||||
}
|
||||
|
||||
rethrow;
|
||||
final result = await calls.transfer(
|
||||
hWallet,
|
||||
TransferParams(
|
||||
destinations: [
|
||||
Destination(
|
||||
amount: intAmount.toString(), //stringAmount,
|
||||
address: address,
|
||||
assetId: assetId,
|
||||
)
|
||||
],
|
||||
fee: fee,
|
||||
mixin: zanoMixin,
|
||||
paymentId: '',
|
||||
comment: comment,
|
||||
pushPayer: false,
|
||||
hideReceiver: false,
|
||||
));
|
||||
print('transfer result $result');
|
||||
final map = jsonDecode(result);
|
||||
if (map["result"] != null && map["result"]["result"] != null ) {
|
||||
transferResult = TransferResult.fromJson(
|
||||
map["result"]["result"] as Map<String, dynamic>,
|
||||
);
|
||||
}
|
||||
// try {
|
||||
// zano_transaction_history.commitTransactionFromPointerAddress(
|
||||
// address: pendingTransactionDescription.pointerAddress);
|
||||
// } catch (e) {
|
||||
// final message = e.toString();
|
||||
|
||||
// if (message.contains('Reason: double spend')) {
|
||||
// throw DoubleSpendException();
|
||||
// }
|
||||
|
||||
// rethrow;
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
//import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart';
|
||||
import 'package:cw_core/crypto_currency.dart';
|
||||
import 'package:cw_core/monero_amount_format.dart';
|
||||
import 'package:cw_zano/api/balance_list.dart';
|
||||
|
||||
//Future<void> updateZanoRate(FiatConversionStore fiatConversionStore) async {
|
||||
// final rate = getRate();
|
||||
// final base = rate.firstWhere((row) => row.getAssetType() == 'XUSD', orElse: () => null);
|
||||
// rate.forEach((row) {
|
||||
// final cur = CryptoCurrency.fromString(row.getAssetType());
|
||||
// final baseRate = moneroAmountToDouble(amount: base.getRate());
|
||||
// final rowRate = moneroAmountToDouble(amount: row.getRate());
|
||||
// fiatConversionStore.prices[cur] = baseRate * rowRate;
|
||||
// });
|
||||
//}
|
|
@ -1,89 +0,0 @@
|
|||
import 'package:mobx/mobx.dart';
|
||||
import 'package:cw_core/account.dart';
|
||||
import 'package:cw_core/account_list.dart';
|
||||
import 'package:cw_zano/api/account_list.dart' as account_list;
|
||||
|
||||
//part 'zano_account_list.g.dart';
|
||||
/*
|
||||
class ZanoAccountList = ZanoAccountListBase with _$ZanoAccountList;
|
||||
|
||||
abstract class ZanoAccountListBase extends AccountList<Account> with Store {
|
||||
ZanoAccountListBase.simple()
|
||||
: accounts = ObservableList<Account>(),
|
||||
_isRefreshing = false,
|
||||
_isUpdating = false {}
|
||||
|
||||
ZanoAccountListBase()
|
||||
: accounts = ObservableList<Account>(),
|
||||
_isRefreshing = false,
|
||||
_isUpdating = false {
|
||||
refresh();
|
||||
}
|
||||
|
||||
@override
|
||||
@observable
|
||||
ObservableList<Account> accounts;
|
||||
bool _isRefreshing;
|
||||
bool _isUpdating;
|
||||
|
||||
@override
|
||||
void update() async {
|
||||
if (_isUpdating) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
_isUpdating = true;
|
||||
refresh();
|
||||
final accounts = getAll();
|
||||
|
||||
if (accounts.isNotEmpty) {
|
||||
this.accounts.clear();
|
||||
this.accounts.addAll(accounts);
|
||||
}
|
||||
|
||||
_isUpdating = false;
|
||||
} catch (e) {
|
||||
_isUpdating = false;
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
List<Account> getAll() => account_list
|
||||
.getAllAccount()
|
||||
.map((accountRow) =>
|
||||
Account(id: accountRow.getId(), label: accountRow.getLabel()))
|
||||
.toList();
|
||||
|
||||
@override
|
||||
Future<void> addAccount({required String label}) async {
|
||||
await account_list.addAccount(label: label);
|
||||
update();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> setLabelAccount(
|
||||
{required int accountIndex, required String label}) async {
|
||||
await account_list.setLabelForAccount(
|
||||
accountIndex: accountIndex, label: label);
|
||||
update();
|
||||
}
|
||||
|
||||
@override
|
||||
void refresh() {
|
||||
/**if (_isRefreshing) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
_isRefreshing = true;
|
||||
account_list.refreshAccounts();
|
||||
_isRefreshing = false;
|
||||
} catch (e) {
|
||||
_isRefreshing = false;
|
||||
print(e);
|
||||
rethrow;
|
||||
}
|
||||
}*/
|
||||
}*/
|
|
@ -1,23 +1,18 @@
|
|||
import 'package:cw_core/balance.dart';
|
||||
import 'package:cw_core/crypto_currency.dart';
|
||||
import 'package:cw_core/monero_amount_format.dart';
|
||||
import 'package:cw_core/monero_balance.dart';
|
||||
import 'package:cw_zano/api/balance_list.dart';
|
||||
import 'package:cw_zano/api/structs/zano_balance_row.dart';
|
||||
|
||||
class ZanoBalance extends Balance {
|
||||
final int total;
|
||||
final int unlocked;
|
||||
ZanoBalance({required this.total, required this.unlocked}): super(unlocked, 0);
|
||||
|
||||
ZanoBalance({required this.total, required this.unlocked}): super(unlocked, total-unlocked);
|
||||
|
||||
@override
|
||||
String get formattedAdditionalBalance => moneroAmountToString(amount: additional);
|
||||
String get formattedAdditionalBalance => moneroAmountToString(amount: total-unlocked);
|
||||
|
||||
@override
|
||||
String get formattedAvailableBalance => moneroAmountToString(amount: unlocked);
|
||||
|
||||
@override
|
||||
String get formattedFrozenBalance => total == unlocked ? '' : moneroAmountToString(amount: total - unlocked);
|
||||
String get formattedFrozenBalance => '';
|
||||
|
||||
}
|
||||
|
|
|
@ -1,88 +0,0 @@
|
|||
import 'package:cw_zano/api/structs/subaddress_row.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:mobx/mobx.dart';
|
||||
import 'package:cw_zano/api/subaddress_list.dart' as subaddress_list;
|
||||
import 'package:cw_core/subaddress.dart';
|
||||
|
||||
//part 'zano_subaddress_list.g.dart';
|
||||
|
||||
/*class ZanoSubaddressList = ZanoSubaddressListBase with _$ZanoSubaddressList;
|
||||
|
||||
abstract class ZanoSubaddressListBase with Store {
|
||||
ZanoSubaddressListBase()
|
||||
: _isRefreshing = false,
|
||||
_isUpdating = false,
|
||||
subaddresses = ObservableList<Subaddress>();
|
||||
|
||||
@observable
|
||||
ObservableList<Subaddress> subaddresses;
|
||||
|
||||
bool _isRefreshing;
|
||||
bool _isUpdating;
|
||||
|
||||
void update({required int accountIndex}) {
|
||||
if (_isUpdating) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
_isUpdating = true;
|
||||
refresh(accountIndex: accountIndex);
|
||||
subaddresses.clear();
|
||||
subaddresses.addAll(getAll());
|
||||
_isUpdating = false;
|
||||
} catch (e) {
|
||||
_isUpdating = false;
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
List<Subaddress> getAll() {
|
||||
var subaddresses = subaddress_list.getAllSubaddresses();
|
||||
|
||||
if (subaddresses.length > 2) {
|
||||
final primary = subaddresses.first;
|
||||
final rest = subaddresses.sublist(1).reversed;
|
||||
subaddresses = [primary] + rest.toList();
|
||||
}
|
||||
|
||||
return subaddresses
|
||||
.map((subaddressRow) => Subaddress(
|
||||
id: subaddressRow.getId(),
|
||||
address: subaddressRow.getAddress(),
|
||||
label: subaddressRow.getLabel()))
|
||||
.toList();
|
||||
}
|
||||
|
||||
Future<void> addSubaddress(
|
||||
{required int accountIndex, required String label}) async {
|
||||
await subaddress_list.addSubaddress(
|
||||
accountIndex: accountIndex, label: label);
|
||||
update(accountIndex: accountIndex);
|
||||
}
|
||||
|
||||
Future<void> setLabelSubaddress(
|
||||
{required int accountIndex,
|
||||
required int addressIndex,
|
||||
required String label}) async {
|
||||
await subaddress_list.setLabelForSubaddress(
|
||||
accountIndex: accountIndex, addressIndex: addressIndex, label: label);
|
||||
update(accountIndex: accountIndex);
|
||||
}
|
||||
|
||||
void refresh({required int accountIndex}) {
|
||||
if (_isRefreshing) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
_isRefreshing = true;
|
||||
subaddress_list.refreshSubaddresses(accountIndex: accountIndex);
|
||||
_isRefreshing = false;
|
||||
} on PlatformException catch (e) {
|
||||
_isRefreshing = false;
|
||||
print(e);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
}*/
|
|
@ -1,8 +0,0 @@
|
|||
class ZanoTransactionCreationException implements Exception {
|
||||
ZanoTransactionCreationException(this.message);
|
||||
|
||||
final String message;
|
||||
|
||||
@override
|
||||
String toString() => message;
|
||||
}
|
|
@ -1,11 +1,8 @@
|
|||
import 'package:cw_core/transaction_info.dart';
|
||||
import 'package:cw_core/monero_amount_format.dart';
|
||||
import 'package:cw_zano/api/model/history.dart';
|
||||
import 'package:cw_zano/api/structs/transaction_info_row.dart';
|
||||
import 'package:cw_core/parseBoolFromString.dart';
|
||||
import 'package:cw_core/transaction_direction.dart';
|
||||
import 'package:cw_core/format_amount.dart';
|
||||
import 'package:cw_zano/api/transaction_history.dart';
|
||||
import 'package:cw_core/monero_amount_format.dart';
|
||||
import 'package:cw_core/transaction_direction.dart';
|
||||
import 'package:cw_core/transaction_info.dart';
|
||||
import 'package:cw_zano/api/model/history.dart';
|
||||
|
||||
class ZanoTransactionInfo extends TransactionInfo {
|
||||
ZanoTransactionInfo(
|
||||
|
|
|
@ -14,12 +14,8 @@ import 'package:cw_core/transaction_priority.dart';
|
|||
import 'package:cw_core/wallet_base.dart';
|
||||
import 'package:cw_core/wallet_info.dart';
|
||||
import 'package:cw_zano/api/calls.dart' as calls;
|
||||
import 'package:cw_zano/api/model/destination.dart';
|
||||
import 'package:cw_zano/api/model/history.dart';
|
||||
import 'package:cw_zano/api/model/transfer_params.dart';
|
||||
import 'package:cw_zano/api/model/zano_wallet_keys.dart';
|
||||
import 'package:cw_zano/api/structs/pending_transaction.dart';
|
||||
//import 'package:cw_zano/wallet.dart';
|
||||
import 'package:cw_zano/api/wallet.dart' as zano_wallet;
|
||||
import 'package:cw_zano/api/zano_api.dart';
|
||||
import 'package:cw_zano/pending_zano_transaction.dart';
|
||||
|
@ -175,8 +171,8 @@ abstract class ZanoWalletBase
|
|||
final address = output.isParsedAddress && (output.extractedAddress?.isNotEmpty ?? false)
|
||||
? output.extractedAddress!
|
||||
: output.address;
|
||||
final amount = output.sendAll ? null : output.cryptoAmount!.replaceAll(',', '.');
|
||||
final int? formattedAmount = output.sendAll ? null : output.formattedCryptoAmount;
|
||||
final stringAmount = output.sendAll ? null : output.cryptoAmount!.replaceAll(',', '.');
|
||||
//final int? formattedAmount = output.sendAll ? null : output.formattedCryptoAmount;
|
||||
final fee = calculateEstimatedFee(creds.priority);
|
||||
// final result = await calls.transfer(
|
||||
// hWallet,
|
||||
|
@ -195,10 +191,12 @@ abstract class ZanoWalletBase
|
|||
// pushPayer: false,
|
||||
// hideReceiver: false,
|
||||
// ));
|
||||
int iAmount = (double.parse(amount!) * pow(10, 12)).toInt();
|
||||
final description = PendingTransactionDescription(
|
||||
amount: iAmount, fee: fee, hash: 'fade', pointerAddress: 0);
|
||||
final transaction = PendingZanoTransaction(description, CryptoCurrency.zano);
|
||||
final intAmount = (double.parse(stringAmount!) * pow(10, 12)).toInt();
|
||||
// final description = PendingTransactionDescription(
|
||||
// amount: iAmount, fee: fee, hash: '', pointerAddress: 0);
|
||||
final transaction = PendingZanoTransaction(fee: fee, intAmount: intAmount,
|
||||
hWallet: hWallet, address: address, assetId: assetId,
|
||||
comment: output.note ?? '');
|
||||
return transaction;
|
||||
|
||||
/*final _credentials = credentials as ZanoTransactionCreationCredentials;
|
||||
|
|
|
@ -1,9 +1,5 @@
|
|||
import 'package:cw_core/wallet_addresses.dart';
|
||||
import 'package:cw_core/wallet_info.dart';
|
||||
import 'package:cw_core/account.dart';
|
||||
import 'package:cw_zano/zano_account_list.dart';
|
||||
import 'package:cw_zano/zano_subaddress_list.dart';
|
||||
import 'package:cw_core/subaddress.dart';
|
||||
import 'package:mobx/mobx.dart';
|
||||
|
||||
part 'zano_wallet_addresses.g.dart';
|
||||
|
|
|
@ -1,24 +1,21 @@
|
|||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:cw_core/crypto_currency.dart';
|
||||
import 'package:cw_core/node.dart';
|
||||
import 'package:cw_core/wallet_base.dart';
|
||||
import 'package:cw_core/monero_wallet_utils.dart';
|
||||
import 'package:cw_zano/api/model/create_wallet_result.dart';
|
||||
import 'package:cw_zano/new_zano_wallet.dart';
|
||||
import 'package:cw_zano/zano_balance.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
import 'package:cw_zano/api/wallet_manager.dart' as zano_wallet_manager;
|
||||
import 'package:cw_zano/api/wallet.dart' as zano_wallet;
|
||||
import 'package:cw_zano/api/calls.dart' as calls;
|
||||
import 'package:cw_zano/api/exceptions/wallet_opening_exception.dart';
|
||||
import 'package:cw_zano/zano_wallet.dart';
|
||||
import 'package:cw_core/wallet_credentials.dart';
|
||||
import 'package:cw_core/wallet_service.dart';
|
||||
import 'package:cw_core/pathForWallet.dart';
|
||||
import 'package:cw_core/wallet_base.dart';
|
||||
import 'package:cw_core/wallet_credentials.dart';
|
||||
import 'package:cw_core/wallet_info.dart';
|
||||
import 'package:cw_core/wallet_service.dart';
|
||||
import 'package:cw_core/wallet_type.dart';
|
||||
import 'package:cw_zano/api/calls.dart' as calls;
|
||||
import 'package:cw_zano/api/model/create_wallet_result.dart';
|
||||
import 'package:cw_zano/api/wallet_manager.dart' as zano_wallet_manager;
|
||||
import 'package:cw_zano/zano_balance.dart';
|
||||
import 'package:cw_zano/zano_wallet.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
import 'package:mobx/mobx.dart';
|
||||
|
||||
class ZanoNewWalletCredentials extends WalletCredentials {
|
||||
|
@ -34,11 +31,6 @@ class ZanoRestoreWalletFromSeedCredentials extends WalletCredentials {
|
|||
final String mnemonic;
|
||||
}
|
||||
|
||||
class ZanoWalletLoadingException implements Exception {
|
||||
@override
|
||||
String toString() => 'Failure to load the wallet.';
|
||||
}
|
||||
|
||||
class ZanoRestoreWalletFromKeysCredentials extends WalletCredentials {
|
||||
ZanoRestoreWalletFromKeysCredentials(
|
||||
{required String name,
|
||||
|
@ -91,9 +83,8 @@ class ZanoWalletService extends WalletService<ZanoNewWalletCredentials,
|
|||
final wallet = ZanoWallet(credentials.walletInfo!);
|
||||
await wallet.connectToNode(node: Node());
|
||||
final path = await pathForWallet(name: credentials.name, type: getType());
|
||||
final result = await zano_wallet_manager.createWallet(
|
||||
final result = calls.createWallet(
|
||||
language: "", path: path, password: credentials.password!);
|
||||
print("create wallet result $result");
|
||||
final map = json.decode(result) as Map<String, dynamic>;
|
||||
if (map['result'] != null) {
|
||||
final createWalletResult =
|
||||
|
|
|
@ -30,7 +30,7 @@ class SeedValidator extends Validator<MnemonicItem> {
|
|||
case WalletType.haven:
|
||||
return haven!.getMoneroWordList(language);
|
||||
case WalletType.zano:
|
||||
return zano!.getMoneroWordList(language);
|
||||
return zano!.getWordList(language);
|
||||
case WalletType.ethereum:
|
||||
return ethereum!.getEthereumWordList(language);
|
||||
case WalletType.dummy:
|
||||
|
|
|
@ -123,7 +123,7 @@ abstract class TransactionDetailsViewModelBase with Store {
|
|||
case WalletType.ethereum:
|
||||
return 'https://etherscan.io/tx/${txId}';
|
||||
case WalletType.zano:
|
||||
return 'https://example.com/${txId}';
|
||||
return 'https://testnet-explorer.zano.org/transaction/${txId}';
|
||||
case WalletType.dummy:
|
||||
return 'https://example.com/${txId}';
|
||||
default:
|
||||
|
|
|
@ -106,7 +106,7 @@ Future<String?> create(String name) async {
|
|||
credentials.password = password;
|
||||
await keyService.saveWalletPassword(password: password, walletName: credentials.name);
|
||||
debugPrint('path $path password $password');
|
||||
final result = zano_wallet_manager.createWalletSync(path: path, password: password, language: '');
|
||||
final result = calls.createWallet(path: path, password: password, language: '');
|
||||
debugPrint('create result $result');
|
||||
return _parseResult(result);
|
||||
}
|
||||
|
|
|
@ -115,31 +115,9 @@ class CWZano extends Zano {
|
|||
}
|
||||
|
||||
@override
|
||||
List<String> getMoneroWordList(String language) {
|
||||
switch (language.toLowerCase()) {
|
||||
case 'english':
|
||||
return EnglishMnemonics.words;
|
||||
case 'chinese (simplified)':
|
||||
return ChineseSimplifiedMnemonics.words;
|
||||
case 'dutch':
|
||||
return DutchMnemonics.words;
|
||||
case 'german':
|
||||
return GermanMnemonics.words;
|
||||
case 'japanese':
|
||||
return JapaneseMnemonics.words;
|
||||
case 'portuguese':
|
||||
return PortugueseMnemonics.words;
|
||||
case 'russian':
|
||||
return RussianMnemonics.words;
|
||||
case 'spanish':
|
||||
return SpanishMnemonics.words;
|
||||
case 'french':
|
||||
return FrenchMnemonics.words;
|
||||
case 'italian':
|
||||
return ItalianMnemonics.words;
|
||||
default:
|
||||
return EnglishMnemonics.words;
|
||||
}
|
||||
List<String> getWordList(String language) {
|
||||
assert(language.toLowerCase() == LanguageList.english.toLowerCase());
|
||||
return EnglishMnemonics.words;
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -267,7 +245,7 @@ class CWZano extends Zano {
|
|||
return asset;
|
||||
}
|
||||
|
||||
@override
|
||||
List<AssetRate> getAssetRate() =>
|
||||
getRate().map((rate) => AssetRate(rate.getAssetType(), rate.getRate())).toList();
|
||||
// @override
|
||||
// List<AssetRate> getAssetRate() =>
|
||||
// getRate().map((rate) => AssetRate(rate.getAssetType(), rate.getRate())).toList();
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import 'package:cw_zano/new_zano_wallet.dart';
|
||||
import 'package:cake_wallet/utils/language_list.dart';
|
||||
import 'package:mobx/mobx.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:cw_core/wallet_credentials.dart';
|
||||
|
@ -22,15 +22,6 @@ import 'package:cw_zano/zano_transaction_history.dart';
|
|||
import 'package:cw_core/account.dart' as monero_account;
|
||||
import 'package:cw_zano/api/wallet.dart' as monero_wallet_api;
|
||||
import 'package:cw_zano/mnemonics/english.dart';
|
||||
import 'package:cw_zano/mnemonics/chinese_simplified.dart';
|
||||
import 'package:cw_zano/mnemonics/dutch.dart';
|
||||
import 'package:cw_zano/mnemonics/german.dart';
|
||||
import 'package:cw_zano/mnemonics/japanese.dart';
|
||||
import 'package:cw_zano/mnemonics/russian.dart';
|
||||
import 'package:cw_zano/mnemonics/spanish.dart';
|
||||
import 'package:cw_zano/mnemonics/portuguese.dart';
|
||||
import 'package:cw_zano/mnemonics/french.dart';
|
||||
import 'package:cw_zano/mnemonics/italian.dart';
|
||||
import 'package:cw_zano/zano_transaction_creation_credentials.dart';
|
||||
import 'package:cw_zano/api/balance_list.dart';
|
||||
|
||||
|
@ -111,7 +102,7 @@ abstract class Zano {
|
|||
TransactionPriority getDefaultTransactionPriority();
|
||||
TransactionPriority deserializeMoneroTransactionPriority({required int raw});
|
||||
List<TransactionPriority> getTransactionPriorities();
|
||||
List<String> getMoneroWordList(String language);
|
||||
List<String> getWordList(String language);
|
||||
|
||||
WalletCredentials createZanoRestoreWalletFromKeysCredentials({
|
||||
required String name,
|
||||
|
@ -134,7 +125,7 @@ abstract class Zano {
|
|||
int getTransactionInfoAccountId(TransactionInfo tx);
|
||||
WalletService createZanoWalletService(Box<WalletInfo> walletInfoSource);
|
||||
CryptoCurrency assetOfTransaction(TransactionInfo tx);
|
||||
List<AssetRate> getAssetRate();
|
||||
// List<AssetRate> getAssetRate();
|
||||
}
|
||||
|
||||
// abstract class MoneroSubaddressList {
|
||||
|
|
Loading…
Reference in a new issue