mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-25 02:33:24 -03:00
0c9fedfc45
The multisig script generation process currently fails when the user exceeds 15 keys, even when it shouldn't. The maximum number of keys allowed for segwit redeem scripts (p2sh-segwit and bech32) is 20 keys. This is because the redeem script placed in the witness is not restricted by the item size limit. The reason behind this issue is the utilization of the legacy p2sh redeem script restrictions on segwit ones. Redeem scripts longer than 520 bytes are blocked from being inserted into the keystore, which causes the signing process and the descriptor inference process to fail. This occurs because the multisig generation flow uses the same keystore as the legacy spkm (FillableSigningProvider), which contains the 520-byte limit.
54 lines
1.6 KiB
C++
54 lines
1.6 KiB
C++
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
|
// Copyright (c) 2009-2022 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 <addresstype.h>
|
|
#include <script/signingprovider.h>
|
|
|
|
#include <array>
|
|
#include <optional>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
enum class OutputType {
|
|
LEGACY,
|
|
P2SH_SEGWIT,
|
|
BECH32,
|
|
BECH32M,
|
|
UNKNOWN,
|
|
};
|
|
|
|
static constexpr auto OUTPUT_TYPES = std::array{
|
|
OutputType::LEGACY,
|
|
OutputType::P2SH_SEGWIT,
|
|
OutputType::BECH32,
|
|
OutputType::BECH32M,
|
|
};
|
|
|
|
std::optional<OutputType> ParseOutputType(const std::string& str);
|
|
const std::string& FormatOutputType(OutputType type);
|
|
|
|
/**
|
|
* Get a destination of the requested type (if possible) to the specified key.
|
|
* The caller must make sure LearnRelatedScripts has been called beforehand.
|
|
*/
|
|
CTxDestination GetDestinationForKey(const CPubKey& key, OutputType);
|
|
|
|
/** Get all destinations (potentially) supported by the wallet for the given key. */
|
|
std::vector<CTxDestination> GetAllDestinationsForKey(const CPubKey& key);
|
|
|
|
/**
|
|
* 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(FlatSigningProvider& keystore, const CScript& script, OutputType);
|
|
|
|
/** Get the OutputType for a CTxDestination */
|
|
std::optional<OutputType> OutputTypeFromDestination(const CTxDestination& dest);
|
|
|
|
#endif // BITCOIN_OUTPUTTYPE_H
|