In the Nervos community, developer “Tea” ( @tea2x on GitHub)’s project Quantum Purse has stood out, winning a $700 USD grant from the CKB Eco Fund Spark Program.
CKB Eco Fund | Spark Program Announcement for Quantum Purse Project
We spoke with Tea in a written interview, discussing the project’s origins, key technical decisions, and some behind-the-scenes stories only a developer could tell. The full conversation is below—enjoy the read.
1. Before we dive into the details, we’d love to learn a bit about you. How did you start your journey as a developer? What was it that drew you to blockchain technology, and specifically to Nervos CKB? And before Quantum Purse, what was your contribution history in the CKB community?
Tea: Hi, I’m Tea (T). I began my career as an embedded software engineer at a chip design company, specializing in testing CPU core functions. Assembly and C++ were my main languages at the time. Writing Assembly test patterns bored me enough that I wanted to build something more observable — something that could actually reach end-users. So I quit and entered the blockchain space in 2021. When I first got into crypto, I joined a startup building on EOS (C++). But the last wave of EOS hype faded soon after, funds dried up, and we moved on to EVM. I started again with EVM & Solidity — it was super easy to learn and adapt. Around that time, I also started reading Mastering Bitcoin and heard about CKB. Soon enough, funds dried up again following the Luna and FTX crashes in 2022. By the end of 2023, I quit again — and this time, I wanted to go solo. CKB RISC-V based virtual machine and Jordan’s intro video(What is Nervos?) still lingered in my mind since it first got my attention and with the launch of joyID around that time frame, CKB just felt like my next intuitive target. It seemed like the balance point I was looking for: not too high-level, but not too low either.
Before Quantum Purse, I built a Nervos DAO prototype named joyDAO that eventually got into the good hands of the CKBEcofund team and became NERVDAO.
2. What was the initial inspiration behind creating Quantum Purse? Why did you decide to focus on “quantum resistance,” a topic that many still see as futuristic?
Tea: The topic of CKB’s quantum resistance was discussed several times in the telegram chat group Nervos Nation and I partially joined the fun assuming the foundation was building it secretly. One day Leigh texted me about building a quantum safe wallet and I just liked it immediately so I texted Matt. A few options were considered but eventually building a separate wallet was the most viable path and I started building the wallet not long after.
Quantum resistance got my attention because I was curious about the thing long before Quantum Purse. Many see it as a futuristic concern, but I believe we need cryptography that safeguards and strengthens our digital legacy now—much like how we don’t wait for a pandemic to spread before acting; we focus on prevention. The true value of a cryptosystem lies in its ability to avert threats, not just respond to them after the damage is done. If quantum breakthroughs often come as surprises, then quantum-safe cryptography adoption should advance fast and loudly.
3. Your Spark proposal focused on adding Nervos DAO support and a native desktop app. At that time, why did you consider these two features the most important next steps for the project?
Tea: Quantum Purse is at this point a considerably hard to use wallet (comparable to Neuron in many aspects). Whoever comes to use Quantum Purse must have a long term mindset and a solid confidence in the Nervos Network project. And for this group of users, Nervos DAO is a crucial application to shelter their investments from the secondary inflation long term.
A desktop app was inevitable for Quantum Purse. I wouldn’t recommend using the web wallet unless it were secured by Passkeys—the same technology used in joyID. However, Passkeys aren’t quantum-safe, so rather than relying on them, I made Quantum Purse a password-based wallet and aimed to deliver the entire solution to users in a self-contained, more complete form through a native desktop application. PWA app(like joyID) was also considered but its non-direct distribution channel was not the number 1 priority so it was dropped eventually.
4. One of the most interesting parts of your journey was the decision to build a ccc adapter instead of assembling raw transactions from scratch. Could you walk us through your thought process behind this significant pivot? What were the pros and cons you weighed?
Tea: When building the prototype that eventually became NERVDAO, I built the Nervos DAO transactions manually following the spec but the process is error-prone. I didn’t want to repeat that process again even though it was my intuitive choice at first. Since NERVDAO went into production and is completely open-source, it’s just natural to reuse its transaction building technique. Also making Quantum Purse CCC compatible will benefit long term development because reusing codes from other projects that utilise CCC will be easier, faster, and requires less auditing efforts. For example, iCKB integration or UDT support are all in my plan and CCC compatibility will assist it greatly.
CCC adapter, simply speaking, is an integration that few other wallets in the ecosystem have already built (or been supported) e.g. joyID. But in the case of Quantum Purse it is done at a lower level on the arch of the CCC core. It has a different signer because it is SPHINCS+ based and it has a different client type - CKB light client js on wasm. These are just new building blocks and combining them was an uncommon way to build CKB Dapp. Thankfully CCC arch allows such customizations and Hanssen really nailed at providing accurate constructive comments so I just went on quite smoothly. Also Pocket wallet - another Nostr-based wallet probably had gone the similar path on CCC x ckb-light-client-js really solidified knowledge confirmation along the way of development.
5. You used Electron to create a desktop app. What challenges did you face in taking a web app to a native desktop experience, especially with platform-specific issues like the macOS signing and notarization?
Tea: Not much challenge for this part, Electron is a great tool and Neuron has gone on a similar path to deliver the Neuron desktop app. macOS signing & notarization belongs to Apple’s world and it is well supported so it’s less of a burden compared to the wallet development. Windows does require the same thing to be done in app distribution but on windows, users can opt to run it right on the UI whereas Macos hides it - which is why macOS signing and notarization was a part of my report.
6.There was a discussion about password length during the review. How do you balance cutting-edge security requirements (like needing high entropy for post-quantum crypto) with user-friendliness? What’s your design philosophy on this?
Tea: Quantum Purse is a password-based wallet solution so having a strong password that’s on the same level of the SPHINCS+ variant is ideal but it will be too long in most cases and will require new practices to use it. Allowing for shorter passwords puts users at risk too and can even negate the whole point of Quantum Purse. Quantum-safe means nothing if the user is targeted and hacked before they even still have anything to resist quantum attacks. Quantum Purse raises the minimum number of characters each each password to 20 (approaching SPHINCS+ 128* variants security level) with a few improvements to make them stronger. Quantum Purse’s password entrance check can somewhat eliminate a few bad cases but I would recommend users to strive for strong passwords on their own that pass Quantum Purse’s entrance check. The more random and the harder to remember, the safer it is. It may seem counter intuitive, but strong passwords (or high-enough raw entropy) do resist quantum attacks.
7. Looking back at the entire Spark development period, what was the single most challenging technical problem you had to solve, and how did you overcome it?
Tea: The most challenging technical problem was almost understanding what Script error codes mean on the front-end side. Sometimes it could take days to set up a working environment that facilitates adding custom debug code into Script and to address the bug. Once I attempted to connect the client in Quantum Purse’s light client to a local dev node but ended up taking too much time so I just rewired the whole thing with RPC, just to facilitate debugging. Hopefully with the toolings getting more mature and more knowledge shared, this will get easier in the future.
8. Besides the major decision to pivot to the ccc adapter, were there any other surprising technical discoveries or difficult trade-offs you had to make during development? It could be a small detail that ended up having a disproportionately large impact on the project.
Tea: My first surprising discovery was that the Quantum Resistant Lock Script prototype was outdated because it was using a non-standardized FIPS205 (new name since NIST approved and acquired SPHINCS+). At that phase of development I was using a JS-based signer(off-chain) and a C-implementation for the verifier(on-chain). Fortunately someone built a full featured standardised FIP205 SPHINCS+ using Rust and it is built in a way that can be utilized and deployed directly on CKB VM XD - which today is still used in the official Lock Script. After that I built a FIPS205-compatible version of the prototype using Rust so I could continue the development. Quantum Purse has now adopted the new official Lock Script, benefiting from its all-in-one configuration that allows for all 12 SPHINCS+ variants to be supported on the front-end.
CKB_TX_MESSAGE_ALL - a new proposal to generate CKB transaction fingerprints in signing and verification - currently being reviewed - is also used in the Quantum Resistant Lock Script (the official one). This requires Quantum Purse to follow the same procedure to generate a valid fingerprint for the transaction off-chain. My first intuitive take was to generate it right in the middle stack of Quantum Purse but since Xuejie built a Rust crate for that so I just clone and run it in wasm and return the CKB_TX_MESSAGE_ALL. Now of course CKB_TX_MESSAGE_ALL is getting supported more and more e.g. in CCC but this trick allowed me to finish the Quantum Purse prototype earlier than anticipated and it is still used today.
9. Quantum Purse utilizes the CKB light client. Could you share your experience working with it, and what advice would you give to other developers looking to build dApps on top of it?
Tea: CKB light client is an awesome piece of technical infra for the Nervos network. The new light client library that’s built to run in a web environment is another great milestone that I see as a game changer since only a few blockchains can achieve “true mobile client”. The library works great alone and the integration guide is clear, but the challenge lies mainly in integrating it with CCC and to make the whole solution work. At the moment it’s unable to unlock 100% the power of CCC but it is enough for Quantum Purse to function with its current function set.
If you’re having an existing dApp or building a new one, try integrating the light client. It now supports macOS, windows, Linux and even Wasm on web browsers. It might be harder than the traditional RPC endpoint approach and will face some limitations, but having a node running in your app is a unique feature. Furthermore, building your app this way, you don’t just build your app, you’re contributing to a larger ecosystem of open source projects and learning a lot. Hopefully Quantum Purse and Pocket Wallet will ease your integration with some sample codes. If you have an issue, just ask the light client team or go on discord, there’re people that will help you and I’ll be happy to share stuff if needed.
10. A community member, Phroi, raised an excellent point about the long-term sustainability of projects. Now that the Spark grant is complete, what are your thoughts on the future of Quantum Purse? Do you have any plans for long-term maintenance or future features?
Tea: Phroi is right that at this stage this wallet can’t achieve self sustainability. The fact that the major fundings for Quantum Purse come from the Nervos Foundation is a proof. After this grant is completed, there’re a few exciting things Quantum Purse can bring in the near future (from high to low priority) e.g. iCKB integration, UDT support, multisig, off-line signing or even support full-node mode on the wallet. In the far future, if a post-quantum hardware wallet comes up, or a new quantum-resistant lockscript arrives, I’ll be excited to integrate them into Quantum Purse too. And if I ever actually need incentives for future development, I’ll go for the community fund DAO. I’d like to try that some day.
11. Following up on that, is applying to the Community Fund DAO for longer-term support something you might consider for the project’s next phase?
Tea: Yes.
12. As the first graduate of the Spark Program, what advice would you give to other developers in the Nervos community who have an idea and are thinking about applying for a grant?
Tea: Just do a research about the scope of the program and after that if you find it is a fit for you, go to apply — you’ll either have fun, get funded, walk away with an experience or all of them. None of these is worthless in my opinion. Grants are modest but you’ll have less stress and more freedom in probably time, deploying your idea and executing it especially in an early phase. And the Spark Program could very well open the door to a larger and successful community fund DAO proposal in the future for you.
13. How do you see Quantum Purse contributing to the broader vision of the Nervos network? What makes CKB a good Layer 1 for this kind of forward-looking project?
Tea: Quantum Purse is a front-end app that can showcase the powers CKB and its backend supports: PoW, Light client, RISC-V, Crypto agnosticism. Firstly, at the moment it can best serve as a strong marketing tool and I hope it can draw more attention to the dev eco system. Secondly, by sharing its building technique via opensource, I also hope it can somewhat lessen the development burden of other wallets in the ecosystem if they go for the same path upgrading quantum safe crypto or integrating ckb super lightweight client.
PoW makes CKB light client protocol possible. RISC-V VM and Cell model allow for crypto agnosticism. Also PoW is quantum-safe. All these make CKB a perfect “land” for Quantum Purse and many other apps.
14. Beyond the code itself, what are you most proud of with this project? It could be a lesson learned, a community interaction, or the moment you overcame a specific hurdle.
Tea: Probably making new friends in the CKB - Comrades Keep Building community. Having some small chances to work with some of the CKB OGs is also very cool.