The shared contract between the eNode-go server, its catalogue daemons
(torrent-crawler, usenet-crawler, kademlia-crawler) and the eMuleQt client: the enode.meta.v1
protobuf services (MetaIngest, MetaApi, ServerSearch), their generated connect-go code, and the code that
has to produce identical bytes in every repository — the eD2K pseudo-hash, the
ed2k:/bt:/nzb: ids, the FT_META_* tag ids, and torrent/NZB identity parsing.
Module path: github.com/ModderMule/enodemeta (Go ≥ 1.25). Its only dependencies
are google.golang.org/protobuf and connectrpc.com/connect/v2.
| Repository | How it imports this module |
|---|---|
| torrent-crawler | replace github.com/ModderMule/enodemeta => ../enodemeta (clone side by side) |
| usenet-crawler | replace github.com/ModderMule/enodemeta => ../enodemeta (clone side by side) |
| kademlia-crawler | replace github.com/ModderMule/enodemeta => ../enodemeta (clone side by side) |
| eNode-go | git submodule at ./enodemeta, replace ... => ./enodemeta |
| eMuleQt | generates C++ from proto/, ports metahash and btid by hand against testdata/ |
A consumer must import the generated code from here rather than generating its
own copy of proto/enode/meta/v1: protobuf-go panics at init when the same file
descriptor is registered twice.
| Path | What it holds |
|---|---|
proto/, gen/ |
The .proto files and the generated protobuf + connect code (checked in) |
metahash/ |
The eD2K pseudo-hash: minting, parsing, cross-checking |
btid/, magnet/, ed2klink/ |
The ed2k:/bt:v1:/bt:v2:/nzb:/web: id namespace; magnet and eD2K links |
model/, pbconv/ |
Domain types without protobuf, and the conversions at the edge |
tags/, filetype/ |
FT_META_* tag ids and flags; extension → eD2K file type |
bencode/, torrentmeta/, nzbmeta/, weblinks/ |
Metafile parsing and identity |
verify.go |
VerifyMetaFile: recompute a metafile's identity and check it against a hash |
testdata/ |
Cross-language vectors |
go test ./...
scripts/gen-proto.sh # only after editing a .proto; needs protoc- docs/ingest-contract.md — the normative
MetaIngestcontract - docs/enodemeta.md — the library, the pseudo-hash, and how each consumer uses it