mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-15 11:36:00 -05:00
Remove confusing OutputType::CHANGE_AUTO
This commit is contained in:
parent
fa2eb38352
commit
faddad71f6
4 changed files with 27 additions and 25 deletions
|
@ -18,14 +18,6 @@ enum class OutputType {
|
||||||
LEGACY,
|
LEGACY,
|
||||||
P2SH_SEGWIT,
|
P2SH_SEGWIT,
|
||||||
BECH32,
|
BECH32,
|
||||||
|
|
||||||
/**
|
|
||||||
* Special output type for change outputs only. Automatically choose type
|
|
||||||
* based on address type setting and the types other of non-change outputs
|
|
||||||
* (see -changetype option documentation and implementation in
|
|
||||||
* CWallet::TransactionChangeType for details).
|
|
||||||
*/
|
|
||||||
CHANGE_AUTO,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const std::array<OutputType, 3> OUTPUT_TYPES;
|
extern const std::array<OutputType, 3> OUTPUT_TYPES;
|
||||||
|
|
|
@ -306,7 +306,7 @@ static UniValue getrawchangeaddress(const JSONRPCRequest& request)
|
||||||
throw JSONRPCError(RPC_WALLET_ERROR, "Error: This wallet has no available keys");
|
throw JSONRPCError(RPC_WALLET_ERROR, "Error: This wallet has no available keys");
|
||||||
}
|
}
|
||||||
|
|
||||||
OutputType output_type = pwallet->m_default_change_type != OutputType::CHANGE_AUTO ? pwallet->m_default_change_type : pwallet->m_default_address_type;
|
OutputType output_type = pwallet->m_default_change_type.get_value_or(pwallet->m_default_address_type);
|
||||||
if (!request.params[0].isNull()) {
|
if (!request.params[0].isNull()) {
|
||||||
if (!ParseOutputType(request.params[0].get_str(), output_type)) {
|
if (!ParseOutputType(request.params[0].get_str(), output_type)) {
|
||||||
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, strprintf("Unknown address type '%s'", request.params[0].get_str()));
|
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, strprintf("Unknown address type '%s'", request.params[0].get_str()));
|
||||||
|
@ -2993,10 +2993,11 @@ void FundTransaction(CWallet* const pwallet, CMutableTransaction& tx, CAmount& f
|
||||||
if (options.exists("changeAddress")) {
|
if (options.exists("changeAddress")) {
|
||||||
throw JSONRPCError(RPC_INVALID_PARAMETER, "Cannot specify both changeAddress and address_type options");
|
throw JSONRPCError(RPC_INVALID_PARAMETER, "Cannot specify both changeAddress and address_type options");
|
||||||
}
|
}
|
||||||
coinControl.m_change_type = pwallet->m_default_change_type;
|
OutputType out_type;
|
||||||
if (!ParseOutputType(options["change_type"].get_str(), *coinControl.m_change_type)) {
|
if (!ParseOutputType(options["change_type"].get_str(), out_type)) {
|
||||||
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, strprintf("Unknown change type '%s'", options["change_type"].get_str()));
|
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, strprintf("Unknown change type '%s'", options["change_type"].get_str()));
|
||||||
}
|
}
|
||||||
|
coinControl.m_change_type.emplace(out_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
coinControl.fAllowWatchOnly = ParseIncludeWatchonly(options["includeWatching"], *pwallet);
|
coinControl.fAllowWatchOnly = ParseIncludeWatchonly(options["includeWatching"], *pwallet);
|
||||||
|
|
|
@ -2653,11 +2653,11 @@ static uint32_t GetLocktimeForNewTransaction(interfaces::Chain& chain, const uin
|
||||||
return locktime;
|
return locktime;
|
||||||
}
|
}
|
||||||
|
|
||||||
OutputType CWallet::TransactionChangeType(OutputType change_type, const std::vector<CRecipient>& vecSend)
|
OutputType CWallet::TransactionChangeType(const Optional<OutputType>& change_type, const std::vector<CRecipient>& vecSend)
|
||||||
{
|
{
|
||||||
// If -changetype is specified, always use that change type.
|
// If -changetype is specified, always use that change type.
|
||||||
if (change_type != OutputType::CHANGE_AUTO) {
|
if (change_type) {
|
||||||
return change_type;
|
return *change_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if m_default_address_type is legacy, use legacy address as change (even
|
// if m_default_address_type is legacy, use legacy address as change (even
|
||||||
|
@ -3826,15 +3826,21 @@ std::shared_ptr<CWallet> CWallet::CreateWalletFromFile(interfaces::Chain& chain,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gArgs.GetArg("-addresstype", "").empty() && !ParseOutputType(gArgs.GetArg("-addresstype", ""), walletInstance->m_default_address_type)) {
|
if (!gArgs.GetArg("-addresstype", "").empty()) {
|
||||||
|
if (!ParseOutputType(gArgs.GetArg("-addresstype", ""), walletInstance->m_default_address_type)) {
|
||||||
error = strprintf(_("Unknown address type '%s'"), gArgs.GetArg("-addresstype", ""));
|
error = strprintf(_("Unknown address type '%s'"), gArgs.GetArg("-addresstype", ""));
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!gArgs.GetArg("-changetype", "").empty() && !ParseOutputType(gArgs.GetArg("-changetype", ""), walletInstance->m_default_change_type)) {
|
if (!gArgs.GetArg("-changetype", "").empty()) {
|
||||||
|
OutputType out_type;
|
||||||
|
if (!ParseOutputType(gArgs.GetArg("-changetype", ""), out_type)) {
|
||||||
error = strprintf(_("Unknown change type '%s'"), gArgs.GetArg("-changetype", ""));
|
error = strprintf(_("Unknown change type '%s'"), gArgs.GetArg("-changetype", ""));
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
walletInstance->m_default_change_type = out_type;
|
||||||
|
}
|
||||||
|
|
||||||
if (gArgs.IsArgSet("-mintxfee")) {
|
if (gArgs.IsArgSet("-mintxfee")) {
|
||||||
CAmount n = 0;
|
CAmount n = 0;
|
||||||
|
|
|
@ -105,9 +105,6 @@ class ReserveDestination;
|
||||||
//! Default for -addresstype
|
//! Default for -addresstype
|
||||||
constexpr OutputType DEFAULT_ADDRESS_TYPE{OutputType::BECH32};
|
constexpr OutputType DEFAULT_ADDRESS_TYPE{OutputType::BECH32};
|
||||||
|
|
||||||
//! Default for -changetype
|
|
||||||
constexpr OutputType DEFAULT_CHANGE_TYPE{OutputType::CHANGE_AUTO};
|
|
||||||
|
|
||||||
static constexpr uint64_t KNOWN_WALLET_FLAGS =
|
static constexpr uint64_t KNOWN_WALLET_FLAGS =
|
||||||
WALLET_FLAG_AVOID_REUSE
|
WALLET_FLAG_AVOID_REUSE
|
||||||
| WALLET_FLAG_BLANK_WALLET
|
| WALLET_FLAG_BLANK_WALLET
|
||||||
|
@ -934,7 +931,7 @@ public:
|
||||||
Balance GetBalance(int min_depth = 0, bool avoid_reuse = true) const;
|
Balance GetBalance(int min_depth = 0, bool avoid_reuse = true) const;
|
||||||
CAmount GetAvailableBalance(const CCoinControl* coinControl = nullptr) const;
|
CAmount GetAvailableBalance(const CCoinControl* coinControl = nullptr) const;
|
||||||
|
|
||||||
OutputType TransactionChangeType(OutputType change_type, const std::vector<CRecipient>& vecSend);
|
OutputType TransactionChangeType(const Optional<OutputType>& change_type, const std::vector<CRecipient>& vecSend);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Insert additional inputs into the transaction by
|
* Insert additional inputs into the transaction by
|
||||||
|
@ -1012,7 +1009,13 @@ public:
|
||||||
CFeeRate m_fallback_fee{DEFAULT_FALLBACK_FEE};
|
CFeeRate m_fallback_fee{DEFAULT_FALLBACK_FEE};
|
||||||
CFeeRate m_discard_rate{DEFAULT_DISCARD_FEE};
|
CFeeRate m_discard_rate{DEFAULT_DISCARD_FEE};
|
||||||
OutputType m_default_address_type{DEFAULT_ADDRESS_TYPE};
|
OutputType m_default_address_type{DEFAULT_ADDRESS_TYPE};
|
||||||
OutputType m_default_change_type{DEFAULT_CHANGE_TYPE};
|
/**
|
||||||
|
* Default output type for change outputs. When unset, automatically choose type
|
||||||
|
* based on address type setting and the types other of non-change outputs
|
||||||
|
* (see -changetype option documentation and implementation in
|
||||||
|
* CWallet::TransactionChangeType for details).
|
||||||
|
*/
|
||||||
|
Optional<OutputType> m_default_change_type{};
|
||||||
/** Absolute maximum transaction fee (in satoshis) used by default for the wallet */
|
/** Absolute maximum transaction fee (in satoshis) used by default for the wallet */
|
||||||
CAmount m_default_max_tx_fee{DEFAULT_TRANSACTION_MAXFEE};
|
CAmount m_default_max_tx_fee{DEFAULT_TRANSACTION_MAXFEE};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue