79 entry.
pushKV(
"confirmations", 0);
90 {
RPCResult::Type::STR,
"address",
true,
"The Bitcoin address (only if a well-defined address exists)"},
95 static std::vector<RPCResult>
DecodeTxDoc(
const std::string& txid_field_doc)
101 {
RPCResult::Type::NUM,
"vsize",
"The virtual transaction size (differs from size for witness transactions)"},
151 "Each key may only appear once, i.e. there can only be one 'data' output, and no address may be duplicated.\n"
152 "At least one output of either type must be specified.\n"
153 "For compatibility reasons, a dictionary, which holds the key-value pairs directly, is also\n"
154 " accepted as second parameter.",
170 "Allows this transaction to be replaced by a transaction with higher fees. If provided, it is an error if explicit sequence numbers are incompatible."},
191 std::map<COutPoint, Coin> coins;
195 for (
unsigned int i = 0; i < psbtx.
tx->vin.size(); ++i) {
197 const CTxIn& tx_in = psbtx.
tx->vin.at(i);
221 if (!coins.empty()) {
223 for (
unsigned int i = 0; i < psbtx.
tx->vin.size(); ++i) {
228 const CTxIn& tx_in = psbtx.
tx->vin.at(i);
239 for (
unsigned int i = 0; i < psbtx.
tx->vin.size(); ++i) {
248 SignPSBTInput(provider, psbtx, i, &txdata, sighash_type,
nullptr, finalize);
252 for (
unsigned int i = 0; i < psbtx.
tx->vout.size(); ++i) {
266 "By default, this call only returns a transaction if it is in the mempool. If -txindex is enabled\n"
267 "and no blockhash argument is passed, it will return the transaction if it is in the mempool or any block.\n"
268 "If a blockhash argument is passed, it will return the transaction if\n"
269 "the specified block is available and the transaction is in that block.\n\n"
270 "Hint: Use gettransaction for wallet transactions.\n\n"
272 "If verbosity is 0 or omitted, returns the serialized transaction as a hex-encoded string.\n"
273 "If verbosity is 1, returns a JSON Object with information about the transaction.\n"
274 "If verbosity is 2, returns a JSON Object with information about the transaction, including fee and prevout information.",
282 RPCResult{
"if verbosity is not set or set to 0",
287 Cat<std::vector<RPCResult>>(
289 {
RPCResult::Type::BOOL,
"in_active_chain",
true,
"Whether specified block is in the active chain or not (only present with explicit \"blockhash\" argument)"},
296 DecodeTxDoc(
"The transaction id (same as provided)")),
308 {
RPCResult::Type::OBJ,
"prevout",
true,
"The previous output, omitted if block undo data is not available",
323 +
HelpExampleCli(
"getrawtransaction",
"\"mytxid\" 0 \"myblockhash\"")
324 +
HelpExampleCli(
"getrawtransaction",
"\"mytxid\" 1 \"myblockhash\"")
325 +
HelpExampleCli(
"getrawtransaction",
"\"mytxid\" 2 \"myblockhash\"")
342 if (!request.params[1].isNull()) {
343 if (request.params[1].isBool()) {
344 verbosity = request.params[1].get_bool();
346 verbosity = request.params[1].getInt<
int>();
350 if (!request.params[2].isNull()) {
360 bool f_txindex_ready =
false;
362 f_txindex_ready =
g_txindex->BlockUntilSyncedToCurrentChain();
371 if (!block_has_data) {
374 errmsg =
"No such transaction found in the provided block";
376 errmsg =
"No such mempool transaction. Use -txindex or provide a block hash to enable blockchain transaction queries";
377 }
else if (!f_txindex_ready) {
378 errmsg =
"No such mempool transaction. Blockchain transactions are still in the process of being indexed";
380 errmsg =
"No such mempool or blockchain transaction";
385 if (verbosity <= 0) {
395 if (request.params[2].isNull()) {
399 if (verbosity == 1) {
415 if (it != block.
vtx.end()) {
417 undoTX = &blockUndo.
vtxundo.at(it - block.
vtx.begin() - 1);
428 "\nCreate a transaction spending the given inputs and creating new outputs.\n"
429 "Outputs can be addresses or data.\n"
430 "Returns hex-encoded raw transaction.\n"
431 "Note that the transaction's inputs are not signed, and\n"
432 "it is not stored in the wallet or transmitted to the network.\n",
438 HelpExampleCli(
"createrawtransaction",
"\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\" \"[{\\\"address\\\":0.01}]\"")
439 +
HelpExampleCli(
"createrawtransaction",
"\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\" \"[{\\\"data\\\":\\\"00010203\\\"}]\"")
440 +
HelpExampleRpc(
"createrawtransaction",
"\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\", \"[{\\\"address\\\":0.01}]\"")
441 +
HelpExampleRpc(
"createrawtransaction",
"\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\", \"[{\\\"data\\\":\\\"00010203\\\"}]\"")
445 std::optional<bool> rbf;
446 if (!request.params[3].isNull()) {
459 "Return a JSON object representing the serialized, hex-encoded transaction.",
463 "If iswitness is not present, heuristic tests will be used in decoding.\n"
464 "If true, only witness deserialization will be tried.\n"
465 "If false, only non-witness deserialization will be tried.\n"
466 "This boolean should reflect whether the transaction has inputs\n"
467 "(e.g. fully valid, or on-chain transactions), if known by the caller."
482 bool try_witness = request.params[1].isNull() ? true : request.params[1].get_bool();
483 bool try_no_witness = request.params[1].isNull() ? true : !request.params[1].get_bool();
485 if (!
DecodeHexTx(mtx, request.params[0].get_str(), try_no_witness, try_witness)) {
501 "\nDecode a hex-encoded script.\n",
511 {
RPCResult::Type::STR,
"address",
true,
"The Bitcoin address (only if a well-defined address exists)"},
513 "address of P2SH script wrapping this redeem script (not returned for types that should not be wrapped)"},
515 "Result of a witness script public key wrapping this redeem script (not returned for types that should not be wrapped)",
519 {
RPCResult::Type::STR,
"type",
"The type of the script public key (e.g. witness_v0_keyhash or witness_v0_scripthash)"},
520 {
RPCResult::Type::STR,
"address",
true,
"The Bitcoin address (only if a well-defined address exists)"},
522 {
RPCResult::Type::STR,
"p2sh-segwit",
"address of the P2SH script wrapping this witness redeem script"},
534 if (request.params[0].get_str().size() > 0){
535 std::vector<unsigned char> scriptData(
ParseHexV(request.params[0],
"argument"));
536 script =
CScript(scriptData.begin(), scriptData.end());
542 std::vector<std::vector<unsigned char>> solutions_data;
545 const bool can_wrap{[&] {
546 switch (which_type) {
579 const bool can_wrap_P2WSH{[&] {
580 switch (which_type) {
585 for (
const auto& solution : solutions_data) {
606 if (can_wrap_P2WSH) {
633 "\nCombine multiple partially signed transactions into one transaction.\n"
634 "The combined transaction may be another partially signed transaction or a \n"
635 "fully signed transaction.",
647 HelpExampleCli(
"combinerawtransaction", R
"('["myhex1", "myhex2", "myhex3"]')")
653 std::vector<CMutableTransaction> txVariants(txs.
size());
655 for (
unsigned int idx = 0; idx < txs.
size(); idx++) {
656 if (!
DecodeHexTx(txVariants[idx], txs[idx].get_str())) {
661 if (txVariants.empty()) {
681 for (
const CTxIn& txin : mergedTx.
vin) {
692 for (
unsigned int i = 0; i < mergedTx.
vin.size(); i++) {
702 if (txv.vin.size() > i) {
718 return RPCHelpMan{
"signrawtransactionwithkey",
719 "\nSign inputs for raw transaction (serialized, hex-encoded).\n"
720 "The second argument is an array of base58-encoded private\n"
721 "keys that will be the only keys used to sign the transaction.\n"
722 "The third optional argument (may be null) is an array of previous transaction outputs that\n"
723 "this transaction depends on but may not yet be in the block chain.\n",
750 " \"ALL|ANYONECANPAY\"\n"
751 " \"NONE|ANYONECANPAY\"\n"
752 " \"SINGLE|ANYONECANPAY\"\n"
778 HelpExampleCli(
"signrawtransactionwithkey",
"\"myhex\" \"[\\\"key1\\\",\\\"key2\\\"]\"")
779 +
HelpExampleRpc(
"signrawtransactionwithkey",
"\"myhex\", \"[\\\"key1\\\",\\\"key2\\\"]\"")
784 if (!
DecodeHexTx(mtx, request.params[0].get_str())) {
790 for (
unsigned int idx = 0; idx < keys.
size(); ++idx) {
800 std::map<COutPoint, Coin> coins;
822 {
RPCResult::Type::OBJ,
"non_witness_utxo",
true,
"Decoded network transaction for non-witness UTXOs",
835 {
RPCResult::Type::STR,
"address",
true,
"The Bitcoin address (only if a well-defined address exists)"},
892 {
RPCResult::Type::OBJ,
"signature",
true,
"The signature for the pubkey and leaf hash combination",
971 {
RPCResult::Type::ARR,
"taproot_tree",
true,
"The tuples that make up the Taproot tree, in depth first search order",
1015 "Return a JSON object representing the serialized, base64-encoded partially signed Bitcoin transaction.",
1035 {
RPCResult::Type::NUM,
"psbt_version",
"The PSBT version number. Not to be confused with the unsigned transaction version"},
1072 result.
pushKV(
"tx", tx_univ);
1077 for (
auto& xpub : xpub_pair.second) {
1078 std::vector<unsigned char> ser_xpub;
1080 xpub.EncodeWithVersion(ser_xpub.data());
1089 result.
pushKV(
"global_xpubs", global_xpubs);
1098 this_prop.
pushKV(
"identifier",
HexStr(entry.identifier));
1099 this_prop.
pushKV(
"subtype", entry.subtype);
1104 result.
pushKV(
"proprietary", proprietary);
1108 for (
auto entry : psbtx.
unknown) {
1111 result.
pushKV(
"unknown", unknowns);
1115 bool have_all_utxos =
true;
1117 for (
unsigned int i = 0; i < psbtx.
inputs.size(); ++i) {
1121 bool have_a_utxo =
false;
1131 out.pushKV(
"scriptPubKey", o);
1142 in.
pushKV(
"non_witness_utxo", non_wit);
1148 total_in += txout.
nValue;
1151 have_all_utxos =
false;
1154 have_all_utxos =
false;
1163 in.
pushKV(
"partial_signatures", partial_sigs);
1175 in.
pushKV(
"redeem_script", r);
1180 in.
pushKV(
"witness_script", r);
1194 in.
pushKV(
"bip32_derivs", keypaths);
1202 in.
pushKV(
"final_scriptSig", scriptsig);
1209 in.
pushKV(
"final_scriptwitness", txinwitness);
1218 in.
pushKV(
"ripemd160_preimages", ripemd160_preimages);
1227 in.
pushKV(
"sha256_preimages", sha256_preimages);
1236 in.
pushKV(
"hash160_preimages", hash160_preimages);
1245 in.
pushKV(
"hash256_preimages", hash256_preimages);
1257 const auto& [xonly, leaf_hash] = pubkey_leaf;
1264 in.
pushKV(
"taproot_script_path_sigs", script_sigs);
1270 for (
const auto& [leaf, control_blocks] : input.
m_tap_scripts) {
1271 const auto& [script, leaf_ver] = leaf;
1274 script_info.
pushKV(
"leaf_ver", leaf_ver);
1276 for (
const auto& control_block : control_blocks) {
1279 script_info.
pushKV(
"control_blocks", control_blocks_univ);
1282 in.
pushKV(
"taproot_scripts", tap_scripts);
1289 const auto& [leaf_hashes, origin] = leaf_origin;
1295 for (
const auto& leaf_hash : leaf_hashes) {
1298 path_obj.
pushKV(
"leaf_hashes", leaf_hashes_arr);
1301 in.
pushKV(
"taproot_bip32_derivs", keypaths);
1319 this_prop.
pushKV(
"identifier",
HexStr(entry.identifier));
1320 this_prop.
pushKV(
"subtype", entry.subtype);
1325 in.
pushKV(
"proprietary", proprietary);
1329 if (input.
unknown.size() > 0) {
1331 for (
auto entry : input.
unknown) {
1334 in.
pushKV(
"unknown", unknowns);
1339 result.
pushKV(
"inputs", inputs);
1344 for (
unsigned int i = 0; i < psbtx.
outputs.size(); ++i) {
1351 out.pushKV(
"redeem_script", r);
1356 out.pushKV(
"witness_script", r);
1369 out.pushKV(
"bip32_derivs", keypaths);
1380 for (
const auto& [depth, leaf_ver, script] : output.
m_tap_tree) {
1382 elem.
pushKV(
"depth", (
int)depth);
1383 elem.
pushKV(
"leaf_ver", (
int)leaf_ver);
1387 out.pushKV(
"taproot_tree", tree);
1394 const auto& [leaf_hashes, origin] = leaf_origin;
1400 for (
const auto& leaf_hash : leaf_hashes) {
1403 path_obj.
pushKV(
"leaf_hashes", leaf_hashes_arr);
1406 out.pushKV(
"taproot_bip32_derivs", keypaths);
1414 this_prop.
pushKV(
"identifier",
HexStr(entry.identifier));
1415 this_prop.
pushKV(
"subtype", entry.subtype);
1420 out.pushKV(
"proprietary", proprietary);
1424 if (output.
unknown.size() > 0) {
1426 for (
auto entry : output.
unknown) {
1429 out.pushKV(
"unknown", unknowns);
1436 output_value += psbtx.
tx->vout[i].nValue;
1439 have_all_utxos =
false;
1442 result.
pushKV(
"outputs", outputs);
1443 if (have_all_utxos) {
1455 "\nCombine multiple partially signed Bitcoin transactions into one transaction.\n"
1456 "Implements the Combiner role.\n",
1468 HelpExampleCli(
"combinepsbt", R
"('["mybase64_1", "mybase64_2", "mybase64_3"]')")
1473 std::vector<PartiallySignedTransaction> psbtxs;
1478 for (
unsigned int i = 0; i < txs.
size(); ++i) {
1484 psbtxs.push_back(psbtx);
1494 ssTx << merged_psbt;
1503 "Finalize the inputs of a PSBT. If the transaction is fully signed, it will produce a\n"
1504 "network serialized transaction which can be broadcast with sendrawtransaction. Otherwise a PSBT will be\n"
1505 "created which has the final_scriptSig and final_scriptWitness fields filled for inputs that are complete.\n"
1506 "Implements the Finalizer and Extractor roles.\n",
1510 " extract and return the complete transaction in normal network serialization instead of the PSBT."},
1515 {
RPCResult::Type::STR,
"psbt",
true,
"The base64-encoded partially signed transaction if not extracted"},
1532 bool extract = request.params[1].isNull() || (!request.params[1].isNull() && request.params[1].get_bool());
1539 std::string result_str;
1543 result_str =
HexStr(ssTx);
1544 result.
pushKV(
"hex", result_str);
1548 result.
pushKV(
"psbt", result_str);
1550 result.
pushKV(
"complete", complete);
1560 "\nCreates a transaction in the Partially Signed Transaction format.\n"
1561 "Implements the Creator role.\n",
1567 HelpExampleCli(
"createpsbt",
"\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\" \"[{\\\"data\\\":\\\"00010203\\\"}]\"")
1572 std::optional<bool> rbf;
1573 if (!request.params[3].isNull()) {
1574 rbf = request.params[3].
get_bool();
1581 for (
unsigned int i = 0; i < rawTx.
vin.size(); ++i) {
1582 psbtx.
inputs.emplace_back();
1584 for (
unsigned int i = 0; i < rawTx.
vout.size(); ++i) {
1600 "\nConverts a network serialized transaction to a PSBT. This should be used only with createrawtransaction and fundrawtransaction\n"
1601 "createpsbt and walletcreatefundedpsbt should be used for new applications.\n",
1605 " will continue. If false, RPC will fail if any signatures are present."},
1607 "If iswitness is not present, heuristic tests will be used in decoding.\n"
1608 "If true, only witness deserialization will be tried.\n"
1609 "If false, only non-witness deserialization will be tried.\n"
1610 "This boolean should reflect whether the transaction has inputs\n"
1611 "(e.g. fully valid, or on-chain transactions), if known by the caller."
1618 "\nCreate a transaction\n"
1619 +
HelpExampleCli(
"createrawtransaction",
"\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\" \"[{\\\"data\\\":\\\"00010203\\\"}]\"") +
1620 "\nConvert the transaction to a PSBT\n"
1627 bool permitsigdata = request.params[1].isNull() ? false : request.params[1].get_bool();
1628 bool witness_specified = !request.params[2].isNull();
1629 bool iswitness = witness_specified ? request.params[2].get_bool() :
false;
1630 const bool try_witness = witness_specified ? iswitness :
true;
1631 const bool try_no_witness = witness_specified ? !iswitness :
true;
1632 if (!
DecodeHexTx(tx, request.params[0].get_str(), try_no_witness, try_witness)) {
1648 for (
unsigned int i = 0; i < tx.
vin.size(); ++i) {
1649 psbtx.
inputs.emplace_back();
1651 for (
unsigned int i = 0; i < tx.
vout.size(); ++i) {
1667 "\nUpdates all segwit inputs and outputs in a PSBT with data from output descriptors, the UTXO set, txindex, or the mempool.\n",
1679 RPCResult::Type::STR,
"",
"The base64-encoded partially signed transaction with inputs updated"
1688 if (!request.params[1].isNull()) {
1689 auto descs = request.params[1].get_array();
1690 for (
size_t i = 0; i < descs.size(); ++i) {
1697 request.params[0].get_str(),
1713 "\nJoins multiple distinct PSBTs with different inputs and outputs into one PSBT with inputs and outputs from all of the PSBTs\n"
1714 "No input in any of the PSBTs can be in more than one of the PSBTs.\n",
1730 std::vector<PartiallySignedTransaction> psbtxs;
1733 if (txs.
size() <= 1) {
1737 uint32_t best_version = 1;
1738 uint32_t best_locktime = 0xffffffff;
1739 for (
unsigned int i = 0; i < txs.
size(); ++i) {
1745 psbtxs.push_back(psbtx);
1747 if (
static_cast<uint32_t
>(psbtx.
tx->nVersion) > best_version) {
1748 best_version =
static_cast<uint32_t
>(psbtx.
tx->nVersion);
1751 if (psbtx.
tx->nLockTime < best_locktime) {
1752 best_locktime = psbtx.
tx->nLockTime;
1759 merged_psbt.
tx->nVersion =
static_cast<int32_t
>(best_version);
1760 merged_psbt.
tx->nLockTime = best_locktime;
1763 for (
auto& psbt : psbtxs) {
1764 for (
unsigned int i = 0; i < psbt.tx->vin.size(); ++i) {
1765 if (!merged_psbt.
AddInput(psbt.tx->vin[i], psbt.inputs[i])) {
1769 for (
unsigned int i = 0; i < psbt.tx->vout.size(); ++i) {
1770 merged_psbt.
AddOutput(psbt.tx->vout[i], psbt.outputs[i]);
1772 for (
auto& xpub_pair : psbt.m_xpubs) {
1773 if (merged_psbt.
m_xpubs.count(xpub_pair.first) == 0) {
1774 merged_psbt.
m_xpubs[xpub_pair.first] = xpub_pair.second;
1776 merged_psbt.
m_xpubs[xpub_pair.first].insert(xpub_pair.second.begin(), xpub_pair.second.end());
1779 merged_psbt.
unknown.insert(psbt.unknown.begin(), psbt.unknown.end());
1783 std::vector<int> input_indices(merged_psbt.
inputs.size());
1784 std::iota(input_indices.begin(), input_indices.end(), 0);
1785 std::vector<int> output_indices(merged_psbt.
outputs.size());
1786 std::iota(output_indices.begin(), output_indices.end(), 0);
1794 shuffled_psbt.
tx->nVersion = merged_psbt.
tx->nVersion;
1795 shuffled_psbt.
tx->nLockTime = merged_psbt.
tx->nLockTime;
1796 for (
int i : input_indices) {
1799 for (
int i : output_indices) {
1805 ssTx << shuffled_psbt;
1814 "\nAnalyzes and provides information about the current status of a PSBT and its inputs\n",
1827 {
RPCResult::Type::OBJ,
"missing",
true,
"Things that are missing that are required to complete this input",
1831 {
RPCResult::Type::STR_HEX,
"keyid",
"Public key ID, hash160 of the public key, of a public key whose BIP 32 derivation path is missing"},
1835 {
RPCResult::Type::STR_HEX,
"keyid",
"Public key ID, hash160 of the public key, of a public key whose signature is missing"},
1840 {
RPCResult::Type::STR,
"next",
true,
"Role of the next person that this input needs to go to"},
1843 {
RPCResult::Type::NUM,
"estimated_vsize",
true,
"Estimated vsize of the final signed transaction"},
1844 {
RPCResult::Type::STR_AMOUNT,
"estimated_feerate",
true,
"Estimated feerate of the final signed transaction in " +
CURRENCY_UNIT +
"/kvB. Shown only if all UTXO slots in the PSBT have been filled"},
1845 {
RPCResult::Type::STR_AMOUNT,
"fee",
true,
"The transaction fee paid. Shown only if all UTXO slots in the PSBT have been filled"},
1866 for (
const auto& input : psbta.
inputs) {
1870 input_univ.
pushKV(
"has_utxo", input.has_utxo);
1871 input_univ.
pushKV(
"is_final", input.is_final);
1874 if (!input.missing_pubkeys.empty()) {
1876 for (
const CKeyID& pubkey : input.missing_pubkeys) {
1879 missing.
pushKV(
"pubkeys", missing_pubkeys_univ);
1881 if (!input.missing_redeem_script.IsNull()) {
1882 missing.
pushKV(
"redeemscript",
HexStr(input.missing_redeem_script));
1884 if (!input.missing_witness_script.IsNull()) {
1885 missing.
pushKV(
"witnessscript",
HexStr(input.missing_witness_script));
1887 if (!input.missing_sigs.empty()) {
1889 for (
const CKeyID& pubkey : input.missing_sigs) {
1892 missing.
pushKV(
"signatures", missing_sigs_univ);
1894 if (!missing.
getKeys().empty()) {
1895 input_univ.
pushKV(
"missing", missing);
1899 if (!inputs_result.
empty()) result.
pushKV(
"inputs", inputs_result);
1907 if (psbta.
fee != std::nullopt) {
1911 if (!psbta.
error.empty()) {
1923 "\nUpdate all segwit inputs in a PSBT with information from output descriptors, the UTXO set or the mempool. \n"
1924 "Then, sign the inputs we are able to with information from the output descriptors. ",
1934 {
"sighashtype",
RPCArg::Type::STR,
RPCArg::Default{
"DEFAULT for Taproot, ALL otherwise"},
"The signature hash type to sign with if not specified by the PSBT. Must be one of\n"
1939 " \"ALL|ANYONECANPAY\"\n"
1940 " \"NONE|ANYONECANPAY\"\n"
1941 " \"SINGLE|ANYONECANPAY\""},
1954 HelpExampleCli(
"descriptorprocesspsbt",
"\"psbt\" \"[\\\"descriptor1\\\", \\\"descriptor2\\\"]\"") +
1955 HelpExampleCli(
"descriptorprocesspsbt",
"\"psbt\" \"[{\\\"desc\\\":\\\"mydescriptor\\\", \\\"range\\\":21}]\"")
1962 auto descs = request.params[1].get_array();
1963 for (
size_t i = 0; i < descs.size(); ++i) {
1968 bool bip32derivs = request.params[3].isNull() ? true : request.params[3].get_bool();
1969 bool finalize = request.params[4].isNull() ? true : request.params[4].get_bool();
1972 request.params[0].get_str(),
1979 bool complete =
true;
1980 for (
const auto& input : psbtx.
inputs) {
1990 result.
pushKV(
"complete", complete);
2023 for (
const auto& c : commands) {
2024 t.appendCommand(c.name, &c);
CScript GetScriptForDestination(const CTxDestination &dest)
Generate a Bitcoin scriptPubKey for the given CTxDestination.
bool MoneyRange(const CAmount &nValue)
int64_t CAmount
Amount in satoshis (Can be negative)
std::string EncodeBase58Check(Span< const unsigned char > input)
Encode a byte span into a base58-encoded string, including checksum.
std::string WriteHDKeypath(const std::vector< uint32_t > &keypath, bool apostrophe)
Write HD keypaths as strings.
@ BLOCK_HAVE_DATA
full block available in blk*.dat
#define CHECK_NONFATAL(condition)
Identity function.
#define NONFATAL_UNREACHABLE()
NONFATAL_UNREACHABLE() is a macro that is used to mark unreachable code.
std::vector< CTransactionRef > vtx
The block chain is a tree shaped structure starting with the genesis block at the root,...
int64_t GetBlockTime() const
int nHeight
height of the entry in the chain. The genesis block has height 0
Undo information for a CBlock.
std::vector< CTxUndo > vtxundo
int Height() const
Return the maximal height in the chain.
bool Contains(const CBlockIndex *pindex) const
Efficiently check whether a block is present in this chain.
const CBlock & GenesisBlock() const
void SetBackend(CCoinsView &viewIn)
CCoinsView that adds a memory cache for transactions to another CCoinsView.
const Coin & AccessCoin(const COutPoint &output) const
Return a reference to Coin in the cache, or coinEmpty if not found.
Abstract view on the open txout dataset.
CCoinsView that brings transactions from a mempool into view.
An encapsulated private key.
bool IsValid() const
Check whether this private key is valid.
A reference to a CKey: the Hash160 of its serialized public key.
An encapsulated public key.
bool IsCompressed() const
Check whether this is a compressed public key.
Serialized script, used inside transaction inputs and outputs.
bool IsUnspendable() const
Returns whether the script is guaranteed to fail at execution, regardless of the initial stack.
bool HasValidOps() const
Check if the script contains valid OP_CODES.
bool GetOp(const_iterator &pc, opcodetype &opcodeRet, std::vector< unsigned char > &vchRet) const
A reference to a CScript: the Hash160 of its serialization.
The basic transaction that is broadcasted on the network and contained in blocks.
An input of a transaction.
CScriptWitness scriptWitness
Only serialized through CTransaction.
CTxMemPool stores valid-according-to-the-current-best-chain transactions that may be included in the ...
RecursiveMutex cs
This mutex needs to be locked when accessing mapTx or other members that are guarded by it.
An output of a transaction.
Undo information for a CTransaction.
Chainstate stores and provides an API to update our local knowledge of the current best chain.
CChain m_chain
The current chain of blockheaders we consult and build on.
node::BlockManager & m_blockman
Reference to a BlockManager instance which itself is shared across all Chainstate instances.
Provides an interface for creating and interacting with one or two chainstates: an IBD chainstate gen...
CChain & ActiveChain() const EXCLUSIVE_LOCKS_REQUIRED(GetMutex())
SnapshotCompletionResult MaybeCompleteSnapshotValidation() EXCLUSIVE_LOCKS_REQUIRED(const CBlockIndex *GetSnapshotBaseBlock() const EXCLUSIVE_LOCKS_REQUIRED(Chainstate ActiveChainstate)() const
Once the background validation chainstate has reached the height which is the base of the UTXO snapsh...
const CChainParams & GetParams() const
node::BlockManager m_blockman
A single BlockManager instance is shared across each constructed chainstate to avoid duplicating bloc...
CTxOut out
unspent transaction output
bool IsSpent() const
Either this coin never existed (see e.g.
Double ended buffer combining vector and stream-like interfaces.
Fillable signing provider that keeps keys in an address->secret map.
virtual bool AddKey(const CKey &key)
A signature creator for transactions.
A Span is an object that can refer to a contiguous sequence of objects.
void push_back(UniValue val)
const std::vector< std::string > & getKeys() const
const UniValue & get_array() const
void pushKV(std::string key, UniValue val)
bool IsNull() const
Test whether this is the 0 key (the result of default construction).
constexpr bool IsNull() const
std::string GetHex() const
bool ReadBlockFromDisk(CBlock &block, const FlatFilePos &pos) const
Functions for disk access for blocks.
CBlockIndex * LookupBlockIndex(const uint256 &hash) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
bool UndoReadFromDisk(CBlockUndo &blockundo, const CBlockIndex &index) const
std::string EncodeHexTx(const CTransaction &tx)
std::string SighashToStr(unsigned char sighash_type)
void TxToUniv(const CTransaction &tx, const uint256 &block_hash, UniValue &entry, bool include_hex=true, const CTxUndo *txundo=nullptr, TxVerbosity verbosity=TxVerbosity::SHOW_DETAILS)
TxVerbosity
Verbose level for block's transaction.
@ SHOW_DETAILS_AND_PREVOUT
The same as previous option with information about prevouts if available.
@ SHOW_DETAILS
Include TXID, inputs, outputs, and other common block's transaction information.
std::string ScriptToAsmStr(const CScript &script, const bool fAttemptSighashDecode=false)
Create the assembly string representation of a CScript object.
void ScriptToUniv(const CScript &script, UniValue &out, bool include_hex=true, bool include_address=false, const SigningProvider *provider=nullptr)
UniValue ValueFromAmount(const CAmount amount)
bool DecodeHexTx(CMutableTransaction &tx, const std::string &hex_tx, bool try_no_witness=false, bool try_witness=true)
static uint32_t ReadBE32(const unsigned char *ptr)
RecursiveMutex cs_main
Mutex to guard access to validation specific variables, such as reading or changing the chainstate.
const std::string CURRENCY_UNIT
uint160 Hash160(const T1 &in1)
Compute the 160-bit hash an object.
std::string EncodeDestination(const CTxDestination &dest)
CKey DecodeSecret(const std::string &str)
PSBTAnalysis AnalyzePSBT(PartiallySignedTransaction psbtx)
Provides helpful miscellaneous information about where a PSBT is in the signing workflow.
void FindCoins(const NodeContext &node, std::map< COutPoint, Coin > &coins)
Look up unspent output information.
CTransactionRef GetTransaction(const CBlockIndex *const block_index, const CTxMemPool *const mempool, const uint256 &hash, uint256 &hashBlock, const BlockManager &blockman)
Return transaction with a given hash.
static constexpr TransactionSerParams TX_WITH_WITNESS
std::shared_ptr< const CTransaction > CTransactionRef
bool DecodeBase64PSBT(PartiallySignedTransaction &psbt, const std::string &base64_tx, std::string &error)
Decode a base64ed PSBT into a PartiallySignedTransaction.
void UpdatePSBTOutput(const SigningProvider &provider, PartiallySignedTransaction &psbt, int index)
Updates a PSBTOutput with information from provider.
std::string PSBTRoleName(PSBTRole role)
bool FinalizeAndExtractPSBT(PartiallySignedTransaction &psbtx, CMutableTransaction &result)
Finalizes a PSBT if possible, and extracts it to a CMutableTransaction if it could be finalized.
void RemoveUnnecessaryTransactions(PartiallySignedTransaction &psbtx, const int &sighash_type)
Reduces the size of the PSBT by dropping unnecessary non_witness_utxos (i.e.
bool SignPSBTInput(const SigningProvider &provider, PartiallySignedTransaction &psbt, int index, const PrecomputedTransactionData *txdata, int sighash, SignatureData *out_sigdata, bool finalize)
Signs a PSBTInput, verifying that all provided data matches what is being signed.
bool PSBTInputSigned(const PSBTInput &input)
Checks whether a PSBTInput is already signed by checking for non-null finalized fields.
PrecomputedTransactionData PrecomputePSBTData(const PartiallySignedTransaction &psbt)
Compute a PrecomputedTransactionData object from a psbt.
TransactionError CombinePSBTs(PartiallySignedTransaction &out, const std::vector< PartiallySignedTransaction > &psbtxs)
Combines PSBTs with the same underlying transaction, resulting in a single PSBT with all partial sign...
const unsigned int BIP32_EXTKEY_WITH_VERSION_SIZE
void Shuffle(I first, I last, R &&rng)
More efficient than using std::shuffle on a FastRandomContext.
static RPCHelpMan getrawtransaction()
static RPCHelpMan utxoupdatepsbt()
const RPCResult decodepsbt_inputs
static void TxToJSON(const CTransaction &tx, const uint256 hashBlock, UniValue &entry, Chainstate &active_chainstate, const CTxUndo *txundo=nullptr, TxVerbosity verbosity=TxVerbosity::SHOW_DETAILS)
static RPCHelpMan converttopsbt()
const RPCResult decodepsbt_outputs
static RPCHelpMan analyzepsbt()
static RPCHelpMan decoderawtransaction()
RPCHelpMan descriptorprocesspsbt()
static RPCHelpMan combinepsbt()
static RPCHelpMan decodepsbt()
PartiallySignedTransaction ProcessPSBT(const std::string &psbt_string, const std::any &context, const HidingSigningProvider &provider, int sighash_type, bool finalize)
static RPCHelpMan decodescript()
static RPCHelpMan createpsbt()
static RPCHelpMan joinpsbts()
static RPCHelpMan combinerawtransaction()
static std::vector< RPCResult > ScriptPubKeyDoc()
static RPCHelpMan signrawtransactionwithkey()
static std::vector< RPCResult > DecodeTxDoc(const std::string &txid_field_doc)
static RPCHelpMan createrawtransaction()
static RPCHelpMan finalizepsbt()
void RegisterRawTransactionRPCCommands(CRPCTable &t)
static std::vector< RPCArg > CreateTxDoc()
CMutableTransaction ConstructTransaction(const UniValue &inputs_in, const UniValue &outputs_in, const UniValue &locktime, std::optional< bool > rbf)
Create a transaction from univalue parameters.
void SignTransaction(CMutableTransaction &mtx, const SigningProvider *keystore, const std::map< COutPoint, Coin > &coins, const UniValue &hashType, UniValue &result)
Sign a transaction with the given keystore and previous transactions.
void ParsePrevouts(const UniValue &prevTxsUnival, FillableSigningProvider *keystore, std::map< COutPoint, Coin > &coins)
Parse a prevtxs UniValue array and get the map of coins from it.
UniValue JSONRPCError(int code, const std::string &message)
@ RPC_MISC_ERROR
General application defined errors.
@ RPC_INVALID_PARAMETER
Invalid, missing or duplicate parameter.
@ RPC_VERIFY_ERROR
General error during transaction or block submission.
@ RPC_DESERIALIZATION_ERROR
Error parsing or validating structure in raw format.
@ RPC_INVALID_ADDRESS_OR_KEY
Invalid address or key.
std::string HelpExampleCli(const std::string &methodname, const std::string &args)
int ParseSighashString(const UniValue &sighash)
Returns a sighash value corresponding to the passed in argument.
UniValue JSONRPCTransactionError(TransactionError terr, const std::string &err_string)
std::string HelpExampleRpc(const std::string &methodname, const std::string &args)
std::vector< unsigned char > ParseHexV(const UniValue &v, std::string_view name)
const std::string UNIX_EPOCH_TIME
String used to describe UNIX epoch time in documentation, factored out to a constant for consistency.
std::string GetAllOutputTypes()
Gets all existing output types formatted for RPC help sections.
std::vector< CScript > EvalDescriptorStringOrObject(const UniValue &scanobject, FlatSigningProvider &provider, const bool expand_priv)
Evaluate a descriptor given as a string, or as a {"desc":...,"range":...} object, with default range ...
uint256 ParseHashV(const UniValue &v, std::string_view name)
Utilities: convert hex-encoded Values (throws error if not hex).
#define extract(n)
Extract the lowest 64 bits of (c0,c1,c2) into n, and left shift the number 64 bits.
bool IsOpSuccess(const opcodetype &opcode)
Test for OP_SUCCESSx opcodes as defined by BIP342.
opcodetype
Script opcodes.
NodeContext & EnsureAnyNodeContext(const std::any &context)
CTxMemPool & EnsureMemPool(const NodeContext &node)
ChainstateManager & EnsureChainman(const NodeContext &node)
bool ProduceSignature(const SigningProvider &provider, const BaseSignatureCreator &creator, const CScript &fromPubKey, SignatureData &sigdata)
Produce a script signature using a generic signature creator.
void UpdateInput(CTxIn &input, const SignatureData &data)
bool IsSegWitOutput(const SigningProvider &provider, const CScript &script)
Check whether a scriptPubKey is known to be segwit.
SignatureData DataFromTransaction(const CMutableTransaction &tx, unsigned int nIn, const CTxOut &txout)
Extract signature data from a transaction input, and insert it.
const SigningProvider & DUMMY_SIGNING_PROVIDER
TxoutType Solver(const CScript &scriptPubKey, std::vector< std::vector< unsigned char >> &vSolutionsRet)
Parse a scriptPubKey and identify script type for standard scripts.
@ WITNESS_UNKNOWN
Only for Witness versions not already defined above.
@ NULL_DATA
unspendable OP_RETURN script that carries data
A mutable version of CTransaction.
std::vector< CTxOut > vout
std::vector< std::vector< unsigned char > > stack
std::map< CScriptID, CScript > scripts
A structure for PSBTs which contains per output information.
XOnlyPubKey m_tap_internal_key
std::map< XOnlyPubKey, std::pair< std::set< uint256 >, KeyOriginInfo > > m_tap_bip32_paths
std::set< PSBTProprietary > m_proprietary
std::map< CPubKey, KeyOriginInfo > hd_keypaths
std::vector< std::tuple< uint8_t, uint8_t, std::vector< unsigned char > > > m_tap_tree
std::map< std::vector< unsigned char >, std::vector< unsigned char > > unknown
A version of CTransaction with the PSBT format.
uint32_t GetVersion() const
std::map< KeyOriginInfo, std::set< CExtPubKey > > m_xpubs
std::map< std::vector< unsigned char >, std::vector< unsigned char > > unknown
bool AddOutput(const CTxOut &txout, const PSBTOutput &psbtout)
std::vector< PSBTInput > inputs
std::optional< CMutableTransaction > tx
bool AddInput(const CTxIn &txin, PSBTInput &psbtin)
std::vector< PSBTOutput > outputs
std::set< PSBTProprietary > m_proprietary
@ RANGE
Special type that is a NUM or [NUM,NUM].
@ OBJ_USER_KEYS
Special type where the user must set the keys e.g. to define multiple addresses; as opposed to e....
@ STR_HEX
Special type that is a STR with only hex chars.
@ AMOUNT
Special type representing a floating point amount (can be either NUM or STR)
std::string DefaultHint
Hint for default value.
@ OMITTED
Optional argument for which the default value is omitted from help text for one of two reasons:
@ ELISION
Special type to denote elision (...)
@ NUM_TIME
Special numeric to denote unix epoch time.
@ OBJ_DYN
Special dictionary with keys that are not literals.
@ STR_HEX
Special string with only hex chars.
@ STR_AMOUNT
Special string to represent a floating point amount.
void MergeSignatureData(SignatureData sigdata)
NodeContext struct containing references to chain state and connection state.
Holds the results of AnalyzePSBT (miscellaneous information about a PSBT)
std::vector< PSBTInputAnalysis > inputs
More information about the individual inputs of the transaction.
std::string error
Error message.
std::optional< CAmount > fee
Amount of fee being paid by the transaction.
std::optional< size_t > estimated_vsize
Estimated weight of the transaction.
std::optional< CFeeRate > estimated_feerate
Estimated feerate (fee / weight) of the transaction.
PSBTRole next
Which of the BIP 174 roles needs to handle the transaction next.
#define WITH_LOCK(cs, code)
Run code while locking a mutex.
std::unique_ptr< TxIndex > g_txindex
The global transaction index, used in GetTransaction. May be null.
std::string HexStr(const Span< const uint8_t > s)
Convert a span of bytes to a lower-case hexadecimal string.
std::string EncodeBase64(Span< const unsigned char > input)