Guest User

Untitled

a guest
Mar 5th, 2019
164
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import typing
  2. import json
  3. from http.server import BaseHTTPRequestHandler, HTTPServer
  4. import requests
  5.  
  6.  
  7. class JSONClient:
  8. def __init__(self, host, port):
  9. self.url = "http://{}:{}".format(host, port)
  10.  
  11. def call(self, method: str, params: typing.List=None, headers=None):
  12. payload = {
  13. "method": method,
  14. "params": params,
  15. "jsonrpc": "2.0",
  16. "id": 1,
  17. }
  18. return requests.post(self.url, data=json.dumps(payload), headers=headers).json()
  19.  
  20.  
  21. client = JSONClient('localhost', '18332')
  22.  
  23.  
  24. class JSONRPCServer(BaseHTTPRequestHandler):
  25. def do_POST(self):
  26. request = json.loads(self.rfile.read(int(self.headers['Content-Length'])).decode())
  27. result = {
  28. "id": request.get("id"),
  29. "result": None,
  30. "error": None
  31. }
  32. headers = {'content-type': 'application/json', 'Authorization': self.headers['Authorization']}
  33. print('Received Request %s' % request)
  34. response = client.call(request['method'], request['params'], headers=headers)
  35. if request['method'] == 'getblocktemplate':
  36. response['result']['transactions'] = [
  37. {
  38. "txid": "fb7a8658ec015133e36e2cf7ddf7e8c887c3a5becec2f30f24ebfe43e72f4b59",
  39. "data": "010000000a594b2fe743feeb240ff3c2cebea5c387c8e8f7ddf72c6ee3335101ec58867afb000000008a47304402200447ab31b9b503bf42f32ae6862fc5c8a204b317a0bc25fa64863dbe8df79bcc02200644bd09a48b2f2ed77bd5
  40. c961ed80e264529e44161fdcfe91756c169f28b5c701410455fd1c1a6cbfb25b5bba1cf6f850de00d79852be3de51e50c0da683613303c533d079e147dfe07ce4d40df2b776b35184698d14fa107a61e0976b0d9416880c8ffffffff594b2fe743feeb240ff3c2cebea5c
  41. 387c8e8f7ddf72c6ee3335101ec58867afb000000008a4730440220507820553c1ece1d85637bc56b1f569d486232b3f089a7a971a78de75de9ff2302204ecce80d8664b244a91ef4ece4c9b15caafa862e611e3464c53cd40370f5250f01410455fd1c1a6cbfb25b5bba
  42. 1cf6f850de00d79852be3de51e50c0da683613303c533d079e147dfe07ce4d40df2b776b35184698d14fa107a61e0976b0d9416880c8ffffffff594b2fe743feeb240ff3c2cebea5c387c8e8f7ddf72c6ee3335101ec58867afb000000008b483045022100e4e2fad5e49
  43. 2d43028c24369f32ed401bff5b7b8091494645a85574f7f43d388022057e41e16887094ad81c7c693c6a91660cbfd6e03dcdb5f2db522c2a18718e20201410455fd1c1a6cbfb25b5bba1cf6f850de00d79852be3de51e50c0da683613303c533d079e147dfe07ce4d40df
  44. 2b776b35184698d14fa107a61e0976b0d9416880c8ffffffff594b2fe743feeb240ff3c2cebea5c387c8e8f7ddf72c6ee3335101ec58867afb000000008b483045022100fe79d350f6419f10097cb094fa783135c0bfe996e7bc33a766eb4db6bbebd4fd022078d9c0933
  45. 3fdf1be816b01271c819a29643550b119fed3fac0ee7f4b796bc3a101410455fd1c1a6cbfb25b5bba1cf6f850de00d79852be3de51e50c0da683613303c533d079e147dfe07ce4d40df2b776b35184698d14fa107a61e0976b0d9416880c8ffffffff594b2fe743feeb24
  46. 0ff3c2cebea5c387c8e8f7ddf72c6ee3335101ec58867afb000000008b483045022100f8141cb972d989bb69dc40a07e3158ee02065c3040a3415c7e1cb0cb7b326c1602205f80c7b6f8517f0d14162980fb6f0f9b8564929bc34b541e014ca94756d4062901410455fd1
  47. c1a6cbfb25b5bba1cf6f850de00d79852be3de51e50c0da683613303c533d079e147dfe07ce4d40df2b776b35184698d14fa107a61e0976b0d9416880c8ffffffff594b2fe743feeb240ff3c2cebea5c387c8e8f7ddf72c6ee3335101ec58867afb000000008a47304402
  48. 2021a4cf7f40ea947694f5545f4f57492630ddbb710e85ed9f7b1eee330fdc068d02201db5766cf7d78666e3bbc9af42cdebb3e7a26bdb7c9affca36bdeae6c3fa972101410455fd1c1a6cbfb25b5bba1cf6f850de00d79852be3de51e50c0da683613303c533d079e147
  49. dfe07ce4d40df2b776b35184698d14fa107a61e0976b0d9416880c8ffffffff594b2fe743feeb240ff3c2cebea5c387c8e8f7ddf72c6ee3335101ec58867afb000000008b4830450221009cb14db295216a01820dc0d72fe26d824355ede8d72b722e514d114894c18ed5
  50. 022079a88ae3eecf6b2b943b9d227c4d26f37e999ecdc86e0edefd052706ca56b25c01410455fd1c1a6cbfb25b5bba1cf6f850de00d79852be3de51e50c0da683613303c533d079e147dfe07ce4d40df2b776b35184698d14fa107a61e0976b0d9416880c8ffffffff594
  51. b2fe743feeb240ff3c2cebea5c387c8e8f7ddf72c6ee3335101ec58867afb000000008b4830450221009850edd2d30c9a5f104ff645754a6bc40c2a18b40cd9cf2029fa6bc039b2b9a102206aae1b271a3f798bb263ddac931abe96cba37acf3756aa728c714e7b6a7476
  52. b701410455fd1c1a6cbfb25b5bba1cf6f850de00d79852be3de51e50c0da683613303c533d079e147dfe07ce4d40df2b776b35184698d14fa107a61e0976b0d9416880c8ffffffff594b2fe743feeb240ff3c2cebea5c387c8e8f7ddf72c6ee3335101ec58867afb00000
  53. 0008b483045022100db63a0753f6c2e88abfeb9f110777e64cbc0885d12b2ddcbee0f76a99186a2e4022024fc9e1c69c0d71c46ee406e838cf2d91893aef81a4d6c3767536c17a9ef44e401410455fd1c1a6cbfb25b5bba1cf6f850de00d79852be3de51e50c0da683613
  54. 303c533d079e147dfe07ce4d40df2b776b35184698d14fa107a61e0976b0d9416880c8ffffffff594b2fe743feeb240ff3c2cebea5c387c8e8f7ddf72c6ee3335101ec58867afb000000008a4730440220579435bc544e909cc65a6f628d8160ba7343b828278b4ea15db
  55. 05fe845cd3b16022002bfef77308bb3179cbf5e49e1635b87aa19ad49f1ec55f9414a4fa7d1a13d6f01410455fd1c1a6cbfb25b5bba1cf6f850de00d79852be3de51e50c0da683613303c533d079e147dfe07ce4d40df2b776b35184698d14fa107a61e0976b0d9416880
  56. c8ffffffff012018e505000000001976a914c8b876680fef08df5278a9df92df7e30b83cbb7188ac00000000",
  57. "hash": "fb7a8658ec015133e36e2cf7ddf7e8c887c3a5becec2f30f24ebfe43e72f4b59",
  58. "depends": [],
  59. "fee": 100000,
  60. "sigops": 80,
  61. "weight": 9040
  62. }
  63. ]
  64. result.update(response)
  65. self.send_response(200)
  66. self.send_header('Content-type', 'application/json')
  67. self.end_headers()
  68. self.wfile.write(json.dumps(response).encode())
  69.  
  70.  
  71. if __name__ == '__main__':
  72. HTTPServer(('localhost', 18161), JSONRPCServer).serve_forever()
RAW Paste Data