mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2024-12-23 03:49:22 +00:00
Merge remote-tracking branch 'origin_SW/staging' into amount_separators
This commit is contained in:
commit
61e074e3cd
4 changed files with 65 additions and 19 deletions
|
@ -680,6 +680,7 @@ class _WalletViewState extends ConsumerState<WalletView> {
|
|||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||
child: WalletSummary(
|
||||
walletId: walletId,
|
||||
aspectRatio: 1.75,
|
||||
initialSyncStatus: ref.watch(managerProvider
|
||||
.select((value) => value.isRefreshing))
|
||||
? WalletSyncStatus.syncing
|
||||
|
|
|
@ -265,17 +265,23 @@ class EthereumWallet extends CoinServiceAPI with WalletCache, WalletDB {
|
|||
@override
|
||||
Future<FeeObject> get fees => EthereumAPI.getFees();
|
||||
|
||||
//Full rescan is not needed for ETH since we have a balance
|
||||
@override
|
||||
Future<void> fullRescan(
|
||||
int maxUnusedAddressGap, int maxNumberOfIndexesToCheck) {
|
||||
// TODO: implement fullRescan
|
||||
throw UnimplementedError();
|
||||
int maxUnusedAddressGap,
|
||||
int maxNumberOfIndexesToCheck,
|
||||
) async {
|
||||
await db.deleteWalletBlockchainData(walletId);
|
||||
await _generateAndSaveAddress(
|
||||
(await mnemonicString)!,
|
||||
(await mnemonicPassphrase)!,
|
||||
);
|
||||
await updateBalance();
|
||||
await _refreshTransactions(isRescan: true);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<bool> generateNewAddress() {
|
||||
// TODO: implement generateNewAddress - might not be needed for ETH
|
||||
// not used for ETH
|
||||
throw UnimplementedError();
|
||||
}
|
||||
|
||||
|
@ -291,10 +297,10 @@ class EthereumWallet extends CoinServiceAPI with WalletCache, WalletDB {
|
|||
level: LogLevel.Info,
|
||||
);
|
||||
|
||||
//First get mnemonic so we can initialize credentials
|
||||
String privateKey =
|
||||
getPrivateKey((await mnemonicString)!, (await mnemonicPassphrase)!);
|
||||
_credentials = web3.EthPrivateKey.fromHex(privateKey);
|
||||
await _initCredentials(
|
||||
(await mnemonicString)!,
|
||||
(await mnemonicPassphrase)!,
|
||||
);
|
||||
|
||||
if (getCachedId() == null) {
|
||||
throw Exception(
|
||||
|
@ -367,8 +373,24 @@ class EthereumWallet extends CoinServiceAPI with WalletCache, WalletDB {
|
|||
value: "",
|
||||
);
|
||||
|
||||
String privateKey = getPrivateKey(mnemonic, "");
|
||||
await _generateAndSaveAddress(mnemonic, "");
|
||||
|
||||
Logging.instance.log("_generateNewWalletFinished", level: LogLevel.Info);
|
||||
}
|
||||
|
||||
Future<void> _initCredentials(
|
||||
String mnemonic,
|
||||
String mnemonicPassphrase,
|
||||
) async {
|
||||
String privateKey = getPrivateKey(mnemonic, mnemonicPassphrase);
|
||||
_credentials = web3.EthPrivateKey.fromHex(privateKey);
|
||||
}
|
||||
|
||||
Future<void> _generateAndSaveAddress(
|
||||
String mnemonic,
|
||||
String mnemonicPassphrase,
|
||||
) async {
|
||||
await _initCredentials(mnemonic, mnemonicPassphrase);
|
||||
|
||||
final address = Address(
|
||||
walletId: walletId,
|
||||
|
@ -381,8 +403,6 @@ class EthereumWallet extends CoinServiceAPI with WalletCache, WalletDB {
|
|||
);
|
||||
|
||||
await db.putAddress(address);
|
||||
|
||||
Logging.instance.log("_generateNewWalletFinished", level: LogLevel.Info);
|
||||
}
|
||||
|
||||
bool _isConnected = false;
|
||||
|
@ -649,7 +669,7 @@ class EthereumWallet extends CoinServiceAPI with WalletCache, WalletDB {
|
|||
if (!needsRefresh) {
|
||||
var allOwnAddresses = await _fetchAllOwnAddresses();
|
||||
final response = await EthereumAPI.getEthTransactions(
|
||||
allOwnAddresses.elementAt(0).value,
|
||||
address: allOwnAddresses.elementAt(0).value,
|
||||
);
|
||||
if (response.value != null) {
|
||||
final allTxs = response.value!;
|
||||
|
@ -985,10 +1005,25 @@ class EthereumWallet extends CoinServiceAPI with WalletCache, WalletDB {
|
|||
return isValidEthereumAddress(address);
|
||||
}
|
||||
|
||||
Future<void> _refreshTransactions() async {
|
||||
Future<void> _refreshTransactions({bool isRescan = false}) async {
|
||||
String thisAddress = await currentReceivingAddress;
|
||||
|
||||
final response = await EthereumAPI.getEthTransactions(thisAddress);
|
||||
int firstBlock = 0;
|
||||
|
||||
if (!isRescan) {
|
||||
firstBlock =
|
||||
await db.getTransactions(walletId).heightProperty().max() ?? 0;
|
||||
|
||||
if (firstBlock > 10) {
|
||||
// add some buffer
|
||||
firstBlock -= 10;
|
||||
}
|
||||
}
|
||||
|
||||
final response = await EthereumAPI.getEthTransactions(
|
||||
address: thisAddress,
|
||||
firstBlock: isRescan ? 0 : firstBlock,
|
||||
);
|
||||
|
||||
if (response.value == null) {
|
||||
Logging.instance.log(
|
||||
|
@ -999,6 +1034,11 @@ class EthereumWallet extends CoinServiceAPI with WalletCache, WalletDB {
|
|||
return;
|
||||
}
|
||||
|
||||
if (response.value!.isEmpty) {
|
||||
// no new transactions found
|
||||
return;
|
||||
}
|
||||
|
||||
final txsResponse =
|
||||
await EthereumAPI.getEthTransactionNonces(response.value!);
|
||||
|
||||
|
|
|
@ -47,12 +47,14 @@ class EthereumResponse<T> {
|
|||
abstract class EthereumAPI {
|
||||
static String get stackBaseServer => DefaultNodes.ethereum.host;
|
||||
|
||||
static Future<EthereumResponse<List<EthTxDTO>>> getEthTransactions(
|
||||
String address) async {
|
||||
static Future<EthereumResponse<List<EthTxDTO>>> getEthTransactions({
|
||||
required String address,
|
||||
int firstBlock = 0,
|
||||
}) async {
|
||||
try {
|
||||
final response = await get(
|
||||
Uri.parse(
|
||||
"$stackBaseServer/export?addrs=$address",
|
||||
"$stackBaseServer/export?addrs=$address&firstBlock=$firstBlock",
|
||||
),
|
||||
);
|
||||
|
||||
|
|
|
@ -47,8 +47,11 @@ class CoinCard extends ConsumerWidget {
|
|||
width: width,
|
||||
height: height,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(
|
||||
Constants.size.circularBorderRadius,
|
||||
),
|
||||
image: DecorationImage(
|
||||
fit: BoxFit.fill,
|
||||
fit: BoxFit.cover,
|
||||
image: FileImage(
|
||||
File(
|
||||
ref.watch(coinCardProvider(coin))!,
|
||||
|
|
Loading…
Reference in a new issue