1212#include < httpserver.h>
1313#include < net.h>
1414#include < netbase.h>
15+ #include < outputtype.h>
1516#include < rpc/blockchain.h>
1617#include < rpc/server.h>
1718#include < rpc/util.h>
@@ -91,9 +92,9 @@ class CWallet;
9192
9293static UniValue createmultisig (const JSONRPCRequest& request)
9394{
94- if (request.fHelp || request.params .size () < 2 || request.params .size () > 2 )
95+ if (request.fHelp || request.params .size () < 2 || request.params .size () > 3 )
9596 {
96- std::string msg = " createmultisig nrequired [\" key\" ,...]\n "
97+ std::string msg = " createmultisig nrequired [\" key\" ,...] ( \" address_type \" ) \n "
9798 " \n Creates a multi-signature address with n signature of m keys required.\n "
9899 " It returns a json object with the address and redeemScript.\n "
99100 " \n Arguments:\n "
@@ -103,6 +104,7 @@ static UniValue createmultisig(const JSONRPCRequest& request)
103104 " \" key\" (string) The hex-encoded public key\n "
104105 " ,...\n "
105106 " ]\n "
107+ " 3. \" address_type\" (string, optional) The address type to use. Options are \" legacy\" , \" p2sh-segwit\" , and \" bech32\" . Default is legacy.\n "
106108
107109 " \n Result:\n "
108110 " {\n "
@@ -133,12 +135,21 @@ static UniValue createmultisig(const JSONRPCRequest& request)
133135 }
134136 }
135137
138+ // Get the output type
139+ OutputType output_type = OutputType::LEGACY;
140+ if (!request.params [2 ].isNull ()) {
141+ if (!ParseOutputType (request.params [2 ].get_str (), output_type)) {
142+ throw JSONRPCError (RPC_INVALID_ADDRESS_OR_KEY, strprintf (" Unknown address type '%s'" , request.params [2 ].get_str ()));
143+ }
144+ }
145+
136146 // Construct using pay-to-script-hash:
137- CScript inner = CreateMultisigRedeemscript (required, pubkeys);
138- CScriptID innerID (inner);
147+ const CScript inner = CreateMultisigRedeemscript (required, pubkeys);
148+ CBasicKeyStore keystore;
149+ const CTxDestination dest = AddAndGetDestinationForScript (keystore, inner, output_type);
139150
140151 UniValue result (UniValue::VOBJ);
141- result.pushKV (" address" , EncodeDestination (innerID ));
152+ result.pushKV (" address" , EncodeDestination (dest ));
142153 result.pushKV (" redeemScript" , HexStr (inner.begin (), inner.end ()));
143154
144155 return result;
0 commit comments