{"id":13525535,"url":"https://github.com/B3Pay/B3Wallet","last_synced_at":"2025-04-01T05:31:55.204Z","repository":{"id":176239740,"uuid":"631325466","full_name":"B3Pay/B3Wallet","owner":"B3Pay","description":"B3Wallet: A decentralized, multi-chain wallet with unique support for Bitcoin, Ethereum, using Internet Computer's threshold ECDSA. Manage multiple accounts and owners securely and efficiently with this open-source solution.","archived":false,"fork":false,"pushed_at":"2024-03-30T14:24:01.000Z","size":58155,"stargazers_count":23,"open_issues_count":0,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-05-21T12:55:21.971Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://b3wallet.live/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/B3Pay.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2023-04-22T16:59:55.000Z","updated_at":"2024-04-20T09:30:16.000Z","dependencies_parsed_at":"2023-07-10T03:01:22.338Z","dependency_job_id":"61ff4f71-5e70-4ecb-9faf-0334fb256168","html_url":"https://github.com/B3Pay/B3Wallet","commit_stats":null,"previous_names":["b3pay/b3-wallet","b3pay/b3wallet"],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/B3Pay%2FB3Wallet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/B3Pay%2FB3Wallet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/B3Pay%2FB3Wallet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/B3Pay%2FB3Wallet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/B3Pay","download_url":"https://codeload.github.com/B3Pay/B3Wallet/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246591321,"owners_count":20801982,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T06:01:19.742Z","updated_at":"2025-04-01T05:31:50.184Z","avatar_url":"https://github.com/B3Pay.png","language":"Rust","funding_links":[],"categories":["Chain Fusion"],"sub_categories":["General"],"readme":"# B3Wallet - A MultiChain and MultiOwner Wallet\n\n## Introduction\n\nB3Wallet is a decentralized multi-chain and multi-owner wallet. It is designed to support multiple blockchains, including Bitcoin, Ethereum, and Internet Computer. It also supports multiple owners, including single owner, multi-owner, and multi-signature. In addition, it supports multiple accounts. Being decentralized, it does not rely on any centralized service and users can use it without any registration and recover it without any backup.\n\n## Features\n\n- Multiple blockchain support: Bitcoin, Ethereum, and Internet Computer\n- Multiple owner support: single-owner, multi-owner, and multi-signature\n- Multiple account support\n- Decentralized: does not rely on any centralized service, users can use it without any registration and recover it without any backup.\n\n# Demo\n\n![Alt text](/images/demo.png?raw=true \"Demo\")\n\n## Login:\n\nTo start, log in using your Internet Identity.\n\n![Alt text](/images/login.png \"Login\")\n\n## Create Wallet:\n\nYou can create a wallet or use the UI anonymously.\n\nTo create a wallet, follow these steps:\n\n1. Choose the wallet type: 'b3_basic_wallet' (single owner) or 'b3wallet' (multi-signature).\n2. You can create a new canister or use an existing one.\n\n- - You can create your own canister using the NNS dApp. Once it's created, copy the canister ID into the input box.\n- - Alternatively, you can use the 'Create' button to generate a new canister. As of now, this is free, but it may cost some cycles in the future.\n- - If you're part of a multi-signature wallet, you can add a canister ID that's already been created by other users, and click Add Canister button.\n\n![Alt text](/images/create-wallet.png?raw=true \"Create Wallet\")\n\n## Add Account:\n\nBy default, the wallet creates an account for you. However, if you need more, you can add additional accounts. These accounts are derived from the same canister but utilize different indices.\n\n![Alt text](/images/add-account.png?raw=true \"Add Account\")\n\n## Multiple Signatures:\n\nWallets can have multiple signers, and users have the ability to add or remove signers. Once a signer is added, a 2/2 signature consensus is required for transaction approval. The logic operates on a 50%+1 basis, so if there are three signers, a 2/3 signature consensus is required for transaction approval.\n\n![Alt text](/images/multisig.png?raw=true \"Multi-Signature\")\n\n## Self Custody:\n\nB3Wallet provides self-custody functionality, meaning users maintain exclusive control over their canisters, and therefore, their funds. This decentralized approach to asset management aligns with the ethos of blockchain technology, enabling users to truly 'be their own bank'.\n\n![Alt text](/images/selfcustody.png?raw=true \"Self Custody\")\n\n## Self Upgrade:\n\nB3Wallet allows for self-upgrades, ensuring that you always have access to the latest features and security updates.\n\n![Alt text](/images/selfupgrade.png?raw=true \"Self Custody\")\n\n# Custom Wallet Creation Libraries\n\nAlso, there are three libraries to facilitate other developers in building their own wallets seamlessly. These libraries, located in the [lib directory](https://github.com/B3Pay/b3wallet/tree/main/backend/lib), aim to streamline the wallet creation process and allow developers to customize a wallet that meets their unique needs.\n\n## The Libraries:\n\n- `b3_utils`: This foundational library provides core functionalities essential for every wallet. It equips developers with fundamental tools to initiate and manage various wallet operations.\n\n- `operations`: This library is designed to handle the authorization and permissions within the wallet. It simplifies the process of assigning and managing permissions for different wallet operations, enabling you to create wallets that support various levels of user access.\n\n- `b3wallet_lib`: This comprehensive library ties everything together and manages key aspects of wallet functionality. It handles account creation, key management, balance queries, and transfer processes for different blockchains and tokens. It also takes care of derivation processes, providing a versatile suite of wallet management tools. By using `b3wallet_lib`, developers can interact with a clear and convenient interface, making the creation, management, and interaction with wallets a seamless experience.\n\nBy utilizing these libraries, developers can create customized wallets tailored to their specific needs and innovative concepts.\n\n## Use Cases\n\nThe `b3wallet` presents numerous practical applications in everyday life and the business world:\n\n1. **Couples' Saving Wallet**: Couples can create a shared wallet to manage joint expenses or save for common goals, providing an intuitive and transparent way to handle shared finances.\n\n2. **Company Payroll**: Businesses can leverage this wallet to distribute salaries to their employees. With the capability to handle different blockchains and tokens, it can cater to diverse payment preferences and requirements.\n\n3. **Multi-owner Operations**: Any group with shared financial interests, from small project teams to large organizations, can use this wallet to manage their funds. By setting the required number of signatures, the group can enforce collective decision-making on financial matters.\n\n4. **Personal Finance**: Individuals can use this wallet to manage their crypto assets across multiple blockchains from a single interface. With its robust security features and easy recovery options, it offers a reliable and user-friendly tool for personal asset management.\n\n5. **Custom Wallets**: With the help of `b3wallet_lib`, `b3_helper`, and `b3_permit`, developers can create custom wallet solutions tailored to specific needs. This opens up a world of possibilities for innovative financial products and services built on top of the `b3wallet`.\n\nThis project harnesses the power of the Internet Computer blockchain. By utilizing the blockchain's features such as scalability, security, and seamless interoperability, `b3wallet` is able to provide a decentralized, robust, and versatile solution for managing crypto assets.\n\nAs the digital economy continues to grow, the `b3wallet` has the potential to play a crucial role in various sectors, making crypto asset management more accessible and secure for all, with the incredible capabilities of the Internet Computer blockchain backing it.\n\n## Future Plans\n\nI am considering the creation of a global wallet - a wallet that no one owns but everyone can sign. This revolutionary concept aims to bring the ethos of decentralization in blockchain technology to the next level. Stay tuned for more updates on this.\n\n# Setting Up and Running B3Wallet Locally\n\nClone the repo : `git clone --recurse-submodules https://github.com/B3Pay/b3wallet.git `.(b3_utils is a submodule)\n\nFollow these instructions to set up and run the B3Wallet project on your local machine:\n\nAll of these commands can also be run with npm by replacing `yarn` with `npm run` in each command.\n\nPlease make sure to have the necessary software installed and configured properly on your local machine before following these steps, including Node.js, Yarn (or npm), and DFINITY's SDK, dfx.\n\n1. **Start the dfx service**: Open a terminal and run the following command:\n\n```bash\nyarn dfx:start\n```\n\nYou can also run the command with the `--enable-bitcoin` flag if you want to enable Bitcoin:\n\n```bash\nyarn dfx:start --enable-bitcoin\n```\n\n2. **Install dfx**: While keeping the dfx service running, open another terminal and run:\n\n   `Note: make sure you have the latest version of dfx installed and nns extension is installed, you can install it by running the following command:`\n   dfx extension install nns\n\n```bash\nyarn dfx:install\n```\n\nSimilar to the previous step, you can also run the command with the `--enable-bitcoin` flag:\n\n```bash\nyarn dfx:install --enable-bitcoin\n```\n\n3. **Install project dependencies**: Install all the project dependencies with:\n\n```bash\nyarn install\n```\n\n4. **Deploy the project**: Deploy the project with:\n\n```bash\nyarn deploy\n```\n\nNote: If you get `The Replica returned an error: code 3, message: \"Canister bkyz2-fmaaa-aaaaa-qaaaq-cai is already installed\"`, run `yarn deploy` again.\n\n5. **Generate Candid and Types**: Generate the Candid interface and Typescript types for your canisters:\n\n```bash\nyarn generate\n```\n\n6. **Load the WASM module to system canister**: Load the WASM module to the system canister with:\n\n```bash\nyarn load-wasm:system\n```\n\n7. **Start the development server**: Finally, you can start the development server with:\n\n```bash\nyarn dev\n```\n\n# Using Autobuild\n\n```bash\nyarn autobuild deploy\n```\n\nThis will automatically build the project and deploy it to the local dfx instance. It will also generate the candid and typescript bindings. It will also load the wasm module to the system canister.\n\nDuring rapid development, to fetch a fresh copy of the repository, use:\n\n```bash\nyarn autobuild clean  # or  yarn autobuild clean [github username of the fork]\n```\n\nTo find out full functionality, use;\n\n```bash\nyarn autobuild --help\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FB3Pay%2FB3Wallet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FB3Pay%2FB3Wallet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FB3Pay%2FB3Wallet/lists"}