-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
docs/grpc: added instructions for writing gRPC clients in Python
This commit adds a basic set of instructions for installing the necessary gRPC dependencies to be able to drive `lnd` using Python. In the future, this section will be expanded with additional example scripts/applications.
- Loading branch information
Showing
1 changed file
with
50 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
# How to write a Python gRPC client for the Lightning Network Daemon # | ||
|
||
This section enumerates what you need to do to write a client that communicates with lnd in Python. | ||
|
||
Lnd uses the gRPC protocol for communication with clients like lncli. gRPC is based on protocol buffers | ||
and as such, you will need to compile the lnd proto file in Python before you can use it to communicate with | ||
lnd. The following are the steps to take. | ||
|
||
* Create a virtual environment for your project | ||
``` | ||
$ virtualenv lnd | ||
``` | ||
* Activate the virtual environment | ||
``` | ||
$ source lnd/bin/activate | ||
``` | ||
* Install dependencies (googleapis-common-protos is required due to the use of google/api/annotations.proto) | ||
``` | ||
(lnd)$ pip install grpcio grpcio-tools googleapis-common-protos | ||
``` | ||
* Clone the google api's repository (required due to the use of google/api/annotations.proto) | ||
``` | ||
(lnd)$ git clone https://github.com/googleapis/googleapis.git | ||
``` | ||
* Copy the lnd rpc.proto file (you'll find this in lnrpc/rpc.proto) or just download it | ||
``` | ||
(lnd)$ curl -o rpc.proto -s https://raw.githubusercontent.com/lightningnetwork/lnd/master/lnrpc/rpc.proto | ||
``` | ||
* Compile the proto file | ||
``` | ||
(lnd)$ python -m grpc_tools.protoc --proto_path=googleapis:. --python_out=. --grpc_python_out=. rpc.proto | ||
``` | ||
|
||
After following these steps, two files `rpc_pb2.py` and `rpc_pb2_grpc.py` will be generated. These files will be | ||
imported in your project while writing your clients. Here's an example of a simple client that was built using these. | ||
|
||
``` | ||
# python-based lnd client to retrieve and display wallet balance | ||
import grpc | ||
import rpc_pb2 as ln | ||
import rpc_pb2_grpc as lnrpc | ||
channel = grpc.insecure_channel('localhost:10009') | ||
stub = lnrpc.LightningStub(channel) | ||
response = stub.WalletBalance(ln.WalletBalanceRequest(witness_only=True)) | ||
print(response.balance) | ||
``` |