mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-08 10:31:50 -05:00
wallet: ensure wallet files are not reused across chains
This commit is contained in:
parent
7164e00e1b
commit
968765973b
4 changed files with 17 additions and 0 deletions
|
@ -50,6 +50,7 @@ void DummyWalletInit::AddWalletOptions(ArgsManager& argsman) const
|
|||
"-flushwallet",
|
||||
"-privdb",
|
||||
"-walletrejectlongchains",
|
||||
"-walletcrosschain",
|
||||
"-unsafesqlitesync",
|
||||
});
|
||||
}
|
||||
|
|
|
@ -94,6 +94,7 @@ void WalletInit::AddWalletOptions(ArgsManager& argsman) const
|
|||
#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("-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"});
|
||||
}
|
||||
|
|
|
@ -2918,6 +2918,20 @@ bool CWallet::AttachChain(const std::shared_ptr<CWallet>& walletInstance, interf
|
|||
assert(!walletInstance->m_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
|
||||
// missing block connections between end of rescan and validation subscribing.
|
||||
// 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_WALLETBROADCAST = true;
|
||||
static const bool DEFAULT_DISABLE_WALLET = false;
|
||||
static const bool DEFAULT_WALLETCROSSCHAIN = false;
|
||||
//! -maxtxfee default
|
||||
constexpr CAmount DEFAULT_TRANSACTION_MAXFEE{COIN / 10};
|
||||
//! Discourage users to set fees higher than this amount (in satoshis) per kB
|
||||
|
|
Loading…
Add table
Reference in a new issue