Skip to content

A Rust library implementing primitives for a Bitcoin Taproot wallet managing on-chain inheritance of bitcoins

License

Notifications You must be signed in to change notification settings

crypto7world/btc-heritage

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

82 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Contributors Forks Stargazers Issues MIT License


Logo

BTC Heritage

Rust crates implementing primitives for a Bitcoin Taproot wallet managing on-chain inheritance of coins
Explore the Heritage wallet service »

Report Bug · Request Feature

Table of Contents
  1. About The Project
  2. Usage
  3. Roadmap
  4. Built With
  5. Minimum Supported Rust Version (MSRV)
  6. Contributing
  7. License
  8. Contact
  9. Acknowledgments

About The Project

The repository hosts 3 crates supporting the Bitcoin Heritage wallet: a Taproot Bitcoin wallet developped in Rust with built-in, on-chain protections against loosing your coins and inheritance.

The basic principle is a dead-man switch: should you become unable to spend your coins for whatever reasons, alternative spending paths (i.e. TapScripts) will eventualy open, allowing other private keys to spend your coins, following a schedule you configure enforced by the Bitcoin blockchain. On the other hand, if you are able to spend your coin you can regularly "reset" this schedule simply by moving your coins to a new address of your wallet.

The Heritage wallet offers a trustless solution to protect your coins mainly in 2 situations:

  1. You loose access to your wallet for some reason (backup issues, passphrase forgotten, ...)
  2. You die.

In both cases, using the Heritage wallet, your coins will be recoverable after some time, either by yourself in situation 1 or your next of kin in situation 2.

Usually, protecting yourself against those situations require one or more trusted third-party with whom you share control of your coins to various degrees. The Heritage wallet offers a solution without such compromise: you retain exclusive control of your coins.

The 3 crates roles are:

  • The btc-heritage library provides the fundations of the on-chain management, i.e. generating and tracking addresses, synchronizing with the blockchain, creating PSBT, basicaly everything not related to the private keys of the wallet;
  • The btc-heritage-wallet library builds upon btc-heritage to add the features required to build a complete wallet software, most notably private keys management and signing capabilities;
  • The heritage-service-api-client library exposes serializable types to communicate with the Heritage service API (see btcherit.com).

Usage

Visit btcherit.com, the online service built upon the btc-heritage library, to start using the Heritage wallet and learn more.

You will need to install the heritage-cli to manage your wallet's private keys.

The project is in a beta-phase: I use it to manage my own BTC confidently and so can you.

While I hope the btcherit.com service will help me pay my bills, I do not wish to lock users in and it is very important for me to allow people to manage their coins on their own if they wish to. So if you do not wish to use an online service, you can use only the heritage-cli with your own Bitcoin or Electrum node for synchronization!

(back to top)

Stability and versioning

All the software provided is in working order and can be safely used to manage Bitcoin's holdings (I do since February 2024).

We are using Semantic Versioning (MAJOR.MINOR.PATCH).

Everything is still in the initial-development stage (version 0.x.x). While you can expect every new version to be in working order, you SHOULD NOT expect the APIs to be stable. That being said, new features and breaking changes will only happen on MINOR version increment, not on PATCH version increment.

Roadmap

The roadmap is accurate regarding my immediate goals for the project.

  • Add on-chain/public TapRoot wallet capabilities to manage an Heritage wallet (wallet with an inheritance configuration you choose)
  • Add off-chain/private TapRoot wallet capabilities, i.e. private key management, the ability to sign transactions
  • Create a new CLI Heritage wallet tool
  • Add support for hardware wallets:
    • Ledger (ledger.com)
    • Trezor (unfortunately Taproot script paths not supported currently) (trezor.io)
  • Capability for the wallet library to use a custom Bitcoin Core or Electrum node instead of the service
  • Create a GUI Heritage wallet tool (see btcherit.com, the online service in the time being)
  • Add support for MultiSig N-of-M Heir to allow kind-of inheritance sharing
  • Add lightning support
  • Eliminate dependency to BDK

Also consult the open issues for other proposed features and known issues.

(back to top)

Built With

Rust

And based upon 3 Rust projects without which I would not have gotten that far:

Thanks.

(back to top)

Minimum Supported Rust Version (MSRV)

This library compile with Rust 1.79.0.

While I will always remain on stable Rust (i.e. NOT depend on nightly), I do not plan on being conservative on the MSRV. If at some point a mildly interesting feature pops in a new Rust version, I will happily bump up the MSRV.

(back to top)

Contributing

Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Your contribution will be licensed under the MIT license of this repository.

(back to top)

License

Distributed under the MIT License. See LICENSE for more information.

(back to top)

Contact

John Galt - @Crypto7W - john@crypto7.world

Though my real name is Jérémie Rodon (LinkedIn, GitHub), I operate this project under the pseudonym John Galt in reference to the character of Ayn Rand novel Atlas Shrugged (and, yes, I obviously embrace John Galt philosophy).

Project Link: https://github.com/crypto7world/btc-heritage

(back to top)

Acknowledgments

(back to top)

About

A Rust library implementing primitives for a Bitcoin Taproot wallet managing on-chain inheritance of bitcoins

Resources

License

Security policy

Stars

Watchers

Forks

Packages

No packages published

Languages