Bitcoin Core
31.1.0
P2P Digital Currency
Toggle main menu visibility
Loading...
Searching...
No Matches
src
wallet
walletutil.cpp
Go to the documentation of this file.
1
// Copyright (c) 2017-present The Bitcoin Core developers
2
// Distributed under the MIT software license, see the accompanying
3
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5
#include <
wallet/walletutil.h
>
6
7
#include <chainparams.h>
8
#include <
common/args.h
>
9
#include <
key_io.h
>
10
#include <logging.h>
11
12
namespace
wallet
{
13
fs::path
GetWalletDir
()
14
{
15
fs::path path;
16
17
if
(
gArgs
.IsArgSet(
"-walletdir"
)) {
18
path =
gArgs
.GetPathArg(
"-walletdir"
);
19
if
(!fs::is_directory(path)) {
20
// If the path specified doesn't exist, we return the deliberately
21
// invalid empty string.
22
path =
""
;
23
}
24
}
else
{
25
path =
gArgs
.GetDataDirNet();
26
// If a wallets directory exists, use that, otherwise default to GetDataDir
27
if
(fs::is_directory(path /
"wallets"
)) {
28
path /=
"wallets"
;
29
}
30
}
31
32
return
path;
33
}
34
35
WalletDescriptor
GenerateWalletDescriptor
(
const
CExtPubKey
& master_key,
const
OutputType
& addr_type,
bool
internal)
36
{
37
int64_t creation_time =
GetTime
();
38
39
std::string xpub =
EncodeExtPubKey
(master_key);
40
41
// Build descriptor string
42
std::string desc_prefix;
43
std::string desc_suffix =
"/*)"
;
44
switch
(addr_type) {
45
case
OutputType::LEGACY
: {
46
desc_prefix =
"pkh("
+ xpub +
"/44h"
;
47
break
;
48
}
49
case
OutputType::P2SH_SEGWIT
: {
50
desc_prefix =
"sh(wpkh("
+ xpub +
"/49h"
;
51
desc_suffix +=
")"
;
52
break
;
53
}
54
case
OutputType::BECH32
: {
55
desc_prefix =
"wpkh("
+ xpub +
"/84h"
;
56
break
;
57
}
58
case
OutputType::BECH32M
: {
59
desc_prefix =
"tr("
+ xpub +
"/86h"
;
60
break
;
61
}
62
case
OutputType::UNKNOWN
: {
63
// We should never have a DescriptorScriptPubKeyMan for an UNKNOWN OutputType,
64
// so if we get to this point something is wrong
65
assert
(
false
);
66
}
67
}
// no default case, so the compiler can warn about missing cases
68
assert
(!desc_prefix.empty());
69
70
// Mainnet derives at 0', testnet and regtest derive at 1'
71
if
(
Params
().IsTestChain()) {
72
desc_prefix +=
"/1h"
;
73
}
else
{
74
desc_prefix +=
"/0h"
;
75
}
76
77
std::string internal_path = internal ?
"/1"
:
"/0"
;
78
std::string desc_str = desc_prefix +
"/0h"
+ internal_path + desc_suffix;
79
80
// Make the descriptor
81
FlatSigningProvider
keys;
82
std::string error;
83
std::vector<std::unique_ptr<Descriptor>> desc =
Parse
(desc_str, keys, error,
false
);
84
WalletDescriptor
w_desc(std::move(desc.at(0)), creation_time, 0, 0, 0);
85
return
w_desc;
86
}
87
88
}
// namespace wallet
gArgs
ArgsManager gArgs
Definition
args.cpp:40
args.h
Params
const CChainParams & Params()
Return the currently selected parameters.
Definition
chainparams.cpp:112
wallet::WalletDescriptor
Descriptor with some wallet metadata.
Definition
walletutil.h:64
Parse
static UniValue Parse(std::string_view raw, ParamFormat format=ParamFormat::JSON)
Parse string to UniValue or throw runtime_error if string contains invalid JSON.
Definition
client.cpp:395
EncodeExtPubKey
std::string EncodeExtPubKey(const CExtPubKey &key)
Definition
key_io.cpp:257
key_io.h
wallet
Definition
wallet_balance.cpp:26
wallet::GetWalletDir
fs::path GetWalletDir()
Get the path of the wallet directory.
Definition
walletutil.cpp:13
wallet::GenerateWalletDescriptor
WalletDescriptor GenerateWalletDescriptor(const CExtPubKey &master_key, const OutputType &addr_type, bool internal)
Definition
walletutil.cpp:35
OutputType
OutputType
Definition
outputtype.h:18
OutputType::LEGACY
@ LEGACY
Definition
outputtype.h:19
OutputType::UNKNOWN
@ UNKNOWN
Definition
outputtype.h:23
OutputType::BECH32
@ BECH32
Definition
outputtype.h:21
OutputType::P2SH_SEGWIT
@ P2SH_SEGWIT
Definition
outputtype.h:20
OutputType::BECH32M
@ BECH32M
Definition
outputtype.h:22
CExtPubKey
Definition
pubkey.h:336
FlatSigningProvider
Definition
signingprovider.h:224
GetTime
int64_t GetTime()
DEPRECATED Use either ClockType::now() or Now<TimePointType>() if a cast is needed.
Definition
time.cpp:81
assert
assert(!tx.IsCoinBase())
walletutil.h
Generated on
for Bitcoin Core by
1.17.0