-
A Java JSON-RPC client that serves as a base class for any cryptocurrency platform that uses JSON-RPC for communication.
-
A Groovy JSON-RPC client that can use dynamic methods for scripting, experimentation and functional tests of any JSON-RPC server.
-
A JSON-RPC command-line client,
jsonrpc
, for testing and debugging JSON-RPC servers and applications. It can be natively compiled with GraalVM. It can launch, call the server and print output in under 50 milliseconds. -
consensusj-jsonrpc-daemon - A Micronaut-based JSON-RPC "echo" server. It can be natively compiled using GraalVM.
-
A JSON-RPC Java client for the Bitcoin Core API with strong, static types.
-
JSON library using Jackson to convert between Bitcoin types and JSON
-
bitcoinj types ←→ JSON (e.g. Address, Sha256Hash, Transaction)
-
Strongly-typed Java POJOs ←→ Bitcoin Core standard JSON (e.g. BlockChainInfo, UnspentOutput, ChainTip)
-
-
jakarta.inject
-compatible Bitcoin server components for server-side JSON-RPC. -
cj-btc-daemon - A Micronaut-based framework for a Java-based implementation of bitcoind. It can be natively compiled using GraalVM.
-
cj-btc-cli - a command line tool and supporting libraries for accessing the JSON-RPC API.
-
A Groovy-language Domain Specific Language for scripting and testing with bitcoinj
-
Functional tests of bitcoind (and bitcoinj-daemon) JSON-RPC services, that run in regression test mode.
-
Proof-of-concept Java JSON-RPC client for Ethereum (ETH)
-
Proof-of-concept Java JSON-RPC client for Namecoin (NMC)
|
Do not use this software with your private keys without doing a rigorous audit of the code first. (Feedback welcome.) |
|
The API is not final and prior to a 1.0 release may change without warning. Most of the API changes are fairly manageable though, and we try to deprecate before making significant changes. |
This project is a mono-repo with many submodules/components that are published as independent binary libraries. Since it is easy to pull in just the modules you need via Maven coordinates, this allows you to manage your transitive dependencies and build lightweight, fast-starting, applications and servers. Fewer dependencies also helps with natively-compiled, Java Module System-based (including jlink
) applications.
Although the API is changing, binary packages are available on GitLab.com. You can download JARs or use the provided Maven coordinates to link to them directly from your pom.xml
or build.gradle
.
Add the following to your pom.xml
:
<repositories>
<repository>
<id>consensusj-gitlab-maven</id>
<url>https://gitlab.com/api/v4/projects/8482916/packages/maven</url>
</repository>
</repositories>
We have published preliminary JavaDoc to our GitHub pages site.
-
Most modules now require Java 11 or later.
-
bitcoinj-util
andbitcoinj-dsl-gvy
still work with JDK 8 -
The server libraries and daemons require Java 17 or later.
-
The command-line tools/libraries require Java 21 or later.
We have completed refactoring all modules into the new org.consensusj
package namespace and have assigned Java Module names via the Automatic Module mechanism. This provides a more consistent package structure and a smooth migration to Java Module descriptors.
Name | Min JDK | Java module name | Description |
---|---|---|---|
11 |
|
JSON-RPC clients: one using |
|
11 |
|
Groovy JSON-RPC client (dynamic RPC methods) |
|
21 |
|
JSON-RPC command-line interface (CLI) libraries and tool |
|
17 |
n/a |
JSON-RPC Sample Server |
|
11 |
|
RxJava 3 support for JSON-RPC |
|
11 |
|
RxJava 3 ZeroMQ client |
Name | Min JDK | Java module name | Description |
---|---|---|---|
11 |
|
Jackson serializers, deserializers & POJOs for Bitcoin JSON-RPC |
|
11 |
|
Java JSON-RPC Bitcoin client |
|
11 |
|
Groovy JSON-RPC Bitcoin client (dynamic RPC methods) |
|
21 |
|
Command-line JSON-RPC client for Bitcoin |
|
17 |
n/a |
JSON-RPC Bitcoin server daemon prototype, using Micronaut. |
|
17 |
|
Bitcoin Service-Layer objects - compatible with |
|
17 |
n/a |
Bitcoin JSON-RPC integration tests (RegTest) |
|
11 |
|
Reactive interfaces for Bitcoin. |
|
11 |
|
RxJava 3 JSON-RPC/ZeroMQ Client for Bitcoin Core |
|
11 |
|
RxJava 3 JSON-RPC/ZeroMQ Client using bitcoinj PeerGroup |
Name | Min JDK | Java module name | Description |
---|---|---|---|
8 |
|
Groovy DSL support. |
|
17 |
|
JavaScript DSL support for Nashorn. Includes JSON-RPC client. |
|
17 |
|
Spock tests of bitcoinj classes. |
|
9 |
|
bitcoinj utilities and enhancements. Some will be submitted upstream. |
Name | Min JDK | Java module name | Description |
---|---|---|---|
11 |
|
JavaMoney Currency Provider(s) |
|
11 |
|
JavaMoney Exchange Providers. Adapter to use XChange |
Name | Min JDK | Java module name | Description |
---|---|---|---|
11 |
|
Richlist calculation support |
|
11 |
|
Preliminary, experimental, W3C DID and BTCR DID Method support |
|
11 |
|
Java JSON-RPC Ethereum client (proof-of-concept) |
|
11 |
|
Java JSON-RPC Namecoin client (proof-of-concept) |
Java implementation of a JSON-RPC client. JsonRpcClientHttpUrlConnection can be subclassed or called directly using the send()
method and Object
parameters.
Dynamic RPC methods are implemented via the DynamicRPCFallback
Groovy trait. DynamicRPCClient
can be used to talk to any JSON-RPC server using standard Java types and Jackson JSON conversion.
Java Bitcoin JSON-RPC client and supporting types, both bitcoinj types and POJOs for Bitcoin Core JSON.
If the RPC procedure takes a Bitcoin address as parameter, then the Java method will take an org.bitcoinj.core.Address
.
If the RPC returns a transaction, the Java method will return an org.bitcoinj.core.Transaction
.
See the JavaDoc for BitcoinClient to see the methods implemented.
Subclass of Bitcoin JSON-RPC client with fallback to dynamic methods (using DynamicRPCFallback
). This is useful when new methods are added to the server/protocol and static methods and types haven’t been written for them yet.
An alternative implementation of bitcoin-cli
in Java. If converted to a fat jar, it is executable with java -jar
. The command:
java -jar cj-btc-cli-0.7.0-alpha3.jar -rpcport=8080 getblockcount
will output:
Connecting to: http://127.0.0.1:8080/ 0
ℹ️
|
Only a few RPCs are currently supported. Pull requests welcome. |
For help type:
java -jar bitcoinj-cli-0.7.0-alpha3.jar -?
or read the manual page.
Jackson serializers, deserializers & POJOs used to create and parse JSON by both client and server implementations of Bitcoin JSON-RPC.
Service-Layer object(s) that power the Daemon. These objects rely solely on javax.annotation and jakarta.inject for configuration and can be wired with Spring, Micronaut IOC, or Guice.
Built as a fat, executable jar, so it can be run with java -jar
.
A proof-of-concept, bitcoinj-SPV-based Bitcoin daemon using the Micronaut framework.
A very limited and incomplete bitcoind
equivalent using bitcoinj. It currently serves a small subset of the Bitcoin RPC API (Bitcoin uses JSON-RPC.)
It builds as a native binary using GraalVM.
Spock tests of bitcoinj classes. Initial focus is learning and documentation, not test coverage.
Bitcoin Core integration test framework and tests (Regression Tests using Spock)
These sample Spock "feature tests" show the RPC client in action and are from the file BitcoinSpec.groovy.
def "Use RegTest mode to generate a block upon request"() {
given: "a certain starting height"
def startHeight = blockCount
when: "we generate 1 new block"
generateBlock()
then: "the block height is 1 higher"
blockCount == startHeight + 1
}
def "When we send an amount to a newly created address, it arrives"() {
given: "A new, empty Bitcoin address"
def destinationAddress = getNewAddress()
when: "we send it testAmount (from coins mined in RegTest mode)"
sendToAddress(destinationAddress, testAmount, "comment", "comment-to")
and: "we generate 1 new block"
generateBlock()
then: "the new address has a balance of testAmount"
testAmount == getReceivedByAddress(destinationAddress)
}
JavaMoney (also known as JSR 354) is the new Java Standard for advanced and flexible currency handling on the Java platform.
JSR 354 provides a portable and extensible framework for handling of Money & Currency. The API models monetary amounts and currencies in a platform independent and portable way, including well-defined extension points.
Support for virtual currencies is one of the key design goals in the specification. The consensusj-currency
module allows Bitcoin to
be used by standard Java APIs in the same ways as fiat currencies.
consensusj-currency
contains BitcoinCurrencyProvider
which will add "BTC"
as a standard currency code to any applications that includes the consensusj-currency
JAR in its classpath.
The JavaMoney Reference Implementation (aka "Moneta") contains implementations of ExchangeRateProvider
for ECB (European Central Bank) and IMF (International Monetary Fund).
There is also U.S. FRB (Federal Reserve Bank) and Yahoo Finance ExchangeRateProvider
in the JavaMoney financial library add-on module.
The #consensusj-exchange
module includes an adapter class BaseXChangeExchangeRateProvider
that adapts implementations of the Exchange
interface in the popular and complete XChange library to be used by JavaMoney-compatible applications.
Before running ./gradlew
wrapper script you must have JDK 17 or later installed and your JAVA_HOME
set correctly. To build native images you’ll need a GraalVM JDK 17 or later with the native-image
tool installed via gu install native-image
.
ℹ️
|
The first time you run the build all dependency JARS will be downloaded. |
To build the CLI executable jar:
./gradlew :consensusj-jsonrpc-cli:nativeCompile
To run it and display a list of command line options:
consensusj-jsonrpc-cli/build/jsonrpc -?
To build the CLI executable jar:
./gradlew :cj-btc-cli:nativeCompile
To run it and display a list of command line options:
cj-btc-cli/build/cj-btc-cli -?
To build and run from Gradle:
./gradlew :consensusj-jsonrpc-daemon:run
To build a native image and run:
./gradlew :consensusj-jsonrpc-daemon:nativeCompile consensusj-jsonrpc-daemon/build/native/nativeCompile/jsonrpc-echod
To build and run from Gradle:
./gradlew :cj-btc-daemon:run --args="-cjbitcoind.config.network-id=testnet"
To build a native image and run:
./gradlew :cj-btc-daemon:nativeCompile cj-btc-daemon/build/native/nativeCompile/jbitcoind -cjbitcoind.config.network-id=testnet