Compare commits
133 Commits
sync/curre
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
48d3e3f761 | ||
|
|
bed94a3ad4 | ||
|
|
7be2190441 | ||
|
|
19cb7fe8b5 | ||
|
|
f1715fb684 | ||
|
|
6a9f5dead0 | ||
|
|
770a1db99a | ||
|
|
8868a3501f | ||
|
|
cf96e9d821 | ||
|
|
4c4aa28c95 | ||
|
|
9306a65186 | ||
|
|
7ab231c4ce | ||
|
|
b58c3a0342 | ||
|
|
b8e735dcac | ||
|
|
3bea587e12 | ||
|
|
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,13 +15,14 @@ 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).
|
||||
# Bulk DNS script: scripts/update-all-dns-to-public-ip.sh — use --dry-run and --zone-only=sankofa.nexus (etc.) before wide updates.
|
||||
CLOUDFLARE_API_TOKEN=
|
||||
# Set to 1 if token has no DNS:Edit and you need Global API key for scripts/cloudflare/provision-d-bis-mail-dns-and-npmplus.sh etc.
|
||||
CLOUDFLARE_DNS_PREFER_GLOBAL_KEY=
|
||||
CLOUDFLARE_EMAIL=
|
||||
CLOUDFLARE_API_KEY=
|
||||
CLOUDFLARE_ZONE_ID=
|
||||
@@ -29,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=
|
||||
@@ -36,16 +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 ---
|
||||
# For scripts/verify/backup-npmplus.sh: NPM_EMAIL and NPM_PASSWORD are both required
|
||||
# (no in-script defaults); see AGENTS.md operator / backup row.
|
||||
# PMG (LXC 100) web UI — optional: run scripts/operator/sync-pmg-webui-password-to-dotenv.sh to pull from /root/PMG_WEBUI_password.txt
|
||||
PMG_WEBUI_PASSWORD=
|
||||
# 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=
|
||||
@@ -54,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=
|
||||
|
||||
@@ -76,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=
|
||||
@@ -98,60 +165,168 @@ 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=
|
||||
DEPLOYER_ADDRESS=
|
||||
# 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=
|
||||
DBIS_CORE_URL=
|
||||
CC_PAYMENT_ADAPTERS_URL=
|
||||
CC_AUDIT_LEDGER_URL=
|
||||
CC_SHARED_EVENTS_URL=
|
||||
CC_SHARED_SCHEMAS_URL=
|
||||
FIN_GATEWAY_URL=
|
||||
ALLIANCE_ACCESS_URL=
|
||||
CHAIN138_CI_RPC_URL=
|
||||
ALL_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=
|
||||
CHAIN_1_UNISWAP_V2_FACTORY=0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
|
||||
CHAIN_1_UNISWAP_V2_ROUTER=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
|
||||
CHAIN_1_UNISWAP_V2_START_BLOCK=0
|
||||
CHAIN_10_UNISWAP_V2_FACTORY=0x0c3c1c532F1e39EdF36BE9Fe0bE1410313E074Bf
|
||||
CHAIN_10_UNISWAP_V2_ROUTER=0x4A7b5Da61326A6379179b40d00F57E5bbDC962c2
|
||||
CHAIN_10_UNISWAP_V2_START_BLOCK=0
|
||||
CHAIN_25_UNISWAP_V2_FACTORY=0x3B44B2a187a7b3824131F8db5a74194D0a42Fc15
|
||||
CHAIN_25_UNISWAP_V2_ROUTER=0x145863Eb42Cf62847A6Ca784e6416C1682b1b2Ae
|
||||
CHAIN_25_UNISWAP_V2_START_BLOCK=0
|
||||
CHAIN_56_UNISWAP_V2_FACTORY=0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73
|
||||
CHAIN_56_UNISWAP_V2_ROUTER=0x10ED43C718714eb63d5aA57B78B54704E256024E
|
||||
CHAIN_56_UNISWAP_V2_START_BLOCK=0
|
||||
CHAIN_100_UNISWAP_V2_FACTORY=0xc35DADB65012eC5796536bD9864eD8773aBc74C4
|
||||
CHAIN_100_UNISWAP_V2_ROUTER=0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506
|
||||
CHAIN_100_UNISWAP_V2_START_BLOCK=0
|
||||
CHAIN_137_UNISWAP_V2_FACTORY=0x5757371414417b8C6CAad45bAeF941aBc7d3Ab32
|
||||
CHAIN_137_UNISWAP_V2_ROUTER=0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff
|
||||
CHAIN_137_UNISWAP_V2_START_BLOCK=0
|
||||
CHAIN_42220_UNISWAP_V2_FACTORY=0x62d5b84bE28a183aBB507E125B384122D2C25fAE
|
||||
CHAIN_42220_UNISWAP_V2_ROUTER=0xE3D8bd6Aed4F159bc8000a9cD47CffDb95F96121
|
||||
CHAIN_42220_UNISWAP_V2_START_BLOCK=0
|
||||
CHAIN_43114_UNISWAP_V2_FACTORY=0x9Ad6C38BE94206cA50bb0d90783181662f0Cfa10
|
||||
CHAIN_43114_UNISWAP_V2_ROUTER=0x60aE616a2155Ee3d9A68541Ba4544862310933d4
|
||||
CHAIN_43114_UNISWAP_V2_START_BLOCK=0
|
||||
CHAIN_8453_UNISWAP_V2_FACTORY=0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E
|
||||
CHAIN_8453_UNISWAP_V2_ROUTER=0x8cFe327CEc66d1C090Dd72bd0FF11d690C33a2Eb
|
||||
CHAIN_8453_UNISWAP_V2_START_BLOCK=0
|
||||
CHAIN_42161_UNISWAP_V2_FACTORY=0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E
|
||||
CHAIN_42161_UNISWAP_V2_ROUTER=0x8cFe327CEc66d1C090Dd72bd0FF11d690C33a2Eb
|
||||
CHAIN_42161_UNISWAP_V2_START_BLOCK=0
|
||||
# Optional / scaffold-only until Wemix UniV2 routing is promoted
|
||||
CHAIN_1111_UNISWAP_V2_FACTORY=
|
||||
CHAIN_1111_UNISWAP_V2_ROUTER=
|
||||
CHAIN_1111_UNISWAP_V2_START_BLOCK=0
|
||||
ETHERLINK_RPC_URL=
|
||||
TEZOS_RPC_URL=
|
||||
ETHERSCAN_API_KEY=
|
||||
WEMIXSCAN_API_KEY=
|
||||
ETHERLINK_CCIP_SELECTOR=
|
||||
TEZOS_BRIDGE_ENABLED=
|
||||
ETHERLINK_BRIDGE_ENABLED=
|
||||
@@ -160,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=
|
||||
@@ -172,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=
|
||||
|
||||
@@ -210,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=
|
||||
@@ -241,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=
|
||||
|
||||
@@ -6,6 +6,10 @@
|
||||
2. Make changes, ensure tests pass
|
||||
3. Open a pull request
|
||||
|
||||
Deploy workflow policy:
|
||||
`main` and `master` are both deploy-triggering branches, so `.gitea/workflow-sources/deploy-to-phoenix.yml` and `.gitea/workflow-sources/validate-on-pr.yml` must stay identical across both branches.
|
||||
Use `bash scripts/verify/sync-gitea-workflows.sh` after editing workflow-source files, and `bash scripts/verify/run-all-validation.sh --skip-genesis` to catch workflow drift before push.
|
||||
|
||||
## Pull Requests
|
||||
|
||||
- Use the PR template when opening a PR
|
||||
|
||||
125
.gitea/workflow-sources/deploy-to-phoenix.yml
Normal file
125
.gitea/workflow-sources/deploy-to-phoenix.yml
Normal file
@@ -0,0 +1,125 @@
|
||||
# Canonical deploy workflow. Keep source and checked-in workflow copies byte-identical.
|
||||
# Validation checks both file sync and main/master parity.
|
||||
name: Deploy to Phoenix
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main, master]
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
validate:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Fetch deploy branches for workflow parity check
|
||||
run: |
|
||||
REMOTE="${GITEA_WORKFLOW_REMOTE:-origin}"
|
||||
if git remote | grep -qx gitea; then
|
||||
REMOTE="${GITEA_WORKFLOW_REMOTE:-gitea}"
|
||||
fi
|
||||
git fetch --depth=1 "$REMOTE" main master
|
||||
|
||||
- name: Install validation dependencies
|
||||
run: |
|
||||
corepack enable
|
||||
pnpm install --frozen-lockfile
|
||||
|
||||
# The cW* mesh matrix and deployment-status validators read
|
||||
# cross-chain-pmm-lps/config/*.json. The parent checkout does not
|
||||
# materialize submodules by default, and .gitmodules mixes public HTTPS
|
||||
# with SSH URLs, so clone only the required public validation dependency.
|
||||
- name: Materialize cross-chain-pmm-lps
|
||||
run: |
|
||||
set -euo pipefail
|
||||
if [ ! -f cross-chain-pmm-lps/config/deployment-status.json ]; then
|
||||
rm -rf cross-chain-pmm-lps
|
||||
git clone --depth=1 \
|
||||
https://gitea.d-bis.org/d-bis/cross-chain-pmm-lps.git \
|
||||
cross-chain-pmm-lps
|
||||
fi
|
||||
|
||||
- name: Run repo validation gate
|
||||
run: |
|
||||
bash scripts/verify/run-all-validation.sh --skip-genesis
|
||||
|
||||
deploy:
|
||||
needs: validate
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Trigger Phoenix deployment
|
||||
run: |
|
||||
set -euo pipefail
|
||||
SHA="$(git rev-parse HEAD)"
|
||||
BRANCH="$(git rev-parse --abbrev-ref HEAD)"
|
||||
set +e
|
||||
curl -sSf --retry 3 --retry-connrefused --retry-delay 10 --retry-max-time 180 \
|
||||
--connect-timeout 10 --max-time 120 \
|
||||
-X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \
|
||||
-H "Authorization: Bearer ${{ secrets.PHOENIX_DEPLOY_TOKEN }}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"repo\":\"${{ gitea.repository }}\",\"sha\":\"${SHA}\",\"branch\":\"${BRANCH}\",\"target\":\"default\"}"
|
||||
rc="$?"
|
||||
set -e
|
||||
if [ "$rc" -eq 52 ]; then
|
||||
HEALTH_URL="${{ secrets.PHOENIX_DEPLOY_URL }}"
|
||||
HEALTH_URL="${HEALTH_URL%/api/deploy}/health"
|
||||
echo "Phoenix deploy API restarted during self-deploy; verifying ${HEALTH_URL}"
|
||||
for i in $(seq 1 12); do
|
||||
if curl -fsS --max-time 5 "$HEALTH_URL"; then
|
||||
exit 0
|
||||
fi
|
||||
sleep 5
|
||||
done
|
||||
fi
|
||||
exit "$rc"
|
||||
|
||||
deploy-atomic-swap-dapp:
|
||||
needs: deploy
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Trigger Atomic Swap dApp deployment (Phoenix)
|
||||
run: |
|
||||
set -euo pipefail
|
||||
SHA="$(git rev-parse HEAD)"
|
||||
BRANCH="$(git rev-parse --abbrev-ref HEAD)"
|
||||
curl -sSf \
|
||||
--connect-timeout 10 --max-time 900 \
|
||||
-X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \
|
||||
-H "Authorization: Bearer ${{ secrets.PHOENIX_DEPLOY_TOKEN }}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"repo\":\"${{ gitea.repository }}\",\"sha\":\"${SHA}\",\"branch\":\"${BRANCH}\",\"target\":\"atomic-swap-dapp-live\"}"
|
||||
|
||||
# After app deploy, ask Phoenix to run path-gated Cloudflare DNS sync on the host that has
|
||||
# PHOENIX_REPO_ROOT + .env (not on this runner). Skips unless PHOENIX_CLOUDFLARE_SYNC=1 on that host.
|
||||
# continue-on-error: first-time or missing opt-in should not block the main deploy.
|
||||
cloudflare:
|
||||
needs:
|
||||
- deploy
|
||||
- deploy-atomic-swap-dapp
|
||||
runs-on: ubuntu-latest
|
||||
continue-on-error: true
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Request Cloudflare DNS sync (Phoenix)
|
||||
run: |
|
||||
set -euo pipefail
|
||||
SHA="$(git rev-parse HEAD)"
|
||||
BRANCH="$(git rev-parse --abbrev-ref HEAD)"
|
||||
curl -sSf --retry 5 --retry-all-errors --retry-connrefused --retry-delay 10 --retry-max-time 300 \
|
||||
--connect-timeout 10 --max-time 120 \
|
||||
-X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \
|
||||
-H "Authorization: Bearer ${{ secrets.PHOENIX_DEPLOY_TOKEN }}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"repo\":\"${{ gitea.repository }}\",\"sha\":\"${SHA}\",\"branch\":\"${BRANCH}\",\"target\":\"cloudflare-sync\"}" \
|
||||
|| { echo "Cloudflare DNS sync request failed; optional sync is non-blocking."; exit 0; }
|
||||
33
.gitea/workflow-sources/validate-on-pr.yml
Normal file
33
.gitea/workflow-sources/validate-on-pr.yml
Normal file
@@ -0,0 +1,33 @@
|
||||
# Canonical PR validation workflow. Keep source and checked-in workflow copies byte-identical.
|
||||
# Validation checks both file sync and main/master parity.
|
||||
# PR-only: push validation already runs in deploy-to-phoenix.yml; this gives PRs the same
|
||||
# no-LAN checks without the deploy job (and without deploy secrets).
|
||||
name: Validate (PR)
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened]
|
||||
branches: [main, master]
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
run-all-validation:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Fetch deploy branches for workflow parity check
|
||||
run: |
|
||||
REMOTE="${GITEA_WORKFLOW_REMOTE:-origin}"
|
||||
if git remote | grep -qx gitea; then
|
||||
REMOTE="${GITEA_WORKFLOW_REMOTE:-gitea}"
|
||||
fi
|
||||
git fetch --depth=1 "$REMOTE" main master
|
||||
- name: Install validation dependencies
|
||||
run: |
|
||||
corepack enable
|
||||
pnpm install --frozen-lockfile
|
||||
# Optional: set org/repo variable URA_STRICT_CLOSURE=1 to fail PRs while pilot placeholders
|
||||
# remain in manifest (see scripts/ura/validate-manifest-closure.mjs). Not enabled by default.
|
||||
- name: run-all-validation (no LAN, no genesis)
|
||||
env:
|
||||
URA_STRICT_CLOSURE: ${{ vars.URA_STRICT_CLOSURE }}
|
||||
run: bash scripts/verify/run-all-validation.sh --skip-genesis
|
||||
@@ -1,31 +0,0 @@
|
||||
name: Deploy Sankofa Portal Live
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
validate:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Run repo validation gate
|
||||
run: |
|
||||
bash scripts/verify/run-all-validation.sh --skip-genesis
|
||||
|
||||
deploy:
|
||||
needs: validate
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Trigger portal-live deployment
|
||||
run: |
|
||||
SHA="$(git rev-parse HEAD)"
|
||||
BRANCH="$(git rev-parse --abbrev-ref HEAD)"
|
||||
curl -sSf -X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \
|
||||
-H "Authorization: Bearer ${{ secrets.PHOENIX_DEPLOY_TOKEN }}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"repo\":\"${{ gitea.repository }}\",\"sha\":\"${SHA}\",\"branch\":\"${BRANCH}\",\"target\":\"portal-live\"}"
|
||||
@@ -1,3 +1,5 @@
|
||||
# Canonical deploy workflow. Keep source and checked-in workflow copies byte-identical.
|
||||
# Validation checks both file sync and main/master parity.
|
||||
name: Deploy to Phoenix
|
||||
|
||||
on:
|
||||
@@ -12,12 +14,24 @@ jobs:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# The cw* mesh matrix and deployment-status validators read
|
||||
# cross-chain-pmm-lps/config/*.json. .gitmodules mixes Gitea HTTPS
|
||||
# with git@github.com: SSH URLs, so `submodules: recursive` on the
|
||||
# parent checkout isn't safe. Shallow-clone the public mirror of the
|
||||
# pmm-lps repo directly (config-only, no secrets needed).
|
||||
- name: Materialize cross-chain-pmm-lps (config only)
|
||||
- name: Fetch deploy branches for workflow parity check
|
||||
run: |
|
||||
REMOTE="${GITEA_WORKFLOW_REMOTE:-origin}"
|
||||
if git remote | grep -qx gitea; then
|
||||
REMOTE="${GITEA_WORKFLOW_REMOTE:-gitea}"
|
||||
fi
|
||||
git fetch --depth=1 "$REMOTE" main master
|
||||
|
||||
- name: Install validation dependencies
|
||||
run: |
|
||||
corepack enable
|
||||
pnpm install --frozen-lockfile
|
||||
|
||||
# The cW* mesh matrix and deployment-status validators read
|
||||
# cross-chain-pmm-lps/config/*.json. The parent checkout does not
|
||||
# materialize submodules by default, and .gitmodules mixes public HTTPS
|
||||
# with SSH URLs, so clone only the required public validation dependency.
|
||||
- name: Materialize cross-chain-pmm-lps
|
||||
run: |
|
||||
set -euo pipefail
|
||||
if [ ! -f cross-chain-pmm-lps/config/deployment-status.json ]; then
|
||||
@@ -40,15 +54,33 @@ jobs:
|
||||
|
||||
- name: Trigger Phoenix deployment
|
||||
run: |
|
||||
set -euo pipefail
|
||||
SHA="$(git rev-parse HEAD)"
|
||||
BRANCH="$(git rev-parse --abbrev-ref HEAD)"
|
||||
curl -sSf -X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \
|
||||
set +e
|
||||
curl -sSf --retry 3 --retry-connrefused --retry-delay 10 --retry-max-time 180 \
|
||||
--connect-timeout 10 --max-time 120 \
|
||||
-X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \
|
||||
-H "Authorization: Bearer ${{ secrets.PHOENIX_DEPLOY_TOKEN }}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"repo\":\"${{ gitea.repository }}\",\"sha\":\"${SHA}\",\"branch\":\"${BRANCH}\",\"target\":\"default\"}"
|
||||
rc="$?"
|
||||
set -e
|
||||
if [ "$rc" -eq 52 ]; then
|
||||
HEALTH_URL="${{ secrets.PHOENIX_DEPLOY_URL }}"
|
||||
HEALTH_URL="${HEALTH_URL%/api/deploy}/health"
|
||||
echo "Phoenix deploy API restarted during self-deploy; verifying ${HEALTH_URL}"
|
||||
for i in $(seq 1 12); do
|
||||
if curl -fsS --max-time 5 "$HEALTH_URL"; then
|
||||
exit 0
|
||||
fi
|
||||
sleep 5
|
||||
done
|
||||
fi
|
||||
exit "$rc"
|
||||
|
||||
deploy-atomic-swap-dapp:
|
||||
needs: validate
|
||||
needs: deploy
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
@@ -56,9 +88,12 @@ jobs:
|
||||
|
||||
- name: Trigger Atomic Swap dApp deployment (Phoenix)
|
||||
run: |
|
||||
set -euo pipefail
|
||||
SHA="$(git rev-parse HEAD)"
|
||||
BRANCH="$(git rev-parse --abbrev-ref HEAD)"
|
||||
curl -sSf -X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \
|
||||
curl -sSf \
|
||||
--connect-timeout 10 --max-time 900 \
|
||||
-X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \
|
||||
-H "Authorization: Bearer ${{ secrets.PHOENIX_DEPLOY_TOKEN }}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"repo\":\"${{ gitea.repository }}\",\"sha\":\"${SHA}\",\"branch\":\"${BRANCH}\",\"target\":\"atomic-swap-dapp-live\"}"
|
||||
@@ -78,9 +113,13 @@ jobs:
|
||||
|
||||
- name: Request Cloudflare DNS sync (Phoenix)
|
||||
run: |
|
||||
set -euo pipefail
|
||||
SHA="$(git rev-parse HEAD)"
|
||||
BRANCH="$(git rev-parse --abbrev-ref HEAD)"
|
||||
curl -sSf -X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \
|
||||
curl -sSf --retry 5 --retry-all-errors --retry-connrefused --retry-delay 10 --retry-max-time 300 \
|
||||
--connect-timeout 10 --max-time 120 \
|
||||
-X POST "${{ secrets.PHOENIX_DEPLOY_URL }}" \
|
||||
-H "Authorization: Bearer ${{ secrets.PHOENIX_DEPLOY_TOKEN }}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"repo\":\"${{ gitea.repository }}\",\"sha\":\"${SHA}\",\"branch\":\"${BRANCH}\",\"target\":\"cloudflare-sync\"}"
|
||||
-d "{\"repo\":\"${{ gitea.repository }}\",\"sha\":\"${SHA}\",\"branch\":\"${BRANCH}\",\"target\":\"cloudflare-sync\"}" \
|
||||
|| { echo "Cloudflare DNS sync request failed; optional sync is non-blocking."; exit 0; }
|
||||
|
||||
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
|
||||
@@ -1,3 +1,5 @@
|
||||
# Canonical PR validation workflow. Keep source and checked-in workflow copies byte-identical.
|
||||
# Validation checks both file sync and main/master parity.
|
||||
# PR-only: push validation already runs in deploy-to-phoenix.yml; this gives PRs the same
|
||||
# no-LAN checks without the deploy job (and without deploy secrets).
|
||||
name: Validate (PR)
|
||||
@@ -12,14 +14,20 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Materialize cross-chain-pmm-lps (config only)
|
||||
- name: Fetch deploy branches for workflow parity check
|
||||
run: |
|
||||
set -euo pipefail
|
||||
if [ ! -f cross-chain-pmm-lps/config/deployment-status.json ]; then
|
||||
rm -rf cross-chain-pmm-lps
|
||||
git clone --depth=1 \
|
||||
https://gitea.d-bis.org/d-bis/cross-chain-pmm-lps.git \
|
||||
cross-chain-pmm-lps
|
||||
REMOTE="${GITEA_WORKFLOW_REMOTE:-origin}"
|
||||
if git remote | grep -qx gitea; then
|
||||
REMOTE="${GITEA_WORKFLOW_REMOTE:-gitea}"
|
||||
fi
|
||||
git fetch --depth=1 "$REMOTE" main master
|
||||
- name: Install validation dependencies
|
||||
run: |
|
||||
corepack enable
|
||||
pnpm install --frozen-lockfile
|
||||
# Optional: set org/repo variable URA_STRICT_CLOSURE=1 to fail PRs while pilot placeholders
|
||||
# remain in manifest (see scripts/ura/validate-manifest-closure.mjs). Not enabled by default.
|
||||
- name: run-all-validation (no LAN, no genesis)
|
||||
env:
|
||||
URA_STRICT_CLOSURE: ${{ vars.URA_STRICT_CLOSURE }}
|
||||
run: bash scripts/verify/run-all-validation.sh --skip-genesis
|
||||
|
||||
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
|
||||
79
.gitignore
vendored
79
.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/
|
||||
@@ -75,35 +115,14 @@ reconciliation/
|
||||
*.payload.sha256
|
||||
audit_log.jsonl
|
||||
|
||||
# cross-chain-pmm-lps-publish: git worktree under that repo — not a parent submodule
|
||||
# Local publish / clone trees (nested git repos; not submodules)
|
||||
cross-chain-pmm-lps-publish/
|
||||
|
||||
# Local scratch (never commit)
|
||||
.tmp-*.cjs
|
||||
.codex/
|
||||
.venv-checkjson/
|
||||
|
||||
# Operator / runtime env snapshots under reports/ (sensitive; regenerate from hosts)
|
||||
reports/status/operator-*.env
|
||||
reports/status/operator-runtime*.env
|
||||
reports/status/chain138_aave_runtime.env
|
||||
reports/status/*runtime-env*.env
|
||||
reports/status/ei-matrix-eth-send*
|
||||
reports/status/token-aggregation-*.tar.gz
|
||||
config/production/*did-secrets.env
|
||||
|
||||
# Bulky one-off local outputs (re-run scripts to restore)
|
||||
output/omnl-e2e-*.zip
|
||||
output/omnl-e2e-*/
|
||||
output/office22-*.zip
|
||||
output/settlement-events/
|
||||
output/transaction-package-*/
|
||||
|
||||
# Large optional vendor trees and local checkouts (keep out of main clone)
|
||||
smom-dbis-138-publish/
|
||||
third-party/
|
||||
thirdweb-core-2103-test/
|
||||
tmp/
|
||||
token-aggregation-build/
|
||||
transaction-composer/
|
||||
vendor/
|
||||
|
||||
# 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
|
||||
|
||||
9
.gitmodules
vendored
9
.gitmodules
vendored
@@ -4,7 +4,7 @@
|
||||
# Primary integration remote is Gitea; use GitHub only as an optional mirror when available.
|
||||
[submodule "mcp-proxmox"]
|
||||
path = mcp-proxmox
|
||||
url = https://gitea.d-bis.org/d-bis/mcp-proxmox.git
|
||||
url = https://github.com/gilby125/mcp-proxmox.git
|
||||
[submodule "smom-dbis-138"]
|
||||
path = smom-dbis-138
|
||||
url = git@github.com:Order-of-Hospitallers/smom-dbis-138.git
|
||||
@@ -64,7 +64,6 @@
|
||||
[submodule "MEV_Bot"]
|
||||
path = MEV_Bot
|
||||
url = https://gitea.d-bis.org/d-bis/MEV_Bot.git
|
||||
[submodule "atomic-swap-dapp"]
|
||||
path = atomic-swap-dapp
|
||||
url = https://gitea.d-bis.org/d-bis/atomic-swap-dapp.git
|
||||
# Local bootstrap remote for initial scaffolding; replace with canonical hosted remote before team-wide clone use.
|
||||
[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
79
AGENTS.md
79
AGENTS.md
@@ -11,36 +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` |
|
||||
| pnpm lockfile vs workspace (prevents `pnpm outdated` / importer bugs) | `bash scripts/verify/check-pnpm-workspace-lockfile.sh` — also run as **step 1b** in `run-all-validation.sh` |
|
||||
| CI validation (no LAN) + cW* mesh matrix | `bash scripts/verify/run-all-validation.sh [--skip-genesis]` — same gate as **Gitea** push/PR: `run-all-validation` in `.gitea/workflows/deploy-to-phoenix.yml` (push) and `.gitea/workflows/validate-on-pr.yml` (PR only). Steps: dependencies, **pnpm workspace/lockfile check**, config, cW* mesh (when pair-discovery exists), **`node cross-chain-pmm-lps/scripts/validate-deployment-status.cjs`**, optional genesis. Manual only: `bash scripts/verify/build-cw-mesh-deployment-matrix.sh [--json-out …]` |
|
||||
| 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` — `mcp-proxmox` uses **Gitea** `https://gitea.d-bis.org/d-bis/mcp-proxmox.git` (not the old GitHub-only URL). `cross-chain-pmm-lps-publish` is a **worktree** of `cross-chain-pmm-lps`, not a submodule. |
|
||||
| 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` |
|
||||
| smom-dbis-138 root `forge test` | Uses `foundry.toml` `[profile.default] skip` for legacy Uniswap V2 vendor trees (0.5/0.6 solc); scoped work still uses `bash scripts/forge/scope.sh …` |
|
||||
| cWUSDT Mainnet USD pricing (on-chain + runbook) | `./scripts/deployment/price-cw-token-mainnet.sh` — `docs/03-deployment/CW_TOKEN_USD_PRICING_RUNBOOK.md` |
|
||||
| Deployer LP balances (mesh inventory) | `python3 scripts/deployment/check-deployer-lp-balances.py` — scans `deployment-status.json` + `reports/extraction/promod-uniswap-v2-live-pair-discovery-latest.json`; **UniV2** `lpToken` = pair; **DODO DVM** LP shares = `balanceOf(pool)`; on failure, probes `_BASE_TOKEN_` / `_BASE_CAPITAL_TOKEN_` / `_QUOTE_CAPITAL_TOKEN_` + extra public RPCs (`--no-resolve-dodo` skips; `--chain-id N` for one chain). JSON: `lpTokenAddress`, `lpResolution`, `lpBalances[]`. Use `--deployer` / `DEPLOYER_ADDRESS` if no `PRIVATE_KEY` |
|
||||
| Etherscan Value $0 for Mainnet `cW*` | Listing path (CoinGecko/CMC), not a contract toggle — `docs/04-configuration/coingecko/ETHERSCAN_USD_VALUE_MAINNET_TOKENS.md` |
|
||||
| Verify contracts on explorers (all networks) | `cd smom-dbis-138 && ./scripts/deployment/verify-all-networks-explorers.sh` — Blockscout 138, Etherscan + multichain `cW*`, Avax/Arb bridges, optional Cronos/Wemix/CCIPLogger |
|
||||
| Operator (LAN + secrets) | `./scripts/run-all-operator-tasks-from-lan.sh` (use `--skip-backup` if `NPM_PASSWORD` unset; backup also needs `NPM_EMAIL` in `.env`) |
|
||||
| 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: f126ae50b4...234ce569cc
15
README.md
15
README.md
@@ -90,17 +90,13 @@ From the root directory, you can run:
|
||||
- `pnpm frontend:build` - Build the ProxmoxVE frontend for production
|
||||
- `pnpm frontend:start` - Start the production frontend server
|
||||
|
||||
### Mission Control (unified operator console)
|
||||
|
||||
- `pnpm mission-control:dev` - Next.js console on **http://localhost:3010** (launchpad + guided runbooks + live run trace + audit ZIP)
|
||||
- `pnpm mission-control:build` / `pnpm mission-control:start` - Production build and server
|
||||
- `pnpm mission-control:test` - Executor smoke test (real allowlisted child process)
|
||||
|
||||
See [mission-control/README.md](mission-control/README.md) and [mission-control/TIMELINE.md](mission-control/TIMELINE.md).
|
||||
|
||||
### 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)
|
||||
|
||||
@@ -327,4 +323,3 @@ Individual checks:
|
||||
## License
|
||||
|
||||
This workspace contains multiple projects with different licenses. Please refer to individual project directories for license information.
|
||||
|
||||
|
||||
Submodule alltra-lifi-settlement updated: 5e3b9db91a...1dabf29f6d
Submodule atomic-swap-dapp deleted from cf1da27545
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,24 +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,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,138-weth-1111-ccip,planned,bridge,138,1111,,,,,,,,,,,,"Wemix bridge contracts are deployed and destinations are wired, but the 1111 bridge contracts still hold zero LINK and the lane has not been proven by a successful test transfer."
|
||||
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.
|
||||
|
||||
|
@@ -2,7 +2,7 @@
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"description": "Planner-v2-generated aggregator route visibility matrix for Chain 138 and approved bridge lanes.",
|
||||
"version": "2.0.0",
|
||||
"updated": "2026-04-21T22:30:18.877Z",
|
||||
"updated": "2026-04-05T19:31:45.871Z",
|
||||
"homeChainId": 138,
|
||||
"metadata": {
|
||||
"generatedFrom": [
|
||||
@@ -11,7 +11,7 @@
|
||||
"services/token-aggregation/src/config/cross-chain-bridges.ts"
|
||||
],
|
||||
"verification": {
|
||||
"verifiedAt": "2026-04-21T22:30:18.878Z",
|
||||
"verifiedAt": "2026-04-05T19:31:45.871Z",
|
||||
"verifiedBy": "services/token-aggregation planner-v2 generator",
|
||||
"rpc": "http://192.168.11.211:8545"
|
||||
},
|
||||
@@ -64,7 +64,7 @@
|
||||
"kind": "compliant"
|
||||
},
|
||||
"cBTC": {
|
||||
"address": "0xe94260c555ac1d9d3cc9e1632883452ebdf0082e",
|
||||
"address": "0xcb7c000000000000000000000000000000000138",
|
||||
"decimals": 8,
|
||||
"kind": "monetary_unit"
|
||||
},
|
||||
@@ -80,6 +80,252 @@
|
||||
}
|
||||
},
|
||||
"liveSwapRoutes": [
|
||||
{
|
||||
"routeId": "chain-138-swap-dodo-cusdt-cusdc-0x9e89bae0",
|
||||
"status": "live",
|
||||
"aggregatorFamilies": [
|
||||
"1inch",
|
||||
"0x",
|
||||
"LiFi"
|
||||
],
|
||||
"fromChainId": 138,
|
||||
"toChainId": 138,
|
||||
"tokenInSymbol": "cUSDT",
|
||||
"tokenInAddress": "0x93e66202a11b1772e55407b32b44e5cd8eda7f22",
|
||||
"tokenOutSymbol": "cUSDC",
|
||||
"tokenOutAddress": "0xf22258f57794cc8e06237084b353ab30fffa640b",
|
||||
"routeType": "swap",
|
||||
"hopCount": 1,
|
||||
"label": "DODO PMM cUSDT -> cUSDC",
|
||||
"intermediateSymbols": [],
|
||||
"legs": [
|
||||
{
|
||||
"kind": "swap",
|
||||
"protocol": "dodo_pmm",
|
||||
"executor": "DODO PMM",
|
||||
"executorAddress": "0x3f729632e9553ebaccde2e9b4c8f2b285b014f2e",
|
||||
"poolAddress": "0x9e89bae009adf128782e19e8341996c596ac40dc",
|
||||
"tokenInAddress": "0x93e66202a11b1772e55407b32b44e5cd8eda7f22",
|
||||
"tokenOutAddress": "0xf22258f57794cc8e06237084b353ab30fffa640b",
|
||||
"reserves": {
|
||||
"reserveIn": "999999997998",
|
||||
"reserveOut": "999999997998"
|
||||
}
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"planner-v2-generated",
|
||||
"dodo"
|
||||
],
|
||||
"notes": [
|
||||
"Generated from live planner route graph."
|
||||
]
|
||||
},
|
||||
{
|
||||
"routeId": "chain-138-swap-dodo-cusdc-cusdt-0x9e89bae0",
|
||||
"status": "live",
|
||||
"aggregatorFamilies": [
|
||||
"1inch",
|
||||
"0x",
|
||||
"LiFi"
|
||||
],
|
||||
"fromChainId": 138,
|
||||
"toChainId": 138,
|
||||
"tokenInSymbol": "cUSDC",
|
||||
"tokenInAddress": "0xf22258f57794cc8e06237084b353ab30fffa640b",
|
||||
"tokenOutSymbol": "cUSDT",
|
||||
"tokenOutAddress": "0x93e66202a11b1772e55407b32b44e5cd8eda7f22",
|
||||
"routeType": "swap",
|
||||
"hopCount": 1,
|
||||
"label": "DODO PMM cUSDC -> cUSDT",
|
||||
"intermediateSymbols": [],
|
||||
"legs": [
|
||||
{
|
||||
"kind": "swap",
|
||||
"protocol": "dodo_pmm",
|
||||
"executor": "DODO PMM",
|
||||
"executorAddress": "0x3f729632e9553ebaccde2e9b4c8f2b285b014f2e",
|
||||
"poolAddress": "0x9e89bae009adf128782e19e8341996c596ac40dc",
|
||||
"tokenInAddress": "0xf22258f57794cc8e06237084b353ab30fffa640b",
|
||||
"tokenOutAddress": "0x93e66202a11b1772e55407b32b44e5cd8eda7f22",
|
||||
"reserves": {
|
||||
"reserveIn": "999999997998",
|
||||
"reserveOut": "999999997998"
|
||||
}
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"planner-v2-generated",
|
||||
"dodo"
|
||||
],
|
||||
"notes": [
|
||||
"Generated from live planner route graph."
|
||||
]
|
||||
},
|
||||
{
|
||||
"routeId": "chain-138-swap-dodo-cusdt-usdt-0x866cb44b",
|
||||
"status": "live",
|
||||
"aggregatorFamilies": [
|
||||
"1inch",
|
||||
"0x",
|
||||
"LiFi"
|
||||
],
|
||||
"fromChainId": 138,
|
||||
"toChainId": 138,
|
||||
"tokenInSymbol": "cUSDT",
|
||||
"tokenInAddress": "0x93e66202a11b1772e55407b32b44e5cd8eda7f22",
|
||||
"tokenOutSymbol": "USDT",
|
||||
"tokenOutAddress": "0x004b63a7b5b0e06f6bb6adb4a5f9f590bf3182d1",
|
||||
"routeType": "swap",
|
||||
"hopCount": 1,
|
||||
"label": "DODO PMM cUSDT -> USDT",
|
||||
"intermediateSymbols": [],
|
||||
"legs": [
|
||||
{
|
||||
"kind": "swap",
|
||||
"protocol": "dodo_pmm",
|
||||
"executor": "DODO PMM",
|
||||
"executorAddress": "0x3f729632e9553ebaccde2e9b4c8f2b285b014f2e",
|
||||
"poolAddress": "0x866cb44b59303d8dc5f4f9e3e7a8e8b0bf238d66",
|
||||
"tokenInAddress": "0x93e66202a11b1772e55407b32b44e5cd8eda7f22",
|
||||
"tokenOutAddress": "0x004b63a7b5b0e06f6bb6adb4a5f9f590bf3182d1",
|
||||
"reserves": {
|
||||
"reserveIn": "999999997998",
|
||||
"reserveOut": "999999997998"
|
||||
}
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"planner-v2-generated",
|
||||
"dodo"
|
||||
],
|
||||
"notes": [
|
||||
"Generated from live planner route graph."
|
||||
]
|
||||
},
|
||||
{
|
||||
"routeId": "chain-138-swap-dodo-usdt-cusdt-0x866cb44b",
|
||||
"status": "live",
|
||||
"aggregatorFamilies": [
|
||||
"1inch",
|
||||
"0x",
|
||||
"LiFi"
|
||||
],
|
||||
"fromChainId": 138,
|
||||
"toChainId": 138,
|
||||
"tokenInSymbol": "USDT",
|
||||
"tokenInAddress": "0x004b63a7b5b0e06f6bb6adb4a5f9f590bf3182d1",
|
||||
"tokenOutSymbol": "cUSDT",
|
||||
"tokenOutAddress": "0x93e66202a11b1772e55407b32b44e5cd8eda7f22",
|
||||
"routeType": "swap",
|
||||
"hopCount": 1,
|
||||
"label": "DODO PMM USDT -> cUSDT",
|
||||
"intermediateSymbols": [],
|
||||
"legs": [
|
||||
{
|
||||
"kind": "swap",
|
||||
"protocol": "dodo_pmm",
|
||||
"executor": "DODO PMM",
|
||||
"executorAddress": "0x3f729632e9553ebaccde2e9b4c8f2b285b014f2e",
|
||||
"poolAddress": "0x866cb44b59303d8dc5f4f9e3e7a8e8b0bf238d66",
|
||||
"tokenInAddress": "0x004b63a7b5b0e06f6bb6adb4a5f9f590bf3182d1",
|
||||
"tokenOutAddress": "0x93e66202a11b1772e55407b32b44e5cd8eda7f22",
|
||||
"reserves": {
|
||||
"reserveIn": "999999997998",
|
||||
"reserveOut": "999999997998"
|
||||
}
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"planner-v2-generated",
|
||||
"dodo"
|
||||
],
|
||||
"notes": [
|
||||
"Generated from live planner route graph."
|
||||
]
|
||||
},
|
||||
{
|
||||
"routeId": "chain-138-swap-dodo-cusdc-usdc-0xc39b7d0f",
|
||||
"status": "live",
|
||||
"aggregatorFamilies": [
|
||||
"1inch",
|
||||
"0x",
|
||||
"LiFi"
|
||||
],
|
||||
"fromChainId": 138,
|
||||
"toChainId": 138,
|
||||
"tokenInSymbol": "cUSDC",
|
||||
"tokenInAddress": "0xf22258f57794cc8e06237084b353ab30fffa640b",
|
||||
"tokenOutSymbol": "USDC",
|
||||
"tokenOutAddress": "0x71d6687f38b93ccad569fa6352c876eea967201b",
|
||||
"routeType": "swap",
|
||||
"hopCount": 1,
|
||||
"label": "DODO PMM cUSDC -> USDC",
|
||||
"intermediateSymbols": [],
|
||||
"legs": [
|
||||
{
|
||||
"kind": "swap",
|
||||
"protocol": "dodo_pmm",
|
||||
"executor": "DODO PMM",
|
||||
"executorAddress": "0x3f729632e9553ebaccde2e9b4c8f2b285b014f2e",
|
||||
"poolAddress": "0xc39b7d0f40838cbfb54649d327f49a6dac964062",
|
||||
"tokenInAddress": "0xf22258f57794cc8e06237084b353ab30fffa640b",
|
||||
"tokenOutAddress": "0x71d6687f38b93ccad569fa6352c876eea967201b",
|
||||
"reserves": {
|
||||
"reserveIn": "999999997998",
|
||||
"reserveOut": "999999997998"
|
||||
}
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"planner-v2-generated",
|
||||
"dodo"
|
||||
],
|
||||
"notes": [
|
||||
"Generated from live planner route graph."
|
||||
]
|
||||
},
|
||||
{
|
||||
"routeId": "chain-138-swap-dodo-usdc-cusdc-0xc39b7d0f",
|
||||
"status": "live",
|
||||
"aggregatorFamilies": [
|
||||
"1inch",
|
||||
"0x",
|
||||
"LiFi"
|
||||
],
|
||||
"fromChainId": 138,
|
||||
"toChainId": 138,
|
||||
"tokenInSymbol": "USDC",
|
||||
"tokenInAddress": "0x71d6687f38b93ccad569fa6352c876eea967201b",
|
||||
"tokenOutSymbol": "cUSDC",
|
||||
"tokenOutAddress": "0xf22258f57794cc8e06237084b353ab30fffa640b",
|
||||
"routeType": "swap",
|
||||
"hopCount": 1,
|
||||
"label": "DODO PMM USDC -> cUSDC",
|
||||
"intermediateSymbols": [],
|
||||
"legs": [
|
||||
{
|
||||
"kind": "swap",
|
||||
"protocol": "dodo_pmm",
|
||||
"executor": "DODO PMM",
|
||||
"executorAddress": "0x3f729632e9553ebaccde2e9b4c8f2b285b014f2e",
|
||||
"poolAddress": "0xc39b7d0f40838cbfb54649d327f49a6dac964062",
|
||||
"tokenInAddress": "0x71d6687f38b93ccad569fa6352c876eea967201b",
|
||||
"tokenOutAddress": "0xf22258f57794cc8e06237084b353ab30fffa640b",
|
||||
"reserves": {
|
||||
"reserveIn": "999999997998",
|
||||
"reserveOut": "999999997998"
|
||||
}
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"planner-v2-generated",
|
||||
"dodo"
|
||||
],
|
||||
"notes": [
|
||||
"Generated from live planner route graph."
|
||||
]
|
||||
},
|
||||
{
|
||||
"routeId": "chain-138-swap-dodo-v3-weth10-usdt-0x6550a3a5",
|
||||
"status": "live",
|
||||
@@ -744,56 +990,6 @@
|
||||
}
|
||||
],
|
||||
"liveBridgeRoutes": [
|
||||
{
|
||||
"routeId": "bridge-138-1-cusdt-universalccipbridge",
|
||||
"status": "live",
|
||||
"aggregatorFamilies": [
|
||||
"1inch",
|
||||
"0x",
|
||||
"LiFi"
|
||||
],
|
||||
"fromChainId": 138,
|
||||
"toChainId": 1,
|
||||
"assetSymbol": "cUSDT",
|
||||
"assetAddress": "0x93e66202a11b1772e55407b32b44e5cd8eda7f22",
|
||||
"routeType": "bridge",
|
||||
"bridgeType": "CCIP",
|
||||
"bridgeAddress": "0xcd42e8ed79dc50599535d1de48d3dafa0be156f8",
|
||||
"label": "UniversalCCIPBridge cUSDT 138 -> 1",
|
||||
"tags": [
|
||||
"planner-v2-generated",
|
||||
"bridge"
|
||||
],
|
||||
"notes": [
|
||||
"Generated from bridge registry and planner visibility.",
|
||||
"Registry route UniversalCCIPBridge"
|
||||
]
|
||||
},
|
||||
{
|
||||
"routeId": "bridge-138-1-cusdc-universalccipbridge",
|
||||
"status": "live",
|
||||
"aggregatorFamilies": [
|
||||
"1inch",
|
||||
"0x",
|
||||
"LiFi"
|
||||
],
|
||||
"fromChainId": 138,
|
||||
"toChainId": 1,
|
||||
"assetSymbol": "cUSDC",
|
||||
"assetAddress": "0xf22258f57794cc8e06237084b353ab30fffa640b",
|
||||
"routeType": "bridge",
|
||||
"bridgeType": "CCIP",
|
||||
"bridgeAddress": "0xcd42e8ed79dc50599535d1de48d3dafa0be156f8",
|
||||
"label": "UniversalCCIPBridge cUSDC 138 -> 1",
|
||||
"tags": [
|
||||
"planner-v2-generated",
|
||||
"bridge"
|
||||
],
|
||||
"notes": [
|
||||
"Generated from bridge registry and planner visibility.",
|
||||
"Registry route UniversalCCIPBridge"
|
||||
]
|
||||
},
|
||||
{
|
||||
"routeId": "bridge-138-651940-cusdt-alltraadapter",
|
||||
"status": "live",
|
||||
@@ -845,5 +1041,126 @@
|
||||
]
|
||||
}
|
||||
],
|
||||
"blockedOrPlannedRoutes": []
|
||||
"blockedOrPlannedRoutes": [
|
||||
{
|
||||
"routeId": "chain-138-capability-dodo-planned-cbtc-cusdt",
|
||||
"status": "planned",
|
||||
"fromChainId": 138,
|
||||
"toChainId": 138,
|
||||
"routeType": "swap",
|
||||
"reason": "Set CHAIN138_POOL_CBTC_CUSDT after the canonical cBTC/cUSDT PMM pool is created and funded.",
|
||||
"tokenInSymbols": [
|
||||
"cBTC",
|
||||
"cUSDT"
|
||||
]
|
||||
},
|
||||
{
|
||||
"routeId": "chain-138-capability-dodo-planned-cusdt-cbtc",
|
||||
"status": "planned",
|
||||
"fromChainId": 138,
|
||||
"toChainId": 138,
|
||||
"routeType": "swap",
|
||||
"reason": "Set CHAIN138_POOL_CBTC_CUSDT after the canonical cBTC/cUSDT PMM pool is created and funded.",
|
||||
"tokenInSymbols": [
|
||||
"cUSDT",
|
||||
"cBTC"
|
||||
]
|
||||
},
|
||||
{
|
||||
"routeId": "chain-138-capability-dodo-planned-cbtc-cusdc",
|
||||
"status": "planned",
|
||||
"fromChainId": 138,
|
||||
"toChainId": 138,
|
||||
"routeType": "swap",
|
||||
"reason": "Set CHAIN138_POOL_CBTC_CUSDC after the canonical cBTC/cUSDC PMM pool is created and funded.",
|
||||
"tokenInSymbols": [
|
||||
"cBTC",
|
||||
"cUSDC"
|
||||
]
|
||||
},
|
||||
{
|
||||
"routeId": "chain-138-capability-dodo-planned-cusdc-cbtc",
|
||||
"status": "planned",
|
||||
"fromChainId": 138,
|
||||
"toChainId": 138,
|
||||
"routeType": "swap",
|
||||
"reason": "Set CHAIN138_POOL_CBTC_CUSDC after the canonical cBTC/cUSDC PMM pool is created and funded.",
|
||||
"tokenInSymbols": [
|
||||
"cUSDC",
|
||||
"cBTC"
|
||||
]
|
||||
},
|
||||
{
|
||||
"routeId": "chain-138-capability-dodo-planned-cbtc-cxauc",
|
||||
"status": "planned",
|
||||
"fromChainId": 138,
|
||||
"toChainId": 138,
|
||||
"routeType": "swap",
|
||||
"reason": "Set CHAIN138_POOL_CBTC_CXAUC after the canonical cBTC/cXAUC PMM pool is created and funded.",
|
||||
"tokenInSymbols": [
|
||||
"cBTC",
|
||||
"cXAUC"
|
||||
]
|
||||
},
|
||||
{
|
||||
"routeId": "chain-138-capability-dodo-planned-cxauc-cbtc",
|
||||
"status": "planned",
|
||||
"fromChainId": 138,
|
||||
"toChainId": 138,
|
||||
"routeType": "swap",
|
||||
"reason": "Set CHAIN138_POOL_CBTC_CXAUC after the canonical cBTC/cXAUC PMM pool is created and funded.",
|
||||
"tokenInSymbols": [
|
||||
"cXAUC",
|
||||
"cBTC"
|
||||
]
|
||||
},
|
||||
{
|
||||
"routeId": "chain-138-capability-dodo-planned-weth-usdt",
|
||||
"status": "planned",
|
||||
"fromChainId": 138,
|
||||
"toChainId": 138,
|
||||
"routeType": "swap",
|
||||
"reason": "Set CHAIN138_POOL_WETH_USDT after the canonical WETH/USDT pool is created and funded.",
|
||||
"tokenInSymbols": [
|
||||
"WETH",
|
||||
"USDT"
|
||||
]
|
||||
},
|
||||
{
|
||||
"routeId": "chain-138-capability-dodo-planned-usdt-weth",
|
||||
"status": "planned",
|
||||
"fromChainId": 138,
|
||||
"toChainId": 138,
|
||||
"routeType": "swap",
|
||||
"reason": "Set CHAIN138_POOL_WETH_USDT after the canonical WETH/USDT pool is created and funded.",
|
||||
"tokenInSymbols": [
|
||||
"USDT",
|
||||
"WETH"
|
||||
]
|
||||
},
|
||||
{
|
||||
"routeId": "chain-138-capability-dodo-planned-weth-usdc",
|
||||
"status": "planned",
|
||||
"fromChainId": 138,
|
||||
"toChainId": 138,
|
||||
"routeType": "swap",
|
||||
"reason": "Set CHAIN138_POOL_WETH_USDC after the canonical WETH/USDC pool is created and funded.",
|
||||
"tokenInSymbols": [
|
||||
"WETH",
|
||||
"USDC"
|
||||
]
|
||||
},
|
||||
{
|
||||
"routeId": "chain-138-capability-dodo-planned-usdc-weth",
|
||||
"status": "planned",
|
||||
"fromChainId": 138,
|
||||
"toChainId": 138,
|
||||
"routeType": "swap",
|
||||
"reason": "Set CHAIN138_POOL_WETH_USDC after the canonical WETH/USDC pool is created and funded.",
|
||||
"tokenInSymbols": [
|
||||
"USDC",
|
||||
"WETH"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,161 +0,0 @@
|
||||
{
|
||||
"name": "ALL Mainnet Non-DODO Protocol Surface",
|
||||
"version": "0.1.0",
|
||||
"updated": "2026-04-21",
|
||||
"chainId": 651940,
|
||||
"network": "ALL Mainnet (Alltra)",
|
||||
"status": "bridge_live_swap_inventory_pending",
|
||||
"summary": {
|
||||
"bridgeOnlyLive": true,
|
||||
"sameChainSwapInventoryPublished": false,
|
||||
"notes": [
|
||||
"The Chain 138 <-> 651940 AlltraAdapter bridge is live.",
|
||||
"This file documents the known non-DODO Alltra protocol and token surface without asserting live routable pool inventory.",
|
||||
"Promote protocols here into canonical route inventory only after real factory/router/pool addresses are committed and verified."
|
||||
]
|
||||
},
|
||||
"documentedTokens": [
|
||||
{
|
||||
"symbol": "AUSDT",
|
||||
"address": "0x015B1897Ed5279930bC2Be46F661894d219292A6",
|
||||
"decimals": 18,
|
||||
"category": "stablecoin",
|
||||
"status": "verified"
|
||||
},
|
||||
{
|
||||
"symbol": "USDT",
|
||||
"address": "0x66D8Efa0AF63B0e84eb1Dd72bf00f00cd1e2234e",
|
||||
"decimals": 18,
|
||||
"category": "stablecoin",
|
||||
"status": "verified"
|
||||
},
|
||||
{
|
||||
"symbol": "USDC",
|
||||
"address": "0xa95EeD79f84E6A0151eaEb9d441F9Ffd50e8e881",
|
||||
"decimals": 18,
|
||||
"category": "stablecoin",
|
||||
"status": "verified"
|
||||
},
|
||||
{
|
||||
"symbol": "WETH",
|
||||
"address": "0x798F6762BB40d6801A593459d08F890603D3979C",
|
||||
"decimals": 18,
|
||||
"category": "wrapped-native",
|
||||
"status": "verified"
|
||||
},
|
||||
{
|
||||
"symbol": "WALL",
|
||||
"address": "0x2da2b8f961F161ab6320acB3377e2e844a3C3ce4",
|
||||
"decimals": 18,
|
||||
"category": "wrapped-native",
|
||||
"status": "verified"
|
||||
},
|
||||
{
|
||||
"symbol": "HYDX",
|
||||
"address": "0x0d9793861AEB9244AD1B34375a83A6730F6AdD38",
|
||||
"decimals": 18,
|
||||
"category": "dex-token",
|
||||
"status": "verified"
|
||||
},
|
||||
{
|
||||
"symbol": "HYBX",
|
||||
"address": "0x1839f77eBed7F388c7035f7061B4B8Ef0E72317a",
|
||||
"decimals": 8,
|
||||
"category": "defi-token",
|
||||
"status": "verified"
|
||||
},
|
||||
{
|
||||
"symbol": "CHT",
|
||||
"address": "0xE59Bb804F4884FcEA183a4A67B1bb04f4a4567bc",
|
||||
"decimals": 8,
|
||||
"category": "defi-token",
|
||||
"status": "verified"
|
||||
},
|
||||
{
|
||||
"symbol": "AUDA",
|
||||
"address": "0x690740f055A41FA7669f5a379Bf71B0cDF353073",
|
||||
"decimals": 18,
|
||||
"category": "defi-token",
|
||||
"status": "verified"
|
||||
}
|
||||
],
|
||||
"protocols": [
|
||||
{
|
||||
"name": "AlltraDEX / EnhancedSwapRouter",
|
||||
"family": "custom_router",
|
||||
"status": "documented_inventory_pending",
|
||||
"factoryAddress": null,
|
||||
"routerAddress": null,
|
||||
"notes": [
|
||||
"Documented in docs/11-references/ALL_MAINNET_ROUTING_ENGINE.md as the intended same-chain swap surface.",
|
||||
"No committed canonical factory/router/pool inventory is currently published in-repo."
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "HYDX",
|
||||
"family": "custom_router",
|
||||
"status": "token_present_protocol_surface_pending",
|
||||
"factoryAddress": null,
|
||||
"routerAddress": null,
|
||||
"envKeys": [
|
||||
"CHAIN_651940_HYDX_FACTORY",
|
||||
"CHAIN_651940_HYDX_ROUTER",
|
||||
"CHAIN_651940_HYDX_START_BLOCK",
|
||||
"CHAIN_651940_HYDX_PAIR_CREATED_EVENT"
|
||||
],
|
||||
"notes": [
|
||||
"The HYDX token is documented and verified on ALL Mainnet.",
|
||||
"The repo expects factory/router discovery via env, but no canonical pool inventory is currently committed."
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Uniswap V2",
|
||||
"family": "uniswap_v2",
|
||||
"status": "env_placeholder_only",
|
||||
"factoryAddress": null,
|
||||
"routerAddress": null,
|
||||
"notes": [
|
||||
"Referenced in token-aggregation dex-factory config and docs as an env-driven surface.",
|
||||
"Do not treat as routable until real factory/router/pair addresses are committed."
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Uniswap V3",
|
||||
"family": "uniswap_v3",
|
||||
"status": "env_placeholder_only",
|
||||
"factoryAddress": null,
|
||||
"routerAddress": null,
|
||||
"notes": [
|
||||
"Referenced in token-aggregation dex-factory config and docs as an env-driven surface.",
|
||||
"Do not treat as routable until real factory/router/pool addresses are committed."
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "DODO PMM",
|
||||
"family": "dodo_pmm",
|
||||
"status": "env_placeholder_only",
|
||||
"factoryAddress": null,
|
||||
"routerAddress": null,
|
||||
"notes": [
|
||||
"Mentioned in docs as placeholder-only for ALL Mainnet.",
|
||||
"No committed DODO PMM pool inventory is currently published for chain 651940."
|
||||
]
|
||||
}
|
||||
],
|
||||
"bridgeSurface": {
|
||||
"adapter": {
|
||||
"name": "AlltraAdapter",
|
||||
"address": "0x66FEBA2fC9a0B47F26DD4284DAd24F970436B8Dc",
|
||||
"status": "live"
|
||||
},
|
||||
"supportedBridgeAssets": [
|
||||
"cUSDC",
|
||||
"cUSDT"
|
||||
]
|
||||
},
|
||||
"nextTasks": [
|
||||
"Publish real same-chain pool inventory before promoting ALL Mainnet beyond bridge-live inventory.",
|
||||
"Commit canonical factory/router metadata once HYDX or AlltraDEX routing addresses are confirmed.",
|
||||
"Add pool-level addresses and verification artifacts before enabling public route generation from this protocol surface."
|
||||
]
|
||||
}
|
||||
@@ -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.
|
||||
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"registryEntryId": "a5c115dd-e147-4eb5-8cf1-f7d9c38f959e",
|
||||
"entity_id": "98450070C57395F6B906",
|
||||
"jurisdiction": "International",
|
||||
"chain_id": 138,
|
||||
"address": "0x1ac3F4942a71E86A9682D91837E1E71b7BACdF99",
|
||||
"addressRole": "token_contract",
|
||||
"aliases": [
|
||||
{
|
||||
"aliasType": "internal_slug",
|
||||
"aliasValue": "chain138-cusdc-v2",
|
||||
"validFrom": "2026-03-31T08:22:11Z"
|
||||
}
|
||||
],
|
||||
"blockscout": {
|
||||
"label": "Chain 138 cUSDC V2 (staged)",
|
||||
"labelType": "token"
|
||||
},
|
||||
"status": "active",
|
||||
"lastCorrelationId": "deploy-cusdc-v2-2026-03-31"
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"registryEntryId": "3cc7d52c-26fb-4afb-9508-0c102f8f6f81",
|
||||
"entity_id": "98450070C57395F6B906",
|
||||
"jurisdiction": "International",
|
||||
"chain_id": 138,
|
||||
"address": "0x8d342d321DdEe97D0c5011DAF8ca0B59DA617D29",
|
||||
"addressRole": "token_contract",
|
||||
"aliases": [
|
||||
{
|
||||
"aliasType": "internal_slug",
|
||||
"aliasValue": "chain138-cusdt-v2",
|
||||
"validFrom": "2026-03-31T08:22:11Z"
|
||||
}
|
||||
],
|
||||
"blockscout": {
|
||||
"label": "Chain 138 cUSDT V2 (staged)",
|
||||
"labelType": "token"
|
||||
},
|
||||
"status": "active",
|
||||
"lastCorrelationId": "deploy-cusdt-v2-2026-03-31"
|
||||
}
|
||||
@@ -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,37 +0,0 @@
|
||||
{
|
||||
"registryVersion": 1,
|
||||
"purpose": "Authoritative network codes for Elemental Imperium (33×33×6) wallet labels. ASNs are optional; add when assigned.",
|
||||
"labelSpec": {
|
||||
"id": "ei-wallet-label-v1",
|
||||
"cellIdFormat": "EI-L{lpbca:02d}-B{branch:02d}-C{class}",
|
||||
"labelFormatDefault": "{networkCode}.{cellId}",
|
||||
"labelFormatWithAsn": "{networkCode}.{cellId}.AS{asn}",
|
||||
"notes": [
|
||||
"cellId is stable and never depends on ASN or network reassignment uses.",
|
||||
"networkCode is lowercase kebab-case; use this registry as the allow-list.",
|
||||
"When asn is assigned, append .AS{n} with integer n (no leading AS in the number token beyond the literal AS prefix)."
|
||||
]
|
||||
},
|
||||
"defaultNetworkCode": "unassigned",
|
||||
"overlayExamplePath": "config/elemental-imperium-wallet-overlay.example.json",
|
||||
"networks": [
|
||||
{
|
||||
"code": "unassigned",
|
||||
"displayName": "Not yet mapped to an operational network",
|
||||
"asn": null,
|
||||
"status": "placeholder"
|
||||
},
|
||||
{
|
||||
"code": "chain138-core",
|
||||
"displayName": "Chain 138 execution / RPC plane (internal)",
|
||||
"asn": null,
|
||||
"status": "planned"
|
||||
},
|
||||
{
|
||||
"code": "operator-lan",
|
||||
"displayName": "Operator management LAN (e.g. 192.168.11.0/24)",
|
||||
"asn": null,
|
||||
"status": "planned"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"overlayVersion": 1,
|
||||
"description": "Optional mapping layered on registry defaults. rangeRules: first matching rule sets networkCode and asn for that wallet. cellOverrides: per cellId, partial overrides win over rangeRules.",
|
||||
"rangeRules": [
|
||||
{
|
||||
"comment": "Example: LPBCA slice 0–10 on chain138-core; remove or edit when ASNs are assigned",
|
||||
"match": {
|
||||
"lpbca": [0, 10],
|
||||
"branch": [0, 32],
|
||||
"class": [0, 5]
|
||||
},
|
||||
"networkCode": "chain138-core",
|
||||
"asn": null
|
||||
}
|
||||
],
|
||||
"cellOverrides": {
|
||||
"EI-L00-B00-C0": {
|
||||
"comment": "Example single-cell override",
|
||||
"networkCode": "unassigned",
|
||||
"asn": null
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
{
|
||||
"template_version": "1.1.0",
|
||||
"purpose": "Additional on-chain and off-chain inventory for the source-to-CEX execution model.",
|
||||
"questions_to_fill": [
|
||||
"All additional EVM EOAs or smart-wallet addresses",
|
||||
"Any multisigs, vaults, or treasury contracts you want included",
|
||||
"Any custodial or exchange balances to include off-chain",
|
||||
"Any LP or staking positions not visible from wallet token balances alone",
|
||||
"The real production CEX or OTC sink to use for handoff"
|
||||
],
|
||||
"wallets": [
|
||||
{
|
||||
"label": "primary-deployer-documented",
|
||||
"address": "0x4A666F96fC8764181194447A7dFdb7d471b301C8",
|
||||
"chains": [
|
||||
"1",
|
||||
"138"
|
||||
],
|
||||
"role": "treasury",
|
||||
"include_in_baseline": true,
|
||||
"notes": "Canonical documented deployer wallet. Deduplicate against primary baseline if loaded twice."
|
||||
}
|
||||
],
|
||||
"offchain_accounts": [
|
||||
{
|
||||
"label": "example-exchange",
|
||||
"platform": "unknown",
|
||||
"account_type": "unknown",
|
||||
"operational_status": "planned",
|
||||
"enabled_for_production_handoff": false,
|
||||
"accepted_deposit_assets": [
|
||||
"USDC"
|
||||
],
|
||||
"preferred_deposit_asset": "USDC",
|
||||
"deposit_chain_id": "1",
|
||||
"deposit_chain_name": "Ethereum Mainnet",
|
||||
"deposit_address": "",
|
||||
"min_packet_usd": 1000,
|
||||
"max_packet_usd": 250000,
|
||||
"slippage_ceiling_bps": 100,
|
||||
"asset_balances": [
|
||||
{
|
||||
"symbol": "USDC",
|
||||
"amount": 0,
|
||||
"estimated_usd": 0,
|
||||
"chain_id": "offchain",
|
||||
"chain_name": "Off-chain / custodial",
|
||||
"notes": "Replace with a real balance only when you want it counted."
|
||||
}
|
||||
],
|
||||
"include_in_baseline": false,
|
||||
"notes": "Replace with a real sink before enabling production handoff."
|
||||
}
|
||||
],
|
||||
"risk_preferences": {
|
||||
"max_drawdown_pct": null,
|
||||
"liquidity_need_horizon": null,
|
||||
"bridging_allowed": null,
|
||||
"lp_allowed": null,
|
||||
"leverage_allowed": null
|
||||
}
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
{
|
||||
"template_version": "1.1.0",
|
||||
"purpose": "Additional on-chain and off-chain inventory for the source-to-CEX execution model.",
|
||||
"questions_to_fill": [
|
||||
"All additional EVM EOAs or smart-wallet addresses",
|
||||
"Any multisigs, vaults, or treasury contracts you want included",
|
||||
"Any custodial or exchange balances to include off-chain",
|
||||
"Any LP or staking positions not visible from wallet token balances alone",
|
||||
"The real production CEX or OTC sink to use for handoff"
|
||||
],
|
||||
"wallets": [
|
||||
{
|
||||
"label": "primary-deployer-documented",
|
||||
"address": "0x4A666F96fC8764181194447A7dFdb7d471b301C8",
|
||||
"chains": [
|
||||
"1",
|
||||
"138"
|
||||
],
|
||||
"role": "treasury",
|
||||
"include_in_baseline": true,
|
||||
"notes": "Canonical documented deployer wallet. Deduplicate against primary baseline if loaded twice."
|
||||
}
|
||||
],
|
||||
"offchain_accounts": [
|
||||
{
|
||||
"label": "example-exchange",
|
||||
"platform": "unknown",
|
||||
"account_type": "unknown",
|
||||
"operational_status": "planned",
|
||||
"enabled_for_production_handoff": false,
|
||||
"accepted_deposit_assets": [
|
||||
"USDC"
|
||||
],
|
||||
"preferred_deposit_asset": "USDC",
|
||||
"deposit_chain_id": "1",
|
||||
"deposit_chain_name": "Ethereum Mainnet",
|
||||
"deposit_address": "",
|
||||
"min_packet_usd": 1000,
|
||||
"max_packet_usd": 250000,
|
||||
"slippage_ceiling_bps": 100,
|
||||
"asset_balances": [
|
||||
{
|
||||
"symbol": "USDC",
|
||||
"amount": 0,
|
||||
"estimated_usd": 0,
|
||||
"chain_id": "offchain",
|
||||
"chain_name": "Off-chain / custodial",
|
||||
"notes": "Replace with a real balance only when you want it counted."
|
||||
}
|
||||
],
|
||||
"include_in_baseline": false,
|
||||
"notes": "Replace with a real sink before enabling production handoff."
|
||||
}
|
||||
],
|
||||
"risk_preferences": {
|
||||
"max_drawdown_pct": null,
|
||||
"liquidity_need_horizon": null,
|
||||
"bridging_allowed": null,
|
||||
"lp_allowed": null,
|
||||
"leverage_allowed": null
|
||||
}
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"updated": "2026-04-18",
|
||||
"rail": "mainnet_cwusdc_usdc",
|
||||
"network": {
|
||||
"chainId": 1,
|
||||
"name": "Ethereum Mainnet",
|
||||
"rpcEnvKeys": [
|
||||
"ETHEREUM_MAINNET_RPC"
|
||||
]
|
||||
},
|
||||
"publicPair": {
|
||||
"base": "cWUSDC",
|
||||
"quote": "USDC",
|
||||
"role": "discovery_lane",
|
||||
"venue": "uniswap_v2_pair",
|
||||
"poolAddress": "0xC28706F899266b36BC43cc072b3a921BDf2C48D9"
|
||||
},
|
||||
"defendedVenue": {
|
||||
"base": "cWUSDC",
|
||||
"quote": "USDC",
|
||||
"role": "primary_defense",
|
||||
"venue": "dodo_pmm",
|
||||
"poolAddress": "0x69776fc607e9edA8042e320e7e43f54d06c68f0E",
|
||||
"managedCycleScript": "smom-dbis-138/script/flash/RunManagedMainnetAaveCwusdcUsdcQuotePushCycle.s.sol:RunManagedMainnetAaveCwusdcUsdcQuotePushCycle"
|
||||
},
|
||||
"thresholds": {
|
||||
"warnDeviationBps": 25,
|
||||
"interveneDeviationBps": 75,
|
||||
"criticalDeviationBps": 150,
|
||||
"minBaseReserveUnits": 2500,
|
||||
"minQuoteReserveUnits": 2500
|
||||
},
|
||||
"managedCycle": {
|
||||
"defaultHarvestSurplus": true,
|
||||
"defaultGasHoldbackTargetRaw": 0,
|
||||
"maxAutomatedFlashQuoteAmountRaw": 2964298,
|
||||
"quoteAmountByDeviationBps": [
|
||||
{
|
||||
"minDeviationBps": 150,
|
||||
"flashQuoteAmountRaw": 2964298
|
||||
},
|
||||
{
|
||||
"minDeviationBps": 75,
|
||||
"flashQuoteAmountRaw": 1482149
|
||||
}
|
||||
]
|
||||
},
|
||||
"notes": [
|
||||
"The public Uniswap V2 pair is for visible routing and discovery, not for hard parity guarantees on its own.",
|
||||
"When the public pair drifts beyond the intervention corridor, use the managed DODO quote-push stack as the first automated defense path.",
|
||||
"Do not trust POOL_CWUSDC_USDC_MAINNET from dotenv blindly; this policy is the canonical defended venue binding.",
|
||||
"Automation is capped to the currently tested safe tranche until the defended lane is explicitly re-sized from fresh liquidity measurements."
|
||||
]
|
||||
}
|
||||
@@ -1,83 +0,0 @@
|
||||
{
|
||||
"program_name": "Mr. Promod Uniswap V2 cW Deep Liquidity Program",
|
||||
"purpose": "Define the desired-state Uniswap V2 or Uniswap-V2-compatible liquidity rollout for cW* and cWAUSDT rails on bridged public networks.",
|
||||
"operator_rule": "When canonical USDC or USDT depth is scarce, concentrate depth first in wrapped support rails and then expand into canonical settlement rails.",
|
||||
"mainnet_funding_posture": {
|
||||
"mode": "triple-rail-support",
|
||||
"required_deployer_assets": [
|
||||
"cWUSDC",
|
||||
"cWUSDT",
|
||||
"cWAUSDT"
|
||||
],
|
||||
"notes": [
|
||||
"cWUSDC and cWUSDT remain the core settlement-adjacent rails.",
|
||||
"cWAUSDT is the wrapped-depth support asset when canonical USDC or USDT inventory is not yet deep enough."
|
||||
]
|
||||
},
|
||||
"priority_tiers": {
|
||||
"tier_1": [
|
||||
"1",
|
||||
"8453",
|
||||
"42161",
|
||||
"10",
|
||||
"137"
|
||||
],
|
||||
"tier_2": [
|
||||
"56",
|
||||
"43114",
|
||||
"100",
|
||||
"42220",
|
||||
"25"
|
||||
],
|
||||
"tier_3": [
|
||||
"1111"
|
||||
]
|
||||
},
|
||||
"wrapped_depth_phase": {
|
||||
"preferred_pairs_in_order": [
|
||||
"cWAUSDT/cWUSDC",
|
||||
"cWAUSDT/cWUSDT",
|
||||
"cWUSDT/cWUSDC"
|
||||
],
|
||||
"allocation_share_pct": {
|
||||
"flagship_pair": 50,
|
||||
"second_pair": 30,
|
||||
"third_pair": 20
|
||||
},
|
||||
"notes": [
|
||||
"This phase is for creating visibly deep wrapped-to-wrapped liquidity before canonical settlement rails are deep enough.",
|
||||
"Wrapped-depth pools strengthen routing and inventory transfer between the cW settlement rails and cWAUSDT support inventory.",
|
||||
"These pools do not replace the eventual need for direct canonical settlement rails."
|
||||
]
|
||||
},
|
||||
"settlement_phase": {
|
||||
"preferred_pairs_by_hub": {
|
||||
"USDC": [
|
||||
"cWUSDC/USDC",
|
||||
"cWUSDT/USDC",
|
||||
"cWAUSDT/USDC"
|
||||
],
|
||||
"USDT": [
|
||||
"cWUSDT/USDT",
|
||||
"cWUSDC/USDT",
|
||||
"cWAUSDT/USDT"
|
||||
]
|
||||
},
|
||||
"notes": [
|
||||
"Settlement-phase pools remain the preferred terminal rails for exchange and OTC normalization.",
|
||||
"Promote settlement rails only after wrapped-depth support is stable and enough canonical stable inventory is available."
|
||||
]
|
||||
},
|
||||
"uniswap_v2_requirements": {
|
||||
"required_env_suffixes": [
|
||||
"UNISWAP_V2_FACTORY",
|
||||
"UNISWAP_V2_ROUTER",
|
||||
"UNISWAP_V2_START_BLOCK"
|
||||
],
|
||||
"required_registry_updates": [
|
||||
"cross-chain-pmm-lps/config/deployment-status.json",
|
||||
"token-aggregation env for the target chain",
|
||||
"MCP allowlist or indexer visibility for new pairs"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"last_updated": "2026-04-17",
|
||||
"purpose": "Operator policy for Chain 138 -> Mainnet normalization -> CEX handoff.",
|
||||
"production_enabled": false,
|
||||
"default_route_model": "Chain 138 inventory -> canonical bridge -> Mainnet normalization -> CEX handoff",
|
||||
"operator_defaults": {
|
||||
"primary_same_day_feeder": "cUSDC",
|
||||
"secondary_same_day_feeder": "cUSDT",
|
||||
"stable_lp_mode": "unwind_first",
|
||||
"immediate_assets": [
|
||||
"cWUSDC",
|
||||
"cWUSDT"
|
||||
],
|
||||
"reject_non_promoted_assets": true
|
||||
},
|
||||
"normalization_policy": {
|
||||
"preferred_settlement_assets": [
|
||||
"USDC",
|
||||
"USDT"
|
||||
],
|
||||
"default_settlement_asset": "USDC",
|
||||
"allow_usdt_only_with_operator_approval": true,
|
||||
"post_bridge_aggregation_only": true
|
||||
},
|
||||
"packetization_policy": {
|
||||
"bridge_packet_usd_max": 250000,
|
||||
"normalization_packet_usd_max": 100000,
|
||||
"direct_cwusdc_usdc_usage_cap_usd": 213.102461,
|
||||
"direct_cwusdt_usdt_usage_cap_usd": 2.182358,
|
||||
"force_cwusdt_via_cwusdc_threshold_usd": 10,
|
||||
"default_slippage_ceiling_bps": 100,
|
||||
"chunking_mode": "bridge_in_chunks_then_normalize_then_continuous_cex_handoff"
|
||||
}
|
||||
}
|
||||
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
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user