Compare commits
119 Commits
master
...
docs/explo
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ad9f63076a | ||
|
|
4f7cda9b2f | ||
|
|
ec21572351 | ||
|
|
4c1982d50f | ||
|
|
59006f520a | ||
|
|
382e776599 | ||
|
|
c77764c7c0 | ||
|
|
7befbf6f61 | ||
|
|
fb1d90c3d2 | ||
|
|
1ba773ed93 | ||
|
|
2acb6ed877 | ||
|
|
43b8942103 | ||
|
|
54c3acbf31 | ||
|
|
ccf466e7c7 | ||
|
|
6ae8590134 | ||
|
|
cba978f656 | ||
|
|
c281c67a79 | ||
|
|
7d60a60af7 | ||
|
|
2b58dd64ea | ||
|
|
ceb852a2f1 | ||
|
|
bf59b87356 | ||
|
|
7b47d42cec | ||
|
|
99b4620fa0 | ||
|
|
7ddd37f048 | ||
|
|
35715b0e95 | ||
|
|
bc889570e1 | ||
|
|
579a3bbe3a | ||
|
|
cabb6b6baa | ||
|
|
ba71943c3f | ||
|
|
367e98446a | ||
|
|
76253586e7 | ||
|
|
33d594731e | ||
|
|
47e3c00928 | ||
|
|
5833243379 | ||
|
|
968d7388ca | ||
|
|
e80b1a0bdd | ||
|
|
6405006f64 | ||
|
|
2cf2ef43eb | ||
|
|
d8b0dd0115 | ||
|
|
ee1625a79b | ||
|
|
b7eebb87b3 | ||
|
|
49740f1a59 | ||
|
|
fe7292db78 | ||
|
|
04ca354428 | ||
|
|
13c85f5b83 | ||
|
|
e86744e12b | ||
|
|
309843df95 | ||
|
|
0c58ccaf6c | ||
|
|
f04b860763 | ||
|
|
43a30cb7c5 | ||
|
|
400bfe799f | ||
|
|
cbbb05eabe | ||
|
|
e7cfd26c90 | ||
|
|
400eaa3749 | ||
|
|
5d5d7a7db4 | ||
|
|
614d045842 | ||
|
|
075a9c8a3c | ||
|
|
e8c7c2e287 | ||
|
|
7d6e07cf25 | ||
|
|
07794d5848 | ||
|
|
0d29343941 | ||
|
|
6945f69d7d | ||
|
|
fd381a1cfd | ||
|
|
bef37db4d4 | ||
|
|
456a3569da | ||
|
|
d68d8c408e | ||
|
|
3b5283c6e4 | ||
|
|
98c7e312e0 | ||
|
|
f06e084e2f | ||
|
|
282256a387 | ||
|
|
cc6821ebad | ||
|
|
d72c4569ad | ||
|
|
dbd517b279 | ||
|
|
6fb6bd3993 | ||
|
|
0322ab019e | ||
|
|
6d45253456 | ||
|
|
dc8abb06e2 | ||
|
|
c6c57fa585 | ||
|
|
3e7c9b9941 | ||
|
|
a41c3adea0 | ||
|
|
bd3424d78b | ||
|
|
236e71f0f0 | ||
|
|
61841b8291 | ||
|
|
4eead3e53f | ||
|
|
7d68a89074 | ||
|
|
81c78f9c1c | ||
|
|
7058c9c300 | ||
|
|
86a250f188 | ||
|
|
b117585cfd | ||
|
|
08940e85aa | ||
|
|
518923203e | ||
|
|
07e0273dbc | ||
|
|
fbe027bf04 | ||
|
|
d92cfab10b | ||
|
|
7a53e64c1e | ||
|
|
15cd7aa057 | ||
|
|
76e2e64008 | ||
|
|
79e5f4e9af | ||
|
|
11fce67025 | ||
|
|
9e106e2da4 | ||
|
|
de1a274f6a | ||
|
|
d81375117a | ||
|
|
e8e22daeb9 | ||
|
|
0bb4aa41dd | ||
|
|
5e73159e80 | ||
|
|
b85101f4c2 | ||
|
|
6390174bb7 | ||
|
|
f411a89908 | ||
|
|
5fc90e1913 | ||
|
|
13d0d7130e | ||
|
|
5c69993ce9 | ||
|
|
748c1c9e14 | ||
|
|
33b1920111 | ||
|
|
6c5fdcfd62 | ||
|
|
7ac74f432b | ||
|
|
00880304d4 | ||
|
|
7668acf8c3 | ||
|
|
0f70fb6c90 | ||
|
|
7f3dcf2513 |
9
.cursor/mcp.json
Normal file
9
.cursor/mcp.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"mcpServers": {
|
||||
"wormhole-docs": {
|
||||
"command": "node",
|
||||
"args": ["./mcp-wormhole-docs/index.js"],
|
||||
"cwd": "${workspaceFolder}"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,10 +10,16 @@ alwaysApply: true
|
||||
- **cUSDT:** `0x93E66202A11B1772E55407B32B44e5Cd8eda7f22` (6 decimals)
|
||||
- **cUSDC:** `0xf22258f57794CC8E06237084b353Ab30fFfa640b` (6 decimals)
|
||||
|
||||
**DODOPMMIntegration:** `0x5BDc62f1ae7D630c37A8B363a1d49845356Ee72d` — reconciled with `docs/11-references/ADDRESS_MATRIX_AND_STATUS.md` (on-chain verification 2026-03-26); `compliantUSDT()` / `compliantUSDC()` return the canonical cUSDT/cUSDC above.
|
||||
**DODOPMMIntegration (canonical, official DVM-backed stack):** `0x86ADA6Ef91A3B450F89f2b751e93B1b7A3218895` — use for stable-pool routing, token-aggregation, explorer fallbacks, and `info-defi-oracle-138` swaps. **`DODOPMMProvider`:** `0x3f729632E9553EBacCdE2e9b4c8F2B285b014F2e`. **`DODO_VENDING_MACHINE_ADDRESS`:** `0xb6D9EF3575bc48De3f011C310DC24d87bEC6087C`. Single source: `docs/11-references/CONTRACT_ADDRESSES_REFERENCE.md` and `ADDRESS_MATRIX_AND_STATUS.md` (on-chain verification 2026-04-02).
|
||||
|
||||
**Older PMM integration (historical / supplemental only):** `0x5BDc62f1ae7D630c37A8B363a1d49845356Ee72d` — do **not** treat as canonical for stable routing or explorer reads; retained for older XAU-phase references and probes.
|
||||
|
||||
**PMM pools (live funded public):** cUSDT/cUSDC `0xff8d3b8fDF7B112759F076B69f4271D4209C0849` | cUSDT/USDT `0x6fc60DEDc92a2047062294488539992710b99D71` | cUSDC/USDC `0x9f74Be42725f2Aa072a9E0CdCce0E7203C510263` — see `docs/11-references/ADDRESS_MATRIX_AND_STATUS.md` / `PMM_DEX_ROUTING_STATUS.md`.
|
||||
|
||||
**Public cW\* mesh (cross-chain):** treat as **execution / corridor capacity** against reference-anchored GRU policy, not shadow FX — `docs/04-configuration/GRU_REFERENCE_PRIMACY_AND_MESH_EXECUTION_MODEL.md`, `cross-chain-pmm-lps/config/peg-bands.json` **`gruPolicyIntegration`**.
|
||||
|
||||
**cXAUC / cXAUT (XAU):** `0x290E52a8819A4fbD0714E517225429aA2B70EC6b`, `0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E` (6 decimals). **1 full token = 1 troy ounce Au** — not USD face value; see `EXPLORER_TOKEN_LIST_CROSSCHECK.md` section 5.1.
|
||||
|
||||
**RPC (deploy):** `RPC_URL_138=http://192.168.11.211:8545`. **Deployer:** `0x4A666F96fC8764181194447A7dFdb7d471b301C8`. Add-liquidity reads tokens from the integration contract, not env. Do not use non-canonical Blockscout addresses (§2 of EXPLORER_TOKEN_LIST_CROSSCHECK).
|
||||
|
||||
**Token symbol grammar (UTRNF vs GRU `c*`):** DBIS **`c*`** (e.g. cUSDC) is **compliant GRU base money**, not Universal Token Role Naming Framework “`c` = collateral.” For prefix collision rules, registry fields, and bridges, use `docs/04-configuration/naming-conventions/02_DBIS_NAMESPACE_AND_UTRNF_MAPPING.md` and `docs/04-configuration/naming-conventions/README.md`.
|
||||
|
||||
@@ -8,10 +8,10 @@ alwaysApply: true
|
||||
**Remember:** This machine **is** LAN/operator — it has LAN and Proxmox access to 192.168.11.x. Operator scripts **can and should** be run from here when the user asks to run operator tasks.
|
||||
|
||||
- **Dotenv:** `run-all-operator-tasks-from-lan.sh` and `run-operator-tasks-from-lan.sh` **always load dotenv** via `scripts/lib/load-project-env.sh` (repo `.env` + `smom-dbis-138/.env`). No need to `source .env` before running.
|
||||
- **Proxmox hosts:** 192.168.11.10 (ML110), .11 (R630-01), .12 (R630-02). Chain 138 RPC: 192.168.11.211:8545.
|
||||
- **Proxmox hosts (IPs):** 192.168.11.10–.14 (ML110, R630-01..04). **Canonical FQDNs:** `ml110.sankofa.nexus`, `r630-01.sankofa.nexus`, … `r630-04.sankofa.nexus` (`config/ip-addresses.conf` `PROXMOX_FQDN_*`). Chain 138 RPC: 192.168.11.211:8545.
|
||||
- **NPMplus password:** In **project root** `.env` — variable `NPM_PASSWORD` (with `NPM_EMAIL`, `NPM_URL`). Operator scripts load it via `load-project-env.sh`; NPMplus API: 192.168.11.167:81 or .166:81.
|
||||
- **Continue and complete:** (1) `./scripts/run-completable-tasks-from-anywhere.sh` then (2) `./scripts/run-all-operator-tasks-from-lan.sh` (use `--skip-backup` if NPM_PASSWORD not set; add `--deploy` or `--create-vms` as needed).
|
||||
|
||||
When suggesting or running operator/LAN tasks (e.g. `run-all-operator-tasks-from-lan.sh`, contract verification, NPMplus backup, nginx/VMID 5000, token-aggregation DB, E2E checks), assume this host can reach Proxmox hosts (192.168.11.10–12), Chain 138 RPC, NPMplus, and Blockscout. Credentials in `.env` or `smom-dbis-138/.env` (e.g. `NPM_PASSWORD`, `PRIVATE_KEY`) are used automatically when the operator script runs.
|
||||
When suggesting or running operator/LAN tasks (e.g. `run-all-operator-tasks-from-lan.sh`, contract verification, NPMplus backup, nginx/VMID 5000, token-aggregation DB, E2E checks), assume this host can reach Proxmox nodes (192.168.11.10–.14 or `*.sankofa.nexus`), Chain 138 RPC, NPMplus, and Blockscout. Credentials in `.env` or `smom-dbis-138/.env` (e.g. `NPM_PASSWORD`, `PRIVATE_KEY`) are used automatically when the operator script runs.
|
||||
|
||||
**Optional:** Before running operator scripts, run the **Operator/LAN access check** (curl RPC, env files) per rule `operator-lan-access-check.mdc`; if unreachable, suggest `run-completable-tasks-from-anywhere.sh` and document that operator tasks need LAN.
|
||||
|
||||
@@ -38,7 +38,11 @@ test -f .env && test -f smom-dbis-138/.env && echo "env OK" || echo "env missing
|
||||
- Suggest: `./scripts/run-completable-tasks-from-anywhere.sh` (config validation, on-chain check, reconcile output).
|
||||
- Tell the user that NPMplus backup, Blockscout verify, RPC proxy updates, and deploy require a host on **LAN (192.168.11.x)** with root `.env` and `smom-dbis-138/.env`; see **docs/00-meta/OPERATOR_CREDENTIALS_CHECKLIST.md** and **OPERATOR_READY_CHECKLIST.md**.
|
||||
|
||||
## 4. References
|
||||
## 4. Proxmox FQDN on LAN (optional)
|
||||
|
||||
If you use **`*.sankofa.nexus`** for SSH: `bash scripts/verify/check-proxmox-mgmt-fqdn.sh` (exit `1` until UDM/local DNS or `/etc/hosts` has A-records). Snippet: `bash scripts/verify/check-proxmox-mgmt-fqdn.sh --print-hosts`.
|
||||
|
||||
## 5. References
|
||||
|
||||
- **Operator context (always):** `.cursor/rules/operator-context-lan-proxmox.mdc` — this machine is assumed LAN/operator when that rule applies.
|
||||
- **Credentials:** `docs/00-meta/OPERATOR_CREDENTIALS_CHECKLIST.md` — per-task LAN, PRIVATE_KEY, NPM_PASSWORD, RPC_URL_138.
|
||||
|
||||
@@ -8,8 +8,11 @@ alwaysApply: true
|
||||
When answering token/PMM/deployment questions, prefer these docs over inferring from other files. Cite §5 / §8 for canonical and verification.
|
||||
|
||||
**Canonical / verification:** `docs/11-references/EXPLORER_TOKEN_LIST_CROSSCHECK.md` (§5 canonical, §8 on-chain verification)
|
||||
**Contract addresses:** `docs/11-references/CONTRACT_ADDRESSES_REFERENCE.md`
|
||||
**Token / bridge naming (UTRNF + DBIS `c*` mapping):** `docs/04-configuration/naming-conventions/README.md` (especially `02_DBIS_NAMESPACE_AND_UTRNF_MAPPING.md` for UTRNF `c` vs compliant money)
|
||||
**GRU FX reference vs public PMM mesh:** `docs/04-configuration/GRU_REFERENCE_PRIMACY_AND_MESH_EXECUTION_MODEL.md` (reference-first policy; mesh = execution layer)
|
||||
**Contract addresses:** `docs/11-references/CONTRACT_ADDRESSES_REFERENCE.md` (includes **Ethereum mainnet optional TRUU PMM** subsection)
|
||||
**Address matrix:** `docs/11-references/ADDRESS_MATRIX_AND_STATUS.md`
|
||||
**Mainnet TRUU PMM (optional volatile rail):** `docs/03-deployment/MAINNET_PMM_TRUU_CWUSD_PEG_AND_BOT_RUNBOOK.md` section 11; `cross-chain-pmm-lps/config/deployment-status.json` `chains."1".pmmPoolsVolatile[]`
|
||||
**Fixes and deployments:** `docs/00-meta/REQUIRED_FIXES_GAPS_AND_DEPLOYMENTS_LIST.md`
|
||||
**TODOs:** `docs/00-meta/TODOS_CONSOLIDATED.md`
|
||||
**Operator commands:** `docs/00-meta/OPERATOR_READY_CHECKLIST.md`
|
||||
|
||||
28
.cursor/rules/proxmox-production-safety.mdc
Normal file
28
.cursor/rules/proxmox-production-safety.mdc
Normal file
@@ -0,0 +1,28 @@
|
||||
---
|
||||
description: Mission-critical Proxmox — scoped mutations, no accidental cross-workload impact
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
# Production safety — Proxmox and operator automation
|
||||
|
||||
This environment is **mission-critical**. Prefer **small, explicit scopes** over broad loops.
|
||||
|
||||
## Do not
|
||||
|
||||
- Run **host-wide** or **cluster-wide** `pct start` / `qm start` / `pct stop` / destructive maintenance **without** a named list of VMIDs and a **dry-run first**.
|
||||
- Edit **`config/ip-addresses.conf`** or shared dotenv for a **single-workload** fix unless the change is documented and reviewed; prefer **workload-specific scripts** with explicit `--host` / `--vmid` flags.
|
||||
- Rely on ad-hoc shell one-liners that iterate all Proxmox IPs for the user; use **`scripts/operator/start-stopped-lxc-scoped.sh`** (or an equally scoped script) instead.
|
||||
|
||||
## Do
|
||||
|
||||
- **Default dry-run**, then **`--apply`** or **`PROXMOX_OPS_APPLY=1`** for mutations. Optional **`PROXMOX_OPS_ALLOWED_VMIDS`** for an extra allowlist.
|
||||
- Set **`PROXMOX_SAFE_DEFAULTS=1`** in operator `.env` so guarded maintenance scripts (`fix-core-rpc-2101.sh`, `make-rpc-vmids-writable-via-ssh.sh`, `ensure-legacy-monitor-networkd-via-ssh.sh`) default to **dry-run** unless **`--apply`** or **`PROXMOX_OPS_APPLY=1`**. Orchestrators (e.g. `run-all-maintenance-via-proxmox-ssh.sh`) pass **`--apply`** to sub-steps when not in top-level `--dry-run`.
|
||||
- Use **`scripts/lib/proxmox-production-guard.sh`** in new operator scripts that SSH to PVE.
|
||||
- After changing VM placement, update **`get_host_for_vmid`** in `scripts/lib/load-project-env.sh` so automation targets the correct node.
|
||||
- For Chain 138 RPC checks only: **`scripts/verify/check-chain138-rpc-health.sh`** (read-only HTTP probes).
|
||||
|
||||
## Reference
|
||||
|
||||
- Scoped start: `scripts/operator/start-stopped-lxc-scoped.sh`
|
||||
- Guard helpers: `scripts/lib/proxmox-production-guard.sh`
|
||||
- VMID / host facts: `docs/04-configuration/ALL_VMIDS_ENDPOINTS.md`, `docs/04-configuration/RPC_ENDPOINTS_MASTER.md`
|
||||
20
.cursor/rules/wormhole-ai-resources.mdc
Normal file
20
.cursor/rules/wormhole-ai-resources.mdc
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
description: When to use Wormhole AI doc bundles vs repo Chain 138 / CCIP canonicals
|
||||
alwaysApply: false
|
||||
---
|
||||
|
||||
# Wormhole AI resources vs this repo
|
||||
|
||||
## Use Wormhole’s bundles for
|
||||
|
||||
- Wormhole protocol behavior: VAAs, Guardians, NTT, Connect, Executor, Wormhole CCTP integration, Wormhole Queries, MultiGov, Settlement, TypeScript/Solidity SDK **as documented by Wormhole**.
|
||||
- Prefer the **tier ladder**: `llms.txt` → `site-index.json` → category `.md` → `llms-full.jsonl` only for RAG or very large context.
|
||||
- Canonical URLs and mirror script: [docs/04-configuration/WORMHOLE_AI_RESOURCES_LLM_PLAYBOOK.md](docs/04-configuration/WORMHOLE_AI_RESOURCES_LLM_PLAYBOOK.md).
|
||||
- Optional MCP: `mcp-wormhole-docs` (read-only resources + `wormhole_doc_search`); see [docs/04-configuration/MCP_SETUP.md](docs/04-configuration/MCP_SETUP.md).
|
||||
|
||||
## Use repo canonical docs for
|
||||
|
||||
- **Chain 138** token addresses, PMM pools, DODOPMMIntegration, deployer wallet, Blockscout alignment.
|
||||
- **CCIP** routes, receivers, and this project’s bridge runbooks.
|
||||
|
||||
Do not answer “what is the canonical cUSDT address on 138?” from Wormhole docs. Do not answer “how does Wormhole NTT deploy on Solana?” from `ADDRESS_MATRIX_AND_STATUS.md` unless it explicitly cites Wormhole.
|
||||
@@ -15,6 +15,9 @@ PROXMOX_USER=
|
||||
PROXMOX_TOKEN_NAME=
|
||||
PROXMOX_TOKEN_VALUE=
|
||||
PROXMOX_ALLOW_ELEVATED=
|
||||
# Production operator host: set PROXMOX_SAFE_DEFAULTS=1 so guarded maintenance scripts default to dry-run unless --apply or PROXMOX_OPS_APPLY=1 (see scripts/lib/proxmox-production-guard.sh).
|
||||
# PROXMOX_SAFE_DEFAULTS=
|
||||
# PROXMOX_OPS_ALLOWED_VMIDS=
|
||||
|
||||
# --- Cloudflare ---
|
||||
# Prefer CLOUDFLARE_API_TOKEN scoped to Zone:DNS:Edit on the zones you use (avoid global Account API key when possible).
|
||||
@@ -27,6 +30,8 @@ CLOUDFLARE_ZONE_ID_D_BIS_ORG=
|
||||
CLOUDFLARE_ZONE_ID_MIM4U_ORG=
|
||||
CLOUDFLARE_ZONE_ID_SANKOFA_NEXUS=
|
||||
CLOUDFLARE_ZONE_ID_DEFI_ORACLE_IO=
|
||||
# omdnl.org (apex + www): scripts/cloudflare/configure-omdnl-org-dns.sh
|
||||
CLOUDFLARE_ZONE_ID_OMDNL_ORG=
|
||||
CLOUDFLARE_TUNNEL_TOKEN=
|
||||
CLOUDFLARE_TUNNEL_ID=
|
||||
CLOUDFLARE_TUNNEL_ID_ALLTRA_HYBX=
|
||||
@@ -34,12 +39,19 @@ CLOUDFLARE_TUNNEL_ID_MIFOS_R630_02=
|
||||
CLOUDFLARE_TUNNEL_TOKEN_MIFOS_R630_02=
|
||||
CLOUDFLARE_ORIGIN_CA_KEY=
|
||||
CLOUDFLARE_ACCOUNT_ID=
|
||||
# Turnstile (Captcha) for IRU marketplace inquiry — Dashboard → Turnstile; NOT the DNS API key
|
||||
CLOUDFLARE_TURNSTILE_SECRET_KEY=
|
||||
# dbis_core Vite marketplace: VITE_CLOUDFLARE_TURNSTILE_SITE_KEY=
|
||||
# Sankofa portal Next.js (sibling repo): NEXT_PUBLIC_CLOUDFLARE_TURNSTILE_SITE_KEY=
|
||||
|
||||
# --- ClouDNS ---
|
||||
CLOUDNS_AUTH_ID=
|
||||
CLOUDNS_AUTH_PASSWORD=
|
||||
|
||||
# --- NPM / NPMplus ---
|
||||
# Shared admin username for all NPMplus instances unless an instance-specific
|
||||
# UI is deliberately configured differently.
|
||||
# API scripts: use HTTPS on port 81 (e.g. https://192.168.11.167:81). Plain http:// typically 301-redirects to https:// and breaks POST /api/tokens unless curl uses --post301.
|
||||
NPM_URL=
|
||||
NPM_EMAIL=
|
||||
NPM_PASSWORD=
|
||||
@@ -48,10 +60,67 @@ NPM_PROXMOX_HOST=
|
||||
NPMPLUS_HOST=
|
||||
NPM_VMID=
|
||||
NPMPLUS_VMID=
|
||||
NPM_PASSWORD_PRIMARY=
|
||||
NPM_PASSWORD_SECONDARY=
|
||||
NPM_PASSWORD_ALLTRA_HYBX=
|
||||
NPM_PASSWORD_FOURTH=
|
||||
NPM_PASSWORD_MIFOS=
|
||||
NPMPLUS_ALLTRA_HYBX_VMID=
|
||||
IP_NPMPLUS_ALLTRA_HYBX=
|
||||
NPM_URL_SECONDARY=
|
||||
NPM_URL_ALLTRA_HYBX=
|
||||
NPM_URL_FOURTH=
|
||||
NPM_URL_MIFOS=
|
||||
|
||||
# --- NPMplus: public CCIP mainnet-cw relay health (upstream r630-01 :9863) ---
|
||||
# Set then run: bash scripts/nginx-proxy-manager/update-npmplus-proxy-hosts-api.sh
|
||||
# Or from SSH (r630-01 → NPM LAN): bash scripts/nginx-proxy-manager/upsert-ccip-relay-mainnet-cw-via-ssh.sh
|
||||
# DNS (d-bis.org): bash scripts/cloudflare/configure-relay-mainnet-cw-dns.sh (or full zone: scripts/update-all-dns-to-public-ip.sh)
|
||||
# CCIP_RELAY_MAINNET_CW_PUBLIC_HOST=relay-mainnet-cw.d-bis.org
|
||||
# Optional: CCIP_RELAY_MAINNET_CW_UPSTREAM_IP=192.168.11.11 CCIP_RELAY_MAINNET_CW_UPSTREAM_PORT=9863
|
||||
# Explorer / mission-control (optional): name mainnet-cw normalizes to mainnet_cw (preferred primary in ccip_health.go).
|
||||
# Set on the explorer API host or pass through explorer-monorepo/deployment/docker-compose.yml (api service).
|
||||
# CCIP_RELAY_HEALTH_URLS=mainnet-cw=https://relay-mainnet-cw.d-bis.org/healthz,mainnet=http://192.168.11.11:9860/healthz
|
||||
# CCIP_RELAY_HEALTH_URL=
|
||||
|
||||
# --- info.defi-oracle.io (dedicated nginx LXC, not VMID 2400 RPC) ---
|
||||
# Defaults in config/ip-addresses.conf: IP_INFO_DEFI_ORACLE_WEB=192.168.11.218, VMID 2410.
|
||||
# IP_INFO_DEFI_ORACLE_WEB=
|
||||
# INFO_DEFI_ORACLE_VMID=
|
||||
# INFO_DEFI_ORACLE_UPSTREAM_IP= # NPM fleet: overrides forward_host for info.defi-oracle.io
|
||||
# INFO_DEFI_ORACLE_EDGE_MODE=auto # auto | tunnel | public_ip — DNS script for info.defi-oracle.io
|
||||
# INFO_DEFI_ORACLE_PUBLIC_IP= # WAN IP for public_ip mode (else PUBLIC_IP)
|
||||
# CLOUDFLARE_ZONE_ID_DEFI_ORACLE_IO= # Required for set-info-defi-oracle-dns + purge-info-defi-oracle-cache
|
||||
# INFO_DEFI_ORACLE_TUNNEL_UPSTREAM= # Tunnel ingress origin for info hostnames (default IP_INFO_DEFI_ORACLE_WEB)
|
||||
# SPA: default runtime base is {origin}/token-aggregation (nginx on 2410 proxies to Blockscout). Override only if needed:
|
||||
# In info-defi-oracle-138/.env.local (not this file): VITE_TOKEN_AGGREGATION_API_BASE=https://explorer.d-bis.org/token-aggregation
|
||||
|
||||
# --- mev.defi-oracle.io (MEV Control GUI on nginx LXC 2410 by default) ---
|
||||
# MEV_ADMIN_API_HOST=192.168.11.223 # Dedicated backend CT 2421; LAN host reachable from CT
|
||||
# MEV_ADMIN_API_PORT=9090
|
||||
# MEV_DEFI_ORACLE_WEB_VMID=2410
|
||||
# MEV_DEFI_ORACLE_UPSTREAM_IP= # NPM: forward_host override (default IP_INFO_DEFI_ORACLE_WEB)
|
||||
# MEV_DEFI_ORACLE_UPSTREAM_PORT=80
|
||||
# MEV_DEFI_ORACLE_EDGE_MODE=auto # Cloudflare DNS script (same as info: auto|tunnel|public_ip)
|
||||
# MEV_DEFI_ORACLE_PUBLIC_IP= # A-record mode WAN IP if not using tunnel
|
||||
# Backend CT runtime env lives in config/mev-platform/mev-platform-backend-ct.env.example
|
||||
# and must include:
|
||||
# MEV_SUPERVISOR_URL=http://127.0.0.1:9091
|
||||
|
||||
# --- Keycloak Admin API (optional) ---
|
||||
# For scripts/deployment/keycloak-sankofa-ensure-client-redirects.sh — merge portal/admin redirect URIs.
|
||||
# KEYCLOAK_URL=https://keycloak.sankofa.nexus
|
||||
# KEYCLOAK_REALM=master
|
||||
# KEYCLOAK_CLIENT_ID=sankofa-portal
|
||||
# KEYCLOAK_ADMIN=admin
|
||||
# KEYCLOAK_ADMIN_PASSWORD=
|
||||
|
||||
# --- IT read API (Sankofa portal /it on CT 7801) ---
|
||||
# Base URL of sankofa-it-read-api (Phase 0). Merged into /opt/sankofa-portal/.env by:
|
||||
# scripts/deployment/sankofa-portal-merge-it-read-api-env-from-repo.sh
|
||||
# IT_READ_API_URL=http://192.168.11.11:8787
|
||||
# IT_READ_API_KEY=
|
||||
|
||||
# --- Fastly ---
|
||||
FASTLY_API_TOKEN=
|
||||
|
||||
@@ -70,6 +139,10 @@ OMADA_CLIENT_SECRET=
|
||||
GITEA_URL=
|
||||
GITEA_TOKEN=
|
||||
GITEA_ORG=
|
||||
# NPMplus upstream for gitea.d-bis.org (primary + fourth scripts). Defaults in config/ip-addresses.conf: VMID 104 @ .31:80
|
||||
# GITEA_PUBLIC_UPSTREAM_HOST=192.168.11.31
|
||||
# GITEA_PUBLIC_UPSTREAM_PORT=80
|
||||
# Dev-local Gitea on VM 5700 instead: GITEA_PUBLIC_UPSTREAM_HOST=192.168.11.59 GITEA_PUBLIC_UPSTREAM_PORT=3000
|
||||
|
||||
# --- Database & app auth ---
|
||||
DATABASE_URL=
|
||||
@@ -92,11 +165,164 @@ AWS_S3_BUCKET=
|
||||
AZURE_STORAGE_CONNECTION_STRING=
|
||||
AZURE_STORAGE_CONTAINER=
|
||||
|
||||
# --- Pinata (IPFS pinning; token logos) ---
|
||||
# Dashboard: https://app.pinata.cloud — API Keys → JWT or key/secret.
|
||||
# scripts/upload-token-logos-to-ipfs.sh uses PINATA_JWT only (Bearer for pinFileToIPFS).
|
||||
PINATA_JWT=
|
||||
PINATA_API_KEY=
|
||||
PINATA_API_SECRET=
|
||||
|
||||
# --- Blockchain / SMOM-DBIS-138 (use smom-dbis-138/.env for PRIVATE_KEY) ---
|
||||
PRIVATE_KEY=
|
||||
# Chain 138 Core (deploy/gas/scripts on LAN): http://192.168.11.211:8545 — IP:port; not FQDN. See docs/04-configuration/RPC_ENDPOINTS_MASTER.md
|
||||
RPC_URL_138=
|
||||
# Public JSON-RPC for frontends, bridges, MetaMask: HTTPS FQDN only, e.g. https://rpc-http-pub.d-bis.org (not 192.168.11.221). LAN-only services may use http://192.168.11.221:8545
|
||||
RPC_URL_138_PUBLIC=
|
||||
# Token-aggregation publication bundle (explorer): deploy script uses TOKEN_AGG_CHAIN138_RPC_URL if set, else defaults to public node — see scripts/deploy-token-aggregation-for-publication.sh
|
||||
# TOKEN_AGG_CHAIN138_RPC_URL=
|
||||
# Optional PMM-only RPC for GET /api/v1/quote on-chain path (core RPC while indexer uses public)
|
||||
# TOKEN_AGGREGATION_PMM_RPC_URL=
|
||||
# TOKEN_AGGREGATION_PMM_QUERY_TRADER=
|
||||
# Router-v2 execution stack (Chain 138 canonical live deployment)
|
||||
ENHANCED_SWAP_ROUTER_V2_ADDRESS=0xF1c93F54A5C2fc0d7766Ccb0Ad8f157DFB4C99Ce
|
||||
INTENT_BRIDGE_COORDINATOR_V2_ADDRESS=0x7D0022B7e8360172fd9C0bB6778113b7Ea3674E7
|
||||
CHAIN138_ENABLE_DODO_V3_EXECUTION=1
|
||||
# Chain 138 multi-provider venues (canonical live deployment)
|
||||
UNISWAP_V3_ROUTER=0xde9cD8ee2811E6E64a41D5F68Be315d33995975E
|
||||
UNISWAP_QUOTER_ADDRESS=0x6abbB1CEb2468e748a03A00CD6aA9BFE893AFa1f
|
||||
UNISWAP_V3_WETH_USDT_POOL=0xa893add35aEfe6A6d858EB01828bE4592f12C9F5
|
||||
UNISWAP_V3_WETH_USDC_POOL=0xEC745bfb6b3cd32f102d594E5F432d8d85B19391
|
||||
UNISWAP_V3_WETH_USDT_FEE=500
|
||||
UNISWAP_V3_WETH_USDC_FEE=500
|
||||
BALANCER_VAULT=0x96423d7C1727698D8a25EbFB88131e9422d1a3C3
|
||||
BALANCER_WETH_USDT_POOL_ID=0x877cd220759e8c94b82f55450c85d382ae06856c426b56d93092a420facbc324
|
||||
BALANCER_WETH_USDC_POOL_ID=0xd8dfb18a6baf9b29d8c2dbd74639db87ac558af120df5261dab8e2a5de69013b
|
||||
CURVE_3POOL=0xE440Ec15805BE4C7BabCD17A63B8C8A08a492e0f
|
||||
ONEINCH_ROUTER=0x500B84b1Bc6F59C1898a5Fe538eA20A758757A4F
|
||||
CHAIN138_DEPLOY_GAS_PRICE_WEI=1000
|
||||
# Chain 138 upstream-native Uniswap v3 replacement track
|
||||
CHAIN138_UNISWAP_V3_NATIVE_CORE_REPO=/home/intlc/projects/uniswap-v3-core
|
||||
CHAIN138_UNISWAP_V3_NATIVE_PERIPHERY_REPO=/home/intlc/projects/uniswap-v3-periphery
|
||||
CHAIN138_UNISWAP_V3_NATIVE_FACTORY=0x2f7219276e3ce367dB9ec74C1196a8ecEe67841C
|
||||
CHAIN138_UNISWAP_V3_NATIVE_NFT_DESCRIPTOR_LIBRARY=0x6F5fdE32DD2aC66B27e296EC9D6F4E79A3dE2947
|
||||
CHAIN138_UNISWAP_V3_NATIVE_TOKEN_DESCRIPTOR=0xca66DCAC4633555033F6fDDBE4234B6913c7ff51
|
||||
CHAIN138_UNISWAP_V3_NATIVE_POSITION_MANAGER=0x31b68BE5af4Df565Ce261dfe53D529005D947B48
|
||||
CHAIN138_UNISWAP_V3_NATIVE_SWAP_ROUTER=0xde9cD8ee2811E6E64a41D5F68Be315d33995975E
|
||||
CHAIN138_UNISWAP_V3_NATIVE_QUOTER_V2=0x6abbB1CEb2468e748a03A00CD6aA9BFE893AFa1f
|
||||
CHAIN138_UNISWAP_V3_NATIVE_WETH_USDT_POOL=0xa893add35aEfe6A6d858EB01828bE4592f12C9F5
|
||||
CHAIN138_UNISWAP_V3_NATIVE_WETH_USDC_POOL=0xEC745bfb6b3cd32f102d594E5F432d8d85B19391
|
||||
CHAIN138_UNISWAP_V3_NATIVE_FEE_TIER=500
|
||||
CHAIN138_NATIVE_GAS_PRICE=1000
|
||||
CHAIN138_NATIVE_DEPLOY_GAS_LIMIT=12000000
|
||||
CHAIN138_NATIVE_POOL_TX_GAS_LIMIT=12000000
|
||||
CHAIN138_NATIVE_WETH9=0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
|
||||
CHAIN138_NATIVE_USDT=0x004b63A7B5b0E06f6bB6adb4a5F9f590BF3182D1
|
||||
CHAIN138_NATIVE_USDC=0x71D6687F38b93CCad569Fa6352c876eea967201b
|
||||
CHAIN138_NATIVE_CURRENCY_LABEL=ETH
|
||||
CHAIN138_UNISWAP_V3_INITIAL_USD_PER_WETH=2116.6
|
||||
CHAIN138_UNISWAP_V3_SEED_WETH_USDT_WETH=50
|
||||
CHAIN138_UNISWAP_V3_SEED_WETH_USDT_STABLE=105830
|
||||
CHAIN138_UNISWAP_V3_SEED_WETH_USDC_WETH=50
|
||||
CHAIN138_UNISWAP_V3_SEED_WETH_USDC_STABLE=105830
|
||||
# Cross-chain flash infra (Chain 138)
|
||||
FLASH_UNIVERSAL_CCIP_BRIDGE=0xCd42e8eD79Dc50599535d1de48d3dAFa0BE156F8
|
||||
FLASH_CCIP_ROUTER=0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817
|
||||
FLASH_REPAY_RECEIVER_ROUTER=0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817
|
||||
FLASH_VAULT_CREDIT_ROUTER=0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817
|
||||
CROSS_CHAIN_FLASH_BRIDGE_ADAPTER=0xBe9e0B2d4cF6A3b2994d6f2f0904D2B165eB8ffC
|
||||
CROSS_CHAIN_FLASH_REPAY_RECEIVER=0xD084b68cB4B1ef2cBA09CF99FB1B6552fd9b4859
|
||||
CROSS_CHAIN_FLASH_VAULT_CREDIT_RECEIVER=0x89F7a1fcbBe104BeE96Da4b4b6b7d3AF85f7E661
|
||||
# Optional same-chain ERC-3156 flash dry-run inputs (set when a canonical flash vault is deployed / approved)
|
||||
FLASH_VAULT=
|
||||
FLASH_VAULT_TOKEN=
|
||||
FLASH_PROVIDER_RPC_URL=
|
||||
FLASH_TEST_AMOUNT=
|
||||
# XDC Zero — second relayer pair (XDC Network mainnet <-> Chain 138). See docs/03-deployment/CHAIN138_XDC_ZERO_BRIDGE_RUNBOOK.md and config/xdc-zero/
|
||||
# Use XDC mainnet JSON-RPC only (chain id 50), not Ethereum L1. Prefer erpc (rpc.xinfin.network often returns 5xx).
|
||||
XDC_PARENTNET_URL=https://erpc.xinfin.network
|
||||
# Testnet (Apothem): https://rpc.apothem.network
|
||||
# Optional alias for 138 side (defaults to RPC_URL_138 in preflight if unset):
|
||||
XDC_ZERO_PEER_RPC_URL=
|
||||
|
||||
# Ethereum L1 — used for dual-anchor attestation with scripts/omnl/omnl-chain138-attestation-tx.sh (consumes ETH gas). Alias: RPC_URL_MAINNET.
|
||||
ETHEREUM_MAINNET_RPC=
|
||||
# Mainnet DODO PMM + optional TRUU volatile rail (see docs/03-deployment/MAINNET_PMM_TRUU_CWUSD_PEG_AND_BOT_RUNBOOK.md)
|
||||
# Canonical integration: 0xa9F284eD010f4F7d7F8F201742b49b9f58e29b84
|
||||
DODO_PMM_INTEGRATION_MAINNET=
|
||||
# --- Mainnet Aave flash quote-push (cWUSDC/USDC peg / rebalance without wallet USDC) ---
|
||||
# If the deployer wallet already has USDC + cWUSDC: bash scripts/deployment/apply-mainnet-cwusdc-usdc-peg-tranche-from-wallet.sh --dry-run | --apply
|
||||
# Receiver only: bash scripts/deployment/deploy-mainnet-aave-quote-push-receiver.sh --dry-run | --apply
|
||||
# Deploy: bash scripts/deployment/deploy-mainnet-aave-quote-push-stack.sh --dry-run | --apply
|
||||
# Treasury manager: bash scripts/deployment/deploy-mainnet-quote-push-treasury-manager.sh --dry-run | --apply
|
||||
# One shot: bash scripts/deployment/run-mainnet-aave-cwusdc-quote-push-once.sh --dry-run | --apply
|
||||
# Keeper: bash scripts/deployment/run-mainnet-aave-quote-push-keeper.sh --dry-run | --apply
|
||||
# Loop: FLASH_LOOP_COUNT=3 bash scripts/deployment/run-mainnet-aave-cwusdc-quote-push-loop.sh --dry-run | --apply
|
||||
# Forge sources: smom-dbis-138/script/flash/RunMainnetAaveCwusdcUsdcQuotePushOnce.s.sol
|
||||
# Modeling (no chain writes): scripts/deployment/run-mainnet-cwusdc-flash-quote-push-model-sweep.sh
|
||||
# Optional sweep tuning: FLASH_MODEL_GAS_TX_COUNT FLASH_MODEL_GAS_PER_TX FLASH_MODEL_MAX_POST_TRADE_DEV_BPS
|
||||
AAVE_QUOTE_PUSH_RECEIVER_MAINNET=0x241cb416aaFC2654078b7E2376adED2bDeFbCBa2
|
||||
# QUOTE_PUSH_UNWINDER_TYPE=two_hop_dodo # or dodo_univ3 / two_hop_dodo_univ3; lets the runner auto-pick the latest real broadcast unwinder after --apply
|
||||
QUOTE_PUSH_EXTERNAL_UNWINDER_MAINNET=0xaB74B4369e5603085A58FDa181E9B43617C6a58f
|
||||
FLASH_QUOTE_AMOUNT_RAW=200000
|
||||
# MIN_OUT_UNWIND_BUFFER_RAW=0 # route-specific override for two_hop_dodo_univ3; the recovered three-leg path can clear with zero buffer while the legacy 5000 raw default clips it
|
||||
# UNWIND_MODE: 0 = Uniswap V3 exactInputSingle (set UNWIND_V3_FEE_U24); 1 = DODO pool (UNWIND_DODO_POOL);
|
||||
# 2 = Uniswap V3 exactInput packed path hex (UNWIND_V3_PATH_HEX) when no direct pool — see UniswapV3ExternalUnwinder.
|
||||
# 6 = TwoHopDodoToUniswapV3MultiHopExternalUnwinder (UNWIND_TWO_HOP_* + UNWIND_INTERMEDIATE_TOKEN + UNWIND_V3_PATH_HEX)
|
||||
UNWIND_MODE=4
|
||||
# UNWIND_V3_FEE_U24=
|
||||
# UNWIND_V3_PATH_HEX=0x... # UNWIND_MODE=2 — build: bash scripts/verify/build-uniswap-v3-exact-input-path-hex.sh <path-args>
|
||||
# UNWIND_DODO_POOL=
|
||||
UNWIND_TWO_HOP_POOL_A=0xe944b7Cb012A0820c07f54D51e92f0e1C74168DB
|
||||
UNWIND_TWO_HOP_POOL_B=0x27f3aE7EE71Be3d77bAf17d4435cF8B895DD25D2
|
||||
UNWIND_TWO_HOP_MID_TOKEN=0xaF5017d0163ecb99d9B5D94e3b4D7b09Af44D8AE
|
||||
UNWIND_MIN_MID_OUT_RAW=1
|
||||
# UNWIND_INTERMEDIATE_TOKEN=0xdAC17F958D2ee523a2206206994597C13D831ec7
|
||||
# UNWIND_MIN_INTERMEDIATE_OUT_RAW=1
|
||||
# Retained-surplus recycle / treasury manager policy:
|
||||
# QUOTE_PUSH_RECEIVER_OWNER=0x...
|
||||
# Live migration shortcut:
|
||||
# bash scripts/deployment/deploy-mainnet-aave-quote-push-receiver.sh --apply
|
||||
# AAVE_QUOTE_PUSH_RECEIVER_MAINNET=<new_receiver> QUOTE_PUSH_TREASURY_TAKE_RECEIVER_OWNERSHIP=1 bash scripts/deployment/deploy-mainnet-quote-push-treasury-manager.sh --apply
|
||||
# QUOTE_PUSH_TREASURY_MANAGER_MAINNET=0x...
|
||||
# QUOTE_PUSH_TREASURY_OWNER=0x...
|
||||
# QUOTE_PUSH_TREASURY_OPERATOR=0x...
|
||||
# QUOTE_PUSH_TREASURY_GAS_RECIPIENT=0x...
|
||||
# QUOTE_PUSH_TREASURY_RECYCLE_RECIPIENT=0x...
|
||||
# QUOTE_PUSH_RECEIVER_RESERVE_RAW=0
|
||||
# QUOTE_PUSH_TREASURY_RESERVE_RAW=0
|
||||
# QUOTE_PUSH_TREASURY_TAKE_RECEIVER_OWNERSHIP=1
|
||||
# QUOTE_PUSH_KEEPER_SKIP_FLASH=0
|
||||
# QUOTE_PUSH_KEEPER_SKIP_RECYCLE=0
|
||||
# QUOTE_PUSH_DEPLOYER_GAS_FLOOR_ETH=0.003
|
||||
# QUOTE_PUSH_OPERATION_BUFFER_ETH=0.0005
|
||||
# QUOTE_PUSH_NATIVE_TOKEN_PRICE=3200
|
||||
# Discover V3 pools: bash scripts/verify/probe-uniswap-v3-cwusdc-usdc-mainnet.sh
|
||||
# Optional min-out overrides (script derives from pool query + Aave premium when unset):
|
||||
# MIN_OUT_PMM=
|
||||
# MIN_OUT_UNWIND=
|
||||
# AAVE_FLASH_PREMIUM_BPS=5
|
||||
# UniswapV3ExternalUnwinder expects legacy SwapRouter exactInputSingle (not SwapRouter02 multicall).
|
||||
# UNISWAP_V3_SWAP_ROUTER_MAINNET=0xE592427A0AEce92De3Edee1F18E0157C05861564
|
||||
# cWUSDT/cWUSDC public PMM on mainnet (see cross-chain-pmm-lps/config/deployment-status.json); override if redeployed:
|
||||
# POOL_CWUSDT_CWUSDC_MAINNET=0xe944b7Cb012A0820c07f54D51e92f0e1C74168DB
|
||||
# Optional public flash-lender candidates for no-broadcast dry-runs on Ethereum mainnet.
|
||||
# Balancer mainnet vault is documented in smom-dbis-138/docs/bridge/trustless/ENV_VARIABLES_REFERENCE.md.
|
||||
MAINNET_BALANCER_VAULT=0xBA12222222228d8Ba445958a75a0704d566BF2C8
|
||||
# Aave V3 Ethereum mainnet pool/provider, verified on-chain 2026-04-05 via ADDRESSES_PROVIDER() and FLASHLOAN_PREMIUM_TOTAL().
|
||||
MAINNET_AAVE_V3_POOL=0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2
|
||||
MAINNET_AAVE_V3_POOL_ADDRESSES_PROVIDER=0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e
|
||||
# Optional overrides (defaults match deployment-status.json / scripts)
|
||||
TRUU_MAINNET=
|
||||
PMM_TRUU_FEE_BPS=
|
||||
PMM_TRUU_K=
|
||||
# Optional extra cast check in scripts/verify/check-mainnet-pmm-peg-bot-readiness.sh
|
||||
PMM_TRUU_BASE_TOKEN=
|
||||
PMM_TRUU_QUOTE_TOKEN=
|
||||
# Override initial DODO i for new pools only if governance changes baseline (top-up script default)
|
||||
PMM_TRUU_INITIAL_I=
|
||||
WORMHOLE_API_KEY=
|
||||
WORMHOLE_EXECUTOR_URL=https://executor.labsapis.com
|
||||
WORMHOLE_EXECUTOR_TESTNET_URL=https://executor-testnet.labsapis.com
|
||||
CHAIN_651940_RPC_URL=
|
||||
ETHERLINK_RPC_URL=
|
||||
TEZOS_RPC_URL=
|
||||
@@ -109,11 +335,127 @@ ETHERLINK_RELAY_BRIDGE=
|
||||
ETHERLINK_RELAY_PRIVATE_KEY=
|
||||
JUMPER_API_KEY=
|
||||
ONEINCH_API_KEY=
|
||||
# Optional: 1inch dev API base (default https://api.1inch.dev/swap/v6.0) — see packages/economics-toolkit/src/swap-engine/oneinch-quote.ts
|
||||
ONEINCH_API_URL=
|
||||
DODO_API_KEY=
|
||||
DODO_SECRET_KEY=
|
||||
DODO_DEVELOPER_API_KEY=
|
||||
# Optional: hosted DODO SmartTrade swap URL (default https://api.dodoex.io/route-service/developer/swap)
|
||||
DODO_QUOTE_URL=
|
||||
# Optional override for hosted DODO quote probes; if unset, scripts derive USER_ADDR
|
||||
# from PRIVATE_KEY and fall back to the standard deployer wallet.
|
||||
USER_ADDR=
|
||||
MOONPAY_API_KEY=
|
||||
MOONPAY_SECRET_KEY=
|
||||
RAMP_NETWORK_API_KEY=
|
||||
ONRAMPER_API_KEY=
|
||||
|
||||
# --- Changelly Exchange API v2 (Chain 138 → mainnet → BTC payout pathway; backend only) ---
|
||||
# Docs: https://docs.changelly.com/ — register keys via pro@changelly.com
|
||||
# Private key: PEM file on server or KMS reference; never expose to frontend builds.
|
||||
CHANGELLY_API_PUBLIC_KEY=
|
||||
CHANGELLY_API_PRIVATE_KEY_PEM_PATH=
|
||||
|
||||
# --- Canonical GRU / D-WIN token surfaces used by PMM, reporting, and staged x402 cutover ---
|
||||
CUSDT_V2_ADDRESS_138=
|
||||
CUSDC_V2_ADDRESS_138=
|
||||
CAUSDT_ADDRESS_138=0x5fdDF65733e3d590463F68f93Cf16E8c04081271
|
||||
CUSDW_ADDRESS_138=
|
||||
AUSDT_ADDRESS_651940=0x015B1897Ed5279930bC2Be46F661894d219292A6
|
||||
CAXAUC_ADDRESS_651940=
|
||||
CAXAUT_ADDRESS_651940=
|
||||
CWAXAUC_ADDRESS_651940=
|
||||
CWAXAUT_ADDRESS_651940=
|
||||
USDW_ADDRESS_25=
|
||||
# Optional: CMC "USD DWIN" native USDW (post-migration); canonical pins are config/token-mapping-multichain.json -> dwinUsdWinPublic
|
||||
USDW_DWIN_BSC=
|
||||
USDW_DWIN_POLYGON=
|
||||
CWAUSDT_ADDRESS_56=0xe1a51Bc037a79AB36767561B147eb41780124934
|
||||
CWAUSDT_ADDRESS_137=0xf12e262F85107df26741726b074606CaFa24AAe7
|
||||
CWAUSDT_ADDRESS_43114=0xff3084410A732231472Ee9f93F5855dA89CC5254
|
||||
CWAUSDT_ADDRESS_42220=0xC158b6cD3A3088C52F797D41f5Aa02825361629e
|
||||
CWUSDW_ADDRESS_56=
|
||||
CWUSDW_ADDRESS_137=
|
||||
CWUSDW_ADDRESS_43114=
|
||||
USDW_WRAP_VAULT_56=
|
||||
USDW_WRAP_VAULT_137=
|
||||
USDW_NATIVE_ADDRESS_56=
|
||||
USDW_NATIVE_ADDRESS_137=
|
||||
# Legacy wrapped-token aliases still seen in smom-dbis-138/.env and accepted by token-aggregation:
|
||||
CWUSDW_BSC=
|
||||
CWUSDW_AVALANCHE=
|
||||
|
||||
# --- cW* bridge role grants (scripts/deployment/grant-cw-bridge-roles-on-chain.sh) ---
|
||||
# Optional: legacy gas price wei, or percent bump over cast gas-price (default 150). Mainnet/L2s need this when base fee spikes.
|
||||
# CW_GRANT_GAS_PRICE_WEI=
|
||||
# CW_GRANT_GAS_BUMP_PCT=150
|
||||
|
||||
# --- WEMIX3.0 mainnet (chain id 1111) ---
|
||||
# Official RPC (HTTPS): https://docs.wemix.com/en/quick-start/start-node/use-public-api-server-rpc
|
||||
# Swap on-chain to native WEMIX for gas after assets are on 1111: https://wemix.fi/swap
|
||||
# No in-repo route for ETH/BNB/POL → WEMIX; see docs/03-deployment/WEMIX_ACQUISITION_TABLED.md
|
||||
WEMIX_RPC=https://api.wemix.com
|
||||
# WEMIX_MAINNET_RPC= # alias also read by grant-cw-bridge-roles-on-chain.sh
|
||||
|
||||
# --- GRU deployer funding gates (check-gru-v2-deployer-funding-status.sh, check-full-deployment-status.sh) ---
|
||||
# Arbitrum native balance must exceed this wei threshold or a funding blocker is raised. Set to 0 to skip (planning/CI only).
|
||||
# GRU_FUNDING_ARBITRUM_THRESHOLD_WEI=440872740000000000
|
||||
|
||||
# --- GRU Transport / cW hard-peg bridge controls (Chain 138 -> public chains) ---
|
||||
# Canonical L1 bridge env used by the GRU transport overlay and token-aggregation.
|
||||
CHAIN138_L1_BRIDGE=
|
||||
# Legacy alias still used by some deployment helpers.
|
||||
CW_L1_BRIDGE_CHAIN138=
|
||||
CW_BRIDGE_MAINNET=
|
||||
CW_BRIDGE_CRONOS=
|
||||
CW_BRIDGE_BSC=
|
||||
CW_BRIDGE_POLYGON=
|
||||
CW_BRIDGE_GNOSIS=
|
||||
CW_BRIDGE_CELO=
|
||||
CW_BRIDGE_AVALANCHE=
|
||||
CW_BRIDGE_BASE=
|
||||
CW_BRIDGE_ARBITRUM=
|
||||
CW_BRIDGE_OPTIMISM=
|
||||
CW_BRIDGE_WEMIX=
|
||||
CW_RESERVE_VERIFIER_CHAIN138=
|
||||
CW_STABLECOIN_RESERVE_VAULT=
|
||||
CW_RESERVE_SYSTEM=
|
||||
CW_ATTACH_VERIFIER_TO_L1=1
|
||||
CW_REQUIRE_VAULT_BACKING=
|
||||
CW_REQUIRE_RESERVE_SYSTEM_BALANCE=
|
||||
CW_REQUIRE_TOKEN_OWNER_MATCH_VAULT=
|
||||
CW_CANONICAL_USDT=
|
||||
CW_CANONICAL_USDC=
|
||||
CW_USDT_RESERVE_ASSET=
|
||||
CW_USDC_RESERVE_ASSET=
|
||||
CW_MAX_OUTSTANDING_BTC_MAINNET=2100000000000000
|
||||
CW_MAX_OUTSTANDING_USDT_MAINNET=10000000000000
|
||||
CW_MAX_OUTSTANDING_USDC_MAINNET=10000000000000
|
||||
CW_MAX_OUTSTANDING_USDT_CRONOS=
|
||||
CW_MAX_OUTSTANDING_USDC_CRONOS=
|
||||
CW_MAX_OUTSTANDING_USDT_BSC=
|
||||
CW_MAX_OUTSTANDING_USDC_BSC=
|
||||
CW_MAX_OUTSTANDING_AUSDT_BSC=
|
||||
CW_MAX_OUTSTANDING_USDT_POLYGON=
|
||||
CW_MAX_OUTSTANDING_USDC_POLYGON=
|
||||
CW_MAX_OUTSTANDING_AUSDT_POLYGON=
|
||||
CW_MAX_OUTSTANDING_USDT_GNOSIS=
|
||||
CW_MAX_OUTSTANDING_USDC_GNOSIS=
|
||||
CW_MAX_OUTSTANDING_USDT_CELO=
|
||||
CW_MAX_OUTSTANDING_USDC_CELO=
|
||||
CW_MAX_OUTSTANDING_AUSDT_CELO=
|
||||
CW_MAX_OUTSTANDING_USDT_AVALANCHE=
|
||||
CW_MAX_OUTSTANDING_USDC_AVALANCHE=
|
||||
CW_MAX_OUTSTANDING_AUSDT_AVALANCHE=
|
||||
CW_MAX_OUTSTANDING_USDT_BASE=
|
||||
CW_MAX_OUTSTANDING_USDC_BASE=
|
||||
CW_MAX_OUTSTANDING_USDT_ARBITRUM=
|
||||
CW_MAX_OUTSTANDING_USDC_ARBITRUM=
|
||||
CW_MAX_OUTSTANDING_USDT_OPTIMISM=
|
||||
CW_MAX_OUTSTANDING_USDC_OPTIMISM=
|
||||
CW_MAX_OUTSTANDING_WEMIX_WEMIX=
|
||||
CW_FREEZE_AVAX_L2_CONFIG=
|
||||
|
||||
# --- Alerts & monitoring ---
|
||||
SLACK_WEBHOOK_URL=
|
||||
PAGERDUTY_INTEGRATION_KEY=
|
||||
@@ -121,6 +463,17 @@ EMAIL_ALERT_API_URL=
|
||||
EMAIL_ALERT_RECIPIENTS=
|
||||
SENTRY_DSN=
|
||||
|
||||
# --- dbis_core IRU / marketplace outbound mail (optional; Proxmox Mail Proxy VMID 100 = 192.168.11.32) ---
|
||||
# EMAIL_PROVIDER=smtp
|
||||
# SMTP_HOST=192.168.11.32
|
||||
# SMTP_PORT=587
|
||||
# SMTP_SECURE=false
|
||||
# SMTP_USER=
|
||||
# SMTP_PASSWORD=
|
||||
# EMAIL_FROM=
|
||||
# EMAIL_FROM_NAME=SolaceNet
|
||||
# DBIS_SALES_EMAIL=
|
||||
|
||||
# --- Legal / e-signature ---
|
||||
E_SIGNATURE_BASE_URL=
|
||||
|
||||
@@ -159,6 +512,26 @@ SANKOFA_PHOENIX_API_URL=
|
||||
SANKOFA_PHOENIX_CLIENT_ID=
|
||||
SANKOFA_PHOENIX_CLIENT_SECRET=
|
||||
SANKOFA_PHOENIX_TENANT_ID=
|
||||
# Corporate apex (sankofa.nexus) → CT 7806 when provisioned (default in ip-addresses stays portal until set)
|
||||
# IP_SANKOFA_PUBLIC_WEB=192.168.11.63
|
||||
|
||||
# Optional consolidated hub (non-chain web + API path router). Defaults in ip-addresses.conf match discrete CTs until overridden.
|
||||
# IP_SANKOFA_WEB_HUB=
|
||||
# SANKOFA_WEB_HUB_PORT=80
|
||||
# IP_SANKOFA_PHOENIX_API_HUB=
|
||||
# SANKOFA_PHOENIX_API_HUB_PORT=8080
|
||||
# When API hub nginx is live on Phoenix CT (7800), LAN smoke: curl -sS http://${IP_SANKOFA_PHOENIX_API:-192.168.11.50}:8080/health
|
||||
# NPM fleet (phoenix.sankofa.nexus): set 8080 when Tier-1 API hub nginx is live (production); leave unset only for break-glass direct :4000.
|
||||
SANKOFA_NPM_PHOENIX_PORT=8080
|
||||
# Hub listen port for LAN smoke scripts (distinct from SANKOFA_PHOENIX_API_HUB_PORT / Apollo):
|
||||
# SANKOFA_API_HUB_LISTEN_PORT=8080
|
||||
# WebSocket upgrade smoke (curl HTTP 101): pnpm run verify:phoenix-graphql-wss
|
||||
# Optional second probe to hub on LAN: PHOENIX_WSS_INCLUDE_LAN=1 (needs load-project-env / IP_SANKOFA_PHOENIX_API)
|
||||
# Phoenix CT 7800 — bind Apollo to loopback after hub uses 127.0.0.1:4000: scripts/deployment/ensure-sankofa-phoenix-apollo-bind-loopback-7800.sh
|
||||
# LAN verify prefers hub :8080 when reachable; optional direct :4000 check: SANKOFA_VERIFY_PHOENIX_DIRECT_PORT=1
|
||||
# Optional if hub CT IP differs from IP_SANKOFA_PHOENIX_API:
|
||||
# IP_SANKOFA_NPM_PHOENIX_API=192.168.11.xx
|
||||
# dbis_core behind NPM (+ optional hub): set TRUST_PROXY=1 and TRUST_PROXY_HOPS (1 or 2) in dbis_core .env — see dbis_core/.env.example
|
||||
|
||||
# --- Frontend / MetaMask / Explorer ---
|
||||
VITE_WALLETCONNECT_PROJECT_ID=
|
||||
@@ -190,6 +563,32 @@ RPC_URL_138_FIREBLOCKS=
|
||||
WS_URL_138_FIREBLOCKS=
|
||||
CHAIN_ID_138=
|
||||
|
||||
# --- PMM soak grid (6534 wallets; operator funding scripts) ---
|
||||
# Runbook: docs/11-references/CHAIN138_GRID_6534_WALLET_FUNDING_PLAN.md
|
||||
# Optional stable RPC for long runs (avoids LAN Core flaps during thousands of cast sends):
|
||||
# PMM_SOAK_RPC_URL_OVERRIDE=https://rpc-http-pub.d-bis.org
|
||||
# Full-grid resume orchestrator: start at this leg only (native|mint|cusdt|cusdc|mirr_usdt|mirr_usdc)
|
||||
# PMM_SOAK_START_LEG=
|
||||
# Skip native when every wallet already funded (max linear index is 6533; use 6534 to skip native):
|
||||
# PMM_SOAK_RESUME_NATIVE_FROM_LINEAR=
|
||||
# Per-chunk progress/ETA in pmm-soak-operator-fund-grid.sh (0 = quiet except final line per chunk):
|
||||
# PMM_SOAK_FUND_PROGRESS_EVERY=50
|
||||
# PMM_SOAK_FUND_CHUNK=250
|
||||
|
||||
# --- @proxmox/economics-toolkit (path-check / exec broadcast; operator LAN only) ---
|
||||
# Validate checked-in strategy JSON: pnpm run economics:validate (optional: pip install check-jsonschema for schema pass)
|
||||
# Optional: same as PRIVATE_KEY for guarded swap broadcast (see packages/economics-toolkit/config/executor-allowlist.example.json).
|
||||
# ECONOMICS_EXEC_PRIVATE_KEY=
|
||||
# Set to 1 to broadcast after successful simulation (default is dry-run).
|
||||
# ECONOMICS_EXEC_APPLY=
|
||||
# POST JSON when path-check clears economics gate (optional).
|
||||
# ECONOMICS_ALERT_WEBHOOK=
|
||||
# Per-chain RPC override for economics-toolkit gas-quote: ECONOMICS_GAS_RPC_1=, ECONOMICS_GAS_RPC_56=, etc.
|
||||
# (Listed chain IDs are CR/LF-stripped when using scripts/lib/load-project-env.sh — same as RPC_URL_138.)
|
||||
# ECONOMICS_GAS_SKIP_USD=1 Skip CoinGecko; print native gas cost only
|
||||
# Optional: economics-toolkit gas-budget derives EOA from this if --address omitted (else PRIVATE_KEY)
|
||||
# ECONOMICS_GAS_BUDGET_PRIVATE_KEY=
|
||||
|
||||
# --- Phoenix deploy API ---
|
||||
PORT=
|
||||
GITEA_TOKEN=
|
||||
|
||||
30
.gitea/workflows/live-inventory-hardware-weekly.yml
Normal file
30
.gitea/workflows/live-inventory-hardware-weekly.yml
Normal file
@@ -0,0 +1,30 @@
|
||||
# Weekly: hardware poll + live inventory / drift export → artifacts.
|
||||
# GitHub: see .github/workflows/live-inventory-drift.yml
|
||||
# Gitea: use a LAN self-hosted runner with label [lan] for live Proxmox reachability;
|
||||
# ubuntu-latest will usually produce seed_unreachable (still uploads JSON).
|
||||
name: Live inventory + hardware poll (weekly)
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '20 7 * * 1'
|
||||
|
||||
jobs:
|
||||
inventory-and-hardware:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Poll Proxmox cluster hardware (LAN optional)
|
||||
run: bash scripts/verify/poll-proxmox-cluster-hardware.sh
|
||||
continue-on-error: true
|
||||
|
||||
- name: Export live inventory and IPAM drift
|
||||
run: bash scripts/it-ops/export-live-inventory-and-drift.sh
|
||||
continue-on-error: true
|
||||
|
||||
- name: Summarize reports/status (commit artifacts on LAN runner if needed)
|
||||
if: always()
|
||||
run: |
|
||||
ls -la reports/status/ 2>/dev/null || true
|
||||
test -f reports/status/drift.json && head -c 400 reports/status/drift.json || true
|
||||
55
.github/workflows/dbis-core-gateway-ci.yml
vendored
Normal file
55
.github/workflows/dbis-core-gateway-ci.yml
vendored
Normal file
@@ -0,0 +1,55 @@
|
||||
# Gateway rails unit + HTTP integration tests (dbis_core submodule)
|
||||
name: dbis-core-gateway-ci
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'dbis_core/package.json'
|
||||
- 'dbis_core/package-lock.json'
|
||||
- 'dbis_core/jest.config.js'
|
||||
- 'dbis_core/jest.gateway-http.config.js'
|
||||
- 'dbis_core/src/core/gateway/**'
|
||||
- 'dbis_core/src/workers/gateway-outbox.worker.ts'
|
||||
- 'dbis_core/src/workers/run-gateway-outbox-worker.ts'
|
||||
- 'dbis_core/src/__tests__/unit/core/gateway/**'
|
||||
- 'dbis_core/src/__tests__/integration/api/gateway-rails-http.integration.test.ts'
|
||||
- 'dbis_core/src/__tests__/gateway-http-env-setup.ts'
|
||||
- 'dbis_core/src/__tests__/utils/gateway-http-test-app.ts'
|
||||
- '.github/workflows/dbis-core-gateway-ci.yml'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'dbis_core/package.json'
|
||||
- 'dbis_core/package-lock.json'
|
||||
- 'dbis_core/jest.config.js'
|
||||
- 'dbis_core/jest.gateway-http.config.js'
|
||||
- 'dbis_core/src/core/gateway/**'
|
||||
- 'dbis_core/src/workers/gateway-outbox.worker.ts'
|
||||
- 'dbis_core/src/workers/run-gateway-outbox-worker.ts'
|
||||
- 'dbis_core/src/__tests__/unit/core/gateway/**'
|
||||
- 'dbis_core/src/__tests__/integration/api/gateway-rails-http.integration.test.ts'
|
||||
- 'dbis_core/src/__tests__/gateway-http-env-setup.ts'
|
||||
- 'dbis_core/src/__tests__/utils/gateway-http-test-app.ts'
|
||||
- '.github/workflows/dbis-core-gateway-ci.yml'
|
||||
|
||||
defaults:
|
||||
run:
|
||||
working-directory: dbis_core
|
||||
|
||||
jobs:
|
||||
test-gateway:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 15
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'npm'
|
||||
cache-dependency-path: dbis_core/package-lock.json
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Gateway tests (unit + integration)
|
||||
run: npm run test:gateway
|
||||
42
.github/workflows/economics-toolkit.yml
vendored
Normal file
42
.github/workflows/economics-toolkit.yml
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
# Unit tests for packages/economics-toolkit (no live RPC required).
|
||||
name: economics-toolkit
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- "packages/economics-toolkit/**"
|
||||
- "pnpm-workspace.yaml"
|
||||
- "package.json"
|
||||
- "scripts/economics/**"
|
||||
- "scripts/validation/validate-economics-strategy-json.sh"
|
||||
- "AGENTS.md"
|
||||
- ".github/workflows/economics-toolkit.yml"
|
||||
pull_request:
|
||||
paths:
|
||||
- "packages/economics-toolkit/**"
|
||||
- "pnpm-workspace.yaml"
|
||||
- "package.json"
|
||||
- "scripts/economics/**"
|
||||
- "scripts/validation/validate-economics-strategy-json.sh"
|
||||
- "AGENTS.md"
|
||||
- ".github/workflows/economics-toolkit.yml"
|
||||
workflow_dispatch: {}
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "20"
|
||||
cache: "pnpm"
|
||||
- name: Install
|
||||
run: pnpm install
|
||||
- name: Test economics-toolkit
|
||||
run: pnpm run economics:test
|
||||
- name: Validate strategy JSON (smoke + template)
|
||||
run: pnpm run economics:validate
|
||||
43
.github/workflows/info-defi-oracle-138.yml
vendored
Normal file
43
.github/workflows/info-defi-oracle-138.yml
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
# Build Chain 138 info hub SPA when its package or workspace lockfile changes.
|
||||
name: info-defi-oracle-138
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'info-defi-oracle-138/**'
|
||||
- 'pnpm-lock.yaml'
|
||||
- 'pnpm-workspace.yaml'
|
||||
- '.github/workflows/info-defi-oracle-138.yml'
|
||||
push:
|
||||
branches: [main, master]
|
||||
paths:
|
||||
- 'info-defi-oracle-138/**'
|
||||
- 'pnpm-lock.yaml'
|
||||
- 'pnpm-workspace.yaml'
|
||||
- '.github/workflows/info-defi-oracle-138.yml'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Typecheck & Vite build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'pnpm'
|
||||
cache-dependency-path: pnpm-lock.yaml
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install --frozen-lockfile
|
||||
|
||||
- name: Build info-defi-oracle-138
|
||||
run: pnpm --filter info-defi-oracle-138 build
|
||||
29
.github/workflows/live-inventory-drift.yml
vendored
Normal file
29
.github/workflows/live-inventory-drift.yml
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
# Live Proxmox guest inventory + drift vs config/ip-addresses.conf.
|
||||
# GitHub-hosted runners usually cannot reach 192.168.11.x; workflow still produces
|
||||
# drift.json with seed_unreachable. Use a self-hosted LAN runner or run locally:
|
||||
# bash scripts/it-ops/export-live-inventory-and-drift.sh
|
||||
name: Live inventory and IPAM drift
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '25 6 * * 1'
|
||||
|
||||
jobs:
|
||||
drift:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Export live inventory (LAN optional)
|
||||
run: bash scripts/it-ops/export-live-inventory-and-drift.sh
|
||||
continue-on-error: true
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
if: always()
|
||||
with:
|
||||
name: live-inventory-drift
|
||||
path: |
|
||||
reports/status/live_inventory.json
|
||||
reports/status/drift.json
|
||||
46
.github/workflows/pmm-soak-grid-smoke.yml
vendored
Normal file
46
.github/workflows/pmm-soak-grid-smoke.yml
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
# Dry-run PMM soak helpers: export, fund-grid plan, grid + single-wallet quote ticks (read-only RPC).
|
||||
name: PMM soak grid smoke
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'scripts/deployment/pmm-soak*.sh'
|
||||
- 'scripts/deployment/chain138-pmm*.sh'
|
||||
- 'scripts/deployment/pmm-soak-grid-smoke-check.sh'
|
||||
- 'scripts/lib/pmm-soak*.sh'
|
||||
- 'scripts/lib/pmm-soak-dotenv-override.sh'
|
||||
- 'scripts/deployment/pmm-soak-export-wallet-grid.py'
|
||||
- 'config/pmm-soak-pools-stable.txt'
|
||||
- 'config/pmm-soak-wallet-grid.example.json'
|
||||
- '.github/workflows/pmm-soak-grid-smoke.yml'
|
||||
push:
|
||||
branches: [main, master]
|
||||
paths:
|
||||
- 'scripts/deployment/pmm-soak*.sh'
|
||||
- 'scripts/deployment/chain138-pmm*.sh'
|
||||
- 'scripts/deployment/pmm-soak-grid-smoke-check.sh'
|
||||
- 'scripts/lib/pmm-soak*.sh'
|
||||
- 'scripts/lib/pmm-soak-dotenv-override.sh'
|
||||
- 'scripts/deployment/pmm-soak-export-wallet-grid.py'
|
||||
- 'config/pmm-soak-pools-stable.txt'
|
||||
- 'config/pmm-soak-wallet-grid.example.json'
|
||||
- '.github/workflows/pmm-soak-grid-smoke.yml'
|
||||
|
||||
jobs:
|
||||
smoke:
|
||||
name: Grid smoke (dry-run, public RPC)
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Foundry (cast)
|
||||
uses: foundry-rs/foundry-toolchain@v1
|
||||
|
||||
- name: Install bc
|
||||
run: sudo apt-get update -qq && sudo apt-get install -y bc
|
||||
|
||||
- name: PMM soak grid smoke
|
||||
env:
|
||||
CI: "true"
|
||||
run: bash scripts/deployment/pmm-soak-grid-smoke-check.sh
|
||||
142
.github/workflows/validate-config.yml
vendored
142
.github/workflows/validate-config.yml
vendored
@@ -6,19 +6,103 @@ on:
|
||||
paths:
|
||||
- 'config/**'
|
||||
- 'scripts/validation/**'
|
||||
- 'scripts/jvmtm/**'
|
||||
- 'scripts/omnl/build-omnl-e2e-settlement-audit-archive.sh'
|
||||
- 'scripts/verify/sync-blockscout-address-labels-from-registry.sh'
|
||||
- 'explorer-monorepo/scripts/generate-topology-graph.sh'
|
||||
- 'explorer-monorepo/frontend/public/config/topology-graph.json'
|
||||
- 'scripts/verify/run-all-validation.sh'
|
||||
- 'scripts/verify/verify-end-to-end-routing.sh'
|
||||
- 'scripts/run-completable-tasks-from-anywhere.sh'
|
||||
- 'scripts/run-operator-tasks-from-lan.sh'
|
||||
- 'scripts/run-all-operator-tasks-from-lan.sh'
|
||||
- 'scripts/run-full-operator-completion-from-lan.sh'
|
||||
- 'scripts/verify/check-info-defi-oracle-public.sh'
|
||||
- 'scripts/verify/check-completion-status.sh'
|
||||
- 'scripts/verify/check-chain138-rpc-health.sh'
|
||||
- 'scripts/verify/check-chain138-rpc-nonce-gas-parity.sh'
|
||||
- 'scripts/verify/self-test-chain138-rpc-verify.sh'
|
||||
- 'scripts/lib/chain138-lan-rpc-inventory.sh'
|
||||
- 'scripts/monitoring/monitor-blockchain-health.sh'
|
||||
- 'scripts/clear-all-transaction-pools.sh'
|
||||
- '.github/workflows/validate-config.yml'
|
||||
- '.github/workflows/verify-info-defi-oracle-public.yml'
|
||||
- 'token-lists/**'
|
||||
- 'explorer-monorepo/backend/api/rest/config/metamask/**'
|
||||
- 'docs/03-deployment/OMNL_DBIS_CORE_CHAIN138_SMART_VAULT_RTGS_RUNBOOK.md'
|
||||
- 'docs/03-deployment/OJK_BI_AUDIT_JVMTM_REMEDIATION_AND_UETR_POLICY.md'
|
||||
- 'config/jvmtm-regulatory-closure/INAAUDJVMTM_2025_AUDIT_CLOSURE_MATRIX.md'
|
||||
- 'docs/04-configuration/SMART_CONTRACTS_ISO20022_FIN_METHODOLOGY.md'
|
||||
- 'docs/dbis-rail/ISO_GATEWAY_AND_RELAYER_SPEC.md'
|
||||
- 'scripts/deployment/pmm-soak*.sh'
|
||||
- 'scripts/deployment/chain138-pmm*.sh'
|
||||
- 'scripts/lib/pmm-soak*.sh'
|
||||
- 'scripts/deployment/pmm-soak-export-wallet-grid.py'
|
||||
- '.github/workflows/pmm-soak-grid-smoke.yml'
|
||||
- 'docs/11-references/CHAIN138_GRID_6534_WALLET_FUNDING_PLAN.md'
|
||||
- 'docs/04-configuration/GRU_REFERENCE_PRIMACY_AND_MESH_EXECUTION_MODEL.md'
|
||||
- 'docs/04-configuration/GRU_C_STAR_V2_STANDARDS_MATRIX_AND_IMPLEMENTATION_PLAN.md'
|
||||
- 'scripts/verify/check-gru-reference-primacy-integration.sh'
|
||||
- 'cross-chain-pmm-lps/config/peg-bands.json'
|
||||
- 'cross-chain-pmm-lps/docs/04-bot-policy.md'
|
||||
- 'cross-chain-pmm-lps/docs/05-oracles.md'
|
||||
- 'docs/00-meta/SUBMODULE_HYGIENE.md'
|
||||
- 'docs/00-meta/NEXT_STEPS_LIST.md'
|
||||
- 'docs/00-meta/OPERATOR_READY_CHECKLIST.md'
|
||||
- 'docs/11-references/GRU_V2_PUBLIC_PROTOCOL_DEPLOYMENT_STATUS.md'
|
||||
- '.cursor/rules/chain138-tokens-and-pmm.mdc'
|
||||
- 'scripts/run-completable-tasks-from-anywhere.sh'
|
||||
push:
|
||||
branches: [master]
|
||||
branches: [master, main]
|
||||
paths:
|
||||
- 'config/**'
|
||||
- 'scripts/validation/**'
|
||||
- 'scripts/jvmtm/**'
|
||||
- 'scripts/omnl/build-omnl-e2e-settlement-audit-archive.sh'
|
||||
- 'scripts/verify/sync-blockscout-address-labels-from-registry.sh'
|
||||
- 'explorer-monorepo/scripts/generate-topology-graph.sh'
|
||||
- 'explorer-monorepo/frontend/public/config/topology-graph.json'
|
||||
- 'scripts/verify/run-all-validation.sh'
|
||||
- 'scripts/verify/verify-end-to-end-routing.sh'
|
||||
- 'scripts/run-completable-tasks-from-anywhere.sh'
|
||||
- 'scripts/run-operator-tasks-from-lan.sh'
|
||||
- 'scripts/run-all-operator-tasks-from-lan.sh'
|
||||
- 'scripts/run-full-operator-completion-from-lan.sh'
|
||||
- 'scripts/verify/check-info-defi-oracle-public.sh'
|
||||
- 'scripts/verify/check-completion-status.sh'
|
||||
- 'scripts/verify/check-chain138-rpc-health.sh'
|
||||
- 'scripts/verify/check-chain138-rpc-nonce-gas-parity.sh'
|
||||
- 'scripts/verify/self-test-chain138-rpc-verify.sh'
|
||||
- 'scripts/lib/chain138-lan-rpc-inventory.sh'
|
||||
- 'scripts/monitoring/monitor-blockchain-health.sh'
|
||||
- 'scripts/clear-all-transaction-pools.sh'
|
||||
- '.github/workflows/validate-config.yml'
|
||||
- '.github/workflows/verify-info-defi-oracle-public.yml'
|
||||
- 'token-lists/**'
|
||||
- 'explorer-monorepo/backend/api/rest/config/metamask/**'
|
||||
- 'docs/03-deployment/OMNL_DBIS_CORE_CHAIN138_SMART_VAULT_RTGS_RUNBOOK.md'
|
||||
- 'docs/03-deployment/OJK_BI_AUDIT_JVMTM_REMEDIATION_AND_UETR_POLICY.md'
|
||||
- 'config/jvmtm-regulatory-closure/INAAUDJVMTM_2025_AUDIT_CLOSURE_MATRIX.md'
|
||||
- 'docs/04-configuration/SMART_CONTRACTS_ISO20022_FIN_METHODOLOGY.md'
|
||||
- 'docs/dbis-rail/ISO_GATEWAY_AND_RELAYER_SPEC.md'
|
||||
- 'scripts/deployment/pmm-soak*.sh'
|
||||
- 'scripts/deployment/chain138-pmm*.sh'
|
||||
- 'scripts/lib/pmm-soak*.sh'
|
||||
- 'scripts/deployment/pmm-soak-export-wallet-grid.py'
|
||||
- '.github/workflows/pmm-soak-grid-smoke.yml'
|
||||
- 'docs/11-references/CHAIN138_GRID_6534_WALLET_FUNDING_PLAN.md'
|
||||
- 'docs/04-configuration/GRU_REFERENCE_PRIMACY_AND_MESH_EXECUTION_MODEL.md'
|
||||
- 'docs/04-configuration/GRU_C_STAR_V2_STANDARDS_MATRIX_AND_IMPLEMENTATION_PLAN.md'
|
||||
- 'scripts/verify/check-gru-reference-primacy-integration.sh'
|
||||
- 'cross-chain-pmm-lps/config/peg-bands.json'
|
||||
- 'cross-chain-pmm-lps/docs/04-bot-policy.md'
|
||||
- 'cross-chain-pmm-lps/docs/05-oracles.md'
|
||||
- 'docs/00-meta/SUBMODULE_HYGIENE.md'
|
||||
- 'docs/00-meta/NEXT_STEPS_LIST.md'
|
||||
- 'docs/00-meta/OPERATOR_READY_CHECKLIST.md'
|
||||
- 'docs/11-references/GRU_V2_PUBLIC_PROTOCOL_DEPLOYMENT_STATUS.md'
|
||||
- '.cursor/rules/chain138-tokens-and-pmm.mdc'
|
||||
- 'scripts/run-completable-tasks-from-anywhere.sh'
|
||||
|
||||
jobs:
|
||||
validate:
|
||||
@@ -28,11 +112,67 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 9
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Install workspace dependencies
|
||||
run: pnpm install --frozen-lockfile
|
||||
|
||||
- name: Config validation
|
||||
run: bash scripts/validation/validate-config-files.sh
|
||||
|
||||
- name: DBIS institutional JSON Schemas
|
||||
run: |
|
||||
python3 -m pip install check-jsonschema
|
||||
SCHEMA_STRICT=1 bash scripts/validation/validate-dbis-institutional-schemas.sh
|
||||
|
||||
- name: JVMTM regulatory closure JSON Schemas
|
||||
run: |
|
||||
python3 -m pip install check-jsonschema
|
||||
SCHEMA_STRICT=1 bash scripts/validation/validate-jvmtm-regulatory-closure-schemas.sh
|
||||
|
||||
- name: Reserve provenance package (3FR attestation JSON)
|
||||
run: |
|
||||
python3 -m pip install check-jsonschema
|
||||
SCHEMA_STRICT=1 bash scripts/validation/validate-reserve-provenance-package.sh
|
||||
|
||||
- name: Completable tasks (dry-run)
|
||||
run: bash scripts/run-completable-tasks-from-anywhere.sh --dry-run
|
||||
|
||||
- name: Chain 138 RPC verify scripts (syntax + offline parity)
|
||||
run: bash scripts/verify/self-test-chain138-rpc-verify.sh
|
||||
|
||||
- name: Explorer topology graph (regenerate + diff check)
|
||||
run: |
|
||||
bash explorer-monorepo/scripts/generate-topology-graph.sh
|
||||
git diff --exit-code explorer-monorepo/frontend/public/config/topology-graph.json
|
||||
|
||||
- name: ShellCheck (PMM soak grid scripts)
|
||||
run: |
|
||||
sudo apt-get update -qq
|
||||
sudo apt-get install -y shellcheck
|
||||
set -euo pipefail
|
||||
shells=(
|
||||
scripts/deployment/pmm-soak-operator-fund-grid.sh
|
||||
scripts/deployment/pmm-soak-complete-grid-funding-operator.sh
|
||||
scripts/deployment/pmm-soak-operator-fund-full-grid-tranches.sh
|
||||
scripts/deployment/pmm-soak-mint-mirror-usdc-deployer-shortfall.sh
|
||||
scripts/deployment/pmm-soak-complete-operator-bootstrap.sh
|
||||
scripts/deployment/pmm-soak-grid-smoke-check.sh
|
||||
scripts/lib/pmm-soak-dotenv-override.sh
|
||||
scripts/lib/pmm-soak-pools.sh
|
||||
scripts/lib/pmm-soak-chain138-tick.sh
|
||||
scripts/deployment/chain138-pmm-random-soak-swaps.sh
|
||||
scripts/deployment/chain138-pmm-soak-grid-bot.sh
|
||||
scripts/verify/check-gru-reference-primacy-integration.sh
|
||||
)
|
||||
shellcheck -x "${shells[@]}"
|
||||
|
||||
- name: Shellcheck (optional)
|
||||
run: bash scripts/verify/run-shellcheck.sh --optional
|
||||
|
||||
25
.github/workflows/validate-sankofa-nginx-examples.yml
vendored
Normal file
25
.github/workflows/validate-sankofa-nginx-examples.yml
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
# nginx -t on Sankofa consolidated example configs (no LAN).
|
||||
name: Validate Sankofa nginx examples
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'config/nginx/sankofa-*.example.conf'
|
||||
- 'config/nginx/sankofa-*-main.example.conf'
|
||||
- 'scripts/verify/check-sankofa-consolidated-nginx-examples.sh'
|
||||
- '.github/workflows/validate-sankofa-nginx-examples.yml'
|
||||
push:
|
||||
branches: [main, master]
|
||||
paths:
|
||||
- 'config/nginx/sankofa-*.example.conf'
|
||||
- 'config/nginx/sankofa-*-main.example.conf'
|
||||
- 'scripts/verify/check-sankofa-consolidated-nginx-examples.sh'
|
||||
- '.github/workflows/validate-sankofa-nginx-examples.yml'
|
||||
|
||||
jobs:
|
||||
nginx-syntax:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: nginx -t (host or Docker)
|
||||
run: bash scripts/verify/check-sankofa-consolidated-nginx-examples.sh
|
||||
44
.github/workflows/verify-info-defi-oracle-public.yml
vendored
Normal file
44
.github/workflows/verify-info-defi-oracle-public.yml
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
# Smoke-test the public Chain 138 info hub (HTTPS + agent files + same-origin token-aggregation JSON).
|
||||
# No secrets. May fail if the public edge or origin is down — inspect logs and runbook.
|
||||
name: Verify info.defi-oracle.io (public)
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'scripts/verify/check-info-defi-oracle-public.sh'
|
||||
- 'scripts/verify/playwright-audit-info-defi-oracle.mjs'
|
||||
- 'info-defi-oracle-138/**'
|
||||
- '.github/workflows/verify-info-defi-oracle-public.yml'
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
info_site_base:
|
||||
description: 'Optional INFO_SITE_BASE (staging). Leave empty to use repo variable or default https://info.defi-oracle.io'
|
||||
required: false
|
||||
type: string
|
||||
default: ''
|
||||
schedule:
|
||||
- cron: '35 14 * * 1' # Mondays 14:35 UTC (~ weekly)
|
||||
|
||||
jobs:
|
||||
verify:
|
||||
name: check-info-defi-oracle-public.sh
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install jq
|
||||
run: |
|
||||
sudo apt-get update -qq
|
||||
sudo apt-get install -y -qq jq
|
||||
|
||||
- name: Public info site + token-aggregation
|
||||
shell: bash
|
||||
env:
|
||||
INPUT_BASE: ${{ github.event.inputs.info_site_base }}
|
||||
VAR_BASE: ${{ vars.INFO_SITE_BASE }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
if [ -n "${INPUT_BASE}" ]; then export INFO_SITE_BASE="${INPUT_BASE}"; fi
|
||||
if [ -z "${INFO_SITE_BASE:-}" ] && [ -n "${VAR_BASE}" ]; then export INFO_SITE_BASE="${VAR_BASE}"; fi
|
||||
bash scripts/verify/check-info-defi-oracle-public.sh
|
||||
52
.gitignore
vendored
52
.gitignore
vendored
@@ -1,3 +1,6 @@
|
||||
# Nested clone (not a declared submodule; use submodule add if it should be tracked)
|
||||
transaction-composer/
|
||||
|
||||
# Dependencies
|
||||
node_modules/
|
||||
.pnpm-store/
|
||||
@@ -6,10 +9,20 @@ node_modules/
|
||||
package-lock.json
|
||||
yarn.lock
|
||||
|
||||
# DBIS identity package — never commit real secrets (example only is tracked)
|
||||
config/production/dbis-identity-public-did-secrets.env
|
||||
|
||||
# Local executor allowlist (copy from executor-allowlist.example.json)
|
||||
packages/economics-toolkit/config/executor-allowlist.json
|
||||
|
||||
# PMM soak grid (addresses tied to a real mnemonic — generate locally)
|
||||
config/pmm-soak-wallet-grid.json
|
||||
|
||||
# Environment files
|
||||
.env
|
||||
.env.local
|
||||
.env.*.local
|
||||
.env.keeper.local
|
||||
.env.master
|
||||
|
||||
# Logs
|
||||
@@ -26,6 +39,19 @@ Thumbs.db
|
||||
# Local-only Cursor session / context (exclude from Gitea)
|
||||
.cursor/local/
|
||||
|
||||
# Local Codex / IDE artifacts
|
||||
.codex
|
||||
.codex/
|
||||
|
||||
# Scratch and regenerated audit trees (re-run OMNL/JVMTM scripts to reproduce)
|
||||
tmp/
|
||||
output/jvmtm-evidence/
|
||||
output/settlement-events/
|
||||
output/omnl-e2e-settlement-audit-*/
|
||||
output/*compliance-archive*.zip
|
||||
output/omnl-e2e-settlement-audit-*.zip
|
||||
output/transaction-package-HYBX-BATCH-001/
|
||||
|
||||
# IDE files
|
||||
.vscode/
|
||||
.idea/
|
||||
@@ -51,11 +77,13 @@ out/
|
||||
|
||||
# Python
|
||||
venv/
|
||||
.venv-checkjson/
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# CoinGecko/CMC token logos (generated by prepare-token-logos-512x512.sh)
|
||||
docs/04-configuration/coingecko/logos/*.png
|
||||
token-lists/logos/*.png
|
||||
|
||||
# Ephemeral phase markers
|
||||
.phase1-event-status
|
||||
@@ -63,6 +91,18 @@ docs/04-configuration/coingecko/logos/*.png
|
||||
# DBIS Phase 1 discovery — timestamped reports (run scripts/verify/run-phase1-discovery.sh)
|
||||
reports/phase1-discovery/phase1-discovery-*.md
|
||||
|
||||
# Timestamped infra inventory/status exports (source-of-truth files stay tracked)
|
||||
reports/status/drift_*.json
|
||||
reports/status/live_inventory_*.json
|
||||
reports/status/hardware_poll_*.txt
|
||||
reports/status/lxc_cluster_health_*.json
|
||||
reports/status/lxc_cluster_health_*.txt
|
||||
|
||||
# Wormhole AI docs mirror (sync with scripts/doc/sync-wormhole-ai-resources.sh; keep manifest.json committable)
|
||||
third-party/wormhole-ai-docs/**
|
||||
!third-party/wormhole-ai-docs/README.md
|
||||
!third-party/wormhole-ai-docs/manifest.json
|
||||
|
||||
# OMNL operator rail (env-specific IDs, reconciliation, audit packets, posted refs)
|
||||
ids.env
|
||||
reconciliation/
|
||||
@@ -74,3 +114,15 @@ reconciliation/
|
||||
*.payload.json
|
||||
*.payload.sha256
|
||||
audit_log.jsonl
|
||||
|
||||
# Local publish / clone trees (nested git repos; not submodules)
|
||||
cross-chain-pmm-lps-publish/
|
||||
smom-dbis-138-publish/
|
||||
|
||||
# Thirdweb scratch test: vendored contracts dep is a nested clone
|
||||
thirdweb-core-2103-test/lib/contracts/
|
||||
|
||||
# Stray empty placeholders at repo root (do not track)
|
||||
/Arbitrum
|
||||
/cWUSDC
|
||||
/cWUSDT
|
||||
|
||||
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -64,3 +64,6 @@
|
||||
[submodule "MEV_Bot"]
|
||||
path = MEV_Bot
|
||||
url = https://gitea.d-bis.org/d-bis/MEV_Bot.git
|
||||
[submodule "thirdweb-core-2103-test/lib/contracts"]
|
||||
path = thirdweb-core-2103-test/lib/contracts
|
||||
url = https://github.com/thirdweb-dev/contracts
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
{"success":true,"errors":[],"messages":[],"result":{"tunnel_id":"892bd3fe-c6fa-4ddf-8b60-a8ed2b849c3d","version":14,"config":{"ingress":[{"service":"https://192.168.11.169:443","hostname":"rpc-core-2.d-bis.org","originRequest":{"noTLSVerify":true}},{"service":"https://192.168.11.169:443","hostname":"rpc-alltra.d-bis.org","originRequest":{"noTLSVerify":true}},{"service":"https://192.168.11.169:443","hostname":"rpc-alltra-2.d-bis.org","originRequest":{"noTLSVerify":true}},{"service":"https://192.168.11.169:443","hostname":"rpc-alltra-3.d-bis.org","originRequest":{"noTLSVerify":true}},{"service":"https://192.168.11.169:443","hostname":"rpc-hybx.d-bis.org","originRequest":{"noTLSVerify":true}},{"service":"https://192.168.11.169:443","hostname":"rpc-hybx-2.d-bis.org","originRequest":{"noTLSVerify":true}},{"service":"https://192.168.11.169:443","hostname":"rpc-hybx-3.d-bis.org","originRequest":{"noTLSVerify":true}},{"service":"https://192.168.11.169:443","hostname":"cacti-alltra.d-bis.org","originRequest":{"noTLSVerify":true}},{"service":"https://192.168.11.169:443","hostname":"cacti-hybx.d-bis.org","originRequest":{"noTLSVerify":true}},{"service":"http_status:404"}],"warp-routing":{"enabled":false}},"source":"cloudflare","created_at":"2026-04-05T22:11:28.363368Z"}}
|
||||
1
.ops-backups/npmplus/proxy-hosts-20260405-115027.json
Normal file
1
.ops-backups/npmplus/proxy-hosts-20260405-115027.json
Normal file
File diff suppressed because one or more lines are too long
68
AGENTS.md
68
AGENTS.md
@@ -11,29 +11,85 @@ Orchestration for Proxmox VE, Chain 138 (`smom-dbis-138/`), explorers, NPMplus,
|
||||
| Need | Location |
|
||||
|------|-----------|
|
||||
| Doc index | `docs/MASTER_INDEX.md` |
|
||||
| Chain 138 PMM swap quote (CLI) | `bash scripts/verify/pmm-swap-quote-chain138.sh --token-in … --amount-in …` — on-chain `querySellBase`/`querySellQuote` + suggested `minOut` for `DODOPMMIntegration.swapExactIn` (REST `/quote` is xy=k only). |
|
||||
| **DeFi economics toolkit** (flash/gas buckets, path gate, dry-run exec, live gas quotes, multi-leg strategies) | `pnpm run economics:test`; `pnpm run economics:validate` (parse + optional `check-jsonschema` on smoke/template); `pnpm exec economics-toolkit calc|path-check|gas-quote|gas-budget|prepare-swap|exec`; `pnpm exec economics-toolkit strategy kinds|template|validate|eval|optimize|optimize-multi|optimize-random|optimize-descent|enrich|runbook|exec-plan`; live refresh: `bash scripts/economics/refresh-strategy-from-live.sh [--apply] <strategy.json>`; examples `config/strategy-bounds.example.json`, `config/strategy-optimize-dims.example.json`; template `packages/economics-toolkit/config/strategy-template.json`, smoke `strategy-smoke.json`, schema `strategy.schema.json`; allowlist `packages/economics-toolkit/config/executor-allowlist.example.json`; `gas-networks.json`; flow tables `packages/economics-toolkit/docs/FLOW_INPUTS_OUTPUTS_TABLE.md`; CI `.github/workflows/economics-toolkit.yml`. |
|
||||
| Chain 138 info site (`info.defi-oracle.io`) | Dedicated nginx LXC (default VMID **2410** / `IP_INFO_DEFI_ORACLE_WEB`): `provision-info-defi-oracle-web-lxc.sh` then `sync-info-defi-oracle-to-vmid2400.sh` (sync asserts `/token-aggregation` proxy); NPM fleet `scripts/nginx-proxy-manager/update-npmplus-proxy-hosts-api.sh`; Cloudflare DNS `scripts/cloudflare/set-info-defi-oracle-dns-to-vmid2400-tunnel.sh`; cache `pnpm run cloudflare:purge-info-defi-oracle-cache`; runbook `docs/04-configuration/INFO_DEFI_ORACLE_IO_DEPLOYMENT.md`; `pnpm run verify:info-defi-oracle-public` (SPA routes including `/governance`, `/ecosystem`, `/documentation`, `/solacenet`, `llms.txt`, `agent-hints.json`, **same-origin** token-aggregation JSON; `INFO_SITE_BASE=…` optional); CI `info-defi-oracle-138.yml` (build) and `verify-info-defi-oracle-public.yml` (weekly + manual smoke); optional `pnpm run audit:info-defi-oracle-site` (`pnpm exec playwright install chromium`) |
|
||||
| **MEV Control GUI** (`mev.defi-oracle.io`) | Same nginx LXC as info by default: `scripts/deployment/sync-mev-control-gui-defi-oracle.sh` (builds `MEV_Bot/mev-platform/gui`, installs `/api` proxy to `MEV_ADMIN_API_HOST`:`MEV_ADMIN_API_PORT`); NPM + DNS via `update-npmplus-proxy-hosts-api.sh` and `scripts/cloudflare/set-mev-defi-oracle-dns.sh`; runbook `docs/04-configuration/MEV_CONTROL_DEFI_ORACLE_IO_DEPLOYMENT.md` |
|
||||
| **omdnl.org** (static landing) | Nginx LXC VMID **10203** / `IP_OMDNL_ORG_WEB` (default 192.168.11.222): `scripts/deployment/provision-omdnl-org-web-lxc.sh` → `sync-omdnl-org-static-to-ct.sh`; Cloudflare `configure-omdnl-org-dns.sh` (`CLOUDFLARE_ZONE_ID_OMDNL_ORG`, `PUBLIC_IP`); NPM `upsert-omdnl-org-proxy-host.sh`; content in `sites/omdnl-org/public/`. |
|
||||
| **SolaceNet + gateway rails** (dbis_core) | Hub map: `docs/04-configuration/SOLACENET_PUBLIC_HUB.md`. Backlog: `dbis_core/docs/solacenet/REMAINING_TASKS_FULL_LIST.md`. Gap IDs: `dbis_core/docs/solacenet/PROTOCOL_GAPS_CHECKLIST.md`. **Delta audit** (missing wiring, naming drift, CI): `dbis_core/docs/solacenet/AUDIT_GAPS_INCONSISTENCIES_MISSING.md`. Enforce rails runbook: `dbis_core/docs/solacenet/SOLACENET_GATEWAY_RAILS_ENFORCE_RUNBOOK.md`. Tests: `cd dbis_core && npm run test:gateway` (unit + HTTP integration). **Provider seed:** `cd dbis_core && npm run seed:gateway-provider` (needs `DATABASE_URL`). **Smoke (auth):** `bash scripts/verify/check-dbis-core-gateway-rails.sh`. **Outbox worker:** `cd dbis_core && npm run worker:gateway-outbox` (`DATABASE_URL`). CI: `.github/workflows/dbis-core-gateway-ci.yml`. API: `GET/POST /api/v1/gateway/rails*` (optional `SOLACENET_GATEWAY_RAILS_ENFORCE`) — `dbis_core/src/core/gateway/routes/gateway.routes.ts`. |
|
||||
| cXAUC/cXAUT unit | 1 full token = 1 troy oz Au — `docs/11-references/EXPLORER_TOKEN_LIST_CROSSCHECK.md` (section 5.1) |
|
||||
| GRU / UTRNF token naming (`c*` vs collateral prefix) | `docs/04-configuration/naming-conventions/README.md`, `docs/04-configuration/naming-conventions/02_DBIS_NAMESPACE_AND_UTRNF_MAPPING.md` |
|
||||
| **GRU reference primacy vs public cW\* PMM mesh** (FX policy; mesh = execution, not shadow oracle) | `docs/04-configuration/GRU_REFERENCE_PRIMACY_AND_MESH_EXECUTION_MODEL.md` |
|
||||
| PMM mesh 6s tick | `smom-dbis-138/scripts/reserve/pmm-mesh-6s-automation.sh` — `docs/integration/ORACLE_AND_KEEPER_CHAIN138.md` (PMM mesh automation) |
|
||||
| **PMM soak grid (33×33×6 wallets)** | `docs/11-references/CHAIN138_GRID_6534_WALLET_FUNDING_PLAN.md` — one-shot `scripts/deployment/pmm-soak-complete-operator-bootstrap.sh` (`PMM_SOAK_AUTO_INIT_GRID_MNEMONIC=1` … `--apply-funds --to-linear 19`); full-grid resume `scripts/deployment/pmm-soak-complete-grid-funding-operator.sh` (`PMM_SOAK_START_LEG`, `PMM_SOAK_RESUME_NATIVE_FROM_LINEAR`, `PMM_SOAK_RPC_URL_OVERRIDE`, `PMM_SOAK_FUND_PROGRESS_EVERY` via fund-grid); tranche driver `scripts/deployment/pmm-soak-operator-fund-full-grid-tranches.sh`; export `pmm-soak-export-wallet-grid.py`, fund `pmm-soak-operator-fund-grid.sh`, pools `scripts/lib/pmm-soak-pools.sh`, bots `chain138-pmm-soak-grid-bot.sh` / `chain138-pmm-random-soak-swaps.sh` (`--pool-preset`, `--swap-via`; `scripts/lib/pmm-soak-dotenv-override.sh` preserves caller `PMM_SOAK_POOL_*` / `CHAIN138_PMM_SOAK_SWAP_VIA` over `.env`), smoke `scripts/deployment/pmm-soak-grid-smoke-check.sh`, CI `.github/workflows/pmm-soak-grid-smoke.yml` |
|
||||
| Mainnet cWUSD\* peg, TRUU PMM, bot readiness | `docs/03-deployment/MAINNET_PMM_TRUU_CWUSD_PEG_AND_BOT_RUNBOOK.md` (§11 live inventory) — `scripts/verify/check-mainnet-pmm-peg-bot-readiness.sh`, `scripts/deployment/deploy-mainnet-pmm-cw-truu-pool.sh`, `scripts/deployment/add-mainnet-truu-pmm-topup.sh`, `scripts/deployment/compute-mainnet-truu-liquidity-amounts.sh`, `scripts/deployment/compute-mainnet-truu-pmm-seed-amounts.sh`; `cross-chain-pmm-lps/config/deployment-status.json` `pmmPoolsVolatile`; `docs/11-references/CONTRACT_ADDRESSES_REFERENCE.md` (Mainnet TRUU PMM); `check-full-deployment-status.sh` when `ETHEREUM_MAINNET_RPC` + `DODO_PMM_INTEGRATION_MAINNET` are set |
|
||||
| Mainnet cWUSD\* hybrid flash loop (modeled ladder + readiness) | `docs/03-deployment/MAINNET_CWUSD_HYBRID_FLASH_LOOP_CALCULATION_WHITEPAPER.md`; `scripts/analytics/pmm-flash-push-break-even.mjs` (`--sequential-matched-loops`, `--full-loop-dry-run --execution-grade`); `scripts/verify/check-public-pmm-dry-run-readiness.sh`; `scripts/verify/run-mainnet-cwusdc-usdc-ladder-steps-1-3.sh` (optional `PMM_FLASH_EXIT_PRICE_CMD`); `scripts/verify/print-mainnet-cwusdc-usdc-pmm-sellbase-implied-price.sh` (pool-implied diagnostic); `scripts/verify/print-mainnet-cwusdc-external-exit-quote.sh` (DODO / 1inch hosted quote for `--external-exit-price-cmd`); same APIs in `pnpm exec economics-toolkit swap-quote` |
|
||||
| Mainnet cWUSDT/cWUSDC PMM + USDT↔USDC pathing | `cross-chain-pmm-lps/config/deployment-status.json` (`cWUSDT`/`cWUSDC`); `scripts/deployment/compute-mainnet-cwusdt-cwusdc-seed-amounts.sh`, `deploy-mainnet-cwusdt-cwusdc-pool.sh`, `add-mainnet-public-dodo-cw-liquidity.sh --pair=cwusdt-cwusdc`, `run-mainnet-cwusdt-cwusdc-soak-roundtrips.sh`; `scripts/verify/plan-mainnet-usdt-usdc-via-cw-paths.sh`; `scripts/verify/report-mainnet-deployer-liquidity-and-routes.sh` (deployer + deep USDC/USDT venues); `run-mainnet-public-dodo-cw-swap.sh --pair=cwusdt-cwusdc`; `.env.master.example` `POOL_CWUSDT_CWUSDC_MAINNET` |
|
||||
| Mainnet cWUSDC/USDC **1:1 reserve peg** (6dp raw vault parity) | `scripts/verify/check-mainnet-cwusdc-usdc-reserve-peg.sh` (`PEG_IMBALANCE_MAX_BPS`, default 25); remediate with `scripts/deployment/plan-mainnet-cwusdc-usdc-rebalance-liquidity.sh` then `add-mainnet-public-dodo-cw-liquidity.sh --pair=cwusdc-usdc` (both `--base-amount` and `--quote-amount`; `--dry-run` first) |
|
||||
| Mainnet cWUSDC/USDC rebalance **without wallet USDC** (flash quote-push) | Plan: `scripts/deployment/plan-mainnet-cwusdc-flash-quote-push-rebalance.sh`; **models**: `run-mainnet-cwusdc-flash-quote-push-model-sweep.sh`; **V3 pool probe**: `scripts/verify/probe-uniswap-v3-cwusdc-usdc-mainnet.sh`; **V3 path hex (UNWIND_MODE=2)**: `scripts/verify/build-uniswap-v3-exact-input-path-hex.sh`; **deploy stack**: `deploy-mainnet-aave-quote-push-stack.sh` (`--dry-run` / `--apply`); **one tx**: `run-mainnet-aave-cwusdc-quote-push-once.sh`; **loop**: `run-mainnet-aave-cwusdc-quote-push-loop.sh` + `FLASH_LOOP_COUNT`. Forge: `smom-dbis-138/script/flash/RunMainnetAaveCwusdcUsdcQuotePushOnce.s.sol` (`UNWIND_MODE` 0=fee / 1=DODO pool / 2=V3 path hex). Whitepaper: `MAINNET_CWUSD_HYBRID_FLASH_LOOP_CALCULATION_WHITEPAPER.md`. |
|
||||
| VMID / IP / FQDN | `docs/04-configuration/ALL_VMIDS_ENDPOINTS.md` |
|
||||
| Ops template + JSON | `docs/03-deployment/PROXMOX_VE_OPERATIONAL_DEPLOYMENT_TEMPLATE.md`, `config/proxmox-operational-template.json` |
|
||||
| Live vs template (read-only SSH) | `bash scripts/verify/audit-proxmox-operational-template.sh` |
|
||||
| Config validation | `bash scripts/validation/validate-config-files.sh` |
|
||||
| Proxmox Mail Proxy (LAN SMTP) | VMID **100** `192.168.11.32` (`proxmox-mail-gateway`) — submission **587** / **465**; see Mail Proxy note in `ALL_VMIDS_ENDPOINTS.md` |
|
||||
| Spare R630 storage + optional tune-up | `scripts/proxmox/ensure-r630-spare-node-storage.sh`, `scripts/proxmox/provision-r630-03-six-ssd-thinpools.sh`, `scripts/proxmox/pve-spare-host-optional-tuneup.sh` · load balance / migrate: `docs/04-configuration/PROXMOX_LOAD_BALANCING_RUNBOOK.md` |
|
||||
| Ops template + JSON | `docs/03-deployment/PROXMOX_VE_OPERATIONAL_DEPLOYMENT_TEMPLATE.md`, `config/proxmox-operational-template.json` (`proxmox_nodes[].mgmt_fqdn` = `*.sankofa.nexus`; `config/ip-addresses.conf` `PROXMOX_FQDN_*`) |
|
||||
| Live vs template (read-only SSH) | `bash scripts/verify/audit-proxmox-operational-template.sh` — defaults to ML110 + **r630-01..04** (`PROXMOX_HOSTS` overrides) |
|
||||
| Proxmox mgmt FQDN DNS + `/etc/hosts` snippet | `bash scripts/verify/check-proxmox-mgmt-fqdn.sh` (`--print-hosts`, optional `--ssh`) |
|
||||
| Proxmox SSH check (all 5 nodes) | `bash scripts/security/ensure-proxmox-ssh-access.sh` (`--fqdn`, optional `--copy` for `ssh-copy-id`) |
|
||||
| Proxmox cluster hardware poll (LAN, key SSH) | `bash scripts/verify/poll-proxmox-cluster-hardware.sh` — writes `reports/status/hardware_poll_*.txt`; companion narrative + ARP/edge: `reports/status/hardware_and_connected_inventory_*.md` |
|
||||
| Proxmox LXC cluster health poll (LAN, key SSH) | `bash scripts/verify/poll-lxc-cluster-health.sh` — pulls `/cluster/resources` + per-node load/PSI/`pvesm`; writes `reports/status/lxc_cluster_health_*.json` and `.txt`; exits `0` ok / `1` warn / `2` crit / `3` collection failure |
|
||||
| Proxmox LXC rebalance planner (read-only) | `bash scripts/verify/plan-lxc-rebalance-from-health-report.sh [--report reports/status/lxc_cluster_health_*.json] --source r630-01 --target r630-04` — ranks move candidates, prints `pct migrate` commands, excludes chain-critical / infra-critical names by pattern |
|
||||
| IT live inventory + IPAM drift (LAN, Phase 0) | `bash scripts/it-ops/export-live-inventory-and-drift.sh` → `reports/status/live_inventory.json`, `drift.json` (exit **2** only if duplicate guest IPs; merges `ip-addresses.conf` + `ALL_VMIDS_ENDPOINTS.md`). Optional **`IT_BFF_SNAPSHOT_DB=/path/it.sqlite`** appends export metadata; optional **`IT_COLLECT_IP_NEIGH=1`** on PVE enables `ip neigh` sample in collector. [SANKOFA_IT_OPS_LIVE_INVENTORY_SCRIPTS.md](docs/03-deployment/SANKOFA_IT_OPS_LIVE_INVENTORY_SCRIPTS.md). Spec: [SANKOFA_IT_OPERATIONS_CONTROLLER_SPEC.md](docs/02-architecture/SANKOFA_IT_OPERATIONS_CONTROLLER_SPEC.md); ADR: [SANKOFA_IT_API_DEPLOYMENT_DECISION.md](docs/02-architecture/SANKOFA_IT_API_DEPLOYMENT_DECISION.md) |
|
||||
| IT inventory read API (Phase 0–1 BFF stub) | `python3 services/sankofa-it-read-api/server.py` — GET `/health`, `/v1/summary`, `/v1/collector-contract`, `/v1/portmap/joined` (stub), `/v1/inventory/live`, `/v1/inventory/drift`; POST `/v1/inventory/refresh` (returns `drift_exit_code`; **2** = duplicate IP alert). Optional `IT_READ_API_KEY`, `IT_BFF_OIDC_ISSUER` (health only). [services/sankofa-it-read-api/README.md](services/sankofa-it-read-api/README.md), systemd [config/systemd/sankofa-it-read-api.service.example](config/systemd/sankofa-it-read-api.service.example) |
|
||||
| **IT read API LAN bootstrap** | `bash scripts/deployment/bootstrap-sankofa-it-read-api-lan.sh` — rsync → `/opt/proxmox` on seed PVE (includes `config/it-operations/`), systemd + `/etc/sankofa-it-read-api.env`, repo `.env` + portal CT 7801 merge, weekly export timer on PVE. NPM: [upsert-it-read-api-proxy-host.sh](scripts/nginx-proxy-manager/upsert-it-read-api-proxy-host.sh); DNS: [add-it-api-sankofa-dns.sh](scripts/cloudflare/add-it-api-sankofa-dns.sh). [SANKOFA_IT_OPS_KEYCLOAK_PORTAL_NEXT_STEPS.md](docs/03-deployment/SANKOFA_IT_OPS_KEYCLOAK_PORTAL_NEXT_STEPS.md) |
|
||||
| Keycloak realm role + group for portal `/it` | `bash scripts/deployment/keycloak-sankofa-ensure-it-admin-role.sh` then `bash scripts/deployment/keycloak-sankofa-ensure-it-admin-group.sh` (CT 7802 via SSH); add IT users to group **sankofa-it-admin**. MFA: [SANKOFA_IT_OPS_KEYCLOAK_PORTAL_NEXT_STEPS.md](docs/03-deployment/SANKOFA_IT_OPS_KEYCLOAK_PORTAL_NEXT_STEPS.md). Portal: `IT_READ_API_URL` + optional `IT_READ_API_KEY` on CT 7801. Weekly export timer: [config/systemd/sankofa-it-inventory-export.timer.example](config/systemd/sankofa-it-inventory-export.timer.example) |
|
||||
| IT VLAN + port map + billing skeleton | VLAN runbook [VLAN_FLAT_11_TO_SEGMENTED_RUNBOOK.md](docs/03-deployment/VLAN_FLAT_11_TO_SEGMENTED_RUNBOOK.md); port layers [IT_PORT_MAP_LAYERS_SPEC.md](docs/02-architecture/IT_PORT_MAP_LAYERS_SPEC.md); edge IPs [IT_OPS_EDGE_DISCOVERY_IPS.md](docs/04-configuration/IT_OPS_EDGE_DISCOVERY_IPS.md); collectors contract [IT_LIVE_COLLECTORS_CONTRACT.md](docs/02-architecture/IT_LIVE_COLLECTORS_CONTRACT.md); Stripe outline [IT_OPERATIONS_BILLING_STRIPE_OUTLINE.md](docs/03-deployment/IT_OPERATIONS_BILLING_STRIPE_OUTLINE.md); guarded Proxmox preview [scripts/it-ops/proxmox-guarded-write-adapter.sh](scripts/it-ops/proxmox-guarded-write-adapter.sh); Gitea `.gitea/workflows/live-inventory-hardware-weekly.yml` |
|
||||
| IT admin UI next steps (Keycloak + portal `/it`) | [docs/03-deployment/SANKOFA_IT_OPS_KEYCLOAK_PORTAL_NEXT_STEPS.md](docs/03-deployment/SANKOFA_IT_OPS_KEYCLOAK_PORTAL_NEXT_STEPS.md) |
|
||||
| Config validation | `bash scripts/validation/validate-config-files.sh` (optional: `python3 -m pip install check-jsonschema` for `validate-dbis-institutional-schemas.sh`, `validate-naming-convention-registry-examples.sh`, `validate-jvmtm-regulatory-closure-schemas.sh`, `validate-reserve-provenance-package.sh`; includes explorer Chain 138 inventory vs `config/smart-contracts-master.json`) |
|
||||
| Chain 138 contract addresses (JSON + bytecode) | `config/smart-contracts-master.json` — `bash scripts/verify/check-contracts-on-chain-138.sh` (expect **75/75** when Core RPC reachable; jq uses JSON when file present) |
|
||||
| OMNL + Core + Chain 138 + RTGS + Smart Vaults | `docs/03-deployment/OMNL_DBIS_CORE_CHAIN138_SMART_VAULT_RTGS_RUNBOOK.md`; identifiers (UETR vs DLT-primary): `docs/03-deployment/OJK_BI_AUDIT_JVMTM_REMEDIATION_AND_UETR_POLICY.md`; JVMTM Tables B/C/D closure matrix: `config/jvmtm-regulatory-closure/INAAUDJVMTM_2025_AUDIT_CLOSURE_MATRIX.md`; **dual-anchor attestation:** `scripts/omnl/omnl-chain138-attestation-tx.sh` (138 + optional mainnet via `ETHEREUM_MAINNET_RPC`); E2E zip: `AUDIT_PROOF.json` `chainAttestationMainnet`; machine-readable: `config/dbis-institutional/` |
|
||||
| Blockscout address labels from registry | `bash scripts/verify/sync-blockscout-address-labels-from-registry.sh` (plan); `--apply` with `BLOCKSCOUT_*` env when explorer API confirmed |
|
||||
| ISO-20022 on-chain methodology + intake gateway | `docs/04-configuration/SMART_CONTRACTS_ISO20022_FIN_METHODOLOGY.md`, `ISO20022_INTAKE_GATEWAY_CONTRACT_MULTI_NETWORK.md`; Rail: `docs/dbis-rail/ISO_GATEWAY_AND_RELAYER_SPEC.md` |
|
||||
| FQDN / NPM E2E verifier | `bash scripts/verify/verify-end-to-end-routing.sh --profile=public` — inventory: `docs/04-configuration/E2E_ENDPOINTS_LIST.md`. Gitea Actions URLs (no API): `bash scripts/verify/print-gitea-actions-urls.sh` |
|
||||
| **Gitea** (org forge **VMID 104**, upgrades, NPM) | `docs/04-configuration/GITEA_PLATFORM_AND_UPGRADE_RUNBOOK.md` — `scripts/operator/upgrade-gitea-lxc.sh` (`--dry-run`, `GITEA_VERSION=`); `config/ip-addresses.conf` **`IP_GITEA_INFRA`**, **`GITEA_PUBLIC_UPSTREAM_*`**; `scripts/nginx-proxy-manager/update-npmplus-proxy-hosts-api.sh`, `update-npmplus-fourth-proxy-hosts.sh` |
|
||||
| Chain 138 LAN RPC health + nonce/gas parity | `bash scripts/verify/check-chain138-rpc-health.sh` (fleet + public capability); `bash scripts/verify/check-chain138-rpc-nonce-gas-parity.sh` (LAN: aligned chainId / deployer nonces / gasPrice); offline/CI: `bash scripts/verify/self-test-chain138-rpc-verify.sh`; shared VMID list: `scripts/lib/chain138-lan-rpc-inventory.sh` |
|
||||
| RPC FQDN batch (`eth_chainId` + WSS) | `bash scripts/verify/check-rpc-fqdns-e2e.sh` — after DNS + `update-npmplus-proxy-hosts-api.sh`; includes `rpc-core.d-bis.org` |
|
||||
| Submodule trees clean (CI / post-merge) | `bash scripts/verify/submodules-clean.sh` |
|
||||
| Submodule + explorer remotes | `docs/00-meta/SUBMODULE_HYGIENE.md` |
|
||||
| smom-dbis-138 `.env` in bash scripts | Prefer `source smom-dbis-138/scripts/lib/deployment/dotenv.sh` + `load_deployment_env --repo-root "$PROJECT_ROOT"` (trims RPC URL line endings). From an interactive shell: `source smom-dbis-138/scripts/load-env.sh`. Proxmox root scripts: `source scripts/lib/load-project-env.sh` (also trims common RPC vars). |
|
||||
| Sankofa portal → CT 7801 (build + restart) | `./scripts/deployment/sync-sankofa-portal-7801.sh` (`--dry-run` first); sets `NEXTAUTH_URL` on CT via `sankofa-portal-ensure-nextauth-on-ct.sh` |
|
||||
| CCIP relay (r630-01 host) | Unit: `config/systemd/ccip-relay.service` → `/etc/systemd/system/ccip-relay.service`; `systemctl enable --now ccip-relay` |
|
||||
| Sankofa portal → CT 7801 (build + restart) | `./scripts/deployment/sync-sankofa-portal-7801.sh` (`--dry-run` first); default `NEXTAUTH_URL=https://portal.sankofa.nexus` via `sankofa-portal-ensure-nextauth-on-ct.sh`; IT `/it` env: `sankofa-portal-merge-it-read-api-env-from-repo.sh` (`IT_READ_API_URL` in repo `.env`) |
|
||||
| Portal Keycloak OIDC secret on CT 7801 | After client exists: `./scripts/deployment/sankofa-portal-merge-keycloak-env-from-repo.sh` (needs `KEYCLOAK_CLIENT_SECRET` in repo `.env`; base64-safe over SSH) |
|
||||
| Sankofa corporate web → CT 7806 | Provision: `./scripts/deployment/provision-sankofa-public-web-lxc-7806.sh`. Sync: `./scripts/deployment/sync-sankofa-public-web-to-ct.sh`. systemd: `config/systemd/sankofa-public-web.service`. Set `IP_SANKOFA_PUBLIC_WEB` in `.env`, then `scripts/nginx-proxy-manager/update-npmplus-proxy-hosts-api.sh` |
|
||||
| **Non-chain ecosystem** (hyperscaler-style: edge / API hub / IdP / data cells; **not** chain CTs) | `docs/02-architecture/NON_CHAIN_ECOSYSTEM_HYPERSCALER_STYLE_MODEL.md` — gap review: `docs/02-architecture/NON_CHAIN_ECOSYSTEM_PLAN_REVIEW_AND_GAPS.md` |
|
||||
| Sankofa / Phoenix **consolidated hub** (optional — fewer non-chain LXCs) | `docs/02-architecture/SANKOFA_PHOENIX_CONSOLIDATED_FRONTEND_AND_API.md` — `docs/03-deployment/SANKOFA_R630_01_CONSOLIDATION_AND_HUB_PLACEMENT_GOAL.md` (offload r630-01: consolidate + **place** hubs on quieter nodes); `docs/03-deployment/SANKOFA_API_HUB_NPM_CUTOVER_AND_POST_CUTOVER_RUNBOOK.md` (NPM → `:8080`, `TRUST_PROXY`, rollback); `bash scripts/verify/check-sankofa-consolidated-nginx-examples.sh`; `bash scripts/verify/verify-sankofa-consolidated-hub-lan.sh`; `bash scripts/verify/smoke-phoenix-api-hub-lan.sh` (hub **:8080**); `pnpm run verify:phoenix-graphql-wss` or `PHOENIX_WSS_INCLUDE_LAN=1 bash scripts/verify/smoke-phoenix-graphql-wss-public.sh` (HTTP **101** WS upgrade); `pnpm run verify:phoenix-graphql-ws-subscription` (**connection_ack**); `bash scripts/deployment/ensure-sankofa-phoenix-graphql-ws-remove-fastify-websocket-7800.sh` (fix RSV1 / competing upgrade listener); `bash scripts/deployment/ensure-sankofa-phoenix-websocket-ts-import-logger-7800.sh` (**logger** import in `websocket.ts` — avoids **crash on WS disconnect**); `bash scripts/deployment/ensure-sankofa-phoenix-7800-nft-dport-4000-guard.sh` (optional **nft** reject :4000 from non-loopback); `bash scripts/deployment/ensure-sankofa-phoenix-api-hub-graphql-ws-proxy-headers-7800.sh` (hub `/graphql-ws` **Accept-Encoding** / **proxy_buffering**); `bash scripts/deployment/ensure-sankofa-phoenix-api-hub-systemd-exec-reload-7800.sh` (hub **ExecReload**); `bash scripts/deployment/ensure-sankofa-phoenix-api-env-lan-parity-7800.sh` (**.env** Keycloak + Postgres LAN + `NODE_ENV` policy); `bash scripts/deployment/ensure-sankofa-phoenix-api-db-migrate-up-7800.sh` (**pnpm db:migrate:up** on **7800**); `bash scripts/deployment/ensure-sankofa-phoenix-tls-config-terminate-at-edge-7800.sh` (production **HTTP** behind NPM); `bash scripts/deployment/plan-phoenix-apollo-port-4000-restrict-7800.sh` (`--ssh`); **Apollo loopback:** `PROXMOX_OPS_APPLY=1` `PROXMOX_OPS_ALLOWED_VMIDS=7800` `bash scripts/deployment/ensure-sankofa-phoenix-apollo-bind-loopback-7800.sh --apply --vmid 7800`; `bash scripts/deployment/plan-sankofa-consolidated-hub-cutover.sh`; **API hub on CT:** `bash scripts/deployment/install-sankofa-api-hub-nginx-on-pve.sh --dry-run --vmid 7800` (live: `PROXMOX_OPS_APPLY=1` `PROXMOX_OPS_ALLOWED_VMIDS=7800` `--apply --vmid 7800`); **dbis API `TRUST_PROXY`:** `PROXMOX_OPS_APPLY=1` `PROXMOX_OPS_ALLOWED_VMIDS=10150` `bash scripts/deployment/ensure-dbis-api-trust-proxy-on-ct.sh --apply --vmid 10150` (repeat **10151**); NPM fleet: `SANKOFA_NPM_PHOENIX_PORT=8080` + `scripts/nginx-proxy-manager/update-npmplus-proxy-hosts-api.sh` (Phoenix rows use **WebSocket: true**); `.env` hub overrides optional |
|
||||
| CCIP relay (r630-01 host) | WETH lane: `config/systemd/ccip-relay.service`. Mainnet cW lane: `config/systemd/ccip-relay-mainnet-cw.service` (health `http://192.168.11.11:9863/healthz`). Public edge: set `CCIP_RELAY_MAINNET_CW_PUBLIC_HOST`, run `scripts/nginx-proxy-manager/update-npmplus-proxy-hosts-api.sh`, relay-only `scripts/nginx-proxy-manager/upsert-ccip-relay-mainnet-cw-proxy-host.sh`, or SSH hop `scripts/nginx-proxy-manager/upsert-ccip-relay-mainnet-cw-via-ssh.sh`; DNS `scripts/cloudflare/configure-relay-mainnet-cw-dns.sh`. Use `NPM_URL=https://…:81` for API scripts (HTTP on :81 301s to HTTPS). |
|
||||
| XDC Zero + Chain 138 (parallel to CCIP) | `bash scripts/xdc-zero/run-xdc-zero-138-operator-sequence.sh` · `docs/03-deployment/CHAIN138_XDC_ZERO_BRIDGE_RUNBOOK.md` · `CHAIN138_XDC_ZERO_DEPLOYMENT_TROUBLESHOOTING.md` · `config/xdc-zero/` · `scripts/xdc-zero/` · systemd `node dist/server.js` template — **XDC mainnet RPC:** `https://rpc.xinfin.network` (chain id 50; more endpoints: [chainid.network/chain/50](https://chainid.network/chain/50/)); **Chain 138 side:** Core `http://192.168.11.211:8545` is operator-only, relayer/services use `https://rpc-http-pub.d-bis.org` |
|
||||
| OP Stack Standard Rollup (Ethereum mainnet, Superchain) | `docs/03-deployment/OP_STACK_STANDARD_ROLLUP_SUPERCHAIN_RUNBOOK.md` · optional L2↔Besu notes `docs/03-deployment/OP_STACK_L2_AND_BESU138_BRIDGE_NOTES.md` · `config/op-stack-superchain/` · `scripts/op-stack/` (e.g. `fetch-standard-mainnet-toml.sh`, checklist scripts) · `config/systemd/op-stack-*.example.service` — **distinct L2 chain ID from Besu 138**; follow [Optimism superchain-registry](https://github.com/ethereum-optimism/superchain-registry) for listing |
|
||||
| Wormhole protocol (LLM / MCP) vs Chain 138 facts | Wormhole NTT/Connect/VAAs/etc.: `docs/04-configuration/WORMHOLE_AI_RESOURCES_LLM_PLAYBOOK.md`, mirror `scripts/doc/sync-wormhole-ai-resources.sh`, MCP `mcp-wormhole-docs/` + `docs/04-configuration/MCP_SETUP.md`. **Chain 138 addresses, PMM, CCIP:** repo `docs/11-references/` + `docs/07-ccip/` — not Wormhole bundles. Cursor overlay: `.cursor/rules/wormhole-ai-resources.mdc`. |
|
||||
| TsunamiSwap VM 5010 check | `./scripts/deployment/tsunamiswap-vm-5010-provision.sh` (inventory only until VM exists) |
|
||||
| The Order portal (`https://the-order.sankofa.nexus`) | OSJ management UI (secure auth); source repo **the_order** at `~/projects/the_order`. NPM upstream defaults to **order-haproxy** CT **10210** (`IP_ORDER_HAPROXY:80`); use `THE_ORDER_UPSTREAM_*` to point at the Sankofa portal if 10210 is down. Provision HAProxy: `scripts/deployment/provision-order-haproxy-10210.sh`. **`www.the-order.sankofa.nexus`** → **301** apex (same as www.sankofa / www.phoenix). |
|
||||
| Portal login + Keycloak systemd + `.env` (prints password once) | `./scripts/deployment/enable-sankofa-portal-login-7801.sh` (`--dry-run` first) |
|
||||
| Portal login + Keycloak systemd + `.env` (prints password once) | `./scripts/deployment/enable-sankofa-portal-login-7801.sh` (`--dry-run` first); preserves `KEYCLOAK_*` from repo `.env` and runs merge script when `KEYCLOAK_CLIENT_SECRET` is set |
|
||||
| Keycloak redirect URIs (portal + admin) | `./scripts/deployment/keycloak-sankofa-ensure-client-redirects-via-proxmox-pct.sh` (or `keycloak-sankofa-ensure-client-redirects.sh` for LAN URL) — needs `KEYCLOAK_ADMIN_PASSWORD` in `.env` |
|
||||
| NPM TLS for hosts missing certs | `./scripts/request-npmplus-certificates.sh` — optional `CERT_DOMAINS_FILTER='portal\\.sankofa|admin\\.sankofa'`; IT API: `./scripts/deployment/request-it-api-tls-npm.sh` (same as filter `it-api\\.sankofa\\.nexus`) |
|
||||
| Token-aggregation API (Chain 138) | `pnpm run verify:token-aggregation-api` — tokens, pools, quote (prints `quoteEngine` when `jq` installed), `bridge/routes`, networks. Build + env: `scripts/deploy-token-aggregation-for-publication.sh` (sets `RPC_URL_138`, `TOKEN_AGGREGATION_CHAIN138_RPC_URL`, optional `TOKEN_AGGREGATION_PMM_*`). LAN push + restart: `scripts/deployment/push-token-aggregation-bundle-to-explorer.sh`. Nginx gaps: `scripts/fix-explorer-http-api-v1-proxy.sh` (apex `/api/v1/`), `scripts/fix-explorer-token-aggregation-api-v2-proxy.sh` (planner POST). Runbook: `docs/04-configuration/TOKEN_AGGREGATION_REPORT_API_RUNBOOK.md`. |
|
||||
| **Chain 138 Open Snap** (MetaMask, open Snap permissions only; stable MetaMask requires MetaMask install allowlist for npm Snaps) | Source repo: [Defi-Oracle-Tooling/chain138-snap-minimal](https://github.com/Defi-Oracle-Tooling/chain138-snap-minimal). Vendored in this workspace: `metamask-integration/chain138-snap-minimal/`. Snap ID `npm:chain138-open-snap`; **`npm run verify`** = `npm audit --omit=dev` + build. **Publish:** token in `chain138-snap/.env` or `npm login`, then `./scripts/deployment/publish-chain138-open-snap.sh`. **Full-feature Snap** (API quotes, allowlist): `metamask-integration/chain138-snap/`. Explorer `/wallet` install works on stable MetaMask only after allowlisting; use Flask or local serve for dev. |
|
||||
| Completable (no LAN) | `./scripts/run-completable-tasks-from-anywhere.sh` |
|
||||
| Operator (LAN + secrets) | `./scripts/run-all-operator-tasks-from-lan.sh` (use `--skip-backup` if `NPM_PASSWORD` unset) |
|
||||
| Cloudflare bulk DNS → `PUBLIC_IP` | `./scripts/update-all-dns-to-public-ip.sh` — use **`--dry-run`** and **`--zone-only=sankofa.nexus`** (or `d-bis.org` / `mim4u.org` / `defi-oracle.io`) to limit scope; see script header. Prefer scoped **`CLOUDFLARE_API_TOKEN`** (see `.env.master.example`). |
|
||||
| Cloudflare SSL mode (sankofa.nexus zone) | `bash scripts/cloudflare/set-sankofa-zone-ssl-mode.sh full` — fixes **Flexible** + NPM **SSL forced** redirect loops (e.g. `it-api.sankofa.nexus`). |
|
||||
| IRU marketplace surfaces + Turnstile (Captcha) | [docs/03-deployment/SANKOFA_MARKETPLACE_SURFACES.md](docs/03-deployment/SANKOFA_MARKETPLACE_SURFACES.md) — **native** (VMs, IPs, app hosting, etc.) vs **partner** (e.g. SolaceNet IRU) methodology; Turnstile **secret** on API (`CLOUDFLARE_TURNSTILE_SECRET_KEY` or aliases), **site key** on frontend build (`VITE_*`); not the same as Cloudflare DNS keys. [docs/04-configuration/MASTER_SECRETS.md](docs/04-configuration/MASTER_SECRETS.md) (Cloudflare table). |
|
||||
|
||||
## Git submodules
|
||||
|
||||
Most submodules are **pinned commits**; `git submodule update --init --recursive` often leaves **detached HEAD** — that is normal. To **change** a submodule: check out a branch inside it, commit, **push the submodule first**, then commit and push the **parent** submodule pointer. Do not embed credentials in `git remote` URLs; use SSH or a credential helper. Explorer Gitea vs GitHub and token cleanup: `docs/00-meta/SUBMODULE_HYGIENE.md`.
|
||||
|
||||
## Production safety (Proxmox / shared config)
|
||||
|
||||
- **Scoped LXC starts:** use `scripts/operator/start-stopped-lxc-scoped.sh --host <PVE> --vmid <N> [--vmid …]`; default is **dry-run**; add **`--apply`** or **`PROXMOX_OPS_APPLY=1`** to mutate. Optional **`PROXMOX_OPS_ALLOWED_VMIDS`** enforces an allowlist. Do **not** use cluster-wide “start every stopped CT” patterns for production.
|
||||
- **Maintenance scripts (SSH + pct):** set **`PROXMOX_SAFE_DEFAULTS=1`** so `fix-core-rpc-2101.sh`, `make-rpc-vmids-writable-via-ssh.sh`, and `ensure-legacy-monitor-networkd-via-ssh.sh` default to **plan-only** unless **`--apply`** or **`PROXMOX_OPS_APPLY=1`**. Without that env, behavior stays **legacy** (mutate unless `--dry-run`) so existing docs/commands keep working.
|
||||
- **Guard helpers** for new SSH+pct scripts: `scripts/lib/proxmox-production-guard.sh`.
|
||||
- **VMID → host** for automation: `get_host_for_vmid` in `scripts/lib/load-project-env.sh` must match live placement (`docs/04-configuration/ALL_VMIDS_ENDPOINTS.md`).
|
||||
- **Shared config:** avoid drive-by edits to `config/ip-addresses.conf` or root `.env` when the task only affects one workload; prefer flags, workload-specific env files, or small dedicated scripts.
|
||||
- Cursor overlay: `.cursor/rules/proxmox-production-safety.mdc`.
|
||||
|
||||
## Rules of engagement
|
||||
|
||||
- Review scripts before running; prefer `--dry-run` where supported.
|
||||
|
||||
@@ -252,7 +252,7 @@ NEW_BRIDGE="0xNEW_ADDRESS_HERE" # From deployment
|
||||
# 1. Add Mainnet destination
|
||||
cast send $NEW_BRIDGE "addDestination(uint64,address)" \
|
||||
5009297550715157269 \
|
||||
0x2A0840e5117683b11682ac46f5CF5621E67269E3 \
|
||||
0xc9901ce2Ddb6490FAA183645147a87496d8b20B6 \
|
||||
--private-key $PRIVATE_KEY \
|
||||
--rpc-url http://192.168.11.211:8545
|
||||
|
||||
|
||||
2
MEV_Bot
2
MEV_Bot
Submodule MEV_Bot updated: 682bd76349...234ce569cc
@@ -92,7 +92,11 @@ From the root directory, you can run:
|
||||
|
||||
### Testing
|
||||
|
||||
- `pnpm test` - Run tests (if available)
|
||||
- `pnpm test` - Run the local green-path Chain 138 / GRU / bridge / token test aggregate
|
||||
- `pnpm test:chain138` - Run the Chain 138 package CI targets directly
|
||||
- `pnpm test:chain138:contracts` - Run the focused Solidity contract CI targets
|
||||
- `pnpm test:chain138:services` - Run the focused JS/TS service CI targets
|
||||
- `pnpm test:mcp` - Run the legacy MCP server package test entrypoint
|
||||
- `pnpm test:basic` - Run basic MCP server tests (read-only operations)
|
||||
- `pnpm test:workflows` - Run comprehensive workflow tests (requires elevated permissions)
|
||||
|
||||
@@ -319,4 +323,3 @@ Individual checks:
|
||||
## License
|
||||
|
||||
This workspace contains multiple projects with different licenses. Please refer to individual project directories for license information.
|
||||
|
||||
|
||||
Submodule ai-mcp-pmm-controller updated: 3e3f55fe79...cb92278aff
8
config/README-BRIDGE-ROUTES-DEFAULT.md
Normal file
8
config/README-BRIDGE-ROUTES-DEFAULT.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# bridge-routes-chain138-default.json
|
||||
|
||||
Static snapshot of the default **`GET /api/v1/bridge/routes`** response shape (without per-env address overrides).
|
||||
|
||||
- **Server source of truth:** `smom-dbis-138/services/token-aggregation/src/api/utils/default-bridge-routes.ts` (applies `CCIPWETH9_BRIDGE_CHAIN138`, `LOCKBOX_138`, `INBOX_ETH`, etc.).
|
||||
- **UI fallback:** `info-defi-oracle-138` imports this file when the live API returns 404 or errors.
|
||||
|
||||
Update this JSON when canonical bridge addresses or relay destinations change; keep the TS module in sync.
|
||||
@@ -1,9 +1,10 @@
|
||||
# Master Smart Contracts (JSON)
|
||||
|
||||
**Single source of truth for contract addresses:** `config/smart-contracts-master.json`
|
||||
**Machine-readable contract map:** `config/smart-contracts-master.json` (when the file exists in your clone).
|
||||
|
||||
- **Safe to publish** — no secrets (no keys, no RPC URLs with credentials).
|
||||
- **Used by:** Bash scripts (via `scripts/lib/load-contract-addresses.sh`), Node/JS (via `config/contracts-loader.cjs`), and docs.
|
||||
- **If the file is absent:** loaders continue with `.env` only; Chain 138 **bytecode checks** use the embedded address list in `scripts/verify/check-contracts-on-chain-138.sh` (see also `docs/11-references/CONTRACT_ADDRESSES_REFERENCE.md`). When you introduce `smart-contracts-master.json`, populate `chains["138"].contracts` with the **complete** set for that chain — the check script uses JSON addresses instead of its fallback when the file is present.
|
||||
|
||||
## Layout
|
||||
|
||||
@@ -40,7 +41,7 @@ const {
|
||||
} = require('./config/contracts-loader.cjs');
|
||||
|
||||
// By contract key
|
||||
getContractAddress(138, 'CCIP_Router'); // => '0x8078...'
|
||||
getContractAddress(138, 'CCIP_Router'); // => '0x42DA...' (canonical; legacy direct: CCIP_Router_Direct_Legacy)
|
||||
getContractAddress(138, 'CCIPWETH9_Bridge');
|
||||
getContractAddress(1, 'CCIP_Relay_Router');
|
||||
|
||||
@@ -57,7 +58,7 @@ loadContractsIntoProcessEnv();
|
||||
|
||||
## Overrides
|
||||
|
||||
- **.env** (e.g. `smom-dbis-138/.env`, `services/relay/.env`): Values set there take precedence over the master JSON. Use .env for local or per-service overrides.
|
||||
- **.env** (e.g. `smom-dbis-138/.env`, `services/relay/.env`): Values set there take precedence over the master JSON. Use .env for local or per-service overrides. For **`ADDRESS_MAPPER`** on Chain 138, keep **`ADDRESS_MAPPER`** equal to **`chains["138"].contracts.AddressMapper`** unless you have a deliberate fork: a legacy duplicate on Core shares bytecode with the canonical mapper (see `docs/11-references/ADDRESS_MATRIX_AND_STATUS.md`, section 1.5).
|
||||
- **Publishing:** Commit `smart-contracts-master.json`; do not commit `.env` or any file containing `PRIVATE_KEY` or API secrets.
|
||||
|
||||
## Updating addresses
|
||||
|
||||
@@ -1,26 +1,35 @@
|
||||
kind,routeId,status,routeType,fromChainId,toChainId,tokenInSymbol,tokenInAddress,tokenOutSymbol,tokenOutAddress,hopCount,bridgeType,bridgeAddress,aggregatorFamilies,tags,intermediateSymbols,legRefs,notesOrReason
|
||||
liveSwapRoute,138-cUSDT-cUSDC-direct,live,swap,138,138,cUSDT,0x93E66202A11B1772E55407B32B44e5Cd8eda7f22,cUSDC,0xf22258f57794CC8E06237084b353Ab30fFfa640b,1,,,1inch|0x|LiFi,stable|direct|public,,0xff8d3b8fDF7B112759F076B69f4271D4209C0849,
|
||||
liveSwapRoute,138-cUSDT-USDT-direct,live,swap,138,138,cUSDT,0x93E66202A11B1772E55407B32B44e5Cd8eda7f22,USDT,0x004b63A7B5b0E06f6bB6adb4a5F9f590BF3182D1,1,,,1inch|0x|LiFi,stable|official-mirror|public,,0x6fc60DEDc92a2047062294488539992710b99D71,
|
||||
liveSwapRoute,138-cUSDC-USDC-direct,live,swap,138,138,cUSDC,0xf22258f57794CC8E06237084b353Ab30fFfa640b,USDC,0x71D6687F38b93CCad569Fa6352c876eea967201b,1,,,1inch|0x|LiFi,stable|official-mirror|public,,0x0309178ae30302D83c76d6Dd402a684eF3160eec,
|
||||
liveSwapRoute,138-cUSDT-cXAUC-direct,live,swap,138,138,cUSDT,0x93E66202A11B1772E55407B32B44e5Cd8eda7f22,cXAUC,0x290E52a8819A4fbD0714E517225429aA2B70EC6b,1,,,1inch|0x|LiFi,xau-hub|public,,0x1AA55E2001E5651349AfF5A63FD7A7Ae44f0F1b0,
|
||||
liveSwapRoute,138-cUSDC-cXAUC-direct,live,swap,138,138,cUSDC,0xf22258f57794CC8E06237084b353Ab30fFfa640b,cXAUC,0x290E52a8819A4fbD0714E517225429aA2B70EC6b,1,,,1inch|0x|LiFi,xau-hub|public,,0xEA9Ac6357CaCB42a83b9082B870610363B177cBa,
|
||||
liveSwapRoute,138-cEURT-cXAUC-direct,live,swap,138,138,cEURT,0xdf4b71c61E5912712C1Bdd451416B9aC26949d72,cXAUC,0x290E52a8819A4fbD0714E517225429aA2B70EC6b,1,,,1inch|0x|LiFi,xau-hub|public,,0xbA99bc1eAAC164569d5AcA96C806934DDaF970Cf,
|
||||
liveSwapRoute,138-cEURT-cUSDT-via-cXAUC,live,swap,138,138,cEURT,0xdf4b71c61E5912712C1Bdd451416B9aC26949d72,cUSDT,0x93E66202A11B1772E55407B32B44e5Cd8eda7f22,2,,,1inch|0x|LiFi,multihop|xau-hub|public,cXAUC,0xbA99bc1eAAC164569d5AcA96C806934DDaF970Cf|0x1AA55E2001E5651349AfF5A63FD7A7Ae44f0F1b0,Inferred from two live public pools.
|
||||
liveSwapRoute,138-cEURT-cUSDC-via-cXAUC,live,swap,138,138,cEURT,0xdf4b71c61E5912712C1Bdd451416B9aC26949d72,cUSDC,0xf22258f57794CC8E06237084b353Ab30fFfa640b,2,,,1inch|0x|LiFi,multihop|xau-hub|public,cXAUC,0xbA99bc1eAAC164569d5AcA96C806934DDaF970Cf|0xEA9Ac6357CaCB42a83b9082B870610363B177cBa,Inferred from two live public pools.
|
||||
liveSwapRoute,138-cUSDT-cUSDC-via-cXAUC,live,swap,138,138,cUSDT,0x93E66202A11B1772E55407B32B44e5Cd8eda7f22,cUSDC,0xf22258f57794CC8E06237084b353Ab30fFfa640b,2,,,1inch|0x|LiFi,multihop|xau-hub|public|alternate,cXAUC,0x1AA55E2001E5651349AfF5A63FD7A7Ae44f0F1b0|0xEA9Ac6357CaCB42a83b9082B870610363B177cBa,Alternate path to the deeper direct cUSDT/cUSDC pool.
|
||||
liveBridgeRoute,138-WETH-1-ccip,live,bridge,138,1,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,,CCIP,0xcacfd227A040002e49e2e01626363071324f820a,LiFi,,,,
|
||||
liveBridgeRoute,138-WETH-56-ccip,live,bridge,138,56,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,,CCIP,0xcacfd227A040002e49e2e01626363071324f820a,LiFi,,,,
|
||||
liveBridgeRoute,138-WETH-137-ccip,live,bridge,138,137,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,,CCIP,0xcacfd227A040002e49e2e01626363071324f820a,LiFi,,,,
|
||||
liveBridgeRoute,138-WETH-10-ccip,live,bridge,138,10,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,,CCIP,0xcacfd227A040002e49e2e01626363071324f820a,LiFi,,,,
|
||||
liveBridgeRoute,138-WETH-42161-ccip,live,bridge,138,42161,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,,CCIP,0xcacfd227A040002e49e2e01626363071324f820a,LiFi,,,,
|
||||
liveBridgeRoute,138-WETH-43114-ccip,live,bridge,138,43114,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,,CCIP,0xcacfd227A040002e49e2e01626363071324f820a,LiFi,,,,
|
||||
liveBridgeRoute,138-WETH-8453-ccip,live,bridge,138,8453,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,,CCIP,0xcacfd227A040002e49e2e01626363071324f820a,LiFi,,,,
|
||||
liveBridgeRoute,138-WETH-100-ccip,live,bridge,138,100,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,,CCIP,0xcacfd227A040002e49e2e01626363071324f820a,LiFi,,,,
|
||||
liveBridgeRoute,138-WETH-25-ccip,live,bridge,138,25,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,,CCIP,0xcacfd227A040002e49e2e01626363071324f820a,LiFi,,,,
|
||||
liveBridgeRoute,138-WETH-42220-ccip,live,bridge,138,42220,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,,CCIP,0xcacfd227A040002e49e2e01626363071324f820a,LiFi,,,,
|
||||
liveBridgeRoute,138-WETH-651940-alltra,live,bridge,138,651940,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,WETH,0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2,,ALT,0x66FEBA2fC9a0B47F26DD4284DAd24F970436B8Dc,LiFi,,,,
|
||||
liveBridgeRoute,138-WETH10-1-ccip,live,bridge,138,1,WETH10,0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f,WETH10,0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f,,CCIP,0xe0E93247376aa097dB308B92e6Ba36bA015535D0,LiFi,,,,
|
||||
blockedOrPlannedRoute,138-compliant-stable-to-weth-bridgeable,blocked,swap-bridge-swap,138,1,cUSDT|cUSDC|cEURT,,,,,,,,,,,"No live public cUSDT/WETH, cUSDC/WETH, or cEURT/WETH pool on Chain 138."
|
||||
blockedOrPlannedRoute,651940-public-dex-routes,planned,swap,651940,651940,,,,,,,,,,,,Uniswap V2/V3 and DODO are env placeholders only; no pool addresses are documented in-repo.
|
||||
blockedOrPlannedRoute,cw-edge-pools-public-chains,planned,swap,1,43114,,,,,,,,,,,,"cW* token addresses exist on several public chains, but deployment-status.json contains no PMM pools."
|
||||
blockedOrPlannedRoute,138-weth-1111-ccip,planned,bridge,138,1111,,,,,,,,,,,,Wemix bridge is pending funding and deployment.
|
||||
liveSwapRoute,chain-138-swap-dodo-cusdt-cusdc-0x9e89bae0,live,swap,138,138,cUSDT,0x93e66202a11b1772e55407b32b44e5cd8eda7f22,cUSDC,0xf22258f57794cc8e06237084b353ab30fffa640b,1,,,1inch|0x|LiFi,planner-v2-generated|dodo,,0x9e89bae009adf128782e19e8341996c596ac40dc,Generated from live planner route graph.
|
||||
liveSwapRoute,chain-138-swap-dodo-cusdc-cusdt-0x9e89bae0,live,swap,138,138,cUSDC,0xf22258f57794cc8e06237084b353ab30fffa640b,cUSDT,0x93e66202a11b1772e55407b32b44e5cd8eda7f22,1,,,1inch|0x|LiFi,planner-v2-generated|dodo,,0x9e89bae009adf128782e19e8341996c596ac40dc,Generated from live planner route graph.
|
||||
liveSwapRoute,chain-138-swap-dodo-cusdt-usdt-0x866cb44b,live,swap,138,138,cUSDT,0x93e66202a11b1772e55407b32b44e5cd8eda7f22,USDT,0x004b63a7b5b0e06f6bb6adb4a5f9f590bf3182d1,1,,,1inch|0x|LiFi,planner-v2-generated|dodo,,0x866cb44b59303d8dc5f4f9e3e7a8e8b0bf238d66,Generated from live planner route graph.
|
||||
liveSwapRoute,chain-138-swap-dodo-usdt-cusdt-0x866cb44b,live,swap,138,138,USDT,0x004b63a7b5b0e06f6bb6adb4a5f9f590bf3182d1,cUSDT,0x93e66202a11b1772e55407b32b44e5cd8eda7f22,1,,,1inch|0x|LiFi,planner-v2-generated|dodo,,0x866cb44b59303d8dc5f4f9e3e7a8e8b0bf238d66,Generated from live planner route graph.
|
||||
liveSwapRoute,chain-138-swap-dodo-cusdc-usdc-0xc39b7d0f,live,swap,138,138,cUSDC,0xf22258f57794cc8e06237084b353ab30fffa640b,USDC,0x71d6687f38b93ccad569fa6352c876eea967201b,1,,,1inch|0x|LiFi,planner-v2-generated|dodo,,0xc39b7d0f40838cbfb54649d327f49a6dac964062,Generated from live planner route graph.
|
||||
liveSwapRoute,chain-138-swap-dodo-usdc-cusdc-0xc39b7d0f,live,swap,138,138,USDC,0x71d6687f38b93ccad569fa6352c876eea967201b,cUSDC,0xf22258f57794cc8e06237084b353ab30fffa640b,1,,,1inch|0x|LiFi,planner-v2-generated|dodo,,0xc39b7d0f40838cbfb54649d327f49a6dac964062,Generated from live planner route graph.
|
||||
liveSwapRoute,chain-138-swap-dodo-v3-weth10-usdt-0x6550a3a5,live,swap,138,138,WETH10,0xf4bb2e28688e89fcce3c0580d37d36a7672e8a9f,USDT,0x004b63a7b5b0e06f6bb6adb4a5f9f590bf3182d1,1,,,1inch|0x|LiFi,planner-v2-generated|dodo_v3,,0x6550a3a59070061a262a893a1d6f3f490affdbda,Generated from live planner route graph. | DODO v3 / D3MM Chain 138 pilot venue. | Canonical private pilot pool 0x6550a3a59070061a262a893a1d6f3f490affdbda executes through D3Proxy 0xc9a11abb7c63d88546be24d58a6d95e3762cb843. | Planner-v2 exposure and EnhancedSwapRouterV2 internal execution-plan calldata are live for the canonical pilot pair.
|
||||
liveSwapRoute,chain-138-swap-dodo-v3-usdt-weth10-0x6550a3a5,live,swap,138,138,USDT,0x004b63a7b5b0e06f6bb6adb4a5f9f590bf3182d1,WETH10,0xf4bb2e28688e89fcce3c0580d37d36a7672e8a9f,1,,,1inch|0x|LiFi,planner-v2-generated|dodo_v3,,0x6550a3a59070061a262a893a1d6f3f490affdbda,Generated from live planner route graph. | DODO v3 / D3MM Chain 138 pilot venue. | Canonical private pilot pool 0x6550a3a59070061a262a893a1d6f3f490affdbda executes through D3Proxy 0xc9a11abb7c63d88546be24d58a6d95e3762cb843. | Planner-v2 exposure and EnhancedSwapRouterV2 internal execution-plan calldata are live for the canonical pilot pair.
|
||||
liveSwapRoute,chain-138-swap-uniswap-v3-weth-usdt,live,swap,138,138,WETH,0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,USDT,0x004b63a7b5b0e06f6bb6adb4a5f9f590bf3182d1,1,,,1inch|0x|LiFi,planner-v2-generated|uniswap_v3,,0xde9cd8ee2811e6e64a41d5f68be315d33995975e,Generated from live planner route graph. | Chain 138 upstream-native Uniswap v3 WETH/USDT venue.
|
||||
liveSwapRoute,chain-138-swap-uniswap-v3-usdt-weth,live,swap,138,138,USDT,0x004b63a7b5b0e06f6bb6adb4a5f9f590bf3182d1,WETH,0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,1,,,1inch|0x|LiFi,planner-v2-generated|uniswap_v3,,0xde9cd8ee2811e6e64a41d5f68be315d33995975e,Generated from live planner route graph. | Chain 138 upstream-native Uniswap v3 WETH/USDT venue.
|
||||
liveSwapRoute,chain-138-swap-uniswap-v3-weth-usdc,live,swap,138,138,WETH,0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,USDC,0x71d6687f38b93ccad569fa6352c876eea967201b,1,,,1inch|0x|LiFi,planner-v2-generated|uniswap_v3,,0xde9cd8ee2811e6e64a41d5f68be315d33995975e,Generated from live planner route graph. | Chain 138 upstream-native Uniswap v3 WETH/USDC venue.
|
||||
liveSwapRoute,chain-138-swap-uniswap-v3-usdc-weth,live,swap,138,138,USDC,0x71d6687f38b93ccad569fa6352c876eea967201b,WETH,0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,1,,,1inch|0x|LiFi,planner-v2-generated|uniswap_v3,,0xde9cd8ee2811e6e64a41d5f68be315d33995975e,Generated from live planner route graph. | Chain 138 upstream-native Uniswap v3 WETH/USDC venue.
|
||||
liveSwapRoute,chain-138-swap-balancer-weth-usdt,live,swap,138,138,WETH,0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,USDT,0x004b63a7b5b0e06f6bb6adb4a5f9f590bf3182d1,1,,,1inch|0x|LiFi,planner-v2-generated|balancer,,0x96423d7c1727698d8a25ebfb88131e9422d1a3c3,Generated from live planner route graph. | Chain 138 pilot-compatible Balancer USDT/WETH venue.
|
||||
liveSwapRoute,chain-138-swap-balancer-usdt-weth,live,swap,138,138,USDT,0x004b63a7b5b0e06f6bb6adb4a5f9f590bf3182d1,WETH,0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,1,,,1inch|0x|LiFi,planner-v2-generated|balancer,,0x96423d7c1727698d8a25ebfb88131e9422d1a3c3,Generated from live planner route graph. | Chain 138 pilot-compatible Balancer USDT/WETH venue.
|
||||
liveSwapRoute,chain-138-swap-balancer-weth-usdc,live,swap,138,138,WETH,0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,USDC,0x71d6687f38b93ccad569fa6352c876eea967201b,1,,,1inch|0x|LiFi,planner-v2-generated|balancer,,0x96423d7c1727698d8a25ebfb88131e9422d1a3c3,Generated from live planner route graph. | Chain 138 pilot-compatible Balancer USDC/WETH venue.
|
||||
liveSwapRoute,chain-138-swap-balancer-usdc-weth,live,swap,138,138,USDC,0x71d6687f38b93ccad569fa6352c876eea967201b,WETH,0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,1,,,1inch|0x|LiFi,planner-v2-generated|balancer,,0x96423d7c1727698d8a25ebfb88131e9422d1a3c3,Generated from live planner route graph. | Chain 138 pilot-compatible Balancer USDC/WETH venue.
|
||||
liveSwapRoute,chain-138-swap-curve-usdt-usdc,live,swap,138,138,USDT,0x004b63a7b5b0e06f6bb6adb4a5f9f590bf3182d1,USDC,0x71d6687f38b93ccad569fa6352c876eea967201b,1,,,1inch|0x|LiFi,planner-v2-generated|curve,,0xe440ec15805be4c7babcd17a63b8c8a08a492e0f,Generated from live planner route graph. | Chain 138 pilot-compatible Curve 3Pool stable/stable venue.
|
||||
liveSwapRoute,chain-138-swap-curve-usdc-usdt,live,swap,138,138,USDC,0x71d6687f38b93ccad569fa6352c876eea967201b,USDT,0x004b63a7b5b0e06f6bb6adb4a5f9f590bf3182d1,1,,,1inch|0x|LiFi,planner-v2-generated|curve,,0xe440ec15805be4c7babcd17a63b8c8a08a492e0f,Generated from live planner route graph. | Chain 138 pilot-compatible Curve 3Pool stable/stable venue.
|
||||
liveSwapRoute,chain-138-swap-one-inch-weth-usdt,live,swap,138,138,WETH,0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,USDT,0x004b63a7b5b0e06f6bb6adb4a5f9f590bf3182d1,1,,,1inch|0x|LiFi,planner-v2-generated|one_inch,,0x500b84b1bc6f59c1898a5fe538ea20a758757a4f,Generated from live planner route graph. | Chain 138 pilot-compatible 1inch router lane.
|
||||
liveSwapRoute,chain-138-swap-one-inch-usdt-weth,live,swap,138,138,USDT,0x004b63a7b5b0e06f6bb6adb4a5f9f590bf3182d1,WETH,0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,1,,,1inch|0x|LiFi,planner-v2-generated|one_inch,,0x500b84b1bc6f59c1898a5fe538ea20a758757a4f,Generated from live planner route graph. | Chain 138 pilot-compatible 1inch router lane.
|
||||
liveSwapRoute,chain-138-swap-one-inch-weth-usdc,live,swap,138,138,WETH,0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,USDC,0x71d6687f38b93ccad569fa6352c876eea967201b,1,,,1inch|0x|LiFi,planner-v2-generated|one_inch,,0x500b84b1bc6f59c1898a5fe538ea20a758757a4f,Generated from live planner route graph. | Chain 138 pilot-compatible 1inch router lane.
|
||||
liveSwapRoute,chain-138-swap-one-inch-usdc-weth,live,swap,138,138,USDC,0x71d6687f38b93ccad569fa6352c876eea967201b,WETH,0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,1,,,1inch|0x|LiFi,planner-v2-generated|one_inch,,0x500b84b1bc6f59c1898a5fe538ea20a758757a4f,Generated from live planner route graph. | Chain 138 pilot-compatible 1inch router lane.
|
||||
liveBridgeRoute,bridge-138-651940-cusdt-alltraadapter,live,bridge,138,651940,cUSDT,0x93e66202a11b1772e55407b32b44e5cd8eda7f22,cUSDT,0x93e66202a11b1772e55407b32b44e5cd8eda7f22,,ALT,0x66feba2fc9a0b47f26dd4284dad24f970436b8dc,1inch|0x|LiFi,planner-v2-generated|bridge,,,Generated from bridge registry and planner visibility. | Registry route AlltraAdapter
|
||||
liveBridgeRoute,bridge-138-651940-cusdc-alltraadapter,live,bridge,138,651940,cUSDC,0xf22258f57794cc8e06237084b353ab30fffa640b,cUSDC,0xf22258f57794cc8e06237084b353ab30fffa640b,,ALT,0x66feba2fc9a0b47f26dd4284dad24f970436b8dc,1inch|0x|LiFi,planner-v2-generated|bridge,,,Generated from bridge registry and planner visibility. | Registry route AlltraAdapter
|
||||
blockedOrPlannedRoute,chain-138-capability-dodo-planned-cbtc-cusdt,planned,swap,138,138,cBTC|cUSDT,,,,,,,,,,,Set CHAIN138_POOL_CBTC_CUSDT after the canonical cBTC/cUSDT PMM pool is created and funded.
|
||||
blockedOrPlannedRoute,chain-138-capability-dodo-planned-cusdt-cbtc,planned,swap,138,138,cUSDT|cBTC,,,,,,,,,,,Set CHAIN138_POOL_CBTC_CUSDT after the canonical cBTC/cUSDT PMM pool is created and funded.
|
||||
blockedOrPlannedRoute,chain-138-capability-dodo-planned-cbtc-cusdc,planned,swap,138,138,cBTC|cUSDC,,,,,,,,,,,Set CHAIN138_POOL_CBTC_CUSDC after the canonical cBTC/cUSDC PMM pool is created and funded.
|
||||
blockedOrPlannedRoute,chain-138-capability-dodo-planned-cusdc-cbtc,planned,swap,138,138,cUSDC|cBTC,,,,,,,,,,,Set CHAIN138_POOL_CBTC_CUSDC after the canonical cBTC/cUSDC PMM pool is created and funded.
|
||||
blockedOrPlannedRoute,chain-138-capability-dodo-planned-cbtc-cxauc,planned,swap,138,138,cBTC|cXAUC,,,,,,,,,,,Set CHAIN138_POOL_CBTC_CXAUC after the canonical cBTC/cXAUC PMM pool is created and funded.
|
||||
blockedOrPlannedRoute,chain-138-capability-dodo-planned-cxauc-cbtc,planned,swap,138,138,cXAUC|cBTC,,,,,,,,,,,Set CHAIN138_POOL_CBTC_CXAUC after the canonical cBTC/cXAUC PMM pool is created and funded.
|
||||
blockedOrPlannedRoute,chain-138-capability-dodo-planned-weth-usdt,planned,swap,138,138,WETH|USDT,,,,,,,,,,,Set CHAIN138_POOL_WETH_USDT after the canonical WETH/USDT pool is created and funded.
|
||||
blockedOrPlannedRoute,chain-138-capability-dodo-planned-usdt-weth,planned,swap,138,138,USDT|WETH,,,,,,,,,,,Set CHAIN138_POOL_WETH_USDT after the canonical WETH/USDT pool is created and funded.
|
||||
blockedOrPlannedRoute,chain-138-capability-dodo-planned-weth-usdc,planned,swap,138,138,WETH|USDC,,,,,,,,,,,Set CHAIN138_POOL_WETH_USDC after the canonical WETH/USDC pool is created and funded.
|
||||
blockedOrPlannedRoute,chain-138-capability-dodo-planned-usdc-weth,planned,swap,138,138,USDC|WETH,,,,,,,,,,,Set CHAIN138_POOL_WETH_USDC after the canonical WETH/USDC pool is created and funded.
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -27,9 +27,9 @@ See [docs/06-besu/MASTER_DOCS_AND_NODE_LISTS_REVIEW.md](../../docs/06-besu/MASTE
|
||||
- **New node (e.g. 1504, 2102):** Get the node’s enode (e.g. from `admin_nodeInfo` or the node’s data dir), add it to both files here, then run the deploy script.
|
||||
- **Node removed:** Remove its enode from both files and redeploy.
|
||||
- **Regenerate all (no duplicates):** Run `bash scripts/besu/collect-enodes-from-all-besu-nodes.sh` to collect from every node (admin_nodeInfo or `besu public-key export`), merge with existing for unreachable nodes, and overwrite both files.
|
||||
- **Fix failures only:** Run `bash scripts/besu/collect-enodes-from-all-besu-nodes.sh --missing-only` to try only VMIDs whose IP is not yet in the list (no full 32-node sweep).
|
||||
- **Generate missing node keys:** Run `bash scripts/besu/generate-node-keys-for-missing-vmids.sh [--force] [--collect]` to create `/data/besu/key` (64-hex) only for VMIDs not yet in the list. Use `--force` to overwrite PEM/wrong-format keys; use `--collect` to run collect --missing-only after. Containers without Besu (1505–1508, 2501–2505) are supported via helper nodes (1504 on ml110, 2500 on r630-01).
|
||||
- **Install Besu permanently on nodes missing it:** Run `bash scripts/besu/install-besu-permanent-on-missing-nodes.sh` to install Besu (23.10.3) in 1505–1508 and 2501–2505, deploy config/genesis/node lists, and enable+start the service so RPC/sentry runs after reboot.
|
||||
- **Fix failures only:** Run `bash scripts/besu/collect-enodes-from-all-besu-nodes.sh --missing-only` to try only VMIDs whose IP is not yet in the list (no full 37-node sweep).
|
||||
- **Generate missing node keys:** Run `bash scripts/besu/generate-node-keys-for-missing-vmids.sh [--force] [--collect]` to create `/data/besu/key` (64-hex) only for VMIDs not yet in the list. Use `--force` to overwrite PEM/wrong-format keys; use `--collect` to run collect --missing-only after. Current auxiliary / edge nodes include sentries `1505–1510` and RPCs `2420/2430/2440/2460/2470/2480`.
|
||||
- **Install Besu permanently on nodes missing it:** Run `bash scripts/besu/install-besu-permanent-on-missing-nodes.sh` to install the current Besu line used by the fleet, deploy config/genesis/node lists, and enable+start the service so RPC/sentry runs after reboot.
|
||||
|
||||
## Sentry 1504 (.154)
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Node Permissioning — SINGLE SOURCE OF TRUTH for all Besu nodes
|
||||
# Must match config/besu-node-lists/static-nodes.json and be deployed to every node.
|
||||
# Generated by scripts/besu/collect-enodes-from-all-besu-nodes.sh — 34 enodes (incl. Putu RPC 2307/2308 .237/.238).
|
||||
# Generated by scripts/besu/collect-enodes-from-all-besu-nodes.sh — 37 enodes (incl. 2103 refreshed, Putu RPC 2307/2308 .237/.238, and Thirdweb sentries 1509/1510).
|
||||
|
||||
nodes-allowlist=[
|
||||
"enode://2221dd9fc65c9082d4a937832cba9f6759981888df6798407c390bd153f4332c152ea5d03dd9d9cda74d7990fb3479a5c4ba7166269322be9790eed9ebdcfe24@192.168.11.100:30303",
|
||||
@@ -15,10 +15,13 @@ nodes-allowlist=[
|
||||
"enode://225d902bf840379ce122f8cc431a542ddee0bde3e949b48767285bbc9c774cc3fc22cd4913ee72f0a19dce266e3ecb66dba5c58092d0b0e5ceb4e13bf96a1a68@192.168.11.154:30303",
|
||||
"enode://afa44c03ac3dd97efcbbef8edea11d1edf23bd595f30d4cf0c4be364d0b194e4217926a37141b54dcff71107f9ee257f621553cd867a2c9fa5a5537b3ae59746@192.168.11.213:30303",
|
||||
"enode://5f048208071f2a3036128433e1e4a647a7683abd8bc0f27d063e2933ced983accdfc44998666f3be711e4eff27511142d9989775b86cdbe28c79b74409fc36bb@192.168.11.214:30303",
|
||||
"enode://8a3337adcc2d177caf3aee26b3b6077d9adf126c580e12f352743ca07828f056ceb1d5fb1a06287e2dbbe19043fcc4b9bdd2ca9ae2a2c9142cf0cc3a549bfc68@192.168.11.219:30303",
|
||||
"enode://09fe518689c54a34c3dac8aebf3c94bfc390f4bae143a80c57d92a502414df0689d12a2243ff9376c2f44a419894d934b4f47783ced31ea9668522078854e58f@192.168.11.220:30303",
|
||||
"enode://8da1b586e2e98f521f07148d3bb5d81fde151ce3d5738b51bc36e2c81de1aaa5404ce31e991b4393bbe471934f0a9a31f78d1d7c17c1899c3e2dde5e9f16eb24@192.168.11.244:30303",
|
||||
"enode://acd46d31913b8379f075467cd88d2ea650d33474d2f9546426da4a414fe92233584c9d8c2e1ea9962fa4257c20b66c9434d0488e51c632f285205d6a379cfbd6@192.168.11.245:30303",
|
||||
"enode://6cdc892fa09afa2b05c21cc9a1193a86cf0d195ce81b02a270d8bb987f78ca98ad90d907670796c90fc6e4eaf3b4cae6c0c15871e2564de063beceb4bbfc6532@192.168.11.211:30303",
|
||||
"enode://e53713bb77ad9f39e8a04b9c82aadddd3449220167f546bca8e9f36f6ebf60ae003e48ac293790e2bd7b0aca382777db9eca61d6f048c04f9dbe65eedb79d893@192.168.11.212:30303?discport=0",
|
||||
"enode://e871ff3b1f58b9a87122e552b2404e1893bf92ae74d4fa6bc2bd002d0350c506ea452f4aefa1a3497ef32694c4beb48bf8a006d2b82f57649c90b22f59044aad@192.168.11.217:30303?discport=0",
|
||||
"enode://07daf3d64079faa3982bc8be7aa86c24ef21eca4565aae4a7fd963c55c728de0639d80663834634edf113b9f047d690232ae23423c64979961db4b6449aa6dfd@192.168.11.221:30303",
|
||||
"enode://868bd957d6d887944deac0190161a3db7d1316a022e40a2383d5c334aa3fb8bc7ca36f165b6fb377b77d202fec46f3840f2f659b6a47807b7ce9b944b8382f10@192.168.11.232:30303",
|
||||
"enode://688f271d94c7995600ae36d25aa2fb92fea0c52e50e86c598be8966515458c1408b67fba76e1f771073e4774a6e399588443da63394ea25d56e6ca36f2288e00@192.168.11.233:30303",
|
||||
|
||||
@@ -11,10 +11,13 @@
|
||||
"enode://225d902bf840379ce122f8cc431a542ddee0bde3e949b48767285bbc9c774cc3fc22cd4913ee72f0a19dce266e3ecb66dba5c58092d0b0e5ceb4e13bf96a1a68@192.168.11.154:30303",
|
||||
"enode://afa44c03ac3dd97efcbbef8edea11d1edf23bd595f30d4cf0c4be364d0b194e4217926a37141b54dcff71107f9ee257f621553cd867a2c9fa5a5537b3ae59746@192.168.11.213:30303",
|
||||
"enode://5f048208071f2a3036128433e1e4a647a7683abd8bc0f27d063e2933ced983accdfc44998666f3be711e4eff27511142d9989775b86cdbe28c79b74409fc36bb@192.168.11.214:30303",
|
||||
"enode://8a3337adcc2d177caf3aee26b3b6077d9adf126c580e12f352743ca07828f056ceb1d5fb1a06287e2dbbe19043fcc4b9bdd2ca9ae2a2c9142cf0cc3a549bfc68@192.168.11.219:30303",
|
||||
"enode://09fe518689c54a34c3dac8aebf3c94bfc390f4bae143a80c57d92a502414df0689d12a2243ff9376c2f44a419894d934b4f47783ced31ea9668522078854e58f@192.168.11.220:30303",
|
||||
"enode://8da1b586e2e98f521f07148d3bb5d81fde151ce3d5738b51bc36e2c81de1aaa5404ce31e991b4393bbe471934f0a9a31f78d1d7c17c1899c3e2dde5e9f16eb24@192.168.11.244:30303",
|
||||
"enode://acd46d31913b8379f075467cd88d2ea650d33474d2f9546426da4a414fe92233584c9d8c2e1ea9962fa4257c20b66c9434d0488e51c632f285205d6a379cfbd6@192.168.11.245:30303",
|
||||
"enode://6cdc892fa09afa2b05c21cc9a1193a86cf0d195ce81b02a270d8bb987f78ca98ad90d907670796c90fc6e4eaf3b4cae6c0c15871e2564de063beceb4bbfc6532@192.168.11.211:30303",
|
||||
"enode://e53713bb77ad9f39e8a04b9c82aadddd3449220167f546bca8e9f36f6ebf60ae003e48ac293790e2bd7b0aca382777db9eca61d6f048c04f9dbe65eedb79d893@192.168.11.212:30303?discport=0",
|
||||
"enode://e871ff3b1f58b9a87122e552b2404e1893bf92ae74d4fa6bc2bd002d0350c506ea452f4aefa1a3497ef32694c4beb48bf8a006d2b82f57649c90b22f59044aad@192.168.11.217:30303?discport=0",
|
||||
"enode://07daf3d64079faa3982bc8be7aa86c24ef21eca4565aae4a7fd963c55c728de0639d80663834634edf113b9f047d690232ae23423c64979961db4b6449aa6dfd@192.168.11.221:30303",
|
||||
"enode://868bd957d6d887944deac0190161a3db7d1316a022e40a2383d5c334aa3fb8bc7ca36f165b6fb377b77d202fec46f3840f2f659b6a47807b7ce9b944b8382f10@192.168.11.232:30303",
|
||||
"enode://688f271d94c7995600ae36d25aa2fb92fea0c52e50e86c598be8966515458c1408b67fba76e1f771073e4774a6e399588443da63394ea25d56e6ca36f2288e00@192.168.11.233:30303",
|
||||
|
||||
25
config/bridge-routes-chain138-default.json
Normal file
25
config/bridge-routes-chain138-default.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"routes": {
|
||||
"weth9": {
|
||||
"Ethereum Mainnet (1)": "0xF9A32F37099c582D28b4dE7Fca6eaC1e5259f939",
|
||||
"BNB Chain (56)": "0x886C6A4ABC064dbf74E7caEc460b7eeC31F1b78C",
|
||||
"Avalanche C-Chain (43114)": "0x3f8C409C6072a2B6a4Ff17071927bA70F80c725F"
|
||||
},
|
||||
"weth10": {
|
||||
"Ethereum Mainnet (1)": "0xF9A32F37099c582D28b4dE7Fca6eaC1e5259f939",
|
||||
"BNB Chain (56)": "0x886C6A4ABC064dbf74E7caEc460b7eeC31F1b78C",
|
||||
"Avalanche C-Chain (43114)": "0x3f8C409C6072a2B6a4Ff17071927bA70F80c725F"
|
||||
}
|
||||
},
|
||||
"chain138Bridges": {
|
||||
"weth9": "0xcacfd227A040002e49e2e01626363071324f820a",
|
||||
"weth10": "0xe0E93247376aa097dB308B92e6Ba36bA015535D0",
|
||||
"trustless": "0xFce6f50B312B3D936Ea9693C5C9531CF92a3324c"
|
||||
},
|
||||
"tokenMappingApi": {
|
||||
"basePath": "/api/v1/token-mapping",
|
||||
"pairs": "/api/v1/token-mapping/pairs",
|
||||
"resolve": "/api/v1/token-mapping/resolve",
|
||||
"note": "Resolve bridged token addresses between chains; requires monorepo config/token-mapping-multichain.json on server."
|
||||
}
|
||||
}
|
||||
133
config/btc-settlement-pathways.json
Normal file
133
config/btc-settlement-pathways.json
Normal file
@@ -0,0 +1,133 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"updated": "2026-04-03",
|
||||
"description": "End-to-end pathways from Chain 138 to native BTC via Changelly (partner API) or Atomic Wallet (user-operated swap). Used by orchestration design; does not imply keys or contracts are configured.",
|
||||
"homeChainId": 138,
|
||||
"destinationAsset": {
|
||||
"symbol": "BTC",
|
||||
"network": "bitcoin-mainnet",
|
||||
"addressFormat": "bech32-p2wpkh-or-legacy"
|
||||
},
|
||||
"references": {
|
||||
"mainnetLiquidityPlan": "docs/00-meta/MAINNET_LIQUIDITY_AND_RAMPS_PRIORITY.md",
|
||||
"rampUserFlows": "docs/04-configuration/MAINNET_RAMP_USER_FLOWS.md",
|
||||
"deployedBridgesStatus": "docs/11-references/DEPLOYED_TOKENS_BRIDGES_LPS_AND_ROUTING_STATUS.md",
|
||||
"changellyDocs": "https://docs.changelly.com/",
|
||||
"changellySupportEmail": "pro@changelly.com",
|
||||
"atomicWalletSwapKb": "https://support.atomicwallet.io/article/73-how-to-make-an-exchange"
|
||||
},
|
||||
"changelly": {
|
||||
"product": "Changelly Exchange API v2",
|
||||
"integrationSurface": "backend_jsonrpc",
|
||||
"apiBaseUrl": "https://api.changelly.com/v2",
|
||||
"authentication": {
|
||||
"headers": ["X-Api-Key", "X-Api-Signature"],
|
||||
"signatureAlgorithm": "RSA-SHA256 over raw JSON-RPC body",
|
||||
"note": "Generate RSA keypair; register public key with Changelly; never expose private key to browsers."
|
||||
},
|
||||
"documentedRpcFlow": [
|
||||
"getCurrencies",
|
||||
"getPairsParams",
|
||||
"getMinAmount",
|
||||
"validateAddress",
|
||||
"getExchangeAmount",
|
||||
"createTransaction",
|
||||
"getTransactions (poll status)"
|
||||
],
|
||||
"envVars": [
|
||||
"CHANGELLY_API_PUBLIC_KEY",
|
||||
"CHANGELLY_API_PRIVATE_KEY_PEM_PATH"
|
||||
]
|
||||
},
|
||||
"atomicWallet": {
|
||||
"product": "Atomic Wallet (desktop/mobile)",
|
||||
"integrationSurface": "user_operated",
|
||||
"note": "Swaps route through in-wallet partners to deposit addresses; there is no documented first-party B2B swap API equivalent to Changelly v2 for arbitrary server-side settlement. Use for operator or end-user manual path after funds sit on a chain Atomic supports.",
|
||||
"supportedChainsForSwap": "See in-app asset list; typically includes BTC and major EVM assets when counterpart is available."
|
||||
},
|
||||
"pathways": [
|
||||
{
|
||||
"id": "138-evm-changelly-btc-treasury",
|
||||
"label": "Automated-friendly: 138 → Ethereum mainnet stables/ETH → Changelly → BTC payout address",
|
||||
"venue": "changelly",
|
||||
"automationTier": "high",
|
||||
"summary": "Bridge and swap on-chain until Ethereum holds USDT, USDC, ETH, or WETH that Changelly lists; backend calls createTransaction with payout btc address; treasury sends the exact deposit amount to Changelly’s deposit address.",
|
||||
"preconditions": [
|
||||
"Ethereum mainnet liquidity for chosen bridge (LiquidityPoolETH / CCIP WETH path per MAINNET_LIQUIDITY_AND_RAMPS_PRIORITY.md)",
|
||||
"Changelly partner API key registered (pro@changelly.com)",
|
||||
"Treasury hot wallet on Ethereum with gas ETH and sendable USDT/USDC/ETH per quote",
|
||||
"Confirm Changelly ticker names for from-currency (e.g. eth, usdt20, usdc) match your token contract version"
|
||||
],
|
||||
"steps": [
|
||||
{
|
||||
"order": 1,
|
||||
"chainId": 138,
|
||||
"action": "swap_to_bridge_asset",
|
||||
"detail": "Use DODOPMMIntegration / EnhancedSwapRouter on 138 to convert source (e.g. cUSDT, cUSDC) into the token your bridge expects (often WETH for CCIP WETH bridges, or corridor-specific asset)."
|
||||
},
|
||||
{
|
||||
"order": 2,
|
||||
"chainId": 138,
|
||||
"action": "bridge_to_ethereum",
|
||||
"detail": "Execute CCIP or trustless bridge to Ethereum mainnet per deployed bridge matrix (DEPLOYED_TOKENS_BRIDGES_LPS_AND_ROUTING_STATUS.md)."
|
||||
},
|
||||
{
|
||||
"order": 3,
|
||||
"chainId": 1,
|
||||
"action": "optional_swap_on_mainnet",
|
||||
"detail": "If payout asset is wrong shape (e.g. WETH only, need USDT), swap on mainnet via DEX/aggregator to Changelly-accepted from-currency."
|
||||
},
|
||||
{
|
||||
"order": 4,
|
||||
"chainId": 0,
|
||||
"action": "changelly_quote_and_create",
|
||||
"detail": "JSON-RPC: getMinAmount, getExchangeAmount, validateAddress(BTC), createTransaction with amount, from, to btc, address = user btc address. Store payin address + id."
|
||||
},
|
||||
{
|
||||
"order": 5,
|
||||
"chainId": 1,
|
||||
"action": "send_payin",
|
||||
"detail": "Broadcast Ethereum tx from treasury to Changelly deposit address for exact amount; single output per Changelly rules for UTXO targets."
|
||||
},
|
||||
{
|
||||
"order": 6,
|
||||
"chainId": 0,
|
||||
"action": "poll_until_btc_sent",
|
||||
"detail": "Poll getTransactions / status until outbound BTC confirmed; record btc txid for reconciliation."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "138-evm-atomic-user-btc",
|
||||
"label": "User-operated: 138 → Ethereum → Atomic Wallet swap → BTC",
|
||||
"venue": "atomic_wallet",
|
||||
"automationTier": "low",
|
||||
"summary": "After funds arrive on an Ethereum address the user controls in Atomic Wallet, user runs in-app Exchange to BTC; no server-side Atomic swap API in repo.",
|
||||
"preconditions": [
|
||||
"Bridge completes to user-controlled Ethereum address (same EOA in MetaMask and Atomic, or user sends to Atomic-seeded wallet)",
|
||||
"User installs Atomic Wallet and holds seed phrase",
|
||||
"Asset appears in Atomic’s supported list for swap into BTC"
|
||||
],
|
||||
"steps": [
|
||||
{
|
||||
"order": 1,
|
||||
"chainId": 138,
|
||||
"action": "swap_and_bridge_to_user_eoa_mainnet",
|
||||
"detail": "Same as Changelly path steps 1–2 but recipient is user’s Ethereum mainnet address."
|
||||
},
|
||||
{
|
||||
"order": 2,
|
||||
"chainId": 1,
|
||||
"action": "user_opens_atomic_exchange",
|
||||
"detail": "In Atomic: Exchange → select from asset (ETH/USDT/USDC etc.) → to BTC → enter amount and destination BTC address (often same app wallet’s BTC account)."
|
||||
},
|
||||
{
|
||||
"order": 3,
|
||||
"chainId": 0,
|
||||
"action": "user_completes_partner_flow",
|
||||
"detail": "Follow Atomic prompts (rates non-fixed, ~20 min typical per vendor KB); user bears slippage and network fees."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
14
config/compliance-matrix/README.md
Normal file
14
config/compliance-matrix/README.md
Normal file
@@ -0,0 +1,14 @@
|
||||
# Global compliance matrix index
|
||||
|
||||
**Canonical index:** [`global-compliance-matrix-index.json`](global-compliance-matrix-index.json)
|
||||
|
||||
This folder holds a **top-level registry** of compliance packages by jurisdiction or region. Each entry points to a **drill-down manifest** under [`jurisdictions/`](jurisdictions/) that lists:
|
||||
|
||||
- Transaction-grade JSON matrices (Indonesia / JVMTM)
|
||||
- Audit closure matrices (markdown)
|
||||
- Institutional submission binders (Indonesia 4.995 package)
|
||||
- Regional rulebook mappings (e.g. SEPA under `gru-docs/`)
|
||||
|
||||
**Indonesia drill-down:** [`jurisdictions/ID.json`](jurisdictions/ID.json) → `config/jvmtm-regulatory-closure/transaction-compliance-matrix.json` plus submission docs in `docs/04-configuration/mifos-omnl-central-bank/`.
|
||||
|
||||
**Validation:** `python3 scripts/validation/validate-global-compliance-matrix-index.py` (also invoked from `scripts/validation/validate-jvmtm-regulatory-closure-schemas.sh`).
|
||||
30
config/compliance-matrix/global-compliance-matrix-index.json
Normal file
30
config/compliance-matrix/global-compliance-matrix-index.json
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"matrix_version": "2026-04-03",
|
||||
"title": "Global compliance matrix index",
|
||||
"description": "Top-level registry of jurisdiction and regional compliance packages. Each row links to a manifest JSON for drill-down (controls, audit closure, submission binders, or regional rulebook mappings).",
|
||||
"canonical_format": "json",
|
||||
"cross_cutting": {
|
||||
"dbis_institutional": "config/dbis-institutional/README.md",
|
||||
"settlement_stack_runbook": "docs/03-deployment/OMNL_DBIS_CORE_CHAIN138_SMART_VAULT_RTGS_RUNBOOK.md",
|
||||
"iso_gateway_spec": "docs/dbis-rail/ISO_GATEWAY_AND_RELAYER_SPEC.md"
|
||||
},
|
||||
"jurisdictions": [
|
||||
{
|
||||
"jurisdiction_id": "ID",
|
||||
"display_name": "Indonesia",
|
||||
"iso_3166_alpha2": "ID",
|
||||
"status": "active",
|
||||
"summary": "JVMTM audit closure (INAAUDJVMTM 2025), transaction-grade operator pack, OJK/BI identifier policy, BI/MoF institutional submission binder (4.995).",
|
||||
"jurisdiction_manifest": "config/compliance-matrix/jurisdictions/ID.json"
|
||||
},
|
||||
{
|
||||
"jurisdiction_id": "EU-SEPA",
|
||||
"display_name": "European Union (SEPA — GRU docs)",
|
||||
"iso_3166_alpha2": null,
|
||||
"status": "active",
|
||||
"summary": "SEPA Credit Transfer rulebook mapping in gru-docs; separate from Indonesia JVMTM JSON controls.",
|
||||
"jurisdiction_manifest": "config/compliance-matrix/jurisdictions/EU-SEPA.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
25
config/compliance-matrix/jurisdictions/EU-SEPA.json
Normal file
25
config/compliance-matrix/jurisdictions/EU-SEPA.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"jurisdiction_id": "EU-SEPA",
|
||||
"iso_3166_alpha2": null,
|
||||
"display_name": "European Union (SEPA — GRU documentation)",
|
||||
"summary": "GRU site compliance set for SEPA Credit Transfer / SCT Inst rulebook mapping (markdown); use alongside global settlement runbooks when EUR rails apply.",
|
||||
"audit_engagements": [],
|
||||
"regulators": [
|
||||
{"short": "EPC", "full_name": "European Payments Council"}
|
||||
],
|
||||
"compliance_packages": [
|
||||
{
|
||||
"package_id": "gru-sepa-compliance-matrix",
|
||||
"kind": "regional_markdown",
|
||||
"title": "SEPA Compliance Matrix for GRU System",
|
||||
"description": "Maps GRU implementation to EPC SEPA rulebook elements (ISO 20022); maintained under gru-docs.",
|
||||
"human_readable_md": [
|
||||
"gru-docs/_compliance/sepa/SEPA_Compliance_Matrix.md"
|
||||
],
|
||||
"index_md": [
|
||||
"gru-docs/compliance.md"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
51
config/compliance-matrix/jurisdictions/ID.json
Normal file
51
config/compliance-matrix/jurisdictions/ID.json
Normal file
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"jurisdiction_id": "ID",
|
||||
"iso_3166_alpha2": "ID",
|
||||
"display_name": "Indonesia",
|
||||
"summary": "Transaction-grade controls derived from JVMTM Tables B/C/D closure; supervisory submission artifacts for HYBX-BATCH-001 (Bank Kanaya / BI–MoF package).",
|
||||
"audit_engagements": [
|
||||
{
|
||||
"id": "018215821582",
|
||||
"label": "INAAUDJVMTM/2025",
|
||||
"closure_matrix": "config/jvmtm-regulatory-closure/INAAUDJVMTM_2025_AUDIT_CLOSURE_MATRIX.md"
|
||||
}
|
||||
],
|
||||
"regulators": [
|
||||
{"short": "BI", "full_name": "Bank Indonesia"},
|
||||
{"short": "OJK", "full_name": "Otoritas Jasa Keuangan"},
|
||||
{"short": "MoF", "full_name": "Ministry of Finance of the Republic of Indonesia"},
|
||||
{"short": "PPATK", "full_name": "Indonesian Financial Transaction Reports and Analysis Centre (PPATK)"}
|
||||
],
|
||||
"compliance_packages": [
|
||||
{
|
||||
"package_id": "jvmtm-transaction-grade",
|
||||
"kind": "transaction_controls_json",
|
||||
"title": "JVMTM transaction-grade compliance matrix",
|
||||
"description": "Canonical controls and runtime slots for pre-transaction through high-value mode; maps to audit rows and repo evidence.",
|
||||
"canonical_matrix_json": "config/jvmtm-regulatory-closure/transaction-compliance-matrix.json",
|
||||
"spreadsheet_csv": "config/jvmtm-regulatory-closure/transaction-compliance-matrix.csv",
|
||||
"human_readable_md": [
|
||||
"config/jvmtm-regulatory-closure/JVMTM_TRANSACTION_GRADE_COMPLIANCE_MATRIX.md",
|
||||
"config/jvmtm-regulatory-closure/README.md"
|
||||
],
|
||||
"policy_md": [
|
||||
"docs/03-deployment/OJK_BI_AUDIT_JVMTM_REMEDIATION_AND_UETR_POLICY.md"
|
||||
]
|
||||
},
|
||||
{
|
||||
"package_id": "submission-binder-hybx-batch-001",
|
||||
"kind": "institutional_submission",
|
||||
"title": "Indonesia central bank / MoF submission package (4.995 target)",
|
||||
"description": "Master proof manifest, binder layout, scorecard, and regulatory annex for institutional transmission.",
|
||||
"entry_point_md": [
|
||||
"docs/04-configuration/mifos-omnl-central-bank/INDONESIA_MASTER_PROOF_MANIFEST.md",
|
||||
"docs/04-configuration/mifos-omnl-central-bank/INDONESIA_CENTRAL_BANK_SUBMISSION_BINDER.md",
|
||||
"docs/04-configuration/mifos-omnl-central-bank/INDONESIA_SUBMISSION_PACKAGE_GRADE_AND_SCORECARD.md",
|
||||
"docs/04-configuration/mifos-omnl-central-bank/INDONESIA_PACKAGE_4_995_EVIDENCE_STANDARD.md",
|
||||
"docs/04-configuration/mifos-omnl-central-bank/INDONESIA_REGULATORY_REFERENCES_ANNEX.md",
|
||||
"docs/04-configuration/mifos-omnl-central-bank/HYBX_BATCH_001_OPERATOR_CHECKLIST.md"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
15
config/compose/sankofa-consolidated-runtime.example.yml
Normal file
15
config/compose/sankofa-consolidated-runtime.example.yml
Normal file
@@ -0,0 +1,15 @@
|
||||
# Example: API hub container only. Point upstream blocks in
|
||||
# config/nginx/sankofa-phoenix-api-hub.example.conf to real Phoenix (e.g. :4000) and
|
||||
# dbis_core (:3000) — on the same host use 127.0.0.1 after colocation, or LAN IPs
|
||||
# (e.g. 192.168.11.50, 192.168.11.155) during migration.
|
||||
#
|
||||
# docker compose -f sankofa-consolidated-runtime.example.yml up -d
|
||||
|
||||
services:
|
||||
api-hub:
|
||||
image: nginx:1.27-alpine
|
||||
ports:
|
||||
- "8080:8080"
|
||||
volumes:
|
||||
- ../nginx/sankofa-phoenix-api-hub.example.conf:/etc/nginx/conf.d/default.conf:ro
|
||||
restart: unless-stopped
|
||||
@@ -4,7 +4,7 @@
|
||||
*
|
||||
* Usage:
|
||||
* const { getContractAddress, getChainContracts, loadContractsIntoProcessEnv } = require('../config/contracts-loader.cjs');
|
||||
* getContractAddress(138, 'CCIP_Router') // => '0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e'
|
||||
* getContractAddress(138, 'CCIP_Router') // => '0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817'
|
||||
* getContractAddress(138, 'CCIPWETH9_Bridge') // by contract key
|
||||
* loadContractsIntoProcessEnv() // set process.env.CCIP_ROUTER etc. from envVarMap when unset
|
||||
*
|
||||
|
||||
38
config/dbis-data-api/README.md
Normal file
38
config/dbis-data-api/README.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# DBIS Data API — implementation notes
|
||||
|
||||
OpenAPI contract: [openapi.yaml](./openapi.yaml).
|
||||
|
||||
## Lineage
|
||||
|
||||
| Value | Meaning |
|
||||
|-------|---------|
|
||||
| `on_chain` | Derived from Chain 138 indexer, RPC, or token-aggregation inputs |
|
||||
| `policy` | Published by policy officers; not implied as ledger truth |
|
||||
| `modelled` | Simulation or internal model |
|
||||
|
||||
## Suggested PostgreSQL / Timescale layout
|
||||
|
||||
**Relational (PostgreSQL)**
|
||||
|
||||
- `api_clients` — id, name, key_hash, rate_limit_tier, created_at
|
||||
- `datasets` — id, slug, title, description, lineage_default
|
||||
- `dataset_versions` — dataset_id, version, published_at, document_url
|
||||
|
||||
**Hypertables (TimescaleDB)**
|
||||
|
||||
- `metric_gru_supply` — time TIMESTAMPTZ, value NUMERIC, metadata JSONB
|
||||
- `metric_settlement_volume` — time, window, chain_id, value, tx_count
|
||||
- `metric_reserve_snapshot` — time, asset, amount, source
|
||||
|
||||
Ingest jobs read from existing token-aggregation and explorer-compatible sources; separate ETL for policy-published series.
|
||||
|
||||
## Frontend (DBIS portal)
|
||||
|
||||
Set `NEXT_PUBLIC_DATA_API_BASE` in the Gov Web Portals DBIS app (see `DBIS/.env.example`) so the homepage and `/dashboard` monetary panels call this API. When the service is down, the UI shows placeholders and an “unreachable” status.
|
||||
|
||||
## Deployment path
|
||||
|
||||
1. Provision CT/VM or service user on LAN.
|
||||
2. NPMplus proxy host `data.d-bis.org` → upstream.
|
||||
3. Enable API keys (optional) for high-volume consumers; public tier remains read-only GET.
|
||||
4. Add host to [E2E_ENDPOINTS_LIST.md](../../docs/04-configuration/E2E_ENDPOINTS_LIST.md) when live.
|
||||
133
config/dbis-data-api/openapi.yaml
Normal file
133
config/dbis-data-api/openapi.yaml
Normal file
@@ -0,0 +1,133 @@
|
||||
openapi: 3.1.0
|
||||
info:
|
||||
title: DBIS Data API
|
||||
version: 0.1.0
|
||||
description: |
|
||||
Public read API for data.d-bis.org — monetary aggregates, GRU series, settlement summaries, rates.
|
||||
Every response MUST declare lineage via `x-dbis-lineage` on operations: `on_chain`, `policy`, `modelled`.
|
||||
servers:
|
||||
- url: https://data.d-bis.org
|
||||
description: Production
|
||||
- url: http://localhost:8080
|
||||
description: Local
|
||||
tags:
|
||||
- name: gru
|
||||
- name: reserves
|
||||
- name: settlement
|
||||
- name: rates
|
||||
paths:
|
||||
/v1/health:
|
||||
get:
|
||||
summary: Liveness
|
||||
operationId: health
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
status: { type: string, example: ok }
|
||||
/v1/gru/supply:
|
||||
get:
|
||||
tags: [gru]
|
||||
summary: GRU supply time series (when defined)
|
||||
operationId: gruSupply
|
||||
x-dbis-lineage: policy
|
||||
parameters:
|
||||
- name: from
|
||||
in: query
|
||||
schema: { type: string, format: date }
|
||||
- name: to
|
||||
in: query
|
||||
schema: { type: string, format: date }
|
||||
responses:
|
||||
"200":
|
||||
description: Series points
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/TimeSeriesResponse"
|
||||
"501":
|
||||
description: Not yet published
|
||||
/v1/reserves/summary:
|
||||
get:
|
||||
tags: [reserves]
|
||||
summary: Reserve holdings summary
|
||||
operationId: reservesSummary
|
||||
x-dbis-lineage: on_chain
|
||||
responses:
|
||||
"200":
|
||||
description: Summary
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ReservesSummary"
|
||||
/v1/settlement/volumes:
|
||||
get:
|
||||
tags: [settlement]
|
||||
summary: Settlement volume aggregates
|
||||
operationId: settlementVolumes
|
||||
x-dbis-lineage: on_chain
|
||||
parameters:
|
||||
- name: window
|
||||
in: query
|
||||
schema: { type: string, enum: [1h, 24h, 7d, 30d] }
|
||||
responses:
|
||||
"200":
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/SettlementVolumes"
|
||||
/v1/rates/reference:
|
||||
get:
|
||||
tags: [rates]
|
||||
summary: Reference rates (policy or observed)
|
||||
operationId: referenceRates
|
||||
x-dbis-lineage: policy
|
||||
responses:
|
||||
"200":
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
additionalProperties: true
|
||||
components:
|
||||
schemas:
|
||||
LineageMeta:
|
||||
type: object
|
||||
required: [lineage, asOf]
|
||||
properties:
|
||||
lineage:
|
||||
type: string
|
||||
enum: [on_chain, policy, modelled]
|
||||
asOf: { type: string, format: date-time }
|
||||
source: { type: string }
|
||||
TimeSeriesResponse:
|
||||
allOf:
|
||||
- $ref: "#/components/schemas/LineageMeta"
|
||||
- type: object
|
||||
properties:
|
||||
unit: { type: string }
|
||||
points:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
required: [t, v]
|
||||
properties:
|
||||
t: { type: string, format: date-time }
|
||||
v: { type: number }
|
||||
ReservesSummary:
|
||||
allOf:
|
||||
- $ref: "#/components/schemas/LineageMeta"
|
||||
- type: object
|
||||
additionalProperties: true
|
||||
SettlementVolumes:
|
||||
allOf:
|
||||
- $ref: "#/components/schemas/LineageMeta"
|
||||
- type: object
|
||||
properties:
|
||||
window: { type: string }
|
||||
totalValue: { type: string, description: Decimal string }
|
||||
txCount: { type: integer }
|
||||
115
config/dbis-institutional/README.md
Normal file
115
config/dbis-institutional/README.md
Normal file
@@ -0,0 +1,115 @@
|
||||
# DBIS institutional config (schemas + examples)
|
||||
|
||||
Machine-readable artifacts for **OMNL + DBIS Core + Chain 138 + RTGS** integration and **identifier** alignment (LEI, IBAN, ISIN, ENS, WEB3-ETH-IBAN, explorer labels).
|
||||
|
||||
## Canonical narrative doc
|
||||
|
||||
[OMNL_DBIS_CORE_CHAIN138_SMART_VAULT_RTGS_RUNBOOK.md](../../docs/03-deployment/OMNL_DBIS_CORE_CHAIN138_SMART_VAULT_RTGS_RUNBOOK.md)
|
||||
|
||||
## WEB3-ETH-IBAN (`web3_eth_iban`) vs bank IBAN
|
||||
|
||||
In this registry, **`aliases[].aliasType` = `web3_eth_iban`** is an **Ethereum presentation alias**: an **XE…** string in the same family as [ICAP / IBAN-style encoding](https://github.com/ethereum/wiki/wiki/ICAP:-Inter-exchange-Client-Address-Protocol) used by [Web3.js `Iban`](https://docs.web3js.org/libdocs/Iban). It is **not** a SWIFT bank IBAN. **`fiat_rails[].railType` = `iban`** is for **regulated fiat** account identifiers.
|
||||
|
||||
- **Validate checksum and resolve to `address`:** from repo root, `node scripts/verify/validate-address-registry-xe-aliases.mjs [file.json …]` (defaults to institutional examples). Wired into `validate-dbis-institutional-schemas.sh` when `node` and npm package `web3-eth-iban` are installed at the workspace root.
|
||||
- **Library:** [`web3-eth-iban`](https://www.npmjs.com/package/web3-eth-iban) (also bundled as `web3.eth.Iban` in web3.js v1).
|
||||
|
||||
## Event producers (`event-producers.manifest.json`)
|
||||
|
||||
Registered logical emitters for `settlement-event.event_producer` (kept in sync with the `enum` in `schemas/settlement-event.schema.json`). Add a producer: extend both the manifest and the schema enum in one change.
|
||||
|
||||
## Schemas (`schemas/`)
|
||||
|
||||
| File | Purpose |
|
||||
|------|---------|
|
||||
| `settlement-event.schema.json` | Cross-system settlement / evidence event (section 6 of runbook). |
|
||||
| `address-registry-entry.schema.json` | Vault or wallet row: `0x` address, fiat rails, Web3 aliases, optional ISIN/CUSIP, Blockscout label hints (sections 3, 7, 13). |
|
||||
|
||||
## Examples (`examples/`)
|
||||
|
||||
| File | Pairs with |
|
||||
|------|------------|
|
||||
| `settlement-event.example.json` | `settlement-event.schema.json` (hybrid: includes `uetr` + internal refs) |
|
||||
| `settlement-event.chain138-primary.example.json` | Same schema; **Chain 138 as authoritative rail** — no `uetr`; `rtgs_message_ids.rail` + internal refs; see [OJK_BI_AUDIT_JVMTM_REMEDIATION_AND_UETR_POLICY.md](../../docs/03-deployment/OJK_BI_AUDIT_JVMTM_REMEDIATION_AND_UETR_POLICY.md) |
|
||||
| `settlement-event.min.json` | **Minimal** valid `CHAIN_SETTLEMENT` fixture (required fields + `chain_tx_hash` / `chain_id`); CI baseline in `validate-dbis-institutional-schemas.sh`. |
|
||||
| `settlement-events-batch.example.json` | Each array element validated against `settlement-event.schema.json` (see `validate-dbis-institutional-schemas.sh`) |
|
||||
| `address-registry-entry.example.json` | `address-registry-entry.schema.json`; `web3_eth_iban` uses a valid **XE…** string that resolves to `address` (see XE section above) |
|
||||
| `address-registry-entries-batch.example.json` | Each array element validated against `address-registry-entry.schema.json` |
|
||||
|
||||
Examples use placeholder addresses and ids; replace with live data in a secure store (not committed).
|
||||
|
||||
### Settlement `amount` convention (operators + integrators)
|
||||
|
||||
Use **major currency units** as a decimal string, with explicit scale for fiat:
|
||||
|
||||
- **`amount`:** string matching `^-?[0-9]+(\.[0-9]+)?$` (e.g. USD 25,000,000.00 → `"25000000.00"`).
|
||||
- **`amount_scale`:** use **`2`** for USD and other ISO 4217 currencies with two decimal places.
|
||||
|
||||
Fineract journal APIs may still use **minor units (cents)**; convert at the boundary and record settlement events in **major units** so logs and regulatory exports stay human-aligned. Do not mix major and minor in the same field without documenting which convention applies.
|
||||
|
||||
### Chain 138 as SWIFT replacement vs UETR
|
||||
|
||||
When settlement is **authoritative on Chain 138** (chain id **138**), treat **`correlation_id` + `chain_tx_hash` + `occurred_at`** as the primary rail-native E2E evidence for that leg. **`rtgs_message_ids.uetr`** is **optional** unless you also run a **parallel SWIFT gpi** leg (hybrid); then record both UETR and chain fields on the same **`correlation_id`**.
|
||||
|
||||
### SWIFT UETR vs internal “message sent” reference
|
||||
|
||||
**UETR** belongs in `rtgs_message_ids.uetr` when the payment is on **SWIFT gpi** (or your counterparty/scheme requires it). You **cannot** treat an arbitrary internal message id as a regulatory substitute for UETR on **those** legs.
|
||||
|
||||
When no UETR exists yet (internal-only, pre-SWIFT, DLT-only, domestic rail), add extra keys under **`rtgs_message_ids`** (the schema allows any string keys), e.g. `internal_instruction_ref`, `operator_message_ref`, or a digest of the submitted instruction — and keep **`correlation_id`** as the cross-system spine. When UETR is later assigned, **record it** and retain internal refs for audit lineage.
|
||||
|
||||
Policy and audit-scope notes: [OJK_BI_AUDIT_JVMTM_REMEDIATION_AND_UETR_POLICY.md](../../docs/03-deployment/OJK_BI_AUDIT_JVMTM_REMEDIATION_AND_UETR_POLICY.md).
|
||||
|
||||
## Related repo config
|
||||
|
||||
- OMNL entity master: `docs/04-configuration/mifos-omnl-central-bank/OMNL_ENTITY_MASTER_DATA.json`
|
||||
- Institutional subdomains: `docs/04-configuration/DBIS_INSTITUTIONAL_SUBDOMAINS.md`
|
||||
- Blockscout address labeling (K8s): `smom-dbis-138/k8s/blockscout/address-labeling-config.yaml`
|
||||
|
||||
## Validation
|
||||
|
||||
```bash
|
||||
# JSON parse (all examples/*.json)
|
||||
bash scripts/validation/validate-dbis-institutional-json.sh
|
||||
|
||||
# JSON Schema — requires check-jsonschema on PATH (PEP 668 / “externally managed” Python):
|
||||
# python3 -m venv .venv-checkjson && .venv-checkjson/bin/pip install check-jsonschema
|
||||
# PATH="$PWD/.venv-checkjson/bin:$PATH" bash scripts/validation/validate-dbis-institutional-schemas.sh
|
||||
# Or: pipx install check-jsonschema
|
||||
SCHEMA_STRICT=1 bash scripts/validation/validate-dbis-institutional-schemas.sh
|
||||
```
|
||||
|
||||
`scripts/validation/validate-dbis-institutional-schemas.sh` validates **checked-in examples** only. For a **live or one-off** settlement event file, validate it directly:
|
||||
|
||||
### Validation — ad-hoc settlement event
|
||||
|
||||
```bash
|
||||
# From repository root; use the same venv as above or any check-jsonschema on PATH.
|
||||
PATH="$PWD/.venv-checkjson/bin:$PATH" check-jsonschema \
|
||||
--schemafile config/dbis-institutional/schemas/settlement-event.schema.json \
|
||||
your-event.json
|
||||
```
|
||||
|
||||
- **Success:** exit code **0**; typical stdout is `ok -- validation done` (wording may vary by version).
|
||||
- **Failure:** non-zero exit; `ValidationError` / `SchemaError` in stderr — treat as **not schema-closed**.
|
||||
|
||||
Do not use `validate-dbis-institutional-schemas.sh` as a substitute for validating arbitrary payload files.
|
||||
|
||||
`validate-config-files.sh` runs schema validation automatically when `check-jsonschema` is on `PATH`. The gitignored venv `.venv-checkjson/` is listed in `.gitignore` for this purpose.
|
||||
|
||||
Validated pairs (examples versus schemas): `settlement-event`, `address-registry-entry`, `trust`, `governance`, `policy` (against `policy-manifest.schema.json`).
|
||||
|
||||
`settlement-event` optionally carries **ISO-20022** (`iso_msg_type`, `iso_instruction_id`, `iso_payload_hash`, `rail_iso_hash`) and **identity** (`holder_did`, `identity_verification_ref`) for full fiat / FX / chain correlation — see runbook section 14.
|
||||
|
||||
`address-registry-entry` supports **`iso_intake`** and **`dbis_settlement_router`** roles plus optional **`primary_holder_did`** and **`identity_anchor_ref`** (section 14.6 checklist).
|
||||
|
||||
## Blockscout address labels
|
||||
|
||||
Plan or sync labels from registry JSON (`blockscout.label` + `status: active`):
|
||||
|
||||
```bash
|
||||
bash scripts/verify/sync-blockscout-address-labels-from-registry.sh config/dbis-institutional/examples/address-registry-entry.example.json
|
||||
bash scripts/verify/sync-blockscout-address-labels-from-registry.sh --from-dir config/dbis-institutional/registry
|
||||
# Preferred for the self-hosted Chain 138 explorer (writes Blockscout Postgres address_names):
|
||||
bash scripts/verify/sync-blockscout-address-labels-from-registry.sh --apply --mode=db --from-dir config/dbis-institutional/registry
|
||||
```
|
||||
|
||||
On `explorer.d-bis.org`, public `/api/v1/*` is served by token-aggregation, not by a Blockscout label-write API, so `--mode=db` is the correct operator path for live labels unless you have separately enabled a dedicated label endpoint. See `registry/README.md` for drop-in files (gitignored by default).
|
||||
38
config/dbis-institutional/event-producers.manifest.json
Normal file
38
config/dbis-institutional/event-producers.manifest.json
Normal file
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"description": "Registered settlement event emitters. Keep in sync with settlement-event.schema.json event_producer enum.",
|
||||
"producers": [
|
||||
{
|
||||
"id": "hybx-omnl-sidecar",
|
||||
"summary": "HYBX Fineract/OMNL integration sidecar emitting settlement-correlated events."
|
||||
},
|
||||
{
|
||||
"id": "dbis-core",
|
||||
"summary": "DBIS Core banking / nostro-vostro / ISO adapter path."
|
||||
},
|
||||
{
|
||||
"id": "iso-gateway",
|
||||
"summary": "Off-chain ISO gateway building canonical bundles before chain or relayer submission."
|
||||
},
|
||||
{
|
||||
"id": "mintauth-relayer",
|
||||
"summary": "MintAuth EIP-712 quorum and relayer calling SettlementRouter or related contracts."
|
||||
},
|
||||
{
|
||||
"id": "chain-settlement-worker",
|
||||
"summary": "Worker observing chain receipts and emitting settlement events for reconciliation."
|
||||
},
|
||||
{
|
||||
"id": "omnl-fineract-webhook",
|
||||
"summary": "Fineract/OMNL webhook or callback integration."
|
||||
},
|
||||
{
|
||||
"id": "integration-hub-example",
|
||||
"summary": "Documentation / lab example only; not a production system id."
|
||||
},
|
||||
{
|
||||
"id": "manual-operator",
|
||||
"summary": "Human-initiated or ops tooling emission with explicit audit trail."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
[
|
||||
{
|
||||
"registryEntryId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"entity_id": "98450070C57395F6B906",
|
||||
"jurisdiction": "ID",
|
||||
"chain_id": 138,
|
||||
"address": "0x0000000000000000000000000000000000000001",
|
||||
"addressRole": "treasury_vault",
|
||||
"status": "active",
|
||||
"blockscout": {
|
||||
"label": "OMNL — Treasury vault (Office 22)",
|
||||
"labelType": "contract"
|
||||
}
|
||||
},
|
||||
{
|
||||
"registryEntryId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
|
||||
"entity_id": "98450070C57395F6B906",
|
||||
"jurisdiction": "ID",
|
||||
"chain_id": 138,
|
||||
"address": "0x0000000000000000000000000000000000000002",
|
||||
"addressRole": "iso_intake",
|
||||
"status": "active",
|
||||
"primary_holder_did": "did:sov:WRfXg6LQCZgRsXoHF",
|
||||
"blockscout": {
|
||||
"label": "ISO intake / gateway (verify live address)",
|
||||
"labelType": "contract"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"registryEntryId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
||||
"entity_id": "98450070C57395F6B906",
|
||||
"jurisdiction": "ID",
|
||||
"class_id": "C01",
|
||||
"anchor_id": "C01-A01",
|
||||
"division_id": "C01-A01-D01",
|
||||
"omnl_office_id": 22,
|
||||
"dbis_participant_id": "PART-ID-OMNL-HO-001",
|
||||
"chain_id": 138,
|
||||
"address": "0x00c5496aEe77C1bA1f0854206A26DdA82a81D6D8",
|
||||
"addressRole": "treasury_vault",
|
||||
"fiat_rails": [
|
||||
{
|
||||
"railType": "iban",
|
||||
"railValue": "ID00XXXX0000000000000000",
|
||||
"bic": "EXAMPLEIDJ",
|
||||
"validFrom": "2026-01-01"
|
||||
}
|
||||
],
|
||||
"aliases": [
|
||||
{
|
||||
"aliasType": "ens",
|
||||
"aliasValue": "treasury-example.eth",
|
||||
"resolver_chain_id": 1,
|
||||
"validFrom": "2026-03-01T00:00:00Z"
|
||||
},
|
||||
{
|
||||
"aliasType": "web3_eth_iban",
|
||||
"aliasValue": "XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS",
|
||||
"validFrom": "2026-03-15T00:00:00Z"
|
||||
},
|
||||
{
|
||||
"aliasType": "custom_ens_tld",
|
||||
"aliasValue": "vault.anchor01.d-bis",
|
||||
"validFrom": "2026-03-20T00:00:00Z"
|
||||
}
|
||||
],
|
||||
"instruments": [
|
||||
{
|
||||
"isin": "US0000000000",
|
||||
"cusip": "000000000"
|
||||
}
|
||||
],
|
||||
"primary_holder_did": "did:sov:WRfXg6LQCZgRsXoHF",
|
||||
"identity_anchor_ref": "indy-nym-or-acapy-conn-example",
|
||||
"blockscout": {
|
||||
"label": "OMNL — Treasury vault (Office 22)",
|
||||
"labelType": "contract"
|
||||
},
|
||||
"status": "active",
|
||||
"lastCorrelationId": "550e8400-e29b-41d4-a716-446655440001"
|
||||
}
|
||||
13
config/dbis-institutional/examples/governance.json
Normal file
13
config/dbis-institutional/examples/governance.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"version": "0.1.0",
|
||||
"issuedAt": "2026-03-30T00:00:00Z",
|
||||
"amendmentProcess": "Described in DBIS Charter and Governance Statute (placeholder).",
|
||||
"bodies": [
|
||||
{
|
||||
"id": "council",
|
||||
"name": "Sovereign Council",
|
||||
"role": "Strategic oversight",
|
||||
"documentUrl": "https://d-bis.org/documents/governance-statute"
|
||||
}
|
||||
]
|
||||
}
|
||||
13
config/dbis-institutional/examples/policy.json
Normal file
13
config/dbis-institutional/examples/policy.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"version": "0.1.0",
|
||||
"issuedAt": "2026-03-30T00:00:00Z",
|
||||
"policies": [
|
||||
{
|
||||
"id": "gru-overview-v0",
|
||||
"title": "Global Reserve Unit — Overview (draft)",
|
||||
"effectiveDate": "2026-03-30",
|
||||
"documentUrl": "https://d-bis.org/gru/overview",
|
||||
"hashSha256": "0000000000000000000000000000000000000000000000000000000000000000"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"correlation_id": "660e8400-e29b-41d4-a716-446655440002",
|
||||
"event_producer": "chain-settlement-worker",
|
||||
"entity_id": "98450070C57395F6B906",
|
||||
"jurisdiction": "ID",
|
||||
"class_id": "C01",
|
||||
"anchor_id": "C01-A01",
|
||||
"division_id": "C01-A01-D01",
|
||||
"amount": "25000000.00",
|
||||
"amount_scale": 2,
|
||||
"currency": "USD",
|
||||
"event_type": "CHAIN_SETTLEMENT",
|
||||
"omnl_journal_entry_id": 88421,
|
||||
"omnl_office_id": 22,
|
||||
"dbis_reference": "CORE-TX-2026-0331-CHAIN138",
|
||||
"rtgs_message_ids": {
|
||||
"rail": "chain138",
|
||||
"internal_instruction_ref": "OMNL-M1-KANAYA-CKRA-20260331",
|
||||
"operator_message_ref": "sha256:replace-with-digest-of-instruction-or-archive-manifest"
|
||||
},
|
||||
"chain_id": 138,
|
||||
"chain_tx_hash": "0xb90f2da51d9c506f552d276d9aa57f4ae485528f2ee6025f435f188d09d405f4",
|
||||
"ipsas_narrative": "Chain 138 authoritative settlement leg; no SWIFT UETR on this flow",
|
||||
"occurred_at": "2026-03-31T10:00:00Z",
|
||||
"iso_msg_type": "pacs.008",
|
||||
"iso_instruction_id": "pain001-hashed-key-placeholder",
|
||||
"iso_payload_hash": "0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
|
||||
"rail_iso_hash": "0xdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"correlation_id": "550e8400-e29b-41d4-a716-446655440001",
|
||||
"event_producer": "integration-hub-example",
|
||||
"entity_id": "98450070C57395F6B906",
|
||||
"jurisdiction": "ID",
|
||||
"class_id": "C01",
|
||||
"anchor_id": "C01-A01",
|
||||
"division_id": "C01-A01-D01",
|
||||
"amount": "1000000.00",
|
||||
"amount_scale": 2,
|
||||
"currency": "USD",
|
||||
"event_type": "CHAIN_SETTLEMENT",
|
||||
"omnl_journal_entry_id": 12045,
|
||||
"omnl_office_id": 22,
|
||||
"dbis_reference": "CORE-TX-2026-0330-88421",
|
||||
"rtgs_message_ids": {
|
||||
"uetr": "97ed4827-7b6f-4491-94b1-d651442ca301",
|
||||
"msgId": "BNI2026033012000001",
|
||||
"internal_instruction_ref": "018215821582-INAAUDJVMTM-2025-MSG-001",
|
||||
"operator_message_ref": "sha256:replace-with-digest-of-submitted-instruction-payload"
|
||||
},
|
||||
"chain_id": 138,
|
||||
"chain_tx_hash": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||
"ipsas_narrative": "IPSAS28/29 settlement leg; PvP net beneficiary credit",
|
||||
"occurred_at": "2026-03-30T12:00:00Z",
|
||||
"iso_msg_type": "pacs.008",
|
||||
"iso_instruction_id": "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||||
"iso_payload_hash": "0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
|
||||
"rail_iso_hash": "0xdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
|
||||
"holder_did": "did:sov:WRfXg6LQCZgRsXoHF",
|
||||
"identity_verification_ref": "acapy-proof-req-2026-0330-001"
|
||||
}
|
||||
12
config/dbis-institutional/examples/settlement-event.min.json
Normal file
12
config/dbis-institutional/examples/settlement-event.min.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"entity_id": "OMNL",
|
||||
"jurisdiction": "MT",
|
||||
"correlation_id": "00000000-0000-0000-0000-000000000001",
|
||||
"event_type": "CHAIN_SETTLEMENT",
|
||||
"amount": "1.00",
|
||||
"amount_scale": 2,
|
||||
"currency": "USD",
|
||||
"chain_tx_hash": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||
"chain_id": 138
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
[
|
||||
{
|
||||
"schema_version": 1,
|
||||
"correlation_id": "550e8400-e29b-41d4-a716-446655440001",
|
||||
"event_producer": "chain-settlement-worker",
|
||||
"entity_id": "98450070C57395F6B906",
|
||||
"jurisdiction": "ID",
|
||||
"class_id": "C01",
|
||||
"anchor_id": "C01-A01",
|
||||
"division_id": "C01-A01-D01",
|
||||
"amount": "1000000.00",
|
||||
"amount_scale": 2,
|
||||
"currency": "USD",
|
||||
"event_type": "CHAIN_SETTLEMENT",
|
||||
"chain_id": 138,
|
||||
"chain_tx_hash": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||
"occurred_at": "2026-03-30T12:00:00Z"
|
||||
},
|
||||
{
|
||||
"schema_version": 1,
|
||||
"correlation_id": "550e8400-e29b-41d4-a716-446655440002",
|
||||
"event_producer": "omnl-fineract-webhook",
|
||||
"entity_id": "98450070C57395F6B906",
|
||||
"jurisdiction": "ID",
|
||||
"amount": "0",
|
||||
"currency": "USD",
|
||||
"event_type": "OMNL_JOURNAL_POSTED",
|
||||
"omnl_journal_entry_id": 12046,
|
||||
"omnl_office_id": 22,
|
||||
"occurred_at": "2026-03-30T12:05:00Z",
|
||||
"no_chain_leg_reason": "IPSAS-only reclassification; no on-ledger leg"
|
||||
}
|
||||
]
|
||||
16
config/dbis-institutional/examples/trust.json
Normal file
16
config/dbis-institutional/examples/trust.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"version": "0.1.0",
|
||||
"issuedAt": "2026-03-30T00:00:00Z",
|
||||
"organization": "Digital Bank of International Settlements",
|
||||
"endpoints": {
|
||||
"didRegistry": "https://identity.d-bis.org/registry",
|
||||
"dataApi": "https://data.d-bis.org",
|
||||
"explorer": "https://explorer.d-bis.org",
|
||||
"status": "https://status.d-bis.org",
|
||||
"developers": "https://developers.d-bis.org",
|
||||
"gitea": "https://gitea.d-bis.org"
|
||||
},
|
||||
"jwksUri": "https://identity.d-bis.org/.well-known/jwks.json",
|
||||
"caHints": ["production-trust-anchor.example"],
|
||||
"notes": "Example only — replace URIs and keys before production."
|
||||
}
|
||||
4
config/dbis-institutional/registry/.gitignore
vendored
Normal file
4
config/dbis-institutional/registry/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
# Operator-specific registry rows; do not commit live LEI/IBAN/addresses.
|
||||
*.json
|
||||
!.gitignore
|
||||
!README.md
|
||||
42
config/dbis-institutional/registry/README.md
Normal file
42
config/dbis-institutional/registry/README.md
Normal file
@@ -0,0 +1,42 @@
|
||||
# Address registry drop-in (operator / CI)
|
||||
|
||||
Place **non-example** `address-registry-entry` JSON files here (one object per file, or one array in a single file). These files may contain **LEI, IBAN, and live `0x` addresses** — treat as confidential; prefer `.gitignore` or a secrets store in production.
|
||||
|
||||
## Sync labels to Blockscout
|
||||
|
||||
From repo root (plan only):
|
||||
|
||||
```bash
|
||||
bash scripts/verify/sync-blockscout-address-labels-from-registry.sh --from-dir config/dbis-institutional/registry
|
||||
```
|
||||
|
||||
Or a **single JSON array** file (see [`../examples/address-registry-entries-batch.example.json`](../examples/address-registry-entries-batch.example.json)):
|
||||
|
||||
```bash
|
||||
bash scripts/verify/sync-blockscout-address-labels-from-registry.sh path/to/registry-array.json
|
||||
```
|
||||
|
||||
Apply (LAN or VPN to explorer; set API key if required):
|
||||
|
||||
```bash
|
||||
export BLOCKSCOUT_API_KEY=... # if your Blockscout instance requires it
|
||||
bash scripts/verify/sync-blockscout-address-labels-from-registry.sh --apply --from-dir config/dbis-institutional/registry
|
||||
```
|
||||
|
||||
For the self-hosted Chain 138 explorer, prefer direct DB sync:
|
||||
|
||||
```bash
|
||||
bash scripts/verify/sync-blockscout-address-labels-from-registry.sh --apply --mode=db --from-dir config/dbis-institutional/registry
|
||||
```
|
||||
|
||||
That path writes Blockscout primary labels into `public.address_names` through the explorer CT (`5000`) because `explorer.d-bis.org/api/v1/*` is token-aggregation, not a native Blockscout label-write surface. Use HTTP mode only if you have separately enabled and confirmed a compatible label endpoint (default probe target: `/api/v1/labels`).
|
||||
|
||||
## Token contract staging
|
||||
|
||||
This directory is also the right place for **live token-contract label rows** that should not be committed, for example:
|
||||
|
||||
- staged `cUSDT V2` / `cUSDC V2` token contract labels on Chain 138
|
||||
- bridge-side `cW*` contracts before public cutover
|
||||
- temporary explorer labels used during GRU V1/V2 coexistence
|
||||
|
||||
Keep versioned token contracts clearly labeled in `blockscout.label`, for example `Chain 138 cUSDT V2 (staged)`, so explorer operators can distinguish them from the active V1 liquidity contracts.
|
||||
@@ -0,0 +1,140 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://d-bis.org/schemas/address-registry-entry.json",
|
||||
"title": "Chain address + fiat + Web3 alias registry entry",
|
||||
"description": "Source-of-truth row for explorer sync and settlement binding. See docs/03-deployment/OMNL_DBIS_CORE_CHAIN138_SMART_VAULT_RTGS_RUNBOOK.md sections 3, 7, 13, 14.",
|
||||
"type": "object",
|
||||
"required": [
|
||||
"registryEntryId",
|
||||
"entity_id",
|
||||
"jurisdiction",
|
||||
"chain_id",
|
||||
"address",
|
||||
"addressRole",
|
||||
"status"
|
||||
],
|
||||
"properties": {
|
||||
"registryEntryId": {
|
||||
"type": "string",
|
||||
"description": "Stable UUID for this registry row."
|
||||
},
|
||||
"entity_id": {
|
||||
"type": "string",
|
||||
"description": "LEI (preferred) or internal party id."
|
||||
},
|
||||
"jurisdiction": { "type": "string" },
|
||||
"class_id": { "type": "string" },
|
||||
"anchor_id": { "type": "string" },
|
||||
"division_id": { "type": "string" },
|
||||
"omnl_office_id": { "type": "integer" },
|
||||
"dbis_participant_id": { "type": "string" },
|
||||
"chain_id": {
|
||||
"type": "integer",
|
||||
"description": "138 for production Chain 138."
|
||||
},
|
||||
"address": {
|
||||
"type": "string",
|
||||
"pattern": "^0x[a-fA-F0-9]{40}$",
|
||||
"description": "Checksummed or lower-case EVM address (vault, EOA, or contract)."
|
||||
},
|
||||
"addressRole": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"treasury_vault",
|
||||
"smart_account",
|
||||
"eoa_operational",
|
||||
"contract_registry",
|
||||
"escrow",
|
||||
"token_contract",
|
||||
"iso_intake",
|
||||
"dbis_settlement_router",
|
||||
"other"
|
||||
]
|
||||
},
|
||||
"fiat_rails": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["railType", "railValue"],
|
||||
"properties": {
|
||||
"railType": {
|
||||
"type": "string",
|
||||
"enum": ["iban", "bban", "bic_account", "rtgs_account", "other"]
|
||||
},
|
||||
"railValue": { "type": "string" },
|
||||
"bic": { "type": "string" },
|
||||
"validFrom": { "type": "string", "format": "date" },
|
||||
"validTo": { "type": "string", "format": "date" }
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
},
|
||||
"aliases": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["aliasType", "aliasValue"],
|
||||
"properties": {
|
||||
"aliasType": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"ens",
|
||||
"custom_ens_tld",
|
||||
"web3_eth_iban",
|
||||
"did",
|
||||
"internal_slug",
|
||||
"other"
|
||||
]
|
||||
},
|
||||
"aliasValue": { "type": "string" },
|
||||
"resolver_chain_id": { "type": "integer" },
|
||||
"validFrom": { "type": "string", "format": "date-time" },
|
||||
"validTo": { "type": "string", "format": "date-time" }
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
},
|
||||
"instruments": {
|
||||
"type": "array",
|
||||
"description": "ISIN/CUSIP held or represented at this address when applicable.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"isin": { "type": "string" },
|
||||
"cusip": { "type": "string" },
|
||||
"figi": { "type": "string" }
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
},
|
||||
"blockscout": {
|
||||
"type": "object",
|
||||
"description": "Hints for label sync (Blockscout /api/v1/labels or UI).",
|
||||
"properties": {
|
||||
"label": { "type": "string" },
|
||||
"labelType": {
|
||||
"type": "string",
|
||||
"enum": ["account", "contract", "token"]
|
||||
}
|
||||
},
|
||||
"additionalProperties": true
|
||||
},
|
||||
"status": {
|
||||
"type": "string",
|
||||
"enum": ["active", "pending", "revoked"]
|
||||
},
|
||||
"lastCorrelationId": {
|
||||
"type": "string",
|
||||
"description": "Last mutation tied to a settlement-event correlation_id."
|
||||
},
|
||||
"primary_holder_did": {
|
||||
"type": "string",
|
||||
"description": "Default operational DID for this address (Indy did:sov, did:web, etc.); link LEI in entity_id."
|
||||
},
|
||||
"identity_anchor_ref": {
|
||||
"type": "string",
|
||||
"description": "Indy NYM, ACA-Py connection, or OIDC subject binding reference for audits."
|
||||
}
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
27
config/dbis-institutional/schemas/governance.schema.json
Normal file
27
config/dbis-institutional/schemas/governance.schema.json
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://d-bis.org/schemas/governance.json",
|
||||
"title": "DBIS governance.json",
|
||||
"type": "object",
|
||||
"required": ["version", "issuedAt", "bodies"],
|
||||
"properties": {
|
||||
"version": { "type": "string" },
|
||||
"issuedAt": { "type": "string", "format": "date-time" },
|
||||
"amendmentProcess": { "type": "string" },
|
||||
"bodies": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["id", "name"],
|
||||
"properties": {
|
||||
"id": { "type": "string" },
|
||||
"name": { "type": "string" },
|
||||
"role": { "type": "string" },
|
||||
"documentUrl": { "type": "string", "format": "uri" }
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://d-bis.org/schemas/member-directory-entry.json",
|
||||
"title": "DBIS member directory entry",
|
||||
"type": "object",
|
||||
"required": [
|
||||
"memberId",
|
||||
"name",
|
||||
"jurisdiction",
|
||||
"memberStatus",
|
||||
"participationType",
|
||||
"slug"
|
||||
],
|
||||
"properties": {
|
||||
"memberId": { "type": "string" },
|
||||
"lei": { "type": "string" },
|
||||
"name": { "type": "string" },
|
||||
"shortName": { "type": "string" },
|
||||
"jurisdiction": { "type": "string" },
|
||||
"memberStatus": {
|
||||
"type": "string",
|
||||
"enum": ["active", "candidate", "suspended", "observer"]
|
||||
},
|
||||
"participationType": { "type": "string" },
|
||||
"tier": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"full_central_bank",
|
||||
"settlement_member",
|
||||
"observer_member",
|
||||
"infrastructure_member"
|
||||
]
|
||||
},
|
||||
"settlementRole": { "type": "string" },
|
||||
"currencyParticipation": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" }
|
||||
},
|
||||
"validatorRole": { "type": "string" },
|
||||
"nodeParticipationStatus": { "type": "string" },
|
||||
"roles": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" }
|
||||
},
|
||||
"logoUrl": { "type": "string", "format": "uri" },
|
||||
"slug": {
|
||||
"type": "string",
|
||||
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
|
||||
},
|
||||
"summary": { "type": "string" },
|
||||
"hq": {
|
||||
"type": "object",
|
||||
"description": "Headquarters WGS84 coordinates for strategic map",
|
||||
"required": ["lat", "lng"],
|
||||
"properties": {
|
||||
"lat": { "type": "number", "minimum": -90, "maximum": 90 },
|
||||
"lng": { "type": "number", "minimum": -180, "maximum": 180 },
|
||||
"label": { "type": "string" }
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://d-bis.org/schemas/policy-manifest.json",
|
||||
"title": "DBIS policy.json manifest",
|
||||
"type": "object",
|
||||
"required": ["version", "issuedAt", "policies"],
|
||||
"properties": {
|
||||
"version": { "type": "string" },
|
||||
"issuedAt": { "type": "string", "format": "date-time" },
|
||||
"policies": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["id", "title", "hashSha256"],
|
||||
"properties": {
|
||||
"id": { "type": "string" },
|
||||
"title": { "type": "string" },
|
||||
"effectiveDate": { "type": "string", "format": "date" },
|
||||
"documentUrl": { "type": "string", "format": "uri" },
|
||||
"hashSha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" }
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
143
config/dbis-institutional/schemas/settlement-event.schema.json
Normal file
143
config/dbis-institutional/schemas/settlement-event.schema.json
Normal file
@@ -0,0 +1,143 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://d-bis.org/schemas/settlement-event.json",
|
||||
"title": "Canonical settlement event (OMNL / Core / RTGS / Chain 138)",
|
||||
"description": "Minimum payload for cross-system reconciliation. See docs/03-deployment/OMNL_DBIS_CORE_CHAIN138_SMART_VAULT_RTGS_RUNBOOK.md sections 6 and 14 (ISO-20022 + DID).",
|
||||
"type": "object",
|
||||
"required": [
|
||||
"schema_version",
|
||||
"correlation_id",
|
||||
"entity_id",
|
||||
"jurisdiction",
|
||||
"amount",
|
||||
"currency",
|
||||
"event_type"
|
||||
],
|
||||
"properties": {
|
||||
"schema_version": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"description": "Bump when breaking field semantics."
|
||||
},
|
||||
"correlation_id": {
|
||||
"type": "string",
|
||||
"minLength": 8,
|
||||
"description": "UUID v4, ULID, or org ULID; immutable for the business event."
|
||||
},
|
||||
"entity_id": {
|
||||
"type": "string",
|
||||
"description": "LEI (preferred) or internal UUID for legal/cooperative entity."
|
||||
},
|
||||
"jurisdiction": {
|
||||
"type": "string",
|
||||
"description": "ISO 3166-1 alpha-2 or ISO 3166-2 style (e.g. US-NY)."
|
||||
},
|
||||
"event_producer": {
|
||||
"type": "string",
|
||||
"description": "Logical emitter for routing and audit. Registered ids and descriptions: `event-producers.manifest.json` in this directory.",
|
||||
"enum": [
|
||||
"hybx-omnl-sidecar",
|
||||
"dbis-core",
|
||||
"iso-gateway",
|
||||
"mintauth-relayer",
|
||||
"chain-settlement-worker",
|
||||
"omnl-fineract-webhook",
|
||||
"integration-hub-example",
|
||||
"manual-operator"
|
||||
]
|
||||
},
|
||||
"class_id": {
|
||||
"type": "string",
|
||||
"description": "Elemental Imperium class, e.g. C01–C07."
|
||||
},
|
||||
"anchor_id": { "type": "string" },
|
||||
"division_id": { "type": "string" },
|
||||
"amount": {
|
||||
"type": "string",
|
||||
"pattern": "^-?[0-9]+(\\.[0-9]+)?$",
|
||||
"description": "Decimal amount as string; scale implied by currency or separate field."
|
||||
},
|
||||
"amount_scale": {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"maximum": 18,
|
||||
"description": "Optional explicit minor units (e.g. 2 for USD)."
|
||||
},
|
||||
"currency": {
|
||||
"type": "string",
|
||||
"description": "ISO 4217 for fiat, or token symbol / 0x contract on-chain."
|
||||
},
|
||||
"event_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"RTGS_OUT",
|
||||
"RTGS_IN",
|
||||
"OMNL_JOURNAL_POSTED",
|
||||
"CHAIN_SETTLEMENT",
|
||||
"PV_NET",
|
||||
"TREASURY_RELEASE",
|
||||
"INTERNAL_TRANSFER",
|
||||
"NO_CHAIN_LEG"
|
||||
]
|
||||
},
|
||||
"no_chain_leg_reason": {
|
||||
"type": "string",
|
||||
"description": "When event_type is NO_CHAIN_LEG or internal-only; audit explanation."
|
||||
},
|
||||
"omnl_journal_entry_id": { "type": "integer" },
|
||||
"omnl_office_id": { "type": "integer" },
|
||||
"dbis_reference": {
|
||||
"type": "string",
|
||||
"description": "DBIS Core case or transaction id."
|
||||
},
|
||||
"rtgs_message_ids": {
|
||||
"type": "object",
|
||||
"additionalProperties": { "type": "string" },
|
||||
"description": "Rail and messaging references. When Chain 138 is the authoritative settlement rail (SWIFT replacement for that flow), primary E2E evidence is correlation_id + chain_id + chain_tx_hash; uetr is optional unless a parallel SWIFT gpi leg exists. **uetr**: SWIFT gpi Unique End-to-End Transaction Reference (UUID) when the payment is on or reported to SWIFT gpi — required on those legs if the counterparty or scheme requires it. **msgId**, **endToEndId**: ISO-20022 / bank message ids. When no UETR exists yet (pre-SWIFT, internal-only, DLT-only, or domestic rail), record agreed internal keys, e.g. **internal_instruction_ref**, **operator_message_ref**, or **audit_file_ref**. Internal refs are not a substitute for a real UETR on SWIFT-settled payments; in hybrid flows map uetr + chain evidence + internal refs. See docs/03-deployment/OJK_BI_AUDIT_JVMTM_REMEDIATION_AND_UETR_POLICY.md."
|
||||
},
|
||||
"chain_id": {
|
||||
"type": "integer",
|
||||
"description": "EVM chain id; 138 for DeFi Oracle Meta Mainnet."
|
||||
},
|
||||
"chain_tx_hash": {
|
||||
"type": "string",
|
||||
"pattern": "^0x[a-fA-F0-9]{64}$"
|
||||
},
|
||||
"ipsas_narrative": {
|
||||
"type": "string",
|
||||
"maxLength": 500
|
||||
},
|
||||
"occurred_at": {
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"description": "Business timestamp in UTC."
|
||||
},
|
||||
"iso_msg_type": {
|
||||
"type": "string",
|
||||
"description": "e.g. pacs.008, pain.001, MT103 — aligns with SMART_CONTRACTS_ISO20022_FIN_METHODOLOGY canonical struct."
|
||||
},
|
||||
"iso_instruction_id": {
|
||||
"type": "string",
|
||||
"description": "InstrId or hashed instruction key (hex or string per gateway contract)."
|
||||
},
|
||||
"iso_payload_hash": {
|
||||
"type": "string",
|
||||
"pattern": "^0x[a-fA-F0-9]{64}$",
|
||||
"description": "keccak256 of canonical ISO bundle or raw MX/MT fingerprint; ties OMNL/Core to on-chain intake."
|
||||
},
|
||||
"rail_iso_hash": {
|
||||
"type": "string",
|
||||
"pattern": "^0x[a-fA-F0-9]{64}$",
|
||||
"description": "Optional DBIS Rail isoHash from canonical bundle (ISO_GATEWAY_AND_RELAYER_SPEC)."
|
||||
},
|
||||
"holder_did": {
|
||||
"type": "string",
|
||||
"description": "W3C DID of payment initiator or account holder when VC/DID path used (Indy did:sov, did:web, etc.)."
|
||||
},
|
||||
"identity_verification_ref": {
|
||||
"type": "string",
|
||||
"description": "Reference to ACA-Py proof request, OIDC session, or eIDAS connector correlation id."
|
||||
}
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
||||
31
config/dbis-institutional/schemas/trust.schema.json
Normal file
31
config/dbis-institutional/schemas/trust.schema.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://d-bis.org/schemas/trust.json",
|
||||
"title": "DBIS trust.json",
|
||||
"type": "object",
|
||||
"required": ["version", "issuedAt", "endpoints"],
|
||||
"properties": {
|
||||
"version": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$" },
|
||||
"issuedAt": { "type": "string", "format": "date-time" },
|
||||
"organization": { "type": "string" },
|
||||
"endpoints": {
|
||||
"type": "object",
|
||||
"additionalProperties": { "type": "string", "format": "uri" },
|
||||
"properties": {
|
||||
"didRegistry": { "type": "string", "format": "uri" },
|
||||
"dataApi": { "type": "string", "format": "uri" },
|
||||
"explorer": { "type": "string", "format": "uri" },
|
||||
"status": { "type": "string", "format": "uri" },
|
||||
"developers": { "type": "string", "format": "uri" },
|
||||
"gitea": { "type": "string", "format": "uri" }
|
||||
}
|
||||
},
|
||||
"jwksUri": { "type": "string", "format": "uri" },
|
||||
"caHints": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" }
|
||||
},
|
||||
"notes": { "type": "string" }
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
@@ -1,6 +1,17 @@
|
||||
{
|
||||
"description": "Chain-to-method mapping for deployer gas auto-route: swap/bridge ERC-20 to native gas per chain. Used by scripts/deployment/deployer-gas-auto-route.sh.",
|
||||
"deployerAddress": "0x4A666F96fC8764181194447A7dFdb7d471b301C8",
|
||||
"nonEvmNetworks": [
|
||||
{
|
||||
"identifier": "Solana",
|
||||
"vmKind": "SVM",
|
||||
"nativeSymbol": "SOL",
|
||||
"method": "manual",
|
||||
"caip2": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
|
||||
"manualInstructions": "Acquire SOL for Solana mainnet-beta gas and fund the assigned Solana deployer / relay signer when the Solana rollout wave is opened. This entry is planning-only; deployer-gas-auto-route.sh currently processes only the EIP-155 .chains array.",
|
||||
"note": "Desired non-EVM deployment network for future GRU / cW-style mirrored assets via a bridge-wrapped or SPL-native representation."
|
||||
}
|
||||
],
|
||||
"chains": [
|
||||
{
|
||||
"chainId": 138,
|
||||
@@ -8,10 +19,10 @@
|
||||
"nativeSymbol": "ETH",
|
||||
"thresholdEther": "0.006",
|
||||
"method": "internal",
|
||||
"tokenAggregationBaseUrl": "https://dbis-api.d-bis.org/api/v1",
|
||||
"tokenAggregationBaseUrl": "https://explorer.d-bis.org/token-aggregation/api/v1",
|
||||
"tokenAggregationFallbackUrl": "http://192.168.11.140:3001",
|
||||
"dodoPmmIntegration": "0x79cdbaFBaA0FdF9F55D26F360F54cddE5c743F7D",
|
||||
"poolCusdtCusdc": "0x9fcB06Aa1FD5215DC0E91Fd098aeff4B62fEa5C8",
|
||||
"dodoPmmIntegration": "0x86ADA6Ef91A3B450F89f2b751e93B1b7A3218895",
|
||||
"poolCusdtCusdc": "0x9e89bAe009adf128782E19e8341996c596ac40dC",
|
||||
"cusdt": "0x93E66202A11B1772E55407B32B44e5Cd8eda7f22",
|
||||
"cusdc": "0xf22258f57794CC8E06237084b353Ab30fFfa640b",
|
||||
"weth9": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
|
||||
|
||||
1
config/flash_candidates-chain138.json
Normal file
1
config/flash_candidates-chain138.json
Normal file
File diff suppressed because one or more lines are too long
@@ -8,21 +8,20 @@ genesis-file=""
|
||||
network-id=138
|
||||
p2p-host="192.168.11.213"
|
||||
p2p-port=30303
|
||||
max-peers=32
|
||||
max-peers=40
|
||||
discovery-enabled=true
|
||||
|
||||
# RPC
|
||||
rpc-http-enabled=true
|
||||
rpc-http-host="0.0.0.0"
|
||||
rpc-http-port=8545
|
||||
rpc-http-api=["ETH","NET","WEB3","ADMIN","PERSONAL","MINER","DEBUG"]
|
||||
rpc-http-api=["ETH","NET","WEB3"]
|
||||
rpc-http-cors-origins=["*"]
|
||||
rpc-http-api-enable-unsafe-txsigning=true
|
||||
|
||||
rpc-ws-enabled=true
|
||||
rpc-ws-host="0.0.0.0"
|
||||
rpc-ws-port=8546
|
||||
rpc-ws-api=["ETH","NET","WEB3","ADMIN","PERSONAL","MINER","DEBUG"]
|
||||
rpc-ws-api=["ETH","NET","WEB3"]
|
||||
|
||||
# GraphQL
|
||||
graphql-http-enabled=true
|
||||
|
||||
@@ -8,21 +8,20 @@ genesis-file=""
|
||||
network-id=138
|
||||
p2p-host="192.168.11.214"
|
||||
p2p-port=30303
|
||||
max-peers=32
|
||||
max-peers=40
|
||||
discovery-enabled=true
|
||||
|
||||
# RPC
|
||||
rpc-http-enabled=true
|
||||
rpc-http-host="0.0.0.0"
|
||||
rpc-http-port=8545
|
||||
rpc-http-api=["ETH","NET","WEB3","ADMIN","PERSONAL","MINER","DEBUG"]
|
||||
rpc-http-api=["ETH","NET","WEB3"]
|
||||
rpc-http-cors-origins=["*"]
|
||||
rpc-http-api-enable-unsafe-txsigning=true
|
||||
|
||||
rpc-ws-enabled=true
|
||||
rpc-ws-host="0.0.0.0"
|
||||
rpc-ws-port=8546
|
||||
rpc-ws-api=["ETH","NET","WEB3","ADMIN","PERSONAL","MINER","DEBUG"]
|
||||
rpc-ws-api=["ETH","NET","WEB3"]
|
||||
|
||||
# GraphQL
|
||||
graphql-http-enabled=true
|
||||
|
||||
@@ -8,21 +8,20 @@ genesis-file=""
|
||||
network-id=138
|
||||
p2p-host="192.168.11.244"
|
||||
p2p-port=30303
|
||||
max-peers=32
|
||||
max-peers=40
|
||||
discovery-enabled=true
|
||||
|
||||
# RPC
|
||||
rpc-http-enabled=true
|
||||
rpc-http-host="0.0.0.0"
|
||||
rpc-http-port=8545
|
||||
rpc-http-api=["ETH","NET","WEB3","ADMIN","PERSONAL","MINER","DEBUG"]
|
||||
rpc-http-api=["ETH","NET","WEB3"]
|
||||
rpc-http-cors-origins=["*"]
|
||||
rpc-http-api-enable-unsafe-txsigning=true
|
||||
|
||||
rpc-ws-enabled=true
|
||||
rpc-ws-host="0.0.0.0"
|
||||
rpc-ws-port=8546
|
||||
rpc-ws-api=["ETH","NET","WEB3","ADMIN","PERSONAL","MINER","DEBUG"]
|
||||
rpc-ws-api=["ETH","NET","WEB3"]
|
||||
|
||||
# GraphQL
|
||||
graphql-http-enabled=true
|
||||
|
||||
@@ -8,21 +8,20 @@ genesis-file=""
|
||||
network-id=138
|
||||
p2p-host="192.168.11.245"
|
||||
p2p-port=30303
|
||||
max-peers=32
|
||||
max-peers=40
|
||||
discovery-enabled=true
|
||||
|
||||
# RPC
|
||||
rpc-http-enabled=true
|
||||
rpc-http-host="0.0.0.0"
|
||||
rpc-http-port=8545
|
||||
rpc-http-api=["ETH","NET","WEB3","ADMIN","PERSONAL","MINER","DEBUG"]
|
||||
rpc-http-api=["ETH","NET","WEB3"]
|
||||
rpc-http-cors-origins=["*"]
|
||||
rpc-http-api-enable-unsafe-txsigning=true
|
||||
|
||||
rpc-ws-enabled=true
|
||||
rpc-ws-host="0.0.0.0"
|
||||
rpc-ws-port=8546
|
||||
rpc-ws-api=["ETH","NET","WEB3","ADMIN","PERSONAL","MINER","DEBUG"]
|
||||
rpc-ws-api=["ETH","NET","WEB3"]
|
||||
|
||||
# GraphQL
|
||||
graphql-http-enabled=true
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Besu Configuration for besu-rpc-alltra-1 (VMID: 2500)
|
||||
# Type: Full Function RPC Node
|
||||
# Besu Configuration for besu-rpc-alltra-1 (legacy filename, live VMID: 2420)
|
||||
# Type: Permissioned / Private RPC Node
|
||||
# Generated: Fri Jan 23 22:33:18 PST 2026
|
||||
|
||||
data-path="/data/besu"
|
||||
@@ -9,21 +9,20 @@ genesis-file=""
|
||||
network-id=138
|
||||
p2p-host="192.168.11.172"
|
||||
p2p-port=30303
|
||||
max-peers=32
|
||||
max-peers=40
|
||||
discovery-enabled=true
|
||||
|
||||
# RPC - Full Function (can deploy contracts, execute writes)
|
||||
# RPC - Permissioned / private (no ADMIN)
|
||||
rpc-http-enabled=true
|
||||
rpc-http-host="0.0.0.0"
|
||||
rpc-http-port=8545
|
||||
rpc-http-api=["ETH","NET","WEB3","ADMIN","PERSONAL","MINER","DEBUG"]
|
||||
rpc-http-api=["ETH","NET","WEB3","TXPOOL","QBFT","DEBUG","TRACE"]
|
||||
rpc-http-cors-origins=["*"]
|
||||
rpc-http-api-enable-unsafe-txsigning=true
|
||||
|
||||
rpc-ws-enabled=true
|
||||
rpc-ws-host="0.0.0.0"
|
||||
rpc-ws-port=8546
|
||||
rpc-ws-api=["ETH","NET","WEB3","ADMIN","PERSONAL","MINER","DEBUG"]
|
||||
rpc-ws-api=["ETH","NET","WEB3","TXPOOL","QBFT"]
|
||||
|
||||
# GraphQL
|
||||
graphql-http-enabled=true
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Besu Configuration for besu-rpc-alltra-2 (VMID: 2501)
|
||||
# Type: Standard Base RPC Node (Read-only, Public Services)
|
||||
# Besu Configuration for besu-rpc-alltra-2 (legacy filename, live VMID: 2430)
|
||||
# Type: Permissioned / Private RPC Node
|
||||
# Generated: Fri Jan 23 22:33:18 PST 2026
|
||||
|
||||
data-path="/data/besu"
|
||||
@@ -9,14 +9,14 @@ genesis-file=""
|
||||
network-id=138
|
||||
p2p-host="192.168.11.173"
|
||||
p2p-port=30303
|
||||
max-peers=32
|
||||
max-peers=40
|
||||
discovery-enabled=true
|
||||
|
||||
# RPC - Standard Base (read-only, no admin APIs)
|
||||
# RPC - Permissioned / private (no ADMIN)
|
||||
rpc-http-enabled=true
|
||||
rpc-http-host="0.0.0.0"
|
||||
rpc-http-port=8545
|
||||
rpc-http-api=["ETH","NET","WEB3"]
|
||||
rpc-http-api=["ETH","NET","WEB3","TXPOOL","QBFT","DEBUG","TRACE"]
|
||||
rpc-http-cors-origins=["*"]
|
||||
# NO unsafe tx signing
|
||||
# NO ADMIN/PERSONAL/MINER/DEBUG APIs
|
||||
@@ -24,7 +24,7 @@ rpc-http-cors-origins=["*"]
|
||||
rpc-ws-enabled=true
|
||||
rpc-ws-host="0.0.0.0"
|
||||
rpc-ws-port=8546
|
||||
rpc-ws-api=["ETH","NET","WEB3"]
|
||||
rpc-ws-api=["ETH","NET","WEB3","TXPOOL","QBFT"]
|
||||
|
||||
# GraphQL
|
||||
graphql-http-enabled=true
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Besu Configuration for besu-rpc-alltra-3 (VMID: 2502)
|
||||
# Type: Standard Base RPC Node (Read-only, Public Services)
|
||||
# Besu Configuration for besu-rpc-alltra-3 (legacy filename, live VMID: 2440)
|
||||
# Type: Permissioned / Private RPC Node
|
||||
# Generated: Fri Jan 23 22:33:18 PST 2026
|
||||
|
||||
data-path="/data/besu"
|
||||
@@ -9,14 +9,14 @@ genesis-file=""
|
||||
network-id=138
|
||||
p2p-host="192.168.11.174"
|
||||
p2p-port=30303
|
||||
max-peers=32
|
||||
max-peers=40
|
||||
discovery-enabled=true
|
||||
|
||||
# RPC - Standard Base (read-only, no admin APIs)
|
||||
# RPC - Permissioned / private (no ADMIN)
|
||||
rpc-http-enabled=true
|
||||
rpc-http-host="0.0.0.0"
|
||||
rpc-http-port=8545
|
||||
rpc-http-api=["ETH","NET","WEB3"]
|
||||
rpc-http-api=["ETH","NET","WEB3","TXPOOL","QBFT","DEBUG","TRACE"]
|
||||
rpc-http-cors-origins=["*"]
|
||||
# NO unsafe tx signing
|
||||
# NO ADMIN/PERSONAL/MINER/DEBUG APIs
|
||||
@@ -24,7 +24,7 @@ rpc-http-cors-origins=["*"]
|
||||
rpc-ws-enabled=true
|
||||
rpc-ws-host="0.0.0.0"
|
||||
rpc-ws-port=8546
|
||||
rpc-ws-api=["ETH","NET","WEB3"]
|
||||
rpc-ws-api=["ETH","NET","WEB3","TXPOOL","QBFT"]
|
||||
|
||||
# GraphQL
|
||||
graphql-http-enabled=true
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Besu Configuration for besu-rpc-hybx-1 (VMID: 2503)
|
||||
# Type: Full Function RPC Node
|
||||
# Besu Configuration for besu-rpc-hybx-1 (legacy filename, live VMID: 2460)
|
||||
# Type: Permissioned / Private RPC Node
|
||||
# Generated: Fri Jan 23 22:33:18 PST 2026
|
||||
|
||||
data-path="/data/besu"
|
||||
@@ -9,21 +9,20 @@ genesis-file=""
|
||||
network-id=138
|
||||
p2p-host="192.168.11.246"
|
||||
p2p-port=30303
|
||||
max-peers=32
|
||||
max-peers=40
|
||||
discovery-enabled=true
|
||||
|
||||
# RPC - Full Function (can deploy contracts, execute writes)
|
||||
# RPC - Permissioned / private (no ADMIN)
|
||||
rpc-http-enabled=true
|
||||
rpc-http-host="0.0.0.0"
|
||||
rpc-http-port=8545
|
||||
rpc-http-api=["ETH","NET","WEB3","ADMIN","PERSONAL","MINER","DEBUG"]
|
||||
rpc-http-api=["ETH","NET","WEB3","TXPOOL","QBFT","DEBUG","TRACE"]
|
||||
rpc-http-cors-origins=["*"]
|
||||
rpc-http-api-enable-unsafe-txsigning=true
|
||||
|
||||
rpc-ws-enabled=true
|
||||
rpc-ws-host="0.0.0.0"
|
||||
rpc-ws-port=8546
|
||||
rpc-ws-api=["ETH","NET","WEB3","ADMIN","PERSONAL","MINER","DEBUG"]
|
||||
rpc-ws-api=["ETH","NET","WEB3","TXPOOL","QBFT"]
|
||||
|
||||
# GraphQL
|
||||
graphql-http-enabled=true
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Besu Configuration for besu-rpc-hybx-2 (VMID: 2504)
|
||||
# Type: Standard Base RPC Node (Read-only, Public Services)
|
||||
# Besu Configuration for besu-rpc-hybx-2 (legacy filename, live VMID: 2470)
|
||||
# Type: Permissioned / Private RPC Node
|
||||
# Generated: Fri Jan 23 22:33:18 PST 2026
|
||||
|
||||
data-path="/data/besu"
|
||||
@@ -9,14 +9,14 @@ genesis-file=""
|
||||
network-id=138
|
||||
p2p-host="192.168.11.247"
|
||||
p2p-port=30303
|
||||
max-peers=32
|
||||
max-peers=40
|
||||
discovery-enabled=true
|
||||
|
||||
# RPC - Standard Base (read-only, no admin APIs)
|
||||
# RPC - Permissioned / private (no ADMIN)
|
||||
rpc-http-enabled=true
|
||||
rpc-http-host="0.0.0.0"
|
||||
rpc-http-port=8545
|
||||
rpc-http-api=["ETH","NET","WEB3"]
|
||||
rpc-http-api=["ETH","NET","WEB3","TXPOOL","QBFT","DEBUG","TRACE"]
|
||||
rpc-http-cors-origins=["*"]
|
||||
# NO unsafe tx signing
|
||||
# NO ADMIN/PERSONAL/MINER/DEBUG APIs
|
||||
@@ -24,7 +24,7 @@ rpc-http-cors-origins=["*"]
|
||||
rpc-ws-enabled=true
|
||||
rpc-ws-host="0.0.0.0"
|
||||
rpc-ws-port=8546
|
||||
rpc-ws-api=["ETH","NET","WEB3"]
|
||||
rpc-ws-api=["ETH","NET","WEB3","TXPOOL","QBFT"]
|
||||
|
||||
# GraphQL
|
||||
graphql-http-enabled=true
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Besu Configuration for besu-rpc-hybx-3 (VMID: 2505)
|
||||
# Type: Standard Base RPC Node (Read-only, Public Services)
|
||||
# Besu Configuration for besu-rpc-hybx-3 (legacy filename, live VMID: 2480)
|
||||
# Type: Permissioned / Private RPC Node
|
||||
# Generated: Fri Jan 23 22:33:18 PST 2026
|
||||
|
||||
data-path="/data/besu"
|
||||
@@ -9,14 +9,14 @@ genesis-file=""
|
||||
network-id=138
|
||||
p2p-host="192.168.11.248"
|
||||
p2p-port=30303
|
||||
max-peers=32
|
||||
max-peers=40
|
||||
discovery-enabled=true
|
||||
|
||||
# RPC - Standard Base (read-only, no admin APIs)
|
||||
# RPC - Permissioned / private (no ADMIN)
|
||||
rpc-http-enabled=true
|
||||
rpc-http-host="0.0.0.0"
|
||||
rpc-http-port=8545
|
||||
rpc-http-api=["ETH","NET","WEB3"]
|
||||
rpc-http-api=["ETH","NET","WEB3","TXPOOL","QBFT","DEBUG","TRACE"]
|
||||
rpc-http-cors-origins=["*"]
|
||||
# NO unsafe tx signing
|
||||
# NO ADMIN/PERSONAL/MINER/DEBUG APIs
|
||||
@@ -24,7 +24,7 @@ rpc-http-cors-origins=["*"]
|
||||
rpc-ws-enabled=true
|
||||
rpc-ws-host="0.0.0.0"
|
||||
rpc-ws-port=8546
|
||||
rpc-ws-api=["ETH","NET","WEB3"]
|
||||
rpc-ws-api=["ETH","NET","WEB3","TXPOOL","QBFT"]
|
||||
|
||||
# GraphQL
|
||||
graphql-http-enabled=true
|
||||
|
||||
5
config/gitea/dbis-ci-template/README.md
Normal file
5
config/gitea/dbis-ci-template/README.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# DBIS Gitea CI template
|
||||
|
||||
Copy `example-workflow.yml` into a repository as `.gitea/workflows/ci.yml`.
|
||||
|
||||
Gitea Actions availability depends on server configuration; if Actions are disabled, use external CI (e.g. Drone, Jenkins) with the same stages: checkout → install → lint → test → build.
|
||||
25
config/gitea/dbis-ci-template/example-workflow.yml
Normal file
25
config/gitea/dbis-ci-template/example-workflow.yml
Normal file
@@ -0,0 +1,25 @@
|
||||
# Gitea Actions — example CI for DBIS ecosystem repos
|
||||
# Path in repo: .gitea/workflows/ci.yml (adjust for your Gitea version)
|
||||
name: ci
|
||||
on:
|
||||
push:
|
||||
branches: [main, master]
|
||||
pull_request:
|
||||
branches: [main, master]
|
||||
jobs:
|
||||
build:
|
||||
runs-on: docker
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "20"
|
||||
- name: Install
|
||||
run: npm ci || pnpm install --frozen-lockfile || yarn install --frozen-lockfile
|
||||
- name: Lint
|
||||
run: npm run lint --if-present
|
||||
- name: Test
|
||||
run: npm test --if-present
|
||||
- name: Build
|
||||
run: npm run build --if-present
|
||||
706
config/gru-global-priority-currency-rollout.json
Normal file
706
config/gru-global-priority-currency-rollout.json
Normal file
@@ -0,0 +1,706 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"name": "GRU Global Priority Cross-Chain Rollout",
|
||||
"version": "1.0.0",
|
||||
"updated": "2026-04-03",
|
||||
"canonicalChainId": 138,
|
||||
"desiredDestinationNetworks": {
|
||||
"evmPublicCwMeshChainIds": [
|
||||
1,
|
||||
10,
|
||||
25,
|
||||
56,
|
||||
100,
|
||||
137,
|
||||
42161,
|
||||
42220,
|
||||
43114,
|
||||
8453,
|
||||
1111
|
||||
],
|
||||
"altEvmPrograms": [
|
||||
{
|
||||
"chainId": 651940,
|
||||
"name": "ALL Mainnet (Alltra)",
|
||||
"classification": "custom_alt_bridge",
|
||||
"status": "live"
|
||||
},
|
||||
{
|
||||
"chainId": 42793,
|
||||
"name": "Etherlink",
|
||||
"classification": "feature_gated_evm_target",
|
||||
"status": "planned"
|
||||
}
|
||||
],
|
||||
"nonEvmRelayPrograms": [
|
||||
{
|
||||
"identifier": "Solana",
|
||||
"vmKind": "SVM",
|
||||
"classification": "desired_non_evm_target",
|
||||
"status": "planned_relay_dependent",
|
||||
"notes": "Track under token-mapping-multichain.json -> nonEvmNetworks. Requires an SPL or bridge-wrapped cW representation before live GRU transport can be enabled."
|
||||
}
|
||||
],
|
||||
"notes": [
|
||||
"The default mirrored-asset rollout surface remains the public EVM cW mesh.",
|
||||
"ALL Mainnet and Etherlink are separate bridge programs, not rows in the default EVM cW pool mesh.",
|
||||
"Truth and Tron remain separate adapter programs rather than default GRU cW rollout targets."
|
||||
]
|
||||
},
|
||||
"notes": "Planning queue for globally important fiat, commodity, and monetary-unit assets that may be onboarded into GRU as canonical c* on Chain 138 and mirrored cW* on destination chains. This file does not itself activate support; live support is still controlled by gru-iso4217-currency-manifest.json, gru-transport-active.json, and deployed cW addresses in token-mapping-multichain.json.",
|
||||
"symbolConvention": {
|
||||
"defaultFiatPrimaryForm": "coin",
|
||||
"defaultFiatCanonicalPattern": "c<ISO>C",
|
||||
"defaultFiatWrappedPattern": "cW<ISO>C",
|
||||
"defaultCommodityPrimaryForm": "coin",
|
||||
"defaultCommodityCanonicalPattern": "c<CODE>C",
|
||||
"defaultCommodityWrappedPattern": "cW<CODE>C",
|
||||
"dualFormExceptions": [
|
||||
"USD",
|
||||
"EUR",
|
||||
"GBP",
|
||||
"XAU"
|
||||
],
|
||||
"assumptions": [
|
||||
"Currencies without a live or canonical token form default to a coin-style c<ISO>C symbol until governance chooses a paired token form.",
|
||||
"USD keeps the existing dual cUSDC/cUSDT pattern, and EUR/GBP/XAU keep their current dual-form conventions.",
|
||||
"Meta-units such as XDR and XAG are modeled as governance-approved monetary units using the same c*/cW* naming discipline."
|
||||
]
|
||||
},
|
||||
"waves": [
|
||||
{
|
||||
"id": "wave0",
|
||||
"name": "Live GRU Transport Baseline",
|
||||
"goal": "Keep the current USD transport and x402 path healthy while GRU v2 promotion continues."
|
||||
},
|
||||
{
|
||||
"id": "wave1",
|
||||
"name": "Promote Existing Canonical Chain 138 Assets",
|
||||
"goal": "Finish cW deployment, reserve wiring, and transport activation for the already-deployed non-USD GRU assets on Chain 138."
|
||||
},
|
||||
{
|
||||
"id": "wave2",
|
||||
"name": "Add Remaining Tier 1-3 Fiat Corridors",
|
||||
"goal": "Deploy new canonical c* assets on Chain 138 for the next highest-priority globally important fiat currencies, then mirror them as cW*."
|
||||
},
|
||||
{
|
||||
"id": "wave3",
|
||||
"name": "Add Tier 4 and Meta-Unit Coverage",
|
||||
"goal": "Extend the corridor set to secondary emerging currencies plus monetary-unit references such as XDR and XAG."
|
||||
}
|
||||
],
|
||||
"assets": [
|
||||
{
|
||||
"code": "USD",
|
||||
"name": "US Dollar",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 1",
|
||||
"rank": 1,
|
||||
"wave": "wave0",
|
||||
"repoTargetState": "live_transport",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cUSDC",
|
||||
"wrappedSymbol": "cWUSDC"
|
||||
},
|
||||
{
|
||||
"form": "token",
|
||||
"canonicalSymbol": "cUSDT",
|
||||
"wrappedSymbol": "cWUSDT"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "EUR",
|
||||
"name": "Euro",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 1",
|
||||
"rank": 2,
|
||||
"wave": "wave1",
|
||||
"repoTargetState": "canonical_then_transport",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cEURC",
|
||||
"wrappedSymbol": "cWEURC"
|
||||
},
|
||||
{
|
||||
"form": "token",
|
||||
"canonicalSymbol": "cEURT",
|
||||
"wrappedSymbol": "cWEURT"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "JPY",
|
||||
"name": "Japanese Yen",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 1",
|
||||
"rank": 3,
|
||||
"wave": "wave1",
|
||||
"repoTargetState": "canonical_then_transport",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cJPYC",
|
||||
"wrappedSymbol": "cWJPYC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "GBP",
|
||||
"name": "Pound Sterling",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 1",
|
||||
"rank": 4,
|
||||
"wave": "wave1",
|
||||
"repoTargetState": "canonical_then_transport",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cGBPC",
|
||||
"wrappedSymbol": "cWGBPC"
|
||||
},
|
||||
{
|
||||
"form": "token",
|
||||
"canonicalSymbol": "cGBPT",
|
||||
"wrappedSymbol": "cWGBPT"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "CNY",
|
||||
"name": "Chinese Yuan (Renminbi)",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 1",
|
||||
"rank": 5,
|
||||
"wave": "wave2",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cCNYC",
|
||||
"wrappedSymbol": "cWCNYC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "AUD",
|
||||
"name": "Australian Dollar",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 2",
|
||||
"rank": 6,
|
||||
"wave": "wave1",
|
||||
"repoTargetState": "canonical_then_transport",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cAUDC",
|
||||
"wrappedSymbol": "cWAUDC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "CAD",
|
||||
"name": "Canadian Dollar",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 2",
|
||||
"rank": 7,
|
||||
"wave": "wave1",
|
||||
"repoTargetState": "canonical_then_transport",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cCADC",
|
||||
"wrappedSymbol": "cWCADC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "CHF",
|
||||
"name": "Swiss Franc",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 2",
|
||||
"rank": 8,
|
||||
"wave": "wave1",
|
||||
"repoTargetState": "canonical_then_transport",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cCHFC",
|
||||
"wrappedSymbol": "cWCHFC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "HKD",
|
||||
"name": "Hong Kong Dollar",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 2",
|
||||
"rank": 9,
|
||||
"wave": "wave2",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cHKDC",
|
||||
"wrappedSymbol": "cWHKDC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "SGD",
|
||||
"name": "Singapore Dollar",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 2",
|
||||
"rank": 10,
|
||||
"wave": "wave2",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cSGDC",
|
||||
"wrappedSymbol": "cWSGDC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "SEK",
|
||||
"name": "Swedish Krona",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 2",
|
||||
"rank": 11,
|
||||
"wave": "wave2",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cSEKC",
|
||||
"wrappedSymbol": "cWSEKC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "KRW",
|
||||
"name": "South Korean Won",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 2",
|
||||
"rank": 12,
|
||||
"wave": "wave2",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cKRWC",
|
||||
"wrappedSymbol": "cWKRWC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "NOK",
|
||||
"name": "Norwegian Krone",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 2",
|
||||
"rank": 13,
|
||||
"wave": "wave2",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cNOKC",
|
||||
"wrappedSymbol": "cWNOKC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "NZD",
|
||||
"name": "New Zealand Dollar",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 2",
|
||||
"rank": 14,
|
||||
"wave": "wave2",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cNZDC",
|
||||
"wrappedSymbol": "cWNZDC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "INR",
|
||||
"name": "Indian Rupee",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 3",
|
||||
"rank": 15,
|
||||
"wave": "wave2",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cINRC",
|
||||
"wrappedSymbol": "cWINRC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "MXN",
|
||||
"name": "Mexican Peso",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 3",
|
||||
"rank": 16,
|
||||
"wave": "wave2",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cMXNC",
|
||||
"wrappedSymbol": "cWMXNC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "BRL",
|
||||
"name": "Brazilian Real",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 3",
|
||||
"rank": 17,
|
||||
"wave": "wave2",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cBRLC",
|
||||
"wrappedSymbol": "cWBRLC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "ZAR",
|
||||
"name": "South African Rand",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 3",
|
||||
"rank": 18,
|
||||
"wave": "wave2",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cZARC",
|
||||
"wrappedSymbol": "cWZARC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "TRY",
|
||||
"name": "Turkish Lira",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 3",
|
||||
"rank": 19,
|
||||
"wave": "wave2",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cTRYC",
|
||||
"wrappedSymbol": "cWTRYC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "AED",
|
||||
"name": "UAE Dirham",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 3",
|
||||
"rank": 20,
|
||||
"wave": "wave2",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cAEDC",
|
||||
"wrappedSymbol": "cWAEDC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "SAR",
|
||||
"name": "Saudi Riyal",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 3",
|
||||
"rank": 21,
|
||||
"wave": "wave2",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cSARC",
|
||||
"wrappedSymbol": "cWSARC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "PLN",
|
||||
"name": "Polish Zloty",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 3",
|
||||
"rank": 22,
|
||||
"wave": "wave2",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cPLNC",
|
||||
"wrappedSymbol": "cWPLNC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "THB",
|
||||
"name": "Thai Baht",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 3",
|
||||
"rank": 23,
|
||||
"wave": "wave2",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cTHBC",
|
||||
"wrappedSymbol": "cWTHBC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "IDR",
|
||||
"name": "Indonesian Rupiah",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 3",
|
||||
"rank": 24,
|
||||
"wave": "wave2",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cIDRC",
|
||||
"wrappedSymbol": "cWIDRC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "MYR",
|
||||
"name": "Malaysian Ringgit",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 4",
|
||||
"rank": 25,
|
||||
"wave": "wave3",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cMYRC",
|
||||
"wrappedSymbol": "cWMYRC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "PHP",
|
||||
"name": "Philippine Peso",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 4",
|
||||
"rank": 26,
|
||||
"wave": "wave3",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cPHPC",
|
||||
"wrappedSymbol": "cWPHPC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "VND",
|
||||
"name": "Vietnamese Dong",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 4",
|
||||
"rank": 27,
|
||||
"wave": "wave3",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cVNDC",
|
||||
"wrappedSymbol": "cWVNDC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "EGP",
|
||||
"name": "Egyptian Pound",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 4",
|
||||
"rank": 28,
|
||||
"wave": "wave3",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cEGPC",
|
||||
"wrappedSymbol": "cWEGPC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "CLP",
|
||||
"name": "Chilean Peso",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 4",
|
||||
"rank": 29,
|
||||
"wave": "wave3",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cCLPC",
|
||||
"wrappedSymbol": "cWCLPC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "COP",
|
||||
"name": "Colombian Peso",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 4",
|
||||
"rank": 30,
|
||||
"wave": "wave3",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cCOPC",
|
||||
"wrappedSymbol": "cWCOPC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "PKR",
|
||||
"name": "Pakistani Rupee",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 4",
|
||||
"rank": 31,
|
||||
"wave": "wave3",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cPKRC",
|
||||
"wrappedSymbol": "cWPKRC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "BDT",
|
||||
"name": "Bangladeshi Taka",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 4",
|
||||
"rank": 32,
|
||||
"wave": "wave3",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cBDTC",
|
||||
"wrappedSymbol": "cWBDTC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "KES",
|
||||
"name": "Kenyan Shilling",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 4",
|
||||
"rank": 33,
|
||||
"wave": "wave3",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cKESC",
|
||||
"wrappedSymbol": "cWKESC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "NGN",
|
||||
"name": "Nigerian Naira",
|
||||
"category": "fiat",
|
||||
"tier": "Tier 4",
|
||||
"rank": 34,
|
||||
"wave": "wave3",
|
||||
"repoTargetState": "new_currency_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cNGNC",
|
||||
"wrappedSymbol": "cWNGNC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "XDR",
|
||||
"name": "IMF Special Drawing Rights",
|
||||
"category": "monetary_unit",
|
||||
"tier": "Special",
|
||||
"rank": 35,
|
||||
"wave": "wave3",
|
||||
"repoTargetState": "meta_unit_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cXDRC",
|
||||
"wrappedSymbol": "cWXDRC"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "XAU",
|
||||
"name": "Gold",
|
||||
"category": "commodity",
|
||||
"tier": "Special",
|
||||
"rank": 36,
|
||||
"wave": "wave1",
|
||||
"repoTargetState": "canonical_then_transport",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cXAUC",
|
||||
"wrappedSymbol": "cWXAUC"
|
||||
},
|
||||
{
|
||||
"form": "token",
|
||||
"canonicalSymbol": "cXAUT",
|
||||
"wrappedSymbol": "cWXAUT"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "XAG",
|
||||
"name": "Silver",
|
||||
"category": "commodity",
|
||||
"tier": "Special",
|
||||
"rank": 37,
|
||||
"wave": "wave3",
|
||||
"repoTargetState": "meta_unit_rollout",
|
||||
"tokenForms": [
|
||||
{
|
||||
"form": "coin",
|
||||
"canonicalSymbol": "cXAGC",
|
||||
"wrappedSymbol": "cWXAGC"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
126
config/gru-governance-supervision-profile.json
Normal file
126
config/gru-governance-supervision-profile.json
Normal file
@@ -0,0 +1,126 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"name": "GRU Governance and Supervision Profile",
|
||||
"profileId": "gru-jurisdictional-storage-governance-supervision",
|
||||
"version": "1.0.0",
|
||||
"updated": "2026-03-31",
|
||||
"notes": "Machine-readable policy profile for asset storage namespaces, governance-controller-only metadata execution, emergency/manual admin overrides, asset-scoped jurisdiction review, supervision metadata, and upgrade notice periods across c*, cW*, GRU base components, and tokenized assets.",
|
||||
"references": {
|
||||
"standardsProfile": "config/gru-standards-profile.json",
|
||||
"storageGovernanceDoc": "docs/04-configuration/GRU_STORAGE_GOVERNANCE_AND_SUPERVISION_STANDARD.md",
|
||||
"governanceDoc": "gru-docs/_core/04_GRU_Governance_Regulatory_Oversight.md",
|
||||
"diamondSpecDoc": "docs/04-configuration/GRU_M00_DIAMOND_INSTITUTIONAL_SPEC.md"
|
||||
},
|
||||
"requiredAssetMetadata": [
|
||||
"assetId",
|
||||
"assetVersionId",
|
||||
"governanceProfileId",
|
||||
"supervisionProfileId",
|
||||
"storageNamespace",
|
||||
"primaryJurisdiction",
|
||||
"regulatoryDisclosureURI",
|
||||
"reportingURI",
|
||||
"canonicalUnderlyingAsset",
|
||||
"supervisionRequired",
|
||||
"governmentApprovalRequired",
|
||||
"minimumUpgradeNoticePeriod"
|
||||
],
|
||||
"roles": {
|
||||
"tokenRoles": [
|
||||
"DEFAULT_ADMIN_ROLE",
|
||||
"MINTER_ROLE",
|
||||
"BURNER_ROLE",
|
||||
"PAUSER_ROLE",
|
||||
"BRIDGE_ROLE",
|
||||
"SUPPLY_ADMIN_ROLE",
|
||||
"METADATA_ADMIN_ROLE",
|
||||
"GOVERNANCE_ROLE",
|
||||
"JURISDICTION_ADMIN_ROLE",
|
||||
"REGULATOR_ROLE",
|
||||
"SUPERVISOR_ROLE",
|
||||
"EMERGENCY_ADMIN_ROLE"
|
||||
],
|
||||
"registryRoles": [
|
||||
"DEFAULT_ADMIN_ROLE",
|
||||
"REGISTRAR_ROLE",
|
||||
"PROPOSER_ROLE",
|
||||
"VALIDATOR_ROLE",
|
||||
"UPGRADER_ROLE",
|
||||
"JURISDICTION_MANAGER_ROLE",
|
||||
"REGULATOR_ROLE",
|
||||
"SUPERVISOR_ROLE",
|
||||
"EMERGENCY_ADMIN_ROLE"
|
||||
],
|
||||
"governanceRoles": [
|
||||
"DEFAULT_ADMIN_ROLE",
|
||||
"PROPOSER_ROLE",
|
||||
"EXECUTOR_ROLE",
|
||||
"CANCELLER_ROLE",
|
||||
"UPGRADER_ROLE"
|
||||
]
|
||||
},
|
||||
"storageNamespaces": {
|
||||
"canonicalCStarPattern": "gru.storage.asset.<symbol>.<version>",
|
||||
"wrappedCWStarPattern": "gru.storage.transport.<symbol>",
|
||||
"registryPattern": "gru.storage.registry.<symbol>",
|
||||
"diamondNamespaces": [
|
||||
"grc.storage.monetary",
|
||||
"grc.storage.index",
|
||||
"grc.storage.bond",
|
||||
"grc.storage.gov",
|
||||
"grc.storage.audit",
|
||||
"grc.storage.access",
|
||||
"grc.storage.pause",
|
||||
"grc.storage.triang",
|
||||
"grc.storage.reentrancy"
|
||||
]
|
||||
},
|
||||
"proposalPolicy": {
|
||||
"assetScopeRequiredForUpgradeSensitiveChanges": true,
|
||||
"jurisdictionDerivedFromRegistryAssetState": true,
|
||||
"queueRequiresJurisdictionApprovalWhenFlagged": true,
|
||||
"jurisdictionTransitionRequiresBothAuthorities": true,
|
||||
"defaultMinimumUpgradeNoticePeriodSeconds": 604800,
|
||||
"approvalSource": "UniversalAssetRegistry.jurisdictionAuthorities",
|
||||
"proposalEntryPoint": "GovernanceController.proposeForAsset",
|
||||
"jurisdictionPolicyEntryPoints": [
|
||||
"UniversalAssetRegistry.setDerivedJurisdictionProfile",
|
||||
"UniversalAssetRegistry.setDerivedJurisdictionAuthority"
|
||||
],
|
||||
"metadataExecutionSurface": "GovernanceController.execute -> token/registry governanceController-only setters",
|
||||
"manualJurisdictionTaggingAllowed": false,
|
||||
"minimumReviewData": [
|
||||
"jurisdictionId",
|
||||
"reviewRequired",
|
||||
"minimumNoticePeriod"
|
||||
]
|
||||
},
|
||||
"emergencyPolicy": {
|
||||
"manualAdminPathsRemainAvailable": true,
|
||||
"authorizedRoles": [
|
||||
"EMERGENCY_ADMIN_ROLE"
|
||||
],
|
||||
"intendedUse": "Emergency remediation, regulator-directed manual intervention, and bootstrap configuration before governance is fully wired."
|
||||
},
|
||||
"jurisdictionDefaults": {
|
||||
"supervisionRequiredDefault": true,
|
||||
"governmentApprovalRequiredDefault": false,
|
||||
"periodicReportingRecommended": true,
|
||||
"primaryEvidenceFields": [
|
||||
"policyHash",
|
||||
"supervisionURI",
|
||||
"regulatoryDisclosureURI",
|
||||
"reportingURI"
|
||||
]
|
||||
},
|
||||
"implementationSurface": {
|
||||
"canonicalTokens": [
|
||||
"smom-dbis-138/contracts/tokens/CompliantFiatTokenV2.sol"
|
||||
],
|
||||
"wrappedTokens": [
|
||||
"smom-dbis-138/contracts/tokens/CompliantWrappedToken.sol"
|
||||
],
|
||||
"registry": "smom-dbis-138/contracts/registry/UniversalAssetRegistry.sol",
|
||||
"governance": "smom-dbis-138/contracts/governance/GovernanceController.sol"
|
||||
}
|
||||
}
|
||||
350
config/gru-iso4217-currency-manifest.json
Normal file
350
config/gru-iso4217-currency-manifest.json
Normal file
@@ -0,0 +1,350 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"name": "GRU ISO-4217 Currency Manifest",
|
||||
"version": "1.0.0",
|
||||
"updated": "2026-04-07",
|
||||
"canonicalChainId": 138,
|
||||
"standardsProfileRef": "config/gru-standards-profile.json",
|
||||
"coverage": {
|
||||
"appliesToCurrentAndFutureCurrencies": true,
|
||||
"targetUniverse": [
|
||||
"all ISO-4217 fiat currencies adopted into GRU",
|
||||
"governance-approved commodities and additional monetary units",
|
||||
"designator-specific ecosystem extensions such as Alltra/AUSDT and D-WIN/USDW that settle into canonical Chain 138 c* assets"
|
||||
],
|
||||
"transportMethodology": "Chain 138 canonical c* with mirrored cW* transport on compatible public chains"
|
||||
},
|
||||
"notes": "Canonical GRU-supported ISO-4217 and commodity currency set for c* and cW* onboarding, routing, explorer metadata, and FX integration. This is the machine-readable source of truth for supported currencies, token families, lifecycle state, canonical logo assignment, and USD ecosystem extensions that land on Chain 138 as c* assets.",
|
||||
"currencies": [
|
||||
{
|
||||
"code": "USD",
|
||||
"name": "US Dollar",
|
||||
"type": "fiat",
|
||||
"minorUnits": 2,
|
||||
"status": {
|
||||
"planned": true,
|
||||
"deployed": true,
|
||||
"transportActive": true,
|
||||
"x402Ready": true
|
||||
},
|
||||
"canonicalAssets": {
|
||||
"coin": {
|
||||
"symbol": "cUSDC",
|
||||
"v1Address": "0xf22258f57794CC8E06237084b353Ab30fFfa640b",
|
||||
"v2Address": "0x219522c60e83dEe01FC5b0329d6fA8fD84b9D13d",
|
||||
"activeVersion": "v1",
|
||||
"canonicalForwardVersion": "v2",
|
||||
"canonicalForwardAddress": "0x219522c60e83dEe01FC5b0329d6fA8fD84b9D13d",
|
||||
"liquidityActiveVersion": "v1",
|
||||
"transportActiveVersion": "v1",
|
||||
"x402PreferredVersion": "v2",
|
||||
"logoURI": "https://explorer.d-bis.org/token-icons/cUSDC.png"
|
||||
},
|
||||
"token": {
|
||||
"symbol": "cUSDT",
|
||||
"v1Address": "0x93E66202A11B1772E55407B32B44e5Cd8eda7f22",
|
||||
"v2Address": "0x9FBfab33882Efe0038DAa608185718b772EE5660",
|
||||
"activeVersion": "v1",
|
||||
"canonicalForwardVersion": "v2",
|
||||
"canonicalForwardAddress": "0x9FBfab33882Efe0038DAa608185718b772EE5660",
|
||||
"liquidityActiveVersion": "v1",
|
||||
"transportActiveVersion": "v1",
|
||||
"x402PreferredVersion": "v2",
|
||||
"logoURI": "https://explorer.d-bis.org/token-icons/cUSDT.png"
|
||||
}
|
||||
},
|
||||
"wrappedAssets": {
|
||||
"coin": "cWUSDC",
|
||||
"token": "cWUSDT"
|
||||
},
|
||||
"ecosystemExtensions": {
|
||||
"alltra": {
|
||||
"originNetwork": {
|
||||
"chainId": 651940,
|
||||
"name": "ALL Mainnet (Alltra)",
|
||||
"originSymbol": "AUSDT"
|
||||
},
|
||||
"canonicalAsset": {
|
||||
"symbol": "cAUSDT",
|
||||
"address": "0x5fdDF65733e3d590463F68f93Cf16E8c04081271",
|
||||
"activeVersion": "v1",
|
||||
"transportMethodology": "AUSDT originates on ALL Mainnet, may mirror through public-chain cWAUSDT, and lands canonically on Chain 138 as cAUSDT."
|
||||
},
|
||||
"wrappedAsset": {
|
||||
"symbol": "cWAUSDT",
|
||||
"status": "live_selected_public_chains"
|
||||
},
|
||||
"status": {
|
||||
"planned": true,
|
||||
"deployed": true,
|
||||
"transportActive": true,
|
||||
"x402Ready": false
|
||||
}
|
||||
},
|
||||
"dwin": {
|
||||
"originNetworks": [
|
||||
{
|
||||
"chainId": 56,
|
||||
"name": "BSC (BNB Chain)",
|
||||
"originSymbol": "USDW"
|
||||
},
|
||||
{
|
||||
"chainId": 137,
|
||||
"name": "Polygon",
|
||||
"originSymbol": "USDW"
|
||||
}
|
||||
],
|
||||
"canonicalAsset": {
|
||||
"symbol": "cUSDW",
|
||||
"address": "0xcA6BFa614935f1AB71c9aB106bAA6FBB6057095e",
|
||||
"activeVersion": "v1",
|
||||
"transportMethodology": "Native public USD DWIN locks into cWUSDW on supported public chains and bridges against the Chain 138 cUSDW hub asset."
|
||||
},
|
||||
"wrappedAsset": {
|
||||
"symbol": "cWUSDW",
|
||||
"status": "partial_transport"
|
||||
},
|
||||
"status": {
|
||||
"planned": true,
|
||||
"deployed": true,
|
||||
"transportActive": false,
|
||||
"x402Ready": false
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"code": "EUR",
|
||||
"name": "Euro",
|
||||
"type": "fiat",
|
||||
"minorUnits": 2,
|
||||
"status": {
|
||||
"planned": true,
|
||||
"deployed": true,
|
||||
"transportActive": false,
|
||||
"x402Ready": true
|
||||
},
|
||||
"canonicalAssets": {
|
||||
"coin": {
|
||||
"symbol": "cEURC",
|
||||
"address": "0x243e6581Dc8a98d98B92265858b322b193555C81",
|
||||
"v1Address": "0x8085961F9cF02b4d800A3c6d386D31da4B34266a",
|
||||
"v2Address": "0x243e6581Dc8a98d98B92265858b322b193555C81",
|
||||
"activeVersion": "v2",
|
||||
"canonicalForwardVersion": "v2",
|
||||
"canonicalForwardAddress": "0x243e6581Dc8a98d98B92265858b322b193555C81",
|
||||
"x402PreferredVersion": "v2",
|
||||
"logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cEURC.svg"
|
||||
},
|
||||
"token": {
|
||||
"symbol": "cEURT",
|
||||
"address": "0x2bAFA83d8fF8BaE9505511998987D0659791605B",
|
||||
"v1Address": "0xdf4b71c61E5912712C1Bdd451416B9aC26949d72",
|
||||
"v2Address": "0x2bAFA83d8fF8BaE9505511998987D0659791605B",
|
||||
"activeVersion": "v2",
|
||||
"canonicalForwardVersion": "v2",
|
||||
"canonicalForwardAddress": "0x2bAFA83d8fF8BaE9505511998987D0659791605B",
|
||||
"x402PreferredVersion": "v2",
|
||||
"logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cEURT.svg"
|
||||
}
|
||||
},
|
||||
"wrappedAssets": {
|
||||
"coin": "cWEURC",
|
||||
"token": "cWEURT"
|
||||
}
|
||||
},
|
||||
{
|
||||
"code": "GBP",
|
||||
"name": "Pound Sterling",
|
||||
"type": "fiat",
|
||||
"minorUnits": 2,
|
||||
"status": {
|
||||
"planned": true,
|
||||
"deployed": true,
|
||||
"transportActive": false,
|
||||
"x402Ready": true
|
||||
},
|
||||
"canonicalAssets": {
|
||||
"coin": {
|
||||
"symbol": "cGBPC",
|
||||
"address": "0x707508D223103f5D2d9EFBc656302c9d48878b29",
|
||||
"v1Address": "0x003960f16D9d34F2e98d62723B6721Fb92074aD2",
|
||||
"v2Address": "0x707508D223103f5D2d9EFBc656302c9d48878b29",
|
||||
"activeVersion": "v2",
|
||||
"canonicalForwardVersion": "v2",
|
||||
"canonicalForwardAddress": "0x707508D223103f5D2d9EFBc656302c9d48878b29",
|
||||
"x402PreferredVersion": "v2",
|
||||
"logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cGBPC.svg"
|
||||
},
|
||||
"token": {
|
||||
"symbol": "cGBPT",
|
||||
"address": "0xee17c18E10E55ce23F7457D018aAa2Fb1E64B281",
|
||||
"v1Address": "0x350f54e4D23795f86A9c03988c7135357CCaD97c",
|
||||
"v2Address": "0xee17c18E10E55ce23F7457D018aAa2Fb1E64B281",
|
||||
"activeVersion": "v2",
|
||||
"canonicalForwardVersion": "v2",
|
||||
"canonicalForwardAddress": "0xee17c18E10E55ce23F7457D018aAa2Fb1E64B281",
|
||||
"x402PreferredVersion": "v2",
|
||||
"logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cGBPT.svg"
|
||||
}
|
||||
},
|
||||
"wrappedAssets": {
|
||||
"coin": "cWGBPC",
|
||||
"token": "cWGBPT"
|
||||
}
|
||||
},
|
||||
{
|
||||
"code": "AUD",
|
||||
"name": "Australian Dollar",
|
||||
"type": "fiat",
|
||||
"minorUnits": 2,
|
||||
"status": {
|
||||
"planned": true,
|
||||
"deployed": true,
|
||||
"transportActive": false,
|
||||
"x402Ready": true
|
||||
},
|
||||
"canonicalAssets": {
|
||||
"coin": {
|
||||
"symbol": "cAUDC",
|
||||
"address": "0xfb37aFd415B70C5cEDc9bA58a72D517207b769Bb",
|
||||
"v1Address": "0xD51482e567c03899eecE3CAe8a058161FD56069D",
|
||||
"v2Address": "0xfb37aFd415B70C5cEDc9bA58a72D517207b769Bb",
|
||||
"activeVersion": "v2",
|
||||
"canonicalForwardVersion": "v2",
|
||||
"canonicalForwardAddress": "0xfb37aFd415B70C5cEDc9bA58a72D517207b769Bb",
|
||||
"x402PreferredVersion": "v2",
|
||||
"logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cAUDC.svg"
|
||||
}
|
||||
},
|
||||
"wrappedAssets": {
|
||||
"coin": "cWAUDC"
|
||||
}
|
||||
},
|
||||
{
|
||||
"code": "JPY",
|
||||
"name": "Japanese Yen",
|
||||
"type": "fiat",
|
||||
"minorUnits": 0,
|
||||
"status": {
|
||||
"planned": true,
|
||||
"deployed": true,
|
||||
"transportActive": false,
|
||||
"x402Ready": true
|
||||
},
|
||||
"canonicalAssets": {
|
||||
"coin": {
|
||||
"symbol": "cJPYC",
|
||||
"address": "0x2c751bBE4f299b989b3A8c333E0A966cdcA6Fd98",
|
||||
"v1Address": "0xEe269e1226a334182aace90056EE4ee5Cc8A6770",
|
||||
"v2Address": "0x2c751bBE4f299b989b3A8c333E0A966cdcA6Fd98",
|
||||
"activeVersion": "v2",
|
||||
"canonicalForwardVersion": "v2",
|
||||
"canonicalForwardAddress": "0x2c751bBE4f299b989b3A8c333E0A966cdcA6Fd98",
|
||||
"x402PreferredVersion": "v2",
|
||||
"logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cJPYC.svg"
|
||||
}
|
||||
},
|
||||
"wrappedAssets": {
|
||||
"coin": "cWJPYC"
|
||||
}
|
||||
},
|
||||
{
|
||||
"code": "CHF",
|
||||
"name": "Swiss Franc",
|
||||
"type": "fiat",
|
||||
"minorUnits": 2,
|
||||
"status": {
|
||||
"planned": true,
|
||||
"deployed": true,
|
||||
"transportActive": false,
|
||||
"x402Ready": true
|
||||
},
|
||||
"canonicalAssets": {
|
||||
"coin": {
|
||||
"symbol": "cCHFC",
|
||||
"address": "0x60B7FB8e0DD0Be8595AD12Fe80AE832861Be747c",
|
||||
"v1Address": "0x873990849DDa5117d7C644f0aF24370797C03885",
|
||||
"v2Address": "0x60B7FB8e0DD0Be8595AD12Fe80AE832861Be747c",
|
||||
"activeVersion": "v2",
|
||||
"canonicalForwardVersion": "v2",
|
||||
"canonicalForwardAddress": "0x60B7FB8e0DD0Be8595AD12Fe80AE832861Be747c",
|
||||
"x402PreferredVersion": "v2",
|
||||
"logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cCHFC.svg"
|
||||
}
|
||||
},
|
||||
"wrappedAssets": {
|
||||
"coin": "cWCHFC"
|
||||
}
|
||||
},
|
||||
{
|
||||
"code": "CAD",
|
||||
"name": "Canadian Dollar",
|
||||
"type": "fiat",
|
||||
"minorUnits": 2,
|
||||
"status": {
|
||||
"planned": true,
|
||||
"deployed": true,
|
||||
"transportActive": false,
|
||||
"x402Ready": true
|
||||
},
|
||||
"canonicalAssets": {
|
||||
"coin": {
|
||||
"symbol": "cCADC",
|
||||
"address": "0xe799033c87fE0CE316DAECcefBE3134CC74b76a9",
|
||||
"v1Address": "0x54dBd40cF05e15906A2C21f600937e96787f5679",
|
||||
"v2Address": "0xe799033c87fE0CE316DAECcefBE3134CC74b76a9",
|
||||
"activeVersion": "v2",
|
||||
"canonicalForwardVersion": "v2",
|
||||
"canonicalForwardAddress": "0xe799033c87fE0CE316DAECcefBE3134CC74b76a9",
|
||||
"x402PreferredVersion": "v2",
|
||||
"logoURI": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cCADC.svg"
|
||||
}
|
||||
},
|
||||
"wrappedAssets": {
|
||||
"coin": "cWCADC"
|
||||
}
|
||||
},
|
||||
{
|
||||
"code": "XAU",
|
||||
"name": "Gold",
|
||||
"type": "commodity",
|
||||
"minorUnits": null,
|
||||
"unitOfAccount": "troy_ounce",
|
||||
"status": {
|
||||
"planned": true,
|
||||
"deployed": true,
|
||||
"transportActive": false,
|
||||
"x402Ready": true
|
||||
},
|
||||
"canonicalAssets": {
|
||||
"coin": {
|
||||
"symbol": "cXAUC",
|
||||
"address": "0xF0F0F81bE3D033D8586bAfd2293e37eE2f615647",
|
||||
"v1Address": "0x290E52a8819A4fbD0714E517225429aA2B70EC6b",
|
||||
"v2Address": "0xF0F0F81bE3D033D8586bAfd2293e37eE2f615647",
|
||||
"activeVersion": "v2",
|
||||
"canonicalForwardVersion": "v2",
|
||||
"canonicalForwardAddress": "0xF0F0F81bE3D033D8586bAfd2293e37eE2f615647",
|
||||
"x402PreferredVersion": "v2",
|
||||
"logoURI": "https://explorer.d-bis.org/token-icons/cXAUC.png"
|
||||
},
|
||||
"token": {
|
||||
"symbol": "cXAUT",
|
||||
"address": "0x89477E982847023aaB5C3492082cd1bB4b1b9Ef1",
|
||||
"v1Address": "0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E",
|
||||
"v2Address": "0x89477E982847023aaB5C3492082cd1bB4b1b9Ef1",
|
||||
"activeVersion": "v2",
|
||||
"canonicalForwardVersion": "v2",
|
||||
"canonicalForwardAddress": "0x89477E982847023aaB5C3492082cd1bB4b1b9Ef1",
|
||||
"x402PreferredVersion": "v2",
|
||||
"logoURI": "https://explorer.d-bis.org/token-icons/cXAUT.png"
|
||||
}
|
||||
},
|
||||
"wrappedAssets": {
|
||||
"coin": "cWXAUC",
|
||||
"token": "cWXAUT"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
207
config/gru-monetary-unit-manifest.json
Normal file
207
config/gru-monetary-unit-manifest.json
Normal file
@@ -0,0 +1,207 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"name": "GRU Monetary Unit Manifest",
|
||||
"version": "1.0.0",
|
||||
"updated": "2026-04-07",
|
||||
"canonicalChainId": 138,
|
||||
"notes": "Machine-readable manifest for governance-approved GRU monetary units and gas-native transport families that are outside the ISO-4217 fiat/commodity manifest. These assets retain the c*/cW* naming discipline but are tracked through parallel registry families.",
|
||||
"gasNativeFamilies": [
|
||||
{
|
||||
"code": "ETH",
|
||||
"familyKey": "eth_mainnet",
|
||||
"type": "gas_native",
|
||||
"canonicalSymbol": "cETH",
|
||||
"wrappedSymbol": "cWETH",
|
||||
"mappingKey": "Compliant_ETH_MAINNET_cW",
|
||||
"registryFamily": "gas_native",
|
||||
"assetClass": "gas_native",
|
||||
"backingMode": "strict_escrow",
|
||||
"canonicalAddress": "0xf8e9802a1766422e33a269556ad5fc032338eefc",
|
||||
"ui": {
|
||||
"displayName": "Ethereum Mainnet Gas (Compliant)",
|
||||
"wrappedDisplayName": "Ethereum Mainnet Gas (Compliant Wrapped)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"code": "ETH",
|
||||
"familyKey": "eth_l2",
|
||||
"type": "gas_native",
|
||||
"canonicalSymbol": "cETHL2",
|
||||
"wrappedSymbol": "cWETHL2",
|
||||
"mappingKey": "Compliant_ETH_L2_cW",
|
||||
"registryFamily": "gas_native",
|
||||
"assetClass": "gas_native",
|
||||
"backingMode": "hybrid_cap",
|
||||
"canonicalAddress": "0x18a6b163d255cc0cb32b99697843b487d059907d",
|
||||
"ui": {
|
||||
"displayName": "Ethereum L2 Gas (Compliant)",
|
||||
"wrappedDisplayName": "Ethereum L2 Gas (Compliant Wrapped)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"code": "BNB",
|
||||
"familyKey": "bnb",
|
||||
"type": "gas_native",
|
||||
"canonicalSymbol": "cBNB",
|
||||
"wrappedSymbol": "cWBNB",
|
||||
"mappingKey": "Compliant_BNB_cW",
|
||||
"registryFamily": "gas_native",
|
||||
"assetClass": "gas_native",
|
||||
"backingMode": "hybrid_cap",
|
||||
"canonicalAddress": "0x94517875f32680984a5921da7abf78e22f65d70f",
|
||||
"ui": {
|
||||
"displayName": "BNB Gas (Compliant)",
|
||||
"wrappedDisplayName": "BNB Gas (Compliant Wrapped)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"code": "POL",
|
||||
"familyKey": "pol",
|
||||
"type": "gas_native",
|
||||
"canonicalSymbol": "cPOL",
|
||||
"wrappedSymbol": "cWPOL",
|
||||
"mappingKey": "Compliant_POL_cW",
|
||||
"registryFamily": "gas_native",
|
||||
"assetClass": "gas_native",
|
||||
"backingMode": "hybrid_cap",
|
||||
"canonicalAddress": "0x19fec21edede9edb91d1fbec7c4095c5ac1fc10c",
|
||||
"ui": {
|
||||
"displayName": "Polygon Gas (Compliant)",
|
||||
"wrappedDisplayName": "Polygon Gas (Compliant Wrapped)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"code": "AVAX",
|
||||
"familyKey": "avax",
|
||||
"type": "gas_native",
|
||||
"canonicalSymbol": "cAVAX",
|
||||
"wrappedSymbol": "cWAVAX",
|
||||
"mappingKey": "Compliant_AVAX_cW",
|
||||
"registryFamily": "gas_native",
|
||||
"assetClass": "gas_native",
|
||||
"backingMode": "hybrid_cap",
|
||||
"canonicalAddress": "0x9c8f6f4fe1e535e6f85a78ee95249ded5540a2d0",
|
||||
"ui": {
|
||||
"displayName": "Avalanche Gas (Compliant)",
|
||||
"wrappedDisplayName": "Avalanche Gas (Compliant Wrapped)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"code": "CRO",
|
||||
"familyKey": "cro",
|
||||
"type": "gas_native",
|
||||
"canonicalSymbol": "cCRO",
|
||||
"wrappedSymbol": "cWCRO",
|
||||
"mappingKey": "Compliant_CRO_cW",
|
||||
"registryFamily": "gas_native",
|
||||
"assetClass": "gas_native",
|
||||
"backingMode": "hybrid_cap",
|
||||
"canonicalAddress": "0xfb48bb6c623571f9795b535b73f0d660e8643fd4",
|
||||
"ui": {
|
||||
"displayName": "Cronos Gas (Compliant)",
|
||||
"wrappedDisplayName": "Cronos Gas (Compliant Wrapped)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"code": "XDAI",
|
||||
"familyKey": "xdai",
|
||||
"type": "gas_native",
|
||||
"canonicalSymbol": "cXDAI",
|
||||
"wrappedSymbol": "cWXDAI",
|
||||
"mappingKey": "Compliant_XDAI_cW",
|
||||
"registryFamily": "gas_native",
|
||||
"assetClass": "gas_native",
|
||||
"backingMode": "hybrid_cap",
|
||||
"canonicalAddress": "0xa39a59138f8a45b4a31455875b8a29ff31e76ec8",
|
||||
"ui": {
|
||||
"displayName": "xDAI Gas (Compliant)",
|
||||
"wrappedDisplayName": "xDAI Gas (Compliant Wrapped)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"code": "CELO",
|
||||
"familyKey": "celo",
|
||||
"type": "gas_native",
|
||||
"canonicalSymbol": "cCELO",
|
||||
"wrappedSymbol": "cWCELO",
|
||||
"mappingKey": "Compliant_CELO_cW",
|
||||
"registryFamily": "gas_native",
|
||||
"assetClass": "gas_native",
|
||||
"backingMode": "hybrid_cap",
|
||||
"canonicalAddress": "0x1814661dae0933bf397b1274f5a62411b94195c7",
|
||||
"ui": {
|
||||
"displayName": "Celo Gas (Compliant)",
|
||||
"wrappedDisplayName": "Celo Gas (Compliant Wrapped)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"code": "WEMIX",
|
||||
"familyKey": "wemix",
|
||||
"type": "gas_native",
|
||||
"canonicalSymbol": "cWEMIX",
|
||||
"wrappedSymbol": "cWWEMIX",
|
||||
"mappingKey": "Compliant_WEMIX_cW",
|
||||
"registryFamily": "gas_native",
|
||||
"assetClass": "gas_native",
|
||||
"backingMode": "hybrid_cap",
|
||||
"canonicalAddress": "0x4d82206bec5b4dfa17759ffede07e35f4f63a050",
|
||||
"ui": {
|
||||
"displayName": "WEMIX Hub Gas (Compliant)",
|
||||
"wrappedDisplayName": "WEMIX Gas (Compliant Wrapped)"
|
||||
}
|
||||
}
|
||||
],
|
||||
"monetaryUnits": [
|
||||
{
|
||||
"code": "BTC",
|
||||
"type": "monetary_unit",
|
||||
"canonicalSymbol": "cBTC",
|
||||
"wrappedSymbol": "cWBTC",
|
||||
"mappingKey": "Compliant_BTC_cW",
|
||||
"registryFamily": "monetary_unit",
|
||||
"assetType": "GRU",
|
||||
"decimals": 8,
|
||||
"custodyModel": "native_btc_attested_reserve",
|
||||
"mintPolicy": {
|
||||
"confirmationThreshold": 6,
|
||||
"freezeOnReserveDeficit": true,
|
||||
"freezeOnReconciliationFailure": true,
|
||||
"freezeOnOutstandingLimitBreach": true
|
||||
},
|
||||
"launchChains": [
|
||||
1,
|
||||
10,
|
||||
25,
|
||||
56,
|
||||
100,
|
||||
137,
|
||||
42161,
|
||||
42220,
|
||||
43114,
|
||||
8453
|
||||
],
|
||||
"stagedChains": [
|
||||
1111
|
||||
],
|
||||
"canonicalAddress": "0xcb7c000000000000000000000000000000000138",
|
||||
"wrappedAddresses": {
|
||||
"1": "0xcb7c000000000000000000000000000000000001",
|
||||
"10": "0xcb7c00000000000000000000000000000000000a",
|
||||
"25": "0xcb7c000000000000000000000000000000000019",
|
||||
"56": "0xcb7c000000000000000000000000000000000038",
|
||||
"100": "0xcb7c000000000000000000000000000000000064",
|
||||
"137": "0xcb7c000000000000000000000000000000000089",
|
||||
"1111": "0xcb7c000000000000000000000000000000000457",
|
||||
"8453": "0xcb7c000000000000000000000000000000002105",
|
||||
"42161": "0xcb7c00000000000000000000000000000000a4b1",
|
||||
"42220": "0xcb7c00000000000000000000000000000000a4ec",
|
||||
"43114": "0xcb7c00000000000000000000000000000000a86a"
|
||||
},
|
||||
"ui": {
|
||||
"displayName": "Bitcoin (Compliant)",
|
||||
"wrappedDisplayName": "Bitcoin (Compliant Wrapped)",
|
||||
"publicWarning": "cWBTC is the GRU transport representation of Chain 138 cBTC and is distinct from Ethereum WBTC."
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
217
config/gru-standards-profile.json
Normal file
217
config/gru-standards-profile.json
Normal file
@@ -0,0 +1,217 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"name": "GRU Standards Profile",
|
||||
"profileId": "gru-c-star-v2-transport-and-payment",
|
||||
"version": "1.0.0",
|
||||
"updated": "2026-04-07",
|
||||
"canonicalChainId": 138,
|
||||
"notes": "Machine-readable standards profile for canonical c* V2 money on Chain 138, mirrored cW* public-chain transport, x402 payment capability, ISO-4217 coverage, USD ecosystem extensions such as AUSDT/USDW, gas-native GRU transport families, and GRU governance/policy enforcement.",
|
||||
"references": {
|
||||
"transportOverlay": "config/gru-transport-active.json",
|
||||
"currencyManifest": "config/gru-iso4217-currency-manifest.json",
|
||||
"monetaryUnitManifest": "config/gru-monetary-unit-manifest.json",
|
||||
"governanceSupervisionProfile": "config/gru-governance-supervision-profile.json",
|
||||
"standardsMatrixDoc": "docs/04-configuration/GRU_C_STAR_V2_STANDARDS_MATRIX_AND_IMPLEMENTATION_PLAN.md",
|
||||
"storageGovernanceDoc": "docs/04-configuration/GRU_STORAGE_GOVERNANCE_AND_SUPERVISION_STANDARD.md",
|
||||
"x402SupportDoc": "docs/04-configuration/CHAIN138_X402_TOKEN_SUPPORT.md",
|
||||
"fxOnboardingDoc": "docs/04-configuration/GRU_FX_CURRENCY_ONBOARDING_CHECKLIST.md",
|
||||
"tokenCategoriesDoc": "docs/11-references/TOKEN_CATEGORIES_CANONICAL.md"
|
||||
},
|
||||
"scope": {
|
||||
"canonicalAssetPrefix": "c",
|
||||
"wrappedAssetPrefix": "cW",
|
||||
"canonicalMethodology": "Chain 138 is the canonical monetary layer for c*. Compatible public chains use mirrored cW* transport assets via lock on 138 and mint on destination.",
|
||||
"targetCurrencyCoverage": [
|
||||
"all ISO-4217 fiat currencies adopted into the GRU currency manifest",
|
||||
"governance-approved commodities and additional monetary units beyond ISO-4217",
|
||||
"USD ecosystem extensions that settle as canonical Chain 138 c* assets",
|
||||
"gas-native GRU transport families tracked outside the ISO-4217 currency manifest"
|
||||
],
|
||||
"compatibilityBoundary": [
|
||||
"token mapping exists in config/token-mapping-multichain.json",
|
||||
"destination cW deployment is non-zero in cross-chain-pmm-lps/config/deployment-status.json",
|
||||
"bridgeAvailable is true in cross-chain-pmm-lps/config/deployment-status.json",
|
||||
"destination chain is explicitly enabled in config/gru-transport-active.json"
|
||||
]
|
||||
},
|
||||
"paymentProfiles": [
|
||||
{
|
||||
"id": "x402",
|
||||
"requiredOn": [
|
||||
"canonical_c_star_v2"
|
||||
],
|
||||
"recommendedOn": [
|
||||
"mirrored_cw_v2"
|
||||
],
|
||||
"requiresAnyOf": [
|
||||
"ERC-2612",
|
||||
"ERC-3009"
|
||||
],
|
||||
"dependsOn": [
|
||||
"EIP-712",
|
||||
"ERC-5267"
|
||||
]
|
||||
}
|
||||
],
|
||||
"baseTokenStandards": [
|
||||
{
|
||||
"id": "ERC-20",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "AccessControl",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "Pausable",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "EIP-712",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "ERC-2612",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "ERC-3009",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "ERC-5267",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "IeMoneyToken",
|
||||
"required": true,
|
||||
"repoInterface": "contracts/emoney/interfaces/IeMoneyToken.sol"
|
||||
},
|
||||
{
|
||||
"id": "DeterministicStorageNamespace",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "JurisdictionAndSupervisionMetadata",
|
||||
"required": true
|
||||
}
|
||||
],
|
||||
"transportAndWrapperStandards": [
|
||||
{
|
||||
"id": "CompliantWrappedToken",
|
||||
"layer": "public_transport",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "CWMultiTokenBridgeL1",
|
||||
"layer": "bridge",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "CWReserveVerifier",
|
||||
"layer": "bridge",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "CWMultiTokenBridgeL2",
|
||||
"layer": "bridge",
|
||||
"required": true
|
||||
}
|
||||
],
|
||||
"adjacentAllowedButNotBaseToken": [
|
||||
{
|
||||
"id": "ERC-3156",
|
||||
"location": "wrapper_only"
|
||||
},
|
||||
{
|
||||
"id": "ERC-4626",
|
||||
"location": "vault_only"
|
||||
},
|
||||
{
|
||||
"id": "EIP-1271",
|
||||
"location": "smart_account_or_wallet_registry"
|
||||
},
|
||||
{
|
||||
"id": "ERC-1363",
|
||||
"location": "specialized_adapter_only"
|
||||
}
|
||||
],
|
||||
"governanceAndPolicyStandards": [
|
||||
{
|
||||
"id": "ERC-2535",
|
||||
"component": "gru_m00_diamond",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "StandardsRegistryFacet",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "GovernanceLevelFacet",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "PolicyRouterFacet",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "ComplianceGateFacet",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "AccountingGateFacet",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "MessagingGateFacet",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "ReserveGateFacet",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "ISO-20022 Canonical Message Model",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "JurisdictionalReview",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "MinimumUpgradeNoticePeriod",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "RegulatoryDisclosureAndReporting",
|
||||
"required": true
|
||||
}
|
||||
],
|
||||
"lifecycleDefaults": {
|
||||
"transportActiveDefault": false,
|
||||
"x402ReadyDefault": false,
|
||||
"forwardCanonicalVersionPolicy": "one_forward_canonical_version_per_asset_family",
|
||||
"minimumUpgradeNoticePeriodSeconds": 604800,
|
||||
"jurisdictionReviewRequiredForUpgradeSensitiveChanges": true
|
||||
},
|
||||
"currentActivationExample": {
|
||||
"activeCanonicalCurrencyCodes": [
|
||||
"USD"
|
||||
],
|
||||
"activeUsdExtensions": [
|
||||
"cAUSDT"
|
||||
],
|
||||
"gasNativeFamiliesTracked": [
|
||||
"eth_mainnet",
|
||||
"eth_l2",
|
||||
"bnb",
|
||||
"pol",
|
||||
"avax",
|
||||
"cro",
|
||||
"xdai",
|
||||
"celo",
|
||||
"wemix"
|
||||
],
|
||||
"transportOverlayRef": "config/gru-transport-active.json"
|
||||
}
|
||||
}
|
||||
3751
config/gru-transport-active.json
Normal file
3751
config/gru-transport-active.json
Normal file
File diff suppressed because it is too large
Load Diff
148
config/gru-v2-chain138-wave1-v2-plan.json
Normal file
148
config/gru-v2-chain138-wave1-v2-plan.json
Normal file
@@ -0,0 +1,148 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"name": "GRU V2 Chain 138 Wave 1 Deployment Plan",
|
||||
"version": "1.0.0",
|
||||
"updated": "2026-04-07",
|
||||
"canonicalChainId": 138,
|
||||
"notes": [
|
||||
"Wave 1 assets were already canonically deployed on Chain 138 as legacy GRU assets and now also have generic GRU V2 deployments for the full V2/x402-capable token base.",
|
||||
"Broadcast execution completed on April 7, 2026. This file now captures both the legacy canonical addresses and the newly deployed V2 addresses."
|
||||
],
|
||||
"assets": [
|
||||
{
|
||||
"code": "EUR",
|
||||
"deployments": [
|
||||
{
|
||||
"tokenName": "Euro Coin (Compliant V2)",
|
||||
"tokenSymbol": "cEURC",
|
||||
"currencyCode": "EUR",
|
||||
"metadataKey": "ceurc-v2",
|
||||
"registryName": "Euro Coin (Compliant V2)",
|
||||
"registrySymbol": "cEURC.v2",
|
||||
"currentCanonicalAddress": "0x8085961F9cF02b4d800A3c6d386D31da4B34266a",
|
||||
"deployedV2Address": "0x243e6581Dc8a98d98B92265858b322b193555C81"
|
||||
},
|
||||
{
|
||||
"tokenName": "Euro Token (Compliant V2)",
|
||||
"tokenSymbol": "cEURT",
|
||||
"currencyCode": "EUR",
|
||||
"metadataKey": "ceurt-v2",
|
||||
"registryName": "Euro Token (Compliant V2)",
|
||||
"registrySymbol": "cEURT.v2",
|
||||
"currentCanonicalAddress": "0xdf4b71c61E5912712C1Bdd451416B9aC26949d72",
|
||||
"deployedV2Address": "0x2bAFA83d8fF8BaE9505511998987D0659791605B"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "GBP",
|
||||
"deployments": [
|
||||
{
|
||||
"tokenName": "Pound Sterling Coin (Compliant V2)",
|
||||
"tokenSymbol": "cGBPC",
|
||||
"currencyCode": "GBP",
|
||||
"metadataKey": "cgbpc-v2",
|
||||
"registryName": "Pound Sterling Coin (Compliant V2)",
|
||||
"registrySymbol": "cGBPC.v2",
|
||||
"currentCanonicalAddress": "0x003960f16D9d34F2e98d62723B6721Fb92074aD2",
|
||||
"deployedV2Address": "0x707508D223103f5D2d9EFBc656302c9d48878b29"
|
||||
},
|
||||
{
|
||||
"tokenName": "Pound Sterling Token (Compliant V2)",
|
||||
"tokenSymbol": "cGBPT",
|
||||
"currencyCode": "GBP",
|
||||
"metadataKey": "cgbpt-v2",
|
||||
"registryName": "Pound Sterling Token (Compliant V2)",
|
||||
"registrySymbol": "cGBPT.v2",
|
||||
"currentCanonicalAddress": "0x350f54e4D23795f86A9c03988c7135357CCaD97c",
|
||||
"deployedV2Address": "0xee17c18E10E55ce23F7457D018aAa2Fb1E64B281"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "AUD",
|
||||
"deployments": [
|
||||
{
|
||||
"tokenName": "Australian Dollar Coin (Compliant V2)",
|
||||
"tokenSymbol": "cAUDC",
|
||||
"currencyCode": "AUD",
|
||||
"metadataKey": "caudc-v2",
|
||||
"registryName": "Australian Dollar Coin (Compliant V2)",
|
||||
"registrySymbol": "cAUDC.v2",
|
||||
"currentCanonicalAddress": "0xD51482e567c03899eecE3CAe8a058161FD56069D",
|
||||
"deployedV2Address": "0xfb37aFd415B70C5cEDc9bA58a72D517207b769Bb"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "JPY",
|
||||
"deployments": [
|
||||
{
|
||||
"tokenName": "Japanese Yen Coin (Compliant V2)",
|
||||
"tokenSymbol": "cJPYC",
|
||||
"currencyCode": "JPY",
|
||||
"metadataKey": "cjpyc-v2",
|
||||
"registryName": "Japanese Yen Coin (Compliant V2)",
|
||||
"registrySymbol": "cJPYC.v2",
|
||||
"currentCanonicalAddress": "0xEe269e1226a334182aace90056EE4ee5Cc8A6770",
|
||||
"deployedV2Address": "0x2c751bBE4f299b989b3A8c333E0A966cdcA6Fd98"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "CHF",
|
||||
"deployments": [
|
||||
{
|
||||
"tokenName": "Swiss Franc Coin (Compliant V2)",
|
||||
"tokenSymbol": "cCHFC",
|
||||
"currencyCode": "CHF",
|
||||
"metadataKey": "cchfc-v2",
|
||||
"registryName": "Swiss Franc Coin (Compliant V2)",
|
||||
"registrySymbol": "cCHFC.v2",
|
||||
"currentCanonicalAddress": "0x873990849DDa5117d7C644f0aF24370797C03885",
|
||||
"deployedV2Address": "0x60B7FB8e0DD0Be8595AD12Fe80AE832861Be747c"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "CAD",
|
||||
"deployments": [
|
||||
{
|
||||
"tokenName": "Canadian Dollar Coin (Compliant V2)",
|
||||
"tokenSymbol": "cCADC",
|
||||
"currencyCode": "CAD",
|
||||
"metadataKey": "ccadc-v2",
|
||||
"registryName": "Canadian Dollar Coin (Compliant V2)",
|
||||
"registrySymbol": "cCADC.v2",
|
||||
"currentCanonicalAddress": "0x54dBd40cF05e15906A2C21f600937e96787f5679",
|
||||
"deployedV2Address": "0xe799033c87fE0CE316DAECcefBE3134CC74b76a9"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"code": "XAU",
|
||||
"deployments": [
|
||||
{
|
||||
"tokenName": "Gold Coin (Compliant V2)",
|
||||
"tokenSymbol": "cXAUC",
|
||||
"currencyCode": "XAU",
|
||||
"metadataKey": "cxauc-v2",
|
||||
"registryName": "Gold Coin (Compliant V2)",
|
||||
"registrySymbol": "cXAUC.v2",
|
||||
"currentCanonicalAddress": "0x290E52a8819A4fbD0714E517225429aA2B70EC6b",
|
||||
"deployedV2Address": "0xF0F0F81bE3D033D8586bAfd2293e37eE2f615647"
|
||||
},
|
||||
{
|
||||
"tokenName": "Gold Token (Compliant V2)",
|
||||
"tokenSymbol": "cXAUT",
|
||||
"currencyCode": "XAU",
|
||||
"metadataKey": "cxaut-v2",
|
||||
"registryName": "Gold Token (Compliant V2)",
|
||||
"registrySymbol": "cXAUT.v2",
|
||||
"currentCanonicalAddress": "0x94e408E26c6FD8F4ee00b54dF19082FDA07dC96E",
|
||||
"deployedV2Address": "0x89477E982847023aaB5C3492082cd1bB4b1b9Ef1"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
141
config/gru-v2-d3mm-network-expansion-plan.json
Normal file
141
config/gru-v2-d3mm-network-expansion-plan.json
Normal file
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"name": "GRU V2 / D3MM Public EVM Expansion Plan",
|
||||
"version": "1.0.0",
|
||||
"updated": "2026-04-07",
|
||||
"notes": [
|
||||
"This plan defines rollout order and expected next actions. It is not proof that D3MM or GRU v2 public liquidity is already live on every listed chain.",
|
||||
"Chain 138 remains the canonical D3MM pilot/private venue until the upstream-native public expansion is completed chain-by-chain.",
|
||||
"Mainnet expansion should coexist with the current DODO PMM public rows first, then migrate traffic only after execution, monitoring, and policy gates pass."
|
||||
],
|
||||
"waves": [
|
||||
{
|
||||
"key": "wave0_mainnet_hardening",
|
||||
"priority": 0,
|
||||
"description": "Keep Mainnet as the first public-chain control point while D3MM and GRU v2 public edges become execution-grade.",
|
||||
"chains": [
|
||||
{
|
||||
"chainId": 1,
|
||||
"name": "Ethereum Mainnet",
|
||||
"targetProtocols": ["dodo_pmm", "dodo_v3_d3mm", "uniswap_v3", "one_inch"],
|
||||
"rolloutMode": "coexist_then_promote",
|
||||
"requiredPairs": ["cWUSDT/USDC", "cWUSDC/USDC", "cWUSDT/USDT", "cWUSDC/USDT"],
|
||||
"successCriteria": [
|
||||
"current public DODO PMM rows remain healthy",
|
||||
"D3MM venue inventory is frozen and published",
|
||||
"execution-grade routing is proven for approved lanes",
|
||||
"bot and peg-monitor surfaces remain green"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "wave1_existing_public_depth",
|
||||
"priority": 1,
|
||||
"description": "Chains that already have first-tier public PMM depth should receive D3MM/edge promotion and route visibility next.",
|
||||
"chains": [
|
||||
{
|
||||
"chainId": 137,
|
||||
"name": "Polygon",
|
||||
"targetProtocols": ["dodo_pmm", "dodo_v3_d3mm", "uniswap_v3", "one_inch"],
|
||||
"rolloutMode": "promote_existing_pairs",
|
||||
"requiredPairs": ["cWUSDT/USDT", "cWUSDC/USDC"],
|
||||
"successCriteria": [
|
||||
"existing first-tier public PMM rows stay funded",
|
||||
"route-matrix visibility is attached",
|
||||
"token-aggregation exposes the chain publicly",
|
||||
"D3MM edge decision is recorded"
|
||||
]
|
||||
},
|
||||
{
|
||||
"chainId": 10,
|
||||
"name": "Optimism",
|
||||
"targetProtocols": ["dodo_pmm", "dodo_v3_d3mm", "uniswap_v3", "one_inch"],
|
||||
"rolloutMode": "promote_existing_pairs",
|
||||
"requiredPairs": ["cWUSDT/USDT", "cWUSDC/USDC"],
|
||||
"successCriteria": [
|
||||
"existing first-tier public PMM rows stay funded",
|
||||
"route-matrix visibility is attached",
|
||||
"token-aggregation exposes the chain publicly",
|
||||
"D3MM edge decision is recorded"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "wave2_l2_bootstrap",
|
||||
"priority": 2,
|
||||
"description": "Bootstrap first-tier public PMM depth on the highest-leverage L2s before broader EVM rollout.",
|
||||
"chains": [
|
||||
{
|
||||
"chainId": 42161,
|
||||
"name": "Arbitrum One",
|
||||
"targetProtocols": ["dodo_pmm", "dodo_v3_d3mm", "uniswap_v3", "one_inch"],
|
||||
"rolloutMode": "deploy_first_tier_then_promote",
|
||||
"requiredPairs": ["cWUSDT/USDC", "cWUSDC/USDC"],
|
||||
"successCriteria": [
|
||||
"hub stable anchor is recorded in deployment-status",
|
||||
"first-tier public PMM rows are deployed and seeded",
|
||||
"route visibility is enabled",
|
||||
"Mainnet-hub bootstrap blockers are cleared"
|
||||
]
|
||||
},
|
||||
{
|
||||
"chainId": 8453,
|
||||
"name": "Base",
|
||||
"targetProtocols": ["dodo_pmm", "dodo_v3_d3mm", "uniswap_v3", "one_inch"],
|
||||
"rolloutMode": "deploy_first_tier_then_promote",
|
||||
"requiredPairs": ["cWUSDT/USDC", "cWUSDC/USDC"],
|
||||
"successCriteria": [
|
||||
"hub stable anchor is recorded in deployment-status",
|
||||
"first-tier public PMM rows are deployed and seeded",
|
||||
"route visibility is enabled",
|
||||
"public D3MM policy is recorded"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "wave3_secondary_public_evm",
|
||||
"priority": 3,
|
||||
"description": "Secondary public EVM expansion after Mainnet, Polygon, Optimism, Arbitrum, and Base are stable.",
|
||||
"chains": [
|
||||
{
|
||||
"chainId": 43114,
|
||||
"name": "Avalanche C-Chain",
|
||||
"targetProtocols": ["dodo_pmm", "dodo_v3_d3mm", "uniswap_v3", "one_inch"],
|
||||
"rolloutMode": "deploy_first_tier_then_promote",
|
||||
"requiredPairs": ["cWUSDT/USDC", "cWUSDC/USDC"]
|
||||
},
|
||||
{
|
||||
"chainId": 100,
|
||||
"name": "Gnosis",
|
||||
"targetProtocols": ["dodo_pmm", "dodo_v3_d3mm", "uniswap_v3", "one_inch"],
|
||||
"rolloutMode": "deploy_first_tier_then_promote",
|
||||
"requiredPairs": ["cWUSDT/USDC", "cWUSDC/USDC"]
|
||||
},
|
||||
{
|
||||
"chainId": 56,
|
||||
"name": "BSC",
|
||||
"targetProtocols": ["dodo_pmm", "dodo_v3_d3mm", "uniswap_v3", "one_inch"],
|
||||
"rolloutMode": "deploy_first_tier_then_promote",
|
||||
"requiredPairs": ["cWUSDT/USDT", "cWUSDC/USDT"]
|
||||
},
|
||||
{
|
||||
"chainId": 25,
|
||||
"name": "Cronos",
|
||||
"targetProtocols": ["dodo_pmm", "dodo_v3_d3mm", "uniswap_v3", "one_inch"],
|
||||
"rolloutMode": "deploy_first_tier_then_promote",
|
||||
"requiredPairs": ["cWUSDT/USDT", "cWUSDC/USDC"]
|
||||
},
|
||||
{
|
||||
"chainId": 42220,
|
||||
"name": "Celo",
|
||||
"targetProtocols": ["dodo_pmm", "dodo_v3_d3mm", "uniswap_v3", "one_inch"],
|
||||
"rolloutMode": "deploy_first_tier_then_promote",
|
||||
"requiredPairs": ["cWUSDT/USDC", "cWUSDC/USDC"]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
214
config/gru-v2-first-tier-pool-scaffolds.json
Normal file
214
config/gru-v2-first-tier-pool-scaffolds.json
Normal file
@@ -0,0 +1,214 @@
|
||||
{
|
||||
"version": 1,
|
||||
"asOfDate": "2026-04-07",
|
||||
"purpose": "Canonical scaffold inventory for missing first-tier GRU v2 / D3MM public PMM pools.",
|
||||
"generatedFrom": [
|
||||
"config/gru-v2-d3mm-network-expansion-plan.json",
|
||||
"cross-chain-pmm-lps/config/deployment-status.json",
|
||||
"cross-chain-pmm-lps/config/pool-matrix.json"
|
||||
],
|
||||
"summary": {
|
||||
"chainsWithScaffolds": 6,
|
||||
"scaffoldPoolCount": 12
|
||||
},
|
||||
"chains": [
|
||||
{
|
||||
"chainId": 8453,
|
||||
"name": "Base",
|
||||
"waveKey": "wave2_l2_bootstrap",
|
||||
"priority": 2,
|
||||
"rolloutMode": "deploy_first_tier_then_promote",
|
||||
"hubStable": "USDC",
|
||||
"bridgeAvailable": true,
|
||||
"scaffoldPools": [
|
||||
{
|
||||
"pair": "cWUSDT/USDC",
|
||||
"base": "cWUSDT",
|
||||
"quote": "USDC",
|
||||
"poolAddress": "0x0000000000000000000000000000000000000000",
|
||||
"feeBps": 3,
|
||||
"k": "500000000000000000",
|
||||
"role": "public_routing",
|
||||
"publicRoutingEnabled": false,
|
||||
"notes": "scaffold only; replace poolAddress and enable routing after live deploy + seed"
|
||||
},
|
||||
{
|
||||
"pair": "cWUSDC/USDC",
|
||||
"base": "cWUSDC",
|
||||
"quote": "USDC",
|
||||
"poolAddress": "0x0000000000000000000000000000000000000000",
|
||||
"feeBps": 3,
|
||||
"k": "500000000000000000",
|
||||
"role": "public_routing",
|
||||
"publicRoutingEnabled": false,
|
||||
"notes": "scaffold only; replace poolAddress and enable routing after live deploy + seed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"chainId": 42161,
|
||||
"name": "Arbitrum One",
|
||||
"waveKey": "wave2_l2_bootstrap",
|
||||
"priority": 2,
|
||||
"rolloutMode": "deploy_first_tier_then_promote",
|
||||
"hubStable": "USDC",
|
||||
"bridgeAvailable": true,
|
||||
"scaffoldPools": [
|
||||
{
|
||||
"pair": "cWUSDT/USDC",
|
||||
"base": "cWUSDT",
|
||||
"quote": "USDC",
|
||||
"poolAddress": "0x0000000000000000000000000000000000000000",
|
||||
"feeBps": 3,
|
||||
"k": "500000000000000000",
|
||||
"role": "public_routing",
|
||||
"publicRoutingEnabled": false,
|
||||
"notes": "scaffold only; replace poolAddress and enable routing after live deploy + seed"
|
||||
},
|
||||
{
|
||||
"pair": "cWUSDC/USDC",
|
||||
"base": "cWUSDC",
|
||||
"quote": "USDC",
|
||||
"poolAddress": "0x0000000000000000000000000000000000000000",
|
||||
"feeBps": 3,
|
||||
"k": "500000000000000000",
|
||||
"role": "public_routing",
|
||||
"publicRoutingEnabled": false,
|
||||
"notes": "scaffold only; replace poolAddress and enable routing after live deploy + seed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"chainId": 56,
|
||||
"name": "BSC",
|
||||
"waveKey": "wave3_secondary_public_evm",
|
||||
"priority": 3,
|
||||
"rolloutMode": "deploy_first_tier_then_promote",
|
||||
"hubStable": "USDT",
|
||||
"bridgeAvailable": true,
|
||||
"scaffoldPools": [
|
||||
{
|
||||
"pair": "cWUSDT/USDT",
|
||||
"base": "cWUSDT",
|
||||
"quote": "USDT",
|
||||
"poolAddress": "0x0000000000000000000000000000000000000000",
|
||||
"feeBps": 3,
|
||||
"k": "500000000000000000",
|
||||
"role": "public_routing",
|
||||
"publicRoutingEnabled": false,
|
||||
"notes": "scaffold only; replace poolAddress and enable routing after live deploy + seed"
|
||||
},
|
||||
{
|
||||
"pair": "cWUSDC/USDT",
|
||||
"base": "cWUSDC",
|
||||
"quote": "USDT",
|
||||
"poolAddress": "0x0000000000000000000000000000000000000000",
|
||||
"feeBps": 3,
|
||||
"k": "500000000000000000",
|
||||
"role": "public_routing",
|
||||
"publicRoutingEnabled": false,
|
||||
"notes": "scaffold only; replace poolAddress and enable routing after live deploy + seed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"chainId": 100,
|
||||
"name": "Gnosis",
|
||||
"waveKey": "wave3_secondary_public_evm",
|
||||
"priority": 3,
|
||||
"rolloutMode": "deploy_first_tier_then_promote",
|
||||
"hubStable": "USDC",
|
||||
"bridgeAvailable": true,
|
||||
"scaffoldPools": [
|
||||
{
|
||||
"pair": "cWUSDT/USDC",
|
||||
"base": "cWUSDT",
|
||||
"quote": "USDC",
|
||||
"poolAddress": "0x0000000000000000000000000000000000000000",
|
||||
"feeBps": 3,
|
||||
"k": "500000000000000000",
|
||||
"role": "public_routing",
|
||||
"publicRoutingEnabled": false,
|
||||
"notes": "scaffold only; replace poolAddress and enable routing after live deploy + seed"
|
||||
},
|
||||
{
|
||||
"pair": "cWUSDC/USDC",
|
||||
"base": "cWUSDC",
|
||||
"quote": "USDC",
|
||||
"poolAddress": "0x0000000000000000000000000000000000000000",
|
||||
"feeBps": 3,
|
||||
"k": "500000000000000000",
|
||||
"role": "public_routing",
|
||||
"publicRoutingEnabled": false,
|
||||
"notes": "scaffold only; replace poolAddress and enable routing after live deploy + seed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"chainId": 42220,
|
||||
"name": "Celo",
|
||||
"waveKey": "wave3_secondary_public_evm",
|
||||
"priority": 3,
|
||||
"rolloutMode": "deploy_first_tier_then_promote",
|
||||
"hubStable": "USDC",
|
||||
"bridgeAvailable": true,
|
||||
"scaffoldPools": [
|
||||
{
|
||||
"pair": "cWUSDT/USDC",
|
||||
"base": "cWUSDT",
|
||||
"quote": "USDC",
|
||||
"poolAddress": "0x0000000000000000000000000000000000000000",
|
||||
"feeBps": 3,
|
||||
"k": "500000000000000000",
|
||||
"role": "public_routing",
|
||||
"publicRoutingEnabled": false,
|
||||
"notes": "scaffold only; replace poolAddress and enable routing after live deploy + seed"
|
||||
},
|
||||
{
|
||||
"pair": "cWUSDC/USDC",
|
||||
"base": "cWUSDC",
|
||||
"quote": "USDC",
|
||||
"poolAddress": "0x0000000000000000000000000000000000000000",
|
||||
"feeBps": 3,
|
||||
"k": "500000000000000000",
|
||||
"role": "public_routing",
|
||||
"publicRoutingEnabled": false,
|
||||
"notes": "scaffold only; replace poolAddress and enable routing after live deploy + seed"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"chainId": 43114,
|
||||
"name": "Avalanche C-Chain",
|
||||
"waveKey": "wave3_secondary_public_evm",
|
||||
"priority": 3,
|
||||
"rolloutMode": "deploy_first_tier_then_promote",
|
||||
"hubStable": "USDC",
|
||||
"bridgeAvailable": true,
|
||||
"scaffoldPools": [
|
||||
{
|
||||
"pair": "cWUSDT/USDC",
|
||||
"base": "cWUSDT",
|
||||
"quote": "USDC",
|
||||
"poolAddress": "0x0000000000000000000000000000000000000000",
|
||||
"feeBps": 3,
|
||||
"k": "500000000000000000",
|
||||
"role": "public_routing",
|
||||
"publicRoutingEnabled": false,
|
||||
"notes": "scaffold only; replace poolAddress and enable routing after live deploy + seed"
|
||||
},
|
||||
{
|
||||
"pair": "cWUSDC/USDC",
|
||||
"base": "cWUSDC",
|
||||
"quote": "USDC",
|
||||
"poolAddress": "0x0000000000000000000000000000000000000000",
|
||||
"feeBps": 3,
|
||||
"k": "500000000000000000",
|
||||
"role": "public_routing",
|
||||
"publicRoutingEnabled": false,
|
||||
"notes": "scaffold only; replace poolAddress and enable routing after live deploy + seed"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
169
config/gru-v2-full-mesh-pool-tracker.json
Normal file
169
config/gru-v2-full-mesh-pool-tracker.json
Normal file
@@ -0,0 +1,169 @@
|
||||
{
|
||||
"statusDate": "2026-04-15",
|
||||
"defaultFields": {
|
||||
"status": "todo",
|
||||
"deployed": false,
|
||||
"seeded": false,
|
||||
"validated": false,
|
||||
"live": false,
|
||||
"mevReady": false
|
||||
},
|
||||
"chain138": {
|
||||
"namespace": "c* V2",
|
||||
"entries": [
|
||||
{ "pair": "cUSDT V2 / cUSDC V2", "priority": "P0" },
|
||||
{ "pair": "cUSDT V2 / USDT", "priority": "P0" },
|
||||
{ "pair": "cUSDC V2 / USDC", "priority": "P0" },
|
||||
{ "pair": "cEURC V2 / cUSDC V2", "priority": "P0" },
|
||||
{ "pair": "cEURT V2 / cUSDC V2", "priority": "P0" },
|
||||
{ "pair": "cGBPC V2 / cUSDC V2", "priority": "P0" },
|
||||
{ "pair": "cGBPT V2 / cUSDC V2", "priority": "P0" },
|
||||
{ "pair": "cAUDC V2 / cUSDC V2", "priority": "P0" },
|
||||
{ "pair": "cJPYC V2 / cUSDC V2", "priority": "P0" },
|
||||
{ "pair": "cCHFC V2 / cUSDC V2", "priority": "P0" },
|
||||
{ "pair": "cCADC V2 / cUSDC V2", "priority": "P0" },
|
||||
{ "pair": "cXAUC V2 / cUSDC V2", "priority": "P0" },
|
||||
{ "pair": "cXAUT V2 / cUSDC V2", "priority": "P0" },
|
||||
{ "pair": "cEURC V2 / cEURT V2", "priority": "P1" },
|
||||
{ "pair": "cGBPC V2 / cGBPT V2", "priority": "P1" },
|
||||
{ "pair": "cXAUC V2 / cXAUT V2", "priority": "P1" },
|
||||
{ "pair": "cETH / WETH", "priority": "P1" },
|
||||
{ "pair": "cETH / cUSDC V2", "priority": "P1" },
|
||||
{ "pair": "cETHL2 / cUSDC V2", "priority": "P2" },
|
||||
{ "pair": "cBNB / cUSDC V2", "priority": "P2" },
|
||||
{ "pair": "cPOL / cUSDC V2", "priority": "P2" },
|
||||
{ "pair": "cAVAX / cUSDC V2", "priority": "P2" },
|
||||
{ "pair": "cCRO / cUSDC V2", "priority": "P2" },
|
||||
{ "pair": "cXDAI / cUSDC V2", "priority": "P2" },
|
||||
{ "pair": "cCELO / cUSDC V2", "priority": "P2" },
|
||||
{ "pair": "cWEMIX / cUSDC V2", "priority": "P2" }
|
||||
]
|
||||
},
|
||||
"allMainnet651940": {
|
||||
"namespace": "cA*",
|
||||
"entries": [
|
||||
{ "pair": "cAUSDT / cAUSDC", "priority": "P0" },
|
||||
{ "pair": "cAUSDT / AUSDT", "priority": "P0" },
|
||||
{ "pair": "cAUSDC / USDC", "priority": "P0" },
|
||||
{ "pair": "cAEURC / cAUSDC", "priority": "P0" },
|
||||
{ "pair": "cAEURT / cAUSDC", "priority": "P0" },
|
||||
{ "pair": "cAGBPC / cAUSDC", "priority": "P0" },
|
||||
{ "pair": "cAGBPT / cAUSDC", "priority": "P0" },
|
||||
{ "pair": "cAAUDC / cAUSDC", "priority": "P0" },
|
||||
{ "pair": "cAJPYC / cAUSDC", "priority": "P0" },
|
||||
{ "pair": "cACHFC / cAUSDC", "priority": "P0" },
|
||||
{ "pair": "cACADC / cAUSDC", "priority": "P0" },
|
||||
{ "pair": "cAXAUC / cAUSDC", "priority": "P0" },
|
||||
{ "pair": "cAXAUT / cAUSDC", "priority": "P0" },
|
||||
{ "pair": "cAEURC / cAEURT", "priority": "P1" },
|
||||
{ "pair": "cAGBPC / cAGBPT", "priority": "P1" },
|
||||
{ "pair": "cAXAUC / cAXAUT", "priority": "P1" },
|
||||
{ "pair": "cAETH / WETH", "priority": "P1" },
|
||||
{ "pair": "cAETH / cAUSDC", "priority": "P1" },
|
||||
{ "pair": "cAWALL / WALL", "priority": "P1" },
|
||||
{ "pair": "cAWALL / cAUSDC", "priority": "P1" }
|
||||
]
|
||||
},
|
||||
"publicMesh": {
|
||||
"1": {
|
||||
"namespace": "cW*",
|
||||
"entries": [
|
||||
"cWUSDT / USDC","cWUSDC / USDC","cWUSDT / USDT","cWUSDC / USDT","cWUSDT / cWUSDC",
|
||||
"cWEURC / USDC","cWEURT / USDC","cWGBPC / USDC","cWGBPT / USDC","cWAUDC / USDC",
|
||||
"cWJPYC / USDC","cWCHFC / USDC","cWCADC / USDC","cWXAUC / USDC","cWXAUT / USDC",
|
||||
"cWETH / WETH","cWETH / USDC"
|
||||
]
|
||||
},
|
||||
"10": {
|
||||
"namespace": "cW*",
|
||||
"entries": [
|
||||
"cWUSDT / USDC","cWUSDC / USDC","cWUSDT / USDT","cWUSDC / USDT","cWUSDT / cWUSDC",
|
||||
"cWEURC / USDC","cWEURT / USDC","cWGBPC / USDC","cWGBPT / USDC","cWAUDC / USDC",
|
||||
"cWJPYC / USDC","cWCHFC / USDC","cWCADC / USDC","cWXAUC / USDC","cWXAUT / USDC",
|
||||
"cWETHL2 / WETH","cWETHL2 / USDC"
|
||||
]
|
||||
},
|
||||
"25": {
|
||||
"namespace": "cW*",
|
||||
"entries": [
|
||||
"cWUSDT / USDC","cWUSDC / USDC","cWUSDT / USDT","cWUSDC / USDT","cWUSDT / cWUSDC",
|
||||
"cWEURC / USDC","cWEURT / USDC","cWGBPC / USDC","cWGBPT / USDC","cWAUDC / USDC",
|
||||
"cWJPYC / USDC","cWCHFC / USDC","cWCADC / USDC","cWXAUC / USDC","cWXAUT / USDC",
|
||||
"cWCRO / WCRO","cWCRO / USDT"
|
||||
]
|
||||
},
|
||||
"56": {
|
||||
"namespace": "cW*",
|
||||
"entries": [
|
||||
"cWUSDT / USDC","cWUSDC / USDC","cWUSDT / USDT","cWUSDC / USDT","cWUSDT / cWUSDC",
|
||||
"cWEURC / USDC","cWEURT / USDC","cWGBPC / USDC","cWGBPT / USDC","cWAUDC / USDC",
|
||||
"cWJPYC / USDC","cWCHFC / USDC","cWCADC / USDC","cWXAUC / USDC","cWXAUT / USDC",
|
||||
"cWBNB / WBNB","cWBNB / USDT"
|
||||
]
|
||||
},
|
||||
"100": {
|
||||
"namespace": "cW*",
|
||||
"entries": [
|
||||
"cWUSDT / USDC","cWUSDC / USDC","cWUSDT / USDT","cWUSDC / USDT","cWUSDT / cWUSDC",
|
||||
"cWEURC / USDC","cWEURT / USDC","cWGBPC / USDC","cWGBPT / USDC","cWAUDC / USDC",
|
||||
"cWJPYC / USDC","cWCHFC / USDC","cWCADC / USDC","cWXAUC / USDC","cWXAUT / USDC",
|
||||
"cWXDAI / WXDAI","cWXDAI / USDC"
|
||||
]
|
||||
},
|
||||
"137": {
|
||||
"namespace": "cW*",
|
||||
"entries": [
|
||||
"cWUSDT / USDC","cWUSDC / USDC","cWUSDT / USDT","cWUSDC / USDT","cWUSDT / cWUSDC",
|
||||
"cWEURC / USDC","cWEURT / USDC","cWGBPC / USDC","cWGBPT / USDC","cWAUDC / USDC",
|
||||
"cWJPYC / USDC","cWCHFC / USDC","cWCADC / USDC","cWXAUC / USDC","cWXAUT / USDC",
|
||||
"cWPOL / WPOL","cWPOL / USDC"
|
||||
]
|
||||
},
|
||||
"8453": {
|
||||
"namespace": "cW*",
|
||||
"entries": [
|
||||
"cWUSDT / USDC","cWUSDC / USDC","cWUSDT / USDT","cWUSDC / USDT","cWUSDT / cWUSDC",
|
||||
"cWEURC / USDC","cWEURT / USDC","cWGBPC / USDC","cWGBPT / USDC","cWAUDC / USDC",
|
||||
"cWJPYC / USDC","cWCHFC / USDC","cWCADC / USDC","cWXAUC / USDC","cWXAUT / USDC",
|
||||
"cWETHL2 / WETH","cWETHL2 / USDC"
|
||||
]
|
||||
},
|
||||
"42161": {
|
||||
"namespace": "cW*",
|
||||
"entries": [
|
||||
"cWUSDT / USDC","cWUSDC / USDC","cWUSDT / USDT","cWUSDC / USDT","cWUSDT / cWUSDC",
|
||||
"cWEURC / USDC","cWEURT / USDC","cWGBPC / USDC","cWGBPT / USDC","cWAUDC / USDC",
|
||||
"cWJPYC / USDC","cWCHFC / USDC","cWCADC / USDC","cWXAUC / USDC","cWXAUT / USDC",
|
||||
"cWETHL2 / WETH","cWETHL2 / USDC"
|
||||
]
|
||||
},
|
||||
"42220": {
|
||||
"namespace": "cW*",
|
||||
"entries": [
|
||||
"cWUSDT / USDC","cWUSDC / USDC","cWUSDT / USDT","cWUSDC / USDT","cWUSDT / cWUSDC",
|
||||
"cWEURC / USDC","cWEURT / USDC","cWGBPC / USDC","cWGBPT / USDC","cWAUDC / USDC",
|
||||
"cWJPYC / USDC","cWCHFC / USDC","cWCADC / USDC","cWXAUC / USDC","cWXAUT / USDC",
|
||||
"cWCELO / WCELO","cWCELO / USDC"
|
||||
]
|
||||
},
|
||||
"43114": {
|
||||
"namespace": "cW*",
|
||||
"entries": [
|
||||
"cWUSDT / USDC","cWUSDC / USDC","cWUSDT / USDT","cWUSDC / USDT","cWUSDT / cWUSDC",
|
||||
"cWEURC / USDC","cWEURT / USDC","cWGBPC / USDC","cWGBPT / USDC","cWAUDC / USDC",
|
||||
"cWJPYC / USDC","cWCHFC / USDC","cWCADC / USDC","cWXAUC / USDC","cWXAUT / USDC",
|
||||
"cWAVAX / WAVAX","cWAVAX / USDC"
|
||||
]
|
||||
},
|
||||
"1111": {
|
||||
"namespace": "cW*",
|
||||
"entries": [
|
||||
"cWUSDT / USDC","cWUSDC / USDC","cWUSDT / USDT","cWUSDC / USDT","cWUSDT / cWUSDC",
|
||||
"cWEURC / USDC","cWEURT / USDC","cWGBPC / USDC","cWGBPT / USDC","cWAUDC / USDC",
|
||||
"cWJPYC / USDC","cWCHFC / USDC","cWCADC / USDC","cWXAUC / USDC","cWXAUT / USDC",
|
||||
"cWWEMIX / WWEMIX","cWWEMIX / USDC"
|
||||
],
|
||||
"statusOverride": "planned"
|
||||
}
|
||||
}
|
||||
}
|
||||
21
config/gru-v2-metadata/chain138/caudc-v2/metadata.json
Normal file
21
config/gru-v2-metadata/chain138/caudc-v2/metadata.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "Australian Dollar Coin (Compliant V2)",
|
||||
"symbol": "cAUDC",
|
||||
"description": "GRU v2 regulated AUD settlement asset for Chain 138 with ISO-20022-aligned accounting metadata and x402-capable signature support.",
|
||||
"decimals": 6,
|
||||
"logo": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cAUDC.svg",
|
||||
"image": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cAUDC.svg",
|
||||
"external_url": "https://explorer.d-bis.org",
|
||||
"properties": {
|
||||
"chainId": 138,
|
||||
"currencyCode": "AUD",
|
||||
"gruVersion": "2",
|
||||
"assetFamily": "GRU",
|
||||
"tokenRole": "gru_compliant_base",
|
||||
"forwardCanonical": true,
|
||||
"iso20022Ready": true,
|
||||
"x402Ready": true,
|
||||
"assetId": "keccak256:GRU:cAUDC",
|
||||
"assetVersionId": "keccak256:GRU:cAUDC:2"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"title": "cAUDC V2 Regulatory Disclosure",
|
||||
"symbol": "cAUDC",
|
||||
"gruVersion": "2",
|
||||
"chainId": 138,
|
||||
"jurisdiction": "International",
|
||||
"notice": "This disclosure record is the contract-linked GRU v2 placeholder for regulated AUD settlement operations on Chain 138.",
|
||||
"references": [
|
||||
"https://explorer.d-bis.org",
|
||||
"https://info.defi-oracle.io"
|
||||
]
|
||||
}
|
||||
11
config/gru-v2-metadata/chain138/caudc-v2/reporting.json
Normal file
11
config/gru-v2-metadata/chain138/caudc-v2/reporting.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"title": "cAUDC V2 Reporting Manifest",
|
||||
"symbol": "cAUDC",
|
||||
"gruVersion": "2",
|
||||
"chainId": 138,
|
||||
"reportingSchema": "dbis-gru-v2-reporting/1.0",
|
||||
"notes": "Reporting URI placeholder for GRU v2 AUD rollout on Chain 138 with ISO-20022 / IPSAS evidence linkage.",
|
||||
"sources": [
|
||||
"https://explorer.d-bis.org/api/v1/report/token-list?chainId=138"
|
||||
]
|
||||
}
|
||||
21
config/gru-v2-metadata/chain138/ccadc-v2/metadata.json
Normal file
21
config/gru-v2-metadata/chain138/ccadc-v2/metadata.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "Canadian Dollar Coin (Compliant V2)",
|
||||
"symbol": "cCADC",
|
||||
"description": "GRU v2 regulated CAD settlement asset for Chain 138 with ISO-20022-aligned accounting metadata and x402-capable signature support.",
|
||||
"decimals": 6,
|
||||
"logo": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cCADC.svg",
|
||||
"image": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cCADC.svg",
|
||||
"external_url": "https://explorer.d-bis.org",
|
||||
"properties": {
|
||||
"chainId": 138,
|
||||
"currencyCode": "CAD",
|
||||
"gruVersion": "2",
|
||||
"assetFamily": "GRU",
|
||||
"tokenRole": "gru_compliant_base",
|
||||
"forwardCanonical": true,
|
||||
"iso20022Ready": true,
|
||||
"x402Ready": true,
|
||||
"assetId": "keccak256:GRU:cCADC",
|
||||
"assetVersionId": "keccak256:GRU:cCADC:2"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"title": "cCADC V2 Regulatory Disclosure",
|
||||
"symbol": "cCADC",
|
||||
"gruVersion": "2",
|
||||
"chainId": 138,
|
||||
"jurisdiction": "International",
|
||||
"notice": "This disclosure record is the contract-linked GRU v2 placeholder for regulated CAD settlement operations on Chain 138.",
|
||||
"references": [
|
||||
"https://explorer.d-bis.org",
|
||||
"https://info.defi-oracle.io"
|
||||
]
|
||||
}
|
||||
11
config/gru-v2-metadata/chain138/ccadc-v2/reporting.json
Normal file
11
config/gru-v2-metadata/chain138/ccadc-v2/reporting.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"title": "cCADC V2 Reporting Manifest",
|
||||
"symbol": "cCADC",
|
||||
"gruVersion": "2",
|
||||
"chainId": 138,
|
||||
"reportingSchema": "dbis-gru-v2-reporting/1.0",
|
||||
"notes": "Reporting URI placeholder for GRU v2 CAD rollout on Chain 138 with ISO-20022 / IPSAS evidence linkage.",
|
||||
"sources": [
|
||||
"https://explorer.d-bis.org/api/v1/report/token-list?chainId=138"
|
||||
]
|
||||
}
|
||||
21
config/gru-v2-metadata/chain138/cchfc-v2/metadata.json
Normal file
21
config/gru-v2-metadata/chain138/cchfc-v2/metadata.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "Swiss Franc Coin (Compliant V2)",
|
||||
"symbol": "cCHFC",
|
||||
"description": "GRU v2 regulated CHF settlement asset for Chain 138 with ISO-20022-aligned accounting metadata and x402-capable signature support.",
|
||||
"decimals": 6,
|
||||
"logo": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cCHFC.svg",
|
||||
"image": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cCHFC.svg",
|
||||
"external_url": "https://explorer.d-bis.org",
|
||||
"properties": {
|
||||
"chainId": 138,
|
||||
"currencyCode": "CHF",
|
||||
"gruVersion": "2",
|
||||
"assetFamily": "GRU",
|
||||
"tokenRole": "gru_compliant_base",
|
||||
"forwardCanonical": true,
|
||||
"iso20022Ready": true,
|
||||
"x402Ready": true,
|
||||
"assetId": "keccak256:GRU:cCHFC",
|
||||
"assetVersionId": "keccak256:GRU:cCHFC:2"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"title": "cCHFC V2 Regulatory Disclosure",
|
||||
"symbol": "cCHFC",
|
||||
"gruVersion": "2",
|
||||
"chainId": 138,
|
||||
"jurisdiction": "International",
|
||||
"notice": "This disclosure record is the contract-linked GRU v2 placeholder for regulated CHF settlement operations on Chain 138.",
|
||||
"references": [
|
||||
"https://explorer.d-bis.org",
|
||||
"https://info.defi-oracle.io"
|
||||
]
|
||||
}
|
||||
11
config/gru-v2-metadata/chain138/cchfc-v2/reporting.json
Normal file
11
config/gru-v2-metadata/chain138/cchfc-v2/reporting.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"title": "cCHFC V2 Reporting Manifest",
|
||||
"symbol": "cCHFC",
|
||||
"gruVersion": "2",
|
||||
"chainId": 138,
|
||||
"reportingSchema": "dbis-gru-v2-reporting/1.0",
|
||||
"notes": "Reporting URI placeholder for GRU v2 CHF rollout on Chain 138 with ISO-20022 / IPSAS evidence linkage.",
|
||||
"sources": [
|
||||
"https://explorer.d-bis.org/api/v1/report/token-list?chainId=138"
|
||||
]
|
||||
}
|
||||
21
config/gru-v2-metadata/chain138/ceurc-v2/metadata.json
Normal file
21
config/gru-v2-metadata/chain138/ceurc-v2/metadata.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "Euro Coin (Compliant V2)",
|
||||
"symbol": "cEURC",
|
||||
"description": "GRU v2 regulated EUR settlement asset for Chain 138 with ISO-20022-aligned accounting metadata and x402-capable signature support.",
|
||||
"decimals": 6,
|
||||
"logo": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cEURC.svg",
|
||||
"image": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cEURC.svg",
|
||||
"external_url": "https://explorer.d-bis.org",
|
||||
"properties": {
|
||||
"chainId": 138,
|
||||
"currencyCode": "EUR",
|
||||
"gruVersion": "2",
|
||||
"assetFamily": "GRU",
|
||||
"tokenRole": "gru_compliant_base",
|
||||
"forwardCanonical": true,
|
||||
"iso20022Ready": true,
|
||||
"x402Ready": true,
|
||||
"assetId": "keccak256:GRU:cEURC",
|
||||
"assetVersionId": "keccak256:GRU:cEURC:2"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"title": "cEURC V2 Regulatory Disclosure",
|
||||
"symbol": "cEURC",
|
||||
"gruVersion": "2",
|
||||
"chainId": 138,
|
||||
"jurisdiction": "International",
|
||||
"notice": "This disclosure record is the contract-linked GRU v2 placeholder for regulated EUR settlement operations on Chain 138.",
|
||||
"references": [
|
||||
"https://explorer.d-bis.org",
|
||||
"https://info.defi-oracle.io"
|
||||
]
|
||||
}
|
||||
11
config/gru-v2-metadata/chain138/ceurc-v2/reporting.json
Normal file
11
config/gru-v2-metadata/chain138/ceurc-v2/reporting.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"title": "cEURC V2 Reporting Manifest",
|
||||
"symbol": "cEURC",
|
||||
"gruVersion": "2",
|
||||
"chainId": 138,
|
||||
"reportingSchema": "dbis-gru-v2-reporting/1.0",
|
||||
"notes": "Reporting URI placeholder for GRU v2 EUR rollout on Chain 138 with ISO-20022 / IPSAS evidence linkage.",
|
||||
"sources": [
|
||||
"https://explorer.d-bis.org/api/v1/report/token-list?chainId=138"
|
||||
]
|
||||
}
|
||||
21
config/gru-v2-metadata/chain138/ceurt-v2/metadata.json
Normal file
21
config/gru-v2-metadata/chain138/ceurt-v2/metadata.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "Euro Token (Compliant V2)",
|
||||
"symbol": "cEURT",
|
||||
"description": "GRU v2 regulated EUR token-form settlement asset for Chain 138 with ISO-20022-aligned accounting metadata and x402-capable signature support.",
|
||||
"decimals": 6,
|
||||
"logo": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cEURT.svg",
|
||||
"image": "https://raw.githubusercontent.com/Order-of-Hospitallers/proxmox-cp/main/token-lists/logos/gru/cEURT.svg",
|
||||
"external_url": "https://explorer.d-bis.org",
|
||||
"properties": {
|
||||
"chainId": 138,
|
||||
"currencyCode": "EUR",
|
||||
"gruVersion": "2",
|
||||
"assetFamily": "GRU",
|
||||
"tokenRole": "gru_compliant_base",
|
||||
"forwardCanonical": true,
|
||||
"iso20022Ready": true,
|
||||
"x402Ready": true,
|
||||
"assetId": "keccak256:GRU:cEURT",
|
||||
"assetVersionId": "keccak256:GRU:cEURT:2"
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user