75 entry.
pushKV(
"confirmations", 0);
80 static std::vector<RPCResult>
DecodeTxDoc(
const std::string& txid_field_doc)
86 {
RPCResult::Type::NUM,
"vsize",
"The virtual transaction size (differs from size for witness transactions)"},
121 {
RPCResult::Type::STR,
"address",
true,
"The Bitcoin address (only if a well-defined address exists)"},
143 "That is, each address can only appear once and there can only be one 'data' object.\n" 144 "For compatibility reasons, a dictionary, which holds the key-value pairs directly, is also\n" 145 " accepted as second parameter.",
161 "Allows this transaction to be replaced by a transaction with higher fees. If provided, it is an error if explicit sequence numbers are incompatible."},
169 "Return the raw transaction data.\n" 171 "\nBy default, this call only returns a transaction if it is in the mempool. If -txindex is enabled\n" 172 "and no blockhash argument is passed, it will return the transaction if it is in the mempool or any block.\n" 173 "If a blockhash argument is passed, it will return the transaction if\n" 174 "the specified block is available and the transaction is in that block.\n" 175 "\nHint: Use gettransaction for wallet transactions.\n" 177 "\nIf verbose is 'true', returns an Object with information about 'txid'.\n" 178 "If verbose is 'false' or omitted, returns a string that is serialized, hex-encoded data for 'txid'.",
185 RPCResult{
"if verbose is not set or set to false",
190 Cat<std::vector<RPCResult>>(
192 {
RPCResult::Type::BOOL,
"in_active_chain",
true,
"Whether specified block is in the active chain or not (only present with explicit \"blockhash\" argument)"},
199 DecodeTxDoc(
"The transaction id (same as provided)")),
206 +
HelpExampleCli(
"getrawtransaction",
"\"mytxid\" false \"myblockhash\"")
207 +
HelpExampleCli(
"getrawtransaction",
"\"mytxid\" true \"myblockhash\"")
214 bool in_active_chain =
true;
224 bool fVerbose =
false;
225 if (!request.params[1].isNull()) {
226 fVerbose = request.params[1].isNum() ? (request.params[1].getInt<
int>() != 0) : request.params[1].get_bool();
229 if (!request.params[2].isNull()) {
240 bool f_txindex_ready =
false;
242 f_txindex_ready =
g_txindex->BlockUntilSyncedToCurrentChain();
251 if (!block_has_data) {
254 errmsg =
"No such transaction found in the provided block";
256 errmsg =
"No such mempool transaction. Use -txindex or provide a block hash to enable blockchain transaction queries";
257 }
else if (!f_txindex_ready) {
258 errmsg =
"No such mempool transaction. Blockchain transactions are still in the process of being indexed";
260 errmsg =
"No such mempool or blockchain transaction";
270 if (blockindex) result.
pushKV(
"in_active_chain", in_active_chain);
280 "\nCreate a transaction spending the given inputs and creating new outputs.\n" 281 "Outputs can be addresses or data.\n" 282 "Returns hex-encoded raw transaction.\n" 283 "Note that the transaction's inputs are not signed, and\n" 284 "it is not stored in the wallet or transmitted to the network.\n",
290 HelpExampleCli(
"createrawtransaction",
"\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\" \"[{\\\"address\\\":0.01}]\"")
291 +
HelpExampleCli(
"createrawtransaction",
"\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\" \"[{\\\"data\\\":\\\"00010203\\\"}]\"")
292 +
HelpExampleRpc(
"createrawtransaction",
"\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\", \"[{\\\"address\\\":0.01}]\"")
293 +
HelpExampleRpc(
"createrawtransaction",
"\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\", \"[{\\\"data\\\":\\\"00010203\\\"}]\"")
305 std::optional<bool> rbf;
306 if (!request.params[3].isNull()) {
307 rbf = request.params[3].isTrue();
319 "Return a JSON object representing the serialized, hex-encoded transaction.",
323 "If iswitness is not present, heuristic tests will be used in decoding.\n" 324 "If true, only witness deserialization will be tried.\n" 325 "If false, only non-witness deserialization will be tried.\n" 326 "This boolean should reflect whether the transaction has inputs\n" 327 "(e.g. fully valid, or on-chain transactions), if known by the caller." 340 RPCTypeCheck(request.params, {UniValue::VSTR, UniValue::VBOOL});
344 bool try_witness = request.params[1].isNull() ? true : request.params[1].get_bool();
345 bool try_no_witness = request.params[1].isNull() ? true : !request.params[1].get_bool();
347 if (!
DecodeHexTx(mtx, request.params[0].get_str(), try_no_witness, try_witness)) {
363 "\nDecode a hex-encoded script.\n",
373 {
RPCResult::Type::STR,
"address",
true,
"The Bitcoin address (only if a well-defined address exists)"},
375 "address of P2SH script wrapping this redeem script (not returned for types that should not be wrapped)"},
377 "Result of a witness script public key wrapping this redeem script (not returned for types that should not be wrapped)",
381 {
RPCResult::Type::STR,
"type",
"The type of the script public key (e.g. witness_v0_keyhash or witness_v0_scripthash)"},
382 {
RPCResult::Type::STR,
"address",
true,
"The Bitcoin address (only if a well-defined address exists)"},
384 {
RPCResult::Type::STR,
"p2sh-segwit",
"address of the P2SH script wrapping this witness redeem script"},
398 if (request.params[0].get_str().size() > 0){
399 std::vector<unsigned char> scriptData(
ParseHexV(request.params[0],
"argument"));
400 script =
CScript(scriptData.begin(), scriptData.end());
406 std::vector<std::vector<unsigned char>> solutions_data;
409 const bool can_wrap{[&] {
410 switch (which_type) {
443 const bool can_wrap_P2WSH{[&] {
444 switch (which_type) {
449 for (
const auto& solution : solutions_data) {
470 if (can_wrap_P2WSH) {
495 "\nCombine multiple partially signed transactions into one transaction.\n" 496 "The combined transaction may be another partially signed transaction or a \n" 497 "fully signed transaction.",
509 HelpExampleCli(
"combinerawtransaction", R
"('["myhex1", "myhex2", "myhex3"]')") 515 std::vector<CMutableTransaction> txVariants(txs.
size());
517 for (
unsigned int idx = 0; idx < txs.
size(); idx++) {
518 if (!
DecodeHexTx(txVariants[idx], txs[idx].get_str())) {
523 if (txVariants.empty()) {
543 for (
const CTxIn& txin : mergedTx.
vin) {
554 for (
unsigned int i = 0; i < mergedTx.
vin.size(); i++) {
564 if (txv.vin.size() > i) {
580 return RPCHelpMan{
"signrawtransactionwithkey",
581 "\nSign inputs for raw transaction (serialized, hex-encoded).\n" 582 "The second argument is an array of base58-encoded private\n" 583 "keys that will be the only keys used to sign the transaction.\n" 584 "The third optional argument (may be null) is an array of previous transaction outputs that\n" 585 "this transaction depends on but may not yet be in the block chain.\n",
612 " \"ALL|ANYONECANPAY\"\n" 613 " \"NONE|ANYONECANPAY\"\n" 614 " \"SINGLE|ANYONECANPAY\"\n" 640 HelpExampleCli(
"signrawtransactionwithkey",
"\"myhex\" \"[\\\"key1\\\",\\\"key2\\\"]\"")
641 +
HelpExampleRpc(
"signrawtransactionwithkey",
"\"myhex\", \"[\\\"key1\\\",\\\"key2\\\"]\"")
645 RPCTypeCheck(request.params, {UniValue::VSTR, UniValue::VARR, UniValue::VARR, UniValue::VSTR},
true);
648 if (!
DecodeHexTx(mtx, request.params[0].get_str())) {
654 for (
unsigned int idx = 0; idx < keys.
size(); ++idx) {
664 std::map<COutPoint, Coin> coins;
686 {
RPCResult::Type::OBJ,
"non_witness_utxo",
true,
"Decoded network transaction for non-witness UTXOs",
699 {
RPCResult::Type::STR,
"address",
true,
"The Bitcoin address (only if a well-defined address exists)"},
756 {
RPCResult::Type::OBJ,
"signature",
true,
"The signature for the pubkey and leaf hash combination",
835 {
RPCResult::Type::ARR,
"taproot_tree",
true,
"The tuples that make up the Taproot tree, in depth first search order",
879 "Return a JSON object representing the serialized, base64-encoded partially signed Bitcoin transaction.",
899 {
RPCResult::Type::NUM,
"psbt_version",
"The PSBT version number. Not to be confused with the unsigned transaction version"},
938 result.
pushKV(
"tx", tx_univ);
943 for (
auto& xpub : xpub_pair.second) {
944 std::vector<unsigned char> ser_xpub;
946 xpub.EncodeWithVersion(ser_xpub.data());
955 result.
pushKV(
"global_xpubs", global_xpubs);
964 this_prop.
pushKV(
"identifier",
HexStr(entry.identifier));
965 this_prop.
pushKV(
"subtype", entry.subtype);
970 result.
pushKV(
"proprietary", proprietary);
974 for (
auto entry : psbtx.
unknown) {
977 result.
pushKV(
"unknown", unknowns);
981 bool have_all_utxos =
true;
983 for (
unsigned int i = 0; i < psbtx.
inputs.size(); ++i) {
987 bool have_a_utxo =
false;
997 out.
pushKV(
"scriptPubKey", o);
999 in.
pushKV(
"witness_utxo", out);
1008 in.
pushKV(
"non_witness_utxo", non_wit);
1014 total_in += txout.
nValue;
1017 have_all_utxos =
false;
1020 have_all_utxos =
false;
1029 in.
pushKV(
"partial_signatures", partial_sigs);
1041 in.
pushKV(
"redeem_script", r);
1046 in.
pushKV(
"witness_script", r);
1060 in.
pushKV(
"bip32_derivs", keypaths);
1068 in.
pushKV(
"final_scriptSig", scriptsig);
1075 in.
pushKV(
"final_scriptwitness", txinwitness);
1084 in.
pushKV(
"ripemd160_preimages", ripemd160_preimages);
1093 in.
pushKV(
"sha256_preimages", sha256_preimages);
1102 in.
pushKV(
"hash160_preimages", hash160_preimages);
1111 in.
pushKV(
"hash256_preimages", hash256_preimages);
1123 const auto& [xonly, leaf_hash] = pubkey_leaf;
1130 in.
pushKV(
"taproot_script_path_sigs", script_sigs);
1136 for (
const auto& [leaf, control_blocks] : input.
m_tap_scripts) {
1137 const auto& [script, leaf_ver] = leaf;
1140 script_info.
pushKV(
"leaf_ver", leaf_ver);
1142 for (
const auto& control_block : control_blocks) {
1145 script_info.
pushKV(
"control_blocks", control_blocks_univ);
1148 in.
pushKV(
"taproot_scripts", tap_scripts);
1155 const auto& [leaf_hashes, origin] = leaf_origin;
1161 for (
const auto& leaf_hash : leaf_hashes) {
1164 path_obj.
pushKV(
"leaf_hashes", leaf_hashes_arr);
1167 in.
pushKV(
"taproot_bip32_derivs", keypaths);
1185 this_prop.
pushKV(
"identifier",
HexStr(entry.identifier));
1186 this_prop.
pushKV(
"subtype", entry.subtype);
1191 in.
pushKV(
"proprietary", proprietary);
1195 if (input.
unknown.size() > 0) {
1197 for (
auto entry : input.
unknown) {
1200 in.
pushKV(
"unknown", unknowns);
1205 result.
pushKV(
"inputs", inputs);
1210 for (
unsigned int i = 0; i < psbtx.
outputs.size(); ++i) {
1217 out.
pushKV(
"redeem_script", r);
1222 out.
pushKV(
"witness_script", r);
1235 out.
pushKV(
"bip32_derivs", keypaths);
1246 for (
const auto& [depth, leaf_ver, script] : output.
m_tap_tree) {
1248 elem.
pushKV(
"depth", (
int)depth);
1249 elem.
pushKV(
"leaf_ver", (
int)leaf_ver);
1253 out.
pushKV(
"taproot_tree", tree);
1260 const auto& [leaf_hashes, origin] = leaf_origin;
1266 for (
const auto& leaf_hash : leaf_hashes) {
1269 path_obj.
pushKV(
"leaf_hashes", leaf_hashes_arr);
1272 out.
pushKV(
"taproot_bip32_derivs", keypaths);
1280 this_prop.
pushKV(
"identifier",
HexStr(entry.identifier));
1281 this_prop.
pushKV(
"subtype", entry.subtype);
1286 out.
pushKV(
"proprietary", proprietary);
1290 if (output.
unknown.size() > 0) {
1292 for (
auto entry : output.
unknown) {
1295 out.
pushKV(
"unknown", unknowns);
1302 output_value += psbtx.
tx->vout[i].nValue;
1305 have_all_utxos =
false;
1308 result.
pushKV(
"outputs", outputs);
1309 if (have_all_utxos) {
1321 "\nCombine multiple partially signed Bitcoin transactions into one transaction.\n" 1322 "Implements the Combiner role.\n",
1334 HelpExampleCli(
"combinepsbt", R
"('["mybase64_1", "mybase64_2", "mybase64_3"]')") 1341 std::vector<PartiallySignedTransaction> psbtxs;
1346 for (
unsigned int i = 0; i < txs.
size(); ++i) {
1352 psbtxs.push_back(psbtx);
1362 ssTx << merged_psbt;
1371 "Finalize the inputs of a PSBT. If the transaction is fully signed, it will produce a\n" 1372 "network serialized transaction which can be broadcast with sendrawtransaction. Otherwise a PSBT will be\n" 1373 "created which has the final_scriptSig and final_scriptWitness fields filled for inputs that are complete.\n" 1374 "Implements the Finalizer and Extractor roles.\n",
1378 " extract and return the complete transaction in normal network serialization instead of the PSBT."},
1383 {
RPCResult::Type::STR,
"psbt",
true,
"The base64-encoded partially signed transaction if not extracted"},
1393 RPCTypeCheck(request.params, {UniValue::VSTR, UniValue::VBOOL},
true);
1402 bool extract = request.params[1].isNull() || (!request.params[1].isNull() && request.params[1].get_bool());
1409 std::string result_str;
1413 result_str =
HexStr(ssTx);
1414 result.
pushKV(
"hex", result_str);
1418 result.
pushKV(
"psbt", result_str);
1420 result.
pushKV(
"complete", complete);
1430 "\nCreates a transaction in the Partially Signed Transaction format.\n" 1431 "Implements the Creator role.\n",
1437 HelpExampleCli(
"createpsbt",
"\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\" \"[{\\\"data\\\":\\\"00010203\\\"}]\"")
1450 std::optional<bool> rbf;
1451 if (!request.params[3].isNull()) {
1452 rbf = request.params[3].isTrue();
1459 for (
unsigned int i = 0; i < rawTx.
vin.size(); ++i) {
1462 for (
unsigned int i = 0; i < rawTx.
vout.size(); ++i) {
1478 "\nConverts a network serialized transaction to a PSBT. This should be used only with createrawtransaction and fundrawtransaction\n" 1479 "createpsbt and walletcreatefundedpsbt should be used for new applications.\n",
1483 " will continue. If false, RPC will fail if any signatures are present."},
1485 "If iswitness is not present, heuristic tests will be used in decoding.\n" 1486 "If true, only witness deserialization will be tried.\n" 1487 "If false, only non-witness deserialization will be tried.\n" 1488 "This boolean should reflect whether the transaction has inputs\n" 1489 "(e.g. fully valid, or on-chain transactions), if known by the caller." 1496 "\nCreate a transaction\n" 1497 +
HelpExampleCli(
"createrawtransaction",
"\"[{\\\"txid\\\":\\\"myid\\\",\\\"vout\\\":0}]\" \"[{\\\"data\\\":\\\"00010203\\\"}]\"") +
1498 "\nConvert the transaction to a PSBT\n" 1503 RPCTypeCheck(request.params, {UniValue::VSTR, UniValue::VBOOL, UniValue::VBOOL},
true);
1507 bool permitsigdata = request.params[1].isNull() ? false : request.params[1].get_bool();
1508 bool witness_specified = !request.params[2].isNull();
1509 bool iswitness = witness_specified ? request.params[2].get_bool() :
false;
1510 const bool try_witness = witness_specified ? iswitness :
true;
1511 const bool try_no_witness = witness_specified ? !iswitness :
true;
1512 if (!
DecodeHexTx(tx, request.params[0].get_str(), try_no_witness, try_witness)) {
1528 for (
unsigned int i = 0; i < tx.
vin.size(); ++i) {
1531 for (
unsigned int i = 0; i < tx.
vout.size(); ++i) {
1547 "\nUpdates all segwit inputs and outputs in a PSBT with data from output descriptors, the UTXO set or the mempool.\n",
1559 RPCResult::Type::STR,
"",
"The base64-encoded partially signed transaction with inputs updated" 1566 RPCTypeCheck(request.params, {UniValue::VSTR, UniValue::VARR},
true);
1577 if (!request.params[1].isNull()) {
1578 auto descs = request.params[1].get_array();
1579 for (
size_t i = 0; i < descs.size(); ++i) {
1598 for (
const CTxIn& txin : psbtx.
tx->vin) {
1607 for (
unsigned int i = 0; i < psbtx.
tx->vin.size(); ++i) {
1627 for (
unsigned int i = 0; i < psbtx.
tx->vout.size(); ++i) {
1641 "\nJoins multiple distinct PSBTs with different inputs and outputs into one PSBT with inputs and outputs from all of the PSBTs\n" 1642 "No input in any of the PSBTs can be in more than one of the PSBTs.\n",
1660 std::vector<PartiallySignedTransaction> psbtxs;
1663 if (txs.
size() <= 1) {
1667 uint32_t best_version = 1;
1668 uint32_t best_locktime = 0xffffffff;
1669 for (
unsigned int i = 0; i < txs.
size(); ++i) {
1675 psbtxs.push_back(psbtx);
1677 if (static_cast<uint32_t>(psbtx.
tx->nVersion) > best_version) {
1678 best_version =
static_cast<uint32_t
>(psbtx.
tx->nVersion);
1681 if (psbtx.
tx->nLockTime < best_locktime) {
1682 best_locktime = psbtx.
tx->nLockTime;
1689 merged_psbt.
tx->nVersion =
static_cast<int32_t
>(best_version);
1690 merged_psbt.
tx->nLockTime = best_locktime;
1693 for (
auto& psbt : psbtxs) {
1694 for (
unsigned int i = 0; i < psbt.tx->vin.size(); ++i) {
1695 if (!merged_psbt.
AddInput(psbt.tx->vin[i], psbt.inputs[i])) {
1699 for (
unsigned int i = 0; i < psbt.tx->vout.size(); ++i) {
1700 merged_psbt.
AddOutput(psbt.tx->vout[i], psbt.outputs[i]);
1702 for (
auto& xpub_pair : psbt.m_xpubs) {
1703 if (merged_psbt.
m_xpubs.count(xpub_pair.first) == 0) {
1704 merged_psbt.
m_xpubs[xpub_pair.first] = xpub_pair.second;
1706 merged_psbt.
m_xpubs[xpub_pair.first].insert(xpub_pair.second.begin(), xpub_pair.second.end());
1709 merged_psbt.
unknown.insert(psbt.unknown.begin(), psbt.unknown.end());
1713 std::vector<int> input_indices(merged_psbt.
inputs.size());
1714 std::iota(input_indices.begin(), input_indices.end(), 0);
1715 std::vector<int> output_indices(merged_psbt.
outputs.size());
1716 std::iota(output_indices.begin(), output_indices.end(), 0);
1724 shuffled_psbt.tx->nVersion = merged_psbt.
tx->nVersion;
1725 shuffled_psbt.tx->nLockTime = merged_psbt.
tx->nLockTime;
1726 for (
int i : input_indices) {
1727 shuffled_psbt.AddInput(merged_psbt.
tx->vin[i], merged_psbt.
inputs[i]);
1729 for (
int i : output_indices) {
1730 shuffled_psbt.AddOutput(merged_psbt.
tx->vout[i], merged_psbt.
outputs[i]);
1732 shuffled_psbt.unknown.insert(merged_psbt.
unknown.begin(), merged_psbt.
unknown.end());
1735 ssTx << shuffled_psbt;
1744 "\nAnalyzes and provides information about the current status of a PSBT and its inputs\n",
1757 {
RPCResult::Type::OBJ,
"missing",
true,
"Things that are missing that are required to complete this input",
1761 {
RPCResult::Type::STR_HEX,
"keyid",
"Public key ID, hash160 of the public key, of a public key whose BIP 32 derivation path is missing"},
1765 {
RPCResult::Type::STR_HEX,
"keyid",
"Public key ID, hash160 of the public key, of a public key whose signature is missing"},
1770 {
RPCResult::Type::STR,
"next",
true,
"Role of the next person that this input needs to go to"},
1773 {
RPCResult::Type::NUM,
"estimated_vsize",
true,
"Estimated vsize of the final signed transaction"},
1774 {
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"},
1775 {
RPCResult::Type::STR_AMOUNT,
"fee",
true,
"The transaction fee paid. Shown only if all UTXO slots in the PSBT have been filled"},
1798 for (
const auto& input : psbta.
inputs) {
1802 input_univ.
pushKV(
"has_utxo", input.has_utxo);
1803 input_univ.
pushKV(
"is_final", input.is_final);
1806 if (!input.missing_pubkeys.empty()) {
1808 for (
const CKeyID& pubkey : input.missing_pubkeys) {
1811 missing.
pushKV(
"pubkeys", missing_pubkeys_univ);
1813 if (!input.missing_redeem_script.IsNull()) {
1814 missing.
pushKV(
"redeemscript",
HexStr(input.missing_redeem_script));
1816 if (!input.missing_witness_script.IsNull()) {
1817 missing.
pushKV(
"witnessscript",
HexStr(input.missing_witness_script));
1819 if (!input.missing_sigs.empty()) {
1821 for (
const CKeyID& pubkey : input.missing_sigs) {
1824 missing.
pushKV(
"signatures", missing_sigs_univ);
1826 if (!missing.
getKeys().empty()) {
1827 input_univ.
pushKV(
"missing", missing);
1831 if (!inputs_result.
empty()) result.
pushKV(
"inputs", inputs_result);
1839 if (psbta.
fee != std::nullopt) {
1843 if (!psbta.
error.empty()) {
1870 for (
const auto& c : commands) {
1871 t.appendCommand(c.name, &c);
std::shared_ptr< const CTransaction > CTransactionRef
std::vector< CScript > EvalDescriptorStringOrObject(const UniValue &scanobject, FlatSigningProvider &provider)
Evaluate a descriptor given as a string, or as a {"desc":...,"range":...} object, with default range ...
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. ...
CCoinsViewCache & CoinsTip() EXCLUSIVE_LOCKS_REQUIRED(
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.
int64_t GetBlockTime() const
bool IsNull() const
Test whether this is the 0 key (the result of default construction).
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)
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()
CScriptWitness scriptWitness
Only serialized through CTransaction.
CChain & ActiveChain() const EXCLUSIVE_LOCKS_REQUIRED(GetMutex())
static RPCHelpMan combinerawtransaction()
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
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.
Double ended buffer combining vector and stream-like interfaces.
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
CTransactionRef GetTransaction(const CBlockIndex *const block_index, const CTxMemPool *const mempool, const uint256 &hash, const Consensus::Params &consensusParams, uint256 &hashBlock)
Return transaction with a given hash.
CChain m_chain
The current chain of blockheaders we consult and build on.
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.
unspendable OP_RETURN script that carries data
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)
static void TxToJSON(const CTransaction &tx, const uint256 hashBlock, UniValue &entry, Chainstate &active_chainstate)
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...
std::string HexStr(const Span< const uint8_t > s)
Convert a span of bytes to a lower-case hexadecimal string.
Abstract view on the open txout dataset.
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
const Consensus::Params & GetConsensus() const
const std::string CURRENCY_UNIT
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.
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)
CScript GetScriptForDestination(const CTxDestination &dest)
Generate a Bitcoin scriptPubKey for the given CTxDestination.
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
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.
Optional arg that is a named argument and has a default value of null.
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.
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 with default value omitted because they are implicitly clear.
void Shuffle(I first, I last, R &&rng)
More efficient than using std::shuffle on a FastRandomContext.
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.
The block chain is a tree shaped structure starting with the genesis block at the root...
void pushKV(std::string key, UniValue val)
Serialized script, used inside transaction inputs and outputs.
int RPCSerializationFlags()
ChainstateManager & EnsureChainman(const NodeContext &node)
static const int PROTOCOL_VERSION
network protocol versioning
std::string WriteHDKeypath(const std::vector< uint32_t > &keypath)
Write HD keypaths as strings.
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.
RecursiveMutex cs_main
Mutex to guard access to validation specific variables, such as reading or changing the chainstate...
void UpdateInput(CTxIn &input, const SignatureData &data)
Special type representing a floating point amount (can be either NUM or STR)
TxoutType Solver(const CScript &scriptPubKey, std::vector< std::vector< unsigned char >> &vSolutionsRet)
Parse a scriptPubKey and identify script type for standard scripts.
bool DecodeHexTx(CMutableTransaction &tx, const std::string &hex_tx, bool try_no_witness=false, bool try_witness=true)
std::string GetHex() const
Only for Witness versions not already defined above.
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::string EncodeDestination(const CTxDestination &dest)
A mutable version of CTransaction.
static RPCHelpMan decodepsbt()
void ScriptToUniv(const CScript &script, UniValue &out, bool include_hex=true, bool include_address=false)
std::vector< std::tuple< uint8_t, uint8_t, CScript > > m_tap_tree
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
UniValue JSONRPCTransactionError(TransactionError terr, const std::string &err_string)
Chainstate & ActiveChainstate() const
The most-work chain.
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.
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.
bool error(const char *fmt, const Args &... args)
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
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...
Special type to denote elision (...)
bool IsValid() const
Check whether this private key is valid.
static RPCHelpMan joinpsbts()
PrecomputedTransactionData PrecomputePSBTData(const PartiallySignedTransaction &psbt)
Compute a PrecomputedTransactionData object from a psbt.
void RPCTypeCheck(const UniValue ¶ms, const std::list< UniValueType > &typesExpected, bool fAllowNull)
Type-check arguments; throws JSONRPCError if wrong type given.
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...