* beluga: wire L3 to run zooai/node (replace luxd stopgap)
Make the Beluga L3 (chainId 420420) a real thinking-chain instead of an
inert luxd subnet stub. The zoo-chain validators tracked beluga under
ghcr.io/luxfi/node (luxd) — a bare subnet runtime with no Zoo EVM and no
AI precompiles, so beluga could never instantiate (blockchainID empty).
Switch the zoo-chain ZooNetwork image to ghcr.io/zooai/node (zood), which
self-installs the Zoo EVM (AI/FHE/PQ/ZK precompiles, incl. the 0x0303
deterministic in-consensus inference precompile and the 0x0304 aivmbridge
that settles Tier-2 Proof-of-Thought to the Lux A-Chain), Zoo DEX and Zoo
FHE VM plugins at startup.
- base/network.yaml + zoo-{devnet,testnet,mainnet}/network-patch.yaml:
image ghcr.io/luxfi/node -> ghcr.io/zooai/node.
- zoo-{devnet,testnet,mainnet}/statefulset-patch.yaml: command ./luxd ->
zood (zood wraps luxfi/node, identical config.BuildFlagSet, so all flags
apply verbatim). Beluga's blockchainID is appended to --track-chains
once the CreateChainTx mints it on the Zoo primary network.
- base/beluga.yaml: enrich the ZooChain CR with vmId (Zoo EVM
2n2njofjYvece8gZWCNnc1mqkcqfW6kbrhPRZPVzwxrSQrQ4gE) and
genesisConfigMap (beluga-genesis), per the operator ZooChainSpec.
- base/kustomization.yaml: configMapGenerator beluga-genesis from
k8s/base/beluga/{genesis.json,config.json} (stable name, no hash).
- k8s/base/beluga/: deployed copy of the canonical genesis+config
(evmChainId 420420, BLG gas, precompile-upgrade activations at ts 0).
Image tags are floating `latest` only on devnet; testnet/mainnet pin the
immutable CI semver. The live rollout (restarts the L2 validators) is a
gated prod step performed after the ghcr.io/zooai/node image is verified.
* beluga: pin zood image to immutable sha-371ea17-amd64-node
ghcr.io/zooai/node built CGO-free (hermetic vendored build, digest
sha256:12e8244d…) and published. Pin the operator ZooChain CR image off the
floating 'latest' to the immutable build SHA per prod policy.
* beluga: pin devnet+testnet zood image to sha-371ea17-amd64-node (consistency)
* beluga(devnet): image is operator-derived from the ZooNetwork CR, not the patch
Per 'one and only one way, operator-derived': the zood image comes solely from
k8s/base/network.yaml (the ZooNetwork CR); the operator renders it. The patch
asserts only the luxd CLI flags the operator wrongly passes as ZOO_* env.
* beluga: pin zood image to clean semver 0.2.0 (not the sha hash)
Proper semver for all image pins — ghcr.io/zooai/node:0.2.0 (digest 12e8244d,
same build), not sha-371ea17-amd64-node. The ZooNetwork CR is the single source;
the operator renders it onto the StatefulSet.
62 lines
2.7 KiB
YAML
62 lines
2.7 KiB
YAML
# Beluga L3 -- AI app-chain on Zoo Network.
|
|
# Runs on the existing Zoo validators via a ZooChain tracking CR (no new nodes):
|
|
# the zoo-operator (crate zoo-operator, ghcr.io/zooai/operator) only stamps
|
|
# status (phase/chainId/blockchainId) for ZooChain — the chain is actually
|
|
# tracked by the validators' TRACK_CHAINS env. So the CR carries just the
|
|
# fields in zoo-operator's ZooChainSpec (src/crd.rs): chainId (required, u64),
|
|
# and optional blockchainId / vmId / genesisConfigMap / networkRef.
|
|
#
|
|
# The L3's EVM/precompile/genesis parameters (AI/FHE/PQ/ZK precompiles, BLG
|
|
# gas token, gas limits) are properties of the chain's genesis.json + VM build,
|
|
# not of this k8s tracking CR — they are not consumed by the operator and were
|
|
# dropped here so the CR deserializes cleanly (the old rich schema had no
|
|
# `chainId`, which broke the operator's ZooChain list-watch → InitialListFailed).
|
|
apiVersion: zoo.network/v1alpha1
|
|
kind: ZooChain
|
|
metadata:
|
|
name: beluga
|
|
labels:
|
|
app: beluga
|
|
app.kubernetes.io/name: beluga
|
|
app.kubernetes.io/part-of: zoo
|
|
zoo.network/type: l3
|
|
spec:
|
|
# EVM chainID for the Beluga L3 (also pinned in blg-token.yaml).
|
|
chainId: 420420
|
|
# Parent validator cluster (ZooNetwork) that tracks this chain. zoo-chain
|
|
# runs zooai/node (zood) — the Zoo EVM it self-installs carries the AI/FHE/
|
|
# PQ/ZK precompiles, incl. the deterministic in-consensus inference
|
|
# precompile at 0x0300…0003 (the "0x0303" thinking precompile, Tier-1) and
|
|
# the aivmbridge at 0x0300…0004 that settles Tier-2 Proof-of-Thought to the
|
|
# Lux A-Chain (AIVM). Without zooai/node this CR is just a luxd subnet stub.
|
|
networkRef: zoo-chain
|
|
# Zoo EVM VM ID — the VM the validators instantiate this chain under. This is
|
|
# the plugin zood self-installs (vm.EVMID in zooai/node), distinct from the
|
|
# built-in C-Chain EVM. luxd alone cannot serve this chain.
|
|
vmId: 2n2njofjYvece8gZWCNnc1mqkcqfW6kbrhPRZPVzwxrSQrQ4gE
|
|
# Genesis (evmChainId 420420, BLG gas, AI/FHE/PQ/ZK precompile-upgrade
|
|
# activations at blockTimestamp 0) — generated by configMapGenerator from
|
|
# k8s/base/beluga/genesis.json (see base/kustomization.yaml).
|
|
genesisConfigMap: beluga-genesis
|
|
# blockchainId is stamped by the operator once the CreateChainTx that mints
|
|
# the Beluga blockchain on the Zoo primary network lands and its ID is added
|
|
# to the validators' TRACK_CHAINS. Empty until then (chain registered, not
|
|
# yet instantiated).
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: beluga-rpc
|
|
labels:
|
|
app: beluga
|
|
app.kubernetes.io/name: beluga-rpc
|
|
app.kubernetes.io/part-of: zoo
|
|
spec:
|
|
type: ClusterIP
|
|
selector:
|
|
app: zoo-chain
|
|
ports:
|
|
- port: 9650
|
|
targetPort: 9650
|
|
name: http
|