forked from ElementsProject/lightning
-
Notifications
You must be signed in to change notification settings - Fork 1
/
lightning-pay
executable file
·74 lines (59 loc) · 2.34 KB
/
lightning-pay
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
#!/usr/bin/env python3
import argparse
import os
import pprint
import sys
from lightning import LightningRpc
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("bolt11_or_destination_id", required=True)
parser.add_argument("amount_in_milli_satoshi", default=None, type=int, nargs="?")
parser.add_argument("payment_hash", nargs="?")
parser.add_argument("min_final_cltv_expiry", nargs="?")
args = parser.parse_args()
def default_configdir():
home = os.getenv("HOME")
if home:
return os.path.join(home, ".lightning")
return "."
rpc_path = os.path.join(default_configdir(), "lightning-rpc")
ld = LightningRpc(rpc_path)
assert len(args.bolt11_or_destination_id) > 2, "argument bolt11_or_destination_id is invalid"
# Bolt11 passed if prefix is 'ln'
use_bolt11 = args.bolt11_or_destination_id[:2] == "ln"
if use_bolt11:
bolt11 = ld.decodepay(args.bolt11_or_destination_id)
print("Bolt11 decoded:")
pprint.pprint(bolt11)
id_ = bolt11["payee"]
payment_hash = bolt11["payment_hash"]
if "msatoshi" in bolt11:
amount_included_in_bolt = True
amount = bolt11["msatoshi"]
else:
assert args.amount_in_milli_satoshi, "need argument amount_in_milli_satoshi"
amount = args.amount_in_milli_satoshi
amount_included_in_bolt = False
reply = input("Pay %s msatoshi [Y/n]? " % amount)
if reply in ["y", "Y"]:
if amount_included_in_bolt:
ld.pay(args.bolt11_or_destination_id)
else:
ld.pay(args.bolt11_or_destination_id, amount)
else:
print("Not sending.")
else:
assert args.amount_in_milli_satoshi, "need argument amount_in_milli_satoshi"
assert args.payment_hash, "need argument payment_hash"
assert args.min_final_cltv_expiry, "need argument min_final_cltv_expiry"
amount = args.amount_in_milli_satoshi
id_ = args.bolt11_or_destination_id
payment_hash = args.payment_hash
min_cltv_expiry = args.min_final_cltv_expiry
route = ld.getroute(id_, amount, 1, min_cltv_expiry)
fee = route["route"][0]["msatoshi"] - amount
reply = input("Paying fee %s on amount %s (%.3f%%). Send [Y/n]? " % (fee, amount, fee / amount * 100.0))
if reply in ["y", "Y"]:
ld.sendpay(route["route"], payment_hash)
else:
print("Not sending.")
sys.exit(1)