merge bitcoin#21415: remove Optional & nullopt

This commit is contained in:
Kittywhiskers Van Gogh 2022-10-16 01:41:49 +05:30 committed by PastaPastaPasta
parent 898fef5c01
commit 41eba6beef
44 changed files with 136 additions and 150 deletions

View File

@ -240,7 +240,6 @@ BITCOIN_CORE_H = \
node/transaction.h \
node/utxo_snapshot.h \
noui.h \
optional.h \
policy/feerate.h \
policy/fees.h \
policy/policy.h \

View File

@ -20,6 +20,7 @@
#include <functional>
#include <memory>
#include <optional>
#include <stdio.h>
#include <tuple>

View File

@ -25,6 +25,7 @@
#include <stacktraces.h>
#include <functional>
#include <optional>
#include <stdio.h>
const std::function<std::string(const char*)> G_TRANSLATION_FUN = nullptr;

View File

@ -229,7 +229,7 @@ bool CalcCbTxMerkleRootQuorums(const CBlock& block, const CBlockIndex* pindexPre
int64_t nTime1 = GetTimeMicros();
auto retVal = CachedGetQcHashesQcIndexedHashes(pindexPrev, quorum_block_processor);
if (retVal == std::nullopt) {
if (!retVal) {
return state.Invalid(ValidationInvalidReason::CONSENSUS, false, REJECT_INVALID, "commitment-not-found");
}
// The returned quorums are in reversed order, so the most recent one is at index 0

View File

@ -139,23 +139,23 @@ class ChainImpl : public Chain
{
public:
explicit ChainImpl(NodeContext& node) : m_node(node) {}
Optional<int> getHeight() override
std::optional<int> getHeight() override
{
LOCK(cs_main);
int height = ::ChainActive().Height();
if (height >= 0) {
return height;
}
return nullopt;
return std::nullopt;
}
Optional<int> getBlockHeight(const uint256& hash) override
std::optional<int> getBlockHeight(const uint256& hash) override
{
LOCK(cs_main);
CBlockIndex* block = LookupBlockIndex(hash);
if (block && ::ChainActive().Contains(block)) {
return block->nHeight;
}
return nullopt;
return std::nullopt;
}
uint256 getBlockHash(int height) override
{
@ -184,7 +184,7 @@ public:
CBlockIndex* block = ::ChainActive()[height];
return block && ((block->nStatus & BLOCK_HAVE_DATA) != 0) && block->nTx > 0;
}
Optional<int> findFirstBlockWithTimeAndHeight(int64_t time, int height, uint256* hash) override
std::optional<int> findFirstBlockWithTimeAndHeight(int64_t time, int height, uint256* hash) override
{
LOCK(cs_main);
CBlockIndex* block = ::ChainActive().FindEarliestAtLeast(time, height);
@ -192,9 +192,9 @@ public:
if (hash) *hash = block->GetBlockHash();
return block->nHeight;
}
return nullopt;
return std::nullopt;
}
Optional<int> findPruned(int start_height, Optional<int> stop_height) override
std::optional<int> findPruned(int start_height, std::optional<int> stop_height) override
{
LOCK(cs_main);
if (::fPruneMode) {
@ -206,9 +206,9 @@ public:
block = block->pprev;
}
}
return nullopt;
return std::nullopt;
}
Optional<int> findFork(const uint256& hash, Optional<int>* height) override
std::optional<int> findFork(const uint256& hash, std::optional<int>* height) override
{
LOCK(cs_main);
const CBlockIndex* block = LookupBlockIndex(hash);
@ -223,20 +223,20 @@ public:
if (fork) {
return fork->nHeight;
}
return nullopt;
return std::nullopt;
}
CBlockLocator getTipLocator() override
{
LOCK(cs_main);
return ::ChainActive().GetLocator();
}
Optional<int> findLocatorFork(const CBlockLocator& locator) override
std::optional<int> findLocatorFork(const CBlockLocator& locator) override
{
LOCK(cs_main);
if (CBlockIndex* fork = FindForkInGlobalIndex(::ChainActive(), locator)) {
return fork->nHeight;
}
return nullopt;
return std::nullopt;
}
bool checkFinalTx(const CTransaction& tx) override
{

View File

@ -5,11 +5,11 @@
#ifndef BITCOIN_INTERFACES_CHAIN_H
#define BITCOIN_INTERFACES_CHAIN_H
#include <optional.h> // For Optional and nullopt
#include <primitives/transaction.h> // For CTransactionRef
#include <util/settings.h> // For util::SettingsValue
#include <memory>
#include <optional>
#include <stddef.h>
#include <stdint.h>
#include <string>
@ -76,12 +76,12 @@ public:
//! Get current chain height, not including genesis block (returns 0 if
//! chain only contains genesis block, nullopt if chain does not contain
//! any blocks)
virtual Optional<int> getHeight() = 0;
virtual std::optional<int> getHeight() = 0;
//! Get block height above genesis block. Returns 0 for genesis block,
//! 1 for following block, and so on. Returns nullopt for a block not
//! included in the current chain.
virtual Optional<int> getBlockHeight(const uint256& hash) = 0;
virtual std::optional<int> getBlockHeight(const uint256& hash) = 0;
//! Get block hash. Height must be valid or this function will abort.
virtual uint256 getBlockHash(int height) = 0;
@ -102,11 +102,11 @@ public:
//! given height, or nullopt if there is no block with a high enough
//! timestamp and height. Also return the block hash as an optional output parameter
//! (to avoid the cost of a second lookup in case this information is needed.)
virtual Optional<int> findFirstBlockWithTimeAndHeight(int64_t time, int height, uint256* hash) = 0;
virtual std::optional<int> findFirstBlockWithTimeAndHeight(int64_t time, int height, uint256* hash) = 0;
//! Return height of last block in the specified range which is pruned, or
//! nullopt if no block in the range is pruned. Range is inclusive.
virtual Optional<int> findPruned(int start_height = 0, Optional<int> stop_height = nullopt) = 0;
virtual std::optional<int> findPruned(int start_height = 0, std::optional<int> stop_height = std::nullopt) = 0;
//! Return height of the specified block if it is on the chain, otherwise
//! return the height of the highest block on chain that's an ancestor
@ -114,7 +114,7 @@ public:
//! Also return the height of the specified block as an optional output
//! parameter (to avoid the cost of a second hash lookup in case this
//! information is desired).
virtual Optional<int> findFork(const uint256& hash, Optional<int>* height) = 0;
virtual std::optional<int> findFork(const uint256& hash, std::optional<int>* height) = 0;
//! Get locator for the current chain tip.
virtual CBlockLocator getTipLocator() = 0;
@ -122,7 +122,7 @@ public:
//! Return height of the highest block on chain in common with the locator,
//! which will either be the original block used to create the locator,
//! or one of its ancestors.
virtual Optional<int> findLocatorFork(const CBlockLocator& locator) = 0;
virtual std::optional<int> findLocatorFork(const CBlockLocator& locator) = 0;
//! Check if transaction will be final given chain height current time.
virtual bool checkFinalTx(const CTransaction& tx) = 0;

View File

@ -369,7 +369,7 @@ public:
if (mi == m_wallet->mapWallet.end()) {
return false;
}
if (Optional<int> height = m_wallet->chain().getHeight()) {
if (std::optional<int> height = m_wallet->chain().getHeight()) {
block_time = m_wallet->chain().getBlockTime(*height);
} else {
block_time = -1;

View File

@ -13,6 +13,7 @@
#include <saltedhasher.h>
#include <streams.h>
#include <sync.h>
#include <optional>
class CNode;

View File

@ -291,8 +291,8 @@ bool BuildQuorumRotationInfo(const CGetQuorumRotationInfo& request, CQuorumRotat
response.mnListDiffAtHMinus4C = std::move(mn4c);
} else {
response.extraShare = false;
response.quorumSnapshotAtHMinus4C = std::nullopt;
response.mnListDiffAtHMinus4C = std::nullopt;
response.quorumSnapshotAtHMinus4C.reset();
response.mnListDiffAtHMinus4C.reset();
}
std::set<int> snapshotHeightsNeeded;

View File

@ -11,9 +11,10 @@
#include <random.h>
#include <set>
#include <sync.h>
#include <versionbits.h>
#include <optional>
#include <vector>
#include <versionbits.h>
class CConnman;
class CBlockIndex;

View File

@ -107,9 +107,6 @@ void BlockAssembler::resetBlock()
nFees = 0;
}
Optional<int64_t> BlockAssembler::m_last_block_num_txs{nullopt};
Optional<int64_t> BlockAssembler::m_last_block_size{nullopt};
std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& scriptPubKeyIn)
{
int64_t nTimeStart = GetTimeMicros();

View File

@ -6,12 +6,12 @@
#ifndef BITCOIN_MINER_H
#define BITCOIN_MINER_H
#include <optional.h>
#include <primitives/block.h>
#include <txmempool.h>
#include <validation.h>
#include <memory>
#include <optional>
#include <stdint.h>
#include <boost/multi_index_container.hpp>
@ -178,8 +178,8 @@ public:
/** Construct a new block template with coinbase to scriptPubKeyIn */
std::unique_ptr<CBlockTemplate> CreateNewBlock(const CScript& scriptPubKeyIn);
static Optional<int64_t> m_last_block_num_txs;
static Optional<int64_t> m_last_block_size;
inline static std::optional<int64_t> m_last_block_num_txs{};
inline static std::optional<int64_t> m_last_block_size{};
private:
// utility functions

View File

@ -662,7 +662,7 @@ bool CNode::ReceiveMsgBytes(const char *pch, unsigned int nBytes, bool& complete
if (m_deserializer->Complete()) {
// decompose a transport agnostic CNetMessage from the deserializer
uint32_t out_err_raw_size{0};
Optional<CNetMessage> result{m_deserializer->GetMessage(nTimeMicros, out_err_raw_size)};
std::optional<CNetMessage> result{m_deserializer->GetMessage(nTimeMicros, out_err_raw_size)};
if (!result) {
// Message deserialization failed. Drop the message but don't disconnect the peer.
// store the size of the corrupt message
@ -780,10 +780,10 @@ const uint256& V1TransportDeserializer::GetMessageHash() const
return data_hash;
}
Optional<CNetMessage> V1TransportDeserializer::GetMessage(int64_t time, uint32_t& out_err_raw_size)
std::optional<CNetMessage> V1TransportDeserializer::GetMessage(int64_t time, uint32_t& out_err_raw_size)
{
// decompose a single CNetMessage from the TransportDeserializer
Optional<CNetMessage> msg(std::move(vRecv));
std::optional<CNetMessage> msg(std::move(vRecv));
// store command string, time, and sizes
msg->m_command = hdr.GetCommand();
@ -804,12 +804,12 @@ Optional<CNetMessage> V1TransportDeserializer::GetMessage(int64_t time, uint32_t
HexStr(Span<uint8_t>(hdr.pchChecksum, hdr.pchChecksum+CMessageHeader::CHECKSUM_SIZE)),
m_node_id);
out_err_raw_size = msg->m_raw_message_size;
msg = nullopt;
msg.reset();
} else if (!hdr.IsCommandValid()) {
LogPrint(BCLog::NET, "HEADER ERROR - COMMAND (%s, %u bytes), peer=%d\n",
hdr.GetCommand(), msg->m_message_size, m_node_id);
out_err_raw_size = msg->m_raw_message_size;
msg = nullopt;
msg.reset();
}
// Always reset the network deserializer (prepare for the next message)

View File

@ -17,7 +17,6 @@
#include <limitedmap.h>
#include <net_permissions.h>
#include <netaddress.h>
#include <optional.h>
#include <policy/feerate.h>
#include <protocol.h>
#include <random.h>
@ -36,6 +35,7 @@
#include <memory>
#include <condition_variable>
#include <unordered_set>
#include <optional>
#include <queue>
#ifndef WIN32
@ -854,7 +854,7 @@ public:
// read and deserialize data
virtual int Read(const char *data, unsigned int bytes) = 0;
// decomposes a message from the context
virtual Optional<CNetMessage> GetMessage(int64_t time, uint32_t& out_err) = 0;
virtual std::optional<CNetMessage> GetMessage(int64_t time, uint32_t& out_err) = 0;
virtual ~TransportDeserializer() {}
};
@ -913,7 +913,7 @@ public:
if (ret < 0) Reset();
return ret;
}
Optional<CNetMessage> GetMessage(int64_t time, uint32_t& out_err_raw_size) override;
std::optional<CNetMessage> GetMessage(int64_t time, uint32_t& out_err_raw_size) override;
};
/** The TransportSerializer prepares messages for the network transport

View File

@ -1,20 +0,0 @@
// Copyright (c) 2017 The Bitcoin Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_OPTIONAL_H
#define BITCOIN_OPTIONAL_H
#include <optional>
#include <utility>
//! Substitute for C++17 std::optional
//! DEPRECATED use std::optional in new code.
template <typename T>
using Optional = std::optional<T>;
//! Substitute for C++17 std::nullopt
//! DEPRECATED use std::nullopt in new code.
static auto& nullopt = std::nullopt;
#endif // BITCOIN_OPTIONAL_H

View File

@ -7,13 +7,14 @@
#include <attributes.h>
#include <node/transaction.h>
#include <optional.h>
#include <policy/feerate.h>
#include <primitives/transaction.h>
#include <pubkey.h>
#include <script/sign.h>
#include <script/signingprovider.h>
#include <optional>
// Magic bytes
static constexpr uint8_t PSBT_MAGIC_BYTES[5] = {'p', 's', 'b', 't', 0xff};
@ -315,7 +316,7 @@ struct PSBTOutput
/** A version of CTransaction with the PSBT format*/
struct PartiallySignedTransaction
{
Optional<CMutableTransaction> tx;
std::optional<CMutableTransaction> tx;
std::vector<PSBTInput> inputs;
std::vector<PSBTOutput> outputs;
std::map<std::vector<unsigned char>, std::vector<unsigned char>> unknown;
@ -509,9 +510,9 @@ struct PSBTInputAnalysis {
* Holds the results of AnalyzePSBT (miscellaneous information about a PSBT)
*/
struct PSBTAnalysis {
Optional<size_t> estimated_vsize; //!< Estimated weight of the transaction
Optional<CFeeRate> estimated_feerate; //!< Estimated feerate (fee / weight) of the transaction
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
std::optional<CAmount> fee; //!< Amount of fee being paid by the transaction
std::vector<PSBTInputAnalysis> inputs; //!< More information about the individual inputs of the transaction
PSBTRole next; //!< Which of the BIP 174 roles needs to handle the transaction next
};

View File

@ -106,7 +106,7 @@ void TestAddAddressesToSendBook(interfaces::Node& node)
OptionsModel optionsModel(node);
AddWallet(wallet);
WalletModel walletModel(interfaces::MakeWallet(wallet), node, &optionsModel);
RemoveWallet(wallet, nullopt);
RemoveWallet(wallet, std::nullopt);
EditAddressDialog editAddressDialog(EditAddressDialog::NewSendingAddress);
editAddressDialog.setModel(walletModel.getAddressTableModel());

View File

@ -211,7 +211,7 @@ void TestGUI(interfaces::Node& node)
QPushButton* removeRequestButton = receiveCoinsDialog.findChild<QPushButton*>("removeRequestButton");
removeRequestButton->click();
QCOMPARE(requestTableModel->rowCount({}), currentRowCount-1);
RemoveWallet(wallet, nullopt);
RemoveWallet(wallet, std::nullopt);
}
} // namespace

View File

@ -1664,13 +1664,13 @@ UniValue analyzepsbt(const JSONRPCRequest& request)
}
result.pushKV("inputs", inputs_result);
if (psbta.estimated_vsize != nullopt) {
if (psbta.estimated_vsize) {
result.pushKV("estimated_vsize", (int)*psbta.estimated_vsize);
}
if (psbta.estimated_feerate != nullopt) {
if (psbta.estimated_feerate) {
result.pushKV("estimated_feerate", ValueFromAmount(psbta.estimated_feerate->GetFeePerK()));
}
if (psbta.fee != nullopt) {
if (psbta.fee) {
result.pushKV("fee", ValueFromAmount(*psbta.fee));
}
result.pushKV("next", PSBTRoleName(psbta.next));

View File

@ -16,6 +16,7 @@
#include <util/system.h>
#include <memory>
#include <optional>
#include <string>
#include <vector>

View File

@ -2,7 +2,6 @@
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include <optional.h>
#include <streams.h>
#include <test/fuzz/FuzzedDataProvider.h>
#include <test/fuzz/fuzz.h>

View File

@ -2,7 +2,6 @@
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include <optional.h>
#include <streams.h>
#include <test/fuzz/FuzzedDataProvider.h>
#include <test/fuzz/fuzz.h>

View File

@ -7,7 +7,6 @@
#include <net.h>
#include <net_permissions.h>
#include <netaddress.h>
#include <optional.h>
#include <protocol.h>
#include <random.h>
#include <test/fuzz/FuzzedDataProvider.h>
@ -16,6 +15,7 @@
#include <test/util/setup_common.h>
#include <cstdint>
#include <optional>
#include <string>
#include <vector>

View File

@ -10,6 +10,7 @@
#include <cassert>
#include <cstdint>
#include <limits>
#include <optional>
#include <vector>
void initialize_p2p_transport_deserializer()
@ -33,7 +34,7 @@ FUZZ_TARGET_INIT(p2p_transport_deserializer, initialize_p2p_transport_deserializ
if (deserializer.Complete()) {
const int64_t m_time = std::numeric_limits<int64_t>::max();
uint32_t out_err_raw_size{0};
Optional<CNetMessage> result{deserializer.GetMessage(m_time, out_err_raw_size)};
std::optional<CNetMessage> result{deserializer.GetMessage(m_time, out_err_raw_size)};
if (result) {
assert(result->m_command.size() <= CMessageHeader::COMMAND_SIZE);
assert(result->m_raw_message_size <= buffer.size());

View File

@ -5,7 +5,6 @@
#include <test/fuzz/fuzz.h>
#include <psbt.h>
#include <optional.h>
#include <pubkey.h>
#include <script/script.h>
#include <streams.h>
@ -13,6 +12,7 @@
#include <cstdint>
#include <string>
#include <optional>
#include <vector>
void initialize_psbt()
@ -39,7 +39,7 @@ FUZZ_TARGET_INIT(psbt, initialize_psbt)
(void)psbt.IsNull();
(void)psbt.IsSane();
Optional<CMutableTransaction> tx = psbt.tx;
std::optional<CMutableTransaction> tx = psbt.tx;
if (tx) {
const CMutableTransaction& mtx = *tx;
const PartiallySignedTransaction psbt_from_tx{mtx};

View File

@ -2,7 +2,6 @@
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include <optional.h>
#include <pubkey.h>
#include <script/descriptor.h>
#include <test/fuzz/FuzzedDataProvider.h>
@ -10,6 +9,7 @@
#include <test/fuzz/util.h>
#include <cstdint>
#include <optional>
#include <string>
#include <vector>

View File

@ -54,7 +54,7 @@ FUZZ_TARGET(system)
// Avoid hitting:
// util/system.cpp:425: void ArgsManager::AddArg(const std::string &, const std::string &, unsigned int, const OptionsCategory &): Assertion `ret.second' failed.
const std::string argument_name = GetArgumentName(fuzzed_data_provider.ConsumeRandomLengthString(16));
if (args_manager.GetArgFlags(argument_name) != nullopt) {
if (args_manager.GetArgFlags(argument_name)) {
break;
}
args_manager.AddArg(argument_name, fuzzed_data_provider.ConsumeRandomLengthString(16), fuzzed_data_provider.ConsumeIntegral<unsigned int>(), options_category);
@ -67,7 +67,7 @@ FUZZ_TARGET(system)
std::vector<std::string> hidden_arguments;
for (const std::string& name : names) {
const std::string hidden_argument = GetArgumentName(name);
if (args_manager.GetArgFlags(hidden_argument) != nullopt) {
if (args_manager.GetArgFlags(hidden_argument)) {
continue;
}
if (std::find(hidden_arguments.begin(), hidden_arguments.end(), hidden_argument) != hidden_arguments.end()) {

View File

@ -8,7 +8,6 @@
#include <consensus/consensus.h>
#include <consensus/tx_verify.h>
#include <consensus/validation.h>
#include <optional.h>
#include <validation.h>
#include <policy/policy.h>
#include <policy/fees.h>
@ -25,6 +24,8 @@
#include <evo/deterministicmns.h>
#include <llmq/instantsend.h>
#include <optional>
CTxMemPoolEntry::CTxMemPoolEntry(const CTransactionRef& _tx, const CAmount& _nFee,
int64_t _nTime, unsigned int _entryHeight,
bool _spendsCoinbase, unsigned int _sigOps, LockPoints lp)
@ -165,7 +166,7 @@ bool CTxMemPool::CalculateMemPoolAncestors(const CTxMemPoolEntry &entry, setEntr
// GetMemPoolParents() is only valid for entries in the mempool, so we
// iterate mapTx to find parents.
for (unsigned int i = 0; i < tx.vin.size(); i++) {
Optional<txiter> piter = GetIter(tx.vin[i].prevout.hash);
std::optional<txiter> piter = GetIter(tx.vin[i].prevout.hash);
if (piter) {
parentHashes.insert(*piter);
if (parentHashes.size() + 1 > limitAncestorCount) {
@ -1376,11 +1377,11 @@ const CTransaction* CTxMemPool::GetConflictTx(const COutPoint& prevout) const
return it == mapNextTx.end() ? nullptr : it->second;
}
Optional<CTxMemPool::txiter> CTxMemPool::GetIter(const uint256& txid) const
std::optional<CTxMemPool::txiter> CTxMemPool::GetIter(const uint256& txid) const
{
auto it = mapTx.find(txid);
if (it != mapTx.end()) return it;
return Optional<txiter>{};
return {};
}
CTxMemPool::setEntries CTxMemPool::GetIterSet(const std::set<uint256>& hashes) const

View File

@ -8,6 +8,7 @@
#include <atomic>
#include <map>
#include <optional>
#include <set>
#include <string>
#include <utility>
@ -19,7 +20,6 @@
#include <coins.h>
#include <crypto/siphash.h>
#include <indirectmap.h>
#include <optional.h>
#include <policy/feerate.h>
#include <primitives/transaction.h>
#include <sync.h>
@ -645,7 +645,7 @@ public:
const CTransaction* GetConflictTx(const COutPoint& prevout) const EXCLUSIVE_LOCKS_REQUIRED(cs);
/** Returns an iterator to the given hash, if found */
Optional<txiter> GetIter(const uint256& txid) const EXCLUSIVE_LOCKS_REQUIRED(cs);
std::optional<txiter> GetIter(const uint256& txid) const EXCLUSIVE_LOCKS_REQUIRED(cs);
/** Translate a set of hashes into a set of pool iterators to avoid repeated lookups */
setEntries GetIterSet(const std::set<uint256>& hashes) const EXCLUSIVE_LOCKS_REQUIRED(cs);

View File

@ -356,7 +356,7 @@ bool ArgsManager::ParseParameters(int argc, const char* const argv[], std::strin
key.erase(0, 1);
std::string section;
util::SettingsValue value = InterpretOption(section, key, val);
Optional<unsigned int> flags = GetArgFlags('-' + key);
std::optional<unsigned int> flags = GetArgFlags('-' + key);
// Unknown command line options and command line options with dot
// characters (which are returned from InterpretOption with nonempty
@ -382,7 +382,7 @@ bool ArgsManager::ParseParameters(int argc, const char* const argv[], std::strin
return success;
}
Optional<unsigned int> ArgsManager::GetArgFlags(const std::string& name) const
std::optional<unsigned int> ArgsManager::GetArgFlags(const std::string& name) const
{
LOCK(cs_args);
for (const auto& arg_map : m_available_args) {
@ -391,7 +391,7 @@ Optional<unsigned int> ArgsManager::GetArgFlags(const std::string& name) const
return search->second.m_flags;
}
}
return nullopt;
return std::nullopt;
}
std::vector<std::string> ArgsManager::GetArgs(const std::string& strArg) const
@ -875,7 +875,7 @@ bool ArgsManager::ReadConfigStream(std::istream& stream, const std::string& file
std::string section;
std::string key = option.first;
util::SettingsValue value = InterpretOption(section, key, option.second);
Optional<unsigned int> flags = GetArgFlags('-' + key);
std::optional<unsigned int> flags = GetArgFlags('-' + key);
if (flags) {
if (!CheckValid(key, value, *flags, error)) {
return false;
@ -1028,7 +1028,7 @@ void ArgsManager::logArgsPrefix(
std::string section_str = section.empty() ? "" : "[" + section + "] ";
for (const auto& arg : args) {
for (const auto& value : arg.second) {
Optional<unsigned int> flags = GetArgFlags('-' + arg.first);
std::optional<unsigned int> flags = GetArgFlags('-' + arg.first);
if (flags) {
std::string value_str = (*flags & SENSITIVE) ? "****" : value.write();
LogPrintf("%s %s%s=%s\n", prefix, section_str, arg.first, value_str);

View File

@ -20,7 +20,6 @@
#include <compat/assumptions.h>
#include <fs.h>
#include <logging.h>
#include <optional.h>
#include <sync.h>
#include <tinyformat.h>
#include <util/settings.h>
@ -30,6 +29,7 @@
#include <exception>
#include <map>
#include <optional>
#include <set>
#include <stdint.h>
#include <string>
@ -344,7 +344,7 @@ public:
* Return Flags for known arg.
* Return nullopt for unknown arg.
*/
Optional<unsigned int> GetArgFlags(const std::string& name) const;
std::optional<unsigned int> GetArgFlags(const std::string& name) const;
/**
* Read and update settings file with saved settings. This needs to be

View File

@ -21,7 +21,6 @@
#include <index/txindex.h>
#include <logging.h>
#include <logging/timer.h>
#include <optional.h>
#include <policy/fees.h>
#include <policy/policy.h>
#include <policy/settings.h>
@ -62,6 +61,7 @@
#include <statsd_client.h>
#include <optional>
#include <string>
#include <boost/algorithm/string/replace.hpp>
@ -5527,7 +5527,7 @@ public:
};
static CMainCleanup instance_of_cmaincleanup;
Optional<uint256> ChainstateManager::SnapshotBlockhash() const {
std::optional<uint256> ChainstateManager::SnapshotBlockhash() const {
if (m_active_chainstate != nullptr) {
// If a snapshot chainstate exists, it will always be our active.
return m_active_chainstate->m_from_snapshot_blockhash;

View File

@ -15,7 +15,6 @@
#include <coins.h>
#include <crypto/common.h> // for ReadLE64
#include <fs.h>
#include <optional.h>
#include <policy/feerate.h>
#include <protocol.h> // For CMessageHeader::MessageStartChars
#include <script/script_error.h>
@ -29,6 +28,7 @@
#include <atomic>
#include <map>
#include <memory>
#include <optional>
#include <set>
#include <stdint.h>
#include <utility>
@ -884,7 +884,7 @@ public:
bool IsSnapshotActive() const;
Optional<uint256> SnapshotBlockhash() const;
std::optional<uint256> SnapshotBlockhash() const;
//! Is there a snapshot in use and has it been fully validated?
bool IsSnapshotValidated() const { return m_snapshot_validated; }

View File

@ -6,12 +6,13 @@
#define BITCOIN_WALLET_COINCONTROL_H
#include <key.h>
#include <optional.h>
#include <policy/feerate.h>
#include <policy/fees.h>
#include <primitives/transaction.h>
#include <script/standard.h>
#include <optional>
enum class CoinType
{
ALL_COINS,
@ -39,11 +40,11 @@ public:
//! Override automatic min/max checks on fee, m_feerate must be set if true
bool fOverrideFeeRate;
//! Override the wallet's m_pay_tx_fee if set
Optional<CFeeRate> m_feerate;
std::optional<CFeeRate> m_feerate;
//! Override the discard feerate estimation with m_discard_feerate in CreateTransaction if set
Optional<CFeeRate> m_discard_feerate;
std::optional<CFeeRate> m_discard_feerate;
//! Override the default confirmation target if set
Optional<unsigned int> m_confirm_target;
std::optional<unsigned int> m_confirm_target;
//! Avoid partial use of funds sent to a given address
bool m_avoid_partial_spends;
//! Forbids inclusion of dirty (previously used) addresses

View File

@ -4,13 +4,14 @@
#include <wallet/coinselection.h>
#include <optional.h>
#include <util/system.h>
#include <util/moneystr.h>
#include <llmq/instantsend.h>
#include <coinjoin/coinjoin.h>
#include <optional>
// Descending order comparator
struct {
bool operator()(const OutputGroup& a, const OutputGroup& b) const
@ -251,7 +252,7 @@ bool KnapsackSolver(const CAmount& nTargetValue, std::vector<OutputGroup>& group
nValueRet = 0;
// List of values less than target
Optional<OutputGroup> lowest_larger;
std::optional<OutputGroup> lowest_larger;
std::vector<OutputGroup> applicable_groups;
CAmount nTotalLower = 0;

View File

@ -13,6 +13,7 @@
#include <atomic>
#include <memory>
#include <optional>
#include <string>
struct bilingual_str;

View File

@ -159,7 +159,7 @@ void UnloadWallets()
auto wallet = wallets.back();
wallets.pop_back();
std::vector<bilingual_str> warnings;
RemoveWallet(wallet, nullopt, warnings);
RemoveWallet(wallet, std::nullopt, warnings);
UnloadWallet(std::move(wallet));
}
}

View File

@ -323,8 +323,8 @@ UniValue importprunedfunds(const JSONRPCRequest& request)
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Something wrong with merkleblock");
}
Optional<int> height = pwallet->chain().getBlockHeight(merkleBlock.header.GetHash());
if (height == nullopt) {
std::optional<int> height = pwallet->chain().getBlockHeight(merkleBlock.header.GetHash());
if (!height) {
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Block not found in chain");
}
@ -515,7 +515,7 @@ UniValue importwallet(const JSONRPCRequest& request)
if (!file.is_open()) {
throw JSONRPCError(RPC_INVALID_PARAMETER, "Cannot open wallet dump file");
}
Optional<int> tip_height = pwallet->chain().getHeight();
std::optional<int> tip_height = pwallet->chain().getHeight();
nTimeBegin = tip_height ? pwallet->chain().getBlockTime(*tip_height) : 0;
int64_t nFilesize = std::max((int64_t)1, (int64_t)file.tellg());
@ -940,7 +940,7 @@ UniValue dumpwallet(const JSONRPCRequest& request)
// produce output
file << strprintf("# Wallet dump created by Dash Core %s\n", CLIENT_BUILD);
file << strprintf("# * Created on %s\n", FormatISO8601DateTime(GetTime()));
const Optional<int> tip_height = pwallet->chain().getHeight();
const std::optional<int> tip_height = pwallet->chain().getHeight();
file << strprintf("# * Best block at time of backup was %i (%s),\n", tip_height.value_or(-1), tip_height ? pwallet->chain().getBlockHash(*tip_height).ToString() : "(missing block hash)");
file << strprintf("# mined on %s\n", tip_height ? FormatISO8601DateTime(pwallet->chain().getBlockTime(*tip_height)) : "(missing block time)");
file << "\n";
@ -1519,7 +1519,7 @@ UniValue importmulti(const JSONRPCRequest& mainRequest)
EnsureWalletIsUnlocked(pwallet);
// Verify all timestamps are present before importing any keys.
const Optional<int> tip_height = pwallet->chain().getHeight();
const std::optional<int> tip_height = pwallet->chain().getHeight();
now = tip_height ? pwallet->chain().getBlockMedianTimePast(*tip_height) : 0;
for (const UniValue& data : requests.getValues()) {
GetImportTimestamp(data, now);

View File

@ -1581,8 +1581,8 @@ static UniValue listsinceblock(const JSONRPCRequest& request)
LOCK(pwallet->cs_wallet);
Optional<int> height; // Height of the specified block or the common ancestor, if the block provided was in a deactivated chain.
Optional<int> altheight; // Height of the specified block, even if it's in a deactivated chain.
std::optional<int> height; // Height of the specified block or the common ancestor, if the block provided was in a deactivated chain.
std::optional<int> altheight; // Height of the specified block, even if it's in a deactivated chain.
int target_confirms = 1;
isminefilter filter = ISMINE_SPENDABLE;
@ -1610,7 +1610,7 @@ static UniValue listsinceblock(const JSONRPCRequest& request)
bool include_removed = (request.params[3].isNull() || request.params[3].get_bool());
const Optional<int> tip_height = pwallet->chain().getHeight();
const std::optional<int> tip_height = pwallet->chain().getHeight();
int depth = tip_height && height ? (1 + *tip_height - *height) : -1;
UniValue transactions(UniValue::VARR);
@ -2766,7 +2766,7 @@ static UniValue loadwallet(const JSONRPCRequest& request)
options.require_existing = true;
bilingual_str error;
std::vector<bilingual_str> warnings;
Optional<bool> load_on_start = request.params[1].isNull() ? nullopt : Optional<bool>(request.params[1].get_bool());
std::optional<bool> load_on_start = request.params[1].isNull() ? std::nullopt : std::optional<bool>(request.params[1].get_bool());
std::shared_ptr<CWallet> const wallet = LoadWallet(*context.chain, name, load_on_start, options, status, error, warnings);
if (!wallet) {
// Map bad format to not found, since bad format is returned when the
@ -2904,7 +2904,7 @@ static UniValue createwallet(const JSONRPCRequest& request)
options.create_flags = flags;
options.create_passphrase = passphrase;
bilingual_str error;
Optional<bool> load_on_start = request.params[5].isNull() ? nullopt : Optional<bool>(request.params[5].get_bool());
std::optional<bool> load_on_start = request.params[5].isNull() ? std::nullopt : std::optional<bool>(request.params[5].get_bool());
std::shared_ptr<CWallet> wallet = CreateWallet(*context.chain, request.params[0].get_str(), load_on_start, options, status, error, warnings);
if (!wallet) {
RPCErrorCode code = status == DatabaseStatus::FAILED_ENCRYPT ? RPC_WALLET_ENCRYPTION_FAILED : RPC_WALLET_ERROR;
@ -2954,7 +2954,7 @@ static UniValue unloadwallet(const JSONRPCRequest& request)
// Note that any attempt to load the same wallet would fail until the wallet
// is destroyed (see CheckUniqueFileid).
std::vector<bilingual_str> warnings;
Optional<bool> load_on_start = request.params[1].isNull() ? nullopt : Optional<bool>(request.params[1].get_bool());
std::optional<bool> load_on_start = request.params[1].isNull() ? std::nullopt : std::optional<bool>(request.params[1].get_bool());
if (!RemoveWallet(wallet, load_on_start, warnings)) {
throw JSONRPCError(RPC_MISC_ERROR, "Requested wallet already unloaded");
}
@ -3483,7 +3483,7 @@ static UniValue rescanblockchain(const JSONRPCRequest& request)
int start_height = 0;
uint256 start_block, stop_block;
{
Optional<int> tip_height = pwallet->chain().getHeight();
std::optional<int> tip_height = pwallet->chain().getHeight();
if (!request.params[0].isNull()) {
start_height = request.params[0].get_int();
@ -3492,7 +3492,7 @@ static UniValue rescanblockchain(const JSONRPCRequest& request)
}
}
Optional<int> stop_height;
std::optional<int> stop_height;
if (!request.params[1].isNull()) {
stop_height = request.params[1].get_int();
if (*stop_height < 0 || !tip_height || *stop_height > *tip_height) {

View File

@ -148,7 +148,7 @@ public:
~CTransactionBuilderTestSetup()
{
RemoveWallet(wallet, nullopt);
RemoveWallet(wallet, std::nullopt);
}
std::shared_ptr<interfaces::Chain> chain;

View File

@ -51,7 +51,7 @@ static void TestUnloadWallet(std::shared_ptr<CWallet>&& wallet)
std::vector<bilingual_str> warnings;
SyncWithValidationInterfaceQueue();
wallet->m_chain_notifications_handler.reset();
RemoveWallet(wallet, nullopt, warnings);
RemoveWallet(wallet, std::nullopt, warnings);
UnloadWallet(std::move(wallet));
}
@ -232,7 +232,7 @@ BOOST_FIXTURE_TEST_CASE(importmulti_rescan, TestChain100Setup)
"downloading and rescanning the relevant blocks (see -reindex and -rescan "
"options).\"}},{\"success\":true}]",
0, oldTip->GetBlockTimeMax(), TIMESTAMP_WINDOW));
RemoveWallet(wallet, nullopt);
RemoveWallet(wallet, std::nullopt);
}
}
@ -275,7 +275,7 @@ BOOST_FIXTURE_TEST_CASE(importwallet_rescan, TestChain100Setup)
request.params.push_back(backup_file);
AddWallet(wallet);
::dumpwallet(request);
RemoveWallet(wallet, nullopt);
RemoveWallet(wallet, std::nullopt);
}
// Call importwallet RPC and verify all blocks with timestamps >= BLOCK_TIME
@ -289,7 +289,7 @@ BOOST_FIXTURE_TEST_CASE(importwallet_rescan, TestChain100Setup)
request.params.push_back(backup_file);
AddWallet(wallet);
::importwallet(request);
RemoveWallet(wallet, nullopt);
RemoveWallet(wallet, std::nullopt);
LOCK(wallet->cs_wallet);
BOOST_CHECK_EQUAL(wallet->mapWallet.size(), 3U);
@ -578,7 +578,7 @@ public:
~CreateTransactionTestSetup()
{
RemoveWallet(wallet, nullopt);
RemoveWallet(wallet, std::nullopt);
}
std::shared_ptr<CWallet> wallet;

View File

@ -94,10 +94,10 @@ bool RemoveWalletSetting(interfaces::Chain& chain, const std::string& wallet_nam
static void UpdateWalletSetting(interfaces::Chain& chain,
const std::string& wallet_name,
Optional<bool> load_on_startup,
std::optional<bool> load_on_startup,
std::vector<bilingual_str>& warnings)
{
if (load_on_startup == nullopt) return;
if (load_on_startup == std::nullopt) return;
if (load_on_startup.value() && !AddWalletSetting(chain, wallet_name)) {
warnings.emplace_back(Untranslated("Wallet load on startup setting could not be updated, so wallet may not be loaded next node startup."));
} else if (!load_on_startup.value() && !RemoveWalletSetting(chain, wallet_name)) {
@ -117,7 +117,7 @@ bool AddWallet(const std::shared_ptr<CWallet>& wallet)
return true;
}
bool RemoveWallet(const std::shared_ptr<CWallet>& wallet, Optional<bool> load_on_start, std::vector<bilingual_str>& warnings)
bool RemoveWallet(const std::shared_ptr<CWallet>& wallet, std::optional<bool> load_on_start, std::vector<bilingual_str>& warnings)
{
assert(wallet);
@ -140,7 +140,7 @@ bool RemoveWallet(const std::shared_ptr<CWallet>& wallet, Optional<bool> load_on
return true;
}
bool RemoveWallet(const std::shared_ptr<CWallet>& wallet, Optional<bool> load_on_start)
bool RemoveWallet(const std::shared_ptr<CWallet>& wallet, std::optional<bool> load_on_start)
{
std::vector<bilingual_str> warnings;
return RemoveWallet(wallet, load_on_start, warnings);
@ -217,7 +217,7 @@ void UnloadWallet(std::shared_ptr<CWallet>&& wallet)
}
namespace {
std::shared_ptr<CWallet> LoadWalletInternal(interfaces::Chain& chain, const std::string& name, Optional<bool> load_on_start, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings)
std::shared_ptr<CWallet> LoadWalletInternal(interfaces::Chain& chain, const std::string& name, std::optional<bool> load_on_start, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings)
{
try {
std::unique_ptr<WalletDatabase> database = MakeWalletDatabase(name, options, status, error);
@ -245,7 +245,7 @@ std::shared_ptr<CWallet> LoadWalletInternal(interfaces::Chain& chain, const std:
}
} // namespace
std::shared_ptr<CWallet> LoadWallet(interfaces::Chain& chain, const std::string& name, Optional<bool> load_on_start, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings)
std::shared_ptr<CWallet> LoadWallet(interfaces::Chain& chain, const std::string& name, std::optional<bool> load_on_start, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings)
{
auto result = WITH_LOCK(g_loading_wallet_mutex, return g_loading_wallet_set.insert(name));
if (!result.second) {
@ -257,7 +257,7 @@ std::shared_ptr<CWallet> LoadWallet(interfaces::Chain& chain, const std::string&
return wallet;
}
std::shared_ptr<CWallet> CreateWallet(interfaces::Chain& chain, const std::string& name, Optional<bool> load_on_start, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings)
std::shared_ptr<CWallet> CreateWallet(interfaces::Chain& chain, const std::string& name, std::optional<bool> load_on_start, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings)
{
uint64_t wallet_creation_flags = options.create_flags;
const SecureString& passphrase = options.create_passphrase;
@ -929,7 +929,7 @@ void CWallet::LoadToWallet(CWalletTx& wtxIn)
{
// If wallet doesn't have a chain (e.g dash-wallet), don't bother to update txn.
if (HaveChain()) {
Optional<int> block_height = chain().getBlockHeight(wtxIn.m_confirm.hashBlock);
std::optional<int> block_height = chain().getBlockHeight(wtxIn.m_confirm.hashBlock);
if (block_height) {
// Update cached block height variable since it not stored in the
// serialized transaction.
@ -1814,8 +1814,8 @@ int64_t CWallet::RescanFromTime(int64_t startTime, const WalletRescanReserver& r
// to be scanned.
uint256 start_block;
{
const Optional<int> start_height = chain().findFirstBlockWithTimeAndHeight(startTime - TIMESTAMP_WINDOW, 0, &start_block);
const Optional<int> tip_height = chain().getHeight();
const std::optional<int> start_height = chain().findFirstBlockWithTimeAndHeight(startTime - TIMESTAMP_WINDOW, 0, &start_block);
const std::optional<int> tip_height = chain().getHeight();
WalletLogPrintf("%s: Rescanning last %i blocks\n", __func__, tip_height && start_height ? *tip_height - *start_height + 1 : 0);
}
@ -1870,11 +1870,11 @@ CWallet::ScanResult CWallet::ScanForWalletTransactions(const uint256& start_bloc
ShowProgress(strprintf("%s " + _("Rescanning...").translated, GetDisplayName()), 0); // show rescan progress in GUI as dialog or on splashscreen, if -rescan on startup
uint256 tip_hash;
// The way the 'block_height' is initialized is just a workaround for the gcc bug #47679 since version 4.6.0.
Optional<int> block_height;
std::optional<int> block_height;
double progress_begin;
double progress_end;
{
if (Optional<int> tip_height = chain().getHeight()) {
if (std::optional<int> tip_height = chain().getHeight()) {
tip_hash = chain().getBlockHash(*tip_height);
}
block_height = chain().getBlockHeight(block_hash);
@ -1920,7 +1920,7 @@ CWallet::ScanResult CWallet::ScanForWalletTransactions(const uint256& start_bloc
break;
}
{
Optional<int> tip_height = chain().getHeight();
std::optional<int> tip_height = chain().getHeight();
if (!tip_height || *tip_height <= block_height || !chain().getBlockHeight(block_hash)) {
// break successfully when rescan has reached the tip, or
// previous block is no longer on the chain due to a reorg
@ -3603,7 +3603,7 @@ DBErrors CWallet::LoadWallet(bool& fFirstRunRet)
}
if (HaveChain()) {
const Optional<int> tip_height = chain().getHeight();
const std::optional<int> tip_height = chain().getHeight();
if (tip_height) {
SetLastBlockProcessed(*tip_height, chain().getBlockHash(*tip_height));
for (auto& pair : mapWallet) {
@ -4080,7 +4080,7 @@ void CWallet::GetKeyBirthTimes(std::map<CTxDestination, int64_t>& mapKeyBirth) c
}
// map in which we'll infer heights of other keys
const Optional<int> tip_height = chain().getHeight();
const std::optional<int> tip_height = chain().getHeight();
const int max_height = tip_height && *tip_height > 144 ? *tip_height - 144 : 0; // the tip can be reorganized; use a 144-block safety margin
std::map<CKeyID, int> mapKeyFirstBlock;
for (const CKeyID &keyid : spk_man->GetKeys()) {
@ -4096,7 +4096,7 @@ void CWallet::GetKeyBirthTimes(std::map<CTxDestination, int64_t>& mapKeyBirth) c
for (const auto& entry : mapWallet) {
// iterate over all wallet transactions...
const CWalletTx &wtx = entry.second;
if (Optional<int> height = chain().getBlockHeight(wtx.m_confirm.hashBlock)) {
if (std::optional<int> height = chain().getBlockHeight(wtx.m_confirm.hashBlock)) {
// ... which are already in a block
for (const CTxOut &txout : wtx.tx->vout) {
// iterate over all their outputs
@ -4266,7 +4266,7 @@ std::shared_ptr<CWallet> CWallet::Create(interfaces::Chain& chain, const std::st
}
AddWallet(walletInstance);
auto unload_wallet = [&](const bilingual_str& strError) {
RemoveWallet(walletInstance, nullopt);
RemoveWallet(walletInstance, std::nullopt);
error = strError;
return nullptr;
};
@ -4274,7 +4274,7 @@ std::shared_ptr<CWallet> CWallet::Create(interfaces::Chain& chain, const std::st
try {
nLoadWalletRet = walletInstance->LoadWallet(fFirstRun);
} catch (const std::exception& e) {
RemoveWallet(walletInstance, nullopt);
RemoveWallet(walletInstance, std::nullopt);
throw;
}
if (nLoadWalletRet != DBErrors::LOAD_OK)
@ -4505,13 +4505,13 @@ std::shared_ptr<CWallet> CWallet::Create(interfaces::Chain& chain, const std::st
WalletBatch batch(*walletInstance->database);
CBlockLocator locator;
if (batch.ReadBestBlock(locator)) {
if (const Optional<int> fork_height = chain.findLocatorFork(locator)) {
if (const std::optional<int> fork_height = chain.findLocatorFork(locator)) {
rescan_height = *fork_height;
}
}
}
const Optional<int> tip_height = chain.getHeight();
const std::optional<int> tip_height = chain.getHeight();
if (tip_height) {
walletInstance->m_last_block_processed = chain.getBlockHash(*tip_height);
walletInstance->m_last_block_processed_height = *tip_height;
@ -4546,14 +4546,14 @@ std::shared_ptr<CWallet> CWallet::Create(interfaces::Chain& chain, const std::st
// our wallet birthday (as adjusted for block time variability)
// unless a full rescan was requested
if (gArgs.GetArg("-rescan", 0) != 2) {
Optional<int64_t> time_first_key;
std::optional<int64_t> time_first_key;
if (auto spk_man = walletInstance->m_spk_man.get()) {
LOCK(spk_man->cs_wallet);
int64_t time = spk_man->GetTimeFirstKey();
if (!time_first_key || time < *time_first_key) time_first_key = time;
}
if (time_first_key) {
if (Optional<int> first_block = chain.findFirstBlockWithTimeAndHeight(*time_first_key - TIMESTAMP_WINDOW, rescan_height, nullptr)) {
if (std::optional<int> first_block = chain.findFirstBlockWithTimeAndHeight(*time_first_key - TIMESTAMP_WINDOW, rescan_height, nullptr)) {
rescan_height = *first_block;
}
}
@ -4843,7 +4843,7 @@ bool CWalletTx::IsChainLocked() const
if (!fIsChainlocked) {
assert(pwallet != nullptr);
AssertLockHeld(pwallet->cs_wallet);
if (Optional<int> height = pwallet->chain().getBlockHeight(m_confirm.hashBlock)) {
if (std::optional<int> height = pwallet->chain().getBlockHeight(m_confirm.hashBlock)) {
fIsChainlocked = llmq::chainLocksHandler->HasChainLock(*height, m_confirm.hashBlock);
}
}

View File

@ -52,12 +52,12 @@ using LoadWalletFn = std::function<void(std::unique_ptr<interfaces::Wallet> wall
void UnloadWallet(std::shared_ptr<CWallet>&& wallet);
bool AddWallet(const std::shared_ptr<CWallet>& wallet);
bool RemoveWallet(const std::shared_ptr<CWallet>& wallet, Optional<bool> load_on_start, std::vector<bilingual_str>& warnings);
bool RemoveWallet(const std::shared_ptr<CWallet>& wallet, Optional<bool> load_on_start);
bool RemoveWallet(const std::shared_ptr<CWallet>& wallet, std::optional<bool> load_on_start, std::vector<bilingual_str>& warnings);
bool RemoveWallet(const std::shared_ptr<CWallet>& wallet, std::optional<bool> load_on_start);
std::vector<std::shared_ptr<CWallet>> GetWallets();
std::shared_ptr<CWallet> GetWallet(const std::string& name);
std::shared_ptr<CWallet> LoadWallet(interfaces::Chain& chain, const std::string& name, Optional<bool> load_on_start, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings);
std::shared_ptr<CWallet> CreateWallet(interfaces::Chain& chain, const std::string& name, Optional<bool> load_on_start, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings);
std::shared_ptr<CWallet> LoadWallet(interfaces::Chain& chain, const std::string& name, std::optional<bool> load_on_start, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings);
std::shared_ptr<CWallet> CreateWallet(interfaces::Chain& chain, const std::string& name, std::optional<bool> load_on_start, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings);
std::unique_ptr<interfaces::Handler> HandleLoadWallet(LoadWalletFn load_wallet);
std::unique_ptr<WalletDatabase> MakeWalletDatabase(const std::string& name, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error);
@ -978,7 +978,7 @@ public:
//! Unset if no blocks were scanned due to read errors or the chain
//! being empty.
uint256 last_scanned_block;
Optional<int> last_scanned_height;
std::optional<int> last_scanned_height;
//! Height of the most recent block that could not be scanned due to
//! read errors or pruning. Will be set if status is FAILURE, unset if

View File

@ -23,6 +23,7 @@
#include <validation.h>
#include <atomic>
#include <optional>
#include <string>
namespace DBKeys {
@ -822,7 +823,7 @@ std::unique_ptr<WalletDatabase> MakeDatabase(const fs::path& path, const Databas
return nullptr;
}
Optional<DatabaseFormat> format;
std::optional<DatabaseFormat> format;
if (exists) {
if (ExistsBerkeleyDatabase(path)) {
format = DatabaseFormat::BERKELEY;