Skip to content

Commit 98babac

Browse files
authored
fix: ltc wallets not syncing (address generation issue) (#2676)
* fix: ltc freezing and address generation * revert: go back to network (fixme), feeRatePerKb
1 parent efc99c1 commit 98babac

File tree

12 files changed

+560
-631
lines changed

12 files changed

+560
-631
lines changed

cw_bitcoin/lib/bitcoin_address_record.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,11 @@ class BitcoinAddressRecord extends BaseBitcoinAddressRecord {
9999

100100
String getScriptHash(BasedUtxoNetwork network) {
101101
if (scriptHash != null) return scriptHash!;
102-
scriptHash = BitcoinAddressUtils.scriptHash(address, network: network);
102+
try {
103+
scriptHash = BitcoinAddressUtils.scriptHash(address, network: network);
104+
} catch (e) {
105+
return '';
106+
}
103107
return scriptHash!;
104108
}
105109

cw_bitcoin/lib/electrum_wallet.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2442,6 +2442,7 @@ abstract class ElectrumWalletBase
24422442

24432443
Future<ElectrumBalance> fetchBalances() async {
24442444
final addresses = walletAddresses.allAddresses
2445+
.where((address) => address.address.isNotEmpty)
24452446
.where((address) => RegexUtils.addressTypeFromStr(address.address, network) is! MwebAddress)
24462447
.toList();
24472448
final balanceFutures = <Future<Map<String, dynamic>>>[];

cw_bitcoin/lib/litecoin_wallet.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,9 +185,9 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
185185

186186
final String? scanSecretOverride;
187187
final String? spendPubkeyOverride;
188-
List<int> get scanSecret => scanSecretOverride != null
188+
List<int> get scanSecret => (scanSecretOverride != null && scanSecretOverride?.isNotEmpty == true)
189189
? hex.decode(scanSecretOverride!)
190-
: mwebHd!.childKey(Bip32KeyIndex(0x80000000)).privateKey.privKey.raw;
190+
: mwebHd?.childKey(Bip32KeyIndex(0x80000000)).privateKey.privKey.raw ?? List.filled(32, 0);
191191

192192
List<int> get spendSecret =>
193193
mwebHd?.childKey(Bip32KeyIndex(0x80000001)).privateKey.privKey.raw ?? List.filled(32, 0);

cw_bitcoin/lib/litecoin_wallet_addresses.dart

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,12 @@ abstract class LitecoinWalletAddressesBase extends ElectrumWalletAddresses with
5050
final String? scanSecretOverride;
5151
final String? spendPubkeyOverride;
5252

53-
List<int> get scanSecret => scanSecretOverride != null
53+
List<int> get scanSecret => (scanSecretOverride != null && scanSecretOverride?.isNotEmpty == true)
5454
? hex.decode(scanSecretOverride!)
55-
: mwebHd!.childKey(Bip32KeyIndex(0x80000000)).privateKey.privKey.raw;
56-
List<int> get spendPubkey => spendPubkeyOverride != null
55+
: mwebHd?.childKey(Bip32KeyIndex(0x80000000)).privateKey.privKey.raw ?? List.filled(32, 0);
56+
List<int> get spendPubkey => (spendPubkeyOverride != null && spendPubkeyOverride?.isNotEmpty == true)
5757
? hex.decode(spendPubkeyOverride!)
58-
: mwebHd!.childKey(Bip32KeyIndex(0x80000001)).publicKey.pubKey.compressed;
58+
: mwebHd?.childKey(Bip32KeyIndex(0x80000001)).publicKey.pubKey.compressed ?? List.filled(32, 0);
5959

6060
@override
6161
Future<void> init() async {
@@ -70,10 +70,11 @@ abstract class LitecoinWalletAddressesBase extends ElectrumWalletAddresses with
7070
}
7171

7272
Future<void> ensureMwebAddressUpToIndexExists(int index) async {
73+
printV("aaaaaa");
7374
if (Platform.isLinux || Platform.isMacOS || Platform.isWindows) {
7475
return null;
7576
}
76-
if ((scanSecret.length < 1 || scanSecret.reduce((a, b) => a + b) == 0) ||
77+
if ((scanSecret.length < 1 || scanSecret.reduce((a, b) => a + b) == 0) &&
7778
(spendPubkey.length < 1 || spendPubkey.reduce((a, b) => a + b) == 0)) {
7879
return null;
7980
}
@@ -140,7 +141,7 @@ abstract class LitecoinWalletAddressesBase extends ElectrumWalletAddresses with
140141
}) {
141142
if (addressType == SegwitAddresType.mweb) {
142143
if (mwebAddrs.length == 0) {
143-
return "null";
144+
return "";
144145
}
145146
return hd == sideHd ? mwebAddrs[0] : mwebAddrs[index + 1];
146147
}

cw_mweb/gen-protobuf.sh

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#!/bin/bash
2+
3+
docker run --platform linux/arm64 --rm \
4+
-v "$PWD":/work -w /work dart:2.17 bash -c '
5+
apt-get update &&
6+
apt-get install -y protobuf-compiler &&
7+
dart pub global activate protoc_plugin 20.0.1 &&
8+
export PATH="$PATH:/root/.pub-cache/bin" &&
9+
protoc --dart_out=grpc:./ ./lib/mwebd.proto
10+
'

cw_mweb/go/go.mod

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ module github.com/cake-tech/cake_wallet/cw_mweb/go
22

33
go 1.24.1
44

5-
require github.com/ltcmweb/mwebd v0.1.16
6-
7-
require github.com/ltcmweb/mwebd v0.1.16
5+
require github.com/ltcmweb/mwebd v0.1.17
86

97
require (
108
github.com/Microsoft/go-winio v0.6.2 // indirect
@@ -27,7 +25,7 @@ require (
2725
github.com/kkdai/bstream v1.0.0 // indirect
2826
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
2927
github.com/ltcmweb/coinswapd v0.1.0 // indirect
30-
github.com/ltcmweb/ltcd v0.25.11 // indirect
28+
github.com/ltcmweb/ltcd v0.25.12 // indirect
3129
github.com/ltcmweb/ltcd/btcec/v2 v2.3.3 // indirect
3230
github.com/ltcmweb/ltcd/chaincfg/chainhash v1.0.3 // indirect
3331
github.com/ltcmweb/neutrino v0.17.4 // indirect

cw_mweb/go/go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,14 @@ github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuV
6363
github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
6464
github.com/ltcmweb/coinswapd v0.1.0 h1:M6eoz4g7fDpsQeNA8wWbBh6PY1xykrihyLU44SgljeI=
6565
github.com/ltcmweb/coinswapd v0.1.0/go.mod h1:CY5cVSympaLrMO8fHWXO+e/iuPLs2L0U9daMCRTstEM=
66-
github.com/ltcmweb/ltcd v0.25.11 h1:MI0n/9I0P2Ig+myofegrXXEvh00lY3TUqPk1akYHBxA=
67-
github.com/ltcmweb/ltcd v0.25.11/go.mod h1:jQbvPfnT4bBXJKRwU5SdD9ZUopwmSvhngdjeopv2cIU=
66+
github.com/ltcmweb/ltcd v0.25.12 h1:igeogW2/rQIZ30UxCvd8lNPJuD6++viuRl70Z7xJ9nA=
67+
github.com/ltcmweb/ltcd v0.25.12/go.mod h1:jQbvPfnT4bBXJKRwU5SdD9ZUopwmSvhngdjeopv2cIU=
6868
github.com/ltcmweb/ltcd/btcec/v2 v2.3.3 h1:gJc1ljDPCBtwBKFcC4SW44BFoJqoZzkeagndMYdqKKE=
6969
github.com/ltcmweb/ltcd/btcec/v2 v2.3.3/go.mod h1:NRr2WtpiSiSO29TkdZhbGNRA/Q16DV2eNbORf+M2ykI=
7070
github.com/ltcmweb/ltcd/chaincfg/chainhash v1.0.3 h1:CAPyzHI3bCFRrrVHZkDUR2i3Awj6l/aqAZIEi0E/nfM=
7171
github.com/ltcmweb/ltcd/chaincfg/chainhash v1.0.3/go.mod h1:zB+HhI2IbIwTGpdAhdzpm1GVX4ShcWTgN42+ar9HXrg=
72-
github.com/ltcmweb/mwebd v0.1.16 h1:DaOIp/5TDhcDUxjvnWKHXkr6hF4LHe2bbY8I0zo7m9w=
73-
github.com/ltcmweb/mwebd v0.1.16/go.mod h1:GEhTe4RTG4ImmzsyqCzO2NKK11U2Zgb5+leQnwY+u+4=
72+
github.com/ltcmweb/mwebd v0.1.17 h1:PbYV0NuaWzjj5yAzYxYfEzqeZe54ay5mLz06f14UkJk=
73+
github.com/ltcmweb/mwebd v0.1.17/go.mod h1:qY2DgLYbwOh2GWfW44vV/PfzBN84sR0ulphAr51sAPc=
7474
github.com/ltcmweb/neutrino v0.17.4 h1:ZsguBvicTM5CtZDsKg+OBFuPUCKjfEJ3lRSGXPjF2oM=
7575
github.com/ltcmweb/neutrino v0.17.4/go.mod h1:KktZ+McIwHuTHe0K8JK9Wv4qgv8orkA21a0ZOU4SwJ4=
7676
github.com/ltcmweb/neutrino/cache v1.1.0 h1:C0Qn2p8ogcskRPfrBKPUayjn3m/CUJqI7otopNScvhk=

cw_mweb/go/mweb.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,14 @@ func StartServer(chain *C.char, dataDir *C.char, nodeUri *C.char, errMsg **C.cha
2525
return 0
2626
}
2727

28-
err = server.StartUnix(goDataDir + "/mwebd.sock")
28+
// err = server.StartUnix(goDataDir + "/mwebd.sock")
29+
start, err := server.Start(0)
2930
if err != nil {
3031
*errMsg = C.CString(err.Error())
3132
return 0
3233
}
3334

34-
return 1
35+
return C.int(start)
3536
}
3637

3738
//export StopServer

cw_mweb/lib/cw_mweb.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,7 @@ class CwMweb {
6464
}
6565
printV("Attempting to connect to server on port: $_port");
6666

67-
final address = InternetAddress("${appDir.path}/mwebd.sock", type: InternetAddressType.unix);
68-
_clientChannel = ClientChannel(address, channelShutdownHandler: () {
67+
_clientChannel = ClientChannel('127.0.0.1', port: _port!, channelShutdownHandler: () {
6968
_rpcClient = null;
7069
printV("Channel is shutting down!");
7170
},

0 commit comments

Comments
 (0)