async def dial(self, maddr, self_id, options=None): """ dial a transport to peer listening on multiaddr :param maddr: multiaddr of peer :param self_id: peer_id of the dialer (to send to receiver) :param options: optional object :return: True if successful """ host = maddr.value_for_protocol('ip4') port = int(maddr.value_for_protocol('tcp')) reader, writer = await asyncio.open_connection(host, port) # First: send our peer ID so receiver knows it writer.write(id_b58_encode(self_id).encode()) await writer.drain() # Await ack for peer id expected_ack_str = "received peer id" ack = (await reader.read(len(expected_ack_str))).decode() if ack != expected_ack_str: raise Exception("Receiver did not receive peer id") return RawConnection(host, port, reader, writer, True)
def test_id_b58_encode(): random_id_string = '' for _ in range(10): random_id_string += random.SystemRandom().choice(ALPHABETS) expected = base58.b58encode(random_id_string).decode() actual = id_b58_encode(ID(random_id_string)) assert actual == expected