mirror of
https://github.com/dashpay/dash.git
synced 2024-12-27 04:52:59 +01:00
e18576b121
7e80f646b24a2abf3c031a649bcc706a695f80da Get the OutputType for a descriptor (Andrew Chow)
Pull request description:
Adds a `GetOutputType()` method to get the OutputType of a descriptor. Some descriptors don't have a determinate OutputType, so we actually use an `Optional<OutputType>`. For descriptors with indeterminate OutputType, we return `nullopt`.
`addr()` and `raw()` use OutputTypes as determined by the CTxDestination they have. For simplicity, `ScriptHash` destinations are `LEGACY` even though they could be `P2SH_SEGWIT`.
`combo()`, `pk()`, and `multi()` are `nullopt` as they either don't have an OutputType or they have multiple. `DescriptorImpl` defaults to `nullopt`.
`pkh()` is `LEGACY` as expected
`wpkh()` and `wsh()` are `BECH32` as expected.
`sh()` checks whether the sub-descriptor is `BECH32`. If so, it is `P2SH_SEGWIT`. Otherwise it is `LEGACY`.
The descriptor tests are updated to check the OutputType too.
ACKs for top commit:
fjahr:
ACK 7e80f646b24a2abf3c031a649bcc706a695f80da
meshcollider:
utACK 7e80f646b24a2abf3c031a649bcc706a695f80da
instagibbs:
cursory ACK 7e80f646b2
Sjors:
Code review ACK 7e80f646b24a2abf3c031a649bcc706a695f80da
jonatack:
ACK 7e80f64 code review/build/tests
Tree-SHA512: c5a813447b62e982435e1c948066f8d6c148c9ebffb0a5eb5a9028b173b01d5ead2f076a5ca3f7f37698538baa346f82a977ee48f583d89cb4e5ebd9111b2341
25 lines
748 B
C
25 lines
748 B
C
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
|
// Copyright (c) 2009-2019 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_OUTPUTTYPE_H
|
|
#define BITCOIN_OUTPUTTYPE_H
|
|
|
|
#include <script/signingprovider.h>
|
|
#include <script/standard.h>
|
|
|
|
enum class OutputType {
|
|
LEGACY,
|
|
UNKNOWN,
|
|
};
|
|
|
|
/**
|
|
* Get a destination of the requested type (if possible) to the specified script.
|
|
* This function will automatically add the script (and any other
|
|
* necessary scripts) to the keystore.
|
|
*/
|
|
CTxDestination AddAndGetDestinationForScript(FillableSigningProvider& keystore, const CScript& script);
|
|
|
|
#endif // BITCOIN_OUTPUTTYPE_H
|