mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-22 06:28:39 +02:00
* feat: initial hive -> SQLite Includes migration script and initial work done to remove dependency on hive generators. Also contains some refactoring to make sync code async. Features new dev screen that lists all SQLite tables Aspects that need testing: - backups (from this version, and from previous versions as well) - wallet loading / wallet list - almost everything else - renaming - deletion - sorting in wallet list - wallet groups - wallet seed/keys - wallet switching - wallet creation / restore - all methods - wallet address page - hardware wallet connection (and prompts from mall screens) - contacts - advanced settings in wallet creation - derivation paths - some minor wownero fixes - base, hardware wallets * fix: build errors * fix: Bad state: No element in backup restore * address comments from review * fix: HardwareWalletType
246 lines
8.2 KiB
Dart
246 lines
8.2 KiB
Dart
part of 'polygon.dart';
|
|
|
|
class CWPolygon extends Polygon {
|
|
@override
|
|
List<String> getPolygonWordList(String language) => EVMChainMnemonics.englishWordlist;
|
|
|
|
WalletService createPolygonWalletService(bool isDirect) =>
|
|
PolygonWalletService(isDirect, client: PolygonClient());
|
|
|
|
@override
|
|
WalletCredentials createPolygonNewWalletCredentials({
|
|
required String name,
|
|
String? mnemonic,
|
|
WalletInfo? walletInfo,
|
|
String? password,
|
|
String? passphrase,
|
|
}) => EVMChainNewWalletCredentials(
|
|
name: name,
|
|
walletInfo: walletInfo,
|
|
password: password,
|
|
mnemonic: mnemonic,
|
|
passphrase: passphrase,
|
|
);
|
|
|
|
@override
|
|
WalletCredentials createPolygonRestoreWalletFromSeedCredentials({
|
|
required String name,
|
|
required String mnemonic,
|
|
required String password,
|
|
String? passphrase,
|
|
}) => EVMChainRestoreWalletFromSeedCredentials(
|
|
name: name,
|
|
password: password,
|
|
mnemonic: mnemonic,
|
|
passphrase: passphrase,
|
|
);
|
|
|
|
@override
|
|
WalletCredentials createPolygonRestoreWalletFromPrivateKey({
|
|
required String name,
|
|
required String privateKey,
|
|
required String password,
|
|
}) => EVMChainRestoreWalletFromPrivateKey(name: name, password: password, privateKey: privateKey);
|
|
|
|
@override
|
|
WalletCredentials createPolygonHardwareWalletCredentials({
|
|
required String name,
|
|
required HardwareAccountData hwAccountData,
|
|
WalletInfo? walletInfo,
|
|
}) => EVMChainRestoreWalletFromHardware(
|
|
name: name,
|
|
hwAccountData: hwAccountData,
|
|
walletInfo: walletInfo,
|
|
);
|
|
|
|
@override
|
|
String getAddress(WalletBase wallet) => (wallet as PolygonWallet).walletAddresses.address;
|
|
|
|
@override
|
|
String getPrivateKey(WalletBase wallet) {
|
|
final privateKeyHolder = (wallet as PolygonWallet).evmChainPrivateKey;
|
|
if (privateKeyHolder is EthPrivateKey) return bytesToHex(privateKeyHolder.privateKey);
|
|
return "";
|
|
}
|
|
|
|
@override
|
|
String getPublicKey(WalletBase wallet) {
|
|
final privateKeyInUnitInt = (wallet as PolygonWallet).evmChainPrivateKey;
|
|
return privateKeyInUnitInt.address.hex;
|
|
}
|
|
|
|
@override
|
|
TransactionPriority getDefaultTransactionPriority() => EVMChainTransactionPriority.medium;
|
|
|
|
@override
|
|
TransactionPriority getPolygonTransactionPrioritySlow() => EVMChainTransactionPriority.slow;
|
|
|
|
@override
|
|
List<TransactionPriority> getTransactionPriorities() => EVMChainTransactionPriority.all;
|
|
|
|
@override
|
|
TransactionPriority deserializePolygonTransactionPriority(int raw) =>
|
|
EVMChainTransactionPriority.deserialize(raw: raw);
|
|
|
|
Object createPolygonTransactionCredentials(
|
|
List<Output> outputs, {
|
|
required TransactionPriority priority,
|
|
required CryptoCurrency currency,
|
|
int? feeRate,
|
|
}) => EVMChainTransactionCredentials(
|
|
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 EVMChainTransactionPriority,
|
|
currency: currency,
|
|
feeRate: feeRate,
|
|
);
|
|
|
|
Object createPolygonTransactionCredentialsRaw(
|
|
List<OutputInfo> outputs, {
|
|
TransactionPriority? priority,
|
|
required CryptoCurrency currency,
|
|
required int feeRate,
|
|
}) => EVMChainTransactionCredentials(
|
|
outputs,
|
|
priority: priority as EVMChainTransactionPriority?,
|
|
currency: currency,
|
|
feeRate: feeRate,
|
|
);
|
|
|
|
@override
|
|
int formatterPolygonParseAmount(String amount) => EVMChainFormatter.parseEVMChainAmount(amount);
|
|
|
|
@override
|
|
double formatterPolygonAmountToDouble({
|
|
TransactionInfo? transaction,
|
|
BigInt? amount,
|
|
int exponent = 18,
|
|
}) {
|
|
assert(transaction != null || amount != null);
|
|
|
|
if (transaction != null) {
|
|
transaction as EVMChainTransactionInfo;
|
|
return transaction.ethAmount / BigInt.from(10).pow(transaction.exponent);
|
|
} else {
|
|
return (amount!) / BigInt.from(10).pow(exponent);
|
|
}
|
|
}
|
|
|
|
@override
|
|
List<Erc20Token> getERC20Currencies(WalletBase wallet) =>
|
|
(wallet as PolygonWallet).erc20Currencies;
|
|
|
|
@override
|
|
Future<void> addErc20Token(WalletBase wallet, CryptoCurrency token) =>
|
|
(wallet as PolygonWallet).addErc20Token(token as Erc20Token);
|
|
|
|
@override
|
|
Future<void> deleteErc20Token(WalletBase wallet, CryptoCurrency token) =>
|
|
(wallet as PolygonWallet).deleteErc20Token(token as Erc20Token);
|
|
|
|
@override
|
|
Future<void> removeTokenTransactionsInHistory(WalletBase wallet, CryptoCurrency token) =>
|
|
(wallet as PolygonWallet).removeTokenTransactionsInHistory(token as Erc20Token);
|
|
|
|
@override
|
|
Future<Erc20Token?> getErc20Token(WalletBase wallet, String contractAddress) =>
|
|
(wallet as PolygonWallet).getErc20Token(contractAddress, 'polygon');
|
|
|
|
@override
|
|
CryptoCurrency assetOfTransaction(WalletBase wallet, TransactionInfo transaction) {
|
|
transaction as EVMChainTransactionInfo;
|
|
if (transaction.tokenSymbol == CryptoCurrency.maticpoly.title ||
|
|
transaction.tokenSymbol == "MATIC") {
|
|
return CryptoCurrency.maticpoly;
|
|
}
|
|
|
|
wallet as PolygonWallet;
|
|
|
|
return wallet.erc20Currencies.firstWhere(
|
|
(element) => transaction.contractAddress?.toLowerCase() == element.contractAddress?.toLowerCase(),
|
|
);
|
|
}
|
|
|
|
@override
|
|
void updatePolygonScanUsageState(WalletBase wallet, bool isEnabled) =>
|
|
(wallet as PolygonWallet).updateScanProviderUsageState(isEnabled);
|
|
|
|
@override
|
|
Web3Client? getWeb3Client(WalletBase wallet) => (wallet as PolygonWallet).getWeb3Client();
|
|
|
|
@override
|
|
String getTokenAddress(CryptoCurrency asset) => (asset as Erc20Token).contractAddress;
|
|
|
|
Future<bool> isApprovalRequired(WalletBase wallet, String tokenContract,String spender, BigInt requiredAmount) =>
|
|
(wallet as PolygonWallet).isApprovalRequired(tokenContract, spender, requiredAmount);
|
|
|
|
Future<PendingTransaction> createRawCallDataTransaction(WalletBase wallet, String to, String dataHex, BigInt valueWei,
|
|
TransactionPriority priority) =>
|
|
(wallet as EVMChainWallet).createCallDataTransaction(to, dataHex, valueWei, priority as EVMChainTransactionPriority);
|
|
|
|
@override
|
|
Future<PendingTransaction> createTokenApproval(
|
|
WalletBase wallet,
|
|
BigInt amount,
|
|
String spender,
|
|
CryptoCurrency token,
|
|
TransactionPriority priority,
|
|
) => (wallet as EVMChainWallet).createApprovalTransaction(
|
|
amount,
|
|
spender,
|
|
token,
|
|
priority as EVMChainTransactionPriority,
|
|
"POL",
|
|
);
|
|
|
|
@override
|
|
Future<void> setHardwareWalletService(WalletBase wallet, HardwareWalletService service) async {
|
|
if (service is EVMChainLedgerService) {
|
|
((wallet as EVMChainWallet).evmChainPrivateKey as EvmLedgerCredentials).setLedgerConnection(
|
|
service.ledgerConnection, (await wallet.walletInfo.getDerivationInfo()).derivationPath);
|
|
} else if (service is EVMChainBitboxService) {
|
|
((wallet as EVMChainWallet).evmChainPrivateKey as EvmBitboxCredentials)
|
|
.setBitbox(service.manager, (await wallet.walletInfo.getDerivationInfo()).derivationPath);
|
|
} else if (service is EVMChainTrezorService) {
|
|
((wallet as EVMChainWallet).evmChainPrivateKey as EvmTrezorCredentials)
|
|
.setTrezorConnect(service.connect, (await wallet.walletInfo.getDerivationInfo()).derivationPath);
|
|
}
|
|
}
|
|
|
|
@override
|
|
HardwareWalletService getLedgerHardwareWalletService(ledger.LedgerConnection connection) =>
|
|
EVMChainLedgerService(connection);
|
|
|
|
@override
|
|
HardwareWalletService getBitboxHardwareWalletService(bitbox.BitboxManager manager) =>
|
|
EVMChainBitboxService(manager, chainId: 137);
|
|
|
|
@override
|
|
HardwareWalletService getTrezorHardwareWalletService(trezor.TrezorConnect connect) =>
|
|
EVMChainTrezorService(connect, chainId: 137);
|
|
|
|
@override
|
|
List<String> getDefaultTokenContractAddresses() =>
|
|
DefaultPolygonErc20Tokens().initialPolygonErc20Tokens.map((e) => e.contractAddress).toList();
|
|
|
|
@override
|
|
bool isTokenAlreadyAdded(WalletBase wallet, String contractAddress) {
|
|
final polygonWallet = wallet as PolygonWallet;
|
|
return polygonWallet.erc20Currencies.any(
|
|
(element) => element.contractAddress.toLowerCase() == contractAddress.toLowerCase(),
|
|
);
|
|
}
|
|
}
|