Skip to content

iskyd/walle

Repository files navigation

WALL•E

Wall•E is a Bitcoin Wallet written in Zig.

WARNING: Do not use this project with real BTC. It is not secure (yet)! The cryptographic part is built from scratch and it is not audited.

Project

This project will produce 3 executables:

  • walle: Bitcoin wallet CLI.
  • indexer: This is the bitcoin blockchain indexer. It will only saves locally (in an sqlite db) the relevant transactions/outputs/inputs.
  • wbx: Command line utility for Bitcoin (the name is inspired by libbitcoin-explorer)

Build the project

zig build

You can also specify --release=<release mode>. Check the Zig Docs for more information.

Testing

zig build test
zig build test --summary all -- src/bip39/bip39.zig src/bip38/bip38.zig

Dev Environment

Devbox

You can directly use devbox to create a complete dev environment. Check devbox.json and devbox docs for more information.

devbox shell
Nix + devenv

In order to get a shell with all the tools you need to contribute to this project you can run

direnv allow

This will enable the direnv environment that will automatically makes you enter the development shell every time you enter the project directory (or any subdirectory). This uses nix (with flakes) and direnv.

This command

nix flake check

will run regular checks of the flake, in particular it will run git hooks. This runs in the GHA flake-check job.

Git hooks

The nix shell will install the git hooks automatically. The pre-commit configuration .pre-commit-config.yaml is git-ignored because it will be a simple link to the /nix/store: the semantic is not changing but the location can differ from different machines/configuration.

You can manually trigger the hooks on all files:

pre-commit run -a

Check the --help for more usages.

Bitcoin Node

walle needs a bitcoin-core node. You can run one using the Dockerfile. The configuration is defined in node/bitcoin.conf and it is used to create a regtest network.

docker build -t btcnode .
docker volume create btcnode
docker run --rm --name btcnode -v btcnode:/bitcoin-25.0/data -p 18444:18443 btcnode

Regtest

The first time you run the node you need to create a new wallet (it is no longer created automatically, if the walle was already created use loadwallet) then you can getnewaddress and mine some blocks.

bitcoin-cli -rpcuser=walle -rpcpassword=password -rpcport=18443 createwallet walle
bitcoin-cli -rpcuser=walle -rpcpassword=password -rpcport=18443 getnewaddress
bitcoin-cli -rpcuser=walle -rpcpassword=password -rpcport=18443 generatetoaddress <nblocks> <address>

Walle uses rpc to communicate with bitcoin-core. Ex:

curl --verbose -L --user walle --data-binary '{"jsonrpc": "1.0", "id": "walle", "method": "getblockchaininfo", "params": []}' -H 'content-type: text/plain;' 0.0.0.0:18444

Features

  • Crypto (secp256k1, ecdsa signatures, ripemd160, bech32). Everything is built from scratch.
  • Bip39 (Mnemonic generation)
  • Bip32 (HD Wallets)
  • BIP38 (Encrypting Bitcoin Private Key)
  • Bip44
  • Serialized Extendend Private/Public Key
  • BTC core rpc integration
  • Indexer
  • Addresses
  • Segwit
  • Transactions (create/sign/broadcast)

Roadmap

  • Support Legacy Wallet
  • Support Script Hash (P2SH, P2WSH)
  • Multisig Wallet
  • Taproot
  • Export private key
  • Secure signature from hardware wallet

Contributing

Join WALL•E's Discord channel to chat with the contributors and understand next steps, available tasks and bugs to be fixed.

About

Bitcoin wallet written in Zig

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages