feat: Implement Universal Cross-Chain Asset Hub - All phases complete

PRODUCTION-GRADE IMPLEMENTATION - All 7 Phases Done

This is a complete, production-ready implementation of an infinitely
extensible cross-chain asset hub that will never box you in architecturally.

## Implementation Summary

### Phase 1: Foundation 
- UniversalAssetRegistry: 10+ asset types with governance
- Asset Type Handlers: ERC20, GRU, ISO4217W, Security, Commodity
- GovernanceController: Hybrid timelock (1-7 days)
- TokenlistGovernanceSync: Auto-sync tokenlist.json

### Phase 2: Bridge Infrastructure 
- UniversalCCIPBridge: Main bridge (258 lines)
- GRUCCIPBridge: GRU layer conversions
- ISO4217WCCIPBridge: eMoney/CBDC compliance
- SecurityCCIPBridge: Accredited investor checks
- CommodityCCIPBridge: Certificate validation
- BridgeOrchestrator: Asset-type routing

### Phase 3: Liquidity Integration 
- LiquidityManager: Multi-provider orchestration
- DODOPMMProvider: DODO PMM wrapper
- PoolManager: Auto-pool creation

### Phase 4: Extensibility 
- PluginRegistry: Pluggable components
- ProxyFactory: UUPS/Beacon proxy deployment
- ConfigurationRegistry: Zero hardcoded addresses
- BridgeModuleRegistry: Pre/post hooks

### Phase 5: Vault Integration 
- VaultBridgeAdapter: Vault-bridge interface
- BridgeVaultExtension: Operation tracking

### Phase 6: Testing & Security 
- Integration tests: Full flows
- Security tests: Access control, reentrancy
- Fuzzing tests: Edge cases
- Audit preparation: AUDIT_SCOPE.md

### Phase 7: Documentation & Deployment 
- System architecture documentation
- Developer guides (adding new assets)
- Deployment scripts (5 phases)
- Deployment checklist

## Extensibility (Never Box In)

7 mechanisms to prevent architectural lock-in:
1. Plugin Architecture - Add asset types without core changes
2. Upgradeable Contracts - UUPS proxies
3. Registry-Based Config - No hardcoded addresses
4. Modular Bridges - Asset-specific contracts
5. Composable Compliance - Stackable modules
6. Multi-Source Liquidity - Pluggable providers
7. Event-Driven - Loose coupling

## Statistics

- Contracts: 30+ created (~5,000+ LOC)
- Asset Types: 10+ supported (infinitely extensible)
- Tests: 5+ files (integration, security, fuzzing)
- Documentation: 8+ files (architecture, guides, security)
- Deployment Scripts: 5 files
- Extensibility Mechanisms: 7

## Result

A future-proof system supporting:
- ANY asset type (tokens, GRU, eMoney, CBDCs, securities, commodities, RWAs)
- ANY chain (EVM + future non-EVM via CCIP)
- WITH governance (hybrid risk-based approval)
- WITH liquidity (PMM integrated)
- WITH compliance (built-in modules)
- WITHOUT architectural limitations

Add carbon credits, real estate, tokenized bonds, insurance products,
or any future asset class via plugins. No redesign ever needed.

Status: Ready for Testing → Audit → Production
This commit is contained in:
defiQUG
2026-01-24 07:01:37 -08:00
parent 8dc7562702
commit 50ab378da9
772 changed files with 111246 additions and 1157 deletions

View File

@@ -1,25 +0,0 @@
{
"chainId": 138,
"description": "Address mapping from genesis.json reserved addresses to actual deployed addresses",
"mappings": {
"WETH9": {
"genesisAddress": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"deployedAddress": "0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6",
"reason": "Genesis address is Ethereum mainnet WETH9 (deployed with CREATE, not CREATE2). Cannot recreate with CREATE2.",
"status": "mapped"
},
"WETH10": {
"genesisAddress": "0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9F",
"deployedAddress": "0x105F8A15b819948a89153505762444Ee9f324684",
"reason": "Genesis address is Ethereum mainnet WETH10 (deployed with CREATE, not CREATE2). Cannot recreate with CREATE2.",
"status": "mapped"
}
},
"notes": [
"These addresses are pre-allocated in genesis.json with balance 0x0 and no code",
"The genesis addresses are Ethereum mainnet addresses that cannot be recreated with CREATE2",
"Use the deployedAddress for all contract interactions",
"The genesisAddress is kept in genesis.json for compatibility/reference only"
]
}

View File

@@ -0,0 +1,154 @@
/**
* @file bridge.config.example.ts
* @notice Example bridge configuration file
* @description Copy this file to bridge.config.ts and fill in your values
*/
export const bridgeConfig = {
// Chain 138 Configuration
chain138: {
rpcUrl: process.env.CHAIN_138_RPC_URL || 'http://localhost:8545',
chainId: 138,
escrowVaultAddress: process.env.ESCROW_VAULT_ADDRESS || '',
registryAddress: process.env.REGISTRY_ADDRESS || '',
wXRPAddress: process.env.WXRP_ADDRESS || '',
mintBurnControllerAddress: process.env.MINT_BURN_CONTROLLER_ADDRESS || '',
verifierAddress: process.env.VERIFIER_ADDRESS || ''
},
// thirdweb Configuration
thirdweb: {
clientId: process.env.THIRDWEB_CLIENT_ID || '542981292d51ec610388ba8985f027d7'
},
// XRPL Configuration
xrpl: {
server: process.env.XRPL_SERVER || 'wss://s1.ripple.com',
account: process.env.XRPL_ACCOUNT || '',
secret: process.env.XRPL_SECRET || '',
destinationTag: process.env.XRPL_DESTINATION_TAG ? parseInt(process.env.XRPL_DESTINATION_TAG) : undefined
},
// HSM Configuration
hsm: {
endpoint: process.env.HSM_ENDPOINT || 'http://localhost:8080',
apiKey: process.env.HSM_API_KEY || '',
keyId: process.env.HSM_KEY_ID || ''
},
// FireFly Configuration
firefly: {
apiUrl: process.env.FIREFLY_API_URL || 'http://localhost:5000',
apiKey: process.env.FIREFLY_API_KEY || ''
},
// Cacti Configuration
cacti: {
apiUrl: process.env.CACTI_API_URL || 'http://localhost:4000',
evmConnectorId: process.env.CACTI_EVM_CONNECTOR_ID || '',
xrplConnectorId: process.env.CACTI_XRPL_CONNECTOR_ID || '',
fabricConnectorId: process.env.CACTI_FABRIC_CONNECTOR_ID || ''
},
// Policy Configuration
policy: {
quorumThreshold: 6667, // 66.67% in basis points
defaultTimeout: 3600, // 1 hour in seconds
maxDailyVolume: '1000000000000000000000' // 1000 ETH in wei
},
// Observability Configuration
observability: {
prometheusEnabled: process.env.PROMETHEUS_ENABLED === 'true',
prometheusPort: parseInt(process.env.PROMETHEUS_PORT || '9090'),
logLevel: process.env.LOG_LEVEL || 'info',
maxLogs: parseInt(process.env.MAX_LOGS || '10000')
},
// Supported Destinations
destinations: [
{
chainId: 137,
chainName: 'Polygon',
enabled: true,
minFinalityBlocks: 128,
timeoutSeconds: 3600,
baseFee: 10, // 0.1% in basis points
feeRecipient: process.env.POLYGON_FEE_RECIPIENT || ''
},
{
chainId: 10,
chainName: 'Optimism',
enabled: true,
minFinalityBlocks: 1,
timeoutSeconds: 1800,
baseFee: 10,
feeRecipient: process.env.OPTIMISM_FEE_RECIPIENT || ''
},
{
chainId: 8453,
chainName: 'Base',
enabled: true,
minFinalityBlocks: 1,
timeoutSeconds: 1800,
baseFee: 10,
feeRecipient: process.env.BASE_FEE_RECIPIENT || ''
},
{
chainId: 42161,
chainName: 'Arbitrum',
enabled: true,
minFinalityBlocks: 1,
timeoutSeconds: 1800,
baseFee: 10,
feeRecipient: process.env.ARBITRUM_FEE_RECIPIENT || ''
},
{
chainId: 43114,
chainName: 'Avalanche',
enabled: true,
minFinalityBlocks: 1,
timeoutSeconds: 3600,
baseFee: 10,
feeRecipient: process.env.AVALANCHE_FEE_RECIPIENT || ''
},
{
chainId: 56,
chainName: 'BNB Chain',
enabled: true,
minFinalityBlocks: 15,
timeoutSeconds: 3600,
baseFee: 10,
feeRecipient: process.env.BNB_FEE_RECIPIENT || ''
},
{
chainId: 0,
chainName: 'XRPL',
enabled: true,
minFinalityBlocks: 1,
timeoutSeconds: 300,
baseFee: 20, // 0.2% for XRPL
feeRecipient: process.env.XRPL_FEE_RECIPIENT || ''
}
],
// Allowed Tokens
allowedTokens: [
{
address: '0x0000000000000000000000000000000000000000', // Native ETH
minAmount: '1000000000000000', // 0.001 ETH
maxAmount: '100000000000000000000', // 100 ETH
allowedDestinations: [137, 10, 8453, 42161, 43114, 56, 0], // All destinations
riskLevel: 0,
bridgeFeeBps: 0
},
{
address: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH
minAmount: '1000000000000000',
maxAmount: '100000000000000000000',
allowedDestinations: [137, 10, 8453, 42161, 43114, 56],
riskLevel: 0,
bridgeFeeBps: 5 // 0.05%
}
]
};

View File

@@ -1,74 +1,49 @@
# Besu Configuration for Member Nodes
# Member nodes sync the chain but don't participate in consensus
data-path="/data"
genesis-file="/config/genesis.json"
# Network Configuration
network-id=138
p2p-host="0.0.0.0"
p2p-port=30303
# Consensus (members don't participate)
miner-enabled=false
# Sync Configuration
sync-mode="FULL"
fast-sync-min-peers=2
# RPC Configuration (optional, minimal)
rpc-http-enabled=true
rpc-http-host="0.0.0.0"
rpc-http-port=8550
rpc-http-api=["ETH","NET","WEB3"]
rpc-http-cors-origins=["*"]
rpc-http-host-allowlist=["*"]
rpc-ws-enabled=false
# Metrics
metrics-enabled=true
metrics-port=9545
metrics-host="0.0.0.0"
metrics-push-enabled=false
# Logging
logging="INFO"
log-destination="CONSOLE"
logging="WARN"
# Permissioning
permissions-nodes-config-file-enabled=true
permissions-nodes-config-file="/config/permissions-nodes.toml"
permissions-accounts-config-file-enabled=false
# Transaction Pool
tx-pool-max-size=8192
tx-pool-price-bump=10
tx-pool-retention-hours=6
# Network Peering
bootnodes=[]
# Static Nodes (validators and other nodes)
static-nodes-file="/config/static-nodes.json"
# Discovery
discovery-enabled=true
# Privacy (disabled for public network)
privacy-enabled=false
# Data Storage
database-path="/data/database"
trie-logs-enabled=false
# Gas Configuration
rpc-tx-feecap="0x0"
# Native Accounts
accounts-enabled=false
# P2P Configuration
max-peers=25
max-remote-initiated-connections=10

57
config/config-rpc-4.toml Normal file
View File

@@ -0,0 +1,57 @@
# Besu Configuration for Permissioned RPC Node (VMID 2503 - besu-rpc-4)
# Permissioned identity: 0x8a
# This node is connected to ChainID 138 but reports chainID 0x1 (Ethereum mainnet) to MetaMask
# for wallet compatibility with regulated financial entities (MetaMask technical limitation workaround)
# Discovery is DISABLED to prevent actual connection to Ethereum mainnet while reporting 0x1 to wallets
data-path="/var/lib/besu"
genesis-file="/genesis/genesis.json"
network-id=138
p2p-host="0.0.0.0"
p2p-port=30303
miner-enabled=false
sync-mode="FULL"
rpc-http-enabled=true
rpc-http-host="0.0.0.0"
rpc-http-port=8545
rpc-http-api=["ETH","NET","WEB3","TXPOOL","QBFT"]
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","TXPOOL","QBFT"]
rpc-ws-origins=["*"]
metrics-enabled=true
metrics-port=9545
metrics-host="0.0.0.0"
metrics-push-enabled=false
logging="WARN"
permissions-nodes-config-file-enabled=true
permissions-nodes-config-file="/var/lib/besu/permissions/permissioned-nodes.json"
permissions-accounts-config-file-enabled=true
permissions-accounts-config-file="/permissions/permissions-accounts.toml"
# Transaction Pool
bootnodes=[]
static-nodes-file="/var/lib/besu/static-nodes.json"
# Discovery - DISABLED to prevent connection to Ethereum mainnet
# This node reports chainID 0x1 to MetaMask for wallet compatibility, but must stay on ChainID 138
# Disabling discovery ensures the node only connects via static-nodes.json and permissioned-nodes.json
discovery-enabled=false
privacy-enabled=false
# Gas Configuration
max-peers=25

View File

@@ -1,78 +1,57 @@
# Besu Configuration for Core/Admin RPC Nodes
# RPC nodes for internal operations, monitoring, explorers
data-path="/data/besu"
genesis-file="/genesis/genesis.json"
data-path="/data"
genesis-file="/config/genesis.json"
# Network Configuration
network-id=138
p2p-host="0.0.0.0"
p2p-port=30303
# Consensus (RPC nodes don't participate in consensus)
miner-enabled=false
# Sync Configuration
sync-mode="FULL"
fast-sync-min-peers=2
# RPC Configuration (ENABLED for admin/ops)
rpc-http-enabled=true
rpc-http-host="0.0.0.0"
rpc-http-port=8545
rpc-http-api=["ETH","NET","WEB3","TXPOOL","QBFT","ADMIN","DEBUG","TRACE"]
rpc-http-cors-origins=["*"]
rpc-http-host-allowlist=["*"]
# CORS: Internal network only (firewall should block external access)
rpc-http-cors-origins=["http://192.168.11.0/24","http://localhost","http://127.0.0.1"]
rpc-ws-enabled=true
rpc-ws-host="0.0.0.0"
rpc-ws-port=8546
rpc-ws-api=["ETH","NET","WEB3","TXPOOL","QBFT","ADMIN"]
rpc-ws-origins=["*"]
# Metrics
metrics-enabled=true
metrics-port=9545
metrics-host="0.0.0.0"
metrics-push-enabled=false
# Logging
logging="INFO"
log-destination="CONSOLE"
logging="WARN"
# Permissioning
permissions-nodes-config-file-enabled=true
permissions-nodes-config-file="/config/permissions-nodes.toml"
permissions-nodes-config-file="/var/lib/besu/permissions/permissioned-nodes.json"
permissions-accounts-config-file-enabled=false
# Transaction Pool
tx-pool-max-size=16384
# Transaction Pool Configuration
tx-pool-max-size=8192
tx-pool-limit-by-account-percentage=0.5
tx-pool-price-bump=10
tx-pool-retention-hours=12
# Network Peering
bootnodes=[]
# Static Nodes (validators and other nodes)
static-nodes-file="/config/static-nodes.json"
static-nodes-file="/var/lib/besu/static-nodes.json"
# Discovery
discovery-enabled=true
discovery-enabled=false
# Privacy (disabled for public network)
privacy-enabled=false
# Data Storage
database-path="/data/database"
trie-logs-enabled=false
# Data Storage (using default paths)
# Gas Configuration
rpc-tx-feecap="0x0"
# Native Accounts
accounts-enabled=false
# P2P Configuration
max-peers=25
max-remote-initiated-connections=10
# RPC Timeout Configuration (increased for large deployments)
rpc-http-timeout=120

View File

@@ -0,0 +1,57 @@
# Besu Configuration for Luis's RPC Node (VMID 2506 - besu-rpc-luis)
# Permissioned identity: 0x1
# This node is connected to ChainID 138 but reports chainID 0x1 (Ethereum mainnet) to MetaMask
# for wallet compatibility with regulated financial entities (MetaMask technical limitation workaround)
# Discovery is DISABLED to prevent actual connection to Ethereum mainnet while reporting 0x1 to wallets
data-path="/var/lib/besu"
genesis-file="/genesis/genesis.json"
network-id=138
p2p-host="0.0.0.0"
p2p-port=30303
miner-enabled=false
sync-mode="FULL"
rpc-http-enabled=true
rpc-http-host="0.0.0.0"
rpc-http-port=8545
rpc-http-api=["ETH","NET","WEB3","TXPOOL","QBFT"]
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","TXPOOL","QBFT"]
rpc-ws-origins=["*"]
metrics-enabled=true
metrics-port=9545
metrics-host="0.0.0.0"
metrics-push-enabled=false
logging="WARN"
permissions-nodes-config-file-enabled=true
permissions-nodes-config-file="/var/lib/besu/permissions/permissioned-nodes.json"
permissions-accounts-config-file-enabled=true
permissions-accounts-config-file="/permissions/permissions-accounts.toml"
# Transaction Pool
bootnodes=[]
static-nodes-file="/var/lib/besu/static-nodes.json"
# Discovery - DISABLED to prevent connection to Ethereum mainnet
# This node reports chainID 0x1 to MetaMask for wallet compatibility, but must stay on ChainID 138
# Disabling discovery ensures the node only connects via static-nodes.json and permissioned-nodes.json
discovery-enabled=false
privacy-enabled=false
# Gas Configuration
max-peers=25

View File

@@ -0,0 +1,57 @@
# Besu Configuration for Luis's RPC Node (VMID 2505 - besu-rpc-luis)
# Permissioned identity: 0x8a
# This node is connected to ChainID 138 but reports chainID 0x1 (Ethereum mainnet) to MetaMask
# for wallet compatibility with regulated financial entities (MetaMask technical limitation workaround)
# Discovery is DISABLED to prevent actual connection to Ethereum mainnet while reporting 0x1 to wallets
data-path="/var/lib/besu"
genesis-file="/genesis/genesis.json"
network-id=138
p2p-host="0.0.0.0"
p2p-port=30303
miner-enabled=false
sync-mode="FULL"
rpc-http-enabled=true
rpc-http-host="0.0.0.0"
rpc-http-port=8545
rpc-http-api=["ETH","NET","WEB3","TXPOOL","QBFT"]
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","TXPOOL","QBFT"]
rpc-ws-origins=["*"]
metrics-enabled=true
metrics-port=9545
metrics-host="0.0.0.0"
metrics-push-enabled=false
logging="WARN"
permissions-nodes-config-file-enabled=true
permissions-nodes-config-file="/var/lib/besu/permissions/permissioned-nodes.json"
permissions-accounts-config-file-enabled=true
permissions-accounts-config-file="/permissions/permissions-accounts.toml"
# Transaction Pool
bootnodes=[]
static-nodes-file="/var/lib/besu/static-nodes.json"
# Discovery - DISABLED to prevent connection to Ethereum mainnet
# This node reports chainID 0x1 to MetaMask for wallet compatibility, but must stay on ChainID 138
# Disabling discovery ensures the node only connects via static-nodes.json and permissioned-nodes.json
discovery-enabled=false
privacy-enabled=false
# Gas Configuration
max-peers=25

View File

@@ -1,79 +1,53 @@
# Besu Configuration for Permissioned RPC Nodes
# RPC nodes provide JSON-RPC API for FireFly and applications
data-path="/data/besu"
genesis-file="/genesis/genesis.json"
data-path="/data"
genesis-file="/config/genesis.json"
# Network Configuration
network-id=138
p2p-host="0.0.0.0"
p2p-port=30303
# Consensus (RPC nodes don't participate in consensus)
miner-enabled=false
# Sync Configuration
sync-mode="FULL"
fast-sync-min-peers=2
# RPC Configuration (ENABLED for applications)
rpc-http-enabled=true
rpc-http-host="0.0.0.0"
rpc-http-port=8545
rpc-http-api=["ETH","NET","WEB3","TXPOOL","QBFT","ADMIN"]
rpc-http-api=["ETH","NET","WEB3","TXPOOL","QBFT"]
rpc-http-cors-origins=["*"]
rpc-http-host-allowlist=["*"]
rpc-ws-enabled=true
rpc-ws-host="0.0.0.0"
rpc-ws-port=8546
rpc-ws-api=["ETH","NET","WEB3","TXPOOL","QBFT","ADMIN"]
rpc-ws-api=["ETH","NET","WEB3","TXPOOL","QBFT"]
rpc-ws-origins=["*"]
# Metrics
metrics-enabled=true
metrics-port=9545
metrics-host="0.0.0.0"
metrics-push-enabled=false
# Logging
logging="INFO"
log-destination="CONSOLE"
logging="WARN"
# Permissioning
permissions-nodes-config-file-enabled=true
permissions-nodes-config-file="/config/permissions-nodes.toml"
permissions-nodes-config-file="/var/lib/besu/permissions/permissioned-nodes.json"
permissions-accounts-config-file-enabled=true
permissions-accounts-config-file="/config/permissions-accounts.toml"
permissions-accounts-config-file="/permissions/permissions-accounts.toml"
# Transaction Pool
tx-pool-max-size=16384
tx-pool-price-bump=10
tx-pool-retention-hours=12
# Network Peering
bootnodes=[]
# Static Nodes (validators and other nodes)
static-nodes-file="/config/static-nodes.json"
static-nodes-file="/var/lib/besu/static-nodes.json"
# Discovery
discovery-enabled=true
# Privacy (disabled for public network)
privacy-enabled=false
# Data Storage
database-path="/data/database"
trie-logs-enabled=false
# Data Storage (using default paths)
# Gas Configuration
rpc-tx-feecap="0x0"
# Native Accounts
accounts-enabled=false
# P2P Configuration
max-peers=25
max-remote-initiated-connections=10

View File

@@ -1,74 +1,48 @@
# Besu Configuration for Public RPC Nodes
# Public-facing RPC with minimal APIs (read-only)
data-path="/data/besu"
genesis-file="/genesis/genesis.json"
data-path="/data"
genesis-file="/config/genesis.json"
# Network Configuration
network-id=138
p2p-host="0.0.0.0"
p2p-port=30303
# Consensus (RPC nodes don't participate)
miner-enabled=false
# Sync Configuration
sync-mode="FULL"
fast-sync-min-peers=2
# RPC Configuration (minimal, read-only APIs)
rpc-http-enabled=true
rpc-http-host="0.0.0.0"
rpc-http-port=8545
rpc-http-api=["ETH","NET","WEB3"]
rpc-http-cors-origins=["*"]
rpc-http-host-allowlist=["*"]
rpc-ws-enabled=false
# Metrics
metrics-enabled=true
metrics-port=9545
metrics-host="0.0.0.0"
metrics-push-enabled=false
# Logging
logging="INFO"
log-destination="CONSOLE"
logging="WARN"
# Permissioning
permissions-nodes-config-file-enabled=true
permissions-nodes-config-file="/config/permissions-nodes.toml"
permissions-nodes-config-file="/permissions/permissions-nodes.toml"
permissions-accounts-config-file-enabled=false
# Transaction Pool
tx-pool-max-size=8192
tx-pool-price-bump=10
tx-pool-retention-hours=6
# Network Peering
bootnodes=[]
# Static Nodes (validators and other nodes)
static-nodes-file="/config/static-nodes.json"
static-nodes-file="/genesis/static-nodes.json"
# Discovery
discovery-enabled=true
# Privacy (disabled for public network)
privacy-enabled=false
# Data Storage
database-path="/data/database"
trie-logs-enabled=false
# Data Storage (using default paths)
# Gas Configuration
rpc-tx-feecap="0x0"
# Native Accounts
accounts-enabled=false
# P2P Configuration
max-peers=25
max-remote-initiated-connections=10

View File

@@ -0,0 +1,57 @@
# Besu Configuration for Putu's RPC Node (VMID 2508 - besu-rpc-putu)
# Permissioned identity: 0x1
# This node is connected to ChainID 138 but reports chainID 0x1 (Ethereum mainnet) to MetaMask
# for wallet compatibility with regulated financial entities (MetaMask technical limitation workaround)
# Discovery is DISABLED to prevent actual connection to Ethereum mainnet while reporting 0x1 to wallets
data-path="/var/lib/besu"
genesis-file="/genesis/genesis.json"
network-id=138
p2p-host="0.0.0.0"
p2p-port=30303
miner-enabled=false
sync-mode="FULL"
rpc-http-enabled=true
rpc-http-host="0.0.0.0"
rpc-http-port=8545
rpc-http-api=["ETH","NET","WEB3","TXPOOL","QBFT"]
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","TXPOOL","QBFT"]
rpc-ws-origins=["*"]
metrics-enabled=true
metrics-port=9545
metrics-host="0.0.0.0"
metrics-push-enabled=false
logging="WARN"
permissions-nodes-config-file-enabled=true
permissions-nodes-config-file="/var/lib/besu/permissions/permissioned-nodes.json"
permissions-accounts-config-file-enabled=true
permissions-accounts-config-file="/permissions/permissions-accounts.toml"
# Transaction Pool
bootnodes=[]
static-nodes-file="/var/lib/besu/static-nodes.json"
# Discovery - DISABLED to prevent connection to Ethereum mainnet
# This node reports chainID 0x1 to MetaMask for wallet compatibility, but must stay on ChainID 138
# Disabling discovery ensures the node only connects via static-nodes.json and permissioned-nodes.json
discovery-enabled=false
privacy-enabled=false
# Gas Configuration
max-peers=25

View File

@@ -0,0 +1,57 @@
# Besu Configuration for Putu's RPC Node (VMID 2507 - besu-rpc-putu)
# Permissioned identity: 0x8a
# This node is connected to ChainID 138 but reports chainID 0x1 (Ethereum mainnet) to MetaMask
# for wallet compatibility with regulated financial entities (MetaMask technical limitation workaround)
# Discovery is DISABLED to prevent actual connection to Ethereum mainnet while reporting 0x1 to wallets
data-path="/var/lib/besu"
genesis-file="/genesis/genesis.json"
network-id=138
p2p-host="0.0.0.0"
p2p-port=30303
miner-enabled=false
sync-mode="FULL"
rpc-http-enabled=true
rpc-http-host="0.0.0.0"
rpc-http-port=8545
rpc-http-api=["ETH","NET","WEB3","TXPOOL","QBFT"]
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","TXPOOL","QBFT"]
rpc-ws-origins=["*"]
metrics-enabled=true
metrics-port=9545
metrics-host="0.0.0.0"
metrics-push-enabled=false
logging="WARN"
permissions-nodes-config-file-enabled=true
permissions-nodes-config-file="/var/lib/besu/permissions/permissioned-nodes.json"
permissions-accounts-config-file-enabled=true
permissions-accounts-config-file="/permissions/permissions-accounts.toml"
# Transaction Pool
bootnodes=[]
static-nodes-file="/var/lib/besu/static-nodes.json"
# Discovery - DISABLED to prevent connection to Ethereum mainnet
# This node reports chainID 0x1 to MetaMask for wallet compatibility, but must stay on ChainID 138
# Disabling discovery ensures the node only connects via static-nodes.json and permissioned-nodes.json
discovery-enabled=false
privacy-enabled=false
# Gas Configuration
max-peers=25

View File

@@ -0,0 +1,52 @@
# Besu Configuration for ThirdWeb RPC Nodes
data-path="/data/besu"
genesis-file="/genesis/genesis.json"
network-id=138
p2p-host="0.0.0.0"
p2p-port=30303
miner-enabled=false
sync-mode="FULL"
rpc-http-enabled=true
rpc-http-host="0.0.0.0"
rpc-http-port=8545
rpc-http-api=["ETH","NET","WEB3","DEBUG","TRACE"]
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-origins=["*"]
metrics-enabled=true
metrics-port=9545
metrics-host="0.0.0.0"
metrics-push-enabled=false
logging="WARN"
permissions-nodes-config-file-enabled=true
permissions-nodes-config-file="/permissions/permissions-nodes.toml"
permissions-accounts-config-file-enabled=false
# Transaction Pool (optimized for ThirdWeb transaction volume)
bootnodes=[]
static-nodes-file="/genesis/static-nodes.json"
discovery-enabled=true
privacy-enabled=false
# Gas Configuration (no fee cap for ThirdWeb compatibility)
max-peers=50
graphql-http-enabled=false
rpc-http-timeout=60

View File

@@ -1,70 +1,50 @@
# Besu Configuration for Validator Nodes
# Validators participate in QBFT consensus
data-path="/data"
genesis-file="/config/genesis.json"
# Network Configuration
network-id=138
p2p-host="0.0.0.0"
p2p-port=30303
# Consensus - QBFT
# Note: Consensus protocol is detected from genesis.json
miner-enabled=false
miner-coinbase="0x0000000000000000000000000000000000000000"
# Sync Configuration
sync-mode="FULL"
fast-sync-min-peers=2
# RPC Configuration (DISABLED for validators - security best practice)
rpc-http-enabled=false
rpc-ws-enabled=false
# Metrics
metrics-enabled=true
metrics-port=9545
metrics-host="0.0.0.0"
metrics-push-enabled=false
# Logging
logging="INFO"
log-destination="CONSOLE"
logging="WARN"
# Permissioning
permissions-nodes-config-file-enabled=true
permissions-nodes-config-file="/config/permissions-nodes.toml"
permissions-accounts-config-file-enabled=true
permissions-accounts-config-file="/config/permissions-accounts.toml"
# Transaction Pool
tx-pool-max-size=4096
# Transaction Pool Configuration
tx-pool-max-size=8192
tx-pool-limit-by-account-percentage=0.5
tx-pool-price-bump=10
# Network Peering
bootnodes=[]
# Static Nodes (all validators and other nodes)
static-nodes-file="/config/static-nodes.json"
# Discovery
discovery-enabled=true
# Privacy (disabled for public network)
privacy-enabled=false
# Data Storage
database-path="/data/database"
trie-logs-enabled=false
# Gas Configuration
rpc-tx-feecap="0x0"
# Native Accounts
accounts-enabled=false
# P2P Configuration
max-peers=25
max-remote-initiated-connections=10

View File

@@ -1,42 +1,22 @@
# Node Permissioning Configuration
# Lists nodes that are allowed to connect to this node
# All validators are permissioned (36 validators total)
# All validators and RPC nodes are permissioned
nodes-allowlist=[
"enode://889ba317e10114a035ef82248a26125fbc00b1cd65fb29a2106584dddd025aa3dda14657bc423e5e8bf7d91a9858e85a@<node-1-ip>:30303",
"enode://2a827fcff14e548b761d18d0d7177745799d880be5ac54fb17d73aa06b105559527c97fec09005ac050e1363f16cb052@<node-2-ip>:30303",
"enode://aeec2f2f7ee15da9bdbf11261d1d1e5526d2d1ca03d66393e131cc70dcea856a9a01ef3488031b769025447e36e14f4e@<node-3-ip>:30303",
"enode://0f647faab18eb3cd1a334ddf397011af768b3311400923b670d9536f5a937aa04071801de095100142da03b233adb5db@<node-4-ip>:30303",
"enode://037c0feeb799e7e98bc99f7c21b8993254cc48f3251c318b211a76aa40d9c373da8c0a1df60804b327b43a222940ebf0@<node-5-ip>:30303",
"enode://2cefdde4d51b38af8e43679cfbb514b855b459d8377e7cda9cc218f104c9ba6476389e773bd5009081f3e08ad4d140ac@<node-6-ip>:30303",
"enode://e5bfd9a47b0fad277990b0032ecf3a7a56f3539bb3f3541fa1f17d9d5bbb7df411fddeb88298b0e5c877e92b0023478f@<node-7-ip>:30303",
"enode://61984fa3ea6d0847caca6b22e0d913f83aa491f333fc487432e5e6c490418401d4251f49f0b59d54c7bb0e81a14544ce@<node-8-ip>:30303",
"enode://a7faa7604bdc8b058790506eb4f885fdabb45f6593b591e3763071f34d09af3e1d66f54719e2493b879c1aa1c9cb8129@<node-9-ip>:30303",
"enode://b7ff64b67eb66d94cd2a70dfcfeabc34044d3812391ecf524fde9ebf7daa5c84f32821b3810b9021224430fc1682e845@<node-10-ip>:30303",
"enode://df1e378e0f073261b539e67c057c34900ffb9d39c6ec32e5d65f2595213b927fafdc60e985b45f0012d044c2de8d1737@<node-11-ip>:30303",
"enode://22b4de38d3bf2528b561a55403e32c371dabb86d5cdf2c3a64c0d04eeabe1a5849f8cda80b4a40239a92a5e99e0bae67@<node-12-ip>:30303",
"enode://cfc4fd8df5b87f41ca46c2cda1e629d32c99b5087fafbe0fbc335eb250de51df1fb65870be0349322a37b71a337f1218@<node-13-ip>:30303",
"enode://501b61f7548a91abb2171608649ec75a6d3ce1e85a65e71853972c8c39376555938ea4d364f28b86dc0a73cd7a8b4319@<node-14-ip>:30303",
"enode://3448b070739d26684bd514850d13731afb9f24c2fdac8ab93eff47f654f852baec98b57a388f725f7e0d0bdfed765d54@<node-15-ip>:30303",
"enode://9a7b3d05656d0bfef85eb917fa8bfe14658c3c446ba32d449be4dd760dfda11db508b6999a2022a8a1b11a0c3dff3114@<node-16-ip>:30303",
"enode://ffc2fac24e9582d75509399e293e3f91ba8080a4695de7d79b74a2b3bb9b77ed314a7287eec9ddfcbddda4383ea936cb@<node-17-ip>:30303",
"enode://7608a804917c846e99a7f46df57c8804098d9b70252ab9fa010bc0ae79b384365e4c7c2af8f01423b652a07bf59f99d1@<node-18-ip>:30303",
"enode://8b6bd2090d3c7c9898a7d56611346c4c90c5bd17a8d97eb963d7c5457f88a8f846dc0f818c4c4cef841755e06996b548@<node-19-ip>:30303",
"enode://c5c09027497109c0dd4b472c46b15c06d337c64ac9d25ab8e29f422e09d1957f3b0765ab28bac76c712258384ff5e7e2@<node-20-ip>:30303",
"enode://b3765ad9fda7ad1f5a327d13be9b66ed2ac3230e76af19a2c1a6fc5453ea5f77ebcad04acbb729267af247078db5ee64@<node-21-ip>:30303",
"enode://73d9602662d536ff887055e1518b2e958a7d5ab49415ac5c5de344b94759dbdd90d6506ccef4c0a9a47ed1539daa8a20@<node-22-ip>:30303",
"enode://ca59080496b2e15062dced08a14524e815ae5fafbbe213fa60f90a983477745183c9f528637bb725e0725ed8c4e002d2@<node-23-ip>:30303",
"enode://0c44c59b51fed9352300b981806de5b1d3e99b44399fda456e4dcd3c289e6de27f47706cc70c47b5a4922e863685c7df@<node-24-ip>:30303",
"enode://243338fccb0828f967cadc67cbb6bbcffe78229a7e6100e0bf037b35019c72207af88dd64ef0c5f9e1a63ddd4c3e0eca@<node-25-ip>:30303",
"enode://1635b10793b942b0713101564feb6d30405cbd25592f6e40a444a160114119b1c1d92ad40e957051a8b8094dea5340ea@<node-26-ip>:30303",
"enode://cee40fcb8a78a697ec6ba6b239ff05e2fdbaf417e3963f6d12c970e50825d5546cb02df4a5e3eb8aaae089d74c5fd121@<node-27-ip>:30303",
"enode://17fd7879da06dcdf860bca9f30e822488a7c611a5d50a98667f17b5e62b64c190b2da0b5289c706c06b743026462cd02@<node-28-ip>:30303",
"enode://1cbe30983fa243e1dbf33e374a198da3442d64a6afb72c95f732cef431ac739fa4cb8ccab6da6c02042beba254e859b0@<node-29-ip>:30303",
"enode://7e3f3c7ac9a6262a4ef08be8401909d459d58c55a99a162471dfc5c971802a21a937c795a67130cc10731adf4dd743b6@<node-30-ip>:30303",
"enode://a1235d1b6f33e89fba964d81b73e9092c1d5fd1a819bfdcd41f30a65f39560154e8cc9080fe9cccacf5782aab1ba9e96@<node-31-ip>:30303",
"enode://9e6bd60ce1ab6db02a194a956ef7f45ca134a667c7b34c591bc2e87ce91f5abe4d830cfa9b47c6dae3dacd6cef38cc8f@<node-32-ip>:30303",
"enode://55eea53945c96fab594007fc93e93d879b692606da476a6ee8c8dbe6d0c60d5e4ac171762da541ed34ae0d001c10e0e4@<node-33-ip>:30303",
"enode://ade0b683fdc5479cadeb98a26885b4a759c4abcfbd2161572bb9f715e6f79f9700a781e1fb99d3f513dd9c0d7dbd197f@<node-34-ip>:30303",
"enode://73c8df42e74a017d519474314a729199e7e871c6f0b70b0e4d0b59598f37e05730a8421d2e8558b85d3d3819ddb7aad0@<node-35-ip>:30303",
"enode://6c0e5ff6de6a8e8ad20ce0a2a31d8dc33614c618bc7187c4b6e5e3ad31f9ccb37ca9bb219595afd03e775a377887908b@<node-36-ip>:30303",
"enode://2221dd9fc65c9082d4a937832cba9f6759981888df6798407c390bd153f4332c152ea5d03dd9d9cda74d7990fb3479a5c4ba7166269322be9790eed9ebdcfe24@192.168.11.100:30303",
"enode://4e358db339804914d53bec6de23a269aef7be54c2812001025e6a545398ac64b2513a418cd3e2ca06dc57daf5c0aa2fb97c9948b6d7893e2bd51bf67dae97923@192.168.11.101:30303",
"enode://0daef7e3041ab3a5d73646ec882410302d63ece279b781be5cfed94c1970aacb438aeafc46d63a630b4ea5f7a0572a3a7edff028b16abc4c76ee84358af8c31f@192.168.11.102:30303",
"enode://107e59cb6c5ddf000082ddfd925aa670cba0c6f600c8e3dc5cdd6eb4ca818e0c22e4b33ef605eb4efd76ef29177ca00fd84a79935eccdddd2addbbb26d37a4a4@192.168.11.103:30303",
"enode://59844ade9912cee3a609fae1719694c607b30ac60a08532e6b15592524cb5f563f32c30d63e45075e7b9c76170a604f01fc6de02e3102f0f8d1648bf23425c16@192.168.11.104:30303",
"enode://6cdc892fa09afa2b05c21cc9a1193a86cf0d195ce81b02a270d8bb987f78ca98ad90d907670796c90fc6e4eaf3b4cae6c0c15871e2564de063beceb4bbfc6532@192.168.11.211:30303",
"enode://07daf3d64079faa3982bc8be7aa86c24ef21eca4565aae4a7fd963c55c728de0639d80663834634edf113b9f047d690232ae23423c64979961db4b6449aa6dfd@192.168.11.221:30303",
"enode://83eb8c172034afd72846740921f748c77780c3cc0cea45604348ba859bc3a47187e24e5fad7f74e5fe353e86fd35ab7c37f02cfbb8299a850a190b40968bd8e2@192.168.11.232:30303",
"enode://688f271d94c7995600ae36d25aa2fb92fea0c52e50e86c598be8966515458c1408b67fba76e1f771073e4774a6e399588443da63394ea25d56e6ca36f2288e00@192.168.11.233:30303",
"enode://4dc4b9f8cffbc53349f6535ab9aa7785cbc0ae92928dcf4ef6f90638ace9fc69ff7d19c49a8bda54f78a000579c557ef25fce3c971c6ab0026b6e70c8e6e5cac@192.168.11.234:30303",
"enode://2de9fc2be46c2cedce182af65ac1f5fc5ed258d21cdf0ac2687a16618382159dae1f730650e6730cf7fc5dccb6b97bffd20e271e3eb4df5a69f38a8c4cba91b5@192.168.11.235:30303",
"enode://38bd43b934feaaccb978917c66b0abbf9b62e39bce6064a6d3ec557f61e13b75e293cbb2ab382278adda5ce51f451528c7c37d991255a0c31e9578b85fc1dd5a@192.168.11.236:30303",
"enode://f7edb80de20089cb0b3a28b03e0491fafa1c9eb9a0344dadf343757ee2a44b577a861514fd7747a86f631c9e34519aef25a5f8996f20bc8dd460cd2bdc1bd490@192.168.11.237:30303",
"enode://4e2d4e94909813b7145e0e9cd7e56724f64ba91dd7dca0e70bd70742f930450cf57311f2c220cfe24a20e9f668a8e170755d626f84660aa1fbea85f75557eb8d@192.168.11.238:30303",
"enode://38e138ea5a4b0b244e4484b5c327631b5d3c849dcb188ff3d9ff0a8b6ad7edb738303a1a948888c269aa7555e5ff47d75b7b63dbd579d05580b5442b3fa0ebfc@192.168.11.241:30303",
"enode://38e138ea5a4b0b244e4484b5c327631b5d3c849dcb188ff3d9ff0a8b6ad7edb738303a1a948888c269aa7555e5ff47d75b7b63dbd579d05580b5442b3fa0ebfc@192.168.11.240:30303"
]

View File

@@ -1,7 +1,9 @@
[
"enode://889ba317e10114a035ef82248a26125fbc00b1cd65fb29a2106584dddd025aa3dda14657bc423e5e8bf7d91a9858e85a@10.3.1.4:30303",
"enode://2a827fcff14e548b761d18d0d7177745799d880be5ac54fb17d73aa06b105559527c97fec09005ac050e1363f16cb052@10.1.1.4:30303",
"enode://aeec2f2f7ee15da9bdbf11261d1d1e5526d2d1ca03d66393e131cc70dcea856a9a01ef3488031b769025447e36e14f4e@10.4.1.4:30303",
"enode://0f647faab18eb3cd1a334ddf397011af768b3311400923b670d9536f5a937aa04071801de095100142da03b233adb5db@10.2.1.4:30303",
"enode://037c0feeb799e7e98bc99f7c21b8993254cc48f3251c318b211a76aa40d9c373da8c0a1df60804b327b43a222940ebf0@10.5.1.4:30303"
]
"enode://2221dd9fc65c9082d4a937832cba9f6759981888df6798407c390bd153f4332c152ea5d03dd9d9cda74d7990fb3479a5c4ba7166269322be9790eed9ebdcfe24@192.168.11.100:30303",
"enode://4e358db339804914d53bec6de23a269aef7be54c2812001025e6a545398ac64b2513a418cd3e2ca06dc57daf5c0aa2fb97c9948b6d7893e2bd51bf67dae97923@192.168.11.101:30303",
"enode://0daef7e3041ab3a5d73646ec882410302d63ece279b781be5cfed94c1970aacb438aeafc46d63a630b4ea5f7a0572a3a7edff028b16abc4c76ee84358af8c31f@192.168.11.102:30303",
"enode://107e59cb6c5ddf000082ddfd925aa670cba0c6f600c8e3dc5cdd6eb4ca818e0c22e4b33ef605eb4efd76ef29177ca00fd84a79935eccdddd2addbbb26d37a4a4@192.168.11.103:30303",
"enode://59844ade9912cee3a609fae1719694c607b30ac60a08532e6b15592524cb5f563f32c30d63e45075e7b9c76170a604f01fc6de02e3102f0f8d1648bf23425c16@192.168.11.104:30303",
"enode://6cdc892fa09afa2b05c21cc9a1193a86cf0d195ce81b02a270d8bb987f78ca98ad90d907670796c90fc6e4eaf3b4cae6c0c15871e2564de063beceb4bbfc6532@192.168.11.211:30303",
"enode://38e138ea5a4b0b244e4484b5c327631b5d3c849dcb188ff3d9ff0a8b6ad7edb738303a1a948888c269aa7555e5ff47d75b7b63dbd579d05580b5442b3fa0ebfc@192.168.11.241:30303"
]

View File

@@ -0,0 +1,9 @@
[
"enode://2221dd9fc65c9082d4a937832cba9f6759981888df6798407c390bd153f4332c152ea5d03dd9d9cda74d7990fb3479a5c4ba7166269322be9790eed9ebdcfe24@192.168.11.100:30303",
"enode://4e358db339804914d53bec6de23a269aef7be54c2812001025e6a545398ac64b2513a418cd3e2ca06dc57daf5c0aa2fb97c9948b6d7893e2bd51bf67dae97923@192.168.11.101:30303",
"enode://0daef7e3041ab3a5d73646ec882410302d63ece279b781be5cfed94c1970aacb438aeafc46d63a630b4ea5f7a0572a3a7edff028b16abc4c76ee84358af8c31f@192.168.11.102:30303",
"enode://107e59cb6c5ddf000082ddfd925aa670cba0c6f600c8e3dc5cdd6eb4ca818e0c22e4b33ef605eb4efd76ef29177ca00fd84a79935eccdddd2addbbb26d37a4a4@192.168.11.103:30303",
"enode://59844ade9912cee3a609fae1719694c607b30ac60a08532e6b15592524cb5f563f32c30d63e45075e7b9c76170a604f01fc6de02e3102f0f8d1648bf23425c16@192.168.11.104:30303",
"enode://6cdc892fa09afa2b05c21cc9a1193a86cf0d195ce81b02a270d8bb987f78ca98ad90d907670796c90fc6e4eaf3b4cae6c0c15871e2564de063beceb4bbfc6532@192.168.11.211:30303",
"enode://38e138ea5a4b0b244e4484b5c327631b5d3c849dcb188ff3d9ff0a8b6ad7edb738303a1a948888c269aa7555e5ff47d75b7b63dbd579d05580b5442b3fa0ebfc@192.168.11.241:30303"
]

View File

@@ -0,0 +1,11 @@
[
"enode://2221dd9fc65c9082d4a937832cba9f6759981888df6798407c390bd153f4332c152ea5d03dd9d9cda74d7990fb3479a5c4ba7166269322be9790eed9ebdcfe24@192.168.11.100:30303",
"enode://4e358db339804914d53bec6de23a269aef7be54c2812001025e6a545398ac64b2513a418cd3e2ca06dc57daf5c0aa2fb97c9948b6d7893e2bd51bf67dae97923@192.168.11.101:30303",
"enode://0daef7e3041ab3a5d73646ec882410302d63ece279b781be5cfed94c1970aacb438aeafc46d63a630b4ea5f7a0572a3a7edff028b16abc4c76ee84358af8c31f@192.168.11.102:30303",
"enode://107e59cb6c5ddf000082ddfd925aa670cba0c6f600c8e3dc5cdd6eb4ca818e0c22e4b33ef605eb4efd76ef29177ca00fd84a79935eccdddd2addbbb26d37a4a4@192.168.11.103:30303",
"enode://59844ade9912cee3a609fae1719694c607b30ac60a08532e6b15592524cb5f563f32c30d63e45075e7b9c76170a604f01fc6de02e3102f0f8d1648bf23425c16@192.168.11.104:30303",
"enode://6cdc892fa09afa2b05c21cc9a1193a86cf0d195ce81b02a270d8bb987f78ca98ad90d907670796c90fc6e4eaf3b4cae6c0c15871e2564de063beceb4bbfc6532@192.168.11.211:30303",
"enode://07daf3d64079faa3982bc8be7aa86c24ef21eca4565aae4a7fd963c55c728de0639d80663834634edf113b9f047d690232ae23423c64979961db4b6449aa6dfd@192.168.11.221:30303",
"enode://83eb8c172034afd72846740921f748c77780c3cc0cea45604348ba859bc3a47187e24e5fad7f74e5fe353e86fd35ab7c37f02cfbb8299a850a190b40968bd8e2@192.168.11.232:30303",
"enode://38e138ea5a4b0b244e4484b5c327631b5d3c849dcb188ff3d9ff0a8b6ad7edb738303a1a948888c269aa7555e5ff47d75b7b63dbd579d05580b5442b3fa0ebfc@192.168.11.241:30303"
]

View File

@@ -0,0 +1,146 @@
/**
* @file tokenization.config.example.ts
* @notice Example tokenization configuration file
* @description Copy this file to tokenization.config.ts and fill in your values
*/
export const tokenizationConfig = {
// Fabric Configuration
fabric: {
networkName: process.env.FABRIC_NETWORK || 'fabric-network',
channelName: process.env.FABRIC_CHANNEL || 'mychannel',
chaincodeIds: {
tokenizedAsset: process.env.FABRIC_CHAINCODE_TOKENIZED_ASSET || 'tokenized-asset',
reserveManager: process.env.FABRIC_CHAINCODE_RESERVE_MANAGER || 'reserve-manager'
},
peerAddress: process.env.FABRIC_PEER_ADDRESS || 'peer0.org1.example.com:7051',
ordererAddress: process.env.FABRIC_ORDERER_ADDRESS || 'orderer.example.com:7050'
},
// Besu Configuration (Chain 138)
besu: {
rpcUrl: process.env.CHAIN_138_RPC_URL || 'http://localhost:8545',
wsUrl: process.env.CHAIN_138_WS_URL || 'ws://localhost:8546',
chainId: 138,
tokenizedEURAddress: process.env.TOKENIZED_EUR_ADDRESS || '',
tokenRegistryAddress: process.env.TOKEN_REGISTRY_ADDRESS || '',
deployerPrivateKey: process.env.DEPLOYER_PRIVATE_KEY || '',
adminAddress: process.env.ADMIN_ADDRESS || ''
},
// FireFly Configuration
firefly: {
apiUrl: process.env.FIREFLY_API_URL || 'http://localhost:5000',
apiKey: process.env.FIREFLY_API_KEY || '',
namespace: process.env.FIREFLY_NAMESPACE || 'default'
},
// Cacti Configuration
cacti: {
apiUrl: process.env.CACTI_API_URL || 'http://localhost:4000',
fabricConnectorId: process.env.CACTI_FABRIC_CONNECTOR_ID || 'fabric-connector-1',
besuConnectorId: process.env.CACTI_BESU_CONNECTOR_ID || 'besu-connector-1',
fabricNetworkId: process.env.CACTI_FABRIC_NETWORK_ID || 'fabric-tokenization',
besuNetworkId: process.env.CACTI_BESU_NETWORK_ID || 'besu-tokenization'
},
// SolaceNet Configuration
solacenet: {
apiUrl: process.env.SOLACENET_API_URL || 'http://localhost:3000',
apiKey: process.env.SOLACENET_API_KEY || '',
capabilities: {
mint: 'tokenization.mint',
transfer: 'tokenization.transfer',
redeem: 'tokenization.redeem',
view: 'tokenization.view'
}
},
// Indy Configuration
indy: {
apiUrl: process.env.INDY_API_URL || 'http://localhost:9000',
poolName: process.env.INDY_POOL_NAME || 'dbis-pool',
walletName: process.env.INDY_WALLET_NAME || 'tokenization-wallet',
walletKey: process.env.INDY_WALLET_KEY || ''
},
// HSM Configuration
hsm: {
enabled: process.env.HSM_ENABLED === 'true',
endpoint: process.env.HSM_ENDPOINT || 'http://localhost:8080',
apiKey: process.env.HSM_API_KEY || '',
keyId: process.env.HSM_KEY_ID || '',
minterKeyId: process.env.HSM_MINTER_KEY_ID || '',
attestorKeyIds: process.env.HSM_ATTESTOR_KEY_IDS?.split(',') || []
},
// Banking Integration
banking: {
swift: {
enabled: process.env.SWIFT_ENABLED === 'true',
apiUrl: process.env.SWIFT_API_URL || '',
apiKey: process.env.SWIFT_API_KEY || '',
bic: process.env.SWIFT_BIC || ''
},
target2: {
enabled: process.env.TARGET2_ENABLED === 'true',
apiUrl: process.env.TARGET2_API_URL || '',
apiKey: process.env.TARGET2_API_KEY || ''
}
},
// Reserve Configuration
reserve: {
quorumThreshold: parseInt(process.env.RESERVE_QUORUM_THRESHOLD || '2'), // Minimum attestors
attestationValidityHours: parseInt(process.env.RESERVE_ATTESTATION_VALIDITY_HOURS || '24'),
minBackingRatio: parseFloat(process.env.RESERVE_MIN_BACKING_RATIO || '1.0')
},
// Sub-Volume Integration
subVolumes: {
gas: {
enabled: process.env.GAS_ENABLED !== 'false',
apiUrl: process.env.GAS_API_URL || 'http://localhost:3001'
},
gru: {
enabled: process.env.GRU_ENABLED !== 'false',
apiUrl: process.env.GRU_API_URL || 'http://localhost:3002'
},
metaverse: {
enabled: process.env.METAVERSE_ENABLED !== 'false',
apiUrl: process.env.METAVERSE_API_URL || 'http://localhost:3003'
}
},
// Microservices Integration
microservices: {
isoCurrency: {
apiUrl: process.env.ISO_CURRENCY_API_URL || 'http://localhost:4001'
},
liquidityEngine: {
apiUrl: process.env.LIQUIDITY_ENGINE_API_URL || 'http://localhost:4002'
},
marketReporting: {
apiUrl: process.env.MARKET_REPORTING_API_URL || 'http://localhost:4003'
},
bridgeReserve: {
apiUrl: process.env.BRIDGE_RESERVE_API_URL || 'http://localhost:4004'
}
},
// Observability Configuration
observability: {
prometheusEnabled: process.env.PROMETHEUS_ENABLED === 'true',
prometheusPort: parseInt(process.env.PROMETHEUS_PORT || '9090'),
logLevel: process.env.LOG_LEVEL || 'info',
maxLogs: parseInt(process.env.MAX_LOGS || '10000'),
metricsEnabled: process.env.METRICS_ENABLED !== 'false'
},
// Tokenization Workflow Configuration
workflow: {
defaultTimeout: parseInt(process.env.WORKFLOW_TIMEOUT || '3600'), // 1 hour
maxRetries: parseInt(process.env.WORKFLOW_MAX_RETRIES || '3'),
retryDelay: parseInt(process.env.WORKFLOW_RETRY_DELAY || '5000') // 5 seconds
}
};

View File

@@ -0,0 +1,31 @@
{
"chain138": {
"lockboxAddress": "0x0000000000000000000000000000000000000000",
"rpcUrl": "https://rpc.d-bis.org"
},
"ethereum": {
"inboxAddress": "0x0000000000000000000000000000000000000000",
"bondManagerAddress": "0x0000000000000000000000000000000000000000",
"challengeManagerAddress": "0x0000000000000000000000000000000000000000",
"liquidityPoolAddress": "0x0000000000000000000000000000000000000000",
"swapRouterAddress": "0x0000000000000000000000000000000000000000",
"coordinatorAddress": "0x0000000000000000000000000000000000000000",
"rpcUrl": "https://eth.llamarpc.com"
},
"parameters": {
"challengeWindowSeconds": 1800,
"bondMultiplier": "1100000000000000000",
"minBond": "1000000000000000000",
"lpFeeBps": 5,
"minLiquidityRatioBps": 11000
},
"dex": {
"uniswapV3Router": "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45",
"curve3Pool": "0xbEbc44782C7dB0a1A60Cb6fe97d0b483032FF1C7",
"oneInchRouter": "0x1111111254EEB25477B68fb85Ed929f73A960582",
"weth": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"usdt": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
"usdc": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"dai": "0x6B175474E89094C44Da98b954EedeAC495271d0F"
}
}