#ifndef BITCOIN_RPC_RAWTRANSACTION_UTIL_H
#define BITCOIN_RPC_RAWTRANSACTION_UTIL_H
#include <addresstype.h>
#include <consensus/amount.h>
#include <map>
#include <string>
#include <optional>
struct bilingual_str;
struct FlatSigningProvider;
class UniValue;
struct CMutableTransaction;
class Coin;
class COutPoint;
class SigningProvider;
void SignTransaction(CMutableTransaction& mtx, const SigningProvider* keystore, const std::map<COutPoint, Coin>& coins, const UniValue& hashType, UniValue& result);
void SignTransactionResultToJSON(CMutableTransaction& mtx, bool complete, const std::map<COutPoint, Coin>& coins, const std::map<int, bilingual_str>& input_errors, UniValue& result);
void ParsePrevouts(const UniValue& prevTxsUnival, FlatSigningProvider* keystore, std::map<COutPoint, Coin>& coins);
void AddInputs(CMutableTransaction& rawTx, const UniValue& inputs_in, bool rbf);
UniValue NormalizeOutputs(const UniValue& outputs_in);
std::vector<std::pair<CTxDestination, CAmount>> ParseOutputs(const UniValue& outputs);
void AddOutputs(CMutableTransaction& rawTx, const UniValue& outputs_in);
CMutableTransaction ConstructTransaction(const UniValue& inputs_in, const UniValue& outputs_in, const UniValue& locktime, std::optional<bool> rbf);
#endif