Git Product home page Git Product logo

bitmask-core's Introduction

BitMask Core

Core functionality for the BitMask wallet - https://bitmask.app

BitMask is a Bitcoin-only web wallet and browser extension for accessing decentralized web applications on the Bitcoin timechain. It is designed to support UTXO-based smart contracting protocols such as RGB, in addition to Lightning payments.

Build status Crates.io npm: bitmask-core License: MIT+APACHE Telegram

Uses

Build

This should work with either wasm-pack, trunk, or x86-64.

Some environment variables may be needed in order to compile on macos-aarch64, for more, see this.

If there are issues compiling, be sure to check you're compiling with the latest Rust version.

To build this as a NodeJS module, use: wasm-pack build --release --target bundler

Test

  1. Lint against wasm32: cargo clippy --target wasm32-unknown-unknown
  2. Run tests in browser: TEST_WALLET_SEED="replace with a 12 word mnemonic for a wallet containing testnet sats" wasm-pack test --headless --chrome

Run

To run the bitmaskd node with REST server, either for testing the web wallet, or simply for increased privacy:

cargo install --features=server --path .

Then run bitmaskd.

Development

Parts of this application are built with conditional compilation statements for wasm32 support. This is a helpful command for checking linting and correctness while also developing on desktop platforms:

cargo clippy --target wasm32-unknown-unknown --no-default-features --release

Release

Upon a new release, follow these steps:

  1. Run cargo update to update to latest deps.
  2. Run cargo +nightly udeps to see if there are any unused dependencies.

Docker

For running bitmask-core tests in Regtest Mode, please follow the steps below:

Initial Setup

  1. Build bitcoin node + electrum: docker-compose build.
  2. Up and running Docker containers: docker-compose up -d node1 bitmaskd.
  3. Load the command line: source .commands
  4. Download and install BDK cli: cargo install bdk-cli. We will use BDK to generate the mnemonic.
  5. Generate a new mnemonic: bdk-cli generate.
  6. Create an environment variable called TEST_WALLET_SEED with mnemonic generated in the step 5 (only wasm32).
  7. Run the test to get main address for bitcoin and rgb: cargo test --test wallet -- create_wallet --exact.
  8. Load your wallet in the bitcoin node: node1 loadwallet default.
  9. Generate new first 500 blocks: node1 -generate 500.
  10. Send some coins to the main wallet address: node1 sendtoaddress {MAIN_VAULT_ADDRESS} 10. Change {MAIN_VAULT_ADDRESS} with the address generated in the step 7.
  11. Send some coins to the rgb wallet address: node1 sendtoaddress {RGB_VAULT_ADDRESS} 10. Change {RGB_VAULT_ADDRESS} with the address generated in the step 7.
  12. Mine a new block: node1 -generate 1
  13. Run the test to check the balance: cargo test --test wallet -- get_wallet_balance --exact.

Running the tests

Running the tests: cargo test --test-threads 1

Troubleshooting

1. After restarting the container

A.The bitcoin node does not work?

Check if your wallet is loaded. For that, run the command node1 loadwallet default.

B.The electrs node does not work?

To stop the electrs freeze, run node1 -generate.

bitmask-core's People

Contributors

crisdut avatar cryptoquick avatar dangould avatar dependabot[bot] avatar gigi3d avatar grunch avatar josediegorobles avatar xiaolou86 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.