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.
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
- Lint against wasm32:
cargo clippy --target wasm32-unknown-unknown
- 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:
- Run
cargo update
to update to latest deps. - 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
- Load the command line:
source .commands
or if using fish shell, bass source .commands
- Build bitcoin node + electrum:
docker-compose build
. - Up and running Docker containers:
docker-compose up -d bitcoin1 electrs carbonado rgb-proxy
. - Download and install BDK cli:
cargo install bdk-cli
(We will use BDK to generate the mnemonic). - Generate a new mnemonic:
bdk-cli key generate
. - Create an environment variable called TEST_WALLET_SEED with mnemonic generated in the step 5 (only wasm32).
- Run the test to get regtest address for bitcoin and rgb:
cargo test --test wallet -- create_wallet --exact --nocapture
. - Load your wallet in the bitcoin node:
bc1 loadwallet default
, or if using a new wallet, bc1 createwallet default
. - Generate new first 500 blocks:
bc1 -generate 500
. - Send some coins to the main wallet address:
bc1 sendtoaddress {MAIN_VAULT_ADDRESS} 10
. Change {MAIN_VAULT_ADDRESS}
with the address generated in the step 7. - Mine a new block:
bc1 -generate 1
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 bitcoin1 loadwallet default
.
B.The electrs node does not work?
To stop the electrs freeze, run bitcoin1 -generate
.