mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-05-08 02:41:07 +02:00
wallet: ensure wallet files are not reused across chains
This commit is contained in:
parent
7164e00e1b
commit
968765973b
@ -50,6 +50,7 @@ void DummyWalletInit::AddWalletOptions(ArgsManager& argsman) const
|
|||||||
"-flushwallet",
|
"-flushwallet",
|
||||||
"-privdb",
|
"-privdb",
|
||||||
"-walletrejectlongchains",
|
"-walletrejectlongchains",
|
||||||
|
"-walletcrosschain",
|
||||||
"-unsafesqlitesync",
|
"-unsafesqlitesync",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -94,6 +94,7 @@ void WalletInit::AddWalletOptions(ArgsManager& argsman) const
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
argsman.AddArg("-walletrejectlongchains", strprintf("Wallet will not create transactions that violate mempool chain limits (default: %u)", DEFAULT_WALLET_REJECT_LONG_CHAINS), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::WALLET_DEBUG_TEST);
|
argsman.AddArg("-walletrejectlongchains", strprintf("Wallet will not create transactions that violate mempool chain limits (default: %u)", DEFAULT_WALLET_REJECT_LONG_CHAINS), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::WALLET_DEBUG_TEST);
|
||||||
|
argsman.AddArg("-walletcrosschain", strprintf("Allow reusing wallet files across chains (default: %u)", DEFAULT_WALLETCROSSCHAIN), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::WALLET_DEBUG_TEST);
|
||||||
|
|
||||||
argsman.AddHiddenArgs({"-zapwallettxes"});
|
argsman.AddHiddenArgs({"-zapwallettxes"});
|
||||||
}
|
}
|
||||||
|
@ -2918,6 +2918,20 @@ bool CWallet::AttachChain(const std::shared_ptr<CWallet>& walletInstance, interf
|
|||||||
assert(!walletInstance->m_chain || walletInstance->m_chain == &chain);
|
assert(!walletInstance->m_chain || walletInstance->m_chain == &chain);
|
||||||
walletInstance->m_chain = &chain;
|
walletInstance->m_chain = &chain;
|
||||||
|
|
||||||
|
// Unless allowed, ensure wallet files are not reused across chains:
|
||||||
|
if (!gArgs.GetBoolArg("-walletcrosschain", DEFAULT_WALLETCROSSCHAIN)) {
|
||||||
|
WalletBatch batch(walletInstance->GetDatabase());
|
||||||
|
CBlockLocator locator;
|
||||||
|
if (batch.ReadBestBlock(locator) && locator.vHave.size() > 0 && chain.getHeight()) {
|
||||||
|
// Wallet is assumed to be from another chain, if genesis block in the active
|
||||||
|
// chain differs from the genesis block known to the wallet.
|
||||||
|
if (chain.getBlockHash(0) != locator.vHave.back()) {
|
||||||
|
error = Untranslated("Wallet files should not be reused across chains. Restart bitcoind with -walletcrosschain to override.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Register wallet with validationinterface. It's done before rescan to avoid
|
// Register wallet with validationinterface. It's done before rescan to avoid
|
||||||
// missing block connections between end of rescan and validation subscribing.
|
// missing block connections between end of rescan and validation subscribing.
|
||||||
// Because of wallet lock being hold, block connection notifications are going to
|
// Because of wallet lock being hold, block connection notifications are going to
|
||||||
|
@ -102,6 +102,7 @@ static const unsigned int DEFAULT_TX_CONFIRM_TARGET = 6;
|
|||||||
static const bool DEFAULT_WALLET_RBF = false;
|
static const bool DEFAULT_WALLET_RBF = false;
|
||||||
static const bool DEFAULT_WALLETBROADCAST = true;
|
static const bool DEFAULT_WALLETBROADCAST = true;
|
||||||
static const bool DEFAULT_DISABLE_WALLET = false;
|
static const bool DEFAULT_DISABLE_WALLET = false;
|
||||||
|
static const bool DEFAULT_WALLETCROSSCHAIN = false;
|
||||||
//! -maxtxfee default
|
//! -maxtxfee default
|
||||||
constexpr CAmount DEFAULT_TRANSACTION_MAXFEE{COIN / 10};
|
constexpr CAmount DEFAULT_TRANSACTION_MAXFEE{COIN / 10};
|
||||||
//! Discourage users to set fees higher than this amount (in satoshis) per kB
|
//! Discourage users to set fees higher than this amount (in satoshis) per kB
|
||||||
|
Loading…
x
Reference in New Issue
Block a user