fix: Issue with the privateKey of Solana wallets being different accross various apps (#1400)
Adegoke David committed
Apr 24, 2024 at 03:04 UTC
65799a8764b339c2db329400d74bd7462632e63d
1 file changed
+14
-3
cw_solana/lib/solana_wallet.dart
+14
-3
@@ -27,6 +27,7 @@ import 'package:hex/hex.dart';
27
import 'package:hive/hive.dart';
28
import 'package:mobx/mobx.dart';
29
import 'package:shared_preferences/shared_preferences.dart';
30
+import 'package:solana/base58.dart';
31
import 'package:solana/metaplex.dart' as metaplex;
32
import 'package:solana/solana.dart';
33
@@ -108,7 +109,17 @@ abstract class SolanaWalletBase
109
String? get seed => _mnemonic;
110
111
@override
111
- String get privateKey => HEX.encode(_keyPairData!.bytes);
112
+ String get privateKey {
113
+ final privateKeyBytes = _keyPairData!.bytes;
114
+
115
+ final publicKeyBytes = _keyPairData!.publicKey.bytes;
116
+
117
+ final encodedBytes = privateKeyBytes + publicKeyBytes;
118
+
119
+ final privateKey = base58encode(encodedBytes);
120
+
121
+ return privateKey;
122
+ }
123
124
Future<void> init() async {
125
final boxName = "${walletInfo.name.replaceAll(" ", "_")}_${SPLToken.boxName}";
@@ -135,8 +146,8 @@ abstract class SolanaWalletBase
146
assert(mnemonic != null || privateKey != null);
147
148
if (privateKey != null) {
138
- final privateKeyBytes = HEX.decode(privateKey);
139
- return await Wallet.fromPrivateKeyBytes(privateKey: privateKeyBytes);
149
+ final privateKeyBytes = base58decode(privateKey);
150
+ return await Wallet.fromPrivateKeyBytes(privateKey: privateKeyBytes.take(32).toList());
151
}
152
153
return Wallet.fromMnemonic(mnemonic!, account: 0, change: 0);