VaultForge Crypto Wallet
- 27 Devlogs
- 113 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 React.
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 React.
hang tight, it’s coming soon 🚀 i attached some proof , you guys can check out the transaction here
more info on this tomorrow after v0.5.0 comes out with the CCTP support. you haven’t seen nothing yet, uniswap support coming next; stay tuned! probably coming in the next week or so…
i haven’t had much time in the last few days but i managed to do a big refactor to make the code more modular and cleaner. this is needed so that i can do more complex transactions instead of just basic transfers.
i haven’t pushed it to main or committed it yet but it’s basically done. in terms of when CCTP support will ship, I think it will be by the end of sunday.
after absolutely grinding on the support for swapping for the past week, here are some updates:
main soon, about half bug fixesi’ve also decided on a rough implementation order of swapping-related functionality:
i know this is kind of an ambitious timeline but i think i can pull it all off before the end of stardance on the 31st of october 🤞.
i think i will manage to get CCTP transfers working by friday or sunday, depending on how much time i have.
since the deadline for stardance has been extended by one month, i decided to keep going and make VaultForge as good as possible over the coming weeks.
here’s a quick overview of what i will focus on next:
with these new features, especially the integrated swapping, my wallet is finally going to be on par (mostly) with established wallets such as metamask.
i’ve already got like 10+ commits since the last release that i will merge to main branch soon…
as promised, VaultForge v0.4.0 is out! this brings huge changes to wallet unlock speed, adds ripple support, adds BIP-84 addresses, and loads more.
here is the link to the release page if you want to check it out.
some interesting stats:
v0.3.0.this is probably going to be my second-to-last devlog as i really want to hit the 100-hour mark.
so i finally added ripple support… and migrated everything to React for a much better, cleaner UI. and as always, i am late again. i actually could have finished on friday but i had other things to do (like homework) and i also wanted to migrate to react as well since I decided this will be my last release before the end of stardance, so i really want to add everything i can.
this is because after stardance i will take a break of a few months on this project and then come back with a different hack club ysws challenge.
the react migration was so big that i decided to use AI this time: the finished App.tsx file containing the react code is over 3090 lines of code (proof is the 2nd attached image)! that’s the largest code file i have ever worked on.
since this is a huge change to the ui, i decided to create some before and after comparisons below.
anyways, i decided to share some design decisions relating to the migration to react. i knew react was a big framework so it would add a few MB to the app’s file size (about 1-2 MB as of my recent testing) but the app itself is tiny anyway - not even 30 MB - so i thought it was really worth it. it gives you design consistency, more so than tailwindcss, which i needed since the more fun part for me was working on the backend and not the frontend (the user-facing part of the application).
plus, the guys who work at coinbase (shoutout to them) made a goated plugin/theme/whatever you call it for react which makes my app have the default coinbase theme that i can tweak (i made the font monospace) which is alone like 70% of the stuff needed for the migration.
i promise i will release v0.4.0 tomorrow…
perf improvement #3 done! 🎊 now refreshes are fully concurrent, w/ a limit of 4 requests at a time to avoid rate limiting. i haven’t fully tetsed it yet but it feels noticeably faster (like 25-35% faster) until the updated prices & balances are shown.
plus, I kind of finished the settings stuff so i’ll be working on ripple support ig…
sorry guys, i’m kind of late on this one tbh: I said that I would have the settings improvements, ripple support and all that ready by like monday but clearly nothing has happened since like the weekend.
i have decided to delay the timleine by about a week as after some careful consideration I found it was wayyy too aggressive and my fingers can’t keep up with the typing speed i would need for that :)
i seriously have no idae whatsoever why I thought it was possible to add that many features in such a short space of time. I know it kind of is but I have school now which means i have much less time for this with homework and studying and stuff.
however, today I decided to lock in and actually do this and so I can assure you that i am hard at work doing the settings stuff rn and ripple support is absolutely coming right after that this next release really is going to be a big one…
p.s. i attached a screenshot of some of the new commits i worked on (more are coming soon)
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:
Feedback
Hey! Thanks for shipping your project. It's not quite ready for voting yet, so here's what we'd like you to change:
- Rework the frontend, right now it looks like every other AI-made site. Give it your own style.
Once you've made these, ship it again and we'll take another look!
Shipwright walkthrough
Feedback
Your demo link can't be example.com. Please compile your project and publish a binary to github releases
I added loads of stuff!
Just finished the basic UI; more coming soon…
Current features already include: