Files
ZIPs/docs/audit/implementation-runtimes.tsv
zeekayandHanzo Dev 27f92fa759 Zoo's Go is nine thousand lines of import lists
An audit read the code and found the proposal that specifies it. Not one ZIP
earns a shipped verdict in any runtime, and the reason is uniform: every
primitive the corpus specifies — ML-DSA, ML-KEM, SLH-DSA, Corona, Pulsar, FHE,
the DEX VM — is reached by a blank import of luxfi/precompile, and no
repository carries a replace directive. The specification is Zoo's; the code
is Lux's.

    | | shipped | partial | none | not assessed |
    | Go   | 0 | 10 | 4 | 132 |
    | C++  | 0 |  0 | 0 | 146 |
    | Rust | 0 |  1 | 0 | 145 |

Two findings behind those numbers. The most substantial original systems code
in the estate is a two-thousand-line Rust Kubernetes operator with four
working custom resources, and no ZIP specifies it. And chains/zoo-evm
registers pulsar where node/vm/factory.go does not, so the binary an operator
actually runs lacks the primitive ZIP-0811's finality is built on.

ZIP-0803 is Final with nothing found in Go and is left unwritten rather than
demoted.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-05 19:18:41 -07:00

4.3 KiB

1go:0014partialthe whole integration is kms/Dockerfile:52 `FROM ghcr.io/luxfi/kms:1.12.9` plus three ENV lines (KMS_ORG, KMS_KEY_PREFIX, KMS_BRAND_NAME). kms/main.go:26 prints those variables to stdout rather than delegating to the upstream server, so the Go module holds 33 lines and no KMS logic
2go:0015partialnode/vm/factory.go:73 defines the Zoo EVM VMID and universe/chain.yaml:22-24 declares `type: l2` with zero validators, which is the ZIP's own claim. node/main.go:4 and evm/main.go:4 both describe the same binary as a sovereign L1, and zip-0036:53 records the Zoo EVM as not bootstrapped, so the three descriptions of one chain do not agree
3go:0419partialnode/vm/factory.go:33 registers luxfi/precompile/ai at 0x0300, so the inference address is reachable from the Zoo VM. The canonical verifier the ZIP names, luxfi/crypto/poi, is upstream Lux; no Zoo repository contains PoAI Go
4go:0423partialnode/vm/factory.go:60,81 wire luxfi/precompile/fhe and the FHE VMID, and proofs/property/fhe_noise_test.go is 544 lines of Go property tests over luxfi/fhe. The training pipeline the ZIP specifies has no Go expression; the FHE itself is upstream
5go:0803nonesearched every yaml, Dockerfile and .go under ~/work/zoo for luxfi/replicate, zapdb-replicator and ghcr.io/zoolabs/replicate: zero hits. The ZIP is Final and names three upstream Go sidecars at lines 272-274, none of which any Zoo manifest references
6go:0804partialnode/bootstrap.go:5 issues CreateSubnetTx and CreateChainTx but sits behind `//go:build bootstrap`, so it is absent from every default build. The graduation is also not settled in the declarations: node/main.go:4 asserts L1 while universe/chain.yaml:22-24 still declares L2 with zero validators
7go:0808nonezoo/bridge is a Vite/TypeScript frontend (vite.config.ts, src/). No Go relayer and no B-Chain or M-Chain client exists in any Zoo repository
8go:0811nonethe VM path the ZIP names at line 87, zooai/node/chains/quasarvm, does not exist — zoo/node has no chains/ directory at all. zooai/chains ships quantumvm, under the upstream module path github.com/luxfi/chains/quantumvm/plugin
9go:0812partialchains/zoo-evm/main.go:56 registers luxfi/precompile/pulsar at 0x012204, but node/vm/factory.go does not import it (grep for pulsar returns zero). The plugin and the node binary disagree about whether the primitive ZIP-0811's finality consumes is present
10go:0902nonesearched every .go and .rs file under ~/work/zoo for AInferenceReceipt, ProofOfThought and Proof-of-Thought: nothing. The receipt type the ZIP specifies has no implementation in any runtime
11rust:0806partialapp/apps/zoo-desktop/src-tauri is 6,492 lines of Rust on Tauri 2.5 and is the application ZIP-0806 names at line 74; local_zoo_node/zoo_node_manager.rs spawns the Rust node backend. The mining the ZIP specifies is not implemented: src/mining/mod.rs:79-89 adds 1.0 to a JSON counter every 60 seconds, with no device, no chain and no proof