You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

1426 lines
38 KiB

==================
Protocol Methods
==================
blockchain.block.header
=======================
Return the block header at the given height.
**Signature**
.. function:: blockchain.block.header(height, cp_height=0)
.. versionadded:: 1.3
.. versionchanged:: 1.4
*cp_height* parameter added
.. versionchanged:: 1.4.1
*height*
The height of the block, a non-negative integer.
*cp_height*
Checkpoint height, a non-negative integer. Ignored if zero,
otherwise the following must hold:
*height* <= *cp_height*
**Result**
If *cp_height* is zero, the raw block header as a hexadecimal
string.
Otherwise a dictionary with the following keys. This provides a
proof that the given header is present in the blockchain; presumably
the client has the merkle root hard-coded as a checkpoint.
* *branch*
The merkle branch of *header* up to *root*, deepest pairing first.
* *header*
The raw block header as a hexadecimal string. Starting with version 1.4.1,
AuxPoW data (if present in the original header) is truncated.
* *root*
The merkle root of all blockchain headers up to and including
*cp_height*.
**Example Result**
With *height* 5 and *cp_height* 0 on the Bitcoin Cash chain:
::
"0100000085144a84488ea88d221c8bd6c059da090e88f8a2c99690ee55dbba4e00000000e11c48fecdd9e72510ca84f023370c9a38bf91ac5cae88019bee94d24528526344c36649ffff001d1d03e477"
.. _cp_height example:
With *cp_height* 8::
{
"branch": [
"000000004ebadb55ee9096c9a2f8880e09da59c0d68b1c228da88e48844a1485",
"96cbbc84783888e4cc971ae8acf86dd3c1a419370336bb3c634c97695a8c5ac9",
"965ac94082cebbcffe458075651e9cc33ce703ab0115c72d9e8b1a9906b2b636",
"89e5daa6950b895190716dd26054432b564ccdc2868188ba1da76de8e1dc7591"
],
"header": "0100000085144a84488ea88d221c8bd6c059da090e88f8a2c99690ee55dbba4e00000000e11c48fecdd9e72510ca84f023370c9a38bf91ac5cae88019bee94d24528526344c36649ffff001d1d03e477",
"root": "e347b1c43fd9b5415bf0d92708db8284b78daf4d0e24f9c3405f45feb85e25db"
}
blockchain.block.headers
========================
Return a concatenated chunk of block headers from the main chain.
**Signature**
.. function:: blockchain.block.headers(start_height, count, cp_height=0)
.. versionadded:: 1.2
.. versionchanged:: 1.4
*cp_height* parameter added
.. versionchanged:: 1.4.1
*start_height*
The height of the first header requested, a non-negative integer.
*count*
The number of headers requested, a non-negative integer.
*cp_height*
Checkpoint height, a non-negative integer. Ignored if zero,
otherwise the following must hold:
*start_height* + (*count* - 1) <= *cp_height*
**Result**
A dictionary with the following members:
* *count*
The number of headers returned, between zero and the number
requested. If the chain has not extended sufficiently far, only
the available headers will be returned. If more headers than
*max* were requested at most *max* will be returned.
* *hex*
The binary block headers concatenated together in-order as a
hexadecimal string. Starting with version 1.4.1, AuxPoW data (if present
in the original header) is truncated if *cp_height* is nonzero.
* *max*
The maximum number of headers the server will return in a single
request.
The dictionary additionally has the following keys if *count* and
*cp_height* are not zero. This provides a proof that all the given
headers are present in the blockchain; presumably the client has the
merkle root hard-coded as a checkpoint.
* *root*
The merkle root of all blockchain headers up to and including
*cp_height*.
* *branch*
The merkle branch of the last returned header up to *root*,
deepest pairing first.
**Example Response**
See :ref:`here <cp_height example>` for an example of *root* and
*branch* keys.
::
{
"count": 2,
"hex": "0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c010000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000982051fd1e4ba744bbbe680e1fee14677ba1a3c3540bf7b1cdb606e857233e0e61bc6649ffff001d01e36299"
"max": 2016
}
blockchain.estimatefee
======================
Return the estimated transaction fee per kilobyte for a transaction to
be confirmed within a certain number of blocks.
**Signature**
.. function:: blockchain.estimatefee(number)
*number*
The number of blocks to target for confirmation.
**Result**
The estimated transaction fee in coin units per kilobyte, as a
floating point number. If the daemon does not have enough
information to make an estimate, the integer ``-1`` is returned.
**Example Result**
::
0.00101079
blockchain.headers.subscribe
============================
Subscribe to receive block headers when a new block is found.
**Signature**
.. function:: blockchain.headers.subscribe()
**Result**
The header of the current block chain tip. The result is a dictionary with two members:
* *hex*
The binary header as a hexadecimal string.
* *height*
The height of the header, an integer.
**Example Result**
::
{
"height": 520481,
"hex": "00000020890208a0ae3a3892aa047c5468725846577cfcd9b512b50000000000000000005dc2b02f2d297a9064ee103036c14d678f9afc7e3d9409cf53fd58b82e938e8ecbeca05a2d2103188ce804c4"
}
**Notifications**
As this is a subcription, the client will receive a notification
when a new block is found. The notification's signature is:
.. function:: blockchain.headers.subscribe(header)
* *header*
See **Result** above.
.. note:: should a new block arrive quickly, perhaps while the server
is still processing prior blocks, the server may only notify of the
most recent chain tip. The protocol does not guarantee notification
of all intermediate block headers.
In a similar way the client must be prepared to handle chain
reorganisations. Should a re-org happen the new chain tip will not
sit directly on top of the prior chain tip. The client must be able
to figure out the common ancestor block and request any missing
block headers to acquire a consistent view of the chain state.
blockchain.relayfee
===================
Return the minimum fee a low-priority transaction must pay in order to
be accepted to the daemon's memory pool.
**Signature**
.. function:: blockchain.relayfee()
**Result**
The fee in whole coin units (BTC, not satoshis for Bitcoin) as a
floating point number.
**Example Results**
::
1e-05
::
0.0
blockchain.scripthash.get_balance
=================================
Return the confirmed and unconfirmed balances of a :ref:`script hash
<script hashes>`.
**Signature**
.. function:: blockchain.scripthash.get_balance(scripthash)
.. versionadded:: 1.1
*scripthash*
The script hash as a hexadecimal string.
**Result**
A dictionary with keys `confirmed` and `unconfirmed`. The value of
each is the appropriate balance in coin units as a string.
**Result Example**
::
{
"confirmed": "1.03873966",
"unconfirmed": "0.236844"
}
blockchain.scripthash.get_history
=================================
Return the confirmed and unconfirmed history of a :ref:`script hash
<script hashes>`.
**Signature**
.. function:: blockchain.scripthash.get_history(scripthash)
.. versionadded:: 1.1
*scripthash*
The script hash as a hexadecimal string.
**Result**
A list of confirmed transactions in blockchain order, with the
output of :func:`blockchain.scripthash.get_mempool` appended to the
list. Each confirmed transaction is a dictionary with the following
keys:
* *height*
The integer height of the block the transaction was confirmed in.
* *tx_hash*
The transaction hash in hexadecimal.
See :func:`blockchain.scripthash.get_mempool` for how mempool
transactions are returned.
**Result Examples**
::
[
{
"height": 200004,
"tx_hash": "acc3758bd2a26f869fcc67d48ff30b96464d476bca82c1cd6656e7d506816412"
},
{
"height": 215008,
"tx_hash": "f3e1bf48975b8d6060a9de8884296abb80be618dc00ae3cb2f6cee3085e09403"
}
]
::
[
{
"fee": 20000,
"height": 0,
"tx_hash": "9fbed79a1e970343fcd39f4a2d830a6bde6de0754ed2da70f489d0303ed558ec"
}
]
blockchain.scripthash.get_mempool
=================================
Return the unconfirmed transactions of a :ref:`script hash <script
hashes>`.
**Signature**
.. function:: blockchain.scripthash.get_mempool(scripthash)
.. versionadded:: 1.1
*scripthash*
The script hash as a hexadecimal string.
**Result**
A list of mempool transactions in arbitrary order. Each mempool
transaction is a dictionary with the following keys:
* *height*
``0`` if all inputs are confirmed, and ``-1`` otherwise.
* *tx_hash*
The transaction hash in hexadecimal.
* *fee*
The transaction fee in minimum coin units (satoshis).
**Result Example**
::
[
{
"tx_hash": "45381031132c57b2ff1cbe8d8d3920cf9ed25efd9a0beb764bdb2f24c7d1c7e3",
"height": 0,
"fee": 24310
}
]
blockchain.scripthash.history
=============================
Return part of the confirmed history of a :ref:`script hash <script
hashes>`.
**Signature**
.. function:: blockchain.scripthash.history(scripthash, start_height)
.. versionadded:: 1.5
*scripthash*
The script hash as a hexadecimal string.
*start_height*
History will be returned starting from this height, a non-negative
integer. If there are several matching transactions in a block,
the server will return *all* of them -- partial results from a
block are not permitted. The client can start subsequent requests
at one above the greatest returned height and avoid repeats.
**Result**
A dictionary with the following keys.
* *more*
:const:`true` indicates that there *may* be more history
available. A follow-up request is required to obtain any.
:const:`false` means all history to blockchain's tip has been
returned.
* *history*
A list ot transactions. Each transaction is itself a list of
two elements:
1. The block height
2. The transaction hash
**Result Examples**
::
{
"more": false,
"history": [
[
200004,
"acc3758bd2a26f869fcc67d48ff30b96464d476bca82c1cd6656e7d506816412"
],
[
215008,
"f3e1bf48975b8d6060a9de8884296abb80be618dc00ae3cb2f6cee3085e09403"
]
]
}
blockchain.scripthash.listunspent
=================================
Return an ordered list of UTXOs sent to a script hash.
**Signature**
.. function:: blockchain.scripthash.listunspent(scripthash)
.. versionadded:: 1.1
*scripthash*
The script hash as a hexadecimal string.
**Result**
A list of unspent outputs in blockchain order. This function takes
the mempool into account. Mempool transactions paying to the
address are included at the end of the list in an undefined order.
Any output that is spent in the mempool does not appear. Each
output is a dictionary with the following keys:
* *height*
The integer height of the block the transaction was confirmed in.
``0`` if the transaction is in the mempool.
* *tx_pos*
The zero-based index of the output in the transaction's list of
outputs.
* *tx_hash*
The output's transaction hash as a hexadecimal string.
* *value*
The output's value in minimum coin units (satoshis).
**Result Example**
::
[
{
"tx_pos": 0,
"value": 45318048,
"tx_hash": "9f2c45a12db0144909b5db269415f7319179105982ac70ed80d76ea79d923ebf",
"height": 437146
},
{
"tx_pos": 0,
"value": 919195,
"tx_hash": "3d2290c93436a3e964cfc2f0950174d8847b1fbe3946432c4784e168da0f019f",
"height": 441696
}
]
.. _subscribed:
blockchain.scripthash.subscribe
===============================
Subscribe to a script hash.
**Signature**
.. function:: blockchain.scripthash.subscribe(scripthash)
.. versionadded:: 1.1
*scripthash*
The script hash as a hexadecimal string.
**Result**
.. versionchanged:: 1.5
As of protocol 1.5, the transaction hash of the last confirmed
transaction in blockchain order, or :const:`null` if there are none.
For protocol versions 1.4 and below, the :ref:`status <status>` of
the script hash.
**Notifications**
.. versionchanged:: 1.5
As this is a subscription, the client receives notifications when
the confirmed transaction history and/or associated mempool
transactions change.
As of protocol 1.5, the initial mempool and subsequent changes to it
are sent with :func:`mempool.changes` notifications. When confirmed
history changes, a notification with signature
.. function:: blockchain.scripthash.subscribe(scripthash, tx_hash)
is sent, where *tx_hash* is the hash of the last confirmed
transaction in blockchain order.
For protocol versions 1.4 and below, the client will receive a
notification when the :ref:`status <status>` of the script hash
changes. Its signature is
.. function:: blockchain.scripthash.subscribe(scripthash, status)
blockchain.scripthash.utxos
===========================
Return some confirmed UTXOs sent to a script hash.
**Signature**
.. function:: blockchain.scripthash.utxos(scripthash, start_height)
.. versionadded:: 1.5
*scripthash*
The script hash as a hexadecimal string.
*start_height*
UTXOs will be returned starting from this height, a non-negative
integer. If there are several UTXOs in one block, the server will
return *all* of them -- partial results from a block are not
permitted. The client can start subsequent requests at one above
the greatest returned height and avoid repeats.
.. note:: To get the effects of transactions in the mempool adding or
removing UTXOs, a client must
:func:`blockchain.scripthash.subscribe` and track mempool
transactions sent via :func:`mempool.changes` notifications.
**Result**
A dictionary with the following keys.
* *more*
:const:`true` indicates that there *may* be more UTXOs available.
A follow-up request is required to obtain any. :const:`false`
means all UTXOs to the blockchain's tip have been returned.
* *utxos*
A list of UTXOs. Each UTXO is itself a list with the following
elements:
1. The height of the block the transaction is in
2. The transaction hash as a hexadecimal string
3. The zero-based index of the output in the transaction's outputs
4. The output value, an integer in minimum coin units (satoshis)
**Result Example**
::
**TODO**
blockchain.transaction.broadcast
================================
Broadcast a transaction to the network.
**Signature**
.. function:: blockchain.transaction.broadcast(raw_tx)
.. versionchanged:: 1.1
errors returned as JSON RPC errors rather than as a result.
*raw_tx*
The raw transaction as a hexadecimal string.
**Result**
The transaction hash as a hexadecimal string.
**Note** protocol version 1.0 (only) does not respond according to
the JSON RPC specification if an error occurs. If the daemon
rejects the transaction, the result is the error message string from
the daemon, as if the call were successful. The client needs to
determine if an error occurred by comparing the result to the
expected transaction hash.
**Result Examples**
::
"a76242fce5753b4212f903ff33ac6fe66f2780f34bdb4b33b175a7815a11a98e"
Protocol version 1.0 returning an error as the result:
::
"258: txn-mempool-conflict"
blockchain.transaction.get
==========================
Return a raw transaction.
**Signature**
.. function:: blockchain.transaction.get(tx_hash, verbose=false, merkle=false)
.. versionchanged:: 1.1
ignored argument *height* removed
.. versionchanged:: 1.2
*verbose* argument added
.. versionchanged:: 1.5
*merkle* argument added
*tx_hash*
The transaction hash as a hexadecimal string.
*verbose*
Whether a verbose coin-specific response is required.
*merkle*
Whether a merkle branch proof should be returned as well.
**Result**
If *verbose* is :const:`false`:
If *merkle* is :const:`false`, the raw transaction as a
hexadecimal string. If :const:`true`, the dictionary returned
by :func:`blockchain.transaction.get_merkle` with an additional
key:
*hex*
The raw transaction as a hexadecimal string.
If *verbose* is :const:`true`:
The result is a coin-specific dictionary -- whatever the coin
daemon returns when asked for a verbose form of the raw
transaction. If *merkle* is :const:`true` it will have an
additional key:
*merkle*
The dictionary returned by
:func:`blockchain.transaction.get_merkle`.
**Example Results**
When *verbose* is :const:`false` and *merkle* is :const:`false`::
"01000000015bb9142c960a838329694d3fe9ba08c2a6421c5158d8f7044cb7c48006c1b48"
"4000000006a4730440220229ea5359a63c2b83a713fcc20d8c41b20d48fe639a639d2a824"
"6a137f29d0fc02201de12de9c056912a4e581a62d12fb5f43ee6c08ed0238c32a1ee76921"
"3ca8b8b412103bcf9a004f1f7a9a8d8acce7b51c983233d107329ff7c4fb53e44c855dbe1"
"f6a4feffffff02c6b68200000000001976a9141041fb024bd7a1338ef1959026bbba86006"
"4fe5f88ac50a8cf00000000001976a91445dac110239a7a3814535c15858b939211f85298"
"88ac61ee0700"
When *verbose* is :const:`true` and *merkle* is :const:`false`::
{
"blockhash": "0000000000000000015a4f37ece911e5e3549f988e855548ce7494a0a08b2ad6",
"blocktime": 1520074861,
"confirmations": 679,
"hash": "36a3692a41a8ac60b73f7f41ee23f5c917413e5b2fad9e44b34865bd0d601a3d",
"hex": "01000000015bb9142c960a838329694d3fe9ba08c2a6421c5158d8f7044cb7c48006c1b484000000006a4730440220229ea5359a63c2b83a713fcc20d8c41b20d48fe639a639d2a8246a137f29d0fc02201de12de9c056912a4e581a62d12fb5f43ee6c08ed0238c32a1ee769213ca8b8b412103bcf9a004f1f7a9a8d8acce7b51c983233d107329ff7c4fb53e44c855dbe1f6a4feffffff02c6b68200000000001976a9141041fb024bd7a1338ef1959026bbba860064fe5f88ac50a8cf00000000001976a91445dac110239a7a3814535c15858b939211f8529888ac61ee0700",
"locktime": 519777,
"size": 225,
"time": 1520074861,
"txid": "36a3692a41a8ac60b73f7f41ee23f5c917413e5b2fad9e44b34865bd0d601a3d",
"version": 1,
"vin": [ {
"scriptSig": {
"asm": "30440220229ea5359a63c2b83a713fcc20d8c41b20d48fe639a639d2a8246a137f29d0fc02201de12de9c056912a4e581a62d12fb5f43ee6c08ed0238c32a1ee769213ca8b8b[ALL|FORKID] 03bcf9a004f1f7a9a8d8acce7b51c983233d107329ff7c4fb53e44c855dbe1f6a4",
"hex": "4730440220229ea5359a63c2b83a713fcc20d8c41b20d48fe639a639d2a8246a137f29d0fc02201de12de9c056912a4e581a62d12fb5f43ee6c08ed0238c32a1ee769213ca8b8b412103bcf9a004f1f7a9a8d8acce7b51c983233d107329ff7c4fb53e44c855dbe1f6a4"
},
"sequence": 4294967294,
"txid": "84b4c10680c4b74c04f7d858511c42a6c208bae93f4d692983830a962c14b95b",
"vout": 0}],
"vout": [ { "n": 0,
"scriptPubKey": { "addresses": [ "12UxrUZ6tyTLoR1rT1N4nuCgS9DDURTJgP"],
"asm": "OP_DUP OP_HASH160 1041fb024bd7a1338ef1959026bbba860064fe5f OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a9141041fb024bd7a1338ef1959026bbba860064fe5f88ac",
"reqSigs": 1,
"type": "pubkeyhash"},
"value": 0.0856647},
{ "n": 1,
"scriptPubKey": { "addresses": [ "17NMgYPrguizvpJmB1Sz62ZHeeFydBYbZJ"],
"asm": "OP_DUP OP_HASH160 45dac110239a7a3814535c15858b939211f85298 OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a91445dac110239a7a3814535c15858b939211f8529888ac",
"reqSigs": 1,
"type": "pubkeyhash"},
"value": 0.1360904}]}
blockchain.transaction.get_merkle
=================================
Return the merkle branch to a confirmed transaction given its hash
and height.
**Signature**
.. function:: blockchain.transaction.get_merkle(tx_hash, height)
*tx_hash*
The transaction hash as a hexadecimal string.
*height*
The height at which it was confirmed, an integer.
**Result**
A dictionary with the following keys:
* *block_height*
The height of the block the transaction was confirmed in.
* *merkle*
A list of transaction hashes the current hash is paired with,
recursively, in order to trace up to obtain merkle root of the
block, deepest pairing first.
* *pos*
The 0-based index of the position of the transaction in the
ordered list of transactions in the block.
**Result Example**
::
{
"merkle":
[
"713d6c7e6ce7bbea708d61162231eaa8ecb31c4c5dd84f81c20409a90069cb24",
"03dbaec78d4a52fbaf3c7aa5d3fccd9d8654f323940716ddf5ee2e4bda458fde",
"e670224b23f156c27993ac3071940c0ff865b812e21e0a162fe7a005d6e57851",
"369a1619a67c3108a8850118602e3669455c70cdcdb89248b64cc6325575b885",
"4756688678644dcb27d62931f04013254a62aeee5dec139d1aac9f7b1f318112",
"7b97e73abc043836fd890555bfce54757d387943a6860e5450525e8e9ab46be5",
"61505055e8b639b7c64fd58bce6fc5c2378b92e025a02583303f69930091b1c3",
"27a654ff1895385ac14a574a0415d3bbba9ec23a8774f22ec20d53dd0b5386ff",
"5312ed87933075e60a9511857d23d460a085f3b6e9e5e565ad2443d223cfccdc",
"94f60b14a9f106440a197054936e6fb92abbd69d6059b38fdf79b33fc864fca0",
"2d64851151550e8c4d337f335ee28874401d55b358a66f1bafab2c3e9f48773d"
],
"block_height": 450538,
"pos": 710
}
blockchain.transaction.id_from_pos
==================================
Return a transaction hash and optionally a merkle proof,
given a block height and a position in the block.
**Signature**
.. function:: blockchain.transaction.id_from_pos(height, tx_pos, merkle=false)
.. versionadded:: 1.4
*height*
The main chain block height, a non-negative integer.
*tx_pos*
A zero-based index of the transaction in the given block, an integer.
*merkle*
Whether a merkle proof should also be returned, a boolean.
**Result**
If *merkle* is :const:`false`, the transaction hash as a hexadecimal string.
If :const:`true`, a dictionary with the following keys:
* *tx_hash*
The transaction hash as a hexadecimal string.
* *merkle*
A list of transaction hashes the current hash is paired with,
recursively, in order to trace up to obtain merkle root of the
block, deepest pairing first.
**Example Results**
When *merkle* is :const:`false`::
"fc12dfcb4723715a456c6984e298e00c479706067da81be969e8085544b0ba08"
When *merkle* is :const:`true`::
{
"tx_hash": "fc12dfcb4723715a456c6984e298e00c479706067da81be969e8085544b0ba08",
"merkle":
[
"928c4275dfd6270349e76aa5a49b355eefeb9e31ffbe95dd75fed81d219a23f8",
"5f35bfb3d5ef2ba19e105dcd976928e675945b9b82d98a93d71cbad0e714d04e",
"f136bcffeeed8844d54f90fc3ce79ce827cd8f019cf1d18470f72e4680f99207",
"6539b8ab33cedf98c31d4e5addfe40995ff96c4ea5257620dfbf86b34ce005ab",
"7ecc598708186b0b5bd10404f5aeb8a1a35fd91d1febbb2aac2d018954885b1e",
"a263aae6c470b9cde03b90675998ff6116f3132163911fafbeeb7843095d3b41",
"c203983baffe527edb4da836bc46e3607b9a36fa2c6cb60c1027f0964d971b29",
"306d89790df94c4632d652d142207f53746729a7809caa1c294b895a76ce34a9",
"c0b4eff21eea5e7974fe93c62b5aab51ed8f8d3adad4583c7a84a98f9e428f04",
"f0bd9d2d4c4cf00a1dd7ab3b48bbbb4218477313591284dcc2d7ca0aaa444e8d",
"503d3349648b985c1b571f59059e4da55a57b0163b08cc50379d73be80c4c8f3"
]
}
mempool.changes
===============
A notification that indicates changes to unconfirmed transactions of a
:ref:`subscribed <subscribed>` :ref:`script hash <script hashes>`. As
its name suggests the notification is stateful; its contents are a
function of what was sent previously.
**Signature**
.. function:: mempool.changes(scripthash, new, gone)
.. versionadded:: 1.5
The parameters are as follows:
* *scripthash*
The script hash the notification is for, a hexadecimal string.
* *new*
A list of transactions in the mempool that have not previously
been sent to the client, or whose *confirmed input* status
has changed. Each transaction is an ordered list of 3 items:
1. The raw transaction or its hash as a hexadecimal string. The
first time the server sends a transaction it sends it raw.
Subsequent references in the same *new* list or in later
notifications will send the hash only. Transactions cannot be
32 bytes in size so length can be used to distinguish.
2. The transaction fee, an integer in minimum coin units (satoshis)
3. :const:`true` if all inputs are confirmed otherwise :const:`false`
* *gone*
A list of hashes of transactions that were previously sent to the
client as being in the mempool but no longer are. Those
transactions presumably were confirmed in a block or were evicted
from the mempool.
**Notification Example**
::
**TODO**
mempool.get_fee_histogram
=========================
Return a histogram of the fee rates paid by transactions in the memory
pool, weighted by transaction size.
**Signature**
.. function:: mempool.get_fee_histogram()
.. versionadded:: 1.2
**Result**
The histogram is an array of [*fee*, *vsize*] pairs, where |vsize_n|
is the cumulative virtual size of mempool transactions with a fee rate
in the interval [|fee_n1|, |fee_n|], and |fee_n1| > |fee_n|.
.. |vsize_n| replace:: vsize\ :sub:`n`
.. |fee_n| replace:: fee\ :sub:`n`
.. |fee_n1| replace:: fee\ :sub:`n-1`
Fee intervals may have variable size. The choice of appropriate
intervals is currently not part of the protocol.
**Example Result**
::
[[12, 128812], [4, 92524], [2, 6478638], [1, 22890421]]
server.add_peer
===============
A newly-started server uses this call to get itself into other servers'
peers lists. It sould not be used by wallet clients.
**Signature**
.. function:: server.add_peer(features)
.. versionadded:: 1.1
* *features*
The same information that a call to the sender's
:func:`server.features` RPC call would return.
**Result**
A boolean indicating whether the request was tentatively accepted.
The requesting server will appear in :func:`server.peers.subscribe`
when further sanity checks complete successfully.
server.banner
=============
Return a banner to be shown in the Electrum console.
**Signature**
.. function:: server.banner()
**Result**
A string.
**Example Result**
::
"Welcome to Electrum!"
server.donation_address
=======================
Return a server donation address.
**Signature**
.. function:: server.donation_address()
**Result**
A string.
**Example Result**
::
"1BWwXJH3q6PRsizBkSGm2Uw4Sz1urZ5sCj"
server.features
===============
Return a list of features and services supported by the server.
**Signature**
.. function:: server.features()
**Result**
A dictionary of keys and values. Each key represents a feature or
service of the server, and the value gives additional information.
The following features MUST be reported by the server. Additional
key-value pairs may be returned.
* *hosts*
A dictionary, keyed by host name, that this server can be reached
at. Normally this will only have a single entry; other entries
can be used in case there are other connection routes (e.g. Tor).
The value for a host is itself a dictionary, with the following
optional keys:
* *ssl_port*
An integer. Omit or set to :const:`null` if SSL connectivity
is not provided.
* *tcp_port*
An integer. Omit or set to :const:`null` if TCP connectivity is
not provided.
A server should ignore information provided about any host other
than the one it connected to.
* *genesis_hash*
The hash of the genesis block. This is used to detect if a peer
is connected to one serving a different network.
* *hash_function*
The hash function the server uses for :ref:`script hashing
<script hashes>`. The client must use this function to hash
pay-to-scripts to produce script hashes to send to the server.
The default is "sha256". "sha256" is currently the only
acceptable value.
* *server_version*
A string that identifies the server software. Should be the same
as the result to the :func:`server.version` RPC call.
* *protocol_max*
* *protocol_min*
Strings that are the minimum and maximum Electrum protocol
versions this server speaks. Example: "1.1".
* *pruning*
An integer, the pruning limit. Omit or set to :const:`null` if
there is no pruning limit. Should be the same as what would
suffix the letter ``p`` in the IRC real name.
**Example Result**
::
{
"genesis_hash": "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943",
"hosts": {"14.3.140.101": {"tcp_port": 51001, "ssl_port": 51002}},
"protocol_max": "1.0",
"protocol_min": "1.0",
"pruning": null,
"server_version": "ElectrumX 1.0.17",
"hash_function": "sha256"
}
server.peers.subscribe
======================
Return a list of peer servers. Despite the name this is not a
subscription and the server must send no notifications.
**Signature**
.. function:: server.peers.subscribe()
**Result**
An array of peer servers, each returned as a 3-element array. For
example::
["107.150.45.210",
"e.anonyhost.org",
["v1.0", "p10000", "t", "s995"]]
The first element is the IP address, the second is the host name
(which might also be an IP address), and the third is a list of
server features. Each feature and starts with a letter. 'v'
indicates the server maximum protocol version, 'p' its pruning limit
and is omitted if it does not prune, 't' is the TCP port number, and
's' is the SSL port number. If a port is not given for 's' or 't'
the default port for the coin network is implied. If 's' or 't' is
missing then the server does not support that transport.
server.ping
===========
Ping the server to ensure it is responding, and to keep the session
alive. The server may disconnect clients that have sent no requests
for roughly 10 minutes.
**Signature**
.. function:: server.ping()
.. versionadded:: 1.2
**Result**
Returns :const:`null`.
server.version
==============
Identify the client to the server and negotiate the protocol version.
Only the first :func:`server.version` message is accepted.
**Signature**
.. function:: server.version(client_name="", protocol_version="1.4")
* *client_name*
A string identifying the connecting client software.
* *protocol_version*
An array ``[protocol_min, protocol_max]``, each of which is a
string. If ``protocol_min`` and ``protocol_max`` are the same,
they can be passed as a single string rather than as an array of
two strings, as for the default value.
The server should use the highest protocol version both support::
version = min(client.protocol_max, server.protocol_max)
If this is below the value::
max(client.protocol_min, server.protocol_min)
then there is no protocol version in common and the server must
close the connection. Otherwise it should send a response
appropriate for that protocol version.
**Result**
An array of 2 strings:
``[server_software_version, protocol_version]``
identifying the server and the protocol version that will be used
for future communication.
**Example**::
server.version("Electrum 3.0.6", ["1.1", "1.2"])
**Example Result**::
["ElectrumX 1.2.1", "1.2"]
Masternode methods (Dash and compatible coins)
==============================================
masternode.announce.broadcast
=============================
Pass through the masternode announce message to be broadcast by the daemon.
Whenever a masternode comes online or a client is syncing, they will
send this message which describes the masternode entry and how to
validate messages from it.
**Signature**
.. function:: masternode.announce.broadcast(signmnb)
* *signmnb*
Signed masternode broadcast message in hexadecimal format.
**Result**
:const:`true` if the message was broadcasted succesfully otherwise
:const:`false`.
**Example**::
masternode.announce.broadcast("012b825a65a24e2eb8edadbe27c4716dab993bf1046a66da77268ec87dbdd9dfc80100000000ffffffff00000000000000000000ffff22db1fec42d82103bfc9e296bcf4d63eced97b204df8f7b2b90131d452abd2b50909fa2ce6f66d752103bfc9e296bcf4d63eced97b204df8f7b2b90131d452abd2b50909fa2ce6f66d754120e95f74e9c242776df88a586bd52d2bd1838b600e5f3ce9d45d04865ff39a994632d617e810a4480ce24c882980746bc517a92be027d2ea70e4baece33a763608b1f91e5b00000000451201002b825a65a24e2eb8edadbe27c4716dab993bf1046a66da77268ec87dbdd9dfc80100000000ffffffff57280bc007121a0db854998f72e9a9fd2a690f38abffbd9aa94256330c020000b0f91e5b00000000412027c03b1531ee14db6160a62a0cc8b1a7e93ae122bbc6f2dffec721e0ae308b0e19e68523dd429450612bda3a616b56411b4e35d098e25b7c83f19fd2d8537e970000000000000000")
**Example Result**::
true
masternode.subscribe
====================
Returns the status of masternode.
**Signature**
.. function:: masternode.subscribe(collateral)
* *collateral*
The txId and the index of the collateral.
A masternode collateral is a transaction with a specific amount of
coins, it's also known as a masternode identifier.
i.e. for DASH the required amount is 1,000 DASH or for $PAC is
500,000 $PAC.
**Result**
As this is a subcription, the client will receive a notification
when the masternode status changes.
The status depends on the server the masternode is hosted, the
internet connection, the offline time and even the collateral
amount, so this subscription notice these changes to the user.
**Example**::
masternode.subscribe("8c59133e714797650cf69043d05e409bbf45670eed7c4e4a386e52c46f1b5e24-0")
**Example Result**::
{'method': 'masternode.subscribe', u'jsonrpc': u'2.0', u'result': u'ENABLED', 'params': ['8c59133e714797650cf69043d05e409bbf45670eed7c4e4a386e52c46f1b5e24-0'], u'id': 19}
masternode.list
===============
Returns the list of masternodes.
**Signature**
.. function:: masternode.list(payees)
* *payees*
An array of masternode payee addresses.
**Result**
An array with the masternodes information.
**Example**::
masternode.list("['PDFHmjKLvSGdnWgDJSJX49Rrh0SJtRANcE',
'PDFHmjKLvSGdnWgDJSJX49Rrh0SJtRANcF']")
**Example Result**::
[
{
"vin": "9d298c00dae8b491d6801f50cab2e0037852cb556c5619ddb07c50421x9a31ab",
"status": "ENABLED",
"protocol": 70213,
"payee": "PDFHmjKLvSGdnWgDJSJX49Rrh0SJtRANcE",
"lastseen": "2018-04-01 12:34",
"activeseconds": 1258000,
"lastpaidtime": "2018-03-10 12:29",
"lastpaidblock": 1234,
"ip": "1.0.0.1",
"paymentposition": 184,
"inselection": true,
"balance": 510350
},
{
"vin": "9d298c00dae8b491d6801f50cab2e0037852cb556c5619ddb07c50421x9a31ac",
"status": "ENABLED",
"protocol": 70213,
"payee": "PDFHmjKLvSGdnWgDJSJX49Rrh0SJtRANcF",
"lastseen": "2018-04-01 12:34",
"activeseconds": 1258000,
"lastpaidtime": "2018-03-15 05:29",
"lastpaidblock": 1234,
"ip": "1.0.0.2",
"paymentposition": 3333,
"inselection": false,
"balance": 520700
},
...,
...,
...,
...
]
ProTx methods (Dash DIP3)
==============================================
protx.diff
=============================
Returns a diff between two deterministic masternode lists.
The result also contains proof data.
**Signature**
.. function:: protx.diff(base_height, height)
*base_height*
The starting block height
*1* <= *base_height*
*height*
The ending block height.
*base_height* <= *height*
**Result**
A dictionary with deterministic masternode lists diff plus proof data
**Example**::
protx.diff(1, 20000)
**Example Result**::
{
"baseBlockHash": "000000000b866e7fefc7df2b4b37f236175cee9ab6dc925a30c62401d92b7406",
"blockHash": "0000000005b3f97e0af8c72f9a96eca720237e374ca860938ba0d7a68471c4d6",
"cbTxMerkleTree": "0200000002c9802d02435cfe09e4253bc1ba4875e9a2f920d5d6adf005d5b9306e5322e6f476d885273422c2fe18e8c420d09484f89eaeee7bb7f4e1ff54bddeb94e099a910103",
"cbTx": "03000500010000000000000000000000000000000000000000000000000000000000000000ffffffff4b02204e047867335c08fabe6d6d8b2b76b7000000000470393f63424273736170747365743a7265737574736574010000000000000010000015770000000d2f6e6f64655374726174756d2f000000000336c8a119010000001976a914cb594917ad4e5849688ec63f29a0f7f3badb5da688ac6c62c216010000001976a914a3c5284d3cd896815ac815f2dd76a3a71cb3d8e688acba65df02000000001976a9146d649e1c05e89d30809ef39cc8ee1002c0c8c84b88ac00000000260100204e0000b301c3d88e4072305bec5d09e2ed6b836b23af640bcdefd7b8ae7e2ca182dc17",
"deletedMNs": [
],
"mnList": [
{
"proRegTxHash": "6f0bdd7034ce8d3a6976a15e4b4442c274b5c1739fb63fc0a50f01425580e17e",
"confirmedHash": "000000000be653cd1fbc213239cfec83ca68da657f24cc05305d0be75d34e392",
"service": "173.61.30.231:19023",
"pubKeyOperator": "8da7ee1a40750868badef2c17d5385480cae7543f8d4d6e5f3c85b37fdd00a6b4f47726b96e7e7c7a3ea68b5d5cb2196",
"keyIDVoting": "b35c75cbc69433175d3459843e1f6ebe145bf6a3",
"isValid": true
}
],
"merkleRootMNList": "17dc82a12c7eaeb8d7efcd0b64af236b836bede2095dec5b3072408ed8c301b3"
}
protx.info
=============================
Returns detailed information about a deterministic masternode.
**Signature**
.. function:: protx.info(protx_hash)
*protx_hash*
The hash of the initial ProRegTx.
**Result**
A dictionary with detailed deterministic masternode data
**Example**::
protx.info("6f0bdd7034ce8d3a6976a15e4b4442c274b5c1739fb63fc0a50f01425580e17e")
**Example Result**::
{
"proTxHash": "6f0bdd7034ce8d3a6976a15e4b4442c274b5c1739fb63fc0a50f01425580e17e",
"collateralHash": "b41439376b6117aebe6ad1ce31dcd217d4934fd00c104029ecb7d21c11d17c94",
"collateralIndex": 3,
"operatorReward": 0,
"state": {
"registeredHeight": 19525,
"lastPaidHeight": 20436,
"PoSePenalty": 0,
"PoSeRevivedHeight": -1,
"PoSeBanHeight": -1,
"revocationReason": 0,
"keyIDOwner": "b35c75cbc69433175d3459843e1f6ebe145bf6a3",
"pubKeyOperator": "8da7ee1a40750868badef2c17d5385480cae7543f8d4d6e5f3c85b37fdd00a6b4f47726b96e7e7c7a3ea68b5d5cb2196",
"keyIDVoting": "b35c75cbc69433175d3459843e1f6ebe145bf6a3",
"ownerKeyAddr": "ybGQ7a6e7dkJY2jxdbDwdBtyjKZJ8VB7YC",
"votingKeyAddr": "ybGQ7a6e7dkJY2jxdbDwdBtyjKZJ8VB7YC",
"addr": "173.61.30.231:19023",
"payoutAddress": "yWdXnYxGbouNoo8yMvcbZmZ3Gdp6BpySxL"
},
"confirmations": 984
}