mirror of
https://github.com/bitcoin-s/bitcoin-s.git
synced 2025-02-28 17:14:42 +01:00
110 lines
3.2 KiB
Markdown
110 lines
3.2 KiB
Markdown
|
---
|
||
|
id: version-0.1.0-rpc-bitcoind
|
||
|
title: bitcoind/Bitcoin Core
|
||
|
original_id: rpc-bitcoind
|
||
|
---
|
||
|
|
||
|
> Note: `bitcoin-s-bitcoind-rpc` requires you to have `bitcoind` (Bitcoin Core daemon) installed. Grab this at [bitcoincore.org](https://bitcoincore.org/en/download/)
|
||
|
|
||
|
The Bitcoin Core RPC client in Bitcoin-S currently supports the Bitcoin Core 0.16 and 0.17
|
||
|
version lines. It can be set up to work with both local and remote Bitcoin Core servers.
|
||
|
|
||
|
## Connecting to a local `bitcoind` instance
|
||
|
|
||
|
### Getting started quickly, with default options:
|
||
|
|
||
|
```scala
|
||
|
import scala.concurrent._
|
||
|
import akka.actor.ActorSystem
|
||
|
|
||
|
import org.bitcoins.{rpc, core}
|
||
|
import core.currency.Bitcoins
|
||
|
import rpc.client.common._
|
||
|
|
||
|
implicit val system = ActorSystem.create()
|
||
|
implicit val ec: ExecutionContext = system.dispatcher
|
||
|
|
||
|
// this reads authentication credentials and
|
||
|
// connection details from the default data
|
||
|
// directory on your platform
|
||
|
val client = BitcoindRpcClient.fromDatadir()
|
||
|
|
||
|
val balance: Future[Bitcoins] = for {
|
||
|
_ <- client.start()
|
||
|
balance <- client.getBalance
|
||
|
} yield balance
|
||
|
```
|
||
|
|
||
|
## Connecting to a remote `bitcoind`
|
||
|
|
||
|
First, we create a secure connection to our `bitcoind` instance by setting
|
||
|
up a SSH tunnel:
|
||
|
|
||
|
```bash
|
||
|
$ ssh -L 8332:localhost:8332 \
|
||
|
my-cool-user@my-cool-website.com
|
||
|
```
|
||
|
|
||
|
> Note: the port number '8332' is the default for mainnet. If you want to
|
||
|
> connect to a testnet `bitcoind`, the default port is '18332'
|
||
|
|
||
|
Now that we have a secure connection between our remote `bitcoind`, we're
|
||
|
ready to create the connection with our RPC client
|
||
|
|
||
|
```scala
|
||
|
import akka.actor.ActorSystem
|
||
|
import java.net.URI
|
||
|
import scala.concurrent._
|
||
|
|
||
|
import org.bitcoins.core.config._
|
||
|
import org.bitcoins.rpc.config._
|
||
|
import org.bitcoins.rpc.client.common._
|
||
|
|
||
|
val username = "FILL_ME_IN" //this username comes from 'rpcuser' in your bitcoin.conf file //this username comes from 'rpcuser' in your bitcoin.conf file
|
||
|
val password = "FILL_ME_IN" //this password comes from your 'rpcpassword' in your bitcoin.conf file //this password comes from your 'rpcpassword' in your bitcoin.conf file
|
||
|
|
||
|
val authCredentials = BitcoindAuthCredentials.PasswordBased(
|
||
|
username = username,
|
||
|
password = password
|
||
|
)
|
||
|
|
||
|
val bitcoindInstance = {
|
||
|
BitcoindInstance (
|
||
|
network = MainNet,
|
||
|
uri = new URI(s"http://localhost:${MainNet.port}"),
|
||
|
rpcUri = new URI(s"http://localhost:${MainNet.rpcPort}"),
|
||
|
authCredentials = authCredentials
|
||
|
)
|
||
|
}
|
||
|
|
||
|
implicit val system: ActorSystem = ActorSystem.create()
|
||
|
implicit val ec: ExecutionContext = system.dispatcher
|
||
|
|
||
|
val rpcCli = new BitcoindRpcClient(bitcoindInstance)
|
||
|
|
||
|
rpcCli.getBalance.onComplete { case balance =>
|
||
|
println(s"Wallet balance=${balance}")
|
||
|
system.terminate()
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## Testing
|
||
|
|
||
|
To test the Bitcoin-S RPC project you need both version 0.16 and 0.17 of Bitcoin Core. A list of current and previous releases can be found [here](https://bitcoincore.org/en/releases/).
|
||
|
|
||
|
You then need to set environment variables to indicate where Bitcoin-S can find the different versions:
|
||
|
|
||
|
```bash
|
||
|
$ export BITCOIND_V16_PATH=/path/to/v16/bitcoind
|
||
|
$ export BITCOIND_V17_PATH=/path/to/v17/bitcoind
|
||
|
```
|
||
|
|
||
|
If you just run tests testing common functionality it's enough to have either version 0.16 or 0.17 on your `PATH`.
|
||
|
|
||
|
To run all RPC related tests:
|
||
|
|
||
|
```bash
|
||
|
$ bash sbt bitcoindRpcTest/test
|
||
|
```
|
||
|
|