mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2025-06-28 12:29:51 +00:00
Cw 679 add ledger litecoin support (#1565)
* Add Litecoin Hardware Wallet Creation * Add Litecoin Hardware Wallet Creation * Fix Bitcoin not sending on Ledger * Fixes to sending LTC using Ledger * CW-679 Fix merge conflicts * CW-679 Fix merge conflicts * CW-679 Minor fixes * CW-679 Add derivation Path of change address * ledger flutter plus refactoring * ledger flutter plus refactoring * ledger flutter plus refactoring * Ups :| * Ups :| I forgot USB * Handle BT Off * Fix Issue with A14 and USB * Small Ledger Quality of life improvements * Small Ledger Quality of life improvements * Small Ledger Quality of life improvements * Small Ledger Quality of life improvements * Small Ledger Quality of life improvements * Small Ledger Quality of life improvements * Small Ledger Quality of life improvements * Pls work * Pls work * Pls work * Pls work * Fix overpopulation * Fix ble device detection and support for Stax and Flex * clean up pubspec * clean up * MWeb merge fix * MWeb merge fix * Fix Merge conflicts * Fix Requested changes
This commit is contained in:
parent
e04185a7c1
commit
68926c0a33
45 changed files with 842 additions and 405 deletions
|
@ -2,26 +2,26 @@ import 'dart:async';
|
|||
|
||||
import 'package:cw_core/hardware/hardware_account_data.dart';
|
||||
import 'package:ledger_ethereum/ledger_ethereum.dart';
|
||||
import 'package:ledger_flutter/ledger_flutter.dart';
|
||||
import 'package:ledger_flutter_plus/ledger_flutter_plus.dart';
|
||||
|
||||
class EVMChainHardwareWalletService {
|
||||
EVMChainHardwareWalletService(this.ledger, this.device);
|
||||
EVMChainHardwareWalletService(this.ledgerConnection);
|
||||
|
||||
final Ledger ledger;
|
||||
final LedgerDevice device;
|
||||
final LedgerConnection ledgerConnection;
|
||||
|
||||
Future<List<HardwareAccountData>> getAvailableAccounts({int index = 0, int limit = 5}) async {
|
||||
final ethereumLedgerApp = EthereumLedgerApp(ledger);
|
||||
Future<List<HardwareAccountData>> getAvailableAccounts(
|
||||
{int index = 0, int limit = 5}) async {
|
||||
final ethereumLedgerApp = EthereumLedgerApp(ledgerConnection);
|
||||
|
||||
final version = await ethereumLedgerApp.getVersion(device);
|
||||
await ethereumLedgerApp.getVersion();
|
||||
|
||||
final accounts = <HardwareAccountData>[];
|
||||
final indexRange = List.generate(limit, (i) => i + index);
|
||||
|
||||
for (final i in indexRange) {
|
||||
final derivationPath = "m/44'/60'/$i'/0/0";
|
||||
final address =
|
||||
await ethereumLedgerApp.getAccounts(device, accountsDerivationPath: derivationPath);
|
||||
final address = await ethereumLedgerApp.getAccounts(
|
||||
accountsDerivationPath: derivationPath);
|
||||
|
||||
accounts.add(HardwareAccountData(
|
||||
address: address.first,
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import 'package:cw_core/crypto_currency.dart';
|
||||
import 'package:cw_core/output_info.dart';
|
||||
import 'package:cw_evm/evm_chain_transaction_priority.dart';
|
||||
import 'package:ledger_flutter/ledger_flutter.dart';
|
||||
|
||||
class EVMChainTransactionCredentials {
|
||||
EVMChainTransactionCredentials(
|
||||
|
|
|
@ -1,17 +1,16 @@
|
|||
import 'dart:async';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:cw_core/hardware/device_not_connected_exception.dart';
|
||||
import 'package:cw_core/hardware/device_not_connected_exception.dart'
|
||||
as exception;
|
||||
import 'package:ledger_ethereum/ledger_ethereum.dart';
|
||||
import 'package:ledger_flutter/ledger_flutter.dart';
|
||||
import 'package:ledger_flutter_plus/ledger_flutter_plus.dart';
|
||||
import 'package:web3dart/crypto.dart';
|
||||
import 'package:web3dart/web3dart.dart';
|
||||
|
||||
class EvmLedgerCredentials extends CredentialsWithKnownAddress {
|
||||
final String _address;
|
||||
|
||||
Ledger? ledger;
|
||||
LedgerDevice? ledgerDevice;
|
||||
EthereumLedgerApp? ethereumLedgerApp;
|
||||
|
||||
EvmLedgerCredentials(this._address);
|
||||
|
@ -19,25 +18,25 @@ class EvmLedgerCredentials extends CredentialsWithKnownAddress {
|
|||
@override
|
||||
EthereumAddress get address => EthereumAddress.fromHex(_address);
|
||||
|
||||
void setLedger(Ledger setLedger, [LedgerDevice? setLedgerDevice, String? derivationPath]) {
|
||||
ledger = setLedger;
|
||||
ledgerDevice = setLedgerDevice;
|
||||
ethereumLedgerApp =
|
||||
EthereumLedgerApp(ledger!, derivationPath: derivationPath ?? "m/44'/60'/0'/0/0");
|
||||
void setLedgerConnection(LedgerConnection connection,
|
||||
[String? derivationPath]) {
|
||||
ethereumLedgerApp = EthereumLedgerApp(connection,
|
||||
derivationPath: derivationPath ?? "m/44'/60'/0'/0/0");
|
||||
}
|
||||
|
||||
@override
|
||||
MsgSignature signToEcSignature(Uint8List payload, {int? chainId, bool isEIP1559 = false}) =>
|
||||
throw UnimplementedError("EvmLedgerCredentials.signToEcSignature");
|
||||
MsgSignature signToEcSignature(Uint8List payload,
|
||||
{int? chainId, bool isEIP1559 = false}) =>
|
||||
throw UnimplementedError("EvmLedgerCredentials.signToEcSignature");
|
||||
|
||||
@override
|
||||
Future<MsgSignature> signToSignature(Uint8List payload,
|
||||
{int? chainId, bool isEIP1559 = false}) async {
|
||||
if (ledgerDevice == null && ledger?.devices.isNotEmpty != true) {
|
||||
throw DeviceNotConnectedException();
|
||||
if (ethereumLedgerApp == null) {
|
||||
throw exception.DeviceNotConnectedException();
|
||||
}
|
||||
|
||||
final sig = await ethereumLedgerApp!.signTransaction(device, payload);
|
||||
final sig = await ethereumLedgerApp!.signTransaction(payload);
|
||||
|
||||
final v = sig[0].toInt();
|
||||
final r = bytesToHex(sig.sublist(1, 1 + 32));
|
||||
|
@ -65,14 +64,16 @@ class EvmLedgerCredentials extends CredentialsWithKnownAddress {
|
|||
chainIdV = chainId != null ? (parity + (chainId * 2 + 35)) : parity;
|
||||
}
|
||||
|
||||
return MsgSignature(BigInt.parse(r, radix: 16), BigInt.parse(s, radix: 16), chainIdV);
|
||||
return MsgSignature(
|
||||
BigInt.parse(r, radix: 16), BigInt.parse(s, radix: 16), chainIdV);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Uint8List> signPersonalMessage(Uint8List payload, {int? chainId}) async {
|
||||
if (isNotConnected) throw DeviceNotConnectedException();
|
||||
Future<Uint8List> signPersonalMessage(Uint8List payload,
|
||||
{int? chainId}) async {
|
||||
if (isNotConnected) throw exception.DeviceNotConnectedException();
|
||||
|
||||
final sig = await ethereumLedgerApp!.signMessage(device, payload);
|
||||
final sig = await ethereumLedgerApp!.signMessage(payload);
|
||||
|
||||
final r = sig.sublist(1, 1 + 32);
|
||||
final s = sig.sublist(1 + 32, 1 + 32 + 32);
|
||||
|
@ -84,20 +85,22 @@ class EvmLedgerCredentials extends CredentialsWithKnownAddress {
|
|||
|
||||
@override
|
||||
Uint8List signPersonalMessageToUint8List(Uint8List payload, {int? chainId}) =>
|
||||
throw UnimplementedError("EvmLedgerCredentials.signPersonalMessageToUint8List");
|
||||
throw UnimplementedError(
|
||||
"EvmLedgerCredentials.signPersonalMessageToUint8List");
|
||||
|
||||
Future<void> provideERC20Info(String erc20ContractAddress, int chainId) async {
|
||||
if (isNotConnected) throw DeviceNotConnectedException();
|
||||
Future<void> provideERC20Info(
|
||||
String erc20ContractAddress, int chainId) async {
|
||||
if (isNotConnected) throw exception.DeviceNotConnectedException();
|
||||
|
||||
try {
|
||||
await ethereumLedgerApp!.getAndProvideERC20TokenInformation(device,
|
||||
await ethereumLedgerApp!.getAndProvideERC20TokenInformation(
|
||||
erc20ContractAddress: erc20ContractAddress, chainId: chainId);
|
||||
} on LedgerException catch (e) {
|
||||
if (e.errorCode != -28672) rethrow;
|
||||
} catch (e) {
|
||||
print(e);
|
||||
rethrow;
|
||||
// if (e.errorCode != -28672) rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
bool get isNotConnected => (ledgerDevice ?? ledger?.devices.firstOrNull) == null;
|
||||
|
||||
LedgerDevice get device => ledgerDevice ?? ledger!.devices.first;
|
||||
bool get isNotConnected => ethereumLedgerApp == null || ethereumLedgerApp!.connection.isDisconnected;
|
||||
}
|
||||
|
|
|
@ -25,20 +25,17 @@ dependencies:
|
|||
mobx: ^2.0.7+4
|
||||
cw_core:
|
||||
path: ../cw_core
|
||||
ledger_flutter: ^1.0.1
|
||||
ledger_flutter_plus: ^1.4.1
|
||||
ledger_ethereum:
|
||||
git:
|
||||
url: https://github.com/cake-tech/ledger-ethereum.git
|
||||
url: https://github.com/cake-tech/ledger-flutter-plus-plugins
|
||||
path: packages/ledger-ethereum
|
||||
|
||||
dependency_overrides:
|
||||
web3dart:
|
||||
git:
|
||||
url: https://github.com/cake-tech/web3dart.git
|
||||
ref: cake
|
||||
ledger_flutter:
|
||||
git:
|
||||
url: https://github.com/cake-tech/ledger-flutter.git
|
||||
ref: cake-v3
|
||||
watcher: ^1.1.0
|
||||
|
||||
dev_dependencies:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue