bitcoin-s/docs/0.1.0/rpc/rpc-bitcoind.html
Docusaurus bot 346a0d25e5 Deploy website
Deploy website version based on d78bcaaae3
2019-12-18 20:27:16 +00:00

159 lines
No EOL
18 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>bitcoind/Bitcoin Core · bitcoin-s</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&gt; Note: `bitcoin-s-bitcoind-rpc` requires you to have `bitcoind` (Bitcoin Core daemon) installed. Grab this at [bitcoincore.org](https://bitcoincore.org/en/download/)"/><meta name="docsearch:version" content="0.1.0"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="bitcoind/Bitcoin Core · bitcoin-s"/><meta property="og:type" content="website"/><meta property="og:url" content="https://bitcoin-s.org/"/><meta property="og:description" content="&gt; Note: `bitcoin-s-bitcoind-rpc` requires you to have `bitcoind` (Bitcoin Core daemon) installed. Grab this at [bitcoincore.org](https://bitcoincore.org/en/download/)"/><meta property="og:image" content="https://bitcoin-s.org/img/undraw_online.svg"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://bitcoin-s.org/img/undraw_tweetstorm.svg"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="stylesheet" href="/css/code-block-buttons.css"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.0/clipboard.min.js"></script><script type="text/javascript" src="https://fonts.googleapis.com/css?family=Montserrat:500"></script><script type="text/javascript" src="https://www.googletagmanager.com/gtag/js?id=UA-61958686-2"></script><script type="text/javascript" src="/js/code-block-buttons.js"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/favicon.ico" alt="bitcoin-s"/><h2 class="headerTitleWithLogo">bitcoin-s</h2></a><a href="/versions"><h3>0.1.0</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/0.1.0/core/core-intro" target="_self">Docs</a></li><li class=""><a href="/api/org/bitcoins" target="_self">API</a></li><li class=""><a href="/help" target="_self">Help</a></li><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i></i><span>RPC clients</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle">Getting started</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/0.1.0/getting-started">Add Bitcoin-S to your project</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Core module</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/0.1.0/core/core-intro">Core module</a></li><li class="navListItem"><a class="navItem" href="/docs/0.1.0/core/txbuilder">TxBuilder example</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">RPC clients</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/0.1.0/rpc/rpc-clients-intro">Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/0.1.0/rpc/rpc-eclair">Eclair</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/0.1.0/rpc/rpc-bitcoind">bitcoind/Bitcoin Core</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Contributing</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/0.1.0/contributing">Contributing</a></li><li class="navListItem"><a class="navItem" href="/docs/0.1.0/contributing-website">Contributing to the website</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle">Security</h3><ul class=""><li class="navListItem"><a class="navItem" href="/docs/0.1.0/security">Security</a></li></ul></div></div></section></div><script>
var coll = document.getElementsByClassName('collapsible');
var checkActiveCategory = true;
for (var i = 0; i < coll.length; i++) {
var links = coll[i].nextElementSibling.getElementsByTagName('*');
if (checkActiveCategory){
for (var j = 0; j < links.length; j++) {
if (links[j].classList.contains('navListItemActive')){
coll[i].nextElementSibling.classList.toggle('hide');
coll[i].childNodes[1].classList.toggle('rotate');
checkActiveCategory = false;
break;
}
}
}
coll[i].addEventListener('click', function() {
var arrow = this.childNodes[1];
arrow.classList.toggle('rotate');
var content = this.nextElementSibling;
content.classList.toggle('hide');
});
}
document.addEventListener('DOMContentLoaded', function() {
createToggler('#navToggler', '#docsNav', 'docsSliderActive');
createToggler('#tocToggler', 'body', 'tocActive');
var headings = document.querySelector('.toc-headings');
headings && headings.addEventListener('click', function(event) {
var el = event.target;
while(el !== headings){
if (el.tagName === 'A') {
document.body.classList.remove('tocActive');
break;
} else{
el = el.parentNode;
}
}
}, false);
function createToggler(togglerSelector, targetSelector, className) {
var toggler = document.querySelector(togglerSelector);
var target = document.querySelector(targetSelector);
if (!toggler) {
return;
}
toggler.onclick = function(event) {
event.preventDefault();
target.classList.toggle(className);
};
}
});
</script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/bitcoin-s/bitcoin-s/blob/master/docs/rpc/bitcoind.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">bitcoind/Bitcoin Core</h1></header><article><div><span><blockquote>
<p>Note: <code>bitcoin-s-bitcoind-rpc</code> requires you to have <code>bitcoind</code> (Bitcoin Core daemon) installed. Grab this at <a href="https://bitcoincore.org/en/download/">bitcoincore.org</a></p>
</blockquote>
<p>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.</p>
<h2><a class="anchor" aria-hidden="true" id="connecting-to-a-local-bitcoind-instance"></a><a href="#connecting-to-a-local-bitcoind-instance" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Connecting to a local <code>bitcoind</code> instance</h2>
<h3><a class="anchor" aria-hidden="true" id="getting-started-quickly-with-default-options"></a><a href="#getting-started-quickly-with-default-options" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Getting started quickly, with default options:</h3>
<pre><code class="hljs css language-scala"><span class="hljs-keyword">import</span> scala.concurrent._
<span class="hljs-keyword">import</span> akka.actor.<span class="hljs-type">ActorSystem</span>
<span class="hljs-keyword">import</span> org.bitcoins.{rpc, core}
<span class="hljs-keyword">import</span> core.currency.<span class="hljs-type">Bitcoins</span>
<span class="hljs-keyword">import</span> rpc.client.common._
<span class="hljs-keyword">implicit</span> <span class="hljs-keyword">val</span> system = <span class="hljs-type">ActorSystem</span>.create()
<span class="hljs-keyword">implicit</span> <span class="hljs-keyword">val</span> ec: <span class="hljs-type">ExecutionContext</span> = system.dispatcher
<span class="hljs-comment">// this reads authentication credentials and</span>
<span class="hljs-comment">// connection details from the default data</span>
<span class="hljs-comment">// directory on your platform</span>
<span class="hljs-keyword">val</span> client = <span class="hljs-type">BitcoindRpcClient</span>.fromDatadir()
<span class="hljs-keyword">val</span> balance: <span class="hljs-type">Future</span>[<span class="hljs-type">Bitcoins</span>] = <span class="hljs-keyword">for</span> {
_ &lt;- client.start()
balance &lt;- client.getBalance
} <span class="hljs-keyword">yield</span> balance
</code></pre>
<h2><a class="anchor" aria-hidden="true" id="connecting-to-a-remote-bitcoind"></a><a href="#connecting-to-a-remote-bitcoind" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Connecting to a remote <code>bitcoind</code></h2>
<p>First, we create a secure connection to our <code>bitcoind</code> instance by setting
up a SSH tunnel:</p>
<pre><code class="hljs css language-bash">$ ssh -L 8332:localhost:8332 \
my-cool-user@my-cool-website.com
</code></pre>
<blockquote>
<p>Note: the port number '8332' is the default for mainnet. If you want to
connect to a testnet <code>bitcoind</code>, the default port is '18332'</p>
</blockquote>
<p>Now that we have a secure connection between our remote <code>bitcoind</code>, we're
ready to create the connection with our RPC client</p>
<pre><code class="hljs css language-scala"><span class="hljs-keyword">import</span> akka.actor.<span class="hljs-type">ActorSystem</span>
<span class="hljs-keyword">import</span> java.net.<span class="hljs-type">URI</span>
<span class="hljs-keyword">import</span> scala.concurrent._
<span class="hljs-keyword">import</span> org.bitcoins.core.config._
<span class="hljs-keyword">import</span> org.bitcoins.rpc.config._
<span class="hljs-keyword">import</span> org.bitcoins.rpc.client.common._
<span class="hljs-keyword">val</span> username = <span class="hljs-string">"FILL_ME_IN"</span> <span class="hljs-comment">//this username comes from 'rpcuser' in your bitcoin.conf file //this username comes from 'rpcuser' in your bitcoin.conf file</span>
<span class="hljs-keyword">val</span> password = <span class="hljs-string">"FILL_ME_IN"</span> <span class="hljs-comment">//this password comes from your 'rpcpassword' in your bitcoin.conf file //this password comes from your 'rpcpassword' in your bitcoin.conf file</span>
<span class="hljs-keyword">val</span> authCredentials = <span class="hljs-type">BitcoindAuthCredentials</span>.<span class="hljs-type">PasswordBased</span>(
username = username,
password = password
)
<span class="hljs-keyword">val</span> bitcoindInstance = {
<span class="hljs-type">BitcoindInstance</span> (
network = <span class="hljs-type">MainNet</span>,
uri = <span class="hljs-keyword">new</span> <span class="hljs-type">URI</span>(<span class="hljs-string">s"http://localhost:<span class="hljs-subst">${MainNet.port}</span>"</span>),
rpcUri = <span class="hljs-keyword">new</span> <span class="hljs-type">URI</span>(<span class="hljs-string">s"http://localhost:<span class="hljs-subst">${MainNet.rpcPort}</span>"</span>),
authCredentials = authCredentials
)
}
<span class="hljs-keyword">implicit</span> <span class="hljs-keyword">val</span> system: <span class="hljs-type">ActorSystem</span> = <span class="hljs-type">ActorSystem</span>.create()
<span class="hljs-keyword">implicit</span> <span class="hljs-keyword">val</span> ec: <span class="hljs-type">ExecutionContext</span> = system.dispatcher
<span class="hljs-keyword">val</span> rpcCli = <span class="hljs-keyword">new</span> <span class="hljs-type">BitcoindRpcClient</span>(bitcoindInstance)
rpcCli.getBalance.onComplete { <span class="hljs-keyword">case</span> balance =&gt;
println(<span class="hljs-string">s"Wallet balance=<span class="hljs-subst">${balance}</span>"</span>)
system.terminate()
}
</code></pre>
<h2><a class="anchor" aria-hidden="true" id="testing"></a><a href="#testing" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Testing</h2>
<p>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 <a href="https://bitcoincore.org/en/releases/">here</a>.</p>
<p>You then need to set environment variables to indicate where Bitcoin-S can find the different versions:</p>
<pre><code class="hljs css language-bash">$ <span class="hljs-built_in">export</span> BITCOIND_V16_PATH=/path/to/v16/bitcoind
$ <span class="hljs-built_in">export</span> BITCOIND_V17_PATH=/path/to/v17/bitcoind
</code></pre>
<p>If you just run tests testing common functionality it's enough to have either version 0.16 or 0.17 on your <code>PATH</code>.</p>
<p>To run all RPC related tests:</p>
<pre><code class="hljs css language-bash">$ bash sbt bitcoindRpcTest/<span class="hljs-built_in">test</span>
</code></pre>
</span></div></article></div><div class="docLastUpdate"><em>Last updated on 2019-11-4 by rorp</em></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/0.1.0/rpc/rpc-eclair"><span class="arrow-prev"></span><span>Eclair</span></a><a class="docs-next button" href="/docs/0.1.0/contributing"><span>Contributing</span><span class="arrow-next"></span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#connecting-to-a-local-bitcoind-instance">Connecting to a local <code>bitcoind</code> instance</a><ul class="toc-headings"><li><a href="#getting-started-quickly-with-default-options">Getting started quickly, with default options:</a></li></ul></li><li><a href="#connecting-to-a-remote-bitcoind">Connecting to a remote <code>bitcoind</code></a></li><li><a href="#testing">Testing</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/favicon.ico" alt="bitcoin-s" width="66" height="58"/></a><div><h5>Docs</h5><a href="/docs/en/getting-started">Getting Started</a><a href="/docs/en/core/core-intro">Guides</a><a href="/api/org/bitcoins">API Reference</a></div><div><h5>Community</h5><a href="/en/users.html">User Showcase</a><a href="https://join.slack.com/t/suredbits/shared_invite/enQtNDEyMjY3MTg1MTg3LTYyYjkwOGUzMDQ4NDAwZjE1M2I3MmQyNWNlZjNlYjg4OGRjYTRjNWUwNjRjNjg4Y2NjZjAxYjU1N2JjMTU1YWM" target="_blank" rel="noreferrer noopener">Slack</a><a href="https://gitter.im/bitcoin-s-core/">Gitter chat</a></div><div><h5>More</h5><a href="https://github.com/bitcoin-s/bitcoin-s">GitHub</a><a class="github-button" href="https://github.com/bitcoin-s/bitcoin-s" data-icon="octicon-star" data-count-href="/bitcoin-s/bitcoin-s-core/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><section class="copyright">Copyright © 2019 Suredbits &amp; the bitcoin-s developers</section></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>
document.addEventListener('keyup', function(e) {
if (e.target !== document.body) {
return;
}
// keyCode for '/' (slash)
if (e.keyCode === 191) {
const search = document.getElementById('search_input_react');
search && search.focus();
}
});
</script><script>
var search = docsearch({
apiKey: '0a510688bf8448e19aeb380377d328d3',
indexName: 'bitcoin-s',
inputSelector: '#search_input_react'
});
</script></body></html>