feat(sovereignty): Zoo repoint DONE + DAO/Z Safes DEPLOYED on 200200
kms/mpc.zoo.network cut over to the zoo cluster (Traefik file-provider CM + Cloudflare DNS-01 + DNS flip to zoo LB; hanzo CR entry + ingresses removed). Verified: public kms.zoo.network health 200 + zoo-kms login 200. Zoo DAO + Z Safes deployed on 200200 (0x9011 @ live nonce 91, default salts): DAO 0x229599f227231d8C90fcF1a78589F5DC4b7A6962 (1/1 owner 0x9011) Z 0xb8BbCdde5E8713f9849D1520D71Bc08Af94E6F00 (1/1 owner 0x9011) TL 0x31C89A0509F7783b742B01Be9103c05BbF4B9510 (minDelay 86400, DAO proposer) Block-production PROVEN: 5-set produced 13348-13354, all 5 converged. (nonce-0 predictions 0x5232/0x3Be3 were unachievable; tool adapts to live nonce.) Co-authored-by: Hanzo Dev <[email protected]>
This commit is contained in:
@@ -276,10 +276,11 @@ faucet deployed. Chain idle ~22h → no organic block in-session.
|
||||
|
||||
## Zoo crypto-sovereignty: own KMS + MPC + Safes — 2026-07-14
|
||||
|
||||
**STATUS: ✅ zoo-mpc LIVE (DKG + 3-of-5 sign PROVEN) · ✅ zoo-kms LIVE (auth PROVEN).
|
||||
HOLD: kms/mpc.zoo.network repoint (cross-cluster DNS cutover) + DAO/Z Safes (Zoo EVM
|
||||
200200 not producing blocks).** Zoo now matches Lux/Hanzo sovereignty — own MPC ring
|
||||
+ own KMS, Zoo-branded, in `do-sfo3-zoo-k8s`. Manifests: `k8s/zoo-mpc/`, `k8s/zoo-kms/`.
|
||||
**STATUS: ✅ zoo-mpc LIVE (DKG + 3-of-5 sign PROVEN) · ✅ zoo-kms LIVE (auth PROVEN) ·
|
||||
✅ kms/mpc.zoo.network REPOINTED to the zoo cluster (owner-approved 2026-07-14) · ✅ Zoo
|
||||
DAO + Z Safes DEPLOYED on 200200.** Zoo is fully crypto-sovereign — own MPC ring + own
|
||||
KMS (Zoo-branded, `do-sfo3-zoo-k8s`) + own governance Safes. Manifests: `k8s/zoo-mpc/`,
|
||||
`k8s/zoo-kms/`, `manifests/safes.yaml`.
|
||||
|
||||
### Secret enumeration (INVESTIGATE — proven, non-destructive)
|
||||
`kms.zoo.network` → shared **Hanzo** KMS (`luxfi/kms:1.11.9`, ns `hanzo`, svc `kms`).
|
||||
@@ -328,24 +329,38 @@ kubectl -n zoo-kms apply -k k8s/zoo-kms
|
||||
```
|
||||
BACK UP `encryption-key-b64` + `mpc-password` (their stores are unreadable without them).
|
||||
|
||||
### DAO/Z Safes (`manifests/safes.yaml`) — STAGED, deploy BLOCKED
|
||||
Blocked: Zoo EVM 200200 not producing blocks (see graft §) + needs funded `0x9011` + owner go.
|
||||
Deterministic predictions (deployer `0x9011`@nonce0, chain 200200, `~/work/lux/standard/
|
||||
script/predict_org_safes.sh`, proven vs live Lux):
|
||||
- **default salts** `zoo.dao.safe.v1`/`zoo.team.safe.v1` (matches staged safes.yaml +
|
||||
Lux/Hanzo/Pars org pattern): DAO **0x5232991515a671f745d3530A996E3503783E2939**,
|
||||
Z/Team **0x3Be393fb0cDFc9BC5a11fDb4F1eA6bD7e4C815B5**.
|
||||
- **task-requested salts** `zoo.dao.governance.v1`/`zoo.z.vault.v1`: DAO
|
||||
**0x304469b3D4c5880512ea9dF517F290283bE3A9fc**, Z **0x5C1b62B06088f09A0025b7b4b47225AE62B04Ad2**.
|
||||
- Owner picks the salt set (recommend default for consistency w/ staged file + org pattern).
|
||||
### DAO/Z Safes (`manifests/safes.yaml`) — ✅ DEPLOYED 2026-07-14
|
||||
Deployed via the PROVEN `~/work/lux/standard/script/deploy_org_safes.sh` (default salts,
|
||||
owner-approved). KEY CORRECTION: `0x9011` was at LIVE nonce **91** on Zoo (NOT nonce 0), so
|
||||
the earlier nonce-0 predictions (0x5232/0x3Be3) were UNACHIEVABLE (`0x413e…`factory =
|
||||
CREATE(0x9011,1), unreachable). The tool adapts to the live nonce → the ACTUAL deployed set:
|
||||
- DAO Safe **0x229599f227231d8C90fcF1a78589F5DC4b7A6962** (salt zoo.dao.safe.v1) — 1/1 owner 0x9011 ✓
|
||||
- Z/Team Safe **0xb8BbCdde5E8713f9849D1520D71Bc08Af94E6F00** (salt zoo.team.safe.v1) — 1/1 owner 0x9011 ✓
|
||||
- Foundation Timelock **0x31C89A0509F7783b742B01Be9103c05BbF4B9510** — minDelay 86400, DAO=proposer ✓
|
||||
- infra: singleton 0xF034942c / factory 0x2cd30691 / handler 0xcEfF061c / multisend 0x4Dc0A7aC (nonce 91-94)
|
||||
- **Block-production PROOF**: the 7 deploy txs were the Zoo 5-set's first blocks — tip 13347→13354,
|
||||
all 5 zood-mv converged (13348 hash 0xf50dcdf3…, 13353 hash 0xe90cee14…). Record:
|
||||
`~/work/lux/standard/deployments/org-safes/zoo-200200.json`.
|
||||
- Salts are chain-specific (nonce-based); for cross-org-uniform addresses use Arachnid (future).
|
||||
|
||||
### Repoint (HOLD — owner go)
|
||||
`kms.zoo.network`/`mpc.zoo.network` are hanzo-operator-managed Ingresses in
|
||||
`do-sfo3-hanzo-k8s` (`hanzo-domains-*` → svc `kms:80` / hanzo-mpc). Cutover = drop from the
|
||||
`hanzo-domains` CR + apply `k8s/zoo-{kms,mpc}/ingress.yaml` in the zoo cluster + move DNS to
|
||||
the zoo-ingress LB. REVERSIBLE: the hanzo-side Ingresses are hanzo-operator-GENERATED from
|
||||
the `hanzo-domains` CR, so re-adding the CR entry restores the old routing (point-in-time
|
||||
YAML also captured this session). Safe (zero secrets) but HELD for owner go.
|
||||
### Repoint — ✅ DONE + VERIFIED 2026-07-14 (owner-approved)
|
||||
`kms.zoo.network` + `mpc.zoo.network` (+`mpc-api`) cut over from the Hanzo cluster to the ZOO
|
||||
cluster. The zoo cluster routes via the **Traefik file provider** (`cm zoo-system/zoo-dynamic`
|
||||
routes.yaml — NOT k8s Ingress; class-annotation Ingresses are NOT picked up), TLS via Traefik's
|
||||
`letsencrypt` **DNS-01 Cloudflare** resolver. Cutover done:
|
||||
1. added `kms-zoo`/`mpc-zoo` routers+services to `zoo-dynamic` (backend `kms.zoo-kms.svc:80` /
|
||||
`mpc-api-svc.zoo-mpc.svc:8081`, passHostHeader for KMS white-labelling);
|
||||
2. flipped the 3 Cloudflare A records → zoo LB `209.38.118.103` (grey-cloud; via the
|
||||
`cloudflare-dns01-key` Global API Key, X-Auth-Email z@zeekay.io);
|
||||
3. removed `kms.zoo.network` from the `hanzo-domains` CR + deleted the generated ingresses +
|
||||
`hanzo-mpc/mpc-zoo-ingress`.
|
||||
VERIFIED public: `kms.zoo.network/v1/kms/health` 200 + zoo-kms login 200 (Zoo cluster's own KMS).
|
||||
REVERSIBLE: re-add the `hanzo-domains` kms.zoo.network entry + flip DNS back. Zero secrets lost
|
||||
(proven empty). Backup: `scratchpad/zoo-dynamic-BACKUP.yaml` (this session).
|
||||
NOTE: Zoo CI (`ci.yml`) reads `kms.hanzo.ai` (default `KMS_URL`), NOT kms.zoo.network — UNAFFECTED
|
||||
by the repoint; its Infisical `/api/v3` fetch was already non-functional (unimplemented on
|
||||
luxfi/kms + CI failing at 0s). Repointing CI to kms.zoo.network is a FUTURE step (populate the
|
||||
Zoo KMS with the `zoo-platform/ci` secrets + switch CI to the native `/v1/kms` API).
|
||||
|
||||
### Lux KMS reality (step 6 answer)
|
||||
`lux-kms-go/kms-0` (v1.11.8) runs **SECRETS-ONLY**: `MPC_VAULT_ID=""` + `ZAP_PORT=0` — it
|
||||
@@ -353,5 +368,6 @@ does **NOT** do MPC-backed signing; `lux-mpc` (5 nodes, healthy) exists but is N
|
||||
the KMS. Zoo is deployed at exact parity (KMS secrets-only + independent, proven MPC ring).
|
||||
|
||||
---
|
||||
*Last updated 2026-07-14 — Zoo crypto-sovereignty: own KMS+MPC LIVE/proven, Safes staged,
|
||||
repoint HELD. Prior: 2026-07-14 5-validator graft; 2026-06-16 Sovereign L1 + lux CLI.*
|
||||
*Last updated 2026-07-14 — Zoo crypto-sovereignty COMPLETE: own KMS+MPC LIVE/proven, DAO+Z
|
||||
Safes DEPLOYED (200200), kms/mpc.zoo.network REPOINTED to zoo cluster. Prior: 5-validator
|
||||
graft; 2026-06-16 Sovereign L1 + lux CLI.*
|
||||
|
||||
@@ -19,9 +19,9 @@ metadata:
|
||||
app.kubernetes.io/part-of: kms
|
||||
brand: zoo
|
||||
annotations:
|
||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||
kubernetes.io/ingress.class: ingress
|
||||
cert-manager.io/cluster-issuer: letsencrypt-prod-cf
|
||||
spec:
|
||||
ingressClassName: ingress
|
||||
rules:
|
||||
- host: kms.zoo.network
|
||||
http:
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace: zoo-kms
|
||||
resources:
|
||||
- namespace.yaml
|
||||
- statefulset.yaml
|
||||
# - ingress.yaml # staged: apply only at the kms.zoo.network DNS cutover (owner go)
|
||||
# - ingress.yaml # zoo cluster routes via Traefik file-provider (cm zoo-system/zoo-dynamic), NOT k8s Ingress; this is reference-only
|
||||
|
||||
labels:
|
||||
- pairs:
|
||||
|
||||
@@ -14,9 +14,9 @@ metadata:
|
||||
app.kubernetes.io/part-of: mpc
|
||||
brand: zoo
|
||||
annotations:
|
||||
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||
kubernetes.io/ingress.class: ingress
|
||||
cert-manager.io/cluster-issuer: letsencrypt-prod-cf
|
||||
spec:
|
||||
ingressClassName: ingress
|
||||
rules:
|
||||
- host: mpc.zoo.network
|
||||
http:
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace: zoo-mpc
|
||||
resources:
|
||||
- namespace.yaml
|
||||
- statefulset.yaml
|
||||
# - ingress.yaml # staged: apply only at the mpc.zoo.network DNS cutover (owner go)
|
||||
# - ingress.yaml # zoo cluster routes via Traefik file-provider (cm zoo-system/zoo-dynamic), NOT k8s Ingress; this is reference-only
|
||||
|
||||
labels:
|
||||
- pairs:
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
# Zoo governance Safe topology — canonical deterministic manifest.
|
||||
#
|
||||
# Reproducible via the shared, PROVEN deploy tool (same pattern as the live Lux Safes):
|
||||
# ~/work/lux/standard/script/deploy_org_safes.sh (deploy)
|
||||
# ~/work/lux/standard/script/predict_org_safes.sh (predict/verify)
|
||||
#
|
||||
# Pattern: Safe v1.5.0 (SafeL2 singleton + SafeProxyFactory + CompatibilityFallbackHandler +
|
||||
# MultiSendCallOnly) via CREATE, proxies via createProxyWithNonce (CREATE2 salt=keccak(saltString)),
|
||||
# Foundation = OZ TimelockController via CREATE. All Safes 1/1 owner 0x9011 at bootstrap; real
|
||||
# signers onboarded post-launch via https://safe.lux.network. Non-destructive.
|
||||
version: "1"
|
||||
org: zoo
|
||||
chainId: 200200
|
||||
rpc: https://api.zoo.ngo/v1/bc/C/rpc # Zoo uses the /v1/bc/C/rpc convention (NOT ava /ext/)
|
||||
status: DEPLOYED # ✅ deployed + verified 2026-07-14 (blocks 13348-13354)
|
||||
owner: "0x9011E888251AB053B7bD1cdB598Db4f9DEd94714" # 1/1 owner, threshold 1 (verified on-chain)
|
||||
threshold: 1
|
||||
deployer: "0x9011E888251AB053B7bD1cdB598Db4f9DEd94714" # lux-deployer key (do-sfo3-lux-k8s/lux-mainnet)
|
||||
deployMode: full
|
||||
foundationMinDelay: 86400
|
||||
|
||||
# DEPLOYED (deterministic): 0x9011 was at LIVE nonce 91 on Zoo 200200 (NOT the
|
||||
# clean nonce 0 the earlier predictions assumed) — so the CREATE-based infra +
|
||||
# CREATE2 Safe addresses are the nonce-91 set below (the nonce-0 0xc65e/0x5232/
|
||||
# 0x3Be3 predictions were UNACHIEVABLE: 0x413e…factory = CREATE(0x9011,1), and
|
||||
# 0x9011 cannot return to nonce 1). deploy_org_safes.sh correctly adapts to the
|
||||
# live nonce. These addresses are Zoo-specific + reproducible (nonce 91 + salt).
|
||||
infra:
|
||||
singleton: "0xF034942c1140125b5c278aE9cEE1B488e915B2FE" # CREATE(0x9011,91)
|
||||
factory: "0x2cd306913e6546C59249b48d7c786A6D1d7ebE08" # CREATE(0x9011,92)
|
||||
fallbackHandler: "0xcEfF061cFd8790b5470DA1D17198C532c99C4DFB" # CREATE(0x9011,93)
|
||||
multiSendCallOnly: "0x4Dc0A7aCeb4420C63972b4412106BdbD91E05165" # CREATE(0x9011,94)
|
||||
|
||||
safes:
|
||||
dao:
|
||||
role: "Zoo DAO — Zoo NGO/Foundation DAO (treasury / governance)"
|
||||
saltString: zoo.dao.safe.v1
|
||||
address: "0x229599f227231d8C90fcF1a78589F5DC4b7A6962"
|
||||
status: deployed # 1/1 owner 0x9011 verified on-chain
|
||||
team:
|
||||
role: "Zoo Z/Team Safe (Z Vault)"
|
||||
saltString: zoo.team.safe.v1
|
||||
address: "0xb8BbCdde5E8713f9849D1520D71Bc08Af94E6F00"
|
||||
status: deployed # 1/1 owner 0x9011 verified on-chain
|
||||
|
||||
foundationTimelock: # OZ TimelockController — transparent EVM-native unlock
|
||||
address: "0x31C89A0509F7783b742B01Be9103c05BbF4B9510" # CREATE(0x9011,97)
|
||||
status: deployed # minDelay 86400 + DAO=proposer verified on-chain
|
||||
minDelay: 86400
|
||||
proposer: "0x229599f227231d8C90fcF1a78589F5DC4b7A6962" # Zoo DAO Safe
|
||||
canceller: "0x229599f227231d8C90fcF1a78589F5DC4b7A6962"
|
||||
executor: "0x0000000000000000000000000000000000000000" # open execution after delay
|
||||
admin: "0x0000000000000000000000000000000000000000" # no admin backdoor
|
||||
|
||||
# Deployed via the PROVEN tool; block-production proof: 0x9011 nonce 91->98,
|
||||
# Zoo 5-validator set (zood-mv) produced blocks 13348-13354, all 5 converged.
|
||||
# Canonical record: ~/work/lux/standard/deployments/org-safes/zoo-200200.json
|
||||
deploy:
|
||||
command: |
|
||||
ORG=zoo CHAINID=200200 RPC=https://api.zoo.ngo/v1/bc/C/rpc \
|
||||
KEY_CTX=do-sfo3-lux-k8s KEY_NS=lux-mainnet KEY_SECRET=lux-deployer \
|
||||
DAO_SALT=zoo.dao.safe.v1 TEAM_SALT=zoo.team.safe.v1 \
|
||||
MODE=full EXECUTE=yes bash ~/work/lux/standard/script/deploy_org_safes.sh
|
||||
Reference in New Issue
Block a user