part of 'bitcoin.dart'; class CWBitcoin extends Bitcoin { @override TransactionPriority getMediumTransactionPriority() => BitcoinTransactionPriority.medium; @override WalletCredentials createBitcoinRestoreWalletFromSeedCredentials( {required String name, required String mnemonic, required String password}) => BitcoinRestoreWalletFromSeedCredentials(name: name, mnemonic: mnemonic, password: password); @override WalletCredentials createBitcoinRestoreWalletFromWIFCredentials( {required String name, required String password, required String wif, WalletInfo? walletInfo}) => BitcoinRestoreWalletFromWIFCredentials( name: name, password: password, wif: wif, walletInfo: walletInfo); @override WalletCredentials createBitcoinNewWalletCredentials( {required String name, WalletInfo? walletInfo, String? password}) => BitcoinNewWalletCredentials(name: name, walletInfo: walletInfo, password: password); @override List getWordList() => wordlist; @override Map getWalletKeys(Object wallet) { final bitcoinWallet = wallet as ElectrumWallet; final keys = bitcoinWallet.keys; return { 'wif': keys.wif, 'privateKey': keys.privateKey, 'publicKey': keys.publicKey }; } @override List getTransactionPriorities() => BitcoinTransactionPriority.all; @override List getLitecoinTransactionPriorities() => LitecoinTransactionPriority.all; @override TransactionPriority deserializeBitcoinTransactionPriority(int raw) => BitcoinTransactionPriority.deserialize(raw: raw); @override TransactionPriority deserializeLitecoinTransactionPriority(int raw) => LitecoinTransactionPriority.deserialize(raw: raw); @override int getFeeRate(Object wallet, TransactionPriority priority) { final bitcoinWallet = wallet as ElectrumWallet; return bitcoinWallet.feeRate(priority); } @override Future generateNewAddress(Object wallet, String label) async { final bitcoinWallet = wallet as ElectrumWallet; await bitcoinWallet.walletAddresses.generateNewAddress(label: label); await wallet.save(); } @override Future updateAddress(Object wallet, String address, String label) async { final bitcoinWallet = wallet as ElectrumWallet; bitcoinWallet.walletAddresses.updateAddress(address, label); await wallet.save(); } @override Object createBitcoinTransactionCredentials(List outputs, {required TransactionPriority priority, int? feeRate}) => BitcoinTransactionCredentials( outputs .map((out) => OutputInfo( fiatAmount: out.fiatAmount, cryptoAmount: out.cryptoAmount, address: out.address, note: out.note, sendAll: out.sendAll, extractedAddress: out.extractedAddress, isParsedAddress: out.isParsedAddress, formattedCryptoAmount: out.formattedCryptoAmount)) .toList(), priority: priority as BitcoinTransactionPriority, feeRate: feeRate); @override Object createBitcoinTransactionCredentialsRaw(List outputs, {TransactionPriority? priority, required int feeRate}) => BitcoinTransactionCredentials(outputs, priority: priority != null ? priority as BitcoinTransactionPriority : null, feeRate: feeRate); @override List getAddresses(Object wallet) { final bitcoinWallet = wallet as ElectrumWallet; return bitcoinWallet.walletAddresses.addressesByReceiveType .map((BitcoinAddressRecord addr) => addr.address) .toList(); } @override @computed List getSubAddresses(Object wallet) { final electrumWallet = wallet as ElectrumWallet; return electrumWallet.walletAddresses.addressesByReceiveType .map((BitcoinAddressRecord addr) => ElectrumSubAddress( id: addr.index, name: addr.name, address: electrumWallet.type == WalletType.bitcoinCash ? addr.cashAddr : addr.address, txCount: addr.txCount, balance: addr.balance, isChange: addr.isHidden)) .toList(); } @override String getAddress(Object wallet) { final bitcoinWallet = wallet as ElectrumWallet; return bitcoinWallet.walletAddresses.address; } @override String formatterBitcoinAmountToString({required int amount}) => bitcoinAmountToString(amount: amount); @override double formatterBitcoinAmountToDouble({required int amount}) => bitcoinAmountToDouble(amount: amount); @override int formatterStringDoubleToBitcoinAmount(String amount) => stringDoubleToBitcoinAmount(amount); @override String bitcoinTransactionPriorityWithLabel(TransactionPriority priority, int rate) => (priority as BitcoinTransactionPriority).labelWithRate(rate); @override List getUnspents(Object wallet) { final bitcoinWallet = wallet as ElectrumWallet; return bitcoinWallet.unspentCoins; } Future updateUnspents(Object wallet) async { final bitcoinWallet = wallet as ElectrumWallet; await bitcoinWallet.updateUnspent(); } WalletService createBitcoinWalletService( Box walletInfoSource, Box unspentCoinSource, bool isDirect) { return BitcoinWalletService(walletInfoSource, unspentCoinSource, isDirect); } WalletService createLitecoinWalletService( Box walletInfoSource, Box unspentCoinSource, bool isDirect) { return LitecoinWalletService(walletInfoSource, unspentCoinSource, isDirect); } @override TransactionPriority getBitcoinTransactionPriorityMedium() => BitcoinTransactionPriority.medium; @override TransactionPriority getLitecoinTransactionPriorityMedium() => LitecoinTransactionPriority.medium; @override TransactionPriority getBitcoinTransactionPrioritySlow() => BitcoinTransactionPriority.slow; @override TransactionPriority getLitecoinTransactionPrioritySlow() => LitecoinTransactionPriority.slow; @override Future setAddressType(Object wallet, dynamic option) async { final bitcoinWallet = wallet as ElectrumWallet; await bitcoinWallet.walletAddresses.setAddressType(option as BitcoinAddressType); } @override ReceivePageOption getSelectedAddressType(Object wallet) { final bitcoinWallet = wallet as ElectrumWallet; return BitcoinReceivePageOption.fromType(bitcoinWallet.walletAddresses.addressPageType); } @override List getBitcoinReceivePageOptions() => BitcoinReceivePageOption.all; @override BitcoinAddressType getBitcoinAddressType(ReceivePageOption option) { switch (option) { case BitcoinReceivePageOption.p2pkh: return P2pkhAddressType.p2pkh; case BitcoinReceivePageOption.p2sh: return P2shAddressType.p2wpkhInP2sh; case BitcoinReceivePageOption.p2tr: return SegwitAddresType.p2tr; case BitcoinReceivePageOption.p2wsh: return SegwitAddresType.p2wsh; case BitcoinReceivePageOption.p2wpkh: default: return SegwitAddresType.p2wpkh; } } }