Skip to content

Commit

Permalink
remove spvwallet, make some libdcrwallet fns async, light refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
itswisdomagain committed Jan 17, 2024
1 parent 86a59ad commit 61f398c
Show file tree
Hide file tree
Showing 13 changed files with 288 additions and 317 deletions.
108 changes: 108 additions & 0 deletions cw_decred/lib/api/libdcrwallet.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
import 'dart:convert';
import 'dart:ffi';
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:cw_decred/api/libdcrwallet_bindings.dart';
import 'package:cw_decred/api/util.dart';

final String libraryName =
Platform.isAndroid || Platform.isLinux // TODO: Linux.
? 'libdcrwallet.so'
: 'cw_decred.framework/cw_decred';

final dcrwalletApi = libdcrwallet(DynamicLibrary.open(libraryName));

/// initLibdcrwallet initializes libdcrwallet using the provided logDir and gets
/// it ready for use. This must be done before attempting to create, load or use
/// a wallet.
void initLibdcrwallet(String logDir) {
final cLogDIr = logDir.toCString();
handleErrorAndPointers(
fn: () => dcrwalletApi.initialize(cLogDIr),
ptrsToFree: [cLogDIr],
);
}

/// createWalletAsync calls the libdcrwallet's createWallet function
/// asynchronously.
Future<void> createWalletAsync(
{required String name, required String dataDir, required String password}) {
final args = <String, String>{
"name": name,
"dataDir": dataDir,
"password": password,
};
return compute(createWalletSync, args);
}

/// createWalletSync calls the libdcrwallet's createWallet function
/// synchronously.
void createWalletSync(Map<String, String> args) {
final name = args["name"]!.toCString();
final dataDir = args["dataDir"]!.toCString();
final password = args["password"]!.toCString();
final network = "testnet".toCString();

handleErrorAndPointers(
fn: () => dcrwalletApi.createWallet(name, dataDir, network, password),
ptrsToFree: [name, dataDir, network, password],
);
}

/// loadWalletAsync calls the libdcrwallet's loadWallet function asynchronously.
Future<void> loadWalletAsync({required String name, required String dataDir}) {
final args = <String, String>{
"name": name,
"dataDir": dataDir,
};
return compute(loadWalletSync, args);
}

/// loadWalletSync calls the libdcrwallet's loadWallet function synchronously.
void loadWalletSync(Map<String, String> args) {
final name = args["name"]!.toCString();
final dataDir = args["dataDir"]!.toCString();
final network = "testnet".toCString();

handleErrorAndPointers(
fn: () => dcrwalletApi.loadWallet(name, dataDir, network),
ptrsToFree: [name, dataDir, network],
);
}

void closeWallet(String walletName) {
// TODO.
}

Future<void> changeWalletPassword(
String walletName, String currentPassword, String newPassword) async {
// TODO.
}

String? walletSeed(String walletName, String walletPassword) {
final cName = walletName.toCString();
final pass = walletPassword.toCString();
final seed = dcrwalletApi.walletSeed(cName, pass);
freePointers([cName, pass]);
return seed.toDartString();
}

String? currentReceiveAddress(String walletName) {
final cName = walletName.toCString();
final currentAddress = dcrwalletApi.currentReceiveAddress(cName);
cName.free();
return currentAddress.toDartString();
}

Map balance(String walletName) {
final cName = walletName.toCString();
final balJson = dcrwalletApi.walletBalance(cName).toDartString();
cName.free();
return jsonDecode(balJson!);
}

int calculateEstimatedFeeWithFeeRate(int feeRate, int amount) {
// Ideally we create a tx with wallet going to this amount and just return
// the fee we get back. TODO.
return 123000;
}
175 changes: 0 additions & 175 deletions cw_decred/lib/api/spvwallet.dart

This file was deleted.

2 changes: 2 additions & 0 deletions cw_decred/lib/balance.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ class DecredBalance extends Balance {
const DecredBalance({required this.confirmed, required this.unconfirmed})
: super(confirmed, unconfirmed);

factory DecredBalance.zero() => DecredBalance(confirmed: 0, unconfirmed: 0);

final int confirmed;
final int unconfirmed;

Expand Down
7 changes: 2 additions & 5 deletions cw_decred/lib/pending_transaction.dart
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
import 'package:cw_core/pending_transaction.dart';
import 'package:cw_decred/amount_format.dart';
import 'package:cw_decred/api/spvwallet.dart';

class DecredPendingTransaction with PendingTransaction {
DecredPendingTransaction(
{required this.spv,
required this.txid,
{required this.txid,
required this.amount,
required this.fee,
required this.rawHex});

final SPVWallet spv;
final int amount;
final int fee;
final String txid;
Expand All @@ -30,6 +27,6 @@ class DecredPendingTransaction with PendingTransaction {

@override
Future<void> commit() async {
this.spv.sendRawTransaction(this.rawHex);
// TODO: Submit rawHex using libdcrwallet.
}
}
Loading

0 comments on commit 61f398c

Please sign in to comment.