First wallet that uses Simplicity descriptors.
The latest research on Bitcoin smart contracts at your fingertips.
$ cargo build
We need Elements Core with added Simplicity support.
There are multiple ways to install it:
Download the prebuilt binary by psgreco which adheres to the same security standards as the Bitcoin Core binaries.
Compile Elements manually using the official instructions.
Use the provided nix shell. This will give you elementsd
and elements-cli
.
$ nix-shell
A slightly outdated version of Elements + Simplicity can be installed via nixpkgs.
$ nix-shell -p elementsd-simplicity
$ simpiwallet <SUBCOMMAND>
$ simpiwallet help
Generate the initial xpub and save it to disk.
$ simpiwallet new
Other operations will read and write from the same file.
Secret keys are stored in plain on disk! Don't forget, this is a research prototype. Use it on regtest or testnet, but never on mainnet!
The wallet needs to communicate with Elements.
Feel free to use the provided Elements configuration.
$ mkdir ~/.elements
$ cp elements.conf ~/.elements
Run elementsd.
$ elementsd
Initially the wallet will not have any funds. You have to generate an address and send coins from another wallet.
Check how many coins are inside your Simplicity wallet. If there are enough, then you can skip the rest of this section.
$ simpiwallet getbalance
: <BALANCE>
Create an Elements wallet if you don't already have one.
$ elements-cli createwallet <WALLETNAME>
Or load your existing Elements wallet.
$ elements-cli loadwallet <WALLETNAME>
For technical reasons it is often necessary to rescan the blockchain.
$ elements-cli rescanblockchain
Check if your Elements wallet has funds. With the provided configuration, it should have 21 million bitcoin.
$ elements-cli getbalance
Generate an address for your Simplicity wallet.
$ simpiwallet getnewaddress
: <ADDRESS>
Send coins to your Simplicity wallet.
$ elements-cli sendtoaddress <ADDRESS> <AMOUNT>
Mine an Elements block to finalize the transaction.
$ elements-cli -generate 1
Now your Simplicity wallet should have a higher balance.
$ simpiwallet getfunds
: <HIGHER_BALANCE>
Send coins to a given Elements address.
$ simpiwallet sendtoaddress <ADDRESS> <AMOUNT>
: <TXID>
The wallet will sign and broadcast the transaction immediately to Elements via RPC.
The returned transaction ID can be used to get the full transaction hex.
$ elements-cli getrawtransaction <TXID>
: <TXHEX>
Use hal-simplicity to inspect the transaction further.
$ hal-simplicity tx decode <TXHEX>
Don't forget to mine an Elements block to finalize the transaction.
$ elements-cli -generate 1