diff --git a/config/hybx-omnl-cross-chain-lines.json b/config/hybx-omnl-cross-chain-lines.json index 96ecaf6..3971e0e 100644 --- a/config/hybx-omnl-cross-chain-lines.json +++ b/config/hybx-omnl-cross-chain-lines.json @@ -527,6 +527,33 @@ }, "inboundSettlementMainnet": "0xB08502ceE2545eEF782e933CFb80D0663E564da8", "inboundSettlementType": "gnosis-safe" + }, + { + "lineId": "0x9f3e2a1b8c7d6e5f4a3b2c1d0e9f8a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f", + "officeId": 29, + "externalId": "ZBANK-OMNL", + "entityName": "zBank (OneX Bank)", + "walletId": "HYBX-OFFICE-029", + "treasuryWalletMainnet": "0xB08502ceE2545eEF782e933CFb80D0663E564da8", + "treasuryWalletChain138": "0xc93522ae4ab7482572cc29edd68fbb6d5ec6a585", + "treasuryWalletShivaOneX": "0x0000000000000000000000000000000000000000", + "chains": { + "138": { + "tokenM0": "0x0000000000000000000000000000000000000000", + "tokenM1": "0xf22258f57794CC8E06237084b353Ab30fFfa640b" + }, + "900001": { + "tokenM0": "0x0000000000000000000000000000000000000000", + "tokenM1": "0x0000000000000000000000000000000000000000" + }, + "1": { + "tokenM0": "0x0000000000000000000000000000000000000000", + "tokenM1": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" + } + }, + "inboundSettlementMainnet": "0xB08502ceE2545eEF782e933CFb80D0663E564da8", + "inboundSettlementType": "gnosis-safe", + "integrationRef": "config/onex-shiva-integration.v1.json" } ], "globalInboundSettlementMainnet": "0xB08502ceE2545eEF782e933CFb80D0663E564da8" diff --git a/config/offices/office-24-settlement.v1.json b/config/offices/office-24-settlement.v1.json index 770b3f1..2ee898d 100644 --- a/config/offices/office-24-settlement.v1.json +++ b/config/offices/office-24-settlement.v1.json @@ -3,7 +3,7 @@ "version": "1.0.0", "officeId": 24, "externalId": "HOSPITALLERS-ZARDASHT-IRAQ-IRAN", - "name": "HOSPITALLERS — Zardasht (Iraq / Iran Operations)", + "name": "Office 24 Central Bank — HOSPITALLERS Zardasht (Iraq / Iran)", "fineractTenant": "omnl", "tenantUser": "ali_hospitallers_tenant", "adminUser": "ali_hospitallers_admin", diff --git a/config/omnl-supported-chains.v1.json b/config/omnl-supported-chains.v1.json index ac04f46..c05ed1c 100644 --- a/config/omnl-supported-chains.v1.json +++ b/config/omnl-supported-chains.v1.json @@ -1224,20 +1224,23 @@ }, { "chainId": 900001, - "name": "OMNL Expansion Slot 1", + "name": "Shiva Blockchain (OneX)", "type": "evm", - "nativeSymbol": "ETH", - "tier": "reserved", - "omnlRole": "expansion", - "status": "reserved", + "nativeSymbol": "SHIVA", + "tier": "primary", + "omnlRole": "onex-shiva", + "status": "active", "rpcEnv": "CHAIN_900001_RPC_URL", + "explorerUrl": "https://explorer.shiva.onex.omdnl.org", + "rpcDefault": "https://rpc.shiva.onex.omdnl.org", "settlement": { - "m2LoadEnabled": false, - "swapEnabled": false, - "bridgeEnabled": false, - "officeId": 24 + "m2LoadEnabled": true, + "swapEnabled": true, + "bridgeEnabled": true, + "officeId": 29 }, - "complianceEnv": "OMNL_COMPLIANCE_CORE_900001" + "complianceEnv": "OMNL_COMPLIANCE_CORE_900001", + "integrationRef": "config/onex-shiva-integration.v1.json" }, { "chainId": 900002, diff --git a/config/swift-listener-chain138.v1.json b/config/swift-listener-chain138.v1.json new file mode 100644 index 0000000..de19e20 --- /dev/null +++ b/config/swift-listener-chain138.v1.json @@ -0,0 +1,110 @@ +{ + "$schema": "OMNL SWIFT FIN / ISO 20022 listener — Chain 138 + Office 24 production", + "schemaVersion": "1.0.0", + "chain138": { + "chainId": 138, + "names": ["chain138", "chain 138", "defi oracle meta", "dbis", "omnl"], + "rpcHint": "RPC_URL_138", + "configSources": [ + "config/ei-matrix-138-assets-and-pools.v1.json", + "config/chain138-iso20022-attestation.v1.json" + ] + }, + "supportedSwiftFinTypes": ["MT103", "MT102", "MT202", "MT910", "MT940", "MT942", "MT950"], + "supportedIso20022Types": [ + "pain.001", + "pacs.008", + "pacs.009", + "pacs.002", + "camt.052", + "camt.053", + "camt.054" + ], + "cToCwSymbolMapping": { + "USD": "cWUSD", + "USDC": "cWUSDC", + "USDT": "cWUSDT", + "EUR": "cWEUR", + "GBP": "cWGBP" + }, + "matchHints": { + "instructionIdPrefixes": ["HOSPITALLERS", "CHAIN138", "OMNL", "HYBX", "ZARDASHT", "Z-BANK", "O24"], + "remittanceKeywords": [ + "chain138", + "cWUSDC", + "cWUSDT", + "cWUSD", + "omnl", + "hybx", + "office 24", + "zardasht", + "hospitallers" + ] + }, + "storage": { + "eventsDir": "reports/swift-listener/events", + "latestStatus": "reports/swift-listener/status-latest.json", + "processedIndex": "reports/swift-listener/processed-index.json", + "inboxDir": "reports/swift-listener/inbox", + "archiveDir": "reports/swift-listener/archive", + "as4InboxDir": "reports/swift-listener/as4-inbox", + "mailInboxDir": "reports/swift-listener/mail-inbox", + "telexInboxDir": "reports/swift-listener/telex-inbox" + }, + "adapters": { + "fileInbox": { "enabled": true, "pollIntervalSec": 30, "archiveOnProcess": true }, + "webhook": { + "enabled": true, + "port": 8788, + "path": "/inbound", + "healthPath": "/health", + "authBearerEnv": "SWIFT_LISTENER_WEBHOOK_TOKEN", + "webhookSecretEnv": "HYBX_WEBHOOK_SECRET", + "webhookSignatureHeader": "x-hybx-signature" + }, + "p2pRail": { + "enabled": false, + "baseUrlEnv": "P2P_BASE_URL", + "pollIntervalSec": 60, + "transactionsPath": "/api/v1/transactions" + }, + "finGateway": { + "enabled": false, + "baseUrlEnv": "FIN_GATEWAY_URL", + "fallbackBaseUrlEnv": "ALLIANCE_ACCESS_URL", + "pollIntervalSec": 120, + "messagesPath": "/messages", + "authBearerEnv": "FIN_GATEWAY_TOKEN" + }, + "swiftFinTcp": { + "enabled": true, + "host": "0.0.0.0", + "portEnv": "SWIFT_FIN_TCP_PORT", + "defaultPort": 5001 + }, + "as4Inbox": { "enabled": false, "pollIntervalSec": 60, "archiveOnProcess": true }, + "mailAttachmentInbox": { "enabled": false, "pollIntervalSec": 120, "archiveOnProcess": true }, + "telexInbox": { "enabled": false, "pollIntervalSec": 120, "archiveOnProcess": true } + }, + "outbound": { + "omnlForward": { + "enabled": true, + "mode": "local_and_api", + "apiPath": "/api/v1/omnl/iso20022/messages", + "tokenAggregationUrlEnv": "TOKEN_AGGREGATION_URL", + "apiKeyEnv": "OMNL_API_KEY", + "localStoreDir": "config/iso20022-omnl/messages" + }, + "intakeGateway": { + "enabled": true, + "gatewayAddressEnv": "ISO20022_INTAKE_GATEWAY_MAINNET", + "gatewayAddressFallback": "0x66C89F91A4e830d87fcE4E5F86aFA71A96FbDa3d", + "rpcUrlEnv": "RPC_URL_138", + "privateKeyEnv": "PRIVATE_KEY", + "executeEnv": "SWIFT_LISTENER_GATEWAY_EXECUTE", + "dryRunDefault": true, + "autoExecuteWhenKeyPresent": true, + "chainId": 138 + } + } +} diff --git a/config/swift-mt-catalog.v1.json b/config/swift-mt-catalog.v1.json new file mode 100644 index 0000000..4d60597 --- /dev/null +++ b/config/swift-mt-catalog.v1.json @@ -0,0 +1,72 @@ +{ + "$schema": "OMNL SWIFT MT catalog — Central Bank, Office 24, Z Online Bank", + "version": "1.0.0", + "settlementOfficeId": 24, + "bic": "OMNLUS33", + "rails": { + "outbound": "POST /settlement/external-transfer (rail SWIFT)", + "inbound": "POST /settlement/swift/inbound", + "listener": "SWIFT listener webhook POST /inbound :8788" + }, + "messageTypes": [ + { + "mt": "MT103", + "name": "Single Customer Credit Transfer", + "use": "Z Bank wire, Office 24 outbound, correspondent payments", + "moneyLayers": ["M0", "M1", "M2", "M4"], + "portal": "/central-bank#z-settlement-protocols", + "settlementField": "swiftMessageKind: MT103" + }, + { + "mt": "MT102", + "name": "Multiple Customer Credit Transfer", + "use": "Bulk payroll, DLC/LS batch legs", + "moneyLayers": ["M1", "M2", "M3", "M4"], + "portal": "/central-bank#z-settlement-protocols" + }, + { + "mt": "MT202", + "name": "General Financial Institution Transfer", + "use": "SBLC cover payment, interbank settlement", + "moneyLayers": ["M4"], + "tradeFinance": ["SBLC"] + }, + { + "mt": "MT910", + "name": "Confirmation of Credit", + "use": "Credit advice to beneficiary bank", + "moneyLayers": ["M4"] + }, + { + "mt": "MT940", + "name": "Customer Statement", + "use": "End-of-day account statement (Fineract reconcile)", + "moneyLayers": ["M0", "M1", "M2"] + }, + { + "mt": "MT942", + "name": "Interim Statement", + "use": "Intraday statement / liquidity monitoring", + "moneyLayers": ["M0", "M1"] + }, + { + "mt": "MT950", + "name": "Statement Message", + "use": "Legacy statement (Fineract GL export)", + "moneyLayers": ["M0", "M1", "M2"] + } + ], + "iso20022": [ + { "type": "pacs.008", "swiftFin": "MT103", "use": "FI-to-FI customer credit" }, + { "type": "pacs.009", "swiftFin": "MT202", "use": "FI-to-FI institution transfer" }, + { "type": "camt.054", "swiftFin": "MT910", "use": "Credit notification" }, + { "type": "camt.053", "swiftFin": "MT940", "use": "Account statement" }, + { "type": "camt.052", "swiftFin": "MT942", "use": "Account report" } + ], + "tradeFinance": { + "SBLC": { "swiftMessages": ["MT103", "MT202"], "endpoint": "POST /settlement/trade-finance/SBLC" }, + "DLC": { "swiftMessages": ["MT103", "MT102"], "endpoint": "POST /settlement/trade-finance/DLC" }, + "BG": { "swiftMessages": ["MT103"], "endpoint": "POST /settlement/trade-finance/BG" }, + "LS": { "swiftMessages": ["MT102", "MT103"], "endpoint": "POST /settlement/trade-finance/LS" } + } +} diff --git a/docs/deployment/DEPLOYMENT_ISSUES_AND_FIXES.md b/docs/deployment/DEPLOYMENT_ISSUES_AND_FIXES.md index 42d98e3..e00ebeb 100644 --- a/docs/deployment/DEPLOYMENT_ISSUES_AND_FIXES.md +++ b/docs/deployment/DEPLOYMENT_ISSUES_AND_FIXES.md @@ -143,7 +143,6 @@ forge script script/DeployTransactionMirror.s.sol \ 3. **RPC Providers**: - Alchemy: https://www.alchemy.com/ - Infura: https://www.infura.io/ - - QuickNode: https://www.quicknode.com/ 4. **Verification**: Contracts will be automatically verified on Etherscan if `ETHERSCAN_API_KEY` is set --- diff --git a/docs/deployment/INFURA_RPC_ISSUE.md b/docs/deployment/INFURA_RPC_ISSUE.md index c3683a3..77cd7a2 100644 --- a/docs/deployment/INFURA_RPC_ISSUE.md +++ b/docs/deployment/INFURA_RPC_ISSUE.md @@ -46,9 +46,6 @@ Switch to Alchemy or another provider: # Alchemy ETHEREUM_MAINNET_RPC=https://eth-mainnet.g.alchemy.com/v2/YOUR_ALCHEMY_API_KEY -# QuickNode -ETHEREUM_MAINNET_RPC=https://your-endpoint.quiknode.pro/YOUR_API_KEY - # Public RPC (not recommended for production) ETHEREUM_MAINNET_RPC=https://eth.llamarpc.com ``` diff --git a/docs/deployment/INFURA_SETTINGS_FIX.md b/docs/deployment/INFURA_SETTINGS_FIX.md index 7a32473..bbfb32f 100644 --- a/docs/deployment/INFURA_SETTINGS_FIX.md +++ b/docs/deployment/INFURA_SETTINGS_FIX.md @@ -62,11 +62,6 @@ Update `.env` line 18 with alternative provider: ETHEREUM_MAINNET_RPC=https://eth-mainnet.g.alchemy.com/v2/YOUR_ALCHEMY_API_KEY ``` -**QuickNode**: -```bash -ETHEREUM_MAINNET_RPC=https://your-endpoint.quiknode.pro/YOUR_API_KEY -``` - **Public RPC** (not recommended for production): ```bash ETHEREUM_MAINNET_RPC=https://eth.llamarpc.com diff --git a/frontend-dapp/index.html b/frontend-dapp/index.html index 73345a6..5227525 100644 --- a/frontend-dapp/index.html +++ b/frontend-dapp/index.html @@ -3,10 +3,13 @@
- -
Requires {config.threshold} of {config.owners.length} owners to approve transactions
diff --git a/frontend-dapp/src/components/admin/WalletDeploymentEnhanced.tsx b/frontend-dapp/src/components/admin/WalletDeploymentEnhanced.tsx
index 2851b1c..e88c143 100644
--- a/frontend-dapp/src/components/admin/WalletDeploymentEnhanced.tsx
+++ b/frontend-dapp/src/components/admin/WalletDeploymentEnhanced.tsx
@@ -144,7 +144,7 @@ export default function WalletDeploymentEnhanced() {
value={config.name}
onChange={(e) => setConfig({ ...config, name: e.target.value })}
placeholder="My Admin Wallet"
- className="w-full px-4 py-2 bg-white/10 border border-white/20 rounded-lg text-white placeholder-white/40 focus:outline-none focus:border-blue-500"
+ className="w-full px-4 py-2 bg-white/10 border border-white/20 rounded-lg text-white placeholder-white/40 focus:outline-none focus:border-green-500"
/>
@@ -173,7 +173,7 @@ export default function WalletDeploymentEnhanced() {
value={newOwner}
onChange={(e) => setNewOwner(e.target.value)}
placeholder="0x..."
- className="flex-1 px-4 py-2 bg-white/10 border border-white/20 rounded-lg text-white placeholder-white/40 focus:outline-none focus:border-blue-500 font-mono text-sm"
+ className="flex-1 px-4 py-2 bg-white/10 border border-white/20 rounded-lg text-white placeholder-white/40 focus:outline-none focus:border-green-500 font-mono text-sm"
/>
Requires {config.threshold} of {config.owners.length} owners to approve transactions diff --git a/frontend-dapp/src/components/admin/chain-management/ChainManagementDashboard.tsx b/frontend-dapp/src/components/admin/chain-management/ChainManagementDashboard.tsx index cac73ad..c122f38 100644 --- a/frontend-dapp/src/components/admin/chain-management/ChainManagementDashboard.tsx +++ b/frontend-dapp/src/components/admin/chain-management/ChainManagementDashboard.tsx @@ -6,9 +6,9 @@ import { useState, useEffect } from 'react'; import toast from 'react-hot-toast'; import { useAccount } from 'wagmi'; -import DashboardSection from '../../features/omnl-dashboard/DashboardSection'; -import NasaIcon, { StatusIcon } from '../icons/NasaIcon'; -import NasaPageHeader from '../../features/omnl-dashboard/NasaPageHeader'; +import DashboardSection from '../../../features/omnl-dashboard/DashboardSection'; +import NasaIcon, { StatusIcon } from '../../icons/NasaIcon'; +import NasaPageHeader from '../../../features/omnl-dashboard/NasaPageHeader'; interface ChainMetadata { chainId: number; @@ -80,8 +80,8 @@ export default function ChainManagementDashboard() { if (!isConnected) { return ( -
+
Adapter: {chain.adapter.slice(0, 10)}…
Explorer:{' '}
-
+