mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-25 10:43:19 -03:00
rpc/util: multisig: only check redeemScript size is <= 520 for P2SH
This increase the maximum number of pubkeys to 20 (valid in P2WSH and P2SH-P2WSH) and only checks the redeemScript doesn't exceed MAX_SCRIPT_ELEMENT_SIZE for P2SH, as this checked is removed under Segwit context. Signed-off-by: Antoine Poinsot <darosior@protonmail.com>
This commit is contained in:
parent
063df9e897
commit
5aa50ab9cc
1 changed files with 6 additions and 6 deletions
|
@ -231,16 +231,12 @@ CTxDestination AddAndGetMultisigDestination(const int required, const std::vecto
|
|||
if ((int)pubkeys.size() < required) {
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("not enough keys supplied (got %u keys, but need at least %d to redeem)", pubkeys.size(), required));
|
||||
}
|
||||
if (pubkeys.size() > 16) {
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, "Number of keys involved in the multisignature address creation > 16\nReduce the number");
|
||||
if (pubkeys.size() > MAX_PUBKEYS_PER_MULTISIG) {
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Number of keys involved in the multisignature address creation > %d\nReduce the number", MAX_PUBKEYS_PER_MULTISIG));
|
||||
}
|
||||
|
||||
script_out = GetScriptForMultisig(required, pubkeys);
|
||||
|
||||
if (script_out.size() > MAX_SCRIPT_ELEMENT_SIZE) {
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, (strprintf("redeemScript exceeds size limit: %d > %d", script_out.size(), MAX_SCRIPT_ELEMENT_SIZE)));
|
||||
}
|
||||
|
||||
// Check if any keys are uncompressed. If so, the type is legacy
|
||||
for (const CPubKey& pk : pubkeys) {
|
||||
if (!pk.IsCompressed()) {
|
||||
|
@ -249,6 +245,10 @@ CTxDestination AddAndGetMultisigDestination(const int required, const std::vecto
|
|||
}
|
||||
}
|
||||
|
||||
if (type == OutputType::LEGACY && script_out.size() > MAX_SCRIPT_ELEMENT_SIZE) {
|
||||
throw JSONRPCError(RPC_INVALID_PARAMETER, (strprintf("redeemScript exceeds size limit: %d > %d", script_out.size(), MAX_SCRIPT_ELEMENT_SIZE)));
|
||||
}
|
||||
|
||||
// Make the address
|
||||
CTxDestination dest = AddAndGetDestinationForScript(keystore, script_out, type);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue