2022-03-30 15:11:01 -07:00
image:https://github.com/bitcoinj/bitcoinj/workflows/Java%20CI/badge.svg[GitHub Build Status,link=https://github.com/bitcoinj/bitcoinj/actions]
2023-05-23 02:18:19 -07:00
image:https://gitlab.com/bitcoinj/bitcoinj/badges/master/pipeline.svg[GitLab Build Status,link=https://gitlab.com/bitcoinj/bitcoinj/-/pipelines]
2022-03-30 15:11:01 -07:00
image:https://coveralls.io/repos/bitcoinj/bitcoinj/badge.png?branch=master[Coverage Status,link=https://coveralls.io/r/bitcoinj/bitcoinj?branch=master]
2014-08-27 10:49:57 +01:00
2024-04-20 18:54:07 -07:00
image::https://img.shields.io/badge/chat-Join%20bitcoinj--users%20on%20Matrix-blue[Join the bitcoinj-users Matrix room, link=https://matrix.to/#/#bitcoinj-users:matrix.org]
2015-07-28 12:42:30 +02:00
2014-08-27 10:49:57 +01:00
### Welcome to bitcoinj
The bitcoinj library is a Java implementation of the Bitcoin protocol, which allows it to maintain a wallet and send/receive transactions without needing a local copy of Bitcoin Core. It comes with full documentation and some example apps showing how to use it.
### Technologies
2024-09-01 12:08:57 -07:00
* Java 8+ (needs Java 8 API or Android 8.0 API, compiles to Java 8 bytecode) for `base` and `core` module
2024-08-29 17:02:17 +02:00
* Java 17+ for `tools`, `wallettool`, `examples` and the JavaFX-based `wallettemplate`
2024-08-27 15:46:17 -07:00
* https://gradle.org/[Gradle]
** Gradle 7.3+ for building the whole project or
2024-09-01 12:08:57 -07:00
** Debian Gradle 4.4 for just the `base`, `core`, `tools`, `wallettool` and `examples` modules (see "reference build" below)
2022-03-30 15:11:01 -07:00
* https://github.com/google/protobuf[Google Protocol Buffers] - for use with serialization and hardware communications
2014-08-27 10:49:57 +01:00
### Getting started
2018-03-06 21:13:17 +01:00
To get started, it is best to have the latest JDK and Gradle installed. The HEAD of the `master` branch contains the latest development code and various production releases are provided on feature branches.
2014-08-27 10:49:57 +01:00
#### Building from the command line
2024-08-23 17:44:37 +02:00
Official builds are currently using JDK 17. Our GitHub Actions build and test with JDK 17 and 21.
2022-03-30 15:11:01 -07:00
2014-08-27 10:49:57 +01:00
```
2018-03-06 21:13:17 +01:00
gradle clean build
2014-08-27 10:49:57 +01:00
```
2024-08-23 17:44:37 +02:00
The outputs are under the `build` directory.
2019-02-23 10:49:00 -08:00
2022-03-30 15:11:01 -07:00
To perform a full build _without_ unit/integration _tests_ use:
2014-08-27 10:49:57 +01:00
```
2019-02-23 10:49:00 -08:00
gradle clean assemble
2014-08-27 10:49:57 +01:00
```
#### Building from an IDE
2022-03-30 15:11:01 -07:00
Alternatively, just import the project using your IDE. http://www.jetbrains.com/idea/download/[IntelliJ] has Gradle integration built-in and has a free Community Edition. Simply use `File | New | Project from Existing Sources` and locate the `build.gradle` in the root of the cloned project source tree.
2014-08-27 10:49:57 +01:00
2019-08-26 13:33:17 -07:00
### Building and Using the Wallet Tool
2022-03-30 15:11:01 -07:00
The *bitcoinj* `wallettool` subproject includes a command-line Wallet Tool (`wallet-tool`) that can be used to create and manage *bitcoinj*-based wallets (both the HD keychain and SPV blockchain state.) Using `wallet-tool` on Bitcoin's test net is a great way to learn about Bitcoin and *bitcoinj*.
2019-08-26 13:33:17 -07:00
To build an executable shell script that runs the command-line Wallet Tool, use:
```
2022-01-03 20:36:12 -08:00
gradle bitcoinj-wallettool:installDist
2019-08-26 13:33:17 -07:00
```
You can now run the `wallet-tool` without parameters to get help on its operation:
```
2022-01-03 20:36:12 -08:00
./wallettool/build/install/wallet-tool/bin/wallet-tool
2019-08-26 13:33:17 -07:00
```
To create a test net wallet file in `~/bitcoinj/bitcoinj-test.wallet`, you would use:
```
mkdir ~/bitcoinj
2021-10-17 21:47:14 +02:00
```
```
2022-09-19 19:30:11 +02:00
./wallettool/build/install/wallet-tool/bin/wallet-tool --net=TESTNET --wallet=$HOME/bitcoinj/bitcoinj-test.wallet create
2019-08-26 13:33:17 -07:00
```
To sync the newly created wallet in `~/bitcoinj/bitcoinj-test.wallet` with the test net, you would use:
```
2022-09-19 19:30:11 +02:00
./wallettool/build/install/wallet-tool/bin/wallet-tool --net=TESTNET --wallet=$HOME/bitcoinj/bitcoinj-test.wallet sync
2019-08-26 13:33:17 -07:00
```
To dump the state of the wallet in `~/bitcoinj/bitcoinj-test.wallet` with the test net, you would use:
```
2022-09-19 19:30:11 +02:00
./wallettool/build/install/wallet-tool/bin/wallet-tool --net=TESTNET --wallet=$HOME/bitcoinj/bitcoinj-test.wallet dump
2019-08-26 13:33:17 -07:00
```
2022-03-30 15:11:01 -07:00
NOTE: These instructions are for macOS/Linux, for Windows use the `wallettool/build/install/wallet-tool/bin/wallet-tool.bat` batch file with the equivalent Windows command-line commands and options.
2019-08-26 13:33:17 -07:00
2025-01-30 02:15:33 -08:00
### Building and Running the Wallet Template
2025-01-29 18:16:58 -08:00
The *bitcoinj* `wallettemplate` subproject includes a template JavaFX wallet application (`bitcoinj-wallettemplate`) that can be used as a starting point for building a JavaFX-based *bitcoinj* wallet application.
To build an executable shell script that runs the wallettemplate, use:
```
gradle bitcoinj-wallettemplate:installDist
```
2025-01-30 02:15:33 -08:00
You can now run `bitcoinj-wallettemplate` to launch the application:
```
./wallettemplate/build/install/bitcoinj-wallettemplate/bin/bitcoinj-wallettemplate
```
NOTE: On Windows, use `bitcoinj-wallettemplate.bat`.
You can also use `jlink` to build and run the application with a bundled JVM runtime:
```
gradle bitcoinj-wallettemplate:jlink
./wallettemplate/build/image/bin/bitcoinj-wallettemplate
```
2023-09-16 15:12:47 +02:00
### Building the reference build
Our reference build (which is also used for our releases) is running within a container to provide good reproducibility.
Buildah 1.26+, Podman 4.1+ and Docker (with BuildKit) are supported. We tested various combinations of host OSes
(Debian, Ubuntu, macOS, Windows+WSL) and architectures (amd64, arm64). For usage instructions see `build.Containerfile`.
2024-08-26 13:43:44 +02:00
This uses Debian Gradle with the `settings-debian.gradle` settings. If you happen to use Debian and have Gradle
installed from the Debian repository, you can invoke these settings directly:
```
gradle --settings-file settings-debian.gradle clean build
```
2014-08-27 10:49:57 +01:00
### Example applications
These are found in the `examples` module.
### Where next?
2022-03-30 15:11:01 -07:00
Now you are ready to https://bitcoinj.github.io/getting-started[follow the tutorial].
2019-02-24 23:16:08 -08:00
### Testing a SNAPSHOT build
2022-03-30 15:11:01 -07:00
Building apps with official releases of *bitcoinj* is covered in the https://bitcoinj.github.io/getting-started[tutorial].
2019-02-24 23:16:08 -08:00
2024-08-23 18:33:05 +02:00
If you want to develop or test your app with a https://jitpack.io[Jitpack]-powered build of the latest `master` or `release-0.17` branch of *bitcoinj* follow the dynamically-generated instructions for that branch by following the correct link.
2019-02-24 23:16:08 -08:00
2022-03-30 15:11:01 -07:00
* https://jitpack.io/#bitcoinj/bitcoinj/master-SNAPSHOT[master] branch
2024-08-23 18:33:05 +02:00
* https://jitpack.io/#bitcoinj/bitcoinj/release-0.17-SNAPSHOT[release-0.17] branch