def test_sendcmpt(): msg = Sendcmpct(1, 1) msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Sendcmpct.deserialize(get_payload(msg_bytes)[1]) msg = Sendcmpct(0, 1) msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Sendcmpct.deserialize(get_payload(msg_bytes)[1])
def test_valid(): message_name = "message" payload = b"\x00" magic = b"\xff\xff\xff\xff" msg = magic + add_headers(message_name, payload) verify_headers(msg) assert get_payload(msg)[0] == message_name assert get_payload(msg)[1] == payload
def test_block(): transactions = [] for x in range(10): tx_in = TxIn( prevout=OutPoint(), scriptSig=script.serialize([f"{x}{x}"]), sequence=0xFFFFFFFF, txinwitness=[], ) tx_out = TxOut( value=50 * 10**8, scriptPubKey=script.serialize([f"{x}{x}"]), ) tx = TxData( version=1, locktime=0, vin=[tx_in], vout=[tx_out], ) transactions.append(tx) header = BlockHeader( version=1, previousblockhash="00" * 32, merkleroot="00" * 32, time=1, bits=b"\x23\x00\x00\x01", nonce=1, ) header.merkleroot = _generate_merkle_root(transactions) msg = Block(BlockData(header, transactions)) msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Block.deserialize(get_payload(msg_bytes)[1])
def test_version_without_agent(): services = 1032 + 1 msg = Version( version=ProtocolVersion, services=services, timestamp=1, addr_recv=NetworkAddress(0, 0, to_ipv6("0.0.0.0"), 1), addr_from=NetworkAddress(0, services, to_ipv6("0.0.0.0"), 1), nonce=1, user_agent="", start_height=0, relay=True, ) msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Version.deserialize(get_payload(msg_bytes)[1])
def test_headers(): headers = [] for x in range(10): headers.append( BlockHeader( version=70015, previousblockhash=f"{x}{x}" * 32, merkleroot="00" * 32, time=1, bits=b"\x23\x00\x00\x01", nonce=1, )) msg = Headers(headers) msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Headers.deserialize(get_payload(msg_bytes)[1])
def test_tx(): tx_in = TxIn( prevout=OutPoint(), scriptSig=script.serialize(["00"]), sequence=0xFFFFFFFF, txinwitness=[], ) tx_out = TxOut( value=50 * 10**8, scriptPubKey=script.serialize(["00"]), ) tx = TxData( version=1, locktime=0, vin=[tx_in], vout=[tx_out], ) msg = Tx(tx) msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Tx.deserialize(get_payload(msg_bytes)[1])
def test_blocktxn(): transactions = [] for x in range(10): tx_in = TxIn( prevout=OutPoint(), scriptSig=script.serialize([f"{x}{x}"]), sequence=0xFFFFFFFF, txinwitness=[], ) tx_out = TxOut( value=50 * 10**8, scriptPubKey=script.serialize([f"{x}{x}"]), ) tx = TxData( version=1, locktime=0, vin=[tx_in], vout=[tx_out], ) transactions.append(tx) msg = Blocktxn("00" * 32, transactions) msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Blocktxn.deserialize(get_payload(msg_bytes)[1])
def test_sendheaders(): msg = Sendheaders() msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Sendheaders.deserialize(get_payload(msg_bytes)[1])
def test_mempool(): msg = Mempool() msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Mempool.deserialize(get_payload(msg_bytes)[1])
def test_not_found(): msg = Notfound([(1, "00" * 32)]) msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Notfound.deserialize(get_payload(msg_bytes)[1])
def test_empty_inv(): msg = Inv([]) msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Inv.deserialize(get_payload(msg_bytes)[1])
def test_filled_inv(): msg = Inv([(1, "00" * 32)]) msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Inv.deserialize(get_payload(msg_bytes)[1])
def test_reject(): msg = Reject("tx", RejectCode(0x42), "", "00" * 32) msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Reject.deserialize(get_payload(msg_bytes)[1])
def test_invalid_inv(): msg = Inv([(1, "00"), (1, "00")]) msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg != Inv.deserialize(get_payload(msg_bytes)[1])
def test_getblocktxn(): msg = Getblocktxn("00" * 32, [2**x for x in range(10)]) msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Getblocktxn.deserialize(get_payload(msg_bytes)[1])
def test_getdata(): msg = Getdata([(1, "00" * 32)]) msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Getdata.deserialize(get_payload(msg_bytes)[1])
def test_empty_blocktxn(): msg = Blocktxn("00" * 32, []) msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Blocktxn.deserialize(get_payload(msg_bytes)[1])
def test_empty_headers(): msg = Headers([]) msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Headers.deserialize(get_payload(msg_bytes)[1])
def test_getheaders(): msg = Getheaders(70015, ["00" * 32, "11" * 32], "00" * 32) msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Getheaders.deserialize(get_payload(msg_bytes)[1])
def test_valid_addr(): msg = Addr([NetworkAddress(0, 0, IPv6Address(1), 1)]) msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Addr.deserialize(get_payload(msg_bytes)[1])
def test_valid_getaddr(): msg = Getaddr() msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Getaddr.deserialize(get_payload(msg_bytes)[1])
def test_empty_addr(): msg = Addr([]) msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Addr.deserialize(get_payload(msg_bytes)[1])
def test_verack(): msg = Verack() msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Verack.deserialize(get_payload(msg_bytes)[1])
def test_ping(): msg = Ping(1) msg_bytes = bytes.fromhex("00" * 4) + msg.serialize() assert msg == Ping.deserialize(get_payload(msg_bytes)[1])