VaultForge Crypto Wallet
- 15 Devlogs
- 86 Total hours
A multi-chain, fully self-custodial crypto wallet that supports BTC, EVM chains, SOL, ZEC, FIL, and more, built completely from scratch. Built in Rust and TypeScript with TailwindCSS.
A multi-chain, fully self-custodial crypto wallet that supports BTC, EVM chains, SOL, ZEC, FIL, and more, built completely from scratch. Built in Rust and TypeScript with TailwindCSS.
Since the last devlog, I’ve worked on some more boring stuff: Tauri cleanup and desktop-specific improvements.
I moved the application setup and command registration from src-tauri/src/main.rs into a new src-tauri/src/lib.rs. This keeps the entry point organized and follows Tauri’s recommended structure, while main.rs now only launches the library.
I also replaced the browser clipboard API with Tauri’s native clipboard manager plugin. Copy buttons now use the desktop clipboard integration.
Finally, VaultForge now enforces a single-instance window. If the app is launched while another instance is already open, the new launch focuses the existing main window instead of opening a second copy, which is far more desirable of a behaviour imo as it lets a user find a window without inadvertently opening even more.
Plus some more random stuff:
Next, I’m continuing the settings improvements before moving on to Ripple support.
P.S. I also randomly moved to Neovim as it looks much better than VS Code.
Not very much since last time; just some refactors and small improvements throughout. You can kind of tell by all the fix/chore/docs changes…
btw improved settings is in the works - I think I’ll do some more progress over the next two days, then some actual chain support for Ripple. I’ve decided that I will release v0.4.0 before adding basic Zcash support as it’s been basically a month since last release and I don’t want to keep you guys waiting for those of you who want to download the binaries directly w/o building.
Now –> ~5 September: settings improvements
5 September –> 7 September: Ripple support
7/8 September: release of VaultForge v0.4.0
I finally added different currencies! Before, all prices were displayed in USD and now they can display in any of the below currencies:
Shoutout to the fantastic API I used for this! Previously, I fetched CoinGecko pricing data which came in USD but I needed to convert this data into whatever currency the user chose so I had to find an API. However, there really weren’t any good forex APIs that were free with no rate limits when I searched for one so I turned to ChatGPT to find one and find one it did. This API gives daily central bank rates and even has data going back to 1948 on 201 currencies which is more than enough for this project.
I also added the second performance improvement: caching the HTTP request client object to avoid having to recreate it on every API request.
As of rn the project roadmap for the near future is this:
v0.5.0
Quite a bit more to report this time! Since last devlog, I’ve mostly been working on improving actual wallet functionality, fixing some smaller UI issues, and looking into performance.
Below is a quick summary of what I’ve been working on since the last devlog:
.js config files to TypeScript because apparently I cannot resist refactoring things even when it makes no difference whatsoever.For the first time in this series of devlogs, I’m linking the changes to relevant commits on GitHub wherever possible so you can have a look.
I also found a few ways to reduce VaultForge’s roughly 10s full refresh time:
The above estimated perf improvements are obviously quite variable and depend on a multitude of factors (+ I got ChatGPT to analyze my current code to make an estimate because how else would I do it), but there is definitely still a lot of low-hanging fruit here.
v0.4.0 (so therefore for v0.5.0).v0.4.0.What a MASSIVE PR and it’s finally merged! Hooray! That was the biggest PR I’ve ever created by a big margin.
Now I can finally start work on actual features like more support for different blockchains, address types, random extra features that certain chains have… the list goes on. I already have a personal list of 25 different blockchains that I want to add support for, most of which aren’t in the project roadmap simply for the reason that it would make the file overly long and hard to read. *sigh* that will take a long time
Not to underestimate what I added with the PR, though - I didn’t spend like 15 hours and do 48 commits for nothing: inside the PR I added
For anyone who got lost somewhere in the previous paragraph, an RPC is a service that allows you to query data about the state of the blockchain (where crypto transactions are stored) so you can use it to see how much crypto you are holding.
Token accounts are basically a weird quirk of Solana where your main account is used to hold Solana which links to associated token accounts (ATAs), which each hold one token other than Solana.
This is by far not a complete list but rather a list of the highlights of this PR; if you want to look at all the changes, please feel free to visit the page linked at the top of this devlog.
That said, after this big change, I did say last devlog that I would be getting ready to release version v0.4.0 of this application which is exactly what I will do after adding Tron token support!
Quick reminder, after v0.4.0 I am planning to add Ripple (XRP) support, preliminary (meaning like non-shielded probably) support for Zcash and revamp the settings page like I did to the onboarding in this PR.
Further out, I will probably focus some more on the in-application swaps to aggregate data from major DEXs (decentralized exchanges) to get the best rates, matching other major wallets w/ more chain support, which would make my wallet actually competitive. 🤞
I’m close to finishing the theme improvements (I would say I’m about 90% there) and am doing some general bug fixes and QoL improvements.
As such, there isn’t much to log rn except for a few small new features & improvements:
Enter key when entering a seed phrase to import, text overflow, etc.If you want to see my progress on this PR (there are already like 30 commits in it - it’s a pretty big PR!), you can do so here.
main so that it will be in the next releasev0.4.0 either before or after adding support for Ripple transactionsNot much to report but I’m still working on improving the theme and the wider interface. You can see my progress here.
Below is a quick summary of what I’ve been working on since last devlog:
I think the elephant in the elephant in the room rn is actual settings which I will be working on over the next few days as currently there are no settings in the literal settings page!
That took a lot of time!
Over the past two weeks, I have done quite a bit of bug fixing and stopping undesired behaviour, including
Ctrl + ... or with trackpad gestures completelyAlong with this, I have done quite some improvement on the CI (especially the release.yaml workflow and pre-commit checks) and some refactoring, including
npm install, bun install, Oxlint, Oxfmt validation, TypeScript typechecking, cargo check, and
package.jsonpackage-lock.jsonbun.locksrc-tauri/Cargo.locknpm install, bun install, and automatic lockfile staging is to ensure consistency between npm and Bun so that both can be used in development and testing. The other checks are for checking (or at least trying to; there could always be edge cases that aren’t covered) that no invalid code gets committed. There is also a maximum commit message subject length (72 characters) and the same for each line of the commit message body to ensure that commit messages stay readable.cargo test, and rust-analyzer analysis on every push to GitHub, since every commit runs the other checks anyway and uncommitted code can’t be pushedsrc/views/
release.yaml (the app release workflow for GitHub) so that it now
networks.json (the file that contains all the relevant chain information for the TypeScript frontend) with all the scattered equivalent information in the Rust backend; now, the backend references the networks.json file insteadAlso, you are now able to test out all of these changes as I have just released v0.3.0 of VaultForge!
Unfortunately, I haven’t yet worked on any of the theme changes but these are top priority for the next release…
As a recap, here are the things that I will be working on for the next release, in order of priority:
Unfortunately, since I am on holiday, I was not able to complete everything that I wanted to do by the end of last week. However, I was definitely able to make some progress:
Not much to announce rn but so far (since last week/log), I have
Not too exciting but this lays the groundwork for what is to come. 👇🏼
I will try to add this before the end of this week:
I added loads of stuff!
Just finished the basic UI; more coming soon…
Current features already include: