github.com/mit-dci/lit@v0.0.0-20221102210550-8c3d3b49f2ce/cmd/litgtk/litgtk.py (about) 1 #!/usr/bin/env python 2 3 import websocket # `pip install websocket-client` 4 import socket 5 import json 6 7 import pygtk 8 pygtk.require('2.0') 9 import gtk 10 11 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # global for socket connection 12 13 def getBal(): 14 rpcCmd = { 15 "method": "LitRPC.Bal", 16 "params": [{ 17 }] 18 } 19 rpcCmd.update({"jsonrpc": "2.0", "id": "93"}) 20 print(json.dumps(rpcCmd)) 21 s.sendall(json.dumps(rpcCmd)) 22 r = json.loads(s.recv(8000000)) 23 print(r) 24 return r["result"]["TotalScore"] 25 26 def getAdr(): 27 rpcCmd = { 28 "method": "LitRPC.Address", 29 "params": [{ 30 "NumToMake": 0, 31 }] 32 } 33 rpcCmd.update({"jsonrpc": "2.0", "id": "94"}) 34 print(json.dumps(rpcCmd)) 35 s.sendall(json.dumps(rpcCmd)) 36 r = json.loads(s.recv(8000000)) 37 print(r) 38 n = len(r["result"]["PreviousAddresses"]) -1 39 return r["result"]["PreviousAddresses"][n] #[len(r["result"]["PreviousAddresses"]-1)] 40 41 def prSend(adr, amt): 42 rpcCmd = { 43 "method": "LitRPC.Send", 44 "params": [{"DestAddrs": [adr,],"Amts": [amt,]}] 45 } 46 rpcCmd.update({"jsonrpc": "2.0", "id": "95"}) 47 print(json.dumps(rpcCmd)) 48 s.sendall(json.dumps(rpcCmd)) 49 r = json.loads(s.recv(8000000)) 50 print(r) 51 if r["error"] != None: 52 return "send error: " + r["error"] 53 return "Sent. TXID: " + r["result"]["Txids"][0] 54 55 56 class lndrpcui: 57 58 def dialog(self, widget, adrWidget, amtWidget): 59 txid = prSend(adrWidget.get_text(), amtWidget.get_value_as_int()) 60 d = gtk.MessageDialog( 61 type=gtk.MESSAGE_INFO, buttons=gtk.BUTTONS_OK,message_format=txid) 62 d.run() 63 d.destroy() 64 65 def gBal(self, widget, balWidget, rcvadrWidget): 66 bal = getBal() 67 balWidget.set_text("Balance: " + "{:,}".format(bal) + " (" + str(bal/100000000.0) + "BTC)") 68 adr = getAdr() 69 rcvadrWidget.set_text(adr) 70 71 def __init__(self): 72 73 window = gtk.Window(gtk.WINDOW_TOPLEVEL) 74 self.window = window 75 window.connect("destroy", lambda w: gtk.main_quit()) 76 window.set_title("lit-gtk") 77 78 main_vbox = gtk.VBox(False, 5) 79 main_vbox.set_border_width(10) 80 window.add(main_vbox) 81 82 rcvFrame = gtk.Frame("Receive Address") 83 main_vbox.pack_start(rcvFrame, True, False, 0) 84 #~ recvHbox 85 rcvhbox = gtk.HBox(False, 0) 86 rcvhbox.set_border_width(5) 87 rcvFrame.add(rcvhbox) 88 rcvLabel = gtk.Label("receive address here") 89 rcvLabel.set_selectable(True) 90 rcvhbox.pack_start(rcvLabel, False, False, 5) 91 92 balFrame = gtk.Frame("balance") 93 main_vbox.pack_start(balFrame, True, False, 0) 94 #~ balHbox 95 balhbox = gtk.HBox(False, 0) 96 balhbox.set_border_width(5) 97 balFrame.add(balhbox) 98 balLabel = gtk.Label("balance here") 99 refreshButton = gtk.Button("Refresh") 100 refreshButton.connect("clicked", self.gBal, balLabel, rcvLabel) 101 balhbox.pack_start(refreshButton, False, False, 5) 102 balhbox.pack_end(balLabel, False, False, 5) 103 104 #~ adr / amt vbox 105 frame = gtk.Frame("send coins (satoshis)") 106 main_vbox.pack_start(frame, True, False, 0) 107 108 vbox = gtk.VBox(False, 0) 109 vbox.set_border_width(5) 110 frame.add(vbox) 111 112 #~ adr / amt hbox 113 hbox = gtk.HBox(False, 0) 114 vbox.pack_start(hbox, False, False, 5) 115 116 sendButton = gtk.Button("Send") 117 vbox.pack_start(sendButton, False, False, 5) 118 #~ adrVbox 119 adrVbox = gtk.VBox(False, 0) 120 hbox.pack_start(adrVbox, True, True, 5) 121 adrLabel = gtk.Label("send to address") 122 adrLabel.set_alignment(0, 1) 123 124 adrVbox.pack_start(adrLabel, False, False, 0) 125 126 adrEntry = gtk.Entry(50) 127 adrEntry.set_size_request(500, -1) 128 adrVbox.pack_start(adrEntry, True, True, 0) 129 #~ amtVbox 130 amtVbox = gtk.VBox(False, 0) 131 hbox.pack_start(amtVbox, False, False, 5) 132 133 label = gtk.Label("amount") 134 label.set_alignment(0, 1) 135 amtVbox.pack_start(label, False, False, 0) 136 137 adj = gtk.Adjustment(0, 1000000, 100000000.0, 1.0) 138 sendamtSpinner = gtk.SpinButton(adj, 1.0, 0) 139 sendamtSpinner.set_wrap(False) 140 #~ sendamtSpinner.set_size_request(100, -1) 141 amtVbox.pack_start(sendamtSpinner, False, False, 0) 142 143 144 #~ sendButton.connect("clicked", lambda w: prSend(adrEntry, sendamtSpinner)) 145 sendButton.connect("clicked", self.dialog, adrEntry, sendamtSpinner) 146 147 148 149 quitButton = gtk.Button("Quit") 150 quitButton.connect("clicked", lambda w: gtk.main_quit()) 151 buttonBox = gtk.HBox(False, 0) 152 buttonBox.pack_start(quitButton, False, False, 5) 153 main_vbox.pack_start(buttonBox, False, False, 5) 154 155 156 157 window.show_all() 158 159 def main(): 160 s.connect(("127.0.0.1", 8001)) 161 gtk.main() 162 return 0 163 164 if __name__ == "__main__": 165 lndrpcui() 166 main()