SendPaymentSync - 同步支付
SendPaymentSync是SendPayment的非流式同步版本。这个RPC调用主要用于 客户端通过REST代理的调用。另外,这个调用需要目标公钥和支付哈希以 16进制字符串编码。
gRPC请求 - SendRequest
字段如下:
- dest:支付接收方的标识公钥, bytes
- dest_string:支付接收方的公钥的16进制字符串表示, string
- amt:要发送的satoshi数量, int64
- payment_hash:在支付的HTLC中要使用的哈希, bytes
- payment_hash_string:支付的HTLC中的哈希的16进制字符串表示ID, string
- payment_request:闪电网络内的支付请求,string
- final_cltv_delta:CTTV差值, int32
- fee_limit FeeLimit:手续费上限,单位:satoshi
- outgoing_chan_id:第一跳的通道ID,0表示可用任何通道, uint64
- cltv_limit:路由的最大时间锁, uint32 ,可选
gRPC响应 - SendResponse
字段如下:
- payment_error:string
- payment_preimage:bytes
- payment_route:Route
- payment_hash:bytes
示例代码
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.SendRequest(
dest=<bytes>,
dest_string=<string>,
amt=<int64>,
payment_hash=<bytes>,
payment_hash_string=<string>,
payment_request=<string>,
final_cltv_delta=<int32>,
fee_limit=<FeeLimit>,
outgoing_chan_id=<uint64>,
cltv_limit=<uint32>,
)
>>> response = stub.SendPaymentSync(request)
>>> print(response)
{
"payment_error": <string>,
"payment_preimage": <bytes>,
"payment_route": <Route>,
"payment_hash": <bytes>,
}
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 = {
dest: <bytes>,
dest_string: <string>,
amt: <int64>,
payment_hash: <bytes>,
payment_hash_string: <string>,
payment_request: <string>,
final_cltv_delta: <int32>,
fee_limit: <FeeLimit>,
outgoing_chan_id: <uint64>,
cltv_limit: <uint32>,
}
> lightning.sendPaymentSync(request, function(err, response) {
console.log(response);
})
{
"payment_error": <string>,
"payment_preimage": <bytes>,
"payment_route": <Route>,
"payment_hash": <bytes>,
}