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()