mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 12:32:48 +01:00
8a1ec935a0
* scripted-diff: Replace #include "" with #include <> (ryanofsky) -BEGIN VERIFY SCRIPT- for f in \ src/*.cpp \ src/*.h \ src/bench/*.cpp \ src/bench/*.h \ src/compat/*.cpp \ src/compat/*.h \ src/consensus/*.cpp \ src/consensus/*.h \ src/crypto/*.cpp \ src/crypto/*.h \ src/crypto/ctaes/*.h \ src/policy/*.cpp \ src/policy/*.h \ src/primitives/*.cpp \ src/primitives/*.h \ src/qt/*.cpp \ src/qt/*.h \ src/qt/test/*.cpp \ src/qt/test/*.h \ src/rpc/*.cpp \ src/rpc/*.h \ src/script/*.cpp \ src/script/*.h \ src/support/*.cpp \ src/support/*.h \ src/support/allocators/*.h \ src/test/*.cpp \ src/test/*.h \ src/wallet/*.cpp \ src/wallet/*.h \ src/wallet/test/*.cpp \ src/wallet/test/*.h \ src/zmq/*.cpp \ src/zmq/*.h do base=${f%/*}/ relbase=${base#src/} sed -i "s:#include \"\(.*\)\"\(.*\):if test -e \$base'\\1'; then echo \"#include <\"\$relbase\"\\1>\\2\"; else echo \"#include <\\1>\\2\"; fi:e" $f done -END VERIFY SCRIPT- Signed-off-by: Pasta <pasta@dashboost.org> * scripted-diff: Replace #include "" with #include <> (Dash Specific) -BEGIN VERIFY SCRIPT- for f in \ src/bls/*.cpp \ src/bls/*.h \ src/evo/*.cpp \ src/evo/*.h \ src/governance/*.cpp \ src/governance/*.h \ src/llmq/*.cpp \ src/llmq/*.h \ src/masternode/*.cpp \ src/masternode/*.h \ src/privatesend/*.cpp \ src/privatesend/*.h do base=${f%/*}/ relbase=${base#src/} sed -i "s:#include \"\(.*\)\"\(.*\):if test -e \$base'\\1'; then echo \"#include <\"\$relbase\"\\1>\\2\"; else echo \"#include <\\1>\\2\"; fi:e" $f done -END VERIFY SCRIPT- Signed-off-by: Pasta <pasta@dashboost.org> * build: Remove -I for everything but project root Remove -I from build system for everything but the project root, and built-in dependencies. Signed-off-by: Pasta <pasta@dashboost.org> # Conflicts: # src/Makefile.test.include * qt: refactor: Use absolute include paths in .ui files * qt: refactor: Changes to make include paths absolute This makes all include paths in the GUI absolute. Many changes are involved as every single source file in src/qt/ assumes to be able to use relative includes. Signed-off-by: Pasta <pasta@dashboost.org> # Conflicts: # src/qt/dash.cpp # src/qt/optionsmodel.cpp # src/qt/test/rpcnestedtests.cpp * test: refactor: Use absolute include paths for test data files * Recommend #include<> syntax in developer notes * refactor: Include obj/build.h instead of build.h * END BACKPORT #11651 Remove trailing whitespace causing travis failure * fix backport 11651 Signed-off-by: Pasta <pasta@dashboost.org> * More of 11651 * fix blockchain.cpp Signed-off-by: pasta <pasta@dashboost.org> * Add missing "qt/" in includes * Add missing "test/" in includes * Fix trailing whitespaces Co-authored-by: Wladimir J. van der Laan <laanwj@gmail.com> Co-authored-by: Russell Yanofsky <russ@yanofsky.org> Co-authored-by: MeshCollider <dobsonsa68@gmail.com> Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
151 lines
4.2 KiB
C++
151 lines
4.2 KiB
C++
// Copyright (c) 2014-2019 The Dash Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
#ifndef DASH_HDCHAIN_H
|
|
#define DASH_HDCHAIN_H
|
|
|
|
#include <key.h>
|
|
#include <sync.h>
|
|
|
|
/* hd account data model */
|
|
class CHDAccount
|
|
{
|
|
public:
|
|
uint32_t nExternalChainCounter;
|
|
uint32_t nInternalChainCounter;
|
|
|
|
CHDAccount() : nExternalChainCounter(0), nInternalChainCounter(0) {}
|
|
|
|
ADD_SERIALIZE_METHODS;
|
|
template <typename Stream, typename Operation>
|
|
inline void SerializationOp(Stream& s, Operation ser_action)
|
|
{
|
|
READWRITE(nExternalChainCounter);
|
|
READWRITE(nInternalChainCounter);
|
|
}
|
|
};
|
|
|
|
/* simple HD chain data model */
|
|
class CHDChain
|
|
{
|
|
private:
|
|
static const int CURRENT_VERSION = 1;
|
|
int nVersion;
|
|
|
|
uint256 id;
|
|
|
|
bool fCrypted;
|
|
|
|
SecureVector vchSeed;
|
|
SecureVector vchMnemonic;
|
|
SecureVector vchMnemonicPassphrase;
|
|
|
|
std::map<uint32_t, CHDAccount> mapAccounts;
|
|
// critical section to protect mapAccounts
|
|
mutable CCriticalSection cs_accounts;
|
|
|
|
public:
|
|
|
|
CHDChain() { SetNull(); }
|
|
CHDChain(const CHDChain& other) :
|
|
nVersion(other.nVersion),
|
|
id(other.id),
|
|
fCrypted(other.fCrypted),
|
|
vchSeed(other.vchSeed),
|
|
vchMnemonic(other.vchMnemonic),
|
|
vchMnemonicPassphrase(other.vchMnemonicPassphrase),
|
|
mapAccounts(other.mapAccounts)
|
|
{}
|
|
|
|
ADD_SERIALIZE_METHODS;
|
|
template <typename Stream, typename Operation>
|
|
inline void SerializationOp(Stream& s, Operation ser_action)
|
|
{
|
|
LOCK(cs_accounts);
|
|
READWRITE(this->nVersion);
|
|
READWRITE(id);
|
|
READWRITE(fCrypted);
|
|
READWRITE(vchSeed);
|
|
READWRITE(vchMnemonic);
|
|
READWRITE(vchMnemonicPassphrase);
|
|
READWRITE(mapAccounts);
|
|
}
|
|
|
|
void swap(CHDChain& first, CHDChain& second) // nothrow
|
|
{
|
|
// enable ADL (not necessary in our case, but good practice)
|
|
using std::swap;
|
|
|
|
// by swapping the members of two classes,
|
|
// the two classes are effectively swapped
|
|
swap(first.nVersion, second.nVersion);
|
|
swap(first.id, second.id);
|
|
swap(first.fCrypted, second.fCrypted);
|
|
swap(first.vchSeed, second.vchSeed);
|
|
swap(first.vchMnemonic, second.vchMnemonic);
|
|
swap(first.vchMnemonicPassphrase, second.vchMnemonicPassphrase);
|
|
swap(first.mapAccounts, second.mapAccounts);
|
|
}
|
|
CHDChain& operator=(CHDChain from)
|
|
{
|
|
swap(*this, from);
|
|
return *this;
|
|
}
|
|
|
|
bool SetNull();
|
|
bool IsNull() const;
|
|
|
|
void SetCrypted(bool fCryptedIn);
|
|
bool IsCrypted() const;
|
|
|
|
void Debug(const std::string& strName) const;
|
|
|
|
bool SetMnemonic(const SecureVector& vchMnemonic, const SecureVector& vchMnemonicPassphrase, bool fUpdateID);
|
|
bool SetMnemonic(const SecureString& ssMnemonic, const SecureString& ssMnemonicPassphrase, bool fUpdateID);
|
|
bool GetMnemonic(SecureVector& vchMnemonicRet, SecureVector& vchMnemonicPassphraseRet) const;
|
|
bool GetMnemonic(SecureString& ssMnemonicRet, SecureString& ssMnemonicPassphraseRet) const;
|
|
|
|
bool SetSeed(const SecureVector& vchSeedIn, bool fUpdateID);
|
|
SecureVector GetSeed() const;
|
|
|
|
uint256 GetID() const { return id; }
|
|
|
|
uint256 GetSeedHash();
|
|
void DeriveChildExtKey(uint32_t nAccountIndex, bool fInternal, uint32_t nChildIndex, CExtKey& extKeyRet);
|
|
|
|
void AddAccount();
|
|
bool GetAccount(uint32_t nAccountIndex, CHDAccount& hdAccountRet);
|
|
bool SetAccount(uint32_t nAccountIndex, const CHDAccount& hdAccount);
|
|
size_t CountAccounts();
|
|
};
|
|
|
|
/* hd pubkey data model */
|
|
class CHDPubKey
|
|
{
|
|
private:
|
|
static const int CURRENT_VERSION = 1;
|
|
int nVersion;
|
|
|
|
public:
|
|
CExtPubKey extPubKey;
|
|
uint256 hdchainID;
|
|
uint32_t nAccountIndex;
|
|
uint32_t nChangeIndex;
|
|
|
|
CHDPubKey() : nVersion(CHDPubKey::CURRENT_VERSION), nAccountIndex(0), nChangeIndex(0) {}
|
|
|
|
ADD_SERIALIZE_METHODS;
|
|
template <typename Stream, typename Operation>
|
|
inline void SerializationOp(Stream& s, Operation ser_action)
|
|
{
|
|
READWRITE(this->nVersion);
|
|
READWRITE(extPubKey);
|
|
READWRITE(hdchainID);
|
|
READWRITE(nAccountIndex);
|
|
READWRITE(nChangeIndex);
|
|
}
|
|
|
|
std::string GetKeyPath() const;
|
|
};
|
|
|
|
#endif // DASH_HDCHAIN_H
|