From 9a67b514c92fa2c50cbb0f3d1152f0b8b7e460a6 Mon Sep 17 00:00:00 2001 From: Brannon King Date: Mon, 1 Jul 2019 12:42:45 -0600 Subject: [PATCH] flattening prefix trie work put getclaimsintrie back as deprecated added test for adding a lot of data to the claimtrie updated unit test to dodge expiration fork --- contrib/devtools/generate_json_api_jrgen.py | 32 +- contrib/devtools/generate_json_api_v1.py | 15 +- contrib/devtools/generated/api_jrgen.json | 3963 ++++++++++++++----- contrib/devtools/generated/api_v1.json | 2061 +++++++--- src/Makefile.am | 2 + src/Makefile.test.include | 2 +- src/chainparams.cpp | 6 + src/claimtrie.cpp | 3645 ++++++----------- src/claimtrie.h | 832 ++-- src/claimtrieforks.cpp | 280 +- src/consensus/params.h | 4 + src/dbwrapper.cpp | 5 +- src/init.cpp | 15 +- src/prefixtrie.cpp | 492 +++ src/prefixtrie.h | 196 + src/rpc/claimtrie.cpp | 370 +- src/rpc/server.cpp | 2 +- src/test/claimtriebranching_tests.cpp | 2522 ++++++------ src/test/claimtriecache_tests.cpp | 292 +- src/test/dbwrapper_tests.cpp | 2 +- src/test/miner_tests.cpp | 12 +- src/test/prefixtrie_tests.cpp | 221 ++ src/test/test_bitcoin.cpp | 14 +- src/test/test_bitcoin.h | 7 +- src/txdb.h | 2 +- src/validation.cpp | 61 +- src/wallet/rpcwallet.cpp | 65 +- test/functional/feature_help.py | 6 +- 28 files changed, 9020 insertions(+), 6106 deletions(-) create mode 100644 src/prefixtrie.cpp create mode 100644 src/prefixtrie.h create mode 100644 src/test/prefixtrie_tests.cpp diff --git a/contrib/devtools/generate_json_api_jrgen.py b/contrib/devtools/generate_json_api_jrgen.py index 5f19a4d26..34a0f4818 100755 --- a/contrib/devtools/generate_json_api_jrgen.py +++ b/contrib/devtools/generate_json_api_jrgen.py @@ -59,12 +59,13 @@ def get_obj_from_dirty_text(full_object: str): last_name = property_name elif len(left) > 1: match = re.match(r'^(\[)?"(?P\w.*?)"(\])?.*', left) - last_name = match.group('name') - if match.group(1) is not None and match.group(3) is not None: - left = '[' - property_refined_type = 'string' - if 'string' not in line: - raise NotImplementedError('Not implemented: ' + line) + if match is not None: + last_name = match.group('name') + if match.group(1) is not None and match.group(3) is not None: + left = '[' + property_refined_type = 'string' + if 'string' not in line: + raise NotImplementedError('Not implemented: ' + line) if left.endswith('['): object_stack.append({'type': 'array', 'items': {'type': property_refined_type}}) @@ -96,7 +97,15 @@ def get_obj_from_dirty_text(full_object: str): ret = obj if ret is not None: if i + 1 < len(lines) - 1: - print('Ignoring this data (below the parsed object): ' + "\n".join(lines[i+1:]), file=sys.stderr) + print('WARNING: unparsable data...', file=sys.stderr) + lines = lines[i+1:] + if not lines[0]: + lines = lines[1:] + nret = get_obj_from_dirty_text("\n".join(lines)) + if not nret: + nret = get_obj_from_dirty_text("\n".join(lines[1:])) + if nret: + ret.update(nret) return ret except Exception as e: print('Exception: ' + str(e), file=sys.stderr) @@ -113,7 +122,7 @@ def get_type(arg_type: str, full_line: str): arg_type = arg_type.lower() if 'array' in arg_type: return 'array', required, None - if 'numeric' in arg_type: + if 'numeric' in arg_type or 'number' in arg_type: return 'number', required, None if 'bool' in arg_type: return 'boolean', required, None @@ -123,6 +132,11 @@ def get_type(arg_type: str, full_line: str): properties = get_obj_from_dirty_text(full_line) if full_line is not None else None return 'object', required, properties + if arg_type.startswith('optional'): + return 'optional', required, None + if arg_type.startswith('json'): + return 'json', required, None + print('Unable to derive type from: ' + arg_type, file=sys.stderr) return None, False, None @@ -274,4 +288,4 @@ def write_api(): if __name__ == '__main__': - write_api() \ No newline at end of file + write_api() diff --git a/contrib/devtools/generate_json_api_v1.py b/contrib/devtools/generate_json_api_v1.py index 014b4fdbe..f2cd1deac 100755 --- a/contrib/devtools/generate_json_api_v1.py +++ b/contrib/devtools/generate_json_api_v1.py @@ -13,17 +13,22 @@ def get_type(arg_type, full_line): if arg_type is None: return 'string' - arg_type = arg_type.lower() + arg_type = arg_type.lower().split(',')[0].strip() if 'numeric' in arg_type: return 'number' if 'bool' in arg_type: return 'boolean' - if 'string' in arg_type: - return 'string' + if 'array' in arg_type: + return 'array' if 'object' in arg_type: return 'object' - raise Exception('Not implemented: ' + arg_type) + supported_types = ['number', 'string', 'object', 'array', 'optional'] + if arg_type in supported_types: + return arg_type + + print("get_type: WARNING", arg_type, "is not supported type", file=sys.stderr) + return arg_type def parse_params(args): @@ -34,7 +39,7 @@ def parse_params(args): continue arg_parsed = re_argline.fullmatch(line) if arg_parsed is None: - raise Exception("Unparsable argument: " + line) + continue arg_name, arg_type, arg_desc = arg_parsed.group('name', 'type', 'desc') if not arg_type: raise Exception('Not implemented: ' + arg_type) diff --git a/contrib/devtools/generated/api_jrgen.json b/contrib/devtools/generated/api_jrgen.json index d350a4edd..8a1f3bbf3 100644 --- a/contrib/devtools/generated/api_jrgen.json +++ b/contrib/devtools/generated/api_jrgen.json @@ -4,7 +4,7 @@ "jsonrpc": "1.0", "info": { "title": "lbrycrd RPC API", - "version": "LBRYcrd Core RPC client version v0.12.2.0-6fa9ee58-dirty", + "version": "LBRYcrd Core RPC client version v0.17.1.0-ab5c074ba-dirty", "description": [] }, "definitions": {}, @@ -22,19 +22,14 @@ "type": "string", "description": "The transaction containing the unspent txout which should be spent." }, - "lbrycrdaddress": { + "address": { "type": "string", "description": "The lbrycrd address to send to." - }, - "amount": { - "type": "number", - "description": "The amount to send to the lbrycrd address. eg 0.1" } }, "required": [ "txid", - "lbrycrdaddress", - "amount" + "address" ] }, "result": { @@ -55,19 +50,14 @@ "type": "string", "description": "The transaction containing the unspent txout which should be spent." }, - "lbrycrdaddress": { + "address": { "type": "string", "description": "The lbrycrd address to send to." - }, - "amount": { - "type": "number", - "description": "The amount to send to the lbrycrd address. eg 0.1" } }, "required": [ "txid", - "lbrycrdaddress", - "amount" + "address" ] }, "result": { @@ -75,6 +65,29 @@ "description": "The new transaction id." } }, + "checknormalization": { + "summary": "Given an unnormalized name of a claim, return normalized version of it", + "description": [], + "tags": [ + "Claimtrie" + ], + "params": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "the name to normalize" + } + }, + "required": [ + "name" + ] + }, + "result": { + "type": "string", + "description": "fully normalized name" + } + }, "claimname": { "summary": "Create a transaction which issues a claim assigning a value to a name. The claim will be authoritative if the transaction amount is greater than the transaction amount of all other unspent transactions which issue a claim over the same name, and it will remain authoritative as long as it remains unspent and there are no other greater unspent transactions issuing a claim over the same name. The amount is a real and is rounded to the nearest 0.00000001", "description": [], @@ -131,11 +144,15 @@ "properties": { "name": { "type": "string", - "description": "the name of the claim" + "description": "the original name of the claim (before normalization)" + }, + "normalized_name": { + "type": "string", + "description": "the name of this claim (after normalization)" }, "value": { "type": "string", - "description": "claim metadata" + "description": "metadata of the claim" }, "claimId": { "type": "string", @@ -157,14 +174,6 @@ "type": "number", "description": "txout amount plus amount from all supports associated with the claim" }, - "height": { - "type": "number", - "description": "the height of the block in which this claim transaction is located" - }, - "valid at height": { - "type": "number", - "description": "the height at which the claim is valid" - }, "supports": { "type": "array", "items": { @@ -189,9 +198,21 @@ "amount": { "type": "number", "description": "the amount of the support" + }, + "value": { + "type": "string", + "description": "the metadata of the support if any" } } } + }, + "height": { + "type": "number", + "description": "the height of the block in which this claim transaction is located" + }, + "valid at height": { + "type": "number", + "description": "the height at which the claim is valid" } } } @@ -208,6 +229,10 @@ "name": { "type": "string", "description": "the name for which to get claims and supports" + }, + "blockhash": { + "type": "string", + "description": "get claims for name at the block specified by this block hash. If none is given, the latest active block will be used." } }, "required": [ @@ -217,10 +242,14 @@ "result": { "type": "object", "properties": { - "nLastTakeoverheight": { + "nLastTakeoverHeight": { "type": "number", "description": "the last height at which ownership of the name changed" }, + "normalized_name": { + "type": "string", + "description": "the name of these claims after normalization" + }, "claims": { "type": "array", "items": { @@ -250,6 +279,10 @@ "type": "number", "description": "the amount of the claim" }, + "value": { + "type": "string", + "description": "the metadata of the claim" + }, "nEffectiveAmount": { "type": "number", "description": "the total effective amount of the claim, taking into effect whether the claim or support has reached its nValidAtHeight" @@ -278,14 +311,22 @@ "nAmount": { "type": "number", "description": "the amount of the support" + }, + "value": { + "type": "string", + "description": "the metadata of the support if any" } } } + }, + "name": { + "type": "string", + "description": "the original name of this claim before normalization" } } } }, - "unmatched supports": { + "supports without claims": { "type": "array", "items": { "type": "object", @@ -341,7 +382,7 @@ "properties": { "nOut": { "type": "number", - "description": "the index of the claim or support in the transaction's list out outputs" + "description": "the index of the claim or support in the transaction's list of outputs" }, "claim type": { "type": "string", @@ -351,6 +392,10 @@ "type": "string", "description": "the name claimed or supported" }, + "claimId": { + "type": "string", + "description": "if a claim, its ID" + }, "value": { "type": "string", "description": "if a name claim, the value of the claim" @@ -392,7 +437,7 @@ } }, "getclaimsintrie": { - "summary": "Return all claims in the name trie.", + "summary": "Return all names in the trie.", "description": [], "tags": [ "Claimtrie" @@ -400,104 +445,16 @@ "params": { "type": "object", "properties": { - "minconf": { - "type": "number", - "description": "the number of required confirmations", - "default": 1 + "blockhash": { + "type": "string", + "description": "get claims in the trie at the block specified by this block hash. If none is given, the latest active block will be used." } }, "required": [] }, "result": { "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "the name claimed" - }, - "claims": { - "type": "array", - "items": { - "type": "object", - "properties": { - "claimId": { - "type": "string", - "description": "the claimId of the claim" - }, - "txid": { - "type": "string", - "description": "the txid of the claim" - }, - "n": { - "type": "number", - "description": "the vout value of the claim" - }, - "amount": { - "type": "number", - "description": "txout amount" - }, - "height": { - "type": "number", - "description": "the height of the block in which this transaction is located" - }, - "value": { - "type": "string", - "description": "the value of this claim" - } - } - } - } - } - } - } - }, - "getclaimtrie": { - "summary": "Return the entire name trie.", - "description": [], - "tags": [ - "Claimtrie" - ], - "params": { - "type": "object", - "properties": { - "minconf": { - "type": "number", - "description": "the number of required confirmations", - "default": 1 - } - }, - "required": [] - }, - "result": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "the name of the node" - }, - "hash": { - "type": "string", - "description": "the hash of the node" - }, - "txid": { - "type": "string", - "description": "(if value exists) the hash of the transaction which has successfully claimed this name" - }, - "n": { - "type": "number", - "description": "(if value exists) vout value" - }, - "value": { - "type": "number", - "description": "(if value exists) txout value" - }, - "height": { - "type": "number", - "description": "(if value exists) the height of the block in which this transaction is located" - } - } + "description": "all names in the trie that have claims" } }, "getnameproof": { @@ -608,7 +565,7 @@ } }, "getvalueforname": { - "summary": "Return the value associated with a name, if one exists", + "summary": "Return the winning value associated with a name, if one exists", "description": [], "tags": [ "Claimtrie" @@ -620,10 +577,9 @@ "type": "string", "description": "the name to look up" }, - "minconf": { - "type": "number", - "description": "the number of required confirmations", - "default": 1 + "blockhash": { + "type": "string", + "description": "get the value associated with the name at the block specified by this block hash. If none is given, the latest active block will be used." } }, "required": [ @@ -632,7 +588,7 @@ }, "result": { "type": "string", - "description": "the value of the name, if it exists \"claimId\" (string) the claimId for this name claim \"txid\" (string) the hash of the transaction which successfully claimed the name \"n\" (numeric) vout value \"amount\" (numeric) txout amount \"effective amount\" (numeric) txout amount plus amount from all supports associated with the claim \"height\" (numeric) the height of the block in which this transaction is located" + "description": "the value of the name, if it exists \"claimId\" (string) the claimId for this name claim \"txid\" (string) the hash of the transaction which successfully claimed the name \"n\" (numeric) vout value \"amount\" (numeric) txout amount \"effective amount\" (numeric) txout amount plus amount from all supports associated with the claim \"height\" (numeric) the height of the block in which this transaction is located \"name\" (string) the original name of this claim (before normalization)" } }, "listnameclaims": { @@ -654,7 +610,7 @@ }, "minconf": { "type": "number", - "description": "Only include transactions confirmed at least this many time.", + "description": "Only include transactions confirmed at least this many times.", "default": 1 } }, @@ -742,7 +698,7 @@ } }, "supportclaim": { - "summary": "Increase the value of a claim. Whichever claim has the greatest value, including all support values, will be the authoritative claim, according to the rest of the rules. The name is the name which is claimed by the claim that will be supported, the txid is the txid of the claim that will be supported, nout is the transaction output which contains the claim to be supported, and amount is the amount which will be added to the value of the claim. If the claim is currently the authoritative claim, this support will go into effect immediately. Otherwise, it will go into effect after 100 blocks. The support will be in effect until it is spent, and will lose its effect when the claim is spent or expires. The amount is a real and is rounded to the nearest .00000001", + "summary": "Increase the value of a claim. Whichever claim has the greatest value, including all support values, will be the authoritative claim, according to the rest of the rules. The name is the name which is claimed by the claim that will be supported, the txid is the txid of the claim that will be supported, nout is the transaction output which contains the claim to be supported, and amount is the amount which will be added to the value of the claim. If the claim is currently the authoritative claim, this support will go into effect immediately . Otherwise, it will go into effect after 100 blocks. The support will be in effect until it is spent, and will lose its effect when the claim is spent or expires. The amount is a real and is rounded to the nearest .00000001", "description": [], "tags": [ "Claimtrie" @@ -761,6 +717,10 @@ "amount": { "type": "number", "description": "The amount in LBC to use to support the claim." + }, + "value": { + "type": "string", + "description": "The metadata of the support encoded in hexadecimal." } }, "required": [ @@ -808,7 +768,7 @@ } }, "getbestblockhash": { - "summary": "Returns the hash of the best (tip) block in the longest block chain. Result \"hex\" (string) the block hash hex encoded", + "summary": "Returns the hash of the best (tip) block in the longest blockchain.", "description": [ "", "> lbrycrd-cli getbestblockhash ", @@ -822,10 +782,14 @@ "type": "object", "properties": {}, "required": [] + }, + "result": { + "type": "string", + "description": "the block hash hex encoded" } }, "getblock": { - "summary": "If verbose is false, returns a string that is serialized, hex-encoded data for block 'hash'. If verbose is true, returns an Object with information about block .", + "summary": "If verbosity is 0, returns a string that is serialized, hex-encoded data for block 'hash'. If verbosity is 1, returns an Object with information about block . If verbosity is 2, returns an Object with information about block and information about each transaction.", "description": [ "", "> lbrycrd-cli getblock \"00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09\"", @@ -838,104 +802,27 @@ "params": { "type": "object", "properties": { - "hash": { + "blockhash": { "type": "string", "description": "The block hash" }, - "verbose": { - "type": "boolean", - "description": "true for a json object, false for the hex encoded data", - "default": true + "verbosity": { + "type": "number", + "description": "0 for hex encoded data, 1 for a json object, and 2 for json object with transaction data", + "default": 1 } }, "required": [ - "hash" + "blockhash" ] }, "result": { - "type": "object", - "properties": { - "hash": { - "type": "string", - "description": "the block hash (same as provided)" - }, - "confirmations": { - "type": "number", - "description": "The number of confirmations, or -1 if the block is not on the main chain" - }, - "size": { - "type": "number", - "description": "The block size" - }, - "height": { - "type": "number", - "description": "The block height or index" - }, - "version": { - "type": "number", - "description": "The block version" - }, - "versionHex": { - "type": "string", - "description": "The block version formatted in hexadecimal" - }, - "merkleroot": { - "type": "string", - "description": "The merkle root" - }, - "nameclaimroot": { - "type": "string", - "description": "The hash of the root of the name claim trie" - }, - "tx": { - "type": "array", - "items": { - "type": "array", - "properties": { - "transactionid": { - "type": "string", - "description": "The transaction id" - } - } - } - }, - "time": { - "type": "number", - "description": "The block time in seconds since epoch (Jan 1 1970 GMT)" - }, - "mediantime": { - "type": "number", - "description": "The median block time in seconds since epoch (Jan 1 1970 GMT)" - }, - "nonce": { - "type": "number", - "description": "The nonce" - }, - "bits": { - "type": "string", - "description": "The bits" - }, - "difficulty": { - "type": "number", - "description": "The difficulty" - }, - "chainwork": { - "type": "string", - "description": "Expected number of hashes required to produce the chain up to this block (in hex)" - }, - "previousblockhash": { - "type": "string", - "description": "The hash of the previous block" - }, - "nextblockhash": { - "type": "string", - "description": "The hash of the next block" - } - } + "type": "string", + "description": "A string that is serialized, hex-encoded data for block 'hash'. Result (for verbosity = 1): { \"hash\" : \"hash\", (string) the block hash (same as provided) \"confirmations\" : n, (numeric) The number of confirmations, or -1 if the block is not on the main chain \"size\" : n, (numeric) The block size \"strippedsize\" : n, (numeric) The block size excluding witness data \"weight\" : n (numeric) The block weight as defined in BIP 141 \"height\" : n, (numeric) The block height or index \"version\" : n, (numeric) The block version \"versionHex\" : \"00000000\", (string) The block version formatted in hexadecimal \"merkleroot\" : \"xxxx\", (string) The merkle root \"nameclaimroot\" : \"xxxx\", (string) The hash of the root of the name claim trie \"tx\" : [ (array of string) The transaction ids \"transactionid\" (string) The transaction id ,... ], \"time\" : ttt, (numeric) The block time in seconds since epoch (Jan 1 1970 GMT) \"mediantime\" : ttt, (numeric) The median block time in seconds since epoch (Jan 1 1970 GMT) \"nonce\" : n, (numeric) The nonce \"bits\" : \"1d00ffff\", (string) The bits \"difficulty\" : x.xxx, (numeric) The difficulty \"chainwork\" : \"xxxx\", (string) Expected number of hashes required to produce the chain up to this block (in hex) \"nTx\" : n, (numeric) The number of transactions in the block. \"previousblockhash\" : \"hash\", (string) The hash of the previous block \"nextblockhash\" : \"hash\" (string) The hash of the next block } Result (for verbosity = 2): { ..., Same output as verbosity = 1. \"tx\" : [ (array of Objects) The transactions in the format of the getrawtransaction RPC. Different from verbosity = 1 \"tx\" result. ,... ], ,... Same output as verbosity = 1. }" } }, "getblockchaininfo": { - "summary": "Returns an object containing various state info regarding block chain processing.", + "summary": "Returns an object containing various state info regarding blockchain processing.", "description": [ "", "> lbrycrd-cli getblockchaininfo ", @@ -981,17 +868,33 @@ "type": "number", "description": "estimate of verification progress [0..1]" }, + "initialblockdownload": { + "type": "boolean", + "description": "(debug information) estimate of whether this node is in Initial Block Download mode." + }, "chainwork": { "type": "string", "description": "total amount of work in active chain, in hexadecimal" }, + "size_on_disk": { + "type": "number", + "description": "the estimated size of the block and undo files on disk" + }, "pruned": { "type": "boolean", "description": "if the blocks are subject to pruning" }, "pruneheight": { "type": "number", - "description": "heighest block available" + "description": "lowest-height complete block stored (only present if pruning is enabled)" + }, + "automatic_pruning": { + "type": "boolean", + "description": "whether automatic pruning is enabled (only present if pruning is enabled)" + }, + "prune_target_size": { + "type": "number", + "description": "the target size used by pruning (only present if automatic pruning is enabled)" }, "softforks": { "type": "array", @@ -1006,24 +909,12 @@ "type": "number", "description": "block version" }, - "enforce": { + "reject": { "type": "object", "properties": { "status": { "type": "boolean", "description": "true if threshold reached" - }, - "found": { - "type": "number", - "description": "number of blocks with the new version found" - }, - "required": { - "type": "number", - "description": "number of blocks required to trigger" - }, - "window": { - "type": "number", - "description": "maximum size of examined window of recent blocks" } } } @@ -1042,11 +933,11 @@ "properties": { "status": { "type": "string", - "description": "one of \"defined\", \"started\", \"lockedin\", \"active\", \"failed\"" + "description": "one of \"defined\", \"started\", \"locked_in\", \"active\", \"failed\"" }, "bit": { "type": "number", - "description": "the bit, 0-28, in the block version field used to signal this soft fork" + "description": "the bit (0-28) in the block version field used to signal this softfork (only for \"started\" status)" }, "startTime": { "type": "number", @@ -1055,16 +946,49 @@ "timeout": { "type": "number", "description": "the median time past of a block at which the deployment is considered failed if not yet locked in" + }, + "since": { + "type": "number", + "description": "height of the first block to which the status applies" + }, + "statistics": { + "type": "object", + "properties": { + "period": { + "type": "number", + "description": "the length in blocks of the BIP9 signalling period" + }, + "threshold": { + "type": "number", + "description": "the number of blocks with the version bit set required to activate the feature" + }, + "elapsed": { + "type": "number", + "description": "the number of blocks elapsed since the beginning of the current period" + }, + "count": { + "type": "number", + "description": "the number of blocks with the version bit set in the current period" + }, + "possible": { + "type": "boolean", + "description": "returns false if there are not enough blocks left in this period to pass activation threshold" + } + } } } } } + }, + "warnings": { + "type": "string", + "description": "any network and blockchain warnings." } } } }, "getblockcount": { - "summary": "Returns the number of blocks in the longest block chain.", + "summary": "Returns the number of blocks in the longest blockchain.", "description": [ "", "> lbrycrd-cli getblockcount ", @@ -1085,7 +1009,7 @@ } }, "getblockhash": { - "summary": "Returns hash of block in best-block-chain at index provided.", + "summary": "Returns hash of block in best-block-chain at height provided.", "description": [ "", "> lbrycrd-cli getblockhash 1000", @@ -1098,13 +1022,13 @@ "params": { "type": "object", "properties": { - "index": { + "height": { "type": "number", - "description": "The block index" + "description": "The height index" } }, "required": [ - "index" + "height" ] }, "result": { @@ -1167,6 +1091,10 @@ "type": "string", "description": "The merkle root" }, + "nameclaimroot": { + "type": "string", + "description": "The hash of the root of the name claim trie" + }, "time": { "type": "number", "description": "The block time in seconds since epoch (Jan 1 1970 GMT)" @@ -1187,6 +1115,14 @@ "type": "number", "description": "The difficulty" }, + "chainwork": { + "type": "string", + "description": "Expected number of hashes required to produce the current chain (in hex)" + }, + "nTx": { + "type": "number", + "description": "The number of transactions in the block." + }, "previousblockhash": { "type": "string", "description": "The hash of the previous block" @@ -1194,10 +1130,157 @@ "nextblockhash": { "type": "string", "description": "The hash of the next block" + } + } + } + }, + "getblockstats": { + "summary": "Compute per block statistics for a given window. All amounts are in satoshis. It won't work for some heights with pruning. It won't work without -txindex for utxo_size_inc, *fee or *feerate stats.", + "description": [ + "", + "> lbrycrd-cli getblockstats 1000 '[\"minfeerate\",\"avgfeerate\"]'", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"getblockstats\", \"params\": [1000 '[\"minfeerate\",\"avgfeerate\"]'] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "" + ], + "tags": [ + "Blockchain" + ], + "params": { + "type": "object", + "properties": { + "hash_or_height": { + "type": "number", + "description": "The block hash or height of the target block" }, - "chainwork": { + "stats": { + "type": "array", + "description": "Values to plot, by default all values (see result below)\n [\n \"height\", (string, optional) Selected statistic\n \"time\", (string, optional) Selected statistic\n ,...\n ]" + } + }, + "required": [ + "hash_or_height" + ] + }, + "result": { + "type": "object", + "properties": { + "avgfee": { + "type": "number", + "description": "Average fee in the block" + }, + "avgfeerate": { + "type": "number", + "description": "Average feerate (in satoshis per virtual byte)" + }, + "avgtxsize": { + "type": "number", + "description": "Average transaction size" + }, + "blockhash": { "type": "string", - "description": "Expected number of hashes required to produce the current chain (in hex)" + "description": "The block hash (to check for potential reorgs)" + }, + "feerate_percentiles": { + "type": "array", + "items": { + "type": "array" + } + }, + "height": { + "type": "number", + "description": "The height of the block" + }, + "ins": { + "type": "number", + "description": "The number of inputs (excluding coinbase)" + }, + "maxfee": { + "type": "number", + "description": "Maximum fee in the block" + }, + "maxfeerate": { + "type": "number", + "description": "Maximum feerate (in satoshis per virtual byte)" + }, + "maxtxsize": { + "type": "number", + "description": "Maximum transaction size" + }, + "medianfee": { + "type": "number", + "description": "Truncated median fee in the block" + }, + "mediantime": { + "type": "number", + "description": "The block median time past" + }, + "mediantxsize": { + "type": "number", + "description": "Truncated median transaction size" + }, + "minfee": { + "type": "number", + "description": "Minimum fee in the block" + }, + "minfeerate": { + "type": "number", + "description": "Minimum feerate (in satoshis per virtual byte)" + }, + "mintxsize": { + "type": "number", + "description": "Minimum transaction size" + }, + "outs": { + "type": "number", + "description": "The number of outputs" + }, + "subsidy": { + "type": "number", + "description": "The block subsidy" + }, + "swtotal_size": { + "type": "number", + "description": "Total size of all segwit transactions" + }, + "swtotal_weight": { + "type": "number", + "description": "Total weight of all segwit transactions divided by segwit scale factor (4)" + }, + "swtxs": { + "type": "number", + "description": "The number of segwit transactions" + }, + "time": { + "type": "number", + "description": "The block time" + }, + "total_out": { + "type": "number", + "description": "Total amount in all outputs (excluding coinbase and thus reward [ie subsidy + totalfee])" + }, + "total_size": { + "type": "number", + "description": "Total size of all non-coinbase transactions" + }, + "total_weight": { + "type": "number", + "description": "Total weight of all non-coinbase transactions divided by segwit scale factor (4)" + }, + "totalfee": { + "type": "number", + "description": "The fee total" + }, + "txs": { + "type": "number", + "description": "The number of transactions (excluding coinbase)" + }, + "utxo_increase": { + "type": "number", + "description": "The increase/decrease in the number of unspent outputs" + }, + "utxo_size_inc": { + "type": "number", + "description": "The increase/decrease in size for the utxo index (not discounting op_return and similar)" } } } @@ -1235,6 +1318,65 @@ } } }, + "getchaintxstats": { + "summary": "Compute statistics about the total number and rate of transactions in the chain.", + "description": [ + "", + "> lbrycrd-cli getchaintxstats ", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"getchaintxstats\", \"params\": [2016] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "" + ], + "tags": [ + "Blockchain" + ], + "params": { + "type": "object", + "properties": { + "nblocks": { + "type": "number", + "description": "Size of the window in number of blocks (default: one month)." + }, + "blockhash": { + "type": "string", + "description": "The hash of the block that ends the window." + } + }, + "required": [] + }, + "result": { + "type": "object", + "properties": { + "time": { + "type": "number", + "description": "The timestamp for the final block in the window in UNIX format." + }, + "txcount": { + "type": "number", + "description": "The total number of transactions in the chain up to that point." + }, + "window_final_block_hash": { + "type": "string", + "description": "The hash of the final block in the window." + }, + "window_block_count": { + "type": "number", + "description": "Size of the window in number of blocks." + }, + "window_tx_count": { + "type": "number", + "description": "The number of transactions in the window. Only returned if \"window_block_count\" is > 0." + }, + "window_interval": { + "type": "number", + "description": "The elapsed time in the window in seconds. Only returned if \"window_block_count\" is > 0." + }, + "txrate": { + "type": "number", + "description": "The average rate of transactions per second in the window. Only returned if \"window_interval\" is > 0." + } + } + } + }, "getdifficulty": { "summary": "Returns the proof-of-work difficulty as a multiple of the minimum difficulty.", "description": [ @@ -1256,6 +1398,374 @@ "description": "the proof-of-work difficulty as a multiple of the minimum difficulty." } }, + "getmempoolancestors": { + "summary": "If txid is in the mempool, returns all in-mempool ancestors.", + "description": [ + "", + "> lbrycrd-cli getmempoolancestors \"mytxid\"", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"getmempoolancestors\", \"params\": [\"mytxid\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "" + ], + "tags": [ + "Blockchain" + ], + "params": { + "type": "object", + "properties": { + "txid": { + "type": "string", + "description": "The transaction id (must be in mempool)" + }, + "verbose": { + "type": "boolean", + "description": "True for a json object, false for array of transaction ids", + "default": false + } + }, + "required": [ + "txid" + ] + }, + "result": { + "type": "object", + "items": { + "type": "object", + "properties": { + "transactionid": { + "type": "string", + "description": "The transaction id of an in-mempool ancestor transaction" + } + } + }, + "properties": { + "transactionid": { + "type": "object", + "properties": { + "size": { + "type": "number", + "description": "virtual transaction size as defined in BIP 141. This is different from actual serialized size for witness transactions as witness data is discounted." + }, + "fee": { + "type": "number", + "description": "transaction fee in LBC (DEPRECATED)" + }, + "modifiedfee": { + "type": "number", + "description": "transaction fee with fee deltas used for mining priority (DEPRECATED)" + }, + "time": { + "type": "number", + "description": "local time transaction entered pool in seconds since 1 Jan 1970 GMT" + }, + "height": { + "type": "number", + "description": "block height when transaction entered pool" + }, + "descendantcount": { + "type": "number", + "description": "number of in-mempool descendant transactions (including this one)" + }, + "descendantsize": { + "type": "number", + "description": "virtual transaction size of in-mempool descendants (including this one)" + }, + "descendantfees": { + "type": "number", + "description": "modified fees (see above) of in-mempool descendants (including this one) (DEPRECATED)" + }, + "ancestorcount": { + "type": "number", + "description": "number of in-mempool ancestor transactions (including this one)" + }, + "ancestorsize": { + "type": "number", + "description": "virtual transaction size of in-mempool ancestors (including this one)" + }, + "ancestorfees": { + "type": "number", + "description": "modified fees (see above) of in-mempool ancestors (including this one) (DEPRECATED)" + }, + "wtxid": { + "type": "string", + "description": "hash of serialized transaction, including witness data" + }, + "fees": { + "type": "object", + "properties": { + "base": { + "type": "number", + "description": "transaction fee in LBC" + }, + "modified": { + "type": "number", + "description": "transaction fee with fee deltas used for mining priority in LBC" + }, + "ancestor": { + "type": "number", + "description": "modified fees (see above) of in-mempool ancestors (including this one) in LBC" + }, + "descendant": { + "type": "number", + "description": "modified fees (see above) of in-mempool descendants (including this one) in LBC" + } + } + }, + "depends": { + "type": "array", + "items": { + "type": "array" + } + }, + "spentby": { + "type": "array", + "items": { + "type": "array" + } + } + } + } + } + } + }, + "getmempooldescendants": { + "summary": "If txid is in the mempool, returns all in-mempool descendants.", + "description": [ + "", + "> lbrycrd-cli getmempooldescendants \"mytxid\"", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"getmempooldescendants\", \"params\": [\"mytxid\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "" + ], + "tags": [ + "Blockchain" + ], + "params": { + "type": "object", + "properties": { + "txid": { + "type": "string", + "description": "The transaction id (must be in mempool)" + }, + "verbose": { + "type": "boolean", + "description": "True for a json object, false for array of transaction ids", + "default": false + } + }, + "required": [ + "txid" + ] + }, + "result": { + "type": "object", + "items": { + "type": "object", + "properties": { + "transactionid": { + "type": "string", + "description": "The transaction id of an in-mempool descendant transaction" + } + } + }, + "properties": { + "transactionid": { + "type": "object", + "properties": { + "size": { + "type": "number", + "description": "virtual transaction size as defined in BIP 141. This is different from actual serialized size for witness transactions as witness data is discounted." + }, + "fee": { + "type": "number", + "description": "transaction fee in LBC (DEPRECATED)" + }, + "modifiedfee": { + "type": "number", + "description": "transaction fee with fee deltas used for mining priority (DEPRECATED)" + }, + "time": { + "type": "number", + "description": "local time transaction entered pool in seconds since 1 Jan 1970 GMT" + }, + "height": { + "type": "number", + "description": "block height when transaction entered pool" + }, + "descendantcount": { + "type": "number", + "description": "number of in-mempool descendant transactions (including this one)" + }, + "descendantsize": { + "type": "number", + "description": "virtual transaction size of in-mempool descendants (including this one)" + }, + "descendantfees": { + "type": "number", + "description": "modified fees (see above) of in-mempool descendants (including this one) (DEPRECATED)" + }, + "ancestorcount": { + "type": "number", + "description": "number of in-mempool ancestor transactions (including this one)" + }, + "ancestorsize": { + "type": "number", + "description": "virtual transaction size of in-mempool ancestors (including this one)" + }, + "ancestorfees": { + "type": "number", + "description": "modified fees (see above) of in-mempool ancestors (including this one) (DEPRECATED)" + }, + "wtxid": { + "type": "string", + "description": "hash of serialized transaction, including witness data" + }, + "fees": { + "type": "object", + "properties": { + "base": { + "type": "number", + "description": "transaction fee in LBC" + }, + "modified": { + "type": "number", + "description": "transaction fee with fee deltas used for mining priority in LBC" + }, + "ancestor": { + "type": "number", + "description": "modified fees (see above) of in-mempool ancestors (including this one) in LBC" + }, + "descendant": { + "type": "number", + "description": "modified fees (see above) of in-mempool descendants (including this one) in LBC" + } + } + }, + "depends": { + "type": "array", + "items": { + "type": "array" + } + }, + "spentby": { + "type": "array", + "items": { + "type": "array" + } + } + } + } + } + } + }, + "getmempoolentry": { + "summary": "Returns mempool data for given transaction", + "description": [ + "", + "> lbrycrd-cli getmempoolentry \"mytxid\"", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"getmempoolentry\", \"params\": [\"mytxid\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "" + ], + "tags": [ + "Blockchain" + ], + "params": { + "type": "object", + "properties": { + "txid": { + "type": "string", + "description": "The transaction id (must be in mempool)" + } + }, + "required": [ + "txid" + ] + }, + "result": { + "type": "object", + "properties": { + "size": { + "type": "number", + "description": "virtual transaction size as defined in BIP 141. This is different from actual serialized size for witness transactions as witness data is discounted." + }, + "fee": { + "type": "number", + "description": "transaction fee in LBC (DEPRECATED)" + }, + "modifiedfee": { + "type": "number", + "description": "transaction fee with fee deltas used for mining priority (DEPRECATED)" + }, + "time": { + "type": "number", + "description": "local time transaction entered pool in seconds since 1 Jan 1970 GMT" + }, + "height": { + "type": "number", + "description": "block height when transaction entered pool" + }, + "descendantcount": { + "type": "number", + "description": "number of in-mempool descendant transactions (including this one)" + }, + "descendantsize": { + "type": "number", + "description": "virtual transaction size of in-mempool descendants (including this one)" + }, + "descendantfees": { + "type": "number", + "description": "modified fees (see above) of in-mempool descendants (including this one) (DEPRECATED)" + }, + "ancestorcount": { + "type": "number", + "description": "number of in-mempool ancestor transactions (including this one)" + }, + "ancestorsize": { + "type": "number", + "description": "virtual transaction size of in-mempool ancestors (including this one)" + }, + "ancestorfees": { + "type": "number", + "description": "modified fees (see above) of in-mempool ancestors (including this one) (DEPRECATED)" + }, + "wtxid": { + "type": "string", + "description": "hash of serialized transaction, including witness data" + }, + "fees": { + "type": "object", + "properties": { + "base": { + "type": "number", + "description": "transaction fee in LBC" + }, + "modified": { + "type": "number", + "description": "transaction fee with fee deltas used for mining priority in LBC" + }, + "ancestor": { + "type": "number", + "description": "modified fees (see above) of in-mempool ancestors (including this one) in LBC" + }, + "descendant": { + "type": "number", + "description": "modified fees (see above) of in-mempool descendants (including this one) in LBC" + } + } + }, + "depends": { + "type": "array", + "items": { + "type": "array" + } + }, + "spentby": { + "type": "array", + "items": { + "type": "array" + } + } + } + } + }, "getmempoolinfo": { "summary": "Returns details on the active state of the TX memory pool.", "description": [ @@ -1281,7 +1791,7 @@ }, "bytes": { "type": "number", - "description": "Sum of all tx sizes" + "description": "Sum of all virtual transaction sizes as defined in BIP 141. Differs from actual serialized size because witness data is discounted" }, "usage": { "type": "number", @@ -1293,13 +1803,17 @@ }, "mempoolminfee": { "type": "number", - "description": "Minimum fee for tx to be accepted" + "description": "Minimum fee rate in LBC/kB for tx to be accepted. Is the maximum of minrelaytxfee and minimum mempool fee" + }, + "minrelaytxfee": { + "type": "number", + "description": "Current minimum relay fee for transactions" } } } }, "getrawmempool": { - "summary": "Returns all transaction ids in memory pool as a json array of string transaction ids.", + "summary": "Returns all transaction ids in memory pool as a json array of string transaction ids. Hint: use getmempoolentry to fetch a specific transaction from the mempool.", "description": [ "", "> lbrycrd-cli getrawmempool true", @@ -1314,14 +1828,14 @@ "properties": { "verbose": { "type": "boolean", - "description": "true for a json object, false for array of transaction ids", + "description": "True for a json object, false for array of transaction ids", "default": false } }, "required": [] }, "result": { - "type": "array", + "type": "object", "items": { "type": "object", "properties": { @@ -1330,6 +1844,94 @@ "description": "The transaction id" } } + }, + "properties": { + "transactionid": { + "type": "object", + "properties": { + "size": { + "type": "number", + "description": "virtual transaction size as defined in BIP 141. This is different from actual serialized size for witness transactions as witness data is discounted." + }, + "fee": { + "type": "number", + "description": "transaction fee in LBC (DEPRECATED)" + }, + "modifiedfee": { + "type": "number", + "description": "transaction fee with fee deltas used for mining priority (DEPRECATED)" + }, + "time": { + "type": "number", + "description": "local time transaction entered pool in seconds since 1 Jan 1970 GMT" + }, + "height": { + "type": "number", + "description": "block height when transaction entered pool" + }, + "descendantcount": { + "type": "number", + "description": "number of in-mempool descendant transactions (including this one)" + }, + "descendantsize": { + "type": "number", + "description": "virtual transaction size of in-mempool descendants (including this one)" + }, + "descendantfees": { + "type": "number", + "description": "modified fees (see above) of in-mempool descendants (including this one) (DEPRECATED)" + }, + "ancestorcount": { + "type": "number", + "description": "number of in-mempool ancestor transactions (including this one)" + }, + "ancestorsize": { + "type": "number", + "description": "virtual transaction size of in-mempool ancestors (including this one)" + }, + "ancestorfees": { + "type": "number", + "description": "modified fees (see above) of in-mempool ancestors (including this one) (DEPRECATED)" + }, + "wtxid": { + "type": "string", + "description": "hash of serialized transaction, including witness data" + }, + "fees": { + "type": "object", + "properties": { + "base": { + "type": "number", + "description": "transaction fee in LBC" + }, + "modified": { + "type": "number", + "description": "transaction fee with fee deltas used for mining priority in LBC" + }, + "ancestor": { + "type": "number", + "description": "modified fees (see above) of in-mempool ancestors (including this one) in LBC" + }, + "descendant": { + "type": "number", + "description": "modified fees (see above) of in-mempool descendants (including this one) in LBC" + } + } + }, + "depends": { + "type": "array", + "items": { + "type": "array" + } + }, + "spentby": { + "type": "array", + "items": { + "type": "array" + } + } + } + } } } }, @@ -1362,9 +1964,9 @@ "type": "number", "description": "vout number" }, - "includemempool": { + "include_mempool": { "type": "boolean", - "description": "Whether to include the mem pool" + "description": "Whether to include the mempool. Default: true. Note that an unspent output that is spent in the mempool won't appear." } }, "required": [ @@ -1377,7 +1979,7 @@ "properties": { "bestblock": { "type": "string", - "description": "the block hash" + "description": "The hash of the block at the tip of the chain" }, "confirmations": { "type": "number", @@ -1411,7 +2013,7 @@ "items": { "type": "array", "properties": { - "lbrycrdaddress": { + "address": { "type": "string", "description": "lbrycrd address" } @@ -1420,10 +2022,6 @@ } } }, - "version": { - "type": "number", - "description": "The version" - }, "coinbase": { "type": "boolean", "description": "Coinbase or not" @@ -1432,7 +2030,7 @@ } }, "gettxoutproof": { - "summary": "Returns a hex-encoded proof that \"txid\" was included in a block. NOTE: By default this function only works sometimes. This is when there is an unspent output in the utxo for this transaction. To make it always work, you need to maintain a transaction index, using the -txindex command line option or specify the block in which the transaction is included in manually (by blockhash). Return the raw transaction data.", + "summary": "Returns a hex-encoded proof that \"txid\" was included in a block. NOTE: By default this function only works sometimes. This is when there is an unspent output in the utxo for this transaction. To make it always work, you need to maintain a transaction index, using the -txindex command line option or specify the block in which the transaction is included manually (by blockhash).", "description": [], "tags": [ "Blockchain" @@ -1444,7 +2042,7 @@ "type": "string", "description": "A json array of txids to filter [ \"txid\" (string) A transaction hash ,... ]" }, - "block hash": { + "blockhash": { "type": "string", "description": "If specified, looks for txid in the block with this hash" } @@ -1483,24 +2081,28 @@ }, "bestblock": { "type": "string", - "description": "the best block hash hex" + "description": "The hash of the block at the tip of the chain" }, "transactions": { "type": "number", - "description": "The number of transactions" + "description": "The number of transactions with unspent outputs" }, "txouts": { "type": "number", - "description": "The number of output transactions" + "description": "The number of unspent transaction outputs" }, - "bytes_serialized": { + "bogosize": { "type": "number", - "description": "The serialized size" + "description": "A meaningless metric for UTXO set size" }, - "hash_serialized": { + "hash_serialized_2": { "type": "string", "description": "The serialized hash" }, + "disk_size": { + "type": "number", + "description": "The estimated size of the chainstate on disk" + }, "total_amount": { "type": "number", "description": "The total amount" @@ -1508,6 +2110,130 @@ } } }, + "preciousblock": { + "summary": "Treats a block as if it were received before others with the same work. A later preciousblock call can override the effect of an earlier one. The effects of preciousblock are not retained across restarts.", + "description": [ + "", + "> lbrycrd-cli preciousblock \"blockhash\"", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"preciousblock\", \"params\": [\"blockhash\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "" + ], + "tags": [ + "Blockchain" + ], + "params": { + "type": "object", + "properties": { + "blockhash": { + "type": "string", + "description": "the hash of the block to mark as precious" + } + }, + "required": [ + "blockhash" + ] + } + }, + "pruneblockchain": { + "summary": "", + "description": [ + "", + "> lbrycrd-cli pruneblockchain 1000", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"pruneblockchain\", \"params\": [1000] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "" + ], + "tags": [ + "Blockchain" + ], + "params": { + "type": "object", + "properties": { + "height": { + "type": "number", + "description": "The block height to prune up to. May be set to a discrete height, or a unix timestamp to prune blocks whose block time is at least 2 hours older than the provided timestamp." + } + }, + "required": [ + "height" + ] + }, + "result": { + "type": "number", + "description": "Height of the last block pruned." + } + }, + "savemempool": { + "summary": "Dumps the mempool to disk. It will fail until the previous dump is fully loaded.", + "description": [ + "", + "> lbrycrd-cli savemempool ", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"savemempool\", \"params\": [] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "" + ], + "tags": [ + "Blockchain" + ], + "params": { + "type": "object", + "properties": {}, + "required": [] + } + }, + "scantxoutset": { + "summary": "EXPERIMENTAL warning: this call may be removed or changed in future releases. Scans the unspent transaction output set for entries that match certain output descriptors.", + "description": [ + "", + " addr(
) Outputs whose scriptPubKey corresponds to the specified address (does not include P2PK)", + " raw() Outputs whose scriptPubKey equals the specified hex scripts", + " combo() P2PK, P2PKH, P2WPKH, and P2SH-P2WPKH outputs for the given pubkey", + " pkh() P2PKH outputs for the given pubkey", + " sh(multi(,,,...)) P2SH-multisig outputs for the given threshold and pubkeys", + "", + "In the above, either refers to a fixed public key in hexadecimal notation, or to an xpub/xprv optionally followed by one", + "or more path elements separated by \"/\", and optionally ending in \"/*\" (unhardened), or \"/*'\" or \"/*h\" (hardened) to specify all", + "unhardened or hardened child keys.", + "In the latter case, a range needs to be specified by below if different from 1000.", + "For more information on output descriptors, see the documentation in the doc/descriptors.md file.", + "", + "Arguments:", + "1. \"action\" (string, required) The action to execute", + " \"start\" for starting a scan", + " \"abort\" for aborting the current scan (returns true when abort was successful)", + " \"status\" for progress report (in %) of the current scan", + "2. \"scanobjects\" (array, required) Array of scan objects", + " [ Every scan object is either a string descriptor or an object:", + " \"descriptor\", (string, optional) An output descriptor", + " { (object, optional) An object with output descriptor and metadata", + " \"desc\": \"descriptor\", (string, required) An output descriptor", + " \"range\": n, (numeric, optional) Up to what child index HD chains should be explored (default: 1000)", + " },", + " ...", + " ]", + "", + "Result:", + "{", + " \"unspents\": [", + " {", + " \"txid\" : \"transactionid\", (string) The transaction id", + " \"vout\": n, (numeric) the vout value", + " \"scriptPubKey\" : \"script\", (string) the script key", + " \"amount\" : x.xxx, (numeric) The total amount in LBC of the unspent output", + " \"height\" : n, (numeric) Height of the unspent transaction output", + " }", + " ,...], ", + " \"total_amount\" : x.xxx, (numeric) The total amount of all found unspent outputs in LBC", + "]", + "" + ], + "tags": [ + "Blockchain" + ], + "params": { + "type": "object", + "properties": {}, + "required": [] + } + }, "verifychain": { "summary": "Verifies blockchain database.", "description": [ @@ -1527,10 +2253,10 @@ "description": "How thorough the block verification is.", "default": 3 }, - "numblocks": { + "nblocks": { "type": "number", "description": "The number of blocks to check.", - "default": 288 + "default": 24 } }, "required": [] @@ -1559,12 +2285,12 @@ ] } }, - "getinfo": { - "summary": "Returns an object containing various state info.", + "getmemoryinfo": { + "summary": "Returns an object containing information about memory usage.", "description": [ "", - "> lbrycrd-cli getinfo ", - "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"getinfo\", \"params\": [] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "> lbrycrd-cli getmemoryinfo ", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"getmemoryinfo\", \"params\": [] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", "" ], "tags": [ @@ -1572,75 +2298,47 @@ ], "params": { "type": "object", - "properties": {}, - "required": [] + "properties": { + "null": { + "type": "object", + "description": "\"mode\" determines what kind of information is returned. This argument is optional, the default mode is \"stats\".\n - \"stats\" returns general statistics about memory usage in the daemon.\n - \"mallocinfo\" returns an XML string describing low-level heap state (only available if compiled with glibc 2.10+)." + } + }, + "required": [ + null + ] }, "result": { "type": "object", "properties": { - "version": { - "type": "number", - "description": "the server version" - }, - "protocolversion": { - "type": "number", - "description": "the protocol version" - }, - "walletversion": { - "type": "number", - "description": "the wallet version" - }, - "balance": { - "type": "number", - "description": "the total lbrycrd balance of the wallet" - }, - "blocks": { - "type": "number", - "description": "the current number of blocks processed in the server" - }, - "timeoffset": { - "type": "number", - "description": "the time offset" - }, - "connections": { - "type": "number", - "description": "the number of connections" - }, - "proxy": { - "type": "string", - "description": "the proxy used by the server" - }, - "difficulty": { - "type": "number", - "description": "the current difficulty" - }, - "testnet": { - "type": "boolean", - "description": "if the server is using testnet or not" - }, - "keypoololdest": { - "type": "number", - "description": "the timestamp (seconds since GMT epoch) of the oldest pre-generated key in the key pool" - }, - "keypoolsize": { - "type": "number", - "description": "how many new keys are pre-generated" - }, - "unlocked_until": { - "type": "number", - "description": "the timestamp in seconds since epoch (midnight Jan 1 1970 GMT) that the wallet is unlocked for transfers, or 0 if the wallet is locked" - }, - "paytxfee": { - "type": "number", - "description": "the transaction fee set in LBC/kB" - }, - "relayfee": { - "type": "number", - "description": "minimum relay fee for non-free transactions in LBC/kB" - }, - "errors": { - "type": "string", - "description": "any error messages" + "locked": { + "type": "object", + "properties": { + "used": { + "type": "number", + "description": "Number of bytes used" + }, + "free": { + "type": "number", + "description": "Number of bytes available in current arenas" + }, + "total": { + "type": "number", + "description": "Total number of bytes managed" + }, + "locked": { + "type": "number", + "description": "Amount of bytes that succeeded locking. If this number is smaller than total, locking pages failed at some point and key data could be swapped to disk." + }, + "chunks_used": { + "type": "number", + "description": "Number allocated chunks" + }, + "chunks_free": { + "type": "number", + "description": "Number unused chunks" + } + } } } } @@ -1666,8 +2364,43 @@ "description": "The help text" } }, + "logging": { + "summary": "Gets and sets the logging configuration. When called without an argument, returns the list of categories with status that are currently being debug logged or not. When called with arguments, adds or removes categories from debug logging and return the lists above. The arguments are evaluated in order \"include\", \"exclude\". If an item is both included and excluded, it will thus end up being excluded. The valid logging categories are: net, tor, mempool, http, bench, zmq, db, rpc, estimatefee, addrman, selectcoins, reindex, cmpctblock, rand, prune, proxy, mempoolrej, libevent, coindb, qt, leveldb In addition, the following are available as category names with special meanings: - \"all\", \"1\" : represent all logging categories. - \"none\", \"0\" : even if other logging categories are specified, ignore all of them.", + "description": [ + "", + "> lbrycrd-cli logging \"[\\\"all\\\"]\" \"[\\\"http\\\"]\"", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"logging\", \"params\": [[\"all\"], \"[libevent]\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "" + ], + "tags": [ + "Control" + ], + "params": { + "type": "object", + "properties": { + "include": { + "type": "array", + "description": "A json array of categories to add debug logging\n [\n \"category\" (string) the valid logging category\n ,...\n ]" + }, + "exclude": { + "type": "array", + "description": "A json array of categories to remove debug logging\n [\n \"category\" (string) the valid logging category\n ,...\n ]" + } + }, + "required": [] + }, + "result": { + "type": "object", + "properties": { + "category": { + "type": "number", + "description": "if being debug logged or not. 0:inactive, 1:active" + } + } + } + }, "stop": { - "summary": "Stop LBRYcrd server.", + "summary": "Stop lbrycrd server.", "description": [], "tags": [ "Control" @@ -1678,8 +2411,29 @@ "required": [] } }, + "uptime": { + "summary": "Returns the total uptime of the server.", + "description": [ + "", + "> lbrycrd-cli uptime ", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"uptime\", \"params\": [] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "" + ], + "tags": [ + "Control" + ], + "params": { + "type": "object", + "properties": {}, + "required": [] + }, + "result": { + "type": "number", + "description": "The number of seconds that the server has been running" + } + }, "generate": { - "summary": "Mine up to numblocks blocks immediately (before the RPC call returns)", + "summary": "Mine up to nblocks blocks immediately (before the RPC call returns) to an address in the wallet.", "description": [ "", "", @@ -1693,17 +2447,17 @@ "params": { "type": "object", "properties": { - "numblocks": { + "nblocks": { "type": "number", "description": "How many blocks are generated immediately." }, "maxtries": { "type": "number", - "description": "How many iterations to try (default = 1000000). Result [ blockhashes ] (array) hashes of blocks generated" + "description": "How many iterations to try (default = 1000000)." } }, "required": [ - "numblocks" + "nblocks" ] } }, @@ -1722,31 +2476,31 @@ "params": { "type": "object", "properties": { - "numblocks": { + "nblocks": { "type": "number", "description": "How many blocks are generated immediately." }, "address": { "type": "string", - "description": "The address to send the newly generated bitcoin to." + "description": "The address to send the newly generated lbry to." }, "maxtries": { "type": "number", - "description": "How many iterations to try (default = 1000000). Result [ blockhashes ] (array) hashes of blocks generated" + "description": "How many iterations to try (default = 1000000)." } }, "required": [ - "numblocks", + "nblocks", "address" ] } }, "getblocktemplate": { - "summary": "If the request parameters include a 'mode' key, that is used to explicitly select between the default 'template' request or a 'proposal'. It returns data needed to construct a block to work on. See https://en.bitcoin.it/wiki/BIP_0022 for full specification.", + "summary": "If the request parameters include a 'mode' key, that is used to explicitly select between the default 'template' request or a 'proposal'. It returns data needed to construct a block to work on. For full specification, see BIPs 22, 23, 9, and 145: https://github.com/bitcoin/bips/blob/master/bip-0022.mediawiki https://github.com/bitcoin/bips/blob/master/bip-0023.mediawiki https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki#getblocktemplate_changes https://github.com/bitcoin/bips/blob/master/bip-0145.mediawiki", "description": [ "", - "> lbrycrd-cli getblocktemplate ", - "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"getblocktemplate\", \"params\": [] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "> lbrycrd-cli getblocktemplate {\"rules\": [\"segwit\"]}", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"getblocktemplate\", \"params\": [{\"rules\": [\"segwit\"]}] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", "" ], "tags": [ @@ -1755,9 +2509,38 @@ "params": { "type": "object", "properties": { - "jsonrequestobject": { - "type": "string", - "description": "A json object in the following spec { \"mode\":\"template\" (string, optional) This must be set to \"template\" or omitted \"capabilities\":[ (array, optional) A list of strings \"support\" (string) client side supported feature, 'longpoll', 'coinbasetxn', 'coinbasevalue', 'proposal', 'serverlist', 'workid' ,... ] }" + "template_request": { + "type": "object", + "properties": { + "mode": { + "type": "string", + "description": "This must be set to \"template\", \"proposal\" (see BIP 23), or omitted" + }, + "capabilities": { + "type": "array", + "items": { + "type": "array", + "properties": { + "support": { + "type": "string", + "description": "client side supported feature, 'longpoll', 'coinbasetxn', 'coinbasevalue', 'proposal', 'serverlist', 'workid'" + } + } + } + }, + "rules": { + "type": "array", + "items": { + "type": "array", + "properties": { + "support": { + "type": "string", + "description": "client side supported softfork deployment" + } + } + } + } + } } }, "required": [] @@ -1767,7 +2550,20 @@ "properties": { "version": { "type": "number", - "description": "The block version" + "description": "The preferred block version" + }, + "vbavailable": { + "type": "object", + "properties": { + "rulename": { + "type": "number", + "description": "identifies the bit number as indicating acceptance and readiness for the named softfork rule" + } + } + }, + "vbrequired": { + "type": "number", + "description": "bit mask of versionbits the server requires set in submissions" }, "previousblockhash": { "type": "string", @@ -1782,9 +2578,13 @@ "type": "string", "description": "transaction data encoded in hexadecimal (byte-for-byte)" }, + "txid": { + "type": "string", + "description": "transaction id encoded in little-endian hexadecimal" + }, "hash": { "type": "string", - "description": "hash/id encoded in little-endian hexadecimal" + "description": "hash encoded in little-endian hexadecimal (including witness data)" }, "depends": { "type": "array", @@ -1800,15 +2600,15 @@ }, "fee": { "type": "number", - "description": "difference in value between transaction inputs and outputs (in Satoshis); for coinbase transactions, this is a negative Number of the total collected block fees (ie, not including the block subsidy); if key is not present, fee is unknown and clients MUST NOT assume there isn't one" + "description": "difference in value between transaction inputs and outputs (in satoshis); for coinbase transactions, this is a negative Number of the total collected block fees (ie, not including the block subsidy); if key is not present, fee is unknown and clients MUST NOT assume there isn't one" }, "sigops": { "type": "number", - "description": "total number of SigOps, as counted for purposes of block limits; if key is not present, sigop count is unknown and clients MUST NOT assume there aren't any" + "description": "total SigOps cost, as counted for purposes of block limits; if key is not present, sigop cost is unknown and clients MUST NOT assume it is zero" }, - "required": { - "type": "boolean", - "description": "if provided and true, this transaction must be in the final block" + "weight": { + "type": "number", + "description": "total transaction weight, as counted for purposes of block limits" } } } @@ -1818,13 +2618,13 @@ "properties": { "flags": { "type": "string", - "description": "" + "description": "key name is to be ignored, and value included in scriptSig" } } }, "coinbasevalue": { "type": "number", - "description": "maximum allowable input to coinbase transaction, including the generation award and transaction fees (in Satoshis)" + "description": "maximum allowable input to coinbase transaction, including the generation award and transaction fees (in satoshis)" }, "target": { "type": "string", @@ -1858,6 +2658,10 @@ "type": "number", "description": "limit of block size" }, + "weightlimit": { + "type": "number", + "description": "limit of block weight" + }, "curtime": { "type": "number", "description": "current timestamp in seconds since epoch (Jan 1 1970 GMT)" @@ -1869,48 +2673,14 @@ "height": { "type": "number", "description": "The height of the next block" + }, + "claimtrie": { + "type": "string", + "description": "The root hash of the claim trie in hex" } } } }, - "getgenerate": { - "summary": "Return if the server is set to generate coins or not. The default is false. It is set with the command line argument -gen (or lbrycrd.conf setting gen) It can also be set with the setgenerate call. Result true|false (boolean) If the server is set to generate coins or not", - "description": [ - "", - "> lbrycrd-cli getgenerate ", - "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"getgenerate\", \"params\": [] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", - "" - ], - "tags": [ - "Mining" - ], - "params": { - "type": "object", - "properties": {}, - "required": [] - } - }, - "gethashespersec": { - "summary": "Returns a recent hashes per second performance measurement while generating. See the getgenerate and setgenerate calls to turn generation on and off.", - "description": [ - "", - "> lbrycrd-cli gethashespersec ", - "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"gethashespersec\", \"params\": [] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", - "" - ], - "tags": [ - "Mining" - ], - "params": { - "type": "object", - "properties": {}, - "required": [] - }, - "result": { - "type": "number", - "description": "The recent hashes per second when generation is on (will return 0 if generation is off)" - } - }, "getmininginfo": { "summary": "Returns a json object containing mining-related information.", "description": [ @@ -1934,9 +2704,9 @@ "type": "number", "description": "The current block" }, - "currentblocksize": { + "currentblockweight": { "type": "number", - "description": "The last block size" + "description": "The last block weight" }, "currentblocktx": { "type": "number", @@ -1946,33 +2716,21 @@ "type": "number", "description": "The current difficulty" }, - "errors": { - "type": "string", - "description": "Current errors" - }, - "generate": { - "type": "boolean", - "description": "If the generation is on or off (see getgenerate or setgenerate calls)" - }, - "genproclimit": { + "networkhashps": { "type": "number", - "description": "The processor limit for generation. -1 if no generation. (see getgenerate or setgenerate calls)" - }, - "hashespersec": { - "type": "number", - "description": "The hashes per second of the generation, or 0 if no generation." + "description": "The network hashes per second" }, "pooledtx": { "type": "number", - "description": "The size of the mem pool" - }, - "testnet": { - "type": "boolean", - "description": "If using testnet or not" + "description": "The size of the mempool" }, "chain": { "type": "string", "description": "current network name as defined in BIP70 (main, test, regtest)" + }, + "warnings": { + "type": "string", + "description": "any network and blockchain warnings" } } } @@ -1991,7 +2749,7 @@ "params": { "type": "object", "properties": { - "blocks": { + "nblocks": { "type": "number", "description": "The number of blocks, or -1 for blocks since last difficulty change.", "default": 120 @@ -2027,62 +2785,27 @@ "type": "string", "description": "The transaction id." }, - "priority delta": { + "dummy": { "type": "number", - "description": "The priority to add or subtract. The transaction selection algorithm considers the tx as it would have a higher priority. (priority of a transaction is calculated: coinage * value_in_satoshis / txsize)" + "description": "API-Compatibility for previous API. Must be zero or null. DEPRECATED. For forward compatibility use named arguments and omit this parameter." }, - "fee delta": { + "fee_delta": { "type": "number", - "description": "The fee value (in satoshis) to add (or subtract, if negative). The fee is not actually paid, only the algorithm for selecting transactions into a block considers the transaction as it would have paid a higher (or lower) fee. Result true (boolean) Returns true" + "description": "The fee value (in satoshis) to add (or subtract, if negative). Note, that this value is not a fee rate. It is a value to modify absolute fee of the TX. The fee is not actually paid, only the algorithm for selecting transactions into a block considers the transaction as it would have paid a higher (or lower) fee." } }, "required": [ "txid", - "priority delta", - "fee delta" - ] - } - }, - "setgenerate": { - "summary": "Set 'generate' true or false to turn generation on or off. Generation is limited to 'genproclimit' processors, -1 is unlimited. See the getgenerate call for the current setting.", - "description": [ - "", - "", - "Set the generation on with a limit of one processor", - "> lbrycrd-cli setgenerate true 1", - "", - "Check the setting", - "> lbrycrd-cli getgenerate ", - "", - "Turn off generation", - "> lbrycrd-cli setgenerate false", - "", - "Using json rpc", - "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"setgenerate\", \"params\": [true, 1] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", - "" - ], - "tags": [ - "Mining" - ], - "params": { - "type": "object", - "properties": { - "generate": { - "type": "boolean", - "description": "Set to true to turn on generation, off to turn off." - }, - "genproclimit": { - "type": "number", - "description": "Set the processor limit for when generation is on. Can be -1 for unlimited." - } - }, - "required": [ - "generate" + "fee_delta" ] + }, + "result": { + "type": "boolean", + "description": "Returns true" } }, "submitblock": { - "summary": "Attempts to submit new block to network. The 'jsonparametersobject' parameter is currently ignored. See https://en.bitcoin.it/wiki/BIP_0022 for full specification.", + "summary": "Attempts to submit new block to network. See https://en.bitcoin.it/wiki/BIP_0022 for full specification.", "description": [ "", "> lbrycrd-cli submitblock \"mydata\"", @@ -2099,18 +2822,23 @@ "type": "string", "description": "the hex-encoded block data to submit" }, - "jsonparametersobject": { - "type": "string", - "description": "object of optional parameters { \"workid\" : \"id\" (string, optional) if the server provided a workid, it MUST be included with submissions }" + "dummy": { + "type": "optional", + "description": "dummy value, for compatibility with BIP" + }, + "null": { + "type": "object", + "description": "This value is ignored." } }, "required": [ - "hexdata" + "hexdata", + null ] } }, "addnode": { - "summary": "Attempts add or remove a node from the addnode list. Or try a connection to a node once.", + "summary": "Attempts to add or remove a node from the addnode list. Or try a connection to a node once. Nodes added using addnode (or -connect) are protected from DoS disconnection and are not required to be full nodes/support SegWit as other outbound peers are (though such peers will not be synced from).", "description": [ "", "> lbrycrd-cli addnode \"192.168.0.6:8333\" \"onetry\"", @@ -2156,11 +2884,13 @@ } }, "disconnectnode": { - "summary": "Immediately disconnects from the specified node.", + "summary": "Immediately disconnects from the specified peer node. Strictly one out of 'address' and 'nodeid' can be provided to identify the node. To disconnect by nodeid, either set 'address' to the empty string, or call using the named 'nodeid' argument only.", "description": [ "", "> lbrycrd-cli disconnectnode \"192.168.0.6:8333\"", + "> lbrycrd-cli disconnectnode \"\" 1", "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"disconnectnode\", \"params\": [\"192.168.0.6:8333\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"disconnectnode\", \"params\": [\"\", 1] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", "" ], "tags": [ @@ -2169,23 +2899,24 @@ "params": { "type": "object", "properties": { - "node": { + "address": { "type": "string", - "description": "The node (see getpeerinfo for nodes)" + "description": "The IP address/port of the node" + }, + "nodeid": { + "type": "number", + "description": "The node ID (see getpeerinfo for node IDs)" } }, - "required": [ - "node" - ] + "required": [] } }, "getaddednodeinfo": { - "summary": "Returns information about the given added node, or all added nodes (note that onetry addnodes are not listed here) If dns is false, only a list of added nodes will be provided, otherwise connected information will also be available.", + "summary": "Returns information about the given added node, or all added nodes (note that onetry addnodes are not listed here)", "description": [ "", - "> lbrycrd-cli getaddednodeinfo true", - "> lbrycrd-cli getaddednodeinfo true \"192.168.0.201\"", - "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"getaddednodeinfo\", \"params\": [true, \"192.168.0.201\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "> lbrycrd-cli getaddednodeinfo \"192.168.0.201\"", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"getaddednodeinfo\", \"params\": [\"192.168.0.201\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", "" ], "tags": [ @@ -2194,18 +2925,12 @@ "params": { "type": "object", "properties": { - "dns": { - "type": "boolean", - "description": "If false, only a list of added nodes will be provided, otherwise connected information will also be available." - }, "node": { "type": "string", "description": "If provided, return information about this specific node, otherwise all nodes are returned." } }, - "required": [ - "dns" - ] + "required": [] }, "result": { "type": "array", @@ -2214,7 +2939,7 @@ "properties": { "addednode": { "type": "string", - "description": "The node ip address" + "description": "The node IP address or name (as provided to addnode)" }, "connected": { "type": "boolean", @@ -2227,7 +2952,7 @@ "properties": { "address": { "type": "string", - "description": "The lbrycrd server host and port" + "description": "The lbrycrd server IP and port we're connected to" }, "connected": { "type": "string", @@ -2290,7 +3015,7 @@ }, "timemillis": { "type": "number", - "description": "Total cpu time" + "description": "Current UNIX time in milliseconds" }, "uploadtarget": { "type": "object", @@ -2359,6 +3084,10 @@ "type": "string", "description": "the services we offer to the network" }, + "localrelay": { + "type": "boolean", + "description": "true if transaction relay is requested from peers" + }, "timeoffset": { "type": "number", "description": "the time offset" @@ -2367,6 +3096,10 @@ "type": "number", "description": "the number of connections" }, + "networkactive": { + "type": "boolean", + "description": "whether p2p networking is enabled" + }, "networks": { "type": "array", "items": { @@ -2387,13 +3120,21 @@ "proxy": { "type": "string", "description": "the proxy that is used for this network, or empty if none" + }, + "proxy_randomize_credentials": { + "type": "string", + "description": "Whether randomized credentials are used" } } } }, "relayfee": { "type": "number", - "description": "minimum relay fee for non-free transactions in LBC/kB" + "description": "minimum relay fee for transactions in LBC/kB" + }, + "incrementalfee": { + "type": "number", + "description": "minimum fee increment for mempool limiting or BIP 125 replacement in LBC/kB" }, "localaddresses": { "type": "array", @@ -2417,7 +3158,7 @@ }, "warnings": { "type": "string", - "description": "any network warnings (such as alert messages)" + "description": "any network and blockchain warnings" } } } @@ -2449,11 +3190,15 @@ }, "addr": { "type": "string", - "description": "The ip address and port of the peer" + "description": "The IP address and port of the peer" + }, + "addrbind": { + "type": "string", + "description": "Bind address of the connection to the peer" }, "addrlocal": { "type": "string", - "description": "local address" + "description": "Local address as reported by the peer" }, "services": { "type": "string", @@ -2501,7 +3246,7 @@ }, "version": { "type": "number", - "description": "The peer version, such as 7001" + "description": "The peer version, such as 70001" }, "subver": { "type": "string", @@ -2511,6 +3256,10 @@ "type": "boolean", "description": "Inbound (true) or Outbound (false)" }, + "addnode": { + "type": "boolean", + "description": "Whether connection was due to addnode/-connect or if it was an automatic/inbound connection" + }, "startingheight": { "type": "number", "description": "The starting height (block) of the peer" @@ -2539,6 +3288,10 @@ } } }, + "whitelisted": { + "type": "boolean", + "description": "Whether the peer is whitelisted" + }, "bytessent_per_msg": { "type": "object", "properties": { @@ -2596,12 +3349,12 @@ } }, "setban": { - "summary": "Attempts add or remove a IP/Subnet from the banned list.", + "summary": "Attempts to add or remove an IP/Subnet from the banned list.", "description": [ "", "> lbrycrd-cli setban \"192.168.0.6\" \"add\" 86400", "> lbrycrd-cli setban \"192.168.0.0/24\" \"add\"", - "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"setban\", \"params\": [\"192.168.0.6\", \"add\" 86400] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"setban\", \"params\": [\"192.168.0.6\", \"add\", 86400] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", "" ], "tags": [ @@ -2610,37 +3363,53 @@ "params": { "type": "object", "properties": { - "ip(/netmask)": { + "subnet": { "type": "string", - "description": "The IP/Subnet (see getpeerinfo for nodes ip) with a optional netmask (default is /32 = single ip)" + "description": "The IP/Subnet (see getpeerinfo for nodes IP) with an optional netmask (default is /32 = single IP)" }, "command": { "type": "string", - "description": "'add' to add a IP/Subnet to the list, 'remove' to remove a IP/Subnet from the list" + "description": "'add' to add an IP/Subnet to the list, 'remove' to remove an IP/Subnet from the list" }, "bantime": { "type": "number", - "description": "time in seconds how long (or until when if [absolute] is set) the ip is banned (0 or empty means using the default time of 24h which can also be overwritten by the -bantime startup argument)" + "description": "time in seconds how long (or until when if [absolute] is set) the IP is banned (0 or empty means using the default time of 24h which can also be overwritten by the -bantime startup argument)" }, "absolute": { "type": "boolean", - "description": "If set, the bantime must be a absolute timestamp in seconds since epoch (Jan 1 1970 GMT)" + "description": "If set, the bantime must be an absolute timestamp in seconds since epoch (Jan 1 1970 GMT)" } }, "required": [ - "ip(/netmask)", + "subnet", "command" ] } }, - "createrawtransaction": { - "summary": "Create a transaction spending the given inputs and creating new outputs. Outputs can be addresses or data. Returns hex-encoded raw transaction. Note that the transaction's inputs are not signed, and it is not stored in the wallet or transmitted to the network.", + "setnetworkactive": { + "summary": "Disable/enable all p2p network activity.", + "description": [], + "tags": [ + "Network" + ], + "params": { + "type": "object", + "properties": { + "state": { + "type": "boolean", + "description": "true to enable networking, false to disable" + } + }, + "required": [ + "state" + ] + } + }, + "combinepsbt": { + "summary": "Combine multiple partially signed LBRY transactions into one transaction. Implements the Combiner role.", "description": [ "", - "> lbrycrd-cli createrawtransaction \"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\" \"{\\\"address\\\":0.01}\"", - "> lbrycrd-cli createrawtransaction \"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\" \"{\\\"data\\\":\\\"00010203\\\"}\"", - "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"createrawtransaction\", \"params\": [\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\", \"{\\\"address\\\":0.01}\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", - "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"createrawtransaction\", \"params\": [\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\", \"{\\\"data\\\":\\\"00010203\\\"}\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "> lbrycrd-cli combinepsbt [\"mybase64_1\", \"mybase64_2\", \"mybase64_3\"]", "" ], "tags": [ @@ -2649,22 +3418,167 @@ "params": { "type": "object", "properties": { - "transactions": { + "txs": { "type": "string", - "description": "A json array of json objects [ { \"txid\":\"id\", (string, required) The transaction id \"vout\":n (numeric, required) The output number } ,... ]" + "description": "A json array of base64 strings of partially signed transactions [ \"psbt\" (string) A base64 string of a PSBT ,... ]" + } + }, + "required": [ + "txs" + ] + }, + "result": { + "type": "string", + "description": "The base64-encoded partially signed transaction" + } + }, + "combinerawtransaction": { + "summary": "Combine multiple partially signed transactions into one transaction. The combined transaction may be another partially signed transaction or a fully signed transaction.", + "description": [ + "", + "> lbrycrd-cli combinerawtransaction [\"myhex1\", \"myhex2\", \"myhex3\"]", + "" + ], + "tags": [ + "Rawtransactions" + ], + "params": { + "type": "object", + "properties": { + "txs": { + "type": "string", + "description": "A json array of hex strings of partially signed transactions [ \"hexstring\" (string) A transaction hash ,... ]" + } + }, + "required": [ + "txs" + ] + }, + "result": { + "type": "string", + "description": "The hex-encoded raw transaction with signature(s)" + } + }, + "converttopsbt": { + "summary": "Converts a network serialized transaction to a PSBT. This should be used only with createrawtransaction and fundrawtransaction createpsbt and walletcreatefundedpsbt should be used for new applications.", + "description": [ + "", + "", + "Create a transaction", + "> lbrycrd-cli createrawtransaction \"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\" \"[{\\\"data\\\":\\\"00010203\\\"}]\"", + "", + "Convert the transaction to a PSBT", + "> lbrycrd-cli converttopsbt \"rawtransaction\"", + "" + ], + "tags": [ + "Rawtransactions" + ], + "params": { + "type": "object", + "properties": { + "hexstring": { + "type": "string", + "description": "The hex string of a raw transaction" + }, + "permitsigdata": { + "type": "boolean", + "description": "If true, any signatures in the input will be discarded and conversion. will continue. If false, RPC will fail if any signatures are present.", + "default": false + }, + "iswitness": { + "type": "boolean", + "description": "Whether the transaction hex is a serialized witness transaction. If iswitness is not present, heuristic tests will be used in decoding. If true, only witness deserializaion will be tried. If false, only non-witness deserialization wil be tried. Only has an effect if permitsigdata is true." + } + }, + "required": [ + "hexstring" + ] + }, + "result": { + "type": "string", + "description": "The resulting raw transaction (base64-encoded string)" + } + }, + "createpsbt": { + "summary": "Creates a transaction in the Partially Signed Transaction format. Implements the Creator role.", + "description": [ + "", + "> lbrycrd-cli createpsbt \"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\" \"[{\\\"data\\\":\\\"00010203\\\"}]\"", + "" + ], + "tags": [ + "Rawtransactions" + ], + "params": { + "type": "object", + "properties": { + "inputs": { + "type": "array", + "description": "A json array of json objects\n [\n {\n \"txid\":\"id\", (string, required) The transaction id\n \"vout\":n, (numeric, required) The output number\n \"sequence\":n (numeric, optional) The sequence number\n } \n ,...\n ]" }, "outputs": { - "type": "string", - "description": "a json object with outputs { \"address\": x.xxx (numeric or string, required) The key is the lbrycrd address, the numeric value (can be string) is the LBC amount \"data\": \"hex\", (string, required) The key is \"data\", the value is hex encoded data ... }" + "type": "array", + "description": "a json array with outputs (key-value pairs), where none of the keys are duplicated.\nThat is, each address can only appear once and there can only be one 'data' object.\n [\n {\n \"address\": x.xxx, (obj, optional) A key-value pair. The key (string) is the lbry address, the value (float or string) is the amount in LBC\n },\n {\n \"data\": \"hex\" (obj, optional) A key-value pair. The key must be \"data\", the value is hex encoded data\n }\n ,... More key-value pairs of the above form. For compatibility reasons, a dictionary, which holds the key-value pairs directly, is also\n accepted as second parameter.\n ]" }, "locktime": { "type": "number", "description": "Raw locktime. Non-0 value also locktime-activates inputs", "default": 0 + }, + "replaceable": { + "type": "boolean", + "description": "Marks this transaction as BIP125 replaceable. Allows this transaction to be replaced by a transaction with higher fees. If provided, it is an error if explicit sequence numbers are incompatible.", + "default": false } }, "required": [ - "transactions", + "inputs", + "outputs" + ] + }, + "result": { + "type": "string", + "description": "The resulting raw transaction (base64-encoded string)" + } + }, + "createrawtransaction": { + "summary": "Create a transaction spending the given inputs and creating new outputs. Outputs can be addresses or data. Returns hex-encoded raw transaction. Note that the transaction's inputs are not signed, and it is not stored in the wallet or transmitted to the network.", + "description": [ + "", + "> lbrycrd-cli createrawtransaction \"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\" \"[{\\\"address\\\":0.01}]\"", + "> lbrycrd-cli createrawtransaction \"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\" \"[{\\\"data\\\":\\\"00010203\\\"}]\"", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"createrawtransaction\", \"params\": [\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\", \"[{\\\"address\\\":0.01}]\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"createrawtransaction\", \"params\": [\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\", \"[{\\\"data\\\":\\\"00010203\\\"}]\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "" + ], + "tags": [ + "Rawtransactions" + ], + "params": { + "type": "object", + "properties": { + "inputs": { + "type": "array", + "description": "A json array of json objects\n [\n {\n \"txid\":\"id\", (string, required) The transaction id\n \"vout\":n, (numeric, required) The output number\n \"sequence\":n (numeric, optional) The sequence number\n } \n ,...\n ]" + }, + "outputs": { + "type": "array", + "description": "a json array with outputs (key-value pairs), where none of the keys are duplicated.\nThat is, each address can only appear once and there can only be one 'data' object.\n [\n {\n \"address\": x.xxx, (obj, optional) A key-value pair. The key (string) is the lbry address, the value (float or string) is the amount in LBC\n },\n {\n \"data\": \"hex\" (obj, optional) A key-value pair. The key must be \"data\", the value is hex encoded data\n }\n ,... More key-value pairs of the above form. For compatibility reasons, a dictionary, which holds the key-value pairs directly, is also\n accepted as second parameter.\n ]" + }, + "locktime": { + "type": "number", + "description": "Raw locktime. Non-0 value also locktime-activates inputs", + "default": 0 + }, + "replaceable": { + "type": "boolean", + "description": "Marks this transaction as BIP125 replaceable. Allows this transaction to be replaced by a transaction with higher fees. If provided, it is an error if explicit sequence numbers are incompatible.", + "default": false + } + }, + "required": [ + "inputs", "outputs" ] }, @@ -2673,6 +3587,186 @@ "description": "hex string of the transaction" } }, + "decodepsbt": { + "summary": "Return a JSON object representing the serialized, base64-encoded partially signed LBRY transaction.", + "description": [ + "", + "> lbrycrd-cli decodepsbt \"psbt\"", + "" + ], + "tags": [ + "Rawtransactions" + ], + "params": { + "type": "object", + "properties": { + "psbt": { + "type": "string", + "description": "The PSBT base64 string" + } + }, + "required": [ + "psbt" + ] + }, + "result": { + "type": "object", + "properties": { + "tx": { + "type": "object" + }, + "unknown": { + "type": "object", + "properties": { + "key": { + "type": null, + "description": "An unknown key-value pair" + } + } + }, + "inputs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "non_witness_utxo": { + "type": "object" + }, + "witness_utxo": { + "type": "object", + "properties": { + "amount": { + "type": "number", + "description": "The value in LBC" + }, + "scriptPubKey": { + "type": "object", + "properties": { + "asm": { + "type": "string", + "description": "The asm" + }, + "hex": { + "type": "string", + "description": "The hex" + }, + "type": { + "type": "string", + "description": "The type, eg 'pubkeyhash'" + }, + "address": { + "type": "string", + "description": "LBRY address if there is one" + } + } + } + } + }, + "partial_signatures": { + "type": "object", + "properties": { + "pubkey": { + "type": "string", + "description": "The public key and signature that corresponds to it." + } + } + }, + "sighash": { + "type": "string", + "description": "The sighash type to be used" + }, + "redeem_script": { + "type": "object", + "properties": { + "asm": { + "type": "string", + "description": "The asm" + }, + "hex": { + "type": "string", + "description": "The hex" + }, + "type": { + "type": "string", + "description": "The type, eg 'pubkeyhash'" + } + } + }, + "witness_script": { + "type": "object", + "properties": { + "asm": { + "type": "string", + "description": "The asm" + }, + "hex": { + "type": "string", + "description": "The hex" + }, + "type": { + "type": "string", + "description": "The type, eg 'pubkeyhash'" + } + } + }, + "bip32_derivs": { + "type": "object", + "properties": { + "pubkey": { + "type": "object", + "properties": { + "master_fingerprint": { + "type": "string", + "description": "The fingerprint of the master key" + }, + "path": { + "type": "string", + "description": "The path" + } + } + } + } + }, + "final_scriptsig": { + "type": "object", + "properties": { + "asm": { + "type": "string", + "description": "The asm" + }, + "hex": { + "type": "string", + "description": "The hex" + } + } + }, + "unknown": { + "type": "object", + "properties": { + "key": { + "type": null, + "description": "An unknown key-value pair" + } + } + } + } + } + }, + "outputs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "key": { + "type": null, + "description": "An unknown key-value pair" + } + } + } + } + } + } + }, "decoderawtransaction": { "summary": "Return a JSON object representing the serialized, hex-encoded transaction.", "description": [ @@ -2687,13 +3781,17 @@ "params": { "type": "object", "properties": { - "hex": { + "hexstring": { "type": "string", "description": "The transaction hex string" + }, + "iswitness": { + "type": "boolean", + "description": "Whether the transaction hex is a serialized witness transaction If iswitness is not present, heuristic tests will be used in decoding" } }, "required": [ - "hex" + "hexstring" ] }, "result": { @@ -2703,10 +3801,22 @@ "type": "string", "description": "The transaction id" }, + "hash": { + "type": "string", + "description": "The transaction hash (differs from txid for witness transactions)" + }, "size": { "type": "number", "description": "The transaction size" }, + "vsize": { + "type": "number", + "description": "The virtual transaction size (differs from size for witness transactions)" + }, + "weight": { + "type": "number", + "description": "The transaction's weight (between vsize*4 - 3 and vsize*4)" + }, "version": { "type": "number", "description": "The version" @@ -2787,7 +3897,7 @@ "properties": { "12tvKAXCxZjSmdNbao16dKXC8tRWfcF5oc": { "type": "string", - "description": "lbrycrd address" + "description": "lbry address" } } } @@ -2814,13 +3924,13 @@ "params": { "type": "object", "properties": { - "hex": { + "hexstring": { "type": "string", "description": "the hex encoded script" } }, "required": [ - "hex" + "hexstring" ] }, "result": { @@ -2849,20 +3959,65 @@ "properties": { "address": { "type": "string", - "description": "lbrycrd address" + "description": "lbry address" } } } }, "p2sh\",\"address": { "type": "string", - "description": "script address" + "description": "address of P2SH script wrapping this redeem script (not returned if the script is already a P2SH)." + } + } + } + }, + "finalizepsbt": { + "summary": "Finalize the inputs of a PSBT. If the transaction is fully signed, it will produce a network serialized transaction which can be broadcast with sendrawtransaction. Otherwise a PSBT will be created which has the final_scriptSig and final_scriptWitness fields filled for inputs that are complete. Implements the Finalizer and Extractor roles.", + "description": [ + "", + "> lbrycrd-cli finalizepsbt \"psbt\"", + "" + ], + "tags": [ + "Rawtransactions" + ], + "params": { + "type": "object", + "properties": { + "psbt": { + "type": "string", + "description": "A base64 string of a PSBT" + }, + "extract": { + "type": "boolean", + "description": "If true and the transaction is complete, extract and return the complete transaction in normal network serialization instead of the PSBT.", + "default": true + } + }, + "required": [ + "psbt" + ] + }, + "result": { + "type": "object", + "properties": { + "psbt": { + "type": "string", + "description": "The base64-encoded partially signed transaction if not extracted" + }, + "hex": { + "type": "string", + "description": "The hex-encoded network transaction if extracted" + }, + "complete": { + "type": "boolean", + "description": "If the transaction has a complete set of signatures" } } } }, "fundrawtransaction": { - "summary": "Add inputs to a transaction until it has enough in value to meet its out value. This will not modify existing inputs, and will add one change output to the outputs. Note that inputs which were signed may need to be resigned after completion since in/outputs have been added. The inputs added will not be signed, use signrawtransaction for that. Note that all existing inputs must have their previous output transaction be in the wallet. Note that all inputs selected must be of standard form and P2SH scripts must be in the wallet using importaddress or addmultisigaddress (to calculate fees). Only pay-to-pubkey, multisig, and P2SH versions thereof are currently supported for watch-only", + "summary": "Add inputs to a transaction until it has enough in value to meet its out value. This will not modify existing inputs, and will add at most one change output to the outputs. No existing outputs will be modified unless \"subtractFeeFromOutputs\" is specified. Note that inputs which were signed may need to be resigned after completion since in/outputs have been added. The inputs added will not be signed, use signrawtransaction for that. Note that all existing inputs must have their previous output transaction be in the wallet. Note that all inputs selected must be of standard form and P2SH scripts must be in the wallet using importaddress or addmultisigaddress (to calculate fees). You can see whether this is the case by checking the \"solvable\" field in the listunspent output. Only pay-to-pubkey, multisig, and P2SH versions thereof are currently supported for watch-only", "description": [ "", "", @@ -2900,6 +4055,10 @@ "type": "number", "description": "The index of the change output" }, + "change_type": { + "type": "string", + "description": "The output type to use. Only valid if changeAddress is not specified. Options are \"legacy\", \"p2sh-segwit\", and \"bech32\". Default is set by -changetype." + }, "includeWatching": { "type": "boolean", "description": "Also select inputs which are watch only" @@ -2907,8 +4066,28 @@ "lockUnspents": { "type": "boolean", "description": "Lock selected unspent outputs" + }, + "feeRate": { + "type": "number", + "description": "Set a specific fee rate in LBC/kB" + }, + "replaceable": { + "type": "boolean", + "description": "Marks this transaction as BIP125 replaceable." + }, + "conf_target": { + "type": "number", + "description": "Confirmation target (in blocks)" + }, + "estimate_mode": { + "type": "string", + "description": "The fee estimate mode, must be one of:" } } + }, + "iswitness": { + "type": "boolean", + "description": "Whether the transaction hex is a serialized witness transaction If iswitness is not present, heuristic tests will be used in decoding" } }, "required": [ @@ -2924,7 +4103,7 @@ }, "fee": { "type": "number", - "description": "Fee the resulting transaction pays" + "description": "Fee in LBC the resulting transaction pays" }, "changepos": { "type": "number", @@ -2934,12 +4113,14 @@ } }, "getrawtransaction": { - "summary": "NOTE: By default this function only works sometimes. This is when the tx is in the mempool or there is an unspent output in the utxo for this transaction. To make it always work, you need to maintain a transaction index, using the -txindex command line option. Return the raw transaction data. If verbose=0, returns a string that is serialized, hex-encoded data for 'txid'. If verbose is non-zero, returns an Object with information about 'txid'.", + "summary": "NOTE: By default this function only works for mempool transactions. If the -txindex option is enabled, it also works for blockchain transactions. If the block which contains the transaction is known, its hash can be provided even for nodes without -txindex. Note that if a blockhash is provided, only that block will be searched and if the transaction is in the mempool or other blocks, or if this node does not have the given block available, the transaction will not be found. DEPRECATED: for now, it also works for transactions with unspent outputs. Return the raw transaction data. If verbose is 'true', returns an Object with information about 'txid'. If verbose is 'false' or omitted, returns a string that is serialized, hex-encoded data for 'txid'.", "description": [ "", "> lbrycrd-cli getrawtransaction \"mytxid\"", - "> lbrycrd-cli getrawtransaction \"mytxid\" 1", - "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"getrawtransaction\", \"params\": [\"mytxid\", 1] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "> lbrycrd-cli getrawtransaction \"mytxid\" true", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"getrawtransaction\", \"params\": [\"mytxid\", true] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "> lbrycrd-cli getrawtransaction \"mytxid\" false \"myblockhash\"", + "> lbrycrd-cli getrawtransaction \"mytxid\" true \"myblockhash\"", "" ], "tags": [ @@ -2953,9 +4134,13 @@ "description": "The transaction id" }, "verbose": { - "type": "number", - "description": "If 0, return a string, other return a json object", - "default": 0 + "type": "boolean", + "description": "If false, return a string, otherwise return a json object", + "default": false + }, + "blockhash": { + "type": "string", + "description": "The block in which to look for the transaction" } }, "required": [ @@ -2964,7 +4149,7 @@ }, "result": { "type": "string", - "description": "The serialized, hex-encoded data for 'txid' Result (if verbose > 0): { \"hex\" : \"data\", (string) The serialized, hex-encoded data for 'txid' \"txid\" : \"id\", (string) The transaction id (same as provided) \"size\" : n, (numeric) The transaction size \"version\" : n, (numeric) The version \"locktime\" : ttt, (numeric) The lock time \"vin\" : [ (array of json objects) { \"txid\": \"id\", (string) The transaction id \"vout\": n, (numeric) \"scriptSig\": { (json object) The script \"asm\": \"asm\", (string) asm \"hex\": \"hex\" (string) hex }, \"sequence\": n (numeric) The script sequence number } ,... ], \"vout\" : [ (array of json objects) { \"value\" : x.xxx, (numeric) The value in LBC \"n\" : n, (numeric) index \"scriptPubKey\" : { (json object) \"asm\" : \"asm\", (string) the asm \"hex\" : \"hex\", (string) the hex \"reqSigs\" : n, (numeric) The required sigs \"type\" : \"pubkeyhash\", (string) The type, eg 'pubkeyhash' \"addresses\" : [ (json array of string) \"lbrycrdaddress\" (string) lbrycrd address ,... ] } } ,... ], \"blockhash\" : \"hash\", (string) the block hash \"confirmations\" : n, (numeric) The confirmations \"time\" : ttt, (numeric) The transaction time in seconds since epoch (Jan 1 1970 GMT) \"blocktime\" : ttt (numeric) The block time in seconds since epoch (Jan 1 1970 GMT) }" + "description": "The serialized, hex-encoded data for 'txid' Result (if verbose is set to true): { \"in_active_chain\": b, (bool) Whether specified block is in the active chain or not (only present with explicit \"blockhash\" argument) \"hex\" : \"data\", (string) The serialized, hex-encoded data for 'txid' \"txid\" : \"id\", (string) The transaction id (same as provided) \"hash\" : \"id\", (string) The transaction hash (differs from txid for witness transactions) \"size\" : n, (numeric) The serialized transaction size \"vsize\" : n, (numeric) The virtual transaction size (differs from size for witness transactions) \"weight\" : n, (numeric) The transaction's weight (between vsize*4-3 and vsize*4) \"version\" : n, (numeric) The version \"locktime\" : ttt, (numeric) The lock time \"vin\" : [ (array of json objects) { \"txid\": \"id\", (string) The transaction id \"vout\": n, (numeric) \"scriptSig\": { (json object) The script \"asm\": \"asm\", (string) asm \"hex\": \"hex\" (string) hex }, \"sequence\": n (numeric) The script sequence number \"txinwitness\": [\"hex\", ...] (array of string) hex-encoded witness data (if any) } ,... ], \"vout\" : [ (array of json objects) { \"value\" : x.xxx, (numeric) The value in LBC \"n\" : n, (numeric) index \"scriptPubKey\" : { (json object) \"asm\" : \"asm\", (string) the asm \"hex\" : \"hex\", (string) the hex \"reqSigs\" : n, (numeric) The required sigs \"type\" : \"pubkeyhash\", (string) The type, eg 'pubkeyhash' \"addresses\" : [ (json array of string) \"address\" (string) lbry address ,... ] } } ,... ], \"blockhash\" : \"hash\", (string) the block hash \"confirmations\" : n, (numeric) The confirmations \"time\" : ttt, (numeric) The transaction time in seconds since epoch (Jan 1 1970 GMT) \"blocktime\" : ttt (numeric) The block time in seconds since epoch (Jan 1 1970 GMT) }" } }, "sendrawtransaction": { @@ -3010,7 +4195,7 @@ } }, "signrawtransaction": { - "summary": "Sign inputs for raw transaction (serialized, hex-encoded). The second optional argument (may be null) is an array of previous transaction outputs that this transaction depends on but may not yet be in the block chain. The third optional argument (may be null) is an array of base58-encoded private keys that, if given, will be the only keys used to sign the transaction.", + "summary": "DEPRECATED. Sign inputs for raw transaction (serialized, hex-encoded). The second optional argument (may be null) is an array of previous transaction outputs that this transaction depends on but may not yet be in the block chain. The third optional argument (may be null) is an array of base58-encoded private keys that, if given, will be the only keys used to sign the transaction.", "description": [ "", "> lbrycrd-cli signrawtransaction \"myhex\"", @@ -3029,9 +4214,9 @@ }, "prevtxs": { "type": "string", - "description": "An json array of previous dependent transaction outputs [ (json array of json objects, or 'null' if none provided) { \"txid\":\"id\", (string, required) The transaction id \"vout\":n, (numeric, required) The output number \"scriptPubKey\": \"hex\", (string, required) script key \"redeemScript\": \"hex\" (string, required for P2SH) redeem script } ,... ]" + "description": "An json array of previous dependent transaction outputs [ (json array of json objects, or 'null' if none provided) { \"txid\":\"id\", (string, required) The transaction id \"vout\":n, (numeric, required) The output number \"scriptPubKey\": \"hex\", (string, required) script key \"redeemScript\": \"hex\", (string, required for P2SH or P2WSH) redeem script \"amount\": value (numeric, required) The amount spent } ,... ]" }, - "privatekeys": { + "privkeys": { "type": "string", "description": "A json array of base58-encoded private keys for signing [ (json array of strings, or 'null' if none provided) \"privatekey\" (string) private key in base58-encoding ,... ]" }, @@ -3087,16 +4272,147 @@ } } }, + "signrawtransactionwithkey": { + "summary": "Sign inputs for raw transaction (serialized, hex-encoded). The second argument is an array of base58-encoded private keys that will be the only keys used to sign the transaction. The third optional argument (may be null) is an array of previous transaction outputs that this transaction depends on but may not yet be in the block chain.", + "description": [ + "", + "> lbrycrd-cli signrawtransactionwithkey \"myhex\"", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"signrawtransactionwithkey\", \"params\": [\"myhex\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "" + ], + "tags": [ + "Rawtransactions" + ], + "params": { + "type": "object", + "properties": { + "hexstring": { + "type": "string", + "description": "The transaction hex string" + }, + "privkeys": { + "type": "string", + "description": "A json array of base58-encoded private keys for signing [ (json array of strings) \"privatekey\" (string) private key in base58-encoding ,... ]" + }, + "prevtxs": { + "type": "string", + "description": "An json array of previous dependent transaction outputs [ (json array of json objects, or 'null' if none provided) { \"txid\":\"id\", (string, required) The transaction id \"vout\":n, (numeric, required) The output number \"scriptPubKey\": \"hex\", (string, required) script key \"redeemScript\": \"hex\", (string, required for P2SH or P2WSH) redeem script \"amount\": value (numeric, required) The amount spent } ,... ]" + }, + "sighashtype": { + "type": "string", + "description": "The signature hash type. Must be one of \"ALL\" \"NONE\" \"SINGLE\" \"ALL|ANYONECANPAY\" \"NONE|ANYONECANPAY\" \"SINGLE|ANYONECANPAY\"", + "default": "ALL" + } + }, + "required": [ + "hexstring", + "privkeys" + ] + }, + "result": { + "type": "object", + "properties": { + "hex": { + "type": "string", + "description": "The hex-encoded raw transaction with signature(s)" + }, + "complete": { + "type": "boolean", + "description": "If the transaction has a complete set of signatures" + }, + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "txid": { + "type": "string", + "description": "The hash of the referenced, previous transaction" + }, + "vout": { + "type": "number", + "description": "The index of the output to spent and used as input" + }, + "scriptSig": { + "type": "string", + "description": "The hex-encoded signature script" + }, + "sequence": { + "type": "number", + "description": "Script sequence number" + }, + "error": { + "type": "string", + "description": "Verification or signing error related to the input" + } + } + } + } + } + } + }, + "testmempoolaccept": { + "summary": "Returns if raw transaction (serialized, hex-encoded) would be accepted by mempool. This checks if the transaction violates the consensus or policy rules. See sendrawtransaction call.", + "description": [ + "", + "", + "Create a transaction", + "> lbrycrd-cli createrawtransaction \"[{\\\"txid\\\" : \\\"mytxid\\\",\\\"vout\\\":0}]\" \"{\\\"myaddress\\\":0.01}\"", + "Sign the transaction, and get back the hex", + "> lbrycrd-cli signrawtransaction \"myhex\"", + "", + "Test acceptance of the transaction (signed hex)", + "> lbrycrd-cli testmempoolaccept [\"signedhex\"]", + "", + "As a json rpc call", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"testmempoolaccept\", \"params\": [[\"signedhex\"]] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "" + ], + "tags": [ + "Rawtransactions" + ], + "params": { + "type": "object", + "properties": { + "allowhighfees": { + "type": "boolean", + "description": "Allow high fees", + "default": false + } + }, + "required": [] + }, + "result": { + "type": "array", + "items": { + "type": "object", + "properties": { + "txid": { + "type": "string", + "description": "The transaction hash in hex" + }, + "allowed": { + "type": "boolean", + "description": "If the mempool allows this tx to be inserted" + }, + "reject-reason": { + "type": "string", + "description": "Rejection string (only present when 'allowed' is false)" + } + } + } + } + }, "createmultisig": { "summary": "Creates a multi-signature address with n signature of m keys required. It returns a json object with the address and redeemScript.", "description": [ "", "", - "Create a multisig address from 2 addresses", - "> lbrycrd-cli createmultisig 2 \"[\\\"16sSauSf5pF2UkUwvKGq4qjNRzBZYqgEL5\\\",\\\"171sgjn4YtPu27adkKGrdDwzRTxnRkBfKV\\\"]\"", + "Create a multisig address from 2 public keys", + "> lbrycrd-cli createmultisig 2 \"[\\\"03789ed0bb717d88f7d321a368d905e7430207ebbd82bd342cf11ae157a7ace5fd\\\",\\\"03dbc6764b8884a92e871274b87583e6d5c2a58819473e17e107ef3f6aa5a61626\\\"]\"", "", "As a json rpc call", - "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"createmultisig\", \"params\": [2, \"[\\\"16sSauSf5pF2UkUwvKGq4qjNRzBZYqgEL5\\\",\\\"171sgjn4YtPu27adkKGrdDwzRTxnRkBfKV\\\"]\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"createmultisig\", \"params\": [2, \"[\\\"03789ed0bb717d88f7d321a368d905e7430207ebbd82bd342cf11ae157a7ace5fd\\\",\\\"03dbc6764b8884a92e871274b87583e6d5c2a58819473e17e107ef3f6aa5a61626\\\"]\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", "" ], "tags": [ @@ -3107,11 +4423,15 @@ "properties": { "nrequired": { "type": "number", - "description": "The number of required signatures out of the n keys or addresses." + "description": "The number of required signatures out of the n keys." }, "keys": { "type": "string", - "description": "A json array of keys which are lbrycrd addresses or hex-encoded public keys [ \"key\" (string) lbrycrd address or hex-encoded public key ,... ]" + "description": "A json array of hex-encoded public keys [ \"key\" (string) The hex-encoded public key ,... ]" + }, + "address_type": { + "type": "string", + "description": "The address type to use. Options are \"legacy\", \"p2sh-segwit\", and \"bech32\". Default is legacy." } }, "required": [ @@ -3133,62 +4453,8 @@ } } }, - "estimatefee": { - "summary": "Estimates the approximate fee per kilobyte needed for a transaction to begin confirmation within nblocks blocks.", - "description": [ - "", - "> lbrycrd-cli estimatefee 6", - "" - ], - "tags": [ - "Util" - ], - "params": { - "type": "object", - "properties": { - "nblocks": { - "type": "number", - "description": "" - } - }, - "required": [ - "nblocks" - ] - }, - "result": { - "type": "number", - "description": "estimated fee-per-kilobyte A negative value is returned if not enough transactions and blocks have been observed to make an estimate." - } - }, - "estimatepriority": { - "summary": "Estimates the approximate priority a zero-fee transaction needs to begin confirmation within nblocks blocks.", - "description": [ - "", - "> lbrycrd-cli estimatepriority 6", - "" - ], - "tags": [ - "Util" - ], - "params": { - "type": "object", - "properties": { - "nblocks": { - "type": "number", - "description": "" - } - }, - "required": [ - "nblocks" - ] - }, - "result": { - "type": "number", - "description": "estimated priority A negative value is returned if not enough transactions and blocks have been observed to make an estimate." - } - }, "estimatesmartfee": { - "summary": "WARNING: This interface is unstable and may disappear or change! Estimates the approximate fee per kilobyte needed for a transaction to begin confirmation within nblocks blocks if possible and return the number of blocks for which the estimate is valid.", + "summary": "Estimates the approximate fee per kilobyte needed for a transaction to begin confirmation within conf_target blocks if possible and return the number of blocks for which the estimate is valid. Uses virtual transaction size as defined in BIP 141 (witness data is discounted).", "description": [ "", "> lbrycrd-cli estimatesmartfee 6", @@ -3200,13 +4466,18 @@ "params": { "type": "object", "properties": { - "nblocks": { + "conf_target": { "type": "number", - "description": "" + "description": "Confirmation target in blocks (1 - 1008)" + }, + "estimate_mode": { + "type": "string", + "description": "The fee estimate mode. Whether to return a more conservative estimate which also satisfies a longer history. A conservative estimate potentially returns a higher feerate and is more likely to be sufficient for the desired target, but is not as responsive to short term drops in the prevailing fee market. Must be one of: \"UNSET\" (defaults to CONSERVATIVE) \"ECONOMICAL\" \"CONSERVATIVE\"", + "default": "CONSERVATIVE" } }, "required": [ - "nblocks" + "conf_target" ] }, "result": { @@ -3214,7 +4485,7 @@ "properties": { "feerate": { "type": "number", - "description": "estimate fee-per-kilobyte (in BTC)" + "description": "estimate fee rate in LBC/kB" }, "blocks": { "type": "number", @@ -3223,11 +4494,19 @@ } } }, - "estimatesmartpriority": { - "summary": "WARNING: This interface is unstable and may disappear or change! Estimates the approximate priority a zero-fee transaction needs to begin confirmation within nblocks blocks if possible and return the number of blocks for which the estimate is valid.", + "signmessagewithprivkey": { + "summary": "Sign a message with the private key of an address", "description": [ "", - "> lbrycrd-cli estimatesmartpriority 6", + "", + "Create the signature", + "> lbrycrd-cli signmessagewithprivkey \"privkey\" \"my message\"", + "", + "Verify the signature", + "> lbrycrd-cli verifymessage \"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"signature\" \"my message\"", + "", + "As json rpc", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"signmessagewithprivkey\", \"params\": [\"privkey\", \"my message\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", "" ], "tags": [ @@ -3236,31 +4515,27 @@ "params": { "type": "object", "properties": { - "nblocks": { - "type": "number", - "description": "" + "privkey": { + "type": "string", + "description": "The private key to sign the message with." + }, + "message": { + "type": "string", + "description": "The message to create a signature of." } }, "required": [ - "nblocks" + "privkey", + "message" ] }, "result": { - "type": "object", - "properties": { - "priority": { - "type": "number", - "description": "estimated priority" - }, - "blocks": { - "type": "number", - "description": "block number where estimate was found" - } - } + "type": "string", + "description": "The signature of the message encoded in base 64" } }, "validateaddress": { - "summary": "Return information about the given lbrycrd address.", + "summary": "Return information about the given lbry address. DEPRECATION WARNING: Parts of this command have been deprecated and moved to getaddressinfo. Clients must transition to using getaddressinfo to access this information before upgrading to v0.18. The following deprecated fields have moved to getaddressinfo and will only be shown here with -deprecatedrpc=validateaddress: ismine, iswatchonly, script, hex, pubkeys, sigsrequired, pubkey, addresses, embedded, iscompressed, account, timestamp, hdkeypath, kdmasterkeyid.", "description": [ "", "> lbrycrd-cli validateaddress \"1PSSGeFHDnKNxiEyFrD1wcEaHr9hrQDDWc\"", @@ -3273,13 +4548,13 @@ "params": { "type": "object", "properties": { - "lbrycrdaddress": { + "address": { "type": "string", - "description": "The lbrycrd address to validate" + "description": "The lbry address to validate" } }, "required": [ - "lbrycrdaddress" + "address" ] }, "result": { @@ -3291,35 +4566,27 @@ }, "address": { "type": "string", - "description": "The lbrycrd address validated" + "description": "The lbry address validated" }, "scriptPubKey": { "type": "string", "description": "The hex encoded scriptPubKey generated by the address" }, - "ismine": { - "type": "boolean", - "description": "If the address is yours or not" - }, - "iswatchonly": { - "type": "boolean", - "description": "If the address is watchonly" - }, "isscript": { "type": "boolean", "description": "If the key is a script" }, - "pubkey": { - "type": "string", - "description": "The hex value of the raw public key" - }, - "iscompressed": { + "iswitness": { "type": "boolean", - "description": "If the address is compressed" + "description": "If the address is a witness address" }, - "account": { + "witness_version": { + "type": "number", + "description": "The version number of the witness program" + }, + "witness_program": { "type": "string", - "description": "DEPRECATED. The account associated with the address, \"\" is the default account" + "description": "The hex value of the witness program" } } } @@ -3333,13 +4600,13 @@ "> lbrycrd-cli walletpassphrase \"mypassphrase\" 30", "", "Create the signature", - "> lbrycrd-cli signmessage \"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"my message\"", + "> lbrycrd-cli signmessage \"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"my message\"", "", "Verify the signature", - "> lbrycrd-cli verifymessage \"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" \"signature\" \"my message\"", + "> lbrycrd-cli verifymessage \"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" \"signature\" \"my message\"", "", "As json rpc", - "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"verifymessage\", \"params\": [\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\", \"signature\", \"my message\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"verifymessage\", \"params\": [\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\", \"signature\", \"my message\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", "" ], "tags": [ @@ -3348,9 +4615,9 @@ "params": { "type": "object", "properties": { - "lbrycrdaddress": { + "address": { "type": "string", - "description": "The lbrycrd address to use for the signature." + "description": "The lbry address to use for the signature." }, "signature": { "type": "string", @@ -3362,7 +4629,7 @@ } }, "required": [ - "lbrycrdaddress", + "address", "signature", "message" ] @@ -3373,7 +4640,7 @@ } }, "abandontransaction": { - "summary": "Mark in-wallet transaction as abandoned This will mark this transaction and all its in-wallet descendants as abandoned which will allow for their inputs to be respent. It can be used to replace \"stuck\" or evicted transactions. It only works on transactions which are not included in a block and are not currently in the mempool. It has no effect on transactions which are already conflicted or abandoned.", + "summary": "Mark in-wallet transaction as abandoned This will mark this transaction and all its in-wallet descendants as abandoned which will allow for their inputs to be respent. It can be used to replace \"stuck\" or evicted transactions. It only works on transactions which are not included in a block and are not currently in the mempool. It has no effect on transactions which are already abandoned.", "description": [ "", "> lbrycrd-cli abandontransaction \"1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d\"", @@ -3396,8 +4663,32 @@ ] } }, + "abortrescan": { + "summary": "Stops current wallet rescan triggered by an RPC call, e.g. by an importprivkey call.", + "description": [ + "", + "", + "Import a private key", + "> lbrycrd-cli importprivkey \"mykey\"", + "", + "Abort the running wallet rescan", + "> lbrycrd-cli abortrescan ", + "", + "As a JSON-RPC call", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"abortrescan\", \"params\": [] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "" + ], + "tags": [ + "Wallet" + ], + "params": { + "type": "object", + "properties": {}, + "required": [] + } + }, "addmultisigaddress": { - "summary": "Add a nrequired-to-sign multisignature address to the wallet. Each key is a Bitcoin address or hex-encoded public key. If 'account' is specified (DEPRECATED), assign address to that account.", + "summary": "Add a nrequired-to-sign multisignature address to the wallet. Requires a new wallet backup. Each key is a Bitcoin address or hex-encoded public key. This functionality is only intended for use with non-watchonly addresses. See `importaddress` for watchonly p2sh address support. If 'label' is specified, assign address to that label.", "description": [ "", "", @@ -3418,23 +4709,36 @@ "type": "number", "description": "The number of required signatures out of the n keys or addresses." }, - "keysobject": { + "keys": { "type": "string", - "description": "A json array of lbrycrd addresses or hex-encoded public keys [ \"address\" (string) lbrycrd address or hex-encoded public key ..., ]" + "description": "A json array of bitcoin addresses or hex-encoded public keys [ \"address\" (string) bitcoin address or hex-encoded public key ..., ]" }, - "account": { + "label": { "type": "string", - "description": "DEPRECATED. An account to assign the addresses to." + "description": "A label to assign the addresses to." + }, + "address_type": { + "type": "string", + "description": "The address type to use. Options are \"legacy\", \"p2sh-segwit\", and \"bech32\". Default is set by -addresstype." } }, "required": [ "nrequired", - "keysobject" + "keys" ] }, "result": { - "type": "string", - "description": "A lbrycrd address associated with the keys." + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "The value of the new multisig address." + }, + "redeemScript": { + "type": "string", + "description": "The string value of the hex-encoded redemption script." + } + } } }, "backupwallet": { @@ -3461,8 +4765,112 @@ ] } }, + "bumpfee": { + "summary": "Bumps the fee of an opt-in-RBF transaction T, replacing it with a new transaction B. An opt-in RBF transaction with the given txid must be in the wallet. The command will pay the additional fee by decreasing (or perhaps removing) its change output. If the change output is not big enough to cover the increased fee, the command will currently fail instead of adding new inputs to compensate. (A future implementation could improve this.) The command will fail if the wallet or mempool contains a transaction that spends one of T's outputs. By default, the new fee will be calculated automatically using estimatesmartfee. The user can specify a confirmation target for estimatesmartfee. Alternatively, the user can specify totalFee, or use RPC settxfee to set a higher fee rate. At a minimum, the new fee rate must be high enough to pay an additional new relay fee (incrementalfee returned by getnetworkinfo) to enter the node's mempool.", + "description": [ + "", + "", + "Bump the fee, get the new transaction's txid", + "> lbrycrd-cli bumpfee ", + "" + ], + "tags": [ + "Wallet" + ], + "params": { + "type": "object", + "properties": { + "txid": { + "type": "string", + "description": "The txid to be bumped" + }, + "options": { + "type": "object", + "properties": { + "confTarget": { + "type": "number", + "description": "Confirmation target (in blocks)" + }, + "totalFee": { + "type": "number", + "description": "Total fee (NOT feerate) to pay, in satoshis." + }, + "replaceable": { + "type": "boolean", + "description": "Whether the new transaction should still be" + }, + "estimate_mode": { + "type": "string", + "description": "The fee estimate mode, must be one of:" + } + } + } + }, + "required": [ + "txid" + ] + }, + "result": { + "type": "object", + "properties": { + "txid": { + "type": "string", + "description": "The id of the new transaction" + }, + "origfee": { + "type": "number", + "description": "Fee of the replaced transaction" + }, + "fee": { + "type": "number", + "description": "Fee of the new transaction" + } + } + } + }, + "createwallet": { + "summary": "Creates and loads a new wallet.", + "description": [ + "", + "> lbrycrd-cli createwallet \"testwallet\"", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"createwallet\", \"params\": [\"testwallet\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "" + ], + "tags": [ + "Wallet" + ], + "params": { + "type": "object", + "properties": { + "wallet_name": { + "type": "string", + "description": "The name for the new wallet. If this is a path, the wallet will be created at the path location." + }, + "disable_private_keys": { + "type": "boolean", + "description": "Disable the possibility of private keys (only watchonlys are possible in this mode)." + } + }, + "required": [ + "wallet_name" + ] + }, + "result": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The wallet name if created successfully. If the wallet was created using a full path, the wallet_name will be the full path." + }, + "warning": { + "type": "string", + "description": "Warning message if wallet was not loaded cleanly." + } + } + } + }, "dumpprivkey": { - "summary": "Reveals the private key corresponding to 'lbrycrdaddress'. Then the importprivkey can be used with this output", + "summary": "Reveals the private key corresponding to 'address'. Then the importprivkey can be used with this output", "description": [ "", "> lbrycrd-cli dumpprivkey \"myaddress\"", @@ -3476,13 +4884,13 @@ "params": { "type": "object", "properties": { - "lbrycrdaddress": { + "address": { "type": "string", - "description": "The lbrycrd address for the private key" + "description": "The bitcoin address for the private key" } }, "required": [ - "lbrycrdaddress" + "address" ] }, "result": { @@ -3491,7 +4899,7 @@ } }, "dumpwallet": { - "summary": "Dumps all wallet keys in a human-readable format.", + "summary": "Dumps all wallet keys in a human-readable format to a server-side file. This does not allow overwriting existing files. Imported scripts are included in the dumpfile, but corresponding BIP173 addresses, etc. may not be added automatically by importwallet. Note that if your wallet contains keys which are not derived from your HD seed (e.g. imported keys), these are not covered by only backing up the seed itself, and must be backed up too (e.g. ensure you back up the whole dumpfile).", "description": [ "", "> lbrycrd-cli dumpwallet \"test\"", @@ -3506,7 +4914,7 @@ "properties": { "filename": { "type": "string", - "description": "The filename" + "description": "The filename with path (either absolute or relative to bitcoind)" } }, "required": [ @@ -3515,18 +4923,18 @@ } }, "encryptwallet": { - "summary": "Encrypts the wallet with 'passphrase'. This is for first time encryption. After this, any calls that interact with private keys such as sending or signing will require the passphrase to be set prior the making these calls. Use the walletpassphrase call for this, and then walletlock call. If the wallet is already encrypted, use the walletpassphrasechange call. Note that this will shutdown the server.", + "summary": "Encrypts the wallet with 'passphrase'. This is for first time encryption. After this, any calls that interact with private keys such as sending or signing will require the passphrase to be set prior the making these calls. Use the walletpassphrase call for this, and then walletlock call. If the wallet is already encrypted, use the walletpassphrasechange call.", "description": [ "", "", - "Encrypt you wallet", + "Encrypt your wallet", "> lbrycrd-cli encryptwallet \"my pass phrase\"", "", - "Now set the passphrase to use the wallet, such as for signing or sending LBC", + "Now set the passphrase to use the wallet, such as for signing or sending bitcoin", "> lbrycrd-cli walletpassphrase \"my pass phrase\"", "", - "Now we can so something like sign", - "> lbrycrd-cli signmessage \"lbrycrdaddress\" \"test message\"", + "Now we can do something like sign", + "> lbrycrd-cli signmessage \"address\" \"test message\"", "", "Now lock the wallet again by removing the passphrase", "> lbrycrd-cli walletlock ", @@ -3555,8 +4963,8 @@ "summary": "DEPRECATED. Returns the account associated with the given address.", "description": [ "", - "> lbrycrd-cli getaccount \"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\"", - "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"getaccount\", \"params\": [\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "> lbrycrd-cli getaccount \"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\"", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"getaccount\", \"params\": [\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", "" ], "tags": [ @@ -3565,13 +4973,13 @@ "params": { "type": "object", "properties": { - "lbrycrdaddress": { + "address": { "type": "string", - "description": "The lbrycrd address for account lookup." + "description": "The bitcoin address for account lookup." } }, "required": [ - "lbrycrdaddress" + "address" ] }, "result": { @@ -3597,7 +5005,7 @@ "properties": { "account": { "type": "string", - "description": "The account name for the address. It can also be set to the empty string \"\" to represent the default account. The account does not need to exist, it will be created and a new address created if there is no account by the given name." + "description": "The account for the address. It can also be set to the empty string \"\" to represent the default account. The account does not need to exist, it will be created and a new address created if there is no account by the given name." } }, "required": [ @@ -3606,7 +5014,7 @@ }, "result": { "type": "string", - "description": "The account lbrycrd address" + "description": "The account bitcoin address" } }, "getaddressesbyaccount": { @@ -3637,23 +5045,85 @@ "items": { "type": "object", "properties": { - "lbrycrdaddress": { + "address": { "type": "string", - "description": "a lbrycrd address associated with the given account" + "description": "a bitcoin address associated with the given account" } } } } }, + "getaddressesbylabel": { + "summary": "Returns the list of addresses assigned the specified label.", + "description": [ + "", + "> lbrycrd-cli getaddressesbylabel \"tabby\"", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"getaddressesbylabel\", \"params\": [\"tabby\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "" + ], + "tags": [ + "Wallet" + ], + "params": { + "type": "object", + "properties": { + "label": { + "type": "string", + "description": "The label." + } + }, + "required": [ + "label" + ] + }, + "result": { + "type": "object", + "properties": { + "address": { + "type": "object", + "properties": { + "purpose": { + "type": "string", + "description": "Purpose of address (\"send\" for sending address, \"receive\" for receiving address)" + } + } + } + } + } + }, + "getaddressinfo": { + "summary": "Return information about the given bitcoin address. Some information requires the address to be in the wallet.", + "description": [ + "", + "> lbrycrd-cli getaddressinfo \"1PSSGeFHDnKNxiEyFrD1wcEaHr9hrQDDWc\"", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"getaddressinfo\", \"params\": [\"1PSSGeFHDnKNxiEyFrD1wcEaHr9hrQDDWc\"] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "" + ], + "tags": [ + "Wallet" + ], + "params": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "The bitcoin address to get the information of." + } + }, + "required": [ + "address" + ] + } + }, "getbalance": { - "summary": "If account is not specified, returns the server's total available balance. If account is specified (DEPRECATED), returns the balance in the account. Note that the account \"\" is not the same as leaving the parameter out. The server total may be different to the balance in the default \"\" account.", + "summary": "If account is not specified, returns the server's total available balance. The available balance is what the wallet considers currently spendable, and is thus affected by options which limit spendability such as -spendzeroconfchange. If account is specified (DEPRECATED), returns the balance in the account. Note that the account \"\" is not the same as leaving the parameter out. The server total may be different to the balance in the default \"\" account.", "description": [ "", "", - "The total amount in the wallet", + "The total amount in the wallet with 1 or more confirmations", "> lbrycrd-cli getbalance ", "", - "The total amount in the wallet at least 5 blocks confirmed", + "The total amount in the wallet at least 6 blocks confirmed", "> lbrycrd-cli getbalance \"*\" 6", "", "As a json rpc call", @@ -3668,16 +5138,19 @@ "properties": { "account": { "type": "string", - "description": "DEPRECATED. The selected account, or \"*\" for entire wallet. It may be the default account using \"\"." + "description": "DEPRECATED. This argument will be removed in V0." + }, + "To use this deprecated argument, start bitcoind with -deprecatedrpc=accounts. The account string may be given as a\n specific account name to find the balance associated with wallet keys in\n a named account, or as the empty string": { + "type": null, + "description": "to find the balance associated with wallet keys not in any named account, or as \"*\" to find the balance associated with all wallet keys regardless of account. When this option is specified, it calculates the balance in a different way than when it is not specified, and which can count spends twice when there are conflicting pending transactions (such as those created by the bumpfee command), temporarily resulting in low or even negative balances. In general, account balance calculation is not considered reliable and has resulted in confusing outcomes, so it is recommended to avoid passing this argument." }, "minconf": { "type": "number", - "description": "Only include transactions confirmed at least this many times.", - "default": 1 + "description": "Only include transactions confirmed at least this many times. The default is 1 if an account is provided or 0 if no account is provided" }, - "includeWatchonly": { + "include_watchonly": { "type": "boolean", - "description": "Also include balance in watchonly addresses (see 'importaddress')", + "description": "Also include balance in watch-only addresses (see 'importaddress')", "default": false } }, @@ -3689,7 +5162,7 @@ } }, "getnewaddress": { - "summary": "Returns a new Bitcoin address for receiving payments. If 'account' is specified (DEPRECATED), it is added to the address book so payments received with the address will be credited to 'account'.", + "summary": "Returns a new Bitcoin address for receiving payments. If 'label' is specified, it is added to the address book so payments received with the address will be associated with 'label'.", "description": [ "", "> lbrycrd-cli getnewaddress ", @@ -3702,16 +5175,20 @@ "params": { "type": "object", "properties": { - "account": { + "label": { "type": "string", - "description": "DEPRECATED. The account name for the address to be linked to. If not provided, the default account \"\" is used. It can also be set to the empty string \"\" to represent the default account. The account does not need to exist, it will be created if there is no account by the given name." + "description": "The label name for the address to be linked to. If not provided, the default label \"\" is used. It can also be set to the empty string \"\" to represent the default label. The label does not need to exist, it will be created if there is no label by the given name." + }, + "address_type": { + "type": "string", + "description": "The address type to use. Options are \"legacy\", \"p2sh-segwit\", and \"bech32\". Default is set by -addresstype." } }, "required": [] }, "result": { "type": "string", - "description": "The new lbrycrd address" + "description": "The new bitcoin address" } }, "getrawchangeaddress": { @@ -3727,7 +5204,12 @@ ], "params": { "type": "object", - "properties": {}, + "properties": { + "address_type": { + "type": "string", + "description": "The address type to use. Options are \"legacy\", \"p2sh-segwit\", and \"bech32\". Default is set by -changetype." + } + }, "required": [] }, "result": { @@ -3735,65 +5217,22 @@ "description": "The address" } }, - "getreceivedbyaccount": { - "summary": "DEPRECATED. Returns the total amount received by addresses with in transactions with at least [minconf] confirmations.", - "description": [ - "", - "", - "Amount received by the default account with at least 1 confirmation", - "> lbrycrd-cli getreceivedbyaccount \"\"", - "", - "Amount received at the tabby account including unconfirmed amounts with zero confirmations", - "> lbrycrd-cli getreceivedbyaccount \"tabby\" 0", - "", - "The amount with at least 6 confirmation, very safe", - "> lbrycrd-cli getreceivedbyaccount \"tabby\" 6", - "", - "As a json rpc call", - "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"getreceivedbyaccount\", \"params\": [\"tabby\", 6] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", - "" - ], - "tags": [ - "Wallet" - ], - "params": { - "type": "object", - "properties": { - "account": { - "type": "string", - "description": "The selected account, may be the default account using \"\"." - }, - "minconf": { - "type": "number", - "description": "Only include transactions confirmed at least this many times.", - "default": 1 - } - }, - "required": [ - "account" - ] - }, - "result": { - "type": "number", - "description": "The total amount in LBC received for this account." - } - }, "getreceivedbyaddress": { - "summary": "Returns the total amount received by the given lbrycrdaddress in transactions with at least minconf confirmations.", + "summary": "Returns the total amount received by the given address in transactions with at least minconf confirmations.", "description": [ "", "", "The amount from transactions with at least 1 confirmation", - "> lbrycrd-cli getreceivedbyaddress \"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\"", + "> lbrycrd-cli getreceivedbyaddress \"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\"", "", "The amount including unconfirmed transactions, zero confirmations", - "> lbrycrd-cli getreceivedbyaddress \"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" 0", + "> lbrycrd-cli getreceivedbyaddress \"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" 0", "", - "The amount with at least 6 confirmation, very safe", - "> lbrycrd-cli getreceivedbyaddress \"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\" 6", + "The amount with at least 6 confirmations", + "> lbrycrd-cli getreceivedbyaddress \"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\" 6", "", "As a json rpc call", - "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"getreceivedbyaddress\", \"params\": [\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\", 6] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", + "> curl --user myusername --data-binary '{\"jsonrpc\": \"1.0\", \"id\":\"curltest\", \"method\": \"getreceivedbyaddress\", \"params\": [\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\", 6] }' -H 'content-type: text/plain;' http://127.0.0.1:9245/", "" ], "tags": [ @@ -3802,9 +5241,9 @@ "params": { "type": "object", "properties": { - "lbrycrdaddress": { + "address": { "type": "string", - "description": "The lbrycrd address for transactions." + "description": "The bitcoin address for transactions." }, "minconf": { "type": "number", @@ -3813,7 +5252,7 @@ } }, "required": [ - "lbrycrdaddress" + "address" ] }, "result": { @@ -3821,6 +5260,49 @@ "description": "The total amount in LBC received at this address." } }, + "getreceivedbylabel": { + "summary": "Returns the total amount received by addresses with