Skip to main content

LeaseOutput

LeaseOutput locks an output to the given ID, preventing it from being available for any future coin selection attempts. The absolute time of the lock's expiration is returned. The expiration of the lock can be extended by successive invocations of this RPC. Outputs can be unlocked before their expiration through ReleaseOutput.

A non-zero release_after_spend_confs selects a confirmation-controlled lifetime. Such a lease ignores its wall-clock expiration and releases at the requested spend depth or through ReleaseOutput. The RPC fails if the wallet cannot apply this option. Renewing the same lease with the same ID and a zero depth preserves an existing non-zero depth.

Source: walletrpc/walletkit.proto

gRPC

rpc LeaseOutput (LeaseOutputRequest) returns (LeaseOutputResponse);

REST

HTTP MethodPath
POST /v2/wallet/utxos/lease

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', 'walletrpc/walletkit.proto'], loaderOptions);
const walletrpc = grpc.loadPackageDefinition(packageDefinition).walletrpc;
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 walletrpc.WalletKit(GRPC_HOST, creds);
let request = {
id: <bytes>,
outpoint: <OutPoint>,
expiration_seconds: <uint64>,
release_after_spend_confs: <uint32>,
};
client.leaseOutput(request, function(err, response) {
console.log(response);
});
// Console output:
// {
// "expiration": <uint64>,
// "release_after_spend_confs": <uint32>,
// }

Messages

walletrpc.LeaseOutputRequest

Source: walletrpc/walletkit.proto

FieldgRPC TypeREST TypeREST Placement
id
bytesstringbody
outpoint
OutPointobjectbody
expiration_seconds
uint64stringbody
release_after_spend_confs
uint32integerbody

walletrpc.LeaseOutputResponse

Source: walletrpc/walletkit.proto

FieldgRPC TypeREST Type
expiration
uint64string
release_after_spend_confs
uint32integer

Nested Messages

lnrpc.OutPoint

FieldgRPC TypeREST Type
txid_bytes
bytesstring
txid_str
stringstring
output_index
uint32integer