From c8aa159f69dd1c29b01a2c13a92ffe351ca0cc92 Mon Sep 17 00:00:00 2001 From: Matthew Fosse <matt@fosse.co> Date: Thu, 5 Sep 2024 11:02:16 -0700 Subject: [PATCH] [skip ci] wip --- cw_bitcoin/lib/litecoin_wallet_addresses.dart | 38 ++++++------------- .../com/cakewallet/mweb/CwMwebPlugin.kt | 6 +-- cw_mweb/ios/Classes/CwMwebPlugin.swift | 13 +------ cw_mweb/lib/cw_mweb.dart | 3 +- cw_mweb/lib/cw_mweb_method_channel.dart | 2 +- cw_mweb/lib/cw_mweb_platform_interface.dart | 4 +- 6 files changed, 22 insertions(+), 44 deletions(-) diff --git a/cw_bitcoin/lib/litecoin_wallet_addresses.dart b/cw_bitcoin/lib/litecoin_wallet_addresses.dart index ed321841e..dcdf4ca1b 100644 --- a/cw_bitcoin/lib/litecoin_wallet_addresses.dart +++ b/cw_bitcoin/lib/litecoin_wallet_addresses.dart @@ -1,3 +1,5 @@ +import 'dart:typed_data'; + import 'package:bech32/bech32.dart'; import 'package:bitcoin_base/bitcoin_base.dart'; import 'package:blockchain_utils/bech32/bech32_base.dart'; @@ -50,32 +52,18 @@ abstract class LitecoinWalletAddressesBase extends ElectrumWalletAddresses with mwebHd.childKey(Bip32KeyIndex(0x80000001)).publicKey.pubKey.compressed; List<String> mwebAddrs = []; - List<String> oldMwebAddrs = []; Future<void> topUpMweb(int index) async { - final stub = await CwMweb.stub(); + // generate up to index + 1000 addresses: while (mwebAddrs.length - index < 1000) { final length = mwebAddrs.length; - final resp = await stub.addresses(AddressRequest( - fromIndex: length, - toIndex: index + 1000, - scanSecret: scanSecret, - spendPubkey: spendPubkey, - )); - if (mwebAddrs.length == length) { - mwebAddrs.addAll(resp.address); - } + final address = await CwMweb.address( + Uint8List.fromList(scanSecret), + Uint8List.fromList(spendPubkey), + length, + ); + mwebAddrs.add(address!); } - - // for (int i = 0; i < 10; i++) { - // final address = await CwMweb.address( - // hex.encode(scanSecret), - // hex.encode(spendPubkey), - // index + 1000, - // ); - // mwebAddrs.add(address!); - // } - // print("old function: ${oldMwebAddrs.first} new function!: ${mwebAddrs.first}"); } @override @@ -84,7 +72,7 @@ abstract class LitecoinWalletAddressesBase extends ElectrumWalletAddresses with required Bip32Slip10Secp256k1 hd, BitcoinAddressType? addressType, }) { - if (addressType == SegwitAddresType.mweb && mwebEnabled) { + if (addressType == SegwitAddresType.mweb) { topUpMweb(index); return hd == sideHd ? mwebAddrs[0] : mwebAddrs[index + 1]; } @@ -97,11 +85,7 @@ abstract class LitecoinWalletAddressesBase extends ElectrumWalletAddresses with required Bip32Slip10Secp256k1 hd, BitcoinAddressType? addressType, }) async { - // if mweb isn't enabled we'll just return the regular address type which does effectively nothing - // sort of a hack but easier than trying to pull the mweb setting into the electrum_wallet_addresses initialization code - // (we want to avoid initializing the mweb.stub() if it's not enabled or we'd be starting the whole server for no reason and it's slow) - // TODO: find a way to do address generation without starting the whole mweb server - if (addressType == SegwitAddresType.mweb && mwebEnabled) { + if (addressType == SegwitAddresType.mweb) { await topUpMweb(index); } return getAddress(index: index, hd: hd, addressType: addressType); diff --git a/cw_mweb/android/src/main/kotlin/com/cakewallet/mweb/CwMwebPlugin.kt b/cw_mweb/android/src/main/kotlin/com/cakewallet/mweb/CwMwebPlugin.kt index fea382487..47f6362e6 100644 --- a/cw_mweb/android/src/main/kotlin/com/cakewallet/mweb/CwMwebPlugin.kt +++ b/cw_mweb/android/src/main/kotlin/com/cakewallet/mweb/CwMwebPlugin.kt @@ -39,10 +39,10 @@ class CwMwebPlugin: FlutterPlugin, MethodCallHandler { port = null result.success(null) } else if (call.method == "address") { - val scanSecret: String = call.argument<String>("scanSecret") ?: "" - val spendPub: String = call.argument<String>("spendPub") ?: "" + val scanSecret: ByteArray = call.argument<ByteArray>("scanSecret") ?: ByteArray(0) + val spendPub: ByteArray = call.argument<ByteArray>("spendPub") ?: ByteArray(0) val index: Int = call.argument<Int>("index") ?: 0 - val res = Mwebd.addressIndex(scanSecret, spendPub, index.toString()) + val res = Mwebd.addressIndex(scanSecret, spendPub, index.toLong()) result.success(res) } else { result.notImplemented() diff --git a/cw_mweb/ios/Classes/CwMwebPlugin.swift b/cw_mweb/ios/Classes/CwMwebPlugin.swift index e68344a4b..eb79d3e32 100644 --- a/cw_mweb/ios/Classes/CwMwebPlugin.swift +++ b/cw_mweb/ios/Classes/CwMwebPlugin.swift @@ -30,11 +30,11 @@ public static func register(with registrar: FlutterPluginRegistrar) { result(nil) break case "address": - let args = call.arguments as? [String: String] + let args = call.arguments as? [String: Any] let scanSecret = args?["scanSecret"] let spendPub = args?["spendPub"] let index = args?["index"] - result(address(scanSecret, spendPub, index)) + result(MwebdAddressIndex(scanSecret, spendPub, index)) break default: result(FlutterMethodNotImplemented) @@ -77,15 +77,6 @@ public static func register(with registrar: FlutterPluginRegistrar) { CwMwebPlugin.port = 0 } - private func address(_ scanSecret: String?, _ spendPub: String?, _ index: Int?) -> String? { - guard let scanSecret = scanSecret, let spendPub = spendPub, let index = index else { - print("Invalid arguments for address function") - return nil - } - - return MwebdAddressIndex(scanSecret, spendPub, UInt32(index)) - } - deinit { stopServer() } diff --git a/cw_mweb/lib/cw_mweb.dart b/cw_mweb/lib/cw_mweb.dart index 46ae512a0..e71ddde97 100644 --- a/cw_mweb/lib/cw_mweb.dart +++ b/cw_mweb/lib/cw_mweb.dart @@ -1,4 +1,5 @@ import 'dart:io'; +import 'dart:typed_data'; import 'package:grpc/grpc.dart'; import 'package:path_provider/path_provider.dart'; @@ -53,7 +54,7 @@ class CwMweb { await cleanup(); } - static Future<String?> address(String scanSecret, String spendPub, int index) async { + static Future<String?> address(Uint8List scanSecret, Uint8List spendPub, int index) async { // try { // return (await CwMwebPlatform.instance.address(scan, spendPub, index))!; // } catch (e) { diff --git a/cw_mweb/lib/cw_mweb_method_channel.dart b/cw_mweb/lib/cw_mweb_method_channel.dart index 6f7ad2279..70e4a1789 100644 --- a/cw_mweb/lib/cw_mweb_method_channel.dart +++ b/cw_mweb/lib/cw_mweb_method_channel.dart @@ -21,7 +21,7 @@ class MethodChannelCwMweb extends CwMwebPlatform { } @override - Future<String?> address(String scanSecret, String spendPub, int index) async { + Future<String?> address(Uint8List scanSecret, Uint8List spendPub, int index) async { final result = await methodChannel.invokeMethod<String>('address', { 'scanSecret': scanSecret, 'spendPub': spendPub, diff --git a/cw_mweb/lib/cw_mweb_platform_interface.dart b/cw_mweb/lib/cw_mweb_platform_interface.dart index a63319341..8cc80f3e9 100644 --- a/cw_mweb/lib/cw_mweb_platform_interface.dart +++ b/cw_mweb/lib/cw_mweb_platform_interface.dart @@ -1,3 +1,5 @@ +import 'dart:typed_data'; + import 'package:plugin_platform_interface/plugin_platform_interface.dart'; import 'cw_mweb_method_channel.dart'; @@ -31,7 +33,7 @@ abstract class CwMwebPlatform extends PlatformInterface { throw UnimplementedError('stop() has not been implemented.'); } - Future<String?> address(String scanSecret, String spendPub, int index) { + Future<String?> address(Uint8List scanSecret, Uint8List spendPub, int index) { throw UnimplementedError('address(int) has not been implemented.'); } }