Skip to content

Instantly share code, notes, and snippets.

@thephez
Created May 29, 2019 13:49
Show Gist options
  • Save thephez/208f8e47030ca9622247393fb0861b68 to your computer and use it in GitHub Desktop.
Save thephez/208f8e47030ca9622247393fb0861b68 to your computer and use it in GitHub Desktop.
Dash P2P connection example
# From https://bitcoin.stackexchange.com/a/48395
import struct
import socket
import time
import hashlib
import binascii
# Dash Testnet
magic = "cee2caff"
def makeMessage(magic, command, payload):
checksum = hashlib.sha256(hashlib.sha256(payload).digest()).digest()[0:4]
return magic.decode("hex") + struct.pack('12sI4s',command,len(payload),checksum) + payload
def makeVersionPayload():
version = 70214
services = 0
timestamp = int(time.time())
addr_you = "127.0.0.1"
services_you = 0
port_you = 19999
addr_me = "127.0.0.1"
services_me = 0
port_me = 19999
nonce = 0
user_agent_bytes = 0
start_height = 0
relay = 0
# https://dash-docs.github.io/en/developer-reference#version
payload = "";
payload += struct.pack("i",version)
payload += struct.pack("Q",services)
payload += struct.pack("q",timestamp)
payload += struct.pack("Q",services_you)
payload += struct.pack(">16s",addr_you)
payload += struct.pack(">H",port_you)
payload += struct.pack("Q",services_me)
payload += struct.pack(">16s",addr_me)
payload += struct.pack(">H",port_me)
payload += struct.pack("Q",nonce)
payload += struct.pack("B",user_agent_bytes)
payload += struct.pack("i",start_height)
payload += struct.pack("B",relay)
return payload
ip = socket.gethostbyname("35.230.29.198")
port = 19999
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print "connected to node..."
sock.connect((ip,port))
msg = makeMessage(magic,"version",makeVersionPayload())
print "sending version packet"
sock.send(msg)
while 1:
msg = sock.recv(2**10)
if not msg:
print "done"
exit()
else:
print msg.encode("hex")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment