Description
This is a patch release adjusting a lot of the issues seen on the app in the month since 1.44. Indexer handling gets several fixes, with clearer paid Etherscan versus Blockscout key guidance and no more redundant L1 fee or Routescan requests on Optimism, Base, Gnosis and Scroll. It also addresses ETH staking and validator issues and removes BitMEX support now that the exchange has shut down. Among many other things.
It contains 174 commits from 4 different commiters. For more information check the detailed changelog below 👇
Things to note
The situation with free indexers has changed and users need to take action. The affected chains are:
- Polygon POS and Base are no longer in the free tier of Blockscout. This means that to query transactions from Polygon a free Etherscan API key is enough and a paid Etherscan or Blockscout API key is needed for Base.
- Gnosis indexing is only available for free with Blockscout.
- Blockscout and Optimism seem to have been experiencing some issues but it continues to be free.
If you don't want to track any of the chains anymore but still want to keep the addresses and the history it is possible to do it from the settings in the Chains section
Our sponsors
This release is sponsored by:
🥇 Gold Sponsors
- Ambire Wallet (0xa07D75aacEFd11b425AF7181958F0F85c312f143)
🥉 Bronze Sponsors
- soxpert.eth (0xEf6FE9C9B351824c96e5C7a478C1e52BAdCBAEe0)
Downloads
Upgrade is highly recommended. Download the binary for your OS from below:
- Linux
- AppImage
- Tar with executable
- deb package
- Standalone Backend
- OSX
- arm64
- x86_64
- Standalone Backend
- Windows
- Windows executable
- Standalone Backend
Optionally, you can also verify the integrity of the aforementioned binaries using the following checksums:
- Linux
- AppImage checksum
- Tar with executable checksum
- deb package
- Standalone Backend
- OSX
- arm64
- x86_64
- Standalone Backend
- Windows
- Windows executable checksum
- Standalone Backend
Release Highlights
These were the highlights. Check below for the full changelog :point_down:
New Features
- rotki now tells you when a chain's transactions can not be queried because a paid Etherscan API key is required, and queries Etherscan first on such chains when a paid key is configured.
- [#13152] A matched pair of bridge events can now be unlinked from the history events list with "Unlink matched events", the same way a matched deposit or withdrawal already could. Both legs are restored and then ignored, so automatic matching does not link them straight back, and they can be restored or matched by hand from the Ignored tab of Match Bridge Transactions. A counterpart event that was created to complete the match is removed with it.
Bug Fixes
- Asset icons that were downloaded after an earlier failed lookup are shown again. Before, the empty file left by the failed lookup could hide the downloaded icon, and a lookup that failed only due to rate limiting marked the icon as missing for 12 hours.
- Logging out while balances are still loading after login, then logging back in, no longer leaves "All balances" running with no end. Before, the new session never queried all balances, so that day's balance snapshot was not saved.
- Logging out while prices are still loading no longer shows "Fetching prices" errors after logging back in, and no longer leaves price refreshes stuck in the new session.
- BitMEX API support is removed since the exchange has shut down and its API is no longer available. Existing BitMEX history is kept and BitMEX wallet history CSV files can still be imported.
- A snapshot whose locations and net value were lowered by hand while a mispriced token stayed in its balances can now be fixed in one step: the "Totals do not match" warning names the token and offers to remove it. Before, every balance stayed locked until the value was put back into a location, and for a spam token the graph plotted that snapshot far below zero. The snapshot editor's line about excluded ignored assets can now also show them.
- Percentages in the snapshot editor now stop at 1,000,000% instead of printing thirty digits or exponent notation.
- Splitting a balance's removal across locations in the snapshot editor now offers a Fill action per location, so a mispriced value spread over several locations no longer has to be typed out digit by digit. Reconciling a snapshot's totals no longer offers a location the difference would push below zero.
- A failed purge, image cache clear or protocol data refresh under Settings > Database > Manage Data now says that it failed and why. Before, Purge Data reported "Data was successfully deleted" even though nothing was removed, Refresh protocol data said "Protocol data was successfully cleared" while a separate notification reported the failure, and Purge Images Cache stopped at "failed:".
- A snapshot's change since the previous one, and the warning about a large change, now compare both snapshots the same way. Before, an ignored spam token could turn a small change into a warning of over 1,900%.
- The snapshot editor's net worth now matches the snapshot list and the graph, which leave out ignored assets (and NFTs when your NFT settings exclude them), and says how much it excludes. Before, a snapshot with an ignored spam token could read 60,000 in the list and 1,313,200 once opened.
- In the snapshot editor, "Show spam" alone now reveals spam balances. Before, they also needed "Show ignored". The hidden-rows chip now says why rows are hidden and reveals them when clicked, and the balances total says when it includes hidden rows.
- The snapshot editor no longer preselects the largest location under "Absorb difference into", and "Reconcile locations" stays disabled until you pick one. With a high-value spam token the largest location is usually the one where the difference does not belong.
- The snapshot editor's "Totals do not match" warning no longer suggests setting the total to the balances sum, an action it does not offer.
- Moving to another snapshot in the editor no longer keeps the location picked on the previous one to absorb a totals difference.
- A snapshot whose stored total no longer matches its balances, while its location totals still add up to them, now opens with the corrected total as an unsaved change, so it can be saved. Before, the editor showed the corrected value with Save disabled, and the snapshot list, the graph and the next snapshot's change kept the old total.
- The history events table now refreshes after a change made while it was already reloading, such as matching an event. Before, that change was not shown until the next refresh.
- The transaction decoding status no longer clears its list of undecoded transactions when a decode finishes, which made it read as though everything had been decoded.
- Starting a profit and loss report or a debug export while one is already running no longer leaves a progress check running afterwards.
- Adding an account on a chain queried from Blockscout first (by default Optimism, Base, Gnosis and Scroll) now warns when no Blockscout API key is set. The Optimism, Base and Gnosis indexer settings say they need a Blockscout key or a paid Etherscan key.
- Optimism transaction queries no longer try Routescan after the service dropped support for the chain. When free indexers cannot serve Optimism, Base or Gnosis, rotki now offers a free Blockscout API key before suggesting paid Etherscan access.
- [#13216] rotki starts again on macOS 12 (Monterey) and 13 (Ventura). Since 1.44.0 the backend failed to start there with a numpy "Symbol not found" error.
- [#13220] When etherscan asks rotki to split a long transaction query into smaller ones, the progress of each part is now saved. Before, only the first part was recorded, so an interrupted first sync of a busy address downloaded most of its history again, and the logs showed "Gap detected" errors.
- A configured beacon node that does not answer no longer blocks login for minutes. The connection check is now a single attempt, so rotki falls back to beaconcha.in quickly.
- [#13226] Tokens received in older transactions that are decoded later, such as Uniswap v4 positions, now show up in balances right after decoding, without needing to re-detect tokens. To avoid caching spam, this covers tokens received from protocols or in transactions sent by your own accounts. NFTs are only added if you still own them.
- Deleting every event of a transaction now offers Cancel, Exclude from Accounting and Delete Transaction as separate choices. Before, the button meant to exclude the transaction read "Cancel", so cancelling, or pressing Escape, led to the exclusion prompt instead of closing. The rotki Premium device limit warning now reads "Dismiss" instead of "Cancel".
- Adding an account on a chain that queries Etherscan first no longer claims a Blockscout API key is needed when an Etherscan key is already set.
- Velo/Aero gauges will now be refreshed properly.
- All rows of a snapshot's Locations drawer and every entry of the Help & Support sidebar can be reached again on smaller windows. The transaction decoding status, protocol cache updates status and Select Matching Event dialogs now scroll only their table, keeping their buttons in view, and the accounting rule and asset update conflict dialogs keep their "Keep All Local" and "Keep All Remote" buttons visible while the list scrolls.
- The internal transaction conflicts table scrolls again when pinned to the sidebar, where rows below the bottom of the panel could not be reached. In its dialog only the table scrolls now, so the tabs, filter and Close button stay in view.
- All cases of Hedgey vesting claims should now be decoded properly.
- Using lowercase EVM address in the history event address filter should now work properly.
- Optimism internal transaction queries spanning the Bedrock upgrade now fetch post-Bedrock transactions even when pre-Bedrock data is unavailable.
- When deleting ETH staking validators fails, they now stay in the validators table instead of disappearing from it while rotki still tracks them.
- Detecting tokens no longer causes native asset balances, such as ETH, to disappear from cached balances.
- Turning syncing back on for one exchange under API Keys -> Exchanges no longer turns it back on for every exchange you paused after it.
- Updates to the default RPC node lists now take effect immediately, so newly added nodes can be used without logging out and back in.
- Failed remote data updates no longer block other updates and are retried.
- [#13218] Refreshing transaction history on Optimism, Base and Scroll now avoids redundant L1 fee requests when receipts already contain the fee.
- Pasting a date into a date and time field, such as the one in the add event form, now works when the text leaves out the seconds or milliseconds, uses ISO format, carries a timezone, or is a unix timestamp. Text that is not a date shows a message instead of doing nothing.
- Profit and loss reports no longer show a misleading missing accounting rule warning for trade receive events when the spent asset is ignored.
- Clicking an amount to copy it now copies the full decimal number, such as
0.000000001, instead of scientific notation like1e-9for very small or very large amounts. - Correctly decode temporary SOL wrapping and unwrapping in Jupiter swaps, avoiding duplicate transfers and reporting the swap and fees in SOL instead of WSOL.
- The description of the Spam action in the event form's action picker no longer claims such events are ignored in accounting. They are counted like any other receive.
- Undelegating, withdrawing and bridging GRT back to Ethereum through a The Graph vesting contract on Arbitrum One are now decoded for the tracked beneficiary instead of showing up as gas-only transactions.
- [#13090] Aerodrome and Velodrome liquidity additions and removals made with ETH are now properly decoded, and Aerodrome/Velodrome Slipstream concentrated liquidity swaps and positions are now supported and gauge and staking and CL position balances are recognized
- The chain picker now lists the chains alphabetically instead of in the order the backend happens to return them, so a chain can be found by scrolling to where its name belongs. "All Supported Chains" stays at the top, and it can now be found by typing any part of its name, where before only "all" matched it.
- A price source that stops answering is now set aside after its first timeout and checked with a quick probe before it is used again.
- Hovering the time in the dashboard's "The last event query completed ..." message no longer turns the cursor into a question mark.
- Coinbase conversions no longer get a made-up fee consisting of the difference between the two legs' fiat valuations.
- Removing a Coinbase, Bitstamp or Binance connection now forgets how far its history had been queried, renaming one carries that progress over to the new name, and a connection added under the name of a previously removed one starts querying from scratch.
- Swaps through any newer 0x Settler deployment are now decoded, including any future ones.
- [#12795] When every RPC node of one chain fails, blockchain balances of the other chains are no longer discarded from balance snapshot.
- [#13034] Withdrawals from a validator whose withdrawal address you do not track no longer show up in your history or count as staking income.
- Across and CCTP bridges involving Solana are now decoded, and their Solana and EVM history events are matched as the two sides of the same bridge transfer.
- Claiming your Safenet staking rewards is now recorded as a staking reward.
- [#13027] Adding an ETH2 validator by index or public key works again. Since 1.44.0 the Add Account button on the validators tab opened the generic blockchain account form instead of the validator form, and saving from it did nothing, so a validator that was not picked up automatically from its deposit could not be added at all.
- A Kraken trade fill so small that its fiat side rounds to zero is now shown against the pair's real quote asset.
- Historical prices of a token that exists on several chains now come from the main asset it is grouped with, so WETH on Arbitrum, Optimism and Base is priced as ETH. They used to be priced on their own and could come back at roughly half of ETH's value.
- [#8107] A 1inch swap in which the sender also receives a second transfer no longer turns that extra transfer into a second swap receive
- Refreshing protocol data no longer gets stuck showing a pending pool cache update when there are no new pools to add or a pool cannot be queried.
- Changing the asset or chain in the send form while a gas estimate is still loading no longer ends the loading state early. It stopped as soon as the request you moved away from unwound, which re-enabled the amount field and the Send button while the Max amount still used the previous fee estimate.
- When a history refresh skips an online source you have switched off or not connected, the reason shown in the pending tasks list of the notification sidebar now names that source the way the rest of rotki does. It read as the raw internal name, so a skipped block production query was explained as "block_productions is not available".
- The pending tasks list in the notification sidebar now scrambles the addresses it shows while "Scramble data" or privacy mode is on. Rows such as "Retrieving transactions for 0x... on Ethereum" and account additions printed the real address, so scrambling, which is meant to make rotki safe to screen-share or screenshot, did not cover the list that is open while you work.
- Scrambled amounts no longer all read as zero when the scramble multiplier is set to 0, which looked like rotki losing your balances rather than concealing them. A multiplier of 0 or below is now treated as 1, a multiplier between 0 and 1 is used as given and scrambles amounts downwards, and randomly generated multipliers now always start at 1.
- Cancelling a running sync from the pending tasks list in the notification sidebar no longer leaves the Syncing History panel of the history events page reading "Sync Complete". It now reads "Sync Cancelled", and its grouped rows say "9 chains finished" instead of "9 chains complete" when anything inside them was cancelled or, for chains, failed. Before, those rows reported a clean completion that contradicted the rows they contained.
- The Help menu's logs directory entry now opens the directory rotki is actually logging to. If you had set a custom log directory it opened the default one instead, so being told to check the logs sent you to a folder with nothing in it.
- When a balance snapshot is due by your balance save frequency, logging in takes it again once all chains have refreshed, so your net worth graph gets its next point. Since 1.44.0 that snapshot was only taken if you left rotki open for ten minutes or synced your history, so opening rotki for a quick look and closing it left a gap in the graph.
- The buttons that ignore or unignore the selected assets are labelled "Ignore" and "Unignore" again, with the tooltips "Ignore the selected assets" and "Stop ignoring the selected assets". This covers the Assets list in Manage Assets, NFT Balances, and the asset selection on the accounts pages, which only has Ignore. They read "Exclude" and "Include" and claimed to add or remove actions from the profit and loss report, which is not what they do to an asset.
- [#13132] Refreshing Frankencoin savings balances will now work properly when one address holds savings while others do not.
- "Unlink matched events" is now offered directly on a matched event whose accounting rule is missing, where the missing rule warning replaced the menu holding it and the action could only be reached by expanding the pair. The "Events affected by the accounting rule" dialog no longer offers to unlink matched events, which it carried out for real even though nothing else in that dialog changes your data.
- Unlinking a matched asset movement now ignores it as well, so automatic matching no longer links it straight back. It can be restored or matched by hand from the Ignored tab of Match Asset Movements, where an ignored row now offers "Find Match" next to "Restore". The same applies to the Ignored tab of Match Bridge Transactions.
Newly supported assets
Updated the information of the following assets:
- WETH (WETH) on ethereum
- Wrapped Ether (WETH) on optimism
- Wrapped Ether on xDai (WETH) on gnosis
- Wrapped Ether (WETH) on matic
- Wrapped Ether (WETH) on monad
- Wrapped Ether (WETH) on base
- Wrapped Ether (WETH) on arbitrum
- Avalanche Bridge: WETH.e (WETH.e) on avalanche
- Wrapped Ether (WETH) on scroll