zood pinned v1.36.68 and the wallet still offered /mainnet/ext/bc/C/rpc for both Lux and Hanzo. luxd removed those spellings in v1.36.179, so the wallet was handing users chain endpoints that no current node answers. zood and the wallet now name the chain one way, on v1.36.181. Co-authored-by: Hanzo Dev <[email protected]>
171 lines
6.5 KiB
YAML
171 lines
6.5 KiB
YAML
# Generated from the live zoo-mainnet/zoo-wallet Deployment on do-sfo3-lux-k8s
|
|
# by hack/live2values.py. Live is the source: a repo of hand-applied
|
|
# manifests has unknown currency, the running fleet does not.
|
|
replicas: 2
|
|
selectorLabels:
|
|
app: zoo-wallet
|
|
containerName: web
|
|
image:
|
|
repository: ghcr.io/luxfi/wallet-web
|
|
tag: 07997be04
|
|
digest: sha256:519c7423021857de5f827c55b63c91883ea8acded919a457ba20c881b126e9f1
|
|
pullPolicy: IfNotPresent
|
|
labels:
|
|
brand: zoo
|
|
component: web
|
|
resources:
|
|
limits:
|
|
cpu: 250m
|
|
memory: 256Mi
|
|
requests:
|
|
cpu: 50m
|
|
memory: 64Mi
|
|
volumeMounts:
|
|
- mountPath: /public/brand.json
|
|
name: brand
|
|
readOnly: true
|
|
subPath: brand.json
|
|
livenessProbe:
|
|
failureThreshold: 3
|
|
httpGet:
|
|
path: /
|
|
port: 3000
|
|
scheme: HTTP
|
|
initialDelaySeconds: 5
|
|
periodSeconds: 15
|
|
successThreshold: 1
|
|
timeoutSeconds: 1
|
|
readinessProbe:
|
|
failureThreshold: 3
|
|
httpGet:
|
|
path: /
|
|
port: 3000
|
|
scheme: HTTP
|
|
initialDelaySeconds: 3
|
|
periodSeconds: 5
|
|
successThreshold: 1
|
|
timeoutSeconds: 1
|
|
ports:
|
|
- containerPort: 3000
|
|
name: http
|
|
# The white label itself. The image is ghcr.io/luxfi/wallet-web, one build serving
|
|
# every brand, and this file is the only thing that makes it Zoo's — without it the
|
|
# pod would present Lux on a Zoo surface. It was mounted here and declared nowhere,
|
|
# so the pod waited four days on a ConfigMap that could not arrive.
|
|
#
|
|
# Content is the wallet repo's own overlay, apps/web/k8s/overlays/zoo/brand.json,
|
|
# copied rather than invented.
|
|
configMaps:
|
|
- name: zoo-wallet-brand
|
|
data:
|
|
brand.json: |
|
|
{
|
|
"brand": {
|
|
"name": "Zoo",
|
|
"title": "Zoo Wallet",
|
|
"description": "Self-custodial Zoo wallet — multi-chain, post-quantum, MPC custody.",
|
|
"shortName": "ZOO",
|
|
"labsName": "Zoo Labs Foundation",
|
|
"legalEntity": "Zoo Labs Foundation",
|
|
"walletName": "Zoo Wallet",
|
|
"copyrightHolder": "Zoo Labs Foundation",
|
|
"appDomain": "wallet.zoo.ngo",
|
|
"docsDomain": "docs.zoo.ngo",
|
|
"gatewayDomain": "api.zoo.network",
|
|
"helpUrl": "https://docs.zoo.ngo/wallet",
|
|
"termsUrl": "https://zoo.ngo/terms",
|
|
"privacyUrl": "https://zoo.ngo/privacy",
|
|
"downloadUrl": "https://wallet.zoo.ngo/download",
|
|
"walletApi": "https://wallet-api.zoo.ngo",
|
|
"iamIssuer": "https://zoo.id",
|
|
"iamClientId": "zoo-wallet",
|
|
"complianceEmail": "[email protected]",
|
|
"supportEmail": "[email protected]",
|
|
"twitter": "https://x.com/zoo_labs",
|
|
"github": "https://github.com/zooai",
|
|
"discord": "https://discord.gg/zoo",
|
|
"logoUrl": "/brands/zoo.svg",
|
|
"faviconUrl": "/brands/zoo.svg",
|
|
"primaryColor": "#FFFFFF",
|
|
"defaultChainId": 200200,
|
|
"supportedChainIds": [200200, 200201, 96369, 36963, 1, 42161, 8453, 137],
|
|
"walletConnectProjectId": "",
|
|
"insightsHost": "",
|
|
"insightsApiKey": "",
|
|
"downloads": {
|
|
"mac": { "url": "https://wallet.zoo.ngo/dl/mac/Zoo-Wallet.dmg", "version": "1.0.0", "checksumUrl": "https://wallet.zoo.ngo/dl/mac/checksums.txt" },
|
|
"windows": { "url": "https://wallet.zoo.ngo/dl/windows/Zoo-Wallet-Setup.exe", "version": "1.0.0", "checksumUrl": "https://wallet.zoo.ngo/dl/windows/checksums.txt" },
|
|
"linux": { "url": "https://wallet.zoo.ngo/dl/linux/Zoo-Wallet.AppImage", "version": "1.0.0", "checksumUrl": "https://wallet.zoo.ngo/dl/linux/checksums.txt" },
|
|
"ios": { "storeUrl": "https://apps.apple.com/app/zoo-wallet" },
|
|
"android": { "storeUrl": "https://play.google.com/store/apps/details?id=ngo.zoo.wallet" },
|
|
"extension": { "storeUrl": "https://chromewebstore.google.com/detail/zoo-wallet" }
|
|
},
|
|
"theme": {
|
|
"light": { "accent1": "#000000", "surface1": "#FFFFFF", "surface2": "#F9F9F9", "neutral1": "#131313", "neutral2": "rgba(19, 19, 19, 0.63)" },
|
|
"dark": { "accent1": "#FFFFFF", "surface1": "#000000", "surface2": "#1A1A1A", "neutral1": "#FFFFFF", "neutral2": "rgba(255, 255, 255, 0.65)" }
|
|
}
|
|
},
|
|
"chains": {
|
|
"defaultChainId": 200200,
|
|
"supported": [200200, 200201, 96369, 36963, 1, 42161, 8453, 137]
|
|
},
|
|
"rpc": {
|
|
"200200": "https://api.zoo.network/rpc",
|
|
"200201": "https://api.zoo.network/testnet/rpc",
|
|
"96369": "https://api.lux.network/mainnet/v1/chain/c/rpc",
|
|
"36963": "https://api.hanzo.ai/mainnet/v1/chain/c/rpc",
|
|
"1": "https://eth.llamarpc.com",
|
|
"42161": "https://arb1.arbitrum.io/rpc",
|
|
"8453": "https://mainnet.base.org",
|
|
"137": "https://polygon-rpc.com"
|
|
},
|
|
"api": { "gateway": "https://api.zoo.network", "insights": "" },
|
|
"walletConnect": { "projectId": "" }
|
|
}
|
|
|
|
volumes:
|
|
- configMap:
|
|
name: zoo-wallet-brand
|
|
name: brand
|
|
# ghcr-zooai, because that is the name this namespace has. `ghcr-luxfi` does
|
|
# not exist in zoo-mainnet -- a pod naming it gets no credential at all and the
|
|
# kubelet falls back to anonymous, which GHCR answers 403/NotFound for a private
|
|
# package. That reads as a missing image and is a missing secret. Verified
|
|
# 2026-09-09: ghcr-zooai pulls every repo this namespace references, zooai/* and
|
|
# the luxfi/* ones alike.
|
|
imagePullSecrets:
|
|
- name: ghcr-zooai
|
|
rollingUpdate:
|
|
maxSurge: 25%
|
|
maxUnavailable: 25%
|
|
topologySpread:
|
|
enabled: false
|
|
lifecycle: null
|
|
terminationGracePeriodSeconds: 30
|
|
ingress:
|
|
enabled: true
|
|
hosts:
|
|
- wallet.zoo.network
|
|
tls: true
|
|
# The live certificate lives in this Secret. The chart would default to
|
|
# <release>-tls, and cert-manager would then issue into a NEW empty Secret
|
|
# while the host serves no cert at all until it succeeds.
|
|
secretName: wallet-zoo-tls
|
|
className: ingress
|
|
|
|
# Enforcement switch, read by the lux-fleet ApplicationSet's templatePatch --
|
|
# not by the chart. selfHeal returns a hand-edited object to what is written
|
|
# here; prune stays off, so nothing is ever deleted.
|
|
cd:
|
|
automated: true
|
|
|
|
# The image for this workload is published for linux/amd64 only, and this
|
|
# cluster has an arm64 node. Unpinned, the scheduler is free to place it on
|
|
# spark, where the kubelet refuses the pull with `no match for platform in
|
|
# manifest` -- which reads as a broken image and is a misplaced pod. Measured
|
|
# 2026-09-09: zoo-ui, zoo-gym, zoo-bot and zoo-build had all been sitting in
|
|
# ImagePullBackOff on spark. Pin follows the artifact: an image that exists for
|
|
# one architecture may only be scheduled where that architecture is.
|
|
nodeSelector:
|
|
kubernetes.io/arch: amd64
|