import 'dart:math'; import 'package:bip32/bip32.dart' as bip32; import 'package:bip39/bip39.dart' as bip39; import "package:hex/hex.dart"; class AddressTransaction { final String message; final List result; final String status; const AddressTransaction({ required this.message, required this.result, required this.status, }); factory AddressTransaction.fromJson(List json) { return AddressTransaction( message: "", result: json, status: "", ); } @override String toString() { return "AddressTransaction: {" "\n\t message: $message," "\n\t status: $status," "\n\t result: $result," "\n}"; } } class GasTracker { final double average; final double fast; final double slow; // final Map data; const GasTracker({ required this.average, required this.fast, required this.slow, }); factory GasTracker.fromJson(Map json) { return GasTracker( average: json['average'] as double, fast: json['fast'] as double, slow: json['slow'] as double, ); } } const hdPathEthereum = "m/44'/60'/0'/0"; // equal to "0x${keccak256("Transfer(address,address,uint256)".toUint8ListFromUtf8).toHex}"; const kTransferEventSignature = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"; String getPrivateKey(String mnemonic, String mnemonicPassphrase) { final isValidMnemonic = bip39.validateMnemonic(mnemonic); if (!isValidMnemonic) { throw 'Invalid mnemonic'; } final seed = bip39.mnemonicToSeed(mnemonic, passphrase: mnemonicPassphrase); final root = bip32.BIP32.fromSeed(seed); const index = 0; final addressAtIndex = root.derivePath("$hdPathEthereum/$index"); return HEX.encode(addressAtIndex.privateKey as List); } double estimateFee(int feeRate, int gasLimit, int decimals) { final gweiAmount = feeRate / (pow(10, 9)); final fee = gasLimit * gweiAmount; //Convert gwei to ETH final feeInWei = fee * (pow(10, 9)); final ethAmount = feeInWei / (pow(10, decimals)); return ethAmount; } BigInt amountToBigInt(num amount, int decimal) { final amountToSendinDecimal = amount * (pow(10, decimal)); return BigInt.from(amountToSendinDecimal); }