fork download
  1. import bitcoin
  2. import time
  3.  
  4. class Application:
  5.  
  6. def __init__(self):
  7. self.stopped = False
  8. self.net = bitcoin.network()
  9. self.channel = None
  10.  
  11. def start(self):
  12. self.net.connect("localhost", 8333, self.handle_connect)
  13.  
  14. def stop(self):
  15. self.stopped = True
  16.  
  17. def is_stopped(self):
  18. return self.stopped
  19.  
  20. def create_version_message(self):
  21. vers = bitcoin.version()
  22. vers.version = 60000
  23. vers.services = 1
  24. vers.address_me.servies = 1
  25. vers.address_me.ip = \
  26. [0, 0, 0, 0, 0, 0, 0, 0,
  27. 0, 0, 255, 255, 127, 0, 0, 1]
  28. vers.address_me.port = 8333
  29. vers.address_you.services = 1
  30. vers.address_you.ip = \
  31. [0, 0, 0, 0, 0, 0, 0, 0,
  32. 0, 0, 255, 255, 127, 0, 0, 1]
  33. vers.address_you.port = 8333
  34. vers.user_agent = "/libbitcoin:0.4/example:1/";
  35. vers.start_height = 0
  36. vers.nonce = 42
  37. return vers
  38.  
  39. # First we send our version message then the node will reply back
  40. def handle_connect(self, ec, channel):
  41. # check the error_code
  42. if ec:
  43. print 'Could not connect:', ec
  44. self.stop()
  45. return
  46. self.channel = channel
  47. version_message = self.create_version_message()
  48. self.channel.send_version(version_message, self.handle_send)
  49. self.channel.subscribe_version(self.read_version_reply)
  50.  
  51. def handle_send(self, ec):
  52. if ec:
  53. print 'Problem sending:', ec
  54. self.stop()
  55.  
  56. def read_version_reply(self, ec, vers):
  57. if ec:
  58. print 'Problem in reply:', ec
  59. self.stop()
  60. return
  61. # Display the version message back
  62. print vers.address_me.ip
  63. self.stop()
  64.  
  65. if __name__ == "__main__":
  66. app = Application()
  67. app.start()
  68. while not app.is_stopped():
  69. time.sleep(0.1)
  70.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty