Skip to main content

MuSig2CombineSig

MuSig2CombineSig (experimental!) combines the given partial signature(s) with the local one, if it already exists. Once a partial signature of all participants is registered, the final signature will be combined and returned.

NOTE: The MuSig2 BIP is not final yet and therefore this API must be considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming releases. Backward compatibility is not guaranteed!

Source: signrpc/signer.proto

gRPC

rpc MuSig2CombineSig (MuSig2CombineSigRequest) returns (MuSig2CombineSigResponse);

REST

HTTP MethodPath
POST /v2/signer/musig2/combinesig

Code Samples

const fs = require('fs');
const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');

const GRPC_HOST = 'localhost:10009'
const MACAROON_PATH = 'LND_DIR/data/chain/bitcoin/regtest/admin.macaroon'
const TLS_PATH = 'LND_DIR/tls.cert'

const loaderOptions = {
keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true,
};
const packageDefinition = protoLoader.loadSync(['lightning.proto', 'signrpc/signer.proto'], loaderOptions);
const signrpc = grpc.loadPackageDefinition(packageDefinition).signrpc;
process.env.GRPC_SSL_CIPHER_SUITES = 'HIGH+ECDSA';
const tlsCert = fs.readFileSync(TLS_PATH);
const sslCreds = grpc.credentials.createSsl(tlsCert);
const macaroon = fs.readFileSync(MACAROON_PATH).toString('hex');
const macaroonCreds = grpc.credentials.createFromMetadataGenerator(function(args, callback) {
let metadata = new grpc.Metadata();
metadata.add('macaroon', macaroon);
callback(null, metadata);
});
let creds = grpc.credentials.combineChannelCredentials(sslCreds, macaroonCreds);
let client = new signrpc.Signer(GRPC_HOST, creds);
let request = {
session_id: <bytes>,
other_partial_signatures: <bytes>,
};
client.muSig2CombineSig(request, function(err, response) {
console.log(response);
});
// Console output:
// {
// "have_all_signatures": <bool>,
// "final_signature": <bytes>,
// }

Messages

signrpc.MuSig2CombineSigRequest

Source: signrpc/signer.proto

FieldgRPC TypeREST TypeREST Placement
session_id
bytesstringbody
other_partial_signatures
bytes[]arraybody

signrpc.MuSig2CombineSigResponse

Source: signrpc/signer.proto

FieldgRPC TypeREST Type
have_all_signatures
boolboolean
final_signature
bytesstring