-
Notifications
You must be signed in to change notification settings - Fork 2.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Native Bitcoin Vaults on Substrate #868
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks a lot for the application. In general, this is really interesting. But I have a few questions also to make sure I understand it correctly.
- What for example is the advantage of your solution compared to having a bitcoin multisig wallet which is controlled by a DAO and signing a remark on substrate that says this multisig account is controlled by the DAO? I guess you could do the same on bitcoin using OP_RETURN.
- What deliveries will actually be implemented as a substrate pallet? Maybe you can add the programming language to each deliverable.
- Do you know of any similar projects on other blockchains?
@Noc2 Thanks for the swift response and good questions.
This would be possible. At a high level, any state trie and state transition function can be summarized to a hash to sign in a remark. As seen with the RMRK NFT project 👍, a lot of functionality can be driven through that capability. The benefit of using remark is that it is compatible with the relay chains. The trade-offs, IMHO, are mostly around usability, composability, and designing idiomatically, which I find incredibly useful for re-usability by other developers (particularly in initial releases). As an example, the In the future, I expect there to be a quite complex many:many relationship between users, DAOs, and vaults :safe. For example, within the Hypha DAO, we have "circles" or quests (projects) that are allocated a budget to a vault. There may be many circles/quests per DAO. There may also be many DAOs for each user, and they will likely may desire different We can use the remark pallet, and I can see it being a valuable 'back-end' for NBV that works on the relay chains. I think there are likely privacy preserving benefits to this as well. But the functionality and logic of generating the output descriptors dynamically along with receiving addresses, the user experience, vault handling, managing the user flow, etc, would still need to be developed. My suggestion would be that we implement the most vanilla, idiomatic way first, and then add compatibility to relay chain/remark as a next step. OP_RETURN compatibility is also interesting too. A caution with that is that, in my experience, the more complex/obfuscated the persisted state, the harder it is (more tooling/logic) for more casual users to verify and adopt. But there is absolutely value in pursuing these. Let me know what you think, and we would be happy to pivot or add this to the proposal.
I can add more details on this into the PR. All deliverables will be in Rust except for the web app, which will likely be in Vuejs because we have existing componentry there. Although we are also familiar with React, which we may use because the polkadot.{js} team has done such a great job with their app and tooling in React. The pallet will have storage for the vault metadata, with a label and likely a hash to an IPFS doc describing the mission or background for that vault. And of course, storage for output descriptors and the most recent Extrinsics (minimum)
We may have issues with
There are tons and tons of examples of wrapped Bitcoin of course, with various forms of trust, custody, and/or light clients. There is also In a few DAOs we built and participate in on Telos, there's an onchain Besides that, I have not come across any tools or products that offer this capability at all, and certainly not with the strength of user experience that non-technical users expect and we intend to build. |
Coincidentally, this recently came across my feed. An unfortunate, all to common reminder of the short-comings of wrapped tokens. Even when these problems are fully resolved technically to be flawless, on Polkadot or otherwise, it will be many years before users would be comfortable with them for long term storage. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the very detailed reply. To be honest, I already partly answered the question myself (usability) when I wrote it down, but I thought I’m going to ask it anyway ;-) Could integrate the additional details into the application/milestone deliveries? Especially regarding the pallet.
Btw. it might take a little bit longer to get necessary approval and feedback, since we are currently on a retreat. |
…son to a remark implementation, and Q&A if any similar projects exist
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think using PSBTs in Substrate is a very interesting way to go about using bitcoin in the Polkadot ecosystem, and will be useful to other teams as well. Looking forward to seeing this come to fruition and plan on testing it out myself.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I’m also happy to go ahead with it.
Congratulations and welcome to the Web3 Foundation Grants Program! Please refer to our Milestone Delivery repository for instructions on how to submit milestones and invoices, our FAQ for frequently asked questions and the support section of our README for more ways to find answers to your questions. |
Very excited for this, thank you! It isn't an announcement, but is it ok if I share a link to this document in the BitcoinDevKit development Discord channel? It will help with context regarding some of my tech questions. |
This should be fine. The grant application and PR is public anyway. Thanks for double checking. |
* Native Bitcoin Vaults on Substrate * Added more precise deliverables/functions for each milestone, comparison to a remark implementation, and Q&A if any similar projects exist
* Native Bitcoin Vaults on Substrate * Added more precise deliverables/functions for each milestone, comparison to a remark implementation, and Q&A if any similar projects exist
Native Bitcoin Vaults - Project Abstract
Native Bitcoin Vaults (NBV) is a composable Substrate application for native Bitcoin multisig wallets. NBV does NOT use peg tokens, wrapped tokens, synthetics, or any other cross-chain communication or escrow arrangement.
A vault is a BIP-174 multisignature Bitcoin wallet.
Substrate accounts set their Extended Public Key to their profile on the prebuilt Identity pallet. These accounts, vault signers, may be selected via any mechanism, usually an election.
Using Partially Signed Bitcoin Transactions (PSBT) and output descriptor, NBV facilitates secure receiving address generation and a seamless user experience for managing and executing multisig Bitcoin transactions.
Spectre Desktop (or Caravan) will be forked and customized so that NBV can pass the output descriptor to the signer, where the user has many options of compatible hardware wallets.
NBV allows for Substrate-based governance to establish which accounts should be responsible for a specific vault (usually via election), and provides those accounts the UI for signing Substrate transactions AND multisig Bitcoin transactions.
NBV also generates verifiable Bitcoin receiving addresses to enhance the security and comfort of donors and investors.
A DAO's native token(s) is nearly always secure and trustless. However, small businesses and DAOs also want to hold Bitcoin in treasury. These organizations frequently do not integrate their primary governance chain and Bitcoin, leaving open a significant vulnerability. NBV solves this.
For which grant level are you applying?
Application Checklist
project_name.md
) and updated.