Exemplo n.º 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
Exemplo n.º 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())
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)
Exemplo n.º 4
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")
Exemplo n.º 5
0
 def handle_verack(self, packet):
     my_getaddr_packet = NetworkEnvelope(command=b"getaddr", payload=b"")
     self.socket.send(my_getaddr_packet.serialize())
Exemplo n.º 6
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())