dev
dart 478 lines 14.8 KB
Raw
1 part of 'monero.dart';
2
3 class CWMoneroAccountList extends MoneroAccountList {
4 CWMoneroAccountList(this._wallet);
5
6 final Object _wallet;
7
8 @override
9 @computed
10 ObservableList<Account> get accounts {
11 final moneroWallet = _wallet as MoneroWallet;
12 final accounts = moneroWallet.walletAddresses.accountList.accounts
13 .map((acc) => Account(id: acc.id, label: acc.label, balance: acc.balance))
14 .toList();
15 return ObservableList<Account>.of(accounts);
16 }
17
18 @override
19 void update(Object wallet) {
20 final moneroWallet = wallet as MoneroWallet;
21 moneroWallet.walletAddresses.accountList.update();
22 }
23
24 @override
25 void refresh(Object wallet) {
26 final moneroWallet = wallet as MoneroWallet;
27 moneroWallet.walletAddresses.accountList.refresh();
28 }
29
30 @override
31 List<Account> getAll(Object wallet) {
32 final moneroWallet = wallet as MoneroWallet;
33 return moneroWallet.walletAddresses.accountList
34 .getAll()
35 .map((acc) => Account(id: acc.id, label: acc.label, balance: acc.balance))
36 .toList();
37 }
38
39 @override
40 Future<void> addAccount(Object wallet, {required String label}) async {
41 final moneroWallet = wallet as MoneroWallet;
42 moneroWallet.walletAddresses.accountList.addAccount(label: label);
43 }
44
45 @override
46 Future<void> setLabelAccount(Object wallet,
47 {required int accountIndex, required String label}) async {
48 final moneroWallet = wallet as MoneroWallet;
49 moneroWallet.walletAddresses.accountList
50 .setLabelAccount(accountIndex: accountIndex, label: label);
51 if (accountIndex == moneroWallet.walletAddresses.account?.id) {
52 moneroWallet.walletAddresses.account = monero_account.Account(
53 id: accountIndex, label: label, balance: moneroWallet.walletAddresses.account!.balance);
54 }
55 }
56 }
57
58 class CWMoneroSubaddressList extends MoneroSubaddressList {
59 CWMoneroSubaddressList(this._wallet);
60
61 final Object _wallet;
62
63 @override
64 @computed
65 ObservableList<Subaddress> get subaddresses {
66 final moneroWallet = _wallet as MoneroWallet;
67 final subAddresses = moneroWallet.walletAddresses.subaddressList.subaddresses
68 .map((sub) => Subaddress(
69 id: sub.id,
70 address: sub.address,
71 label: sub.label,
72 received: sub.balance ?? "unknown",
73 txCount: sub.txCount ?? 0,
74 ))
75 .toList();
76 return ObservableList<Subaddress>.of(subAddresses);
77 }
78
79 @override
80 Future<void> update(Object wallet, {required int accountIndex}) async {
81 final moneroWallet = wallet as MoneroWallet;
82 await moneroWallet.walletAddresses.subaddressList.update(accountIndex: accountIndex);
83 }
84
85 @override
86 void refresh(Object wallet, {required int accountIndex}) {
87 final moneroWallet = wallet as MoneroWallet;
88 moneroWallet.walletAddresses.subaddressList.refresh(accountIndex: accountIndex);
89 }
90
91 @override
92 Future<List<Subaddress>> getAll(Object wallet) async {
93 final moneroWallet = wallet as MoneroWallet;
94 return (await moneroWallet.walletAddresses.subaddressList.getAll())
95 .map((sub) => Subaddress(
96 id: sub.id,
97 label: sub.label,
98 address: sub.address,
99 txCount: sub.txCount ?? 0,
100 received: sub.balance ?? 'unknown'))
101 .toList();
102 }
103
104 @override
105 Future<void> addSubaddress(Object wallet,
106 {required int accountIndex, required String label}) async {
107 final moneroWallet = wallet as MoneroWallet;
108 return await moneroWallet.walletAddresses.subaddressList
109 .addSubaddress(accountIndex: accountIndex, label: label);
110 }
111
112 @override
113 Future<void> setLabelSubaddress(Object wallet,
114 {required int accountIndex, required int addressIndex, required String label}) async {
115 final moneroWallet = wallet as MoneroWallet;
116 await moneroWallet.walletAddresses.subaddressList
117 .setLabelSubaddress(accountIndex: accountIndex, addressIndex: addressIndex, label: label);
118 }
119 }
120
121 class CWMoneroWalletDetails extends MoneroWalletDetails {
122 CWMoneroWalletDetails(this._wallet);
123
124 final Object _wallet;
125
126 @computed
127 @override
128 Account get account {
129 final moneroWallet = _wallet as MoneroWallet;
130 final acc = moneroWallet.walletAddresses.account;
131 return Account(id: acc!.id, label: acc.label, balance: acc.balance);
132 }
133
134 @computed
135 @override
136 MoneroBalance get balance {
137 throw Exception('Unimplemented');
138 // return MoneroBalance();
139 //return MoneroBalance(
140 // fullBalance: balance.fullBalance,
141 // unlockedBalance: balance.unlockedBalance);
142 }
143 }
144
145 class CWMonero extends Monero {
146 @override
147 MoneroAccountList getAccountList(Object wallet) => CWMoneroAccountList(wallet);
148
149 @override
150 MoneroSubaddressList getSubaddressList(Object wallet) => CWMoneroSubaddressList(wallet);
151
152 @override
153 TransactionHistoryBase getTransactionHistory(Object wallet) {
154 final moneroWallet = wallet as MoneroWallet;
155 return moneroWallet.transactionHistory;
156 }
157
158 @override
159 MoneroWalletDetails getMoneroWalletDetails(Object wallet) => CWMoneroWalletDetails(wallet);
160
161 @override
162 int getHeightByDate({required DateTime date}) => getMoneroHeigthByDate(date: date);
163
164 @override
165 TransactionPriority getDefaultTransactionPriority() => MoneroTransactionPriority.automatic;
166
167 @override
168 TransactionPriority getMoneroTransactionPrioritySlow() => MoneroTransactionPriority.slow;
169
170 @override
171 TransactionPriority getMoneroTransactionPriorityAutomatic() =>
172 MoneroTransactionPriority.automatic;
173
174 @override
175 TransactionPriority deserializeMoneroTransactionPriority({required int raw}) =>
176 MoneroTransactionPriority.deserialize(raw: raw);
177
178 @override
179 List<TransactionPriority> getTransactionPriorities() => MoneroTransactionPriority.all;
180
181 @override
182 List<String> getMoneroWordList(String language) {
183 if (language.startsWith("POLYSEED_")) {
184 final lang = language.replaceAll("POLYSEED_", "");
185 return PolyseedLang.getByEnglishName(lang).words;
186 }
187 switch (language.toLowerCase()) {
188 case 'english':
189 return EnglishMnemonics.words;
190 case 'chinese (simplified)':
191 return ChineseSimplifiedMnemonics.words;
192 case 'dutch':
193 return DutchMnemonics.words;
194 case 'german':
195 return GermanMnemonics.words;
196 case 'japanese':
197 return JapaneseMnemonics.words;
198 case 'portuguese':
199 return PortugueseMnemonics.words;
200 case 'russian':
201 return RussianMnemonics.words;
202 case 'spanish':
203 return SpanishMnemonics.words;
204 case 'french':
205 return FrenchMnemonics.words;
206 case 'italian':
207 return ItalianMnemonics.words;
208 default:
209 return EnglishMnemonics.words;
210 }
211 }
212
213 @override
214 WalletCredentials createMoneroRestoreWalletFromKeysCredentials(
215 {required String name,
216 required String spendKey,
217 required String viewKey,
218 required String address,
219 required String password,
220 required String language,
221 HardwareWalletType? hardwareWalletType,
222 required int height}) =>
223 MoneroRestoreWalletFromKeysCredentials(
224 name: name,
225 spendKey: spendKey,
226 viewKey: viewKey,
227 address: address,
228 password: password,
229 language: language,
230 hardwareWalletType: hardwareWalletType,
231 height: height);
232
233 @override
234 WalletCredentials createMoneroRestoreWalletFromHardwareCredentials({
235 required String name,
236 required String password,
237 required int height,
238 required HardwareWalletService hardwareWalletService,
239 required String? passphrase,
240 }) =>
241 MoneroRestoreWalletFromHardwareCredentials(
242 name: name,
243 password: password,
244 height: height,
245 hardwareWalletService: hardwareWalletService,
246 passphrase: passphrase,
247 );
248
249 @override
250 WalletCredentials createMoneroRestoreWalletFromSeedCredentials(
251 {required String name,
252 required String password,
253 required String passphrase,
254 required int height,
255 required String mnemonic}) =>
256 MoneroRestoreWalletFromSeedCredentials(
257 name: name,
258 password: password,
259 passphrase: passphrase,
260 height: height,
261 mnemonic: mnemonic);
262
263 @override
264 WalletCredentials createMoneroNewWalletCredentials({
265 required String name,
266 required String language,
267 required int seedType,
268 required String? passphrase,
269 String? password,
270 String? mnemonic,
271 }) =>
272 MoneroNewWalletCredentials(
273 name: name,
274 password: password,
275 language: language,
276 seedType: seedType == 1
277 ? MoneroSeedType.polyseed
278 : (seedType == 3 ? MoneroSeedType.bip39 : MoneroSeedType.legacy),
279 passphrase: passphrase,
280 mnemonic: mnemonic,
281 );
282
283 @override
284 Map<String, String> getKeys(Object wallet) {
285 final moneroWallet = wallet as MoneroWallet;
286 final keys = moneroWallet.keys;
287 return <String, String>{
288 'primaryAddress': keys.primaryAddress,
289 'privateSpendKey': keys.privateSpendKey,
290 'privateViewKey': keys.privateViewKey,
291 'publicSpendKey': keys.publicSpendKey,
292 'publicViewKey': keys.publicViewKey,
293 'passphrase': keys.passphrase
294 };
295 }
296
297 @override
298 int? getRestoreHeight(Object wallet) {
299 final moneroWallet = wallet as MoneroWallet;
300 return moneroWallet.restoreHeight;
301 }
302
303 @override
304 Object createMoneroTransactionCreationCredentials(
305 {required List<Output> outputs, required TransactionPriority priority}) =>
306 MoneroTransactionCreationCredentials(
307 outputs: outputs
308 .map((out) => OutputInfo(
309 fiatAmount: out.fiatAmount,
310 cryptoAmount: out.cryptoAmountMoney,
311 address: out.address,
312 note: out.note,
313 sendAll: out.sendAll,
314 extractedAddress: out.extractedAddress,
315 isParsedAddress: out.isParsedAddress,
316 ))
317 .toList(),
318 priority: priority as MoneroTransactionPriority);
319
320 @override
321 Object createMoneroTransactionCreationCredentialsRaw(
322 {required List<OutputInfo> outputs, required TransactionPriority priority}) =>
323 MoneroTransactionCreationCredentials(
324 outputs: outputs, priority: priority as MoneroTransactionPriority);
325
326 @override
327 String formatterMoneroAmountToString({required int amount}) =>
328 moneroAmountToString(amount: amount);
329
330 @override
331 double formatterMoneroAmountToDouble({required int amount}) =>
332 moneroAmountToDouble(amount: amount);
333
334 @override
335 int formatterMoneroParseAmount({required String amount}) => moneroParseAmount(amount: amount);
336
337 @override
338 Account getCurrentAccount(Object wallet) {
339 final moneroWallet = wallet as MoneroWallet;
340 final acc = moneroWallet.walletAddresses.account;
341 return Account(id: acc!.id, label: acc.label, balance: acc.balance);
342 }
343
344 @override
345 void setCurrentAccount(Object wallet, int id, String label, String? balance) {
346 final moneroWallet = wallet as MoneroWallet;
347 moneroWallet.walletAddresses.account =
348 monero_account.Account(id: id, label: label, balance: balance);
349 }
350
351 @override
352 void onStartup() => monero_wallet_api.onStartup();
353
354 @override
355 int getTransactionInfoAccountId(TransactionInfo tx) {
356 final moneroTransactionInfo = tx as MoneroTransactionInfo;
357 return moneroTransactionInfo.accountIndex;
358 }
359
360 @override
361 WalletService createMoneroWalletService(Box<UnspentCoinsInfo> unspentCoinSource) =>
362 MoneroWalletService(unspentCoinSource);
363
364 @override
365 String getTransactionAddress(Object wallet, int accountIndex, int addressIndex) {
366 final moneroWallet = wallet as MoneroWallet;
367 return moneroWallet.getTransactionAddress(accountIndex, addressIndex);
368 }
369
370 @override
371 String getSubaddressLabel(Object wallet, int accountIndex, int addressIndex) {
372 final moneroWallet = wallet as MoneroWallet;
373 return moneroWallet.getSubaddressLabel(accountIndex, addressIndex);
374 }
375
376 @override
377 Map<String, String> pendingTransactionInfo(Object transaction) {
378 final ptx = transaction as PendingMoneroTransaction;
379 return {'id': ptx.id, 'hex': ptx.hex};
380 }
381
382 @override
383 List<Unspent> getUnspents(Object wallet) {
384 final moneroWallet = wallet as MoneroWallet;
385 return moneroWallet.unspentCoins;
386 }
387
388 @override
389 Future<void> updateUnspents(Object wallet) async {
390 final moneroWallet = wallet as MoneroWallet;
391 await moneroWallet.updateUnspent();
392 }
393
394 @override
395 Future<int> getCurrentHeight() async {
396 return monero_wallet_api.getCurrentHeight();
397 }
398
399 @override
400 bool importKeyImagesUR(Object wallet, String ur) {
401 final moneroWallet = wallet as MoneroWallet;
402 return moneroWallet.importKeyImagesUR(ur);
403 }
404
405 @override
406 Future<bool> commitTransactionUR(Object wallet, String ur) {
407 final moneroWallet = wallet as MoneroWallet;
408 return moneroWallet.submitTransactionUR(ur);
409 }
410
411 @override
412 Map<String, String> exportOutputsUR(Object wallet) {
413 final moneroWallet = wallet as MoneroWallet;
414 return moneroWallet.exportOutputsUR();
415 }
416
417 @override
418 bool needExportOutputs(Object wallet, Money amount) {
419 final moneroWallet = wallet as MoneroWallet;
420 return moneroWallet.needExportOutputs(amount);
421 }
422
423 @override
424 bool hasUnknownKeyImages(Object wallet) {
425 final moneroWallet = wallet as MoneroWallet;
426 return moneroWallet.hasUnknownKeyImages();
427 }
428
429 @override
430 void monerocCheck() => checkIfMoneroCIsFine();
431
432 @override
433 Future<void> setLedgerConnection(Object wallet, ledger.LedgerConnection connection) async {
434 final moneroWallet = wallet as MoneroWallet;
435 await moneroWallet.setLedgerConnection(connection);
436 }
437
438 @override
439 void resetLedgerConnection() => disableLedgerExchange();
440
441 @override
442 void setGlobalLedgerConnection(ledger.LedgerConnection connection) => gLedger = connection;
443
444 @override
445 bool hasGlobalLedgerConnection() => gLedger != null;
446
447 @override
448 String? getLastLedgerCommand() => latestLedgerCommand;
449
450 @override
451 void setHardwareWalletService(Object wallet, HardwareWalletService service) {
452 final moneroWallet = wallet as MoneroWallet;
453 moneroWallet.trezorService = service as MoneroTrezorService;
454 }
455
456 @override
457 HardwareWalletService getLedgerHardwareWalletService(ledger.LedgerConnection connection) =>
458 MoneroLedgerService(connection);
459
460 @override
461 HardwareWalletService getTrezorHardwareWalletService(trezor.TrezorClient client) =>
462 MoneroTrezorService(client);
463
464 @override
465 Future<void> syncTrezor(Object wallet) async {
466 final moneroWallet = wallet as MoneroWallet;
467
468 return moneroWallet.syncTrezor();
469 }
470
471 bool isViewOnly() => isViewOnlyBySpendKey(null);
472
473 @override
474 Map<String, List<int>> debugCallLength() => monero_wallet_api.debugCallLength();
475
476 @override
477 Map<String, dynamic> getWalletCacheDebug() => monero_wallet_api.getWalletCacheDebug();
478 }