-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathlndrpc.py
103 lines (92 loc) · 3.19 KB
/
lndrpc.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import logging
import sys
sys.path.insert(0, 'googleapis')
import rpc_pb2 as ln
import rpc_pb2_grpc as lnrpc
import grpc
from google.protobuf.json_format import MessageToJson
class LndWrapper:
"""API for Lightning gRPC client
"""
def __init__(self, cert, config):
creds = grpc.ssl_channel_credentials(cert)
channel = grpc.secure_channel(config.LND_HOST, creds)
self.stub = lnrpc.LightningStub(channel)
self.node_address = config.NODE_ADDRESS
self.node_port = config.NODE_PORT
self.channel_amount = config.CHANNEL_AMOUNT
def get_uri(self):
try:
request = ln.GetInfoRequest()
response = self.stub.GetInfo(request)
logging.info(response)
node_id = response.identity_pubkey
return "%s@%s:%d" % (node_id, self.node_address, self.node_port)
except grpc.RpcError as e:
logging.error(e)
return e.details()
def get_invoice(self, amount, label, description=None):
try:
request = ln.Invoice(
memo="%s: %s" % (label, description),
value=amount
)
response = self.stub.AddInvoice(request)
logging.info(response)
return response.payment_request
except grpc.RpcError as e:
logging.error(e)
return e.details()
def decodepay(self, bolt11):
try:
request = ln.PayReqString(
pay_req=bolt11
)
response = self.stub.DecodePayReq(request)
logging.info(response)
except grpc.RpcError as e:
logging.error(e)
def _pay(self, bolt11):
try:
request = ln.SendRequest(
payment_request=bolt11
)
response = self.stub.SendPaymentSync(request)
logging.info(response)
if response.payment_preimage:
return "Preimage %s" % MessageToJson(response.payment_preimage)
else:
return str(response)
except grpc.RpcError as e:
logging.error(e)
return e.details()
def _connect(self, node_id, host=None, port=9735):
addr = ln.LightningAddress(
pubkey=node_id,
host="%s:%s" % (host, port)
)
try:
request = ln.ConnectPeerRequest(
addr=addr
)
response = self.stub.ConnectPeer(request)
logging.info(response)
return "Connected %s" % node_id
except grpc.RpcError as e:
logging.error(e)
return e.details()
def _fundchannel(self, node_id, satoshis=None):
try:
request = ln.OpenChannelRequest(
node_pubkey_string=node_id,
local_funding_amount=satoshis or self.channel_amount
)
response = self.stub.OpenChannelSync(request)
logging.info(response)
if response.funding_txid_str:
return response.funding_txid_str
else:
return MessageToJson(response)
except grpc.RpcError as e:
logging.error(e)
return e.details()