Skip to main content

PushPreimage

PushPreimage is called by the client to push the preimage to the server. This returns the musig2 signatures that the client needs to sweep the htlc.

Source: instantout.proto

gRPC

rpc PushPreimage (PushPreimageRequest) returns (PushPreimageResponse);

Code Samples

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

const GRPC_HOST = 'localhost:11010'
const MACAROON_PATH = 'LOOP_DIR/regtest/loop.macaroon'
const TLS_PATH = 'LOOP_DIR/tls.cert'

const loaderOptions = {
keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true,
};
const packageDefinition = protoLoader.loadSync('instantout.proto', loaderOptions);
const looprpc = grpc.loadPackageDefinition(packageDefinition).looprpc;
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 looprpc.InstantSwapServer(GRPC_HOST, creds);
let request = {
preimage: <bytes>,
client_nonces: <bytes>,
client_sweep_addr: <string>,
musig_tx_fee_rate: <uint64>,
};
client.pushPreimage(request, function(err, response) {
console.log(response);
});
// Console output:
// {
// "musig2_sweep_sigs": <bytes>,
// "server_nonces": <bytes>,
// }

Messages

looprpc.PushPreimageRequest

Source: instantout.proto

FieldgRPC TypeREST TypeREST Placement
preimage
bytesunknownunknown
client_nonces
bytes[]unknownunknown
client_sweep_addr
stringunknownunknown
musig_tx_fee_rate
uint64unknownunknown

looprpc.PushPreimageResponse

Source: instantout.proto

FieldgRPC TypeREST Type
musig2_sweep_sigs
bytes[]unknown
server_nonces
bytes[]unknown