QueryRoutes - 查询路径
QueryRoutes 查询指定目标地址指定金额(statoshi)的可用通道路由。返回的 路由包含了创建和发送HTLC所需的完整细节。
gRPC请求 - QueryRoutesRequest
字段如下:
- pub_key:表示支付目标的33字节16进制编码公钥
- amt:发送金额,单位:satoshi, int64
- final_cltv_delta:最终的CLTV差额, int32
- fee_limit:手续费上线, 类型:FeeLimit
- ignored_nodes:路径搜索时应当忽略的节点,bytes数组
- ignored_edges:路径搜索应当忽略的边,EdgeLocator数组
- source_pub_key:路由源节点,string,为空时表示以自身为源节点
- use_mission_control:是否使用发散控制, bool
gRPC响应 - QueryRoutesResponse
字段如下:
- routes:路由表,Route数组
示例代码
Python示例代码
>>> import codecs, grpc, os
>>> import rpc_pb2 as ln, rpc_pb2_grpc as lnrpc
>>> macaroon = codecs.encode(open('LND_DIR/data/chain/bitcoin/simnet/admin.macaroon', 'rb').read(), 'hex')
>>> os.environ['GRPC_SSL_CIPHER_SUITES'] = 'HIGH+ECDSA'
>>> cert = open('LND_DIR/tls.cert', 'rb').read()
>>> ssl_creds = grpc.ssl_channel_credentials(cert)
>>> channel = grpc.secure_channel('localhost:10009', ssl_creds)
>>> stub = lnrpc.LightningStub(channel)
>>> request = ln.QueryRoutesRequest(
pub_key=<string>,
amt=<int64>,
final_cltv_delta=<int32>,
fee_limit=<FeeLimit>,
ignored_nodes=<array bytes>,
ignored_edges=<array EdgeLocator>,
source_pub_key=<string>,
use_mission_control=<bool>,
)
>>> response = stub.QueryRoutes(request)
>>> print(response)
{
"routes": <array Route>,
}
JavaScript示例代码
> var fs = require('fs');
> var grpc = require('grpc');
> var lnrpc = grpc.load('rpc.proto').lnrpc;
> process.env.GRPC_SSL_CIPHER_SUITES = 'HIGH+ECDSA'
> var lndCert = fs.readFileSync('LND_DIR/tls.cert');
> var sslCreds = grpc.credentials.createSsl(lndCert);
> var macaroonCreds = grpc.credentials.createFromMetadataGenerator(function(args, callback) {
var macaroon = fs.readFileSync("LND_DIR/data/chain/bitcoin/simnet/admin.macaroon").toString('hex');
var metadata = new grpc.Metadata()
metadata.add('macaroon', macaroon);
callback(null, metadata);
});
> var creds = grpc.credentials.combineChannelCredentials(sslCreds, macaroonCreds);
> var lightning = new lnrpc.Lightning('localhost:10009', creds);
> var request = {
pub_key: <string>,
amt: <int64>,
final_cltv_delta: <int32>,
fee_limit: <FeeLimit>,
ignored_nodes: <array bytes>,
ignored_edges: <array EdgeLocator>,
source_pub_key: <string>,
use_mission_control: <bool>,
}
> lightning.queryRoutes(request, function(err, response) {
console.log(response);
})
{
"routes": <array Route>,
}