Skip to main content

v0.0.42

Summary

This new release is dedicated solely to improving the wallet and enhancing the related user experience in the Console. Therefore, it contains only frontend changes in the related dapp.

The most notable improvement is that the wallet balance is now displayed in dollars, thanks to our friend at KongSwap for providing a (Web2) endpoint to fetch the USD exchange value for ICP. This enhancement makes it easier to understand the value of funds at a glance, particularly for newcomers in the crypto sphere.

In addition, the wallet now caches public information, such as the balance and recent transactions, in IndexedDB, which is cleared upon logout. This change improves the ux by making the interface snappier, especially during reloads.

The number of calls to load the balance has been reduced, and a few update calls have been added to improve the certification of the displayed data, ensuring more secure information.

Overview

[!NOTE] No new versions of the modules (smart contracts), crates or libraries included.

Changes

Here is a list of changes included in this release:

Console (Frontend)

The console UI/UX has been improved as follows:

Features

  • Display wallet balance in dollars.
  • Cache the dollar exchange value and refresh it periodically. If the timestamp is too far in the past, display the balance in its native cryptocurrency, ICP, instead of dollars.
  • Review the top-up wizard in terms of design and experience, making it consistent with the rest of the application, notably with the introduction of a review step.
  • Review the sending ICP wizard for the same reason, ensuring consistency with the addition of a progress component and a review step.
  • Review the transfer cycles modal with similar improvements as above.
  • Cache the wallet in IndexedDB for a snappier UI/UX. The store is cleared on logout.
  • Reload credits (if necessary) after creating a new Satellite or Orbiter.
  • Refresh the wallet balance after creating a new Satellite or Orbiter, as well as after a top-up or sending ICP.
  • Move developer credits to "preferences." While not strictly a better place to display the information, it wasn’t related to the wallet and thus had to be moved elsewhere.
  • Update the wording of modal wizards for a tone that’s a bit more "cool kids."
  • Move "Launchpad" to the user menu. Adding an entry point in the main menu without selecting a Satellite confused some users based on their feedback.
  • Display dollars under the ICP input field, giving users a sense of the USD value when preparing transactions such as sending ICP or topping up.
  • Introduce a generic store pattern to load certified data.
  • Move the cycles icon displayed when module statuses are refreshed. The layout was shifting when it appeared, which was annoying.
  • Mark stores as uncertified when not yet converted to a query+update strategy.
  • Use a query+update strategy to certify wallet data and the Mission Control ID fetched for returning users.
  • Add a utility to perform query+update calls for enhanced security through certification.
  • Use Zod to validate specific types such as Principal as text.
  • Update the list of subnets.

Fixes

  • Fixed the infinite scroll component, which was broken after the migration to Svelte v5 and failed to detect scrolling. As a result, old wallet transactions were not displayed.
  • Show navigation options only on the home page for new users, not within the dapp.

Styles

  • Fancy balance display on the wallet.
  • Adapt confetti colors to match the theme.
  • Fixed the "Rocket" icon, which was incorrect in dark mode.
  • Inherit the primary color in the skeleton.

Refactoring

  • Introduce a type for MissionControlId instead of using Principal (I’m starting to appreciate more expressive types).
  • Prefix various modules and folders to better express their relative usage.
  • Reduce verbosity with the utility fromNullishNullable.
  • Migrate various components and patterns to Svelte v5.
  • Replace $page, which is deprecated in Svelte v5.
  • Replace !notEmptyString with isEmptyString.

Chore

  • Generate a certified version of the DID files by removing the ['query'] keyword. Can’t believe this is still necessary nowadays.