Beispiel #1
0
def handshake(address):
    # Create the socket
    sock = socket.socket()
    stream = sock.makefile('rb', None)
    # Initiate TCP connection
    sock.connect(address)

    # Send our "version" message
    payload = VersionMessage().serialize()
    envelope = NetworkEnvelope(command=b"version", payload=payload)
    sock.send(envelope.serialize())

    # Receive peer's "version" message
    envelope = NetworkEnvelope.parse(stream)
    print(envelope.command)

    # Receive peer's "verack" message
    envelope = NetworkEnvelope.parse(stream)
    print(envelope.command)

    # Send our "verack" message
    envelope = NetworkEnvelope(command=b"verack", payload=b"")
    sock.send(envelope.serialize())

    return sock, stream
Beispiel #2
0
def get_blocks(sock):
    index = len(data["blocks"])
    items = [
        InventoryItem(2, int_to_little_endian(hash_, 32))
        for hash_ in data["headers"][index:index + 10]
    ]
    getdata = GetData(items=items)
    packet = NetworkEnvelope(getdata.command, getdata.serialize())
    sock.send(packet.serialize())
Beispiel #3
0
 async def receive(self):
     print("start receiving")
     while True:
         magic = await self.reader.read(4)
         if magic != NETWORK_MAGIC:
             raise RuntimeError('Network Magic not at beginning of stream')
         command = await self.reader.read(12)
         payload_length = little_endian_to_int(await self.reader.read(4))
         checksum = await self.reader.read(4)
         payload = await self.reader.read(payload_length)
         # check the checksum
         if double_sha256(payload)[:4] != checksum:
             raise RuntimeError('Payload and Checksum do not match')
         await self.q.put(NetworkEnvelope(command, payload))
import socket
from network import  NetworkEnvelope, VersionMessage

host = 'testnet.programmingbitcoin.com'

port = 18333

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.connect((host, port))
stream = socket.makefile('rb', None)
version = VersionMessage()
envelope = NetworkEnvelope(version.command, version.serialize())
socket.sendall(envelope.serialize())

while True:
    new_message = NetworkEnvelope.parse(stream)
    print(new_message)
Beispiel #5
0
def send_getheaders(sock):
    locator = construct_block_locator()
    getheaders = GetHeaders(locator)
    msg = NetworkEnvelope(getheaders.command, getheaders.serialize())
    sock.send(msg.serialize())
    print("sent getheaders")
Beispiel #6
0
 def handle_verack(self, packet):
     my_getaddr_packet = NetworkEnvelope(command=b"getaddr", payload=b"")
     self.socket.send(my_getaddr_packet.serialize())
Beispiel #7
0
 def handle_version(self, packet):
     self.version_message = packet.payload
     # FIXME: payload should default to b""
     my_verack_packet = NetworkEnvelope(command=b"verack", payload=b"")
     self.socket.send(my_verack_packet.serialize())