A library for working with Bitcoin
Go to file
Sean Gilligan 6fc1087aba wallettemplate: mark fields as final
This commit fixes every IntelliJ warning about fields being final for
the wallettemplate module.
2023-09-12 17:54:46 +02:00
.github gradle.yml: update JDK to 21-ea in the build matrix 2023-09-05 17:43:00 +02:00
core Wallet: use getAbsoluteFile() when checking if parent directory exists 2023-09-07 17:44:04 +02:00
designdocs Contexts.md: remove outdated reference to Tor/Orchid support 2023-08-09 18:01:59 +02:00
examples CoinSelector: new static method fromPredicate() to create CoinSelector 2023-09-01 18:38:14 +02:00
integration-test build.gradle: update EasyMock to 5.2.0 2023-09-02 18:09:47 +02:00
tools TestFeeLevel, WalletTest: use Wallet.waitForConfirmations() instead of Transaction.getConfidence().getDepthFuture() 2023-08-25 23:42:39 +02:00
wallettemplate wallettemplate: mark fields as final 2023-09-12 17:54:46 +02:00
wallettool wallet.proto, paymentrequest.proto: move generated files to dedicated packages 2023-07-28 21:55:26 +02:00
.gitattributes Add a logo. 2013-03-01 13:59:48 +01:00
.gitignore build.gradle: generate protobuf classes into the build directory 2023-09-02 16:31:26 +02:00
.gitlab-ci.yml .gitlab-ci.yml: add a build with OpenJDK 21 under Debian Trixie 2023-09-05 17:36:21 +02:00
AUTHORS AUTHORS: update from git 2021-11-03 09:20:32 +01:00
build.gradle build.gradle: update protobuf-gradle-plugin to 0.9.4 (if Gradle 7 or later) 2023-09-02 16:43:20 +02:00
COPYING Initial checkin of BitCoinJ 2011-03-07 10:17:10 +00:00
README.adoc wallettemplate: require JDK 17+ and Gradle 7.3+ 2023-09-06 23:47:07 +02:00
settings.gradle wallettemplate: require JDK 17+ and Gradle 7.3+ 2023-09-06 23:47:07 +02:00

image:https://github.com/bitcoinj/bitcoinj/workflows/Java%20CI/badge.svg[GitHub Build Status,link=https://github.com/bitcoinj/bitcoinj/actions]
image:https://gitlab.com/bitcoinj/bitcoinj/badges/master/pipeline.svg[GitLab Build Status,link=https://gitlab.com/bitcoinj/bitcoinj/-/pipelines]
image:https://coveralls.io/repos/bitcoinj/bitcoinj/badge.png?branch=master[Coverage Status,link=https://coveralls.io/r/bitcoinj/bitcoinj?branch=master]

image::https://img.shields.io/badge/chat-Join%20bitcoinj%20users%20on%20Matrix-blue[Join the bitcoinj-users Matrix room, link=https://matrix.to/#/#bitcoinj-users:matrix.org]

### 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

* Java 8+ (needs Java 8 API or Android 8.0 API, compiles to Java 8 bytecode) and Gradle 4.4+ for the `core` module
* Java 11+ and Gradle 4.4+ for `tools`, `wallettool` and `examples`
* Java 17+ and Gradle 7.3+ for the JavaFX-based `wallettemplate`
* https://gradle.org/[Gradle] - for building the project
* https://github.com/google/protobuf[Google Protocol Buffers] - for use with serialization and hardware communications

### Getting started

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.

#### Building from the command line

Official builds are currently using JDK 11. Our GitHub Actions build and test with JDK 11 and JDK 17.

To perform a full build (_including_ JavaDocs, unit/integration _tests_, and `wallettemplate`) use JDK 17+.

```
gradle clean build
```
If you are using JDK 17+ and Gradle 7.3+, the build will automatically include the JavaFX-based `wallettemplate` module. The outputs are under the `build` directory.

To perform a full build _without_ unit/integration _tests_ use:
```
gradle clean assemble
```

#### Building from an IDE

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.

### Building and Using the Wallet Tool

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*.

To build an executable shell script that runs the command-line Wallet Tool, use:
```
gradle bitcoinj-wallettool:installDist
```

You can now run the `wallet-tool` without parameters to get help on its operation:
```
./wallettool/build/install/wallet-tool/bin/wallet-tool
```

To create a test net wallet file in `~/bitcoinj/bitcoinj-test.wallet`, you would use:
```
mkdir ~/bitcoinj
```
```
./wallettool/build/install/wallet-tool/bin/wallet-tool --net=TESTNET --wallet=$HOME/bitcoinj/bitcoinj-test.wallet create
```

To sync the newly created wallet in `~/bitcoinj/bitcoinj-test.wallet` with the test net, you would use:
```
./wallettool/build/install/wallet-tool/bin/wallet-tool --net=TESTNET --wallet=$HOME/bitcoinj/bitcoinj-test.wallet sync
```

To dump the state of the wallet in `~/bitcoinj/bitcoinj-test.wallet` with the test net, you would use:
```
./wallettool/build/install/wallet-tool/bin/wallet-tool --net=TESTNET --wallet=$HOME/bitcoinj/bitcoinj-test.wallet dump
```

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.

### Example applications

These are found in the `examples` module.

### Where next?

Now you are ready to https://bitcoinj.github.io/getting-started[follow the tutorial].

### Testing a SNAPSHOT build

Building apps with official releases of *bitcoinj* is covered in the https://bitcoinj.github.io/getting-started[tutorial].

If you want to develop or test your app with a https://jitpack.io[Jitpack]-powered build of the latest `master` or `release-0.15` branch of *bitcoinj* follow the dynamically-generated instructions for that branch by following the correct link.

* https://jitpack.io/#bitcoinj/bitcoinj/master-SNAPSHOT[master] branch
* https://jitpack.io/#bitcoinj/bitcoinj/release-0.15-SNAPSHOT[release-0.15] branch