Commit Graph

207 Commits

Author SHA1 Message Date
Dario Gabriel Lipicar 54ea0981a5 fix: properly handle tokenID 0 when filtering activity by collectibles 2024-02-23 09:43:20 -03:00
Anthony Laibe 0856efff6f fix: resolve first tx of block
This is a workaround when fetching unknown tx without receiver
2024-02-21 13:28:26 +01:00
Roman Volosovskyi cc708ce0ce
[#4690] Nilable block range values for proper ranges management (#4691) 2024-02-19 16:50:07 +01:00
Cuteivist a866b8025e
feat: Community token received notification (#4682) 2024-02-19 14:55:38 +01:00
Roman Volosovskyi 9e36df449e
Fix range for ERC20/1155/721 tx detection (#4746) 2024-02-19 11:50:03 +01:00
Stefan ca973b4aa6 feat(wallet) use sql activity filter for incremental updates
Switch from the prototype of duplicating the SQL filter as a runtime
and keeping them in sync on each event that might invalidate the current
filtered entries to a simpler approach of requesting the filter again
and doing the diff to detect the new changes.

Also add a new reset API to model the new entries design requirements.

The new approach shows less corner-case to handle and follows one source
of truth concept making debugging and future maintenance easier.

Other changes

- Fix pending mocking to work with multiple calls
- Refactor tests to account for the new changes

Updates status-desktop #12120
2024-02-12 19:29:15 +01:00
Roman Volosovskyi 005e7e6ee4
Fix nonce change detection (#4679) 2024-02-08 12:54:04 +01:00
Roman Volosovskyi d5a10a97f1
[#4646] Return l2 block number when calling BalanceChecker on Arbitrum (#4668) 2024-02-02 12:52:52 +01:00
Roman Volosovskyi 9b10b29da2
[#4630] Add wallet_fetchOrGetCachedWalletBalances method (#4666) 2024-02-02 11:42:56 +01:00
Stefan 21e6914a3c fix(wallet) fix reading amount for pending transactions
The reading of the amount for pending transactions was done in the same
way as for transfers table. However, the transfers table has a string
hex representation of the amount, while the pending transactions table
has a binary representation of the amount (*big.Int). This was
triggering the not int warning and value was missing.

Updates status-desktop #12120
2024-02-01 18:28:55 +01:00
Roman Volosovskyi 241595a871
[#4649] Do not restart reactor when it is already running (#4663) 2024-02-01 17:26:40 +01:00
Ivan Belyakov e4745d01b4 fix(wallet): handle BlobTxType transaction.
Update go-ethereum version

Closes #4636
2024-01-31 10:06:14 +01:00
Ivan Belyakov 7d1927396a fix(wallet): do not return gas-only ETH entries of transfers table for
activities request

Closes #4618
2024-01-30 11:37:53 +01:00
Roman Volosovskyi dad2ec3f66
[#4640] Temporary fetch l2 block number for Arbitrum networks separately from BalanceChecker (#4644) 2024-01-30 10:09:44 +01:00
Ivan Belyakov f6c219c839 fix(wallet): Made loadBlocksAndTransfers command FiniteCommand to
keep restarting on error non-stop, removed some tests accordingly.
Fixed a flaky test for loadBlocksAndTransfers command.
Added tests for async.AtomicGroup.
Made tranfersCommand FiniteCommandWithErrorCounter to prevent infinite
restart.
2024-01-26 17:50:31 +01:00
Ivan Belyakov 95b148a247 fix(wallet): handle errors in findBlocksCommand and
findNewBlocksCommand gracefully.
Add ErrorCounter type for async package.
Add tests

Closes https://github.com/status-im/status-desktop/issues/11074
2024-01-26 17:50:31 +01:00
Roman Volosovskyi 71ae7ca1a0
[#4604] Skip balance requests on checking nonce (#4629) 2024-01-26 13:57:16 +01:00
Roman Volosovskyi 9b7eec0edb
[#4603] Get rid of fetchLatestBlockNumberCommand (#4614) 2024-01-25 13:05:59 +01:00
Roman Volosovskyi 647c3b0fd8
[#4605] Skip nonce check when possible during tx detection 2024-01-24 11:31:14 +01:00
Roman Volosovskyi 9c0526f7d9
[#4202] Detect balance and erc20 transfers by a single contract call (#4508) 2024-01-19 16:57:04 +01:00
Siddarth Kumar 926f6a3c72 Revert "test: bump go-libp2p"
This reverts commit d0ca4447c6.
2024-01-18 20:29:33 +00:00
Richard Ramos d0ca4447c6
test: bump go-libp2p 2024-01-18 14:28:06 +00:00
Roman Volosovskyi 0bd4a06edc Comment out all logged flaky tests 2024-01-18 06:36:12 +00:00
IvanBelyakoff 3a4dfff20b
fix(wallet): fix blocks ranges update error, add tests (#4560)
Fixes #4559
2024-01-17 12:08:56 +01:00
Roman Volosovskyi 9aef13f83e
[#4200] Enable prevention of tx detection on unrevealed mnemonic/address (#4444) 2024-01-16 15:17:02 +01:00
Dario Gabriel Lipicar ee6621b066 feat: link owned collectibles with latest matching transfer
Part of #12942
2024-01-15 12:55:47 -03:00
Dario Gabriel Lipicar d4f4d47cdb fix: properly detect relevant incoming token transfers
Fixes #13132
2024-01-10 16:03:55 -03:00
Cuteivist 846a4e2363
feat: Community token received notification (#4515) 2024-01-04 13:22:06 +01:00
Sale Djenic 6bfc1bed08 chore: read and use nonce from network instead from the local cache when sending tx
Reading the Nonce from the local cache may be incorrect if the tx is made out of the Status app or
if Status app sends a tx prepared by the dapp (via WalletConnect). A submitted tx with a wrong Nonce
results in a failing tx, that's why we need to read the Nonce from the network.
2023-12-29 08:43:03 +01:00
Cuteivist dac7a0daf9
feat: Fetch community data for tokens (#4497) 2023-12-22 10:43:19 +01:00
Cuteivist 6bfe626558
feat: Use media server for community token images (#4493) 2023-12-21 16:05:29 +01:00
Cuteivist 313375e215
feat: Save previously owned tokens (#4482) 2023-12-21 15:12:50 +01:00
Dario Gabriel Lipicar b3cc73aa7f feat: use media server for community collectible images 2023-12-16 08:49:58 -03:00
Cuteivist 7af313cd53
feat: Add community manager and fetch cached community metadata (#4450) 2023-12-14 17:50:46 +01:00
Ivan Belyakov 81073b208e fix(wallet): Made an interface for BlockRangesSequentialDAO to
mock it in tests.
Made a configurable timeout interval for Commander interface.
Added tests to verify loadBlocksAndTransfers command is stopped
correctly on max errors limit reached
2023-12-14 16:49:23 +01:00
Ivan Belyakov 670954b71b feat(wallet): separated finite and infinite commands in transfers for
proper handling of errors and commands restart.
Now:
- Infinite commands started only once and never restarted, stoped on
context.Done.
- Finite commands are joined into AtomicGroup to stop the rest in the
  group in case one command fails. Otherwise other commands in the group
  will continue running and the failed command is not retried to
  restart. Fixed goroutine leakage in case of failure of some commands
2023-12-14 16:49:23 +01:00
Cuteivist dfe6baed9b
feat: Fetch community token image (#4440) 2023-12-12 08:37:57 +01:00
Ivan Belyakov 71b27394bb fix(wallet): fixed BalanceAt not called for all but first account
when new blocks are searched
2023-12-09 10:10:01 +01:00
Ivan Belyakov 5882705a21 fix(wallet): quick fix for eating RPC requests. Proper fix TBD 2023-12-09 10:10:01 +01:00
Ivan Belyakov 6e666f7c27 fix(wallet): accessing tokens block range nil on empty acc.
Fixed a crash in local notification service on a nil block number
in HistoryReady event
2023-12-07 21:40:02 +01:00
Anthony Laibe f502d991b7 fix: prevent crash when erc20 tx is contract creation 2023-12-07 09:50:41 +01:00
Ivan Belyakov b8c006843b fix(wallet): use mnemonic displayed check for 'findNewBlocksCommand'
Fixed some tests to use wrong sql DB for account DB
2023-12-06 14:07:52 +01:00
Ivan Belyakov 761aa64e04 test(wallet): add tests for findNewBlocks command 2023-12-06 12:08:18 +01:00
Ivan Belyakov 82185b54b5 feat(wallet): separate ETH and tokens search ranges to allow calling
`getLogs` for multiple accounts simultaneously. For now only used for
new transfers detection. Detection of `new` transfers has been changed,
now they are searched from head and forward. Previously they were
searched from last scanned block forward.
2023-12-05 16:09:56 +01:00
Sale Djenic cfa542378d chore(walletconnect)_: various improvements applied
- `WalletConnectTransfer` identified as a new transfer type
- Wallet-related endpoints that logically belong to the wallet moved from the wallet connect service
- Wallet connect service now receives `transfer.TransactionManager` instead of `transactions.Transactor`
- Deadlock issue when trying to send the tx with the wrong nonce fixed
2023-12-04 11:18:38 +01:00
Roman Volosovskyi aee111e5ab
[#4200] Avoid tx watching for addresses which were not exposed 2023-12-01 12:30:42 +01:00
Cuteivist 79f0d8a5ec
bug: Added missing out chain data (#4303) 2023-11-30 12:37:32 +01:00
Ivan Belyakov c0f2f76e9a feat(wallet): remove transfers data on account removal
Closes:  #4394
2023-11-29 16:17:21 +01:00
Sale Djenic dea0b62650 feat(wallet)_: common endpoints added to wallet api
- `SignMessage`
- `BuildTransaction`
- `SendTransactionWithSignature`
2023-11-29 15:34:44 +01:00
Dario Gabriel Lipicar 8b539cd400 feat: refresh balances when Eth or ERC20 transfer is detected 2023-11-29 09:16:03 -03:00
Sale Djenic 8641ec5dd5 feat(walletconnect)_: ethereum rpc calls support
Reference: https://docs.walletconnect.com/advanced/rpc-reference/ethereum-rpc
2023-11-27 10:49:23 +01:00
Sale Djenic e9f11f70dd chore(wallet)_: proper release of locked nonce (unlock function call) 2023-11-22 09:46:50 +01:00
Ivan Belyakov f4fc0ea324 feat(wallet): remove old OnDemand transfer fetch strategy as it not
functional and not maintained any more and we will work on improvement
of SequentialFetchStrategy
2023-11-16 12:59:47 +01:00
Ivan Belyakov b6ade53603 feat(wallet): detect ERC1155 batch transfers.
Refactored transfers loading to reduce blockchain RPC requests (getBaseFee, getTransaction,
getTransactionReceipt) by reusing preloaded transaction and block fee.
Split extraction of subtransaction from logs and from ETH transfer into
different methods.
Refactored log_parser to extract sender and receiver addresses
uniformly for different transfer types.
Replaced info logs with debug where needed.

closes #4221
2023-11-16 09:37:09 +01:00
Anthony Laibe 5381ec4a76 feat: add token list 2023-11-15 09:02:36 +01:00
Ivan Belyakov 57e370e7b9 feat(wallet): Added detection of ERC1155 SingleTransfer events 2023-11-13 20:19:57 +01:00
Sale Djenic ce121710d9 fix: unlock local nonce when an error occurs and increment only when the tx is sent for real 2023-11-06 18:30:42 +01:00
Cuteivist 05530f57bd
feat: Return only community tokens (#4249) 2023-11-03 13:08:32 +01:00
Cuteivist 3c5b0529c7
fix: Add network id for multi tx (#4199) 2023-10-30 10:03:29 +01:00
Cuteivist fa5765cf83
fix: Update timestamp when upserting multi tx (#4224) 2023-10-30 07:53:22 +01:00
Roman Volosovskyi 9d59d889f6
[#3833] Increase intreval of new blocks detection command 2023-10-25 14:45:06 +02:00
Roman Volosovskyi 42527723f2
[#4087] Omit history scanning on generated multiacc creation 2023-10-19 15:07:34 +02:00
Sale Djenic b348cca15c feat: added functionality to ask a client to sign a transaction and an endpoint to continue sending using provided signature
This functionality is needed in case the user wants to send a transaction and
signs it using the signature provided by the keycard (or any other compatible way).
2023-10-17 19:42:06 +02:00
Roman Volosovskyi 778753bb57
Fix checking of ERC20 tail on new blocks scanning 2023-10-12 16:21:09 +02:00
Cuteivist 5674a010cd
feat: Handle Status Mint transaction (#4137) 2023-10-12 12:21:03 +02:00
Dario Gabriel Lipicar 094228871e feat: trigger collectibles refresh on transfer 2023-10-11 15:22:46 -03:00
Cuteivist 6798d1ac5c
feat: Handled token mint activity (#4126) 2023-10-11 07:10:08 +02:00
Ivan Belyakov 01526c344a fix(wallet): new blocks were not found 2023-10-06 15:51:57 +02:00
Roman Volosovskyi d82c50b50a
[#3930] Prevent repeated eth_getLogs calls (ERC20 history tail) 2023-10-05 19:45:40 +02:00
Roman Volosovskyi 6a110ca3df
[#3930] Make sure eth_getLogs for outgoing transfers are not executed for erc20 tail 2023-10-05 11:44:09 +02:00
IvanBelyakoff 9d6577049f
Implemented balance history based on transfers (#4022)
* feat(wallet): implement balance history based on fetched transfers
* Added vendor 'ttlcache'
2023-10-04 15:00:12 +03:00
Roman Volosovskyi 382fcde74e
Scanning of ERC20 tail of transfers history 2023-10-01 10:09:11 +02:00
Stefan 579f7e4a52 chore(wallet) optimize the filer query
Main changes:

- Use tr_type instead of IN clause
- Use binary (X'...' syntax) directly into the query instead of
  converting DB values to HEX
  - Found to be slightly faster than query parameters in the dedicated benchmark
  - Didn't see much improvement in filter benchmarks
- Tried various combinations of optimizations but without impressive performance results

Benchmark results:

| Name                   | Original   | tr_type   | join     | hex      | no-db     | db_only   |     last |    net_j |
|:-----------------------|:-----------|:----------|:---------|:---------|:----------|:----------|---------:|---------:|
| RAM_NoFilter-10        | 49580229   | 51253242  | 51112462 | 50915133 | 121217817 | 141691008 | 50908642 | 50239712 |
| SSD_NoFilter-10        | 49963604   | 51393588  | 51213038 | 50881483 | 120785679 | 141063467 | 50462767 | 49676867 |
| SSD_MovingWindow-10    | 53695712   | 54155292  | 54161733 | 54061325 | 126966633 | 146866017 | 53479929 | 53350475 |
| SSD_AllAddr_AllTos-10  | 41382804   | 41195225  | 51684175 | 52107262 | 64348100  | 97608833  | 50523529 | 49968321 |
| SSD_OneAddress-10      | 34945275   | 35103850  | 31066429 | 31328762 | 50927300  | 54322971  | 30098529 | 30252546 |
| FilterSend_AllAddr-10  | 39546808   | 37566604  | 38389725 | 38260738 | 114820458 | 125588408 | 37127625 | 36864575 |
| FilterSend_6Addr-10    | 41221458   | 41111225  | 40848288 | 40135492 | 118629700 | 128200467 | 38942521 | 39012100 |
| FilterThreeNetworks-10 | -          | -         | -        | -        | -         | -         | 50058929 | 49854450 |

Update status-desktop: #11036
2023-09-21 13:56:44 +02:00
Cuteivist bc4093299e
feat: Filter by collectibles (#4028) 2023-09-21 08:58:36 +02:00
Roman Volosovskyi 1dca3adb89
Basic test for findBlocksCommand 2023-09-19 13:17:36 +02:00
Stefan 70341f85a5 fix(wallet) send/receive for duplicate transactions
Brings consistency in case when sender and receiver are both in the
filter address list. This fixes the case of sender and receiver in
addresses and filters out duplicate entries.

Also

- refactor tests to provide support for owners
- adapt TestGetActivityEntriesWithSameTransactionForSenderAndReceiverInDB
  to the use of owner instead of from
2023-09-12 11:58:24 +02:00
Cuteivist e77fc59f5e
feat: Add activity filtering by contract deploy and minting (#4009) 2023-09-11 11:54:37 +02:00
Ivan Belyakov 81b94b7a4e fix(wallet): added ChainID to balance cache, as now it is shared between
services and contains balances for all addresses and chains.
Made rpc chain client return ChainID property on `NetworkID()` method
2023-09-07 15:00:19 +02:00
Anthony Laibe 22fc83de59 feat: create unknown erc20 2023-09-07 10:04:58 +02:00
Stefan 555aae4d0f fix(wallet) filter by sub-transaction chain ID
Closes status-desktop #12077
2023-09-06 21:08:39 +02:00
Ivan Belyakov 20c585a621 fix(wallet): new transfers were not loaded in real time 2023-09-05 14:19:36 +02:00
Ivan Belyakov 24bf9aada5 feat(wallet): move balance cache to a common place and make it a
parameter to share between transfers and balance history in an upcoming
commit.
Had to refactor its interface for that reason.
2023-09-05 12:20:49 +02:00
Stefan c0f32748b4 feat(wallet) lazy load activity info optimization
Trigger async fetching of extra information on each activity filtering
request. Only emit the update event for incomplete entries.

Other changes:

- Make DataEntry light as event payload by making all the fields
  optional
- Add new required fields to the activity DataEntry
- Add collectibles.ManagerInterface to aid testing

Note: this PR keeps compatibility with current master by always
providing non-optional multi-transaction ID. The TODO will be executed
before merging the status-desktop PR.

Experienced a hang on FetchAssetsByCollectibleUniqueID call with:
[{{5 0x21263a042aFE4bAE34F08Bb318056C181bD96D3b} 1209},
{{5 0x9A95631794a42d30C47f214fBe02A72585df35e1} 237},
{{5 0x9A95631794a42d30C47f214fBe02A72585df35e1} 236},
{{5 0x9A95631794a42d30C47f214fBe02A72585df35e1} 832},
{{5 0x9A95631794a42d30C47f214fBe02A72585df35e1} 830},
{{5 0x9A95631794a42d30C47f214fBe02A72585df35e1} 853}]

Updates status-desktop #11597
2023-09-01 19:11:14 +02:00
Ivan Belyakov c24c3966e2 fix(wallet): balance history used a wrong db for accessing accounts.
Balance history was not checked for all chains if no history on
some chain.
Removed `SetInitialRange` from wallet API as internal implementation.
This method was called on adding a brand new Status account to initialize
blocks_range table to avoid transfers history checks.
2023-08-30 10:17:57 +02:00
Cuteivist dd3e408a4e
feat(wallet/activity): Added API for tx and multiTx details (#3939) 2023-08-24 14:23:40 +02:00
Stefan 524c21834b fix(wallet) propagate multi-transactions IDs to transfers
Mainly refactor API to have control on pending_transactions operations.
Use the new API to migrate the multi-transaction ID from to transfers
in one SQL transaction.
The refactoring was done to better mirror the purpose of pending_transactions

Also:
- Externalize TransactionManager from WalletService to be used by
  other services
- Extract walletEvent as a dependency for all services that need to
  propagate events
- Batch chain requests
- Remove unused APIs
- Add auto delete option for clients that fire and forget transactions

Updates status-desktop #11754
2023-08-22 18:39:42 +02:00
Ivan Belyakov 2df9df10ab fix(tests): moved test db setup to a common place 't/helpers', created
interface for initializing db, which is implemented for appdatabase and
walletdatabase. TBD for multiaccounts DB.
Unified DB initializion for all tests using helpers and new interface.
Reduced sqlcipher kdf iterations for all tests to 1.
2023-08-18 09:00:56 +02:00
Anthony Laibe 21d9d17cdc chore: reduce batch size for goerli arbitrum/optimism 2023-08-01 13:37:45 +02:00
Stefan 8926990c2d chore(wallet) retrieve all required activity header data as metadata
Add missing fields to activity metadata.

Updates status-desktop #11173
2023-07-20 11:34:41 +02:00
Stefan 64f7706567 chore(wallet) index activity filter columns to speed up queries
Implemented required benchmarks

Also

- refactor tests as needed
- don't filter temporary or incomplete transfers (transfers.loaded != 1)

Updates status-desktop #11351
2023-07-14 16:11:14 +02:00
Stefan 8bfcb80ed6 fix(wallet) fix scan to/from hash when for multi_transactions 2023-07-13 00:24:36 +02:00
Stefan 69412cf3a3 fix(wallet) fix scan of default NULL multi_transactions.*_network_id 2023-07-12 10:34:32 +02:00
Anthony Laibe 23492467b9 feat: clear balance cache after usage 2023-07-12 09:23:56 +02:00
Stefan 3ce851b84b feat(wallet) report new multi-transactions updates
Updates status-desktop #11233
2023-07-11 22:34:43 +02:00
Ivan Belyakov 09dff82db5 feat(wallet): Move pending transactions to `transactions` module.
Handle creation and deletion of pending transactions automatically
on status-go side.
2023-07-11 16:07:42 +02:00
Dario Gabriel Lipicar 66a21aa7e4 feat(wallet): detect ETH L2 to L1/L2 bridge transactions 2023-07-10 09:59:05 -03:00
Dario Gabriel Lipicar e6711c8cc8 feat(wallet): detect ETH L1 to L2 bridge transactions 2023-07-10 09:59:05 -03:00
Dario Gabriel Lipicar fb6e2a41f7 chore(wallet): reorganize multitx processing code 2023-07-10 09:59:05 -03:00
Stefan 9a30674590 feat(wallet) deliver pending changed events to clients
Add wallet events feed to TransactionManager and send pending changed
events on add and delete

Also

- Remove hardcoded values in the filter query
- Small improvement to query

Updates status-desktop #11233
2023-07-07 15:06:14 +02:00
Stefan 3b0f4ee2c1 fix(wallet) fix GetMultiTransactions for to_amount nil
Updates status-desktop #11233
2023-07-04 16:49:08 +02:00