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 || !blockindex) {
408 if (tx->IsCoinBase() || is_block_pruned ||
416 if (it != block.
vtx.end()) {
418 undoTX = &blockUndo.
vtxundo.at(it - block.
vtx.begin() - 1);
429 "\nCreate a transaction spending the given inputs and creating new outputs.\n" 430 "Outputs can be addresses or data.\n" 431 "Returns hex-encoded raw transaction.\n" 432 "Note that the transaction's inputs are not signed, and\n" 433 "it is not stored in the wallet or transmitted to the network.\n",
439 HelpExampleCli(
"createrawtransaction",
"\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\" \"[{\\\"address\\\":0.01}]\"")
440 +
HelpExampleCli(
"createrawtransaction",
"\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\" \"[{\\\"data\\\":\\\"00010203\\\"}]\"")
441 +
HelpExampleRpc(
"createrawtransaction",
"\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\", \"[{\\\"address\\\":0.01}]\"")
442 +
HelpExampleRpc(
"createrawtransaction",
"\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\", \"[{\\\"data\\\":\\\"00010203\\\"}]\"")
446 std::optional<bool> rbf;
447 if (!request.params[3].isNull()) {
460 "Return a JSON object representing the serialized, hex-encoded transaction.",
464 "If iswitness is not present, heuristic tests will be used in decoding.\n" 465 "If true, only witness deserialization will be tried.\n" 466 "If false, only non-witness deserialization will be tried.\n" 467 "This boolean should reflect whether the transaction has inputs\n" 468 "(e.g. fully valid, or on-chain transactions), if known by the caller." 483 bool try_witness = request.params[1].isNull() ? true : request.params[1].get_bool();
484 bool try_no_witness = request.params[1].isNull() ? true : !request.params[1].get_bool();
486 if (!
DecodeHexTx(mtx, request.params[0].get_str(), try_no_witness, try_witness)) {
502 "\nDecode a hex-encoded script.\n",
512 {
RPCResult::Type::STR,
"address",
true,
"The Bitcoin address (only if a well-defined address exists)"},
514 "address of P2SH script wrapping this redeem script (not returned for types that should not be wrapped)"},
516 "Result of a witness script public key wrapping this redeem script (not returned for types that should not be wrapped)",
520 {
RPCResult::Type::STR,
"type",
"The type of the script public key (e.g. witness_v0_keyhash or witness_v0_scripthash)"},
521 {
RPCResult::Type::STR,
"address",
true,
"The Bitcoin address (only if a well-defined address exists)"},
523 {
RPCResult::Type::STR,
"p2sh-segwit",
"address of the P2SH script wrapping this witness redeem script"},
535 if (request.params[0].get_str().size() > 0){
536 std::vector<unsigned char> scriptData(
ParseHexV(request.params[0],
"argument"));
537 script =
CScript(scriptData.begin(), scriptData.end());
543 std::vector<std::vector<unsigned char>> solutions_data;
546 const bool can_wrap{[&] {
547 switch (which_type) {
580 const bool can_wrap_P2WSH{[&] {
581 switch (which_type) {
586 for (
const auto& solution : solutions_data) {
607 if (can_wrap_P2WSH) {
634 "\nCombine multiple partially signed transactions into one transaction.\n" 635 "The combined transaction may be another partially signed transaction or a \n" 636 "fully signed transaction.",
648 HelpExampleCli(
"combinerawtransaction", R
"('["myhex1", "myhex2", "myhex3"]')") 654 std::vector<CMutableTransaction> txVariants(txs.
size());
656 for (
unsigned int idx = 0; idx < txs.
size(); idx++) {
657 if (!
DecodeHexTx(txVariants[idx], txs[idx].get_str())) {
662 if (txVariants.empty()) {
682 for (
const CTxIn& txin : mergedTx.
vin) {
693 for (
unsigned int i = 0; i < mergedTx.
vin.size(); i++) {
703 if (txv.vin.size() > i) {
719 return RPCHelpMan{
"signrawtransactionwithkey",
720 "\nSign inputs for raw transaction (serialized, hex-encoded).\n" 721 "The second argument is an array of base58-encoded private\n" 722 "keys that will be the only keys used to sign the transaction.\n" 723 "The third optional argument (may be null) is an array of previous transaction outputs that\n" 724 "this transaction depends on but may not yet be in the block chain.\n",
751 " \"ALL|ANYONECANPAY\"\n" 752 " \"NONE|ANYONECANPAY\"\n" 753 " \"SINGLE|ANYONECANPAY\"\n" 779 HelpExampleCli(
"signrawtransactionwithkey",
"\"myhex\" \"[\\\"key1\\\",\\\"key2\\\"]\"")
780 +
HelpExampleRpc(
"signrawtransactionwithkey",
"\"myhex\", \"[\\\"key1\\\",\\\"key2\\\"]\"")
785 if (!
DecodeHexTx(mtx, request.params[0].get_str())) {
791 for (
unsigned int idx = 0; idx < keys.
size(); ++idx) {
801 std::map<COutPoint, Coin> coins;
823 {
RPCResult::Type::OBJ,
"non_witness_utxo",
true,
"Decoded network transaction for non-witness UTXOs",
836 {
RPCResult::Type::STR,
"address",
true,
"The Bitcoin address (only if a well-defined address exists)"},
893 {
RPCResult::Type::OBJ,
"signature",
true,
"The signature for the pubkey and leaf hash combination",
972 {
RPCResult::Type::ARR,
"taproot_tree",
true,
"The tuples that make up the Taproot tree, in depth first search order",
1016 "Return a JSON object representing the serialized, base64-encoded partially signed Bitcoin transaction.",
1036 {
RPCResult::Type::NUM,
"psbt_version",
"The PSBT version number. Not to be confused with the unsigned transaction version"},
1073 result.
pushKV(
"tx", tx_univ);
1078 for (
auto& xpub : xpub_pair.second) {
1079 std::vector<unsigned char> ser_xpub;
1081 xpub.EncodeWithVersion(ser_xpub.data());
1090 result.
pushKV(
"global_xpubs", global_xpubs);
1099 this_prop.
pushKV(
"identifier",
HexStr(entry.identifier));
1100 this_prop.
pushKV(
"subtype", entry.subtype);
1105 result.
pushKV(
"proprietary", proprietary);
1109 for (
auto entry : psbtx.
unknown) {
1112 result.
pushKV(
"unknown", unknowns);
1116 bool have_all_utxos =
true;
1118 for (
unsigned int i = 0; i < psbtx.
inputs.size(); ++i) {
1122 bool have_a_utxo =
false;
1132 out.pushKV(
"scriptPubKey", o);
1143 in.
pushKV(
"non_witness_utxo", non_wit);
1149 total_in += txout.
nValue;
1152 have_all_utxos =
false;
1155 have_all_utxos =
false;
1164 in.
pushKV(
"partial_signatures", partial_sigs);
1176 in.
pushKV(
"redeem_script", r);
1181 in.
pushKV(
"witness_script", r);
1195 in.
pushKV(
"bip32_derivs", keypaths);
1203 in.
pushKV(
"final_scriptSig", scriptsig);
1210 in.
pushKV(
"final_scriptwitness", txinwitness);
1219 in.
pushKV(
"ripemd160_preimages", ripemd160_preimages);
1228 in.
pushKV(
"sha256_preimages", sha256_preimages);
1237 in.
pushKV(
"hash160_preimages", hash160_preimages);
1246 in.
pushKV(
"hash256_preimages", hash256_preimages);
1258 const auto& [xonly, leaf_hash] = pubkey_leaf;
1265 in.
pushKV(
"taproot_script_path_sigs", script_sigs);
1271 for (
const auto& [leaf, control_blocks] : input.
m_tap_scripts) {
1272 const auto& [script, leaf_ver] = leaf;
1275 script_info.
pushKV(
"leaf_ver", leaf_ver);
1277 for (
const auto& control_block : control_blocks) {
1280 script_info.
pushKV(
"control_blocks", control_blocks_univ);
1283 in.
pushKV(
"taproot_scripts", tap_scripts);
1290 const auto& [leaf_hashes, origin] = leaf_origin;
1296 for (
const auto& leaf_hash : leaf_hashes) {
1299 path_obj.
pushKV(
"leaf_hashes", leaf_hashes_arr);
1302 in.
pushKV(
"taproot_bip32_derivs", keypaths);
1320 this_prop.
pushKV(
"identifier",
HexStr(entry.identifier));
1321 this_prop.
pushKV(
"subtype", entry.subtype);
1326 in.
pushKV(
"proprietary", proprietary);
1330 if (input.
unknown.size() > 0) {
1332 for (
auto entry : input.
unknown) {
1335 in.
pushKV(
"unknown", unknowns);
1340 result.
pushKV(
"inputs", inputs);
1345 for (
unsigned int i = 0; i < psbtx.
outputs.size(); ++i) {
1352 out.pushKV(
"redeem_script", r);
1357 out.pushKV(
"witness_script", r);
1370 out.pushKV(
"bip32_derivs", keypaths);
1381 for (
const auto& [depth, leaf_ver, script] : output.
m_tap_tree) {
1383 elem.
pushKV(
"depth", (
int)depth);
1384 elem.
pushKV(
"leaf_ver", (
int)leaf_ver);
1388 out.pushKV(
"taproot_tree", tree);
1395 const auto& [leaf_hashes, origin] = leaf_origin;
1401 for (
const auto& leaf_hash : leaf_hashes) {
1404 path_obj.
pushKV(
"leaf_hashes", leaf_hashes_arr);
1407 out.pushKV(
"taproot_bip32_derivs", keypaths);
1415 this_prop.
pushKV(
"identifier",
HexStr(entry.identifier));
1416 this_prop.
pushKV(
"subtype", entry.subtype);
1421 out.pushKV(
"proprietary", proprietary);
1425 if (output.
unknown.size() > 0) {
1427 for (
auto entry : output.
unknown) {
1430 out.pushKV(
"unknown", unknowns);
1437 output_value += psbtx.
tx->vout[i].nValue;
1440 have_all_utxos =
false;
1443 result.
pushKV(
"outputs", outputs);
1444 if (have_all_utxos) {
1456 "\nCombine multiple partially signed Bitcoin transactions into one transaction.\n" 1457 "Implements the Combiner role.\n",
1469 HelpExampleCli(
"combinepsbt", R
"('["mybase64_1", "mybase64_2", "mybase64_3"]')") 1474 std::vector<PartiallySignedTransaction> psbtxs;
1479 for (
unsigned int i = 0; i < txs.
size(); ++i) {
1485 psbtxs.push_back(psbtx);
1495 ssTx << merged_psbt;
1504 "Finalize the inputs of a PSBT. If the transaction is fully signed, it will produce a\n" 1505 "network serialized transaction which can be broadcast with sendrawtransaction. Otherwise a PSBT will be\n" 1506 "created which has the final_scriptSig and final_scriptWitness fields filled for inputs that are complete.\n" 1507 "Implements the Finalizer and Extractor roles.\n",
1511 " extract and return the complete transaction in normal network serialization instead of the PSBT."},
1516 {
RPCResult::Type::STR,
"psbt",
true,
"The base64-encoded partially signed transaction if not extracted"},
1533 bool extract = request.params[1].isNull() || (!request.params[1].isNull() && request.params[1].get_bool());
1540 std::string result_str;
1544 result_str =
HexStr(ssTx);
1545 result.
pushKV(
"hex", result_str);
1549 result.
pushKV(
"psbt", result_str);
1551 result.
pushKV(
"complete", complete);
1561 "\nCreates a transaction in the Partially Signed Transaction format.\n" 1562 "Implements the Creator role.\n",
1568 HelpExampleCli(
"createpsbt",
"\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\" \"[{\\\"data\\\":\\\"00010203\\\"}]\"")
1573 std::optional<bool> rbf;
1574 if (!request.params[3].isNull()) {
1575 rbf = request.params[3].
get_bool();
1582 for (
unsigned int i = 0; i < rawTx.
vin.size(); ++i) {
1583 psbtx.
inputs.emplace_back();
1585 for (
unsigned int i = 0; i < rawTx.
vout.size(); ++i) {
1601 "\nConverts a network serialized transaction to a PSBT. This should be used only with createrawtransaction and fundrawtransaction\n" 1602 "createpsbt and walletcreatefundedpsbt should be used for new applications.\n",
1606 " will continue. If false, RPC will fail if any signatures are present."},
1608 "If iswitness is not present, heuristic tests will be used in decoding.\n" 1609 "If true, only witness deserialization will be tried.\n" 1610 "If false, only non-witness deserialization will be tried.\n" 1611 "This boolean should reflect whether the transaction has inputs\n" 1612 "(e.g. fully valid, or on-chain transactions), if known by the caller." 1619 "\nCreate a transaction\n" 1620 +
HelpExampleCli(
"createrawtransaction",
"\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\" \"[{\\\"data\\\":\\\"00010203\\\"}]\"") +
1621 "\nConvert the transaction to a PSBT\n" 1628 bool permitsigdata = request.params[1].isNull() ? false : request.params[1].get_bool();
1629 bool witness_specified = !request.params[2].isNull();
1630 bool iswitness = witness_specified ? request.params[2].get_bool() :
false;
1631 const bool try_witness = witness_specified ? iswitness :
true;
1632 const bool try_no_witness = witness_specified ? !iswitness :
true;
1633 if (!
DecodeHexTx(tx, request.params[0].get_str(), try_no_witness, try_witness)) {
1649 for (
unsigned int i = 0; i < tx.
vin.size(); ++i) {
1650 psbtx.
inputs.emplace_back();
1652 for (
unsigned int i = 0; i < tx.
vout.size(); ++i) {
1668 "\nUpdates all segwit inputs and outputs in a PSBT with data from output descriptors, the UTXO set, txindex, or the mempool.\n",
1680 RPCResult::Type::STR,
"",
"The base64-encoded partially signed transaction with inputs updated" 1689 if (!request.params[1].isNull()) {
1690 auto descs = request.params[1].get_array();
1691 for (
size_t i = 0; i < descs.size(); ++i) {
1698 request.params[0].get_str(),
1714 "\nJoins multiple distinct PSBTs with different inputs and outputs into one PSBT with inputs and outputs from all of the PSBTs\n" 1715 "No input in any of the PSBTs can be in more than one of the PSBTs.\n",
1731 std::vector<PartiallySignedTransaction> psbtxs;
1734 if (txs.
size() <= 1) {
1738 uint32_t best_version = 1;
1739 uint32_t best_locktime = 0xffffffff;
1740 for (
unsigned int i = 0; i < txs.
size(); ++i) {
1746 psbtxs.push_back(psbtx);
1748 if (static_cast<uint32_t>(psbtx.
tx->nVersion) > best_version) {
1749 best_version =
static_cast<uint32_t
>(psbtx.
tx->nVersion);
1752 if (psbtx.
tx->nLockTime < best_locktime) {
1753 best_locktime = psbtx.
tx->nLockTime;
1760 merged_psbt.
tx->nVersion =
static_cast<int32_t
>(best_version);
1761 merged_psbt.
tx->nLockTime = best_locktime;
1764 for (
auto& psbt : psbtxs) {
1765 for (
unsigned int i = 0; i < psbt.tx->vin.size(); ++i) {
1766 if (!merged_psbt.
AddInput(psbt.tx->vin[i], psbt.inputs[i])) {
1770 for (
unsigned int i = 0; i < psbt.tx->vout.size(); ++i) {
1771 merged_psbt.
AddOutput(psbt.tx->vout[i], psbt.outputs[i]);
1773 for (
auto& xpub_pair : psbt.m_xpubs) {
1774 if (merged_psbt.
m_xpubs.count(xpub_pair.first) == 0) {
1775 merged_psbt.
m_xpubs[xpub_pair.first] = xpub_pair.second;
1777 merged_psbt.
m_xpubs[xpub_pair.first].insert(xpub_pair.second.begin(), xpub_pair.second.end());
1780 merged_psbt.
unknown.insert(psbt.unknown.begin(), psbt.unknown.end());
1784 std::vector<int> input_indices(merged_psbt.
inputs.size());
1785 std::iota(input_indices.begin(), input_indices.end(), 0);
1786 std::vector<int> output_indices(merged_psbt.
outputs.size());
1787 std::iota(output_indices.begin(), output_indices.end(), 0);
1795 shuffled_psbt.tx->nVersion = merged_psbt.
tx->nVersion;
1796 shuffled_psbt.tx->nLockTime = merged_psbt.
tx->nLockTime;
1797 for (
int i : input_indices) {
1798 shuffled_psbt.AddInput(merged_psbt.
tx->vin[i], merged_psbt.
inputs[i]);
1800 for (
int i : output_indices) {
1801 shuffled_psbt.AddOutput(merged_psbt.
tx->vout[i], merged_psbt.
outputs[i]);
1803 shuffled_psbt.unknown.insert(merged_psbt.
unknown.begin(), merged_psbt.
unknown.end());
1806 ssTx << shuffled_psbt;
1815 "\nAnalyzes and provides information about the current status of a PSBT and its inputs\n",
1828 {
RPCResult::Type::OBJ,
"missing",
true,
"Things that are missing that are required to complete this input",
1832 {
RPCResult::Type::STR_HEX,
"keyid",
"Public key ID, hash160 of the public key, of a public key whose BIP 32 derivation path is missing"},
1836 {
RPCResult::Type::STR_HEX,
"keyid",
"Public key ID, hash160 of the public key, of a public key whose signature is missing"},
1841 {
RPCResult::Type::STR,
"next",
true,
"Role of the next person that this input needs to go to"},
1844 {
RPCResult::Type::NUM,
"estimated_vsize",
true,
"Estimated vsize of the final signed transaction"},
1845 {
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"},
1846 {
RPCResult::Type::STR_AMOUNT,
"fee",
true,
"The transaction fee paid. Shown only if all UTXO slots in the PSBT have been filled"},
1867 for (
const auto& input : psbta.
inputs) {
1871 input_univ.
pushKV(
"has_utxo", input.has_utxo);
1872 input_univ.
pushKV(
"is_final", input.is_final);
1875 if (!input.missing_pubkeys.empty()) {
1877 for (
const CKeyID& pubkey : input.missing_pubkeys) {
1880 missing.
pushKV(
"pubkeys", missing_pubkeys_univ);
1882 if (!input.missing_redeem_script.IsNull()) {
1883 missing.
pushKV(
"redeemscript",
HexStr(input.missing_redeem_script));
1885 if (!input.missing_witness_script.IsNull()) {
1886 missing.
pushKV(
"witnessscript",
HexStr(input.missing_witness_script));
1888 if (!input.missing_sigs.empty()) {
1890 for (
const CKeyID& pubkey : input.missing_sigs) {
1893 missing.
pushKV(
"signatures", missing_sigs_univ);
1895 if (!missing.
getKeys().empty()) {
1896 input_univ.
pushKV(
"missing", missing);
1900 if (!inputs_result.
empty()) result.
pushKV(
"inputs", inputs_result);
1908 if (psbta.
fee != std::nullopt) {
1912 if (!psbta.
error.empty()) {
1924 "\nUpdate all segwit inputs in a PSBT with information from output descriptors, the UTXO set or the mempool. \n" 1925 "Then, sign the inputs we are able to with information from the output descriptors. ",
1935 {
"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" 1940 " \"ALL|ANYONECANPAY\"\n" 1941 " \"NONE|ANYONECANPAY\"\n" 1942 " \"SINGLE|ANYONECANPAY\""},
1955 HelpExampleCli(
"descriptorprocesspsbt",
"\"psbt\" \"[\\\"descriptor1\\\", \\\"descriptor2\\\"]\"") +
1956 HelpExampleCli(
"descriptorprocesspsbt",
"\"psbt\" \"[{\\\"desc\\\":\\\"mydescriptor\\\", \\\"range\\\":21}]\"")
1963 auto descs = request.params[1].get_array();
1964 for (
size_t i = 0; i < descs.size(); ++i) {
1969 bool bip32derivs = request.params[3].isNull() ? true : request.params[3].get_bool();
1970 bool finalize = request.params[4].isNull() ? true : request.params[4].get_bool();
1973 request.params[0].get_str(),
1980 bool complete =
true;
1981 for (
const auto& input : psbtx.
inputs) {
1991 result.
pushKV(
"complete", complete);
2024 for (
const auto& c : commands) {
2025 t.appendCommand(c.name, &c);
std::shared_ptr< const CTransaction > CTransactionRef
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 AddInput(const CTxIn &txin, PSBTInput &psbtin)
bool IsSpent() const
Either this coin never existed (see e.g.
node::BlockManager m_blockman
A single BlockManager instance is shared across each constructed chainstate to avoid duplicating bloc...
void push_back(UniValue val)
std::set< PSBTProprietary > m_proprietary
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.
The same as previous option with information about prevouts if available.
int64_t GetBlockTime() const
bool IsNull() const
Test whether this is the 0 key (the result of default construction).
std::string WriteHDKeypath(const std::vector< uint32_t > &keypath, bool apostrophe)
Write HD keypaths as strings.
const Coin & AccessCoin(const COutPoint &output) const
Return a reference to Coin in the cache, or coinEmpty if not found.
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.
void SetBackend(CCoinsView &viewIn)
bool GetOp(const_iterator &pc, opcodetype &opcodeRet, std::vector< unsigned char > &vchRet) const
node::BlockManager & m_blockman
Reference to a BlockManager instance which itself is shared across all Chainstate instances...
CTxMemPool & EnsureMemPool(const NodeContext &node)
TxVerbosity
Verbose level for block's transaction.
Provides an interface for creating and interacting with one or two chainstates: an IBD chainstate gen...
std::vector< unsigned char > ParseHexV(const UniValue &v, std::string strName)
static RPCHelpMan getrawtransaction()
static std::vector< RPCResult > ScriptPubKeyDoc()
TxoutType Solver(const CScript &scriptPubKey, std::vector< std::vector< unsigned char >> &vSolutionsRet)
Parse a scriptPubKey and identify script type for standard scripts.
CScriptWitness scriptWitness
Only serialized through CTransaction.
CChain & ActiveChain() const EXCLUSIVE_LOCKS_REQUIRED(GetMutex())
static RPCHelpMan combinerawtransaction()
int ParseSighashString(const UniValue &sighash)
Returns a sighash value corresponding to the passed in argument.
bool MoneyRange(const CAmount &nValue)
#define CHECK_NONFATAL(condition)
Identity function.
int Height() const
Return the maximal height in the chain.
CTxOut out
unspent transaction output
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 void TxToJSON(const CTransaction &tx, const uint256 hashBlock, UniValue &entry, Chainstate &active_chainstate, const CTxUndo *txundo=nullptr, TxVerbosity verbosity=TxVerbosity::SHOW_DETAILS)
std::vector< std::vector< unsigned char > > stack
std::string EncodeBase64(Span< const unsigned char > input)
const RPCResult decodepsbt_inputs
const UniValue & get_array() const
const CBlock & GenesisBlock() const
bool HasValidOps() const
Check if the script contains valid OP_CODES.
A version of CTransaction with the PSBT format.
bool ReadBlockFromDisk(CBlock &block, const FlatFilePos &pos) const
Functions for disk access for blocks.
A signature creator for transactions.
const std::vector< std::string > & getKeys() const
std::map< XOnlyPubKey, std::pair< std::set< uint256 >, KeyOriginInfo > > m_tap_bip32_paths
CChain m_chain
The current chain of blockheaders we consult and build on.
RPCHelpMan descriptorprocesspsbt()
static RPCHelpMan decoderawtransaction()
bool AddOutput(const CTxOut &txout, const PSBTOutput &psbtout)
std::map< KeyOriginInfo, std::set< CExtPubKey > > m_xpubs
bool FinalizeAndExtractPSBT(PartiallySignedTransaction &psbtx, CMutableTransaction &result)
Finalizes a PSBT if possible, and extracts it to a CMutableTransaction if it could be finalized...
bool IsSegWitOutput(const SigningProvider &provider, const CScript &script)
Check whether a scriptPubKey is known to be segwit.
std::optional< CAmount > fee
Amount of fee being paid by the transaction.
XOnlyPubKey m_tap_internal_key
Invalid, missing or duplicate parameter.
bool IsUnspendable() const
Returns whether the script is guaranteed to fail at execution, regardless of the initial stack...
std::string PSBTRoleName(PSBTRole role)
int64_t CAmount
Amount in satoshis (Can be negative)
std::string GetAllOutputTypes()
Gets all existing output types formatted for RPC help sections.
std::optional< size_t > estimated_vsize
Estimated weight of the transaction.
static RPCHelpMan createpsbt()
A structure for PSBTs which contains per output information.
General error during transaction or block submission.
std::vector< PSBTOutput > outputs
std::map< CPubKey, KeyOriginInfo > hd_keypaths
Special type that is a STR with only hex chars.
NodeContext struct containing references to chain state and connection state.
std::string HelpExampleRpc(const std::string &methodname, const std::string &args)
std::string error
Error message.
static RPCHelpMan finalizepsbt()
UniValue JSONRPCError(int code, const std::string &message)
Special string with only hex chars.
std::string ScriptToAsmStr(const CScript &script, const bool fAttemptSighashDecode=false)
Create the assembly string representation of a CScript object.
static RPCHelpMan converttopsbt()
static RPCHelpMan combinepsbt()
Chainstate stores and provides an API to update our local knowledge of the current best chain...
Include TXID, inputs, outputs, and other common block's transaction information.
std::string HexStr(const Span< const uint8_t > s)
Convert a span of bytes to a lower-case hexadecimal string.
void ScriptToUniv(const CScript &script, UniValue &out, bool include_hex=true, bool include_address=false, const SigningProvider *provider=nullptr)
Abstract view on the open txout dataset.
std::map< CScriptID, CScript > scripts
An input of a transaction.
uint32_t GetVersion() const
bool DecodeBase64PSBT(PartiallySignedTransaction &psbt, const std::string &base64_tx, std::string &error)
Decode a base64ed PSBT into a PartiallySignedTransaction.
std::unique_ptr< TxIndex > g_txindex
The global transaction index, used in GetTransaction. May be null.
std::optional< CFeeRate > estimated_feerate
Estimated feerate (fee / weight) of the transaction.
const SigningProvider & DUMMY_SIGNING_PROVIDER
bool Contains(const CBlockIndex *pindex) const
Efficiently check whether a block is present in this chain.
An encapsulated public key.
Fillable signing provider that keeps keys in an address->secret map.
opcodetype
Script opcodes.
Special type where the user must set the keys e.g. to define multiple addresses; as opposed to e...
std::map< std::vector< unsigned char >, std::vector< unsigned char > > unknown
bool UndoReadFromDisk(CBlockUndo &blockundo, const CBlockIndex &index) const
const std::string CURRENCY_UNIT
PartiallySignedTransaction ProcessPSBT(const std::string &psbt_string, const std::any &context, const HidingSigningProvider &provider, int sighash_type, bool finalize)
static uint32_t ReadBE32(const unsigned char *ptr)
std::string SighashToStr(unsigned char sighash_type)
General application defined errors.
CMutableTransaction ConstructTransaction(const UniValue &inputs_in, const UniValue &outputs_in, const UniValue &locktime, std::optional< bool > rbf)
Create a transaction from univalue parameters.
std::string DefaultHint
Hint for default value.
An output of a transaction.
static std::vector< RPCResult > DecodeTxDoc(const std::string &txid_field_doc)
void UpdatePSBTOutput(const SigningProvider &provider, PartiallySignedTransaction &psbt, int index)
Updates a PSBTOutput with information from provider.
void MergeSignatureData(SignatureData sigdata)
CBlockIndex * LookupBlockIndex(const uint256 &hash) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
std::string HelpExampleCli(const std::string &methodname, const std::string &args)
std::vector< CTxOut > vout
constexpr bool IsNull() const
static RPCHelpMan utxoupdatepsbt()
std::vector< PSBTInput > inputs
Special numeric to denote unix epoch time.
#define WITH_LOCK(cs, code)
Run code while locking a mutex.
void RegisterRawTransactionRPCCommands(CRPCTable &t)
void FindCoins(const NodeContext &node, std::map< COutPoint, Coin > &coins)
Look up unspent output information.
static RPCHelpMan signrawtransactionwithkey()
std::vector< PSBTInputAnalysis > inputs
More information about the individual inputs of the transaction.
CScript GetScriptForDestination(const CTxDestination &dest)
Generate a Bitcoin scriptPubKey for the given CTxDestination.
uint256 ParseHashV(const UniValue &v, std::string strName)
Utilities: convert hex-encoded Values (throws error if not hex).
uint160 Hash160(const T1 &in1)
Compute the 160-bit hash an object.
std::vector< std::tuple< uint8_t, uint8_t, std::vector< unsigned char > > > m_tap_tree
Special type that is a NUM or [NUM,NUM].
std::string EncodeBase58Check(Span< const unsigned char > input)
Encode a byte span into a base58-encoded string, including checksum.
const CChainParams & GetParams() const
#define extract(n)
Extract the lowest 64 bits of (c0,c1,c2) into n, and left shift the number 64 bits.
Optional argument for which the default value is omitted from help text for one of two reasons: ...
void Shuffle(I first, I last, R &&rng)
More efficient than using std::shuffle on a FastRandomContext.
std::vector< CTransactionRef > vtx
static std::vector< RPCArg > CreateTxDoc()
static RPCHelpMan decodescript()
CTxMemPool stores valid-according-to-the-current-best-chain transactions that may be included in the ...
Special string to represent a floating point amount.
SignatureData DataFromTransaction(const CMutableTransaction &tx, unsigned int nIn, const CTxOut &txout)
Extract signature data from a transaction input, and insert it.
bool error(const char *fmt, const Args &... args)
The block chain is a tree shaped structure starting with the genesis block at the root...
void pushKV(std::string key, UniValue val)
Undo information for a CBlock.
Serialized script, used inside transaction inputs and outputs.
int RPCSerializationFlags()
Undo information for a CTransaction.
ChainstateManager & EnsureChainman(const NodeContext &node)
static const int PROTOCOL_VERSION
network protocol versioning
Holds the results of AnalyzePSBT (miscellaneous information about a PSBT)
#define NONFATAL_UNREACHABLE()
NONFATAL_UNREACHABLE() is a macro that is used to mark unreachable code.
A reference to a CKey: the Hash160 of its serialized public key.
void UpdateInput(CTxIn &input, const SignatureData &data)
Special type representing a floating point amount (can be either NUM or STR)
bool DecodeHexTx(CMutableTransaction &tx, const std::string &hex_tx, bool try_no_witness=false, bool try_witness=true)
std::string GetHex() const
UniValue ValueFromAmount(const CAmount amount)
std::string EncodeHexTx(const CTransaction &tx, const int serializeFlags=0)
const RPCResult decodepsbt_outputs
bool ProduceSignature(const SigningProvider &provider, const BaseSignatureCreator &creator, const CScript &fromPubKey, SignatureData &sigdata)
Produce a script signature using a generic signature creator.
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 ...
A reference to a CScript: the Hash160 of its serialization.
std::string EncodeDestination(const CTxDestination &dest)
A mutable version of CTransaction.
static RPCHelpMan decodepsbt()
bool PSBTInputSigned(const PSBTInput &input)
Checks whether a PSBTInput is already signed by checking for non-null finalized fields.
An encapsulated private key.
A Span is an object that can refer to a contiguous sequence of objects.
The basic transaction that is broadcasted on the network and contained in blocks. ...
const unsigned int BIP32_EXTKEY_WITH_VERSION_SIZE
int nHeight
height of the entry in the chain. The genesis block has height 0
std::set< PSBTProprietary > m_proprietary
void RemoveUnnecessaryTransactions(PartiallySignedTransaction &psbtx, const int &sighash_type)
Reduces the size of the PSBT by dropping unnecessary non_witness_utxos (i.e.
UniValue JSONRPCTransactionError(TransactionError terr, const std::string &err_string)
Special dictionary with keys that are not literals.
CKey DecodeSecret(const std::string &str)
CCoinsView that adds a memory cache for transactions to another CCoinsView.
std::optional< CMutableTransaction > tx
full block available in blk*.dat
static RPCHelpMan analyzepsbt()
PSBTAnalysis AnalyzePSBT(PartiallySignedTransaction psbtx)
Provides helpful miscellaneous information about where a PSBT is in the signing workflow.
std::vector< CTxUndo > vtxundo
Only for Witness versions not already defined above.
RecursiveMutex cs_main
Mutex to guard access to validation specific variables, such as reading or changing the chainstate...
static RPCHelpMan createrawtransaction()
PSBTRole next
Which of the BIP 174 roles needs to handle the transaction next.
CCoinsView that brings transactions from a mempool into view.
void TxToUniv(const CTransaction &tx, const uint256 &block_hash, UniValue &entry, bool include_hex=true, int serialize_flags=0, const CTxUndo *txundo=nullptr, TxVerbosity verbosity=TxVerbosity::SHOW_DETAILS)
std::map< std::vector< unsigned char >, std::vector< unsigned char > > unknown
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...
NodeContext & EnsureAnyNodeContext(const std::any &context)
bool IsOpSuccess(const opcodetype &opcode)
Test for OP_SUCCESSx opcodes as defined by BIP342.
virtual bool AddKey(const CKey &key)
RecursiveMutex cs
This mutex needs to be locked when accessing mapTx or other members that are guarded by it...
Error parsing or validating structure in raw format.
const std::string UNIX_EPOCH_TIME
String used to describe UNIX epoch time in documentation, factored out to a constant for consistency...
bool IsValid() const
Check whether this private key is valid.
Special type to denote elision (...)
static RPCHelpMan joinpsbts()
unspendable OP_RETURN script that carries data
PrecomputedTransactionData PrecomputePSBTData(const PartiallySignedTransaction &psbt)
Compute a PrecomputedTransactionData object from a psbt.
bool IsCompressed() const
Check whether this is a compressed public key.
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...