Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: encapsulate /p2p-circuit multiaddrs when dialing a known peerid (#…
…1680) The logic for creating a dial target tries to ensure multiaddrs are encapsulated with `/p2p/${peerId}` IF the dial target's peer id is known. It uses `addr.getPeerId() != null` to check if this is already the case. ``` > multiaddr("/ip4/127.0.0.1/tcp/4001/p2p/12Dfoo...").getPeerId() '12Dfoo...' ``` However, circuit relay addresses return the **relay server's** peer id if they don't end in `/p2p/${destinationPeerId}`. ``` > multiaddr("/ip4/127.0.0.1/tcp/4001/p2p/12D3bar.../p2p-circuit").getPeerId() '12D3bar...' ``` Since the dialer then thinks the multiaddr already has a peer id, it doesn't encapsulate with `/p2p/${destinationPeerId}`, which ultimately results in failed dials to circuit relay destinations (`Circuit relay dial failed as addresses did not have peer id`). If I understand things right, the desired behavior is for circuit relay addresses to get encapsulated with the destination peer id. --------- Co-authored-by: achingbrain <alex@achingbrain.net>
- Loading branch information