go-multiaddr includes a multiaddr CLI binary that parses a multiaddr (string or hex) and outputs detailed JSON information about each component. Python has no equivalent.
Problem
Go's CLI:
$ multiaddr /ip4/1.2.3.4/tcp/80
{
"string": "/ip4/1.2.3.4/tcp/80",
"stringSize": "21",
"packed": "0x04010203040650",
"packedSize": "9",
"components": [
{"string": "/ip4/1.2.3.4", "protocol": "ip4", "codec": "4", "value": "1.2.3.4", ...},
{"string": "/tcp/80", "protocol": "tcp", "codec": "6", "value": "80", ...}
]
}
Proposed Solution
Add multiaddr/cli.py:
import argparse
import json
import sys
from .multiaddr import Multiaddr
from .transforms import bytes_iter
def main():
parser = argparse.ArgumentParser(description="Inspect multiaddrs")
parser.add_argument("addr", help="Multiaddr string or hex bytes (0x...)")
args = parser.parse_args()
if args.addr.startswith("0x"):
addr = Multiaddr(bytes.fromhex(args.addr[2:]))
else:
addr = Multiaddr(args.addr)
components = []
for offset, proto, codec, value in bytes_iter(addr.to_bytes()):
comp = {
"protocol": proto.name,
"code": proto.code,
"value": codec.to_string(proto, value) if codec.SIZE != 0 else None,
"rawValue": "0x" + value.hex(),
}
components.append(comp)
result = {
"string": str(addr),
"packed": "0x" + addr.to_bytes().hex(),
"packedSize": len(addr.to_bytes()),
"components": components,
}
print(json.dumps(result, indent=2))
Register as console script in pyproject.toml:
[project.scripts]
multiaddr = "multiaddr.cli:main"
Related
go-multiaddr includes a
multiaddrCLI binary that parses a multiaddr (string or hex) and outputs detailed JSON information about each component. Python has no equivalent.Problem
Go's CLI:
$ multiaddr /ip4/1.2.3.4/tcp/80 { "string": "/ip4/1.2.3.4/tcp/80", "stringSize": "21", "packed": "0x04010203040650", "packedSize": "9", "components": [ {"string": "/ip4/1.2.3.4", "protocol": "ip4", "codec": "4", "value": "1.2.3.4", ...}, {"string": "/tcp/80", "protocol": "tcp", "codec": "6", "value": "80", ...} ] }Proposed Solution
Add
multiaddr/cli.py:Register as console script in
pyproject.toml:Related
multiaddr/main.go