forked from cryptosharks131/lndg
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkeysend.py
52 lines (49 loc) · 2.42 KB
/
keysend.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
import secrets
from hashlib import sha256
from lndg import settings
from gui.lnd_deps import router_pb2 as lnr
from gui.lnd_deps import router_pb2_grpc as lnrouter
from gui.lnd_deps.lnd_connect import lnd_connect
def keysend(target_pubkey, msg, amount, fee_limit, timeout):
#Construct and send
routerstub = lnrouter.RouterStub(lnd_connect(settings.LND_DIR_PATH, settings.LND_NETWORK, settings.LND_RPC_SERVER))
secret = secrets.token_bytes(32)
hashed_secret = sha256(secret).hexdigest()
custom_records = [(5482373484, secret),]
msg = str(msg)
if len(msg) > 0:
custom_records.append((34349334, bytes.fromhex(msg.encode('utf-8').hex())))
for response in routerstub.SendPaymentV2(lnr.SendPaymentRequest(dest=bytes.fromhex(target_pubkey), dest_custom_records=custom_records, fee_limit_sat=fee_limit, timeout_seconds=timeout, amt=amount, payment_hash=bytes.fromhex(hashed_secret))):
if response.status == 1:
print('In-flight')
if response.status == 2:
print('Succeeded')
if response.status == 3:
if response.failure_reason == 1:
print('Failure - Timeout')
elif response.failure_reason == 2:
print('Failure - No Route')
elif response.failure_reason == 3:
print('Failure - Error')
elif response.failure_reason == 4:
print('Failure - Incorrect Payment Details')
elif response.failure_reason == 5:
print('Failure Insufficient Balance')
if response.status == 0:
print('Unknown Error')
def main():
#Ask user for variables
try:
target_pubkey = input('Enter the pubkey of the node you want to send a keysend payment to: ')
amount = int(input('Enter an amount in sats to be sent with the keysend payment (defaults to 1 sat): ') or '1')
fee_limit = int(input('Enter an amount in sats to be used as a max fee limit for sending (defaults to 1 sat): ') or '1')
msg = input('Enter an optional message to be included (leave this blank for no message): ')
except:
print('Invalid data entered, please try again.')
timeout = 10
print('Sending keysend payment of %s to: %s' % (amount, target_pubkey))
if len(msg) > 0:
print('Attaching this message to the keysend payment:', msg)
keysend(target_pubkey, msg, amount, fee_limit, timeout)
if __name__ == '__main__':
main()