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:
@@ -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"
|
||||
]
|
||||
}
|
||||
|
||||
154
config/bridge.config.example.ts
Normal file
154
config/bridge.config.example.ts
Normal 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%
|
||||
}
|
||||
]
|
||||
};
|
||||
@@ -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
57
config/config-rpc-4.toml
Normal 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
|
||||
|
||||
@@ -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
|
||||
|
||||
57
config/config-rpc-luis-1.toml
Normal file
57
config/config-rpc-luis-1.toml
Normal 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
|
||||
|
||||
57
config/config-rpc-luis-8a.toml
Normal file
57
config/config-rpc-luis-8a.toml
Normal 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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
57
config/config-rpc-putu-1.toml
Normal file
57
config/config-rpc-putu-1.toml
Normal 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
|
||||
|
||||
57
config/config-rpc-putu-8a.toml
Normal file
57
config/config-rpc-putu-8a.toml
Normal 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
|
||||
|
||||
52
config/config-rpc-thirdweb.toml
Normal file
52
config/config-rpc-thirdweb.toml
Normal 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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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"
|
||||
]
|
||||
|
||||
@@ -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"
|
||||
]
|
||||
|
||||
9
config/static-nodes.json.cleaned
Normal file
9
config/static-nodes.json.cleaned
Normal 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"
|
||||
]
|
||||
11
config/static-nodes.json.new
Normal file
11
config/static-nodes.json.new
Normal 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"
|
||||
]
|
||||
146
config/tokenization.config.example.ts
Normal file
146
config/tokenization.config.example.ts
Normal 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
|
||||
}
|
||||
};
|
||||
31
config/trustless-bridge.config.json.example
Normal file
31
config/trustless-bridge.config.json.example
Normal 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"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user