Skip to content

ipv6 error: MultiAddr '/ip6/::1/tcp/0' does not contain protocol ip4 #1111

@TimSC

Description

@TimSC

Summary

When I try to create peers that communicate over ipv6 I get an error using libp2p 0.5.0:

    |   File "/home/tim/dev/p2ptest/env/lib/python3.12/site-packages/libp2p/transport/tcp/tcp.py", line 91, in listen
    |     ip4_host_str = maddr.value_for_protocol("ip4")
    |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/home/tim/dev/p2ptest/env/lib/python3.12/site-packages/multiaddr/multiaddr.py", line 293, in value_for_protocol
    |     raise exceptions.ProtocolLookupError(proto, str(self))
    | multiaddr.exceptions.ProtocolLookupError: MultiAddr '/ip6/::1/tcp/0' does not contain protocol Protocol(code=4, name='ip4', codec='ip4')

My minimal example:

import argparse

import trio
import multiaddr

from libp2p import (
    InsecureTransport,
    PLAINTEXT_PROTOCOL_ID,
    TProtocol,
    create_new_ed25519_key_pair,
    new_host,
)
from libp2p.peer.peerinfo import info_from_p2p_addr
from libp2p.peer.peerstore import PeerStore
from libp2p.tools.async_service import background_trio_service


def make_plaintext_host(listen_addrs=None):
    key_pair = create_new_ed25519_key_pair()
    peerstore = PeerStore()
    sec_opt = {
        TProtocol(PLAINTEXT_PROTOCOL_ID): InsecureTransport(
            key_pair, peerstore=peerstore
        )
    }
    return new_host(
        key_pair=key_pair,
        sec_opt=sec_opt,
        peerstore_opt=peerstore,
        listen_addrs=listen_addrs,
    )


async def main(use_ipv4: bool):
    if use_ipv4:
        listen_addr = multiaddr.Multiaddr("/ip4/127.0.0.1/tcp/0")
    else:
        listen_addr = multiaddr.Multiaddr("/ip6/::1/tcp/0")

    server = make_plaintext_host([listen_addr])
    client = make_plaintext_host()

    async with server.run([listen_addr]):
        async with background_trio_service(client.get_network()):
            await trio.sleep(0.1)
            server_addrs = server.get_addrs()
            print("server addrs:", server_addrs)

            target = info_from_p2p_addr(server_addrs[0])
            await client.connect(target)
            print("connected to server over plaintext")


if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        description="Minimal libp2p plaintext repro using IPv6 or IPv4."
    )
    parser.add_argument(
        "--ipv4",
        action="store_true",
        help="Use IPv4 (default is IPv6).",
    )
    args = parser.parse_args()

    trio.run(main, args.ipv4)

If I patch around this problem, I hit another error:

failed to upgrade security for peer 12D3KooWAUtLVoYPSPdTjxYpANDeD3MKzECeQvWfhCLP12WqEkvA: failed to negotiate the secure protocol

Expected behavior

To run without errors

Actual behavior

Errors logs are above

Relevant log output

Errors are above

Possible Solution

None yet

Environment

Python version:
3.12.3 (main, Nov  6 2025, 13:44:16) [GCC 13.3.0]

Operating System: Linux-6.14.0-37-generic-x86_64-with-glibc2.39

python -m pip freeze result:
aioquic==1.3.0
annotated-types==0.7.0
async-generator==1.10
attrs==25.4.0
base58==2.1.1
blake3==1.0.8
certifi==2025.11.12
cffi==2.0.0
coincurve==21.0.0
cryptography==46.0.3
cytoolz==1.1.0
dnspython==2.8.0
eth-hash==0.7.1
eth-typing==5.2.1
eth-utils==5.3.1
fastecdsa==2.3.2
grpcio==1.76.0
h11==0.16.0
idna==3.11
ifaddr==0.2.0
importlib_metadata==8.7.1
libp2p==0.5.0
lru-dict==1.4.1
miniupnpc==2.3.3
mmh3==5.2.0
morphys==1.0
multiaddr==0.0.11
mypy-protobuf==4.0.0
mypy_extensions==1.1.0
netaddr==1.3.0
noiseprotocol==0.3.1
outcome==1.3.0.post0
packaging==25.0
protobuf==6.33.2
psutil==7.2.0
py-cid==0.4.0
py-multibase==2.0.0
py-multicodec==1.0.0
py-multihash==3.0.0
pyasn1==0.6.1
pyasn1_modules==0.4.2
pycparser==2.23
pycryptodome==3.23.0
pydantic==2.12.5
pydantic_core==2.41.5
pylsqpack==0.3.23
PyNaCl==1.6.1
pyOpenSSL==25.3.0
python-baseconv==1.2.2
rpcudp==5.0.1
service-identity==24.2.0
six==1.17.0
sniffio==1.3.1
sortedcontainers==2.4.0
toolz==1.1.0
trio==0.32.0
trio-typing==0.10.0
trio-websocket==0.12.2
types-protobuf==6.32.1.20251210
typing-inspection==0.4.2
typing_extensions==4.15.0
u-msgpack-python==2.8.0
varint==1.0.2
wsproto==1.3.2
zeroconf==0.147.3
zipp==3.23.0

Would you like to work on fixing this bug ?

Yes

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions