diff --git a/cw_decred/lib/api/libdcrwallet.dart b/cw_decred/lib/api/libdcrwallet.dart index 2166a7f10..ad9d66122 100644 --- a/cw_decred/lib/api/libdcrwallet.dart +++ b/cw_decred/lib/api/libdcrwallet.dart @@ -239,3 +239,28 @@ String signMessage(Map<String, String> args) { ); return res.payload; } + +String? newExternalAddress(String walletName) { + final cName = walletName.toCString(); + final res = executePayloadFn( + fn: () => dcrwalletApi.newExternalAddress(cName), + ptrsToFree: [cName], + skipErrorCheck: true, // errCode is checked below, before checking err + ); + if (res.errCode == ErrCodeNotSynced) { + // Wallet is not synced. We do not want to give out a used address so give + // nothing. + return null; + } + checkErr(res.err); + return res.payload; +} + +String addresses(String walletName) { + final cName = walletName.toCString(); + final res = executePayloadFn( + fn: () => dcrwalletApi.addresses(cName), + ptrsToFree: [cName], + ); + return res.payload; +} diff --git a/cw_decred/lib/wallet_addresses.dart b/cw_decred/lib/wallet_addresses.dart index e46628cf8..dc96a3846 100644 --- a/cw_decred/lib/wallet_addresses.dart +++ b/cw_decred/lib/wallet_addresses.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:cw_core/wallet_addresses.dart'; import 'package:cw_core/wallet_info.dart'; import 'package:cw_decred/api/libdcrwallet.dart' as libdcrwallet; @@ -11,13 +13,13 @@ class DecredWalletAddresses extends WalletAddresses { } String generateNewAddress() { - // TODO: generate new external address with libdcrwallet. - return "DsT4qJPPaYEuQRimfgvSKxKH3paysn1x3Nt"; + return libdcrwallet.newExternalAddress(walletInfo.name) ?? ''; } List<String> addresses() { - final currentAddress = libdcrwallet.currentReceiveAddress(walletInfo.name); - return currentAddress == null ? [] : [currentAddress]; + final res = libdcrwallet.addresses(walletInfo.name); + final addrs = (json.decode(res) as List<dynamic>).cast<String>(); + return addrs; } @override