From a5367691a297d46eadd10fd981d9e25d902efa83 Mon Sep 17 00:00:00 2001 From: Baha Date: Sun, 25 Jul 2021 22:41:05 +0100 Subject: [PATCH 01/10] feat: native rest ssl and automatic ssl - httpsProxy(https-portal) support --- config/rest-gateway/rest.json.mustache | 4 + presets/bootstrap/network.yml | 217 ++-- presets/mainnet/network.yml | 1510 +++++++++++------------- presets/shared.yml | 5 + presets/testnet/network.yml | 385 +++--- src/commands/wizard.ts | 122 +- src/model/ConfigPreset.ts | 17 + src/service/BootstrapUtils.ts | 2 + src/service/ComposeService.ts | 33 + src/service/ConfigService.ts | 7 + src/service/CryptoUtils.ts | 17 +- 11 files changed, 1194 insertions(+), 1125 deletions(-) diff --git a/config/rest-gateway/rest.json.mustache b/config/rest-gateway/rest.json.mustache index 045a000c5..9de26fdde 100644 --- a/config/rest-gateway/rest.json.mustache +++ b/config/rest-gateway/rest.json.mustache @@ -5,6 +5,10 @@ }, "port": 3000, + "protocol": "{{{restProtocol}}}", + "sslKeyPath": "./restSSL.key.pem", + "sslCertificatePath": "./restSSL.cert.pem", + "crossDomain": { "allowedHosts": ["*"], "allowedMethods": ["GET", "POST", "PUT", "OPTIONS"] diff --git a/presets/bootstrap/network.yml b/presets/bootstrap/network.yml index e99b05c17..f408f0a6b 100644 --- a/presets/bootstrap/network.yml +++ b/presets/bootstrap/network.yml @@ -16,114 +16,123 @@ votingKeyDesiredFutureLifetime: 120 lastKnownNetworkEpoch: 1 restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer' nemesis: - mosaics: - - name: '{{currencyName}}' - repeat: 1 - divisibility: 6 - duration: 0 - supply: 8998999998000000 - isTransferable: true - isSupplyMutable: false - isRestrictable: false - accounts: 5 - - name: '{{harvestingName}}' - repeat: 1 - divisibility: 3 - duration: 0 - supply: 15000000 - isTransferable: true - isSupplyMutable: true - isRestrictable: false - accounts: 2 + mosaics: + - name: '{{currencyName}}' + repeat: 1 + divisibility: 6 + duration: 0 + supply: 8998999998000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: 5 + - name: '{{harvestingName}}' + repeat: 1 + divisibility: 3 + duration: 0 + supply: 15000000 + isTransferable: true + isSupplyMutable: true + isRestrictable: false + accounts: 2 databases: - - repeat: 1 - name: 'db-{{$index}}' - openPort: '{{add $index 27017}}' + - repeat: 1 + name: 'db-{{$index}}' + openPort: '{{add $index 27017}}' nodes: - - repeat: 2 - harvesting: true - voting: true - api: false - name: 'peer-node-{{$index}}' - friendlyName: 'peer-node-{{$index}}' - host: 'peer-node-{{$index}}' - openPort: '{{add $index 7900}}' - - repeat: 1 - harvesting: false - api: true - friendlyName: 'api-node-{{$index}}' - name: 'api-node-{{$index}}' - host: 'api-node-{{$index}}' - brokerName: 'api-node-broker-{{$index}}' - brokerOpenPort: '{{add $index 8002}}' - databaseHost: 'db-{{$index}}' - trustedHosts: '127.0.0.1, 172.20.0.{{add $index 25}}' - localNetworks: '127.0.0.1, 172.20.0.{{add $index 25}}' + - repeat: 2 + harvesting: true + voting: true + api: false + name: 'peer-node-{{$index}}' + friendlyName: 'peer-node-{{$index}}' + host: 'peer-node-{{$index}}' + openPort: '{{add $index 7900}}' + - repeat: 1 + harvesting: false + api: true + friendlyName: 'api-node-{{$index}}' + name: 'api-node-{{$index}}' + host: 'api-node-{{$index}}' + brokerName: 'api-node-broker-{{$index}}' + brokerOpenPort: '{{add $index 8002}}' + databaseHost: 'db-{{$index}}' + trustedHosts: '127.0.0.1, 172.20.0.{{add $index 25}}' + localNetworks: '127.0.0.1, 172.20.0.{{add $index 25}}' gateways: - - repeat: 1 - apiNodeName: 'api-node-{{$index}}' - apiNodeHost: 'api-node-{{$index}}' - apiNodeBrokerHost: 'api-node-broker-{{$index}}' - name: 'rest-gateway-{{$index}}' - description: 'catapult development network' - databaseHost: 'db-{{$index}}' - openPort: '{{add $index 3000}}' - ipv4_address: '172.20.0.{{add $index 25}}' + - repeat: 1 + apiNodeName: 'api-node-{{$index}}' + apiNodeHost: 'api-node-{{$index}}' + apiNodeBrokerHost: 'api-node-broker-{{$index}}' + name: 'rest-gateway-{{$index}}' + description: 'catapult development network' + databaseHost: 'db-{{$index}}' + openPort: '{{add $index 3000}}' + ipv4_address: '172.20.0.{{add $index 25}}' wallets: - - repeat: 0 - title: 'Symbol Bootstrap Wallet' - name: 'wallet-{{$index}}' - defaultNodeUrl: 'http://localhost:{{add $index 3000}}' - namespaceName: '{{baseNamespace}}.{{currencyName}}' - openPort: '{{add $index 80}}' - restNodes: - - friendlyName: 'Bootstrap Rest $index' - url: 'http://localhost:{{add $index 3000}}' - roles: 2 + - repeat: 0 + title: 'Symbol Bootstrap Wallet' + name: 'wallet-{{$index}}' + defaultNodeUrl: 'http://localhost:{{add $index 3000}}' + namespaceName: '{{baseNamespace}}.{{currencyName}}' + openPort: '{{add $index 80}}' + restNodes: + - friendlyName: 'Bootstrap Rest $index' + url: 'http://localhost:{{add $index 3000}}' + roles: 2 explorers: - - repeat: 0 - name: 'explorer-{{$index}}' - defaultNode: 'http://localhost:{{add $index 3000}}' - namespaceName: '{{baseNamespace}}.{{currencyName}}' - openPort: '{{add $index 90}}' - restNodes: - - 'http://localhost:{{add $index 3000}}' - footer: - link: - - href: https://nemflash.io/ - text: NEM News - icon: IconNewspaper - - href: https://forum.nem.io/ - text: Forum - icon: IconForum - - href: https://t.me/nemred - text: Telegram - icon: IconTelegram - - href: https://www.reddit.com/r/nem/ - text: Reddit - icon: IconReddit - - href: https://github.com/nemtech - text: Github - icon: IconGithub - - href: http://localhost:100/ - text: Faucet - icon: IconHomeCurrencyUsd + - repeat: 0 + name: 'explorer-{{$index}}' + defaultNode: 'http://localhost:{{add $index 3000}}' + namespaceName: '{{baseNamespace}}.{{currencyName}}' + openPort: '{{add $index 90}}' + restNodes: + - 'http://localhost:{{add $index 3000}}' + footer: + link: + - href: https://nemflash.io/ + text: NEM News + icon: IconNewspaper + - href: https://forum.nem.io/ + text: Forum + icon: IconForum + - href: https://t.me/nemred + text: Telegram + icon: IconTelegram + - href: https://www.reddit.com/r/nem/ + text: Reddit + icon: IconReddit + - href: https://github.com/nemtech + text: Github + icon: IconGithub + - href: http://localhost:100/ + text: Faucet + icon: IconHomeCurrencyUsd faucets: - - repeat: 0 - name: 'faucet-{{$index}}' - gateway: 'rest-gateway-{{$index}}' - environment: - DEFAULT_NODE: 'http://rest-gateway-{{$index}}:{{add $index 3000}}' - DEFAULT_NODE_CLIENT: 'http://localhost:{{add $index 3000}}' - NATIVE_CURRENCY_NAME: '{{baseNamespace}}.{{currencyName}}' - NATIVE_CURRENCY_OUT_MAX: 500000000 - NATIVE_CURRENCY_OUT_MIN: 100000000 - MAX_FEE: 5000000 - ENOUGH_BALANCE: 100000000000 - MAX_UNCONFIRMED: 99 - BLACKLIST_MOSAIC_IDS: '[]' - EXPLORER_URL: 'http://localhost:{{add $index 90}}/' - openPort: '{{add $index 100}}' + - repeat: 0 + name: 'faucet-{{$index}}' + gateway: 'rest-gateway-{{$index}}' + environment: + DEFAULT_NODE: 'http://rest-gateway-{{$index}}:{{add $index 3000}}' + DEFAULT_NODE_CLIENT: 'http://localhost:{{add $index 3000}}' + NATIVE_CURRENCY_NAME: '{{baseNamespace}}.{{currencyName}}' + NATIVE_CURRENCY_OUT_MAX: 500000000 + NATIVE_CURRENCY_OUT_MIN: 100000000 + MAX_FEE: 5000000 + ENOUGH_BALANCE: 100000000000 + MAX_UNCONFIRMED: 99 + BLACKLIST_MOSAIC_IDS: '[]' + EXPLORER_URL: 'http://localhost:{{add $index 90}}/' + openPort: '{{add $index 100}}' +httpsProxies: + - name: 'https-proxy' + excludeDockerService: true #disabled as default + openPort: 3001 + image: 'steveltn/https-portal:1' + #domains: 'symbol-node.example.com -> http://rest-gateway:3000' + stage: 'production' + webSocket: 'true' + serverNamesHashBucketSize: 128 inflation: - starting-at-height-1: 0 - starting-at-height-10000: 0 + starting-at-height-1: 0 + starting-at-height-10000: 0 diff --git a/presets/mainnet/network.yml b/presets/mainnet/network.yml index 4b94b7589..fc291d646 100644 --- a/presets/mainnet/network.yml +++ b/presets/mainnet/network.yml @@ -103,807 +103,717 @@ knownRestGateways: - 'http://ngl-api-601.symbolblockchain.io:3000' knownPeers: api-node: - - - publicKey: C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD - endpoint: - host: ngl-dual-001.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-001 - roles: 'Api,Peer,Voting' - - - publicKey: CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610 - endpoint: - host: ngl-dual-002.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-002 - roles: 'Api,Peer,Voting' - - - publicKey: B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929 - endpoint: - host: ngl-dual-003.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-003 - roles: 'Api,Peer,Voting' - - - publicKey: 86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE - endpoint: - host: ngl-dual-004.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-004 - roles: 'Api,Peer,Voting' - - - publicKey: 6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B - endpoint: - host: ngl-dual-101.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-101 - roles: 'Api,Peer,Voting' - - - publicKey: D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2 - endpoint: - host: ngl-dual-102.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-102 - roles: 'Api,Peer,Voting' - - - publicKey: DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1 - endpoint: - host: ngl-dual-103.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-103 - roles: 'Api,Peer,Voting' - - - publicKey: 3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436 - endpoint: - host: ngl-dual-104.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-104 - roles: 'Api,Peer,Voting' - - - publicKey: 7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89 - endpoint: - host: ngl-dual-201.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-201 - roles: 'Api,Peer,Voting' - - - publicKey: 3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D - endpoint: - host: ngl-dual-202.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-202 - roles: 'Api,Peer,Voting' - - - publicKey: 256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592 - endpoint: - host: ngl-dual-203.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-203 - roles: 'Api,Peer,Voting' - - - publicKey: 6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D - endpoint: - host: ngl-dual-204.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-204 - roles: 'Api,Peer,Voting' - - - publicKey: 92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA - endpoint: - host: ngl-dual-301.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-301 - roles: 'Api,Peer,Voting' - - - publicKey: 5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979 - endpoint: - host: ngl-dual-302.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-302 - roles: 'Api,Peer,Voting' - - - publicKey: 4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9 - endpoint: - host: ngl-dual-303.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-303 - roles: 'Api,Peer,Voting' - - - publicKey: DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1 - endpoint: - host: ngl-dual-304.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-304 - roles: 'Api,Peer,Voting' - - - publicKey: 9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19 - endpoint: - host: ngl-dual-401.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-401 - roles: 'Api,Peer,Voting' - - - publicKey: 474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369 - endpoint: - host: ngl-dual-402.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-402 - roles: 'Api,Peer,Voting' - - - publicKey: EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198 - endpoint: - host: ngl-dual-403.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-403 - roles: 'Api,Peer,Voting' - - - publicKey: E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC - endpoint: - host: ngl-dual-404.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-404 - roles: 'Api,Peer,Voting' - - - publicKey: 606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D - endpoint: - host: ngl-dual-501.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-501 - roles: 'Api,Peer,Voting' - - - publicKey: 428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2 - endpoint: - host: ngl-dual-502.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-502 - roles: 'Api,Peer,Voting' - - - publicKey: C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B - endpoint: - host: ngl-dual-503.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-503 - roles: 'Api,Peer,Voting' - - - publicKey: E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440 - endpoint: - host: ngl-dual-504.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-504 - roles: 'Api,Peer,Voting' - - - publicKey: 90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A - endpoint: - host: ngl-dual-601.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-601 - roles: 'Api,Peer,Voting' - - - publicKey: E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6 - endpoint: - host: ngl-dual-602.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-602 - roles: 'Api,Peer,Voting' - - - publicKey: F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF - endpoint: - host: ngl-dual-603.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-603 - roles: 'Api,Peer,Voting' - - - publicKey: 9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF - endpoint: - host: ngl-dual-604.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-604 - roles: 'Api,Peer,Voting' - - - publicKey: BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1 - endpoint: - host: ngl-dual-005.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-005 - roles: 'Api,Peer' - - - publicKey: 3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51 - endpoint: - host: ngl-dual-006.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-006 - roles: 'Api,Peer' - - - publicKey: 9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591 - endpoint: - host: ngl-dual-105.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-105 - roles: 'Api,Peer' - - - publicKey: AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8 - endpoint: - host: ngl-dual-106.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-106 - roles: 'Api,Peer' - - - publicKey: 7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3 - endpoint: - host: ngl-dual-205.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-205 - roles: 'Api,Peer' - - - publicKey: 02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6 - endpoint: - host: ngl-dual-206.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-206 - roles: 'Api,Peer' - - - publicKey: 36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795 - endpoint: - host: ngl-dual-305.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-305 - roles: 'Api,Peer' - - - publicKey: 9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA - endpoint: - host: ngl-dual-306.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-306 - roles: 'Api,Peer' - - - publicKey: 4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95 - endpoint: - host: ngl-dual-405.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-405 - roles: 'Api,Peer' - - - publicKey: 0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F - endpoint: - host: ngl-dual-406.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-406 - roles: 'Api,Peer' - - - publicKey: E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29 - endpoint: - host: ngl-dual-505.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-505 - roles: 'Api,Peer' - - - publicKey: B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C - endpoint: - host: ngl-dual-506.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-506 - roles: 'Api,Peer' - - - publicKey: 4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571 - endpoint: - host: ngl-dual-605.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-605 - roles: 'Api,Peer' - - - publicKey: E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC - endpoint: - host: ngl-dual-606.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-606 - roles: 'Api,Peer' - - - publicKey: 47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011 - endpoint: - host: ngl-api-001.symbolblockchain.io - port: 7900 - metadata: - name: ngl-api-001 - roles: Api - - - publicKey: FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684 - endpoint: - host: ngl-api-301.symbolblockchain.io - port: 7900 - metadata: - name: ngl-api-301 - roles: Api - - - publicKey: 642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B - endpoint: - host: ngl-api-401.symbolblockchain.io - port: 7900 - metadata: - name: ngl-api-401 - roles: Api - - - publicKey: E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79 - endpoint: - host: ngl-api-501.symbolblockchain.io - port: 7900 - metadata: - name: ngl-api-501 - roles: Api - - - publicKey: 0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C - endpoint: - host: ngl-api-601.symbolblockchain.io - port: 7900 - metadata: - name: ngl-api-601 - roles: Api + - publicKey: C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD + endpoint: + host: ngl-dual-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer,Voting' + - publicKey: CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610 + endpoint: + host: ngl-dual-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-002 + roles: 'Api,Peer,Voting' + - publicKey: B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929 + endpoint: + host: ngl-dual-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-003 + roles: 'Api,Peer,Voting' + - publicKey: 86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE + endpoint: + host: ngl-dual-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-004 + roles: 'Api,Peer,Voting' + - publicKey: 6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B + endpoint: + host: ngl-dual-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer,Voting' + - publicKey: D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2 + endpoint: + host: ngl-dual-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-102 + roles: 'Api,Peer,Voting' + - publicKey: DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1 + endpoint: + host: ngl-dual-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-103 + roles: 'Api,Peer,Voting' + - publicKey: 3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436 + endpoint: + host: ngl-dual-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-104 + roles: 'Api,Peer,Voting' + - publicKey: 7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89 + endpoint: + host: ngl-dual-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer,Voting' + - publicKey: 3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D + endpoint: + host: ngl-dual-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-202 + roles: 'Api,Peer,Voting' + - publicKey: 256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592 + endpoint: + host: ngl-dual-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-203 + roles: 'Api,Peer,Voting' + - publicKey: 6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D + endpoint: + host: ngl-dual-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-204 + roles: 'Api,Peer,Voting' + - publicKey: 92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA + endpoint: + host: ngl-dual-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer,Voting' + - publicKey: 5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979 + endpoint: + host: ngl-dual-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-302 + roles: 'Api,Peer,Voting' + - publicKey: 4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9 + endpoint: + host: ngl-dual-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-303 + roles: 'Api,Peer,Voting' + - publicKey: DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1 + endpoint: + host: ngl-dual-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-304 + roles: 'Api,Peer,Voting' + - publicKey: 9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19 + endpoint: + host: ngl-dual-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer,Voting' + - publicKey: 474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369 + endpoint: + host: ngl-dual-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-402 + roles: 'Api,Peer,Voting' + - publicKey: EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198 + endpoint: + host: ngl-dual-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-403 + roles: 'Api,Peer,Voting' + - publicKey: E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC + endpoint: + host: ngl-dual-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-404 + roles: 'Api,Peer,Voting' + - publicKey: 606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D + endpoint: + host: ngl-dual-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - publicKey: 428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2 + endpoint: + host: ngl-dual-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer,Voting' + - publicKey: C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B + endpoint: + host: ngl-dual-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-503 + roles: 'Api,Peer,Voting' + - publicKey: E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440 + endpoint: + host: ngl-dual-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-504 + roles: 'Api,Peer,Voting' + - publicKey: 90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A + endpoint: + host: ngl-dual-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - publicKey: E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6 + endpoint: + host: ngl-dual-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer,Voting' + - publicKey: F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF + endpoint: + host: ngl-dual-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-603 + roles: 'Api,Peer,Voting' + - publicKey: 9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF + endpoint: + host: ngl-dual-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-604 + roles: 'Api,Peer,Voting' + - publicKey: BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1 + endpoint: + host: ngl-dual-005.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-005 + roles: 'Api,Peer' + - publicKey: 3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51 + endpoint: + host: ngl-dual-006.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-006 + roles: 'Api,Peer' + - publicKey: 9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591 + endpoint: + host: ngl-dual-105.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-105 + roles: 'Api,Peer' + - publicKey: AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8 + endpoint: + host: ngl-dual-106.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-106 + roles: 'Api,Peer' + - publicKey: 7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3 + endpoint: + host: ngl-dual-205.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-205 + roles: 'Api,Peer' + - publicKey: 02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6 + endpoint: + host: ngl-dual-206.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-206 + roles: 'Api,Peer' + - publicKey: 36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795 + endpoint: + host: ngl-dual-305.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-305 + roles: 'Api,Peer' + - publicKey: 9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA + endpoint: + host: ngl-dual-306.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-306 + roles: 'Api,Peer' + - publicKey: 4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95 + endpoint: + host: ngl-dual-405.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-405 + roles: 'Api,Peer' + - publicKey: 0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F + endpoint: + host: ngl-dual-406.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-406 + roles: 'Api,Peer' + - publicKey: E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29 + endpoint: + host: ngl-dual-505.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-505 + roles: 'Api,Peer' + - publicKey: B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C + endpoint: + host: ngl-dual-506.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-506 + roles: 'Api,Peer' + - publicKey: 4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571 + endpoint: + host: ngl-dual-605.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-605 + roles: 'Api,Peer' + - publicKey: E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC + endpoint: + host: ngl-dual-606.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-606 + roles: 'Api,Peer' + - publicKey: 47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011 + endpoint: + host: ngl-api-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - publicKey: FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684 + endpoint: + host: ngl-api-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-301 + roles: Api + - publicKey: 642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B + endpoint: + host: ngl-api-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-401 + roles: Api + - publicKey: E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79 + endpoint: + host: ngl-api-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-501 + roles: Api + - publicKey: 0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C + endpoint: + host: ngl-api-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-601 + roles: Api peer-node: - - - publicKey: FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF - endpoint: - host: ngl-beacon-001.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-001 - roles: 'Peer,Voting' - - - publicKey: AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF - endpoint: - host: ngl-beacon-101.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-101 - roles: 'Peer,Voting' - - - publicKey: D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0 - endpoint: - host: ngl-beacon-201.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-201 - roles: 'Peer,Voting' - - - publicKey: 78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C - endpoint: - host: ngl-beacon-301.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-301 - roles: 'Peer,Voting' - - - publicKey: 9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7 - endpoint: - host: ngl-beacon-401.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-401 - roles: 'Peer,Voting' - - - publicKey: B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1 - endpoint: - host: ngl-beacon-501.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-501 - roles: 'Peer,Voting' - - - publicKey: 9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A - endpoint: - host: ngl-beacon-601.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-601 - roles: 'Peer,Voting' - - - publicKey: EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F - endpoint: - host: ngl-beacon-002.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-002 - roles: 'Peer,Voting' - - - publicKey: D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775 - endpoint: - host: ngl-beacon-102.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-102 - roles: 'Peer,Voting' - - - publicKey: AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0 - endpoint: - host: ngl-beacon-202.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-202 - roles: 'Peer,Voting' - - - publicKey: EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395 - endpoint: - host: ngl-beacon-302.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-302 - roles: 'Peer,Voting' - - - publicKey: 3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9 - endpoint: - host: ngl-beacon-402.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-402 - roles: 'Peer,Voting' - - - publicKey: 47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058 - endpoint: - host: ngl-beacon-502.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-502 - roles: 'Peer,Voting' - - - publicKey: DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD - endpoint: - host: ngl-beacon-602.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-602 - roles: 'Peer,Voting' - - - publicKey: 533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217 - endpoint: - host: ngl-beacon-003.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-003 - roles: Peer - - - publicKey: DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202 - endpoint: - host: ngl-beacon-004.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-004 - roles: Peer - - - publicKey: F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A - endpoint: - host: ngl-beacon-103.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-103 - roles: Peer - - - publicKey: 4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A - endpoint: - host: ngl-beacon-104.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-104 - roles: Peer - - - publicKey: EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E - endpoint: - host: ngl-beacon-203.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-203 - roles: Peer - - - publicKey: 2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B - endpoint: - host: ngl-beacon-204.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-204 - roles: Peer - - - publicKey: C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA - endpoint: - host: ngl-beacon-303.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-303 - roles: Peer - - - publicKey: 082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB - endpoint: - host: ngl-beacon-304.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-304 - roles: Peer - - - publicKey: 11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1 - endpoint: - host: ngl-beacon-403.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-403 - roles: Peer - - - publicKey: 66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27 - endpoint: - host: ngl-beacon-404.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-404 - roles: Peer - - - publicKey: C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655 - endpoint: - host: ngl-beacon-503.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-503 - roles: Peer - - - publicKey: BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07 - endpoint: - host: ngl-beacon-504.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-504 - roles: Peer - - - publicKey: 5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A - endpoint: - host: ngl-beacon-603.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-603 - roles: Peer - - - publicKey: 00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39 - endpoint: - host: ngl-beacon-604.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-604 - roles: Peer - - - publicKey: AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691 - endpoint: - host: ngl-peer-001.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-001 - roles: Peer - - - publicKey: 990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822 - endpoint: - host: ngl-peer-301.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-301 - roles: Peer - - - publicKey: 1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489 - endpoint: - host: ngl-peer-401.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-401 - roles: Peer - - - publicKey: D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510 - endpoint: - host: ngl-peer-601.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-601 - roles: Peer - - - publicKey: 92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806 - endpoint: - host: ngl-peer-501.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-501 - roles: Peer - - - publicKey: DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D - endpoint: - host: ngl-peer-002.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-002 - roles: 'Peer,Voting' - - - publicKey: 7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0 - endpoint: - host: ngl-peer-003.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-003 - roles: 'Peer,Voting' - - - publicKey: E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE - endpoint: - host: ngl-peer-004.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-004 - roles: 'Peer,Voting' - - - publicKey: FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A - endpoint: - host: ngl-peer-101.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-101 - roles: 'Peer,Voting' - - - publicKey: E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD - endpoint: - host: ngl-peer-102.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-102 - roles: 'Peer,Voting' - - - publicKey: FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1 - endpoint: - host: ngl-peer-103.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-103 - roles: 'Peer,Voting' - - - publicKey: 0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F - endpoint: - host: ngl-peer-201.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-201 - roles: 'Peer,Voting' - - - publicKey: ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF - endpoint: - host: ngl-peer-202.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-202 - roles: 'Peer,Voting' - - - publicKey: 5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C - endpoint: - host: ngl-peer-302.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-302 - roles: 'Peer,Voting' - - - publicKey: 504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB - endpoint: - host: ngl-peer-303.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-303 - roles: 'Peer,Voting' - - - publicKey: D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7 - endpoint: - host: ngl-peer-304.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-304 - roles: 'Peer,Voting' - - - publicKey: 729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644 - endpoint: - host: ngl-peer-402.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-402 - roles: 'Peer,Voting' - - - publicKey: 8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD - endpoint: - host: ngl-peer-403.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-403 - roles: 'Peer,Voting' - - - publicKey: 22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D - endpoint: - host: ngl-peer-404.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-404 - roles: 'Peer,Voting' - - - publicKey: 00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86 - endpoint: - host: ngl-peer-502.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-502 - roles: 'Peer,Voting' - - - publicKey: E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF - endpoint: - host: ngl-peer-503.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-503 - roles: 'Peer,Voting' - - - publicKey: 4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2 - endpoint: - host: ngl-peer-504.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-504 - roles: 'Peer,Voting' - - - publicKey: 98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170 - endpoint: - host: ngl-peer-602.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-602 - roles: 'Peer,Voting' - - - publicKey: 8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2 - endpoint: - host: ngl-peer-603.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-603 - roles: 'Peer,Voting' - - - publicKey: 9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85 - endpoint: - host: ngl-peer-604.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-604 - roles: 'Peer,Voting' + - publicKey: FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF + endpoint: + host: ngl-beacon-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - publicKey: AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF + endpoint: + host: ngl-beacon-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - publicKey: D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0 + endpoint: + host: ngl-beacon-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-201 + roles: 'Peer,Voting' + - publicKey: 78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C + endpoint: + host: ngl-beacon-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-301 + roles: 'Peer,Voting' + - publicKey: 9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7 + endpoint: + host: ngl-beacon-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-401 + roles: 'Peer,Voting' + - publicKey: B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1 + endpoint: + host: ngl-beacon-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - publicKey: 9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A + endpoint: + host: ngl-beacon-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - publicKey: EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F + endpoint: + host: ngl-beacon-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-002 + roles: 'Peer,Voting' + - publicKey: D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775 + endpoint: + host: ngl-beacon-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-102 + roles: 'Peer,Voting' + - publicKey: AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0 + endpoint: + host: ngl-beacon-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-202 + roles: 'Peer,Voting' + - publicKey: EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395 + endpoint: + host: ngl-beacon-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-302 + roles: 'Peer,Voting' + - publicKey: 3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9 + endpoint: + host: ngl-beacon-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-402 + roles: 'Peer,Voting' + - publicKey: 47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058 + endpoint: + host: ngl-beacon-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-502 + roles: 'Peer,Voting' + - publicKey: DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD + endpoint: + host: ngl-beacon-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-602 + roles: 'Peer,Voting' + - publicKey: 533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217 + endpoint: + host: ngl-beacon-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-003 + roles: Peer + - publicKey: DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202 + endpoint: + host: ngl-beacon-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-004 + roles: Peer + - publicKey: F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A + endpoint: + host: ngl-beacon-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-103 + roles: Peer + - publicKey: 4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A + endpoint: + host: ngl-beacon-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-104 + roles: Peer + - publicKey: EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E + endpoint: + host: ngl-beacon-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-203 + roles: Peer + - publicKey: 2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B + endpoint: + host: ngl-beacon-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-204 + roles: Peer + - publicKey: C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA + endpoint: + host: ngl-beacon-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-303 + roles: Peer + - publicKey: 082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB + endpoint: + host: ngl-beacon-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-304 + roles: Peer + - publicKey: 11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1 + endpoint: + host: ngl-beacon-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-403 + roles: Peer + - publicKey: 66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27 + endpoint: + host: ngl-beacon-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-404 + roles: Peer + - publicKey: C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655 + endpoint: + host: ngl-beacon-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-503 + roles: Peer + - publicKey: BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07 + endpoint: + host: ngl-beacon-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-504 + roles: Peer + - publicKey: 5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A + endpoint: + host: ngl-beacon-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-603 + roles: Peer + - publicKey: 00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39 + endpoint: + host: ngl-beacon-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-604 + roles: Peer + - publicKey: AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691 + endpoint: + host: ngl-peer-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-001 + roles: Peer + - publicKey: 990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822 + endpoint: + host: ngl-peer-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - publicKey: 1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489 + endpoint: + host: ngl-peer-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-401 + roles: Peer + - publicKey: D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510 + endpoint: + host: ngl-peer-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-601 + roles: Peer + - publicKey: 92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806 + endpoint: + host: ngl-peer-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-501 + roles: Peer + - publicKey: DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D + endpoint: + host: ngl-peer-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-002 + roles: 'Peer,Voting' + - publicKey: 7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0 + endpoint: + host: ngl-peer-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-003 + roles: 'Peer,Voting' + - publicKey: E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE + endpoint: + host: ngl-peer-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-004 + roles: 'Peer,Voting' + - publicKey: FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A + endpoint: + host: ngl-peer-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - publicKey: E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD + endpoint: + host: ngl-peer-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-102 + roles: 'Peer,Voting' + - publicKey: FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1 + endpoint: + host: ngl-peer-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-103 + roles: 'Peer,Voting' + - publicKey: 0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F + endpoint: + host: ngl-peer-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-201 + roles: 'Peer,Voting' + - publicKey: ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF + endpoint: + host: ngl-peer-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - publicKey: 5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C + endpoint: + host: ngl-peer-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - publicKey: 504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB + endpoint: + host: ngl-peer-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-303 + roles: 'Peer,Voting' + - publicKey: D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7 + endpoint: + host: ngl-peer-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-304 + roles: 'Peer,Voting' + - publicKey: 729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644 + endpoint: + host: ngl-peer-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-402 + roles: 'Peer,Voting' + - publicKey: 8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD + endpoint: + host: ngl-peer-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-403 + roles: 'Peer,Voting' + - publicKey: 22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D + endpoint: + host: ngl-peer-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-404 + roles: 'Peer,Voting' + - publicKey: 00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86 + endpoint: + host: ngl-peer-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-502 + roles: 'Peer,Voting' + - publicKey: E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF + endpoint: + host: ngl-peer-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-503 + roles: 'Peer,Voting' + - publicKey: 4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2 + endpoint: + host: ngl-peer-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-504 + roles: 'Peer,Voting' + - publicKey: 98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170 + endpoint: + host: ngl-peer-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-602 + roles: 'Peer,Voting' + - publicKey: 8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2 + endpoint: + host: ngl-peer-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-603 + roles: 'Peer,Voting' + - publicKey: 9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85 + endpoint: + host: ngl-peer-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-604 + roles: 'Peer,Voting' +httpsProxies: + - name: 'https-proxy' + excludeDockerService: true #disabled as default + openPort: 3001 + image: 'steveltn/https-portal:1' + #domains: 'symbol-node.example.com -> http://rest-gateway:3000' + stage: 'production' + webSocket: 'true' + serverNamesHashBucketSize: 128 + inflation: starting-at-height-2: 0 starting-at-height-5760: 191997042 diff --git a/presets/shared.yml b/presets/shared.yml index 7c2e9a020..018e2b993 100644 --- a/presets/shared.yml +++ b/presets/shared.yml @@ -214,3 +214,8 @@ connectionPoolSize: 10 maxSubscriptions: 300 restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' restDeploymentTool: symbol-bootstrap +restProtocol: HTTP +restSSLKeyPath: '' +restSSLCertificatePath: '' +restSSLKeyBase64: '' +restSSLCertificateBase64: '' diff --git a/presets/testnet/network.yml b/presets/testnet/network.yml index 178f52b99..dc5d70c77 100644 --- a/presets/testnet/network.yml +++ b/presets/testnet/network.yml @@ -69,207 +69,192 @@ knownRestGateways: - 'http://ngl-api-101.testnet.symboldev.network:3000' knownPeers: api-node: - - - publicKey: 1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44 - endpoint: - host: ngl-dual-501.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-501 - roles: 'Api,Peer,Voting' - - - publicKey: 41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7 - endpoint: - host: ngl-dual-601.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-601 - roles: 'Api,Peer,Voting' - - - publicKey: E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78 - endpoint: - host: ngl-dual-001.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-001 - roles: 'Api,Peer' - - - publicKey: C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079 - endpoint: - host: ngl-dual-101.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-101 - roles: 'Api,Peer' - - - publicKey: C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8 - endpoint: - host: ngl-dual-201.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-201 - roles: 'Api,Peer' - - - publicKey: 4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C - endpoint: - host: ngl-dual-301.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-301 - roles: 'Api,Peer' - - - publicKey: EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089 - endpoint: - host: ngl-dual-401.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-401 - roles: 'Api,Peer' - - - publicKey: 093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142 - endpoint: - host: ngl-dual-502.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-502 - roles: 'Api,Peer' - - - publicKey: 53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197 - endpoint: - host: ngl-dual-602.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-602 - roles: 'Api,Peer' - - - publicKey: 3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6 - endpoint: - host: ngl-api-001.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-api-001 - roles: Api - - - publicKey: 904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F - endpoint: - host: ngl-api-101.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-api-101 - roles: Api + - publicKey: 1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44 + endpoint: + host: ngl-dual-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - publicKey: 41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7 + endpoint: + host: ngl-dual-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - publicKey: E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78 + endpoint: + host: ngl-dual-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer' + - publicKey: C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079 + endpoint: + host: ngl-dual-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer' + - publicKey: C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8 + endpoint: + host: ngl-dual-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer' + - publicKey: 4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C + endpoint: + host: ngl-dual-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer' + - publicKey: EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089 + endpoint: + host: ngl-dual-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer' + - publicKey: 093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142 + endpoint: + host: ngl-dual-502.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer' + - publicKey: 53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197 + endpoint: + host: ngl-dual-602.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer' + - publicKey: 3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6 + endpoint: + host: ngl-api-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - publicKey: 904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F + endpoint: + host: ngl-api-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-101 + roles: Api peer-node: - - - publicKey: 3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F - endpoint: - host: ngl-beacon-501.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-beacon-501 - roles: 'Peer,Voting' - - - publicKey: CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435 - endpoint: - host: ngl-beacon-601.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-beacon-601 - roles: 'Peer,Voting' - - - publicKey: 5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D - endpoint: - host: ngl-beacon-001.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-beacon-001 - roles: 'Peer,Voting' - - - publicKey: 3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1 - endpoint: - host: ngl-beacon-101.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-beacon-101 - roles: 'Peer,Voting' - - - publicKey: A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8 - endpoint: - host: ngl-beacon-401.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-beacon-401 - roles: Peer - - - publicKey: 723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C - endpoint: - host: ngl-peer-201.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-201 - roles: Peer - - - publicKey: DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837 - endpoint: - host: ngl-peer-301.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-301 - roles: Peer - - - publicKey: 22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11 - endpoint: - host: ngl-peer-001.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-001 - roles: 'Peer,Voting' - - - publicKey: 78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE - endpoint: - host: ngl-peer-101.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-101 - roles: 'Peer,Voting' - - - publicKey: BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824 - endpoint: - host: ngl-peer-202.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-202 - roles: 'Peer,Voting' - - - publicKey: 356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C - endpoint: - host: ngl-peer-302.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-302 - roles: 'Peer,Voting' - - - publicKey: FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB - endpoint: - host: ngl-peer-401.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-401 - roles: 'Peer,Voting' - - - publicKey: FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE - endpoint: - host: ngl-peer-501.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-501 - roles: 'Peer,Voting' - - - publicKey: 2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732 - endpoint: - host: ngl-peer-601.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-601 - roles: 'Peer,Voting' + - publicKey: 3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F + endpoint: + host: ngl-beacon-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - publicKey: CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435 + endpoint: + host: ngl-beacon-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - publicKey: 5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D + endpoint: + host: ngl-beacon-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - publicKey: 3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1 + endpoint: + host: ngl-beacon-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - publicKey: A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8 + endpoint: + host: ngl-beacon-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-401 + roles: Peer + - publicKey: 723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C + endpoint: + host: ngl-peer-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-201 + roles: Peer + - publicKey: DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837 + endpoint: + host: ngl-peer-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - publicKey: 22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11 + endpoint: + host: ngl-peer-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-001 + roles: 'Peer,Voting' + - publicKey: 78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE + endpoint: + host: ngl-peer-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - publicKey: BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824 + endpoint: + host: ngl-peer-202.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - publicKey: 356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C + endpoint: + host: ngl-peer-302.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - publicKey: FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB + endpoint: + host: ngl-peer-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-401 + roles: 'Peer,Voting' + - publicKey: FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE + endpoint: + host: ngl-peer-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-501 + roles: 'Peer,Voting' + - publicKey: 2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732 + endpoint: + host: ngl-peer-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-601 + roles: 'Peer,Voting' +httpsProxies: + - name: 'https-proxy' + excludeDockerService: true #disabled as default + openPort: 3001 + image: 'steveltn/https-portal:1' + #domains: 'symbol-node.example.com -> http://rest-gateway:3000' + stage: 'production' + webSocket: 'true' + serverNamesHashBucketSize: 128 + inflation: starting-at-height-2: 0 starting-at-height-5760: 191997042 diff --git a/src/commands/wizard.ts b/src/commands/wizard.ts index 306894619..e30db102c 100644 --- a/src/commands/wizard.ts +++ b/src/commands/wizard.ts @@ -16,7 +16,7 @@ import { Command, flags } from '@oclif/command'; import { IOptionFlag } from '@oclif/command/lib/flags'; -import { existsSync } from 'fs'; +import { existsSync, readFileSync } from 'fs'; import { prompt } from 'inquirer'; import { Account, NetworkType, PublicAccount } from 'symbol-sdk'; import { CustomPreset, PrivateKeySecurityMode } from '../model'; @@ -39,6 +39,11 @@ export const assemblies: Record http://rest-gateway:3000`, + stage: 'production', + }, + ]; + } else { + // HttpsOption.None + console.log(`Warning! You've chosen to proceed with http, which is less secure in comparison to https.`); + } + const friendlyName = await Wizard.resolveFriendlyName(host || accounts.main.publicKey.substr(0, 7)); const privateKeySecurityMode = await Wizard.resolvePrivateKeySecurityMode(); const voting = await Wizard.isVoting(); @@ -210,7 +244,11 @@ export default class Wizard extends Command { agentPrivateKey: accounts.agent?.privateKey, }, ], + + ...(gateways ? { gateways } : {}), + ...(httpsProxies ? { httpsProxies } : {}), }; + const defaultParams = ConfigService.defaultParams; await BootstrapUtils.writeYaml(customPresetFile, presetContent, password); console.log(); @@ -408,13 +446,11 @@ export default class Wizard extends Command { default: PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT, choices: [ { - name: - 'PROMPT_MAIN: Bootstrap may ask for the Main private key when doing certificates upgrades. Other keys are encrypted. Recommended for Supernodes.', + name: 'PROMPT_MAIN: Bootstrap may ask for the Main private key when doing certificates upgrades. Other keys are encrypted. Recommended for Supernodes.', value: PrivateKeySecurityMode.PROMPT_MAIN, }, { - name: - 'PROMPT_MAIN_TRANSPORT: Bootstrap may ask for the Main and Transport private keys when regenerating certificates and agent configuration. Other keys are encrypted. Recommended for regular nodes', + name: 'PROMPT_MAIN_TRANSPORT: Bootstrap may ask for the Main and Transport private keys when regenerating certificates and agent configuration. Other keys are encrypted. Recommended for regular nodes', value: PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT, }, { name: 'ENCRYPT: All keys are encrypted, only password would be asked', value: PrivateKeySecurityMode.ENCRYPT }, @@ -512,6 +548,37 @@ export default class Wizard extends Command { return host || undefined; } + public static async resolveRestSSLKeyAsBase64(): Promise { + return this.resolveFileContent('base64', 'Enter your SSL key file path:', 'Invalid path, cannot find SSL key file!'); + } + + public static async resolveRestSSLCertAsBase64(): Promise { + return this.resolveFileContent( + 'base64', + 'Enter your SSL Certificate file path:', + 'Invalid path, cannot find SSL certificate file!', + ); + } + + public static async resolveFileContent(encoding: string, message: string, notFoundMessage: string): Promise { + const { value } = await prompt([ + { + name: 'value', + message: message, + type: 'input', + validate: (value) => { + if (!existsSync(value)) { + return notFoundMessage; + } + return true; + }, + }, + ]); + + return readFileSync(value, encoding); + } + + // TODO Refactor this public static isValidHost(input: string): boolean | string { if (input.trim() == '') { return 'Host is required.'; @@ -519,9 +586,10 @@ export default class Wizard extends Command { if (input.length > 50) { return `Input (${input.length}) is larger than 50`; } - const valid = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$|^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$|^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/.test( - input, - ); + const valid = + /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$|^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$|^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/.test( + input, + ); return valid ? true : `It's not a valid IP or hostname`; } @@ -546,4 +614,28 @@ export default class Wizard extends Command { ]); return friendlyName; } + + public static async resolveHttpsOptions(): Promise { + // TODO work on these messages, should be concise and clearer + console.log( + 'Your REST Gateway should be running on HTTPS (which is a secure protocol) so that it can be recognized by the Symbol Explorer.', + ); + const { value } = await prompt([ + { + name: 'value', + message: 'Select your HTTPS setup method:', + type: 'list', + default: HttpsOption.Native, + choices: [ + { name: 'Native support, I have the SSL certificate and key.', value: HttpsOption.Native }, + { + name: `Automatic, all of your keys and certs will be generated/renewed automatically, using letsencyrpt.`, + value: HttpsOption.Automatic, + }, + { name: 'None', value: HttpsOption.None }, + ], + }, + ]); + return value; + } } diff --git a/src/model/ConfigPreset.ts b/src/model/ConfigPreset.ts index 98478ac52..d067c3739 100644 --- a/src/model/ConfigPreset.ts +++ b/src/model/ConfigPreset.ts @@ -318,6 +318,12 @@ export interface GatewayConfigPreset { restDeploymentTool: string; restDeploymentToolVersion?: string; // default is dynamic, current bootstrap version restDeploymentToolLastUpdatedDate?: string; // default is dynamic, current datetime + restProtocol?: string; + restSSLKeyPath?: string; // TODO think about this should this be static? + restSSLCertificatePath?: string; // TODO think about this should this be static? + + restSSLKeyBase64?: string; + restSSLCertificateBase64?: string; } export interface GatewayPreset extends DockerServicePreset, Partial { @@ -329,6 +335,15 @@ export interface GatewayPreset extends DockerServicePreset, Partial { @@ -449,4 +465,5 @@ export interface CustomPreset extends Partial { explorers?: Partial[]; wallets?: Partial[]; faucets?: Partial[]; + httpsProxies?: HttpsProxyPreset[]; } diff --git a/src/service/BootstrapUtils.ts b/src/service/BootstrapUtils.ts index 9a3643abc..cd241b5ad 100644 --- a/src/service/BootstrapUtils.ts +++ b/src/service/BootstrapUtils.ts @@ -304,6 +304,8 @@ export class BootstrapUtils { // Create a promise that rejects in milliseconds return new Promise((resolve) => { setTimeout(() => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + //@ts-ignore resolve(); }, ms); }); diff --git a/src/service/ComposeService.ts b/src/service/ComposeService.ts index 3dc010f0d..3b9ed67d0 100644 --- a/src/service/ComposeService.ts +++ b/src/service/ComposeService.ts @@ -296,6 +296,39 @@ export class ComposeService { }), ); + await Promise.all( + (presetData.httpsProxies || []) + .filter((d) => !d.excludeDockerService) + .map(async (n) => { + const internalPort = 443; + const volumes = [vol(`../${targetGatewaysFolder}/https-proxy`, nodeWorkingDirectory, false)]; + services.push( + await resolveService(n, { + container_name: n.name, + // user, // TODO fix the user permissions issue + image: n.image, + stop_signal: 'SIGINT', + working_dir: nodeWorkingDirectory, + ports: resolvePorts([ + { internalPort: 80, openPort: true }, + { internalPort: internalPort, openPort: n.openPort }, + ]), + environment: { + DOMAINS: n.domains, + WEBSOCKET: n.webSocket, + STAGE: n.stage, + SERVER_NAMES_HASH_BUCKET_SIZE: n.serverNamesHashBucketSize, + }, + restart: restart, + volumes: volumes, + depends_on: [presetData.gateways![0].name], + ...this.resolveDebugOptions(presetData.dockerComposeDebugMode, n.dockerComposeDebugMode), + ...n.compose, + }), + ); + }), + ); + await Promise.all( (presetData.wallets || []) .filter((d) => !d.excludeDockerService) diff --git a/src/service/ConfigService.ts b/src/service/ConfigService.ts index e3d04f598..208616b24 100644 --- a/src/service/ConfigService.ts +++ b/src/service/ConfigService.ts @@ -692,6 +692,13 @@ export class ConfigService { [], ['node.crt.pem', 'node.key.pem', 'ca.cert.pem'], ); + + //TODO generate ssl key and certificate files + if (gatewayPreset.restProtocol === 'HTTPS') { + // TODO check restSSLKeyBase64 and restSSLCertificateBase64 values exists! if not throw error + fs.writeFileSync(join(moveTo, 'restSSL.key.pem'), gatewayPreset.restSSLKeyBase64, 'base64'); + fs.writeFileSync(join(moveTo, 'restSSL.cert.pem'), gatewayPreset.restSSLCertificateBase64, 'base64'); + } }), ); } diff --git a/src/service/CryptoUtils.ts b/src/service/CryptoUtils.ts index b1aaeef1f..464b3f04e 100644 --- a/src/service/CryptoUtils.ts +++ b/src/service/CryptoUtils.ts @@ -20,6 +20,7 @@ import { KnownError } from './BootstrapUtils'; export class CryptoUtils { private static readonly ENCRYPT_PREFIX = 'ENCRYPTED:'; + private static readonly ENCRYPTABLE_KEYS = ['privateKey', 'restSSLKeyBase64']; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types public static encrypt(value: any, password: string, fieldName?: string): any { @@ -34,7 +35,7 @@ export class CryptoUtils { return _.mapValues(value, (value: any, name: string) => CryptoUtils.encrypt(value, password, name)); } - if (this.isPrivateKeyField(value, fieldName)) { + if (this.isEncryptableKeyField(value, fieldName)) { return CryptoUtils.ENCRYPT_PREFIX + Crypto.encrypt(value, password); } return value; @@ -81,7 +82,7 @@ export class CryptoUtils { const isBlacklisted = !blacklistNames.length || blacklistNames.find((blacklistName) => name.toLowerCase().indexOf(blacklistName.toLowerCase()) > -1); - return !isBlacklisted || !this.isPrivateKeyField(value, name); + return !isBlacklisted || !this.isEncryptableKeyField(value, name); }), (value: any, name: string) => { const isBlacklisted = @@ -106,7 +107,7 @@ export class CryptoUtils { if (_.isObject(value)) { return _.mapValues(value, (value: any, name: string) => CryptoUtils.decrypt(value, password, name)); } - if (this.isPrivateKeyField(value, fieldName) && value.startsWith(CryptoUtils.ENCRYPT_PREFIX)) { + if (this.isEncryptableKeyField(value, fieldName) && value.startsWith(CryptoUtils.ENCRYPT_PREFIX)) { let decryptedValue; try { const encryptedValue = value.substring(CryptoUtils.ENCRYPT_PREFIX.length); @@ -134,13 +135,17 @@ export class CryptoUtils { if (_.isObject(value)) { return _.sum(Object.entries(value).map(([fieldName, value]) => this.encryptedCount(value, fieldName))); } - if (this.isPrivateKeyField(value, fieldName) && value.startsWith(CryptoUtils.ENCRYPT_PREFIX)) { + if (this.isEncryptableKeyField(value, fieldName) && value.startsWith(CryptoUtils.ENCRYPT_PREFIX)) { return 1; } return 0; } - private static isPrivateKeyField(value: any, fieldName: string | undefined) { - return _.isString(value) && fieldName && fieldName.toLowerCase().endsWith('privatekey'); + private static isEncryptableKeyField(value: any, fieldName: string | undefined) { + return ( + _.isString(value) && + fieldName && + CryptoUtils.ENCRYPTABLE_KEYS.some((key) => fieldName.toLowerCase().endsWith(key.toLowerCase())) + ); } } From cf2d28104c0670d3732de76d62b602ec07fed005 Mon Sep 17 00:00:00 2001 From: Baha Date: Tue, 27 Jul 2021 23:16:21 +0100 Subject: [PATCH 02/10] feat: rest native and automatic ssl support, unit tests added and misc refactoring --- .prettierrc.js | 4 +- config/rest-gateway/rest.json.mustache | 4 +- package.json | 2 +- presets/bootstrap/network.yml | 223 ++- presets/mainnet/assembly-api.yml | 8 + presets/mainnet/assembly-dual.yml | 8 + presets/mainnet/network.yml | 1512 +++++++++-------- presets/shared.yml | 6 +- presets/testnet/assembly-api.yml | 8 + presets/testnet/assembly-dual.yml | 8 + presets/testnet/network.yml | 387 +++-- src/commands/wizard.ts | 23 +- src/model/ConfigPreset.ts | 11 +- src/service/ComposeService.ts | 33 +- src/service/ConfigService.ts | 16 +- test/certificates/restSsl.crt | 14 + test/certificates/restSsl.key | 9 + test/commands/Wizard.test.ts | 137 ++ .../expected-testnet-httpsproxy-compose.yml | 88 + .../bootstrap-voting/rest-gateway-0-rest.json | 5 +- .../rest-gateway-rest.json | 5 +- .../mainnet-dual/rest-gateway-rest.json | 5 +- .../testnet-api/rest-gateway-rest.json | 5 +- .../rest-gateway-rest.json | 5 +- test/service/ComposeService.test.ts | 14 + test/unit-test-profiles/https-proxy.yml | 11 + 26 files changed, 1506 insertions(+), 1045 deletions(-) create mode 100644 test/certificates/restSsl.crt create mode 100644 test/certificates/restSsl.key create mode 100644 test/composes/expected-testnet-httpsproxy-compose.yml create mode 100644 test/unit-test-profiles/https-proxy.yml diff --git a/.prettierrc.js b/.prettierrc.js index 212e486ae..745c62f64 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -16,8 +16,8 @@ module.exports = { semi: true, - trailingComma: "all", + trailingComma: 'all', singleQuote: true, printWidth: 140, - tabWidth: 4 + tabWidth: 4, }; diff --git a/config/rest-gateway/rest.json.mustache b/config/rest-gateway/rest.json.mustache index 9de26fdde..4be203154 100644 --- a/config/rest-gateway/rest.json.mustache +++ b/config/rest-gateway/rest.json.mustache @@ -6,8 +6,8 @@ "port": 3000, "protocol": "{{{restProtocol}}}", - "sslKeyPath": "./restSSL.key.pem", - "sslCertificatePath": "./restSSL.cert.pem", + "sslKeyPath": "{{{restSSLPath}}}/{{{restSSLKeyFileName}}}", + "sslCertificatePath": "{{{restSSLPath}}}/{{{restSSLCertificateFileName}}}", "crossDomain": { "allowedHosts": ["*"], diff --git a/package.json b/package.json index 5c98fc3cc..ae87f19ff 100644 --- a/package.json +++ b/package.json @@ -115,4 +115,4 @@ "start-network": "symbol-bootstrap start -t target/bootstrap-test -u 'current'" }, "types": "lib/index.d.ts" -} +} \ No newline at end of file diff --git a/presets/bootstrap/network.yml b/presets/bootstrap/network.yml index f408f0a6b..3c0fc73c0 100644 --- a/presets/bootstrap/network.yml +++ b/presets/bootstrap/network.yml @@ -16,123 +16,122 @@ votingKeyDesiredFutureLifetime: 120 lastKnownNetworkEpoch: 1 restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer' nemesis: - mosaics: - - name: '{{currencyName}}' - repeat: 1 - divisibility: 6 - duration: 0 - supply: 8998999998000000 - isTransferable: true - isSupplyMutable: false - isRestrictable: false - accounts: 5 - - name: '{{harvestingName}}' - repeat: 1 - divisibility: 3 - duration: 0 - supply: 15000000 - isTransferable: true - isSupplyMutable: true - isRestrictable: false - accounts: 2 + mosaics: + - name: '{{currencyName}}' + repeat: 1 + divisibility: 6 + duration: 0 + supply: 8998999998000000 + isTransferable: true + isSupplyMutable: false + isRestrictable: false + accounts: 5 + - name: '{{harvestingName}}' + repeat: 1 + divisibility: 3 + duration: 0 + supply: 15000000 + isTransferable: true + isSupplyMutable: true + isRestrictable: false + accounts: 2 databases: - - repeat: 1 - name: 'db-{{$index}}' - openPort: '{{add $index 27017}}' + - repeat: 1 + name: 'db-{{$index}}' + openPort: '{{add $index 27017}}' nodes: - - repeat: 2 - harvesting: true - voting: true - api: false - name: 'peer-node-{{$index}}' - friendlyName: 'peer-node-{{$index}}' - host: 'peer-node-{{$index}}' - openPort: '{{add $index 7900}}' - - repeat: 1 - harvesting: false - api: true - friendlyName: 'api-node-{{$index}}' - name: 'api-node-{{$index}}' - host: 'api-node-{{$index}}' - brokerName: 'api-node-broker-{{$index}}' - brokerOpenPort: '{{add $index 8002}}' - databaseHost: 'db-{{$index}}' - trustedHosts: '127.0.0.1, 172.20.0.{{add $index 25}}' - localNetworks: '127.0.0.1, 172.20.0.{{add $index 25}}' + - repeat: 2 + harvesting: true + voting: true + api: false + name: 'peer-node-{{$index}}' + friendlyName: 'peer-node-{{$index}}' + host: 'peer-node-{{$index}}' + openPort: '{{add $index 7900}}' + - repeat: 1 + harvesting: false + api: true + friendlyName: 'api-node-{{$index}}' + name: 'api-node-{{$index}}' + host: 'api-node-{{$index}}' + brokerName: 'api-node-broker-{{$index}}' + brokerOpenPort: '{{add $index 8002}}' + databaseHost: 'db-{{$index}}' + trustedHosts: '127.0.0.1, 172.20.0.{{add $index 25}}' + localNetworks: '127.0.0.1, 172.20.0.{{add $index 25}}' gateways: - - repeat: 1 - apiNodeName: 'api-node-{{$index}}' - apiNodeHost: 'api-node-{{$index}}' - apiNodeBrokerHost: 'api-node-broker-{{$index}}' - name: 'rest-gateway-{{$index}}' - description: 'catapult development network' - databaseHost: 'db-{{$index}}' - openPort: '{{add $index 3000}}' - ipv4_address: '172.20.0.{{add $index 25}}' + - repeat: 1 + apiNodeName: 'api-node-{{$index}}' + apiNodeHost: 'api-node-{{$index}}' + apiNodeBrokerHost: 'api-node-broker-{{$index}}' + name: 'rest-gateway-{{$index}}' + description: 'catapult development network' + databaseHost: 'db-{{$index}}' + openPort: '{{add $index 3000}}' + ipv4_address: '172.20.0.{{add $index 25}}' wallets: - - repeat: 0 - title: 'Symbol Bootstrap Wallet' - name: 'wallet-{{$index}}' - defaultNodeUrl: 'http://localhost:{{add $index 3000}}' - namespaceName: '{{baseNamespace}}.{{currencyName}}' - openPort: '{{add $index 80}}' - restNodes: - - friendlyName: 'Bootstrap Rest $index' - url: 'http://localhost:{{add $index 3000}}' - roles: 2 + - repeat: 0 + title: 'Symbol Bootstrap Wallet' + name: 'wallet-{{$index}}' + defaultNodeUrl: 'http://localhost:{{add $index 3000}}' + namespaceName: '{{baseNamespace}}.{{currencyName}}' + openPort: '{{add $index 80}}' + restNodes: + - friendlyName: 'Bootstrap Rest $index' + url: 'http://localhost:{{add $index 3000}}' + roles: 2 explorers: - - repeat: 0 - name: 'explorer-{{$index}}' - defaultNode: 'http://localhost:{{add $index 3000}}' - namespaceName: '{{baseNamespace}}.{{currencyName}}' - openPort: '{{add $index 90}}' - restNodes: - - 'http://localhost:{{add $index 3000}}' - footer: - link: - - href: https://nemflash.io/ - text: NEM News - icon: IconNewspaper - - href: https://forum.nem.io/ - text: Forum - icon: IconForum - - href: https://t.me/nemred - text: Telegram - icon: IconTelegram - - href: https://www.reddit.com/r/nem/ - text: Reddit - icon: IconReddit - - href: https://github.com/nemtech - text: Github - icon: IconGithub - - href: http://localhost:100/ - text: Faucet - icon: IconHomeCurrencyUsd + - repeat: 0 + name: 'explorer-{{$index}}' + defaultNode: 'http://localhost:{{add $index 3000}}' + namespaceName: '{{baseNamespace}}.{{currencyName}}' + openPort: '{{add $index 90}}' + restNodes: + - 'http://localhost:{{add $index 3000}}' + footer: + link: + - href: https://nemflash.io/ + text: NEM News + icon: IconNewspaper + - href: https://forum.nem.io/ + text: Forum + icon: IconForum + - href: https://t.me/nemred + text: Telegram + icon: IconTelegram + - href: https://www.reddit.com/r/nem/ + text: Reddit + icon: IconReddit + - href: https://github.com/nemtech + text: Github + icon: IconGithub + - href: http://localhost:100/ + text: Faucet + icon: IconHomeCurrencyUsd faucets: - - repeat: 0 - name: 'faucet-{{$index}}' - gateway: 'rest-gateway-{{$index}}' - environment: - DEFAULT_NODE: 'http://rest-gateway-{{$index}}:{{add $index 3000}}' - DEFAULT_NODE_CLIENT: 'http://localhost:{{add $index 3000}}' - NATIVE_CURRENCY_NAME: '{{baseNamespace}}.{{currencyName}}' - NATIVE_CURRENCY_OUT_MAX: 500000000 - NATIVE_CURRENCY_OUT_MIN: 100000000 - MAX_FEE: 5000000 - ENOUGH_BALANCE: 100000000000 - MAX_UNCONFIRMED: 99 - BLACKLIST_MOSAIC_IDS: '[]' - EXPLORER_URL: 'http://localhost:{{add $index 90}}/' - openPort: '{{add $index 100}}' + - repeat: 0 + name: 'faucet-{{$index}}' + gateway: 'rest-gateway-{{$index}}' + environment: + DEFAULT_NODE: 'http://rest-gateway-{{$index}}:{{add $index 3000}}' + DEFAULT_NODE_CLIENT: 'http://localhost:{{add $index 3000}}' + NATIVE_CURRENCY_NAME: '{{baseNamespace}}.{{currencyName}}' + NATIVE_CURRENCY_OUT_MAX: 500000000 + NATIVE_CURRENCY_OUT_MIN: 100000000 + MAX_FEE: 5000000 + ENOUGH_BALANCE: 100000000000 + MAX_UNCONFIRMED: 99 + BLACKLIST_MOSAIC_IDS: '[]' + EXPLORER_URL: 'http://localhost:{{add $index 90}}/' + openPort: '{{add $index 100}}' httpsProxies: - - name: 'https-proxy' - excludeDockerService: true #disabled as default - openPort: 3001 - image: 'steveltn/https-portal:1' - #domains: 'symbol-node.example.com -> http://rest-gateway:3000' - stage: 'production' - webSocket: 'true' - serverNamesHashBucketSize: 128 + - name: 'https-proxy' + excludeDockerService: true #disabled as default + openPort: 3001 + #domains: 'symbol-node.example.com -> http://rest-gateway:3000' + stage: 'production' + webSocket: 'true' + serverNamesHashBucketSize: 128 inflation: - starting-at-height-1: 0 - starting-at-height-10000: 0 + starting-at-height-1: 0 + starting-at-height-10000: 0 diff --git a/presets/mainnet/assembly-api.yml b/presets/mainnet/assembly-api.yml index 4d54d6670..c536ba752 100644 --- a/presets/mainnet/assembly-api.yml +++ b/presets/mainnet/assembly-api.yml @@ -20,3 +20,11 @@ gateways: databaseHost: 'db' openPort: true ipv4_address: 172.20.0.25 +httpsProxies: + - name: 'https-proxy' + excludeDockerService: true #disabled as default + openPort: 3001 + #domains: 'symbol-node.example.com -> http://rest-gateway:3000' + stage: 'production' + webSocket: 'true' + serverNamesHashBucketSize: 128 diff --git a/presets/mainnet/assembly-dual.yml b/presets/mainnet/assembly-dual.yml index 104f965cb..9b955d9c8 100644 --- a/presets/mainnet/assembly-dual.yml +++ b/presets/mainnet/assembly-dual.yml @@ -20,3 +20,11 @@ gateways: databaseHost: 'db' openPort: true ipv4_address: 172.20.0.25 +httpsProxies: + - name: 'https-proxy' + excludeDockerService: true #disabled as default + openPort: 3001 + #domains: 'symbol-node.example.com -> http://rest-gateway:3000' + stage: 'production' + webSocket: 'true' + serverNamesHashBucketSize: 128 diff --git a/presets/mainnet/network.yml b/presets/mainnet/network.yml index fc291d646..401f91648 100644 --- a/presets/mainnet/network.yml +++ b/presets/mainnet/network.yml @@ -30,7 +30,7 @@ minVotingKeyLifetime: 112 maxVotingKeyLifetime: 360 votingKeyDesiredLifetime: 360 votingKeyDesiredFutureLifetime: 60 -lastKnownNetworkEpoch: 255 +lastKnownNetworkEpoch: 268 stepDuration: 5m maxBlockFutureTime: 300ms maxAccountRestrictionValues: 100 @@ -103,717 +103,807 @@ knownRestGateways: - 'http://ngl-api-601.symbolblockchain.io:3000' knownPeers: api-node: - - publicKey: C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD - endpoint: - host: ngl-dual-001.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-001 - roles: 'Api,Peer,Voting' - - publicKey: CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610 - endpoint: - host: ngl-dual-002.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-002 - roles: 'Api,Peer,Voting' - - publicKey: B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929 - endpoint: - host: ngl-dual-003.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-003 - roles: 'Api,Peer,Voting' - - publicKey: 86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE - endpoint: - host: ngl-dual-004.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-004 - roles: 'Api,Peer,Voting' - - publicKey: 6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B - endpoint: - host: ngl-dual-101.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-101 - roles: 'Api,Peer,Voting' - - publicKey: D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2 - endpoint: - host: ngl-dual-102.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-102 - roles: 'Api,Peer,Voting' - - publicKey: DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1 - endpoint: - host: ngl-dual-103.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-103 - roles: 'Api,Peer,Voting' - - publicKey: 3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436 - endpoint: - host: ngl-dual-104.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-104 - roles: 'Api,Peer,Voting' - - publicKey: 7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89 - endpoint: - host: ngl-dual-201.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-201 - roles: 'Api,Peer,Voting' - - publicKey: 3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D - endpoint: - host: ngl-dual-202.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-202 - roles: 'Api,Peer,Voting' - - publicKey: 256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592 - endpoint: - host: ngl-dual-203.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-203 - roles: 'Api,Peer,Voting' - - publicKey: 6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D - endpoint: - host: ngl-dual-204.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-204 - roles: 'Api,Peer,Voting' - - publicKey: 92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA - endpoint: - host: ngl-dual-301.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-301 - roles: 'Api,Peer,Voting' - - publicKey: 5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979 - endpoint: - host: ngl-dual-302.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-302 - roles: 'Api,Peer,Voting' - - publicKey: 4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9 - endpoint: - host: ngl-dual-303.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-303 - roles: 'Api,Peer,Voting' - - publicKey: DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1 - endpoint: - host: ngl-dual-304.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-304 - roles: 'Api,Peer,Voting' - - publicKey: 9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19 - endpoint: - host: ngl-dual-401.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-401 - roles: 'Api,Peer,Voting' - - publicKey: 474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369 - endpoint: - host: ngl-dual-402.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-402 - roles: 'Api,Peer,Voting' - - publicKey: EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198 - endpoint: - host: ngl-dual-403.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-403 - roles: 'Api,Peer,Voting' - - publicKey: E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC - endpoint: - host: ngl-dual-404.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-404 - roles: 'Api,Peer,Voting' - - publicKey: 606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D - endpoint: - host: ngl-dual-501.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-501 - roles: 'Api,Peer,Voting' - - publicKey: 428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2 - endpoint: - host: ngl-dual-502.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-502 - roles: 'Api,Peer,Voting' - - publicKey: C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B - endpoint: - host: ngl-dual-503.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-503 - roles: 'Api,Peer,Voting' - - publicKey: E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440 - endpoint: - host: ngl-dual-504.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-504 - roles: 'Api,Peer,Voting' - - publicKey: 90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A - endpoint: - host: ngl-dual-601.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-601 - roles: 'Api,Peer,Voting' - - publicKey: E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6 - endpoint: - host: ngl-dual-602.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-602 - roles: 'Api,Peer,Voting' - - publicKey: F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF - endpoint: - host: ngl-dual-603.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-603 - roles: 'Api,Peer,Voting' - - publicKey: 9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF - endpoint: - host: ngl-dual-604.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-604 - roles: 'Api,Peer,Voting' - - publicKey: BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1 - endpoint: - host: ngl-dual-005.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-005 - roles: 'Api,Peer' - - publicKey: 3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51 - endpoint: - host: ngl-dual-006.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-006 - roles: 'Api,Peer' - - publicKey: 9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591 - endpoint: - host: ngl-dual-105.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-105 - roles: 'Api,Peer' - - publicKey: AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8 - endpoint: - host: ngl-dual-106.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-106 - roles: 'Api,Peer' - - publicKey: 7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3 - endpoint: - host: ngl-dual-205.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-205 - roles: 'Api,Peer' - - publicKey: 02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6 - endpoint: - host: ngl-dual-206.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-206 - roles: 'Api,Peer' - - publicKey: 36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795 - endpoint: - host: ngl-dual-305.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-305 - roles: 'Api,Peer' - - publicKey: 9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA - endpoint: - host: ngl-dual-306.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-306 - roles: 'Api,Peer' - - publicKey: 4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95 - endpoint: - host: ngl-dual-405.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-405 - roles: 'Api,Peer' - - publicKey: 0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F - endpoint: - host: ngl-dual-406.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-406 - roles: 'Api,Peer' - - publicKey: E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29 - endpoint: - host: ngl-dual-505.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-505 - roles: 'Api,Peer' - - publicKey: B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C - endpoint: - host: ngl-dual-506.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-506 - roles: 'Api,Peer' - - publicKey: 4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571 - endpoint: - host: ngl-dual-605.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-605 - roles: 'Api,Peer' - - publicKey: E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC - endpoint: - host: ngl-dual-606.symbolblockchain.io - port: 7900 - metadata: - name: ngl-dual-606 - roles: 'Api,Peer' - - publicKey: 47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011 - endpoint: - host: ngl-api-001.symbolblockchain.io - port: 7900 - metadata: - name: ngl-api-001 - roles: Api - - publicKey: FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684 - endpoint: - host: ngl-api-301.symbolblockchain.io - port: 7900 - metadata: - name: ngl-api-301 - roles: Api - - publicKey: 642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B - endpoint: - host: ngl-api-401.symbolblockchain.io - port: 7900 - metadata: - name: ngl-api-401 - roles: Api - - publicKey: E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79 - endpoint: - host: ngl-api-501.symbolblockchain.io - port: 7900 - metadata: - name: ngl-api-501 - roles: Api - - publicKey: 0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C - endpoint: - host: ngl-api-601.symbolblockchain.io - port: 7900 - metadata: - name: ngl-api-601 - roles: Api + - + publicKey: C7BEA9036ECFA79CB081184CFA0E524E7D567A5127C55360D9FF1D2FC1AC4FDD + endpoint: + host: ngl-dual-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer,Voting' + - + publicKey: CE0AC3FC879B190220A95A67CAC855251EA599F11FA05A77CC02BC32F8228610 + endpoint: + host: ngl-dual-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-002 + roles: 'Api,Peer,Voting' + - + publicKey: B36DE7C3B39B225FEF7FC37D40863A2C9AD90EAFDFD79C630BBFF3883CABD929 + endpoint: + host: ngl-dual-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-003 + roles: 'Api,Peer,Voting' + - + publicKey: 86C31F2136FB5EB07147E883ACECB891D2D4734E363B26033B1230D8ACF8BBBE + endpoint: + host: ngl-dual-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-004 + roles: 'Api,Peer,Voting' + - + publicKey: 6E81088A2E2504C4F91E3DC9C2517FAB99574D71EF5D9F74031FB394CCA7AF3B + endpoint: + host: ngl-dual-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer,Voting' + - + publicKey: D1BD3577079DD8CFA5073615B7053712C7B4D4B12899C31D1FB34219145298A2 + endpoint: + host: ngl-dual-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-102 + roles: 'Api,Peer,Voting' + - + publicKey: DCC6C941EE95967B47433EA3241D53594364A34DB33A9BDC0D668C457002E0F1 + endpoint: + host: ngl-dual-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-103 + roles: 'Api,Peer,Voting' + - + publicKey: 3A98603E293DCE7CBF5EE860A00670E3025D3E880D3CC339C926217C36FE6436 + endpoint: + host: ngl-dual-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-104 + roles: 'Api,Peer,Voting' + - + publicKey: 7E1101CFD5E64D6CA4A55B70E24412365BD1658E767F23AF9E9777410C116D89 + endpoint: + host: ngl-dual-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer,Voting' + - + publicKey: 3820C4CFB4BA94F62A982991CB2618EC5E1CFF2C11AD34EFA2254F4305013C1D + endpoint: + host: ngl-dual-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-202 + roles: 'Api,Peer,Voting' + - + publicKey: 256AA91283F23168C538F3155DEE946A2B0E7207FBDC369E5C5415F7EE1DE592 + endpoint: + host: ngl-dual-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-203 + roles: 'Api,Peer,Voting' + - + publicKey: 6830127294F7C50FE91625076A0D1CCE910A084B032252CDD005C4148ED11A3D + endpoint: + host: ngl-dual-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-204 + roles: 'Api,Peer,Voting' + - + publicKey: 92D05B749D6300C4CDCD13A58BF37B7C82B471AB2DFD1A7A6E8C1584620594CA + endpoint: + host: ngl-dual-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer,Voting' + - + publicKey: 5446DA4D21D5809A3C8492C9083743F4349690A21CB5FF0D6621CC78A6FEE979 + endpoint: + host: ngl-dual-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-302 + roles: 'Api,Peer,Voting' + - + publicKey: 4C48C2A708CC1857405C9C48C4D7A69AA5F0FBB7FB8323C967E1BC644A4417E9 + endpoint: + host: ngl-dual-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-303 + roles: 'Api,Peer,Voting' + - + publicKey: DEC3292B6ABFAC6687C37FA8963B84715C6E736F6CA27DD50249638D9DF967B1 + endpoint: + host: ngl-dual-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-304 + roles: 'Api,Peer,Voting' + - + publicKey: 9D50238B795818044CB330DC5FBA485C7B20EBD38E1A7DBE248555AD70AB4F19 + endpoint: + host: ngl-dual-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer,Voting' + - + publicKey: 474C5CD5F0B24BCD769DBE99B37C80F4D60B89E28946E126BE23E1EFD5AAA369 + endpoint: + host: ngl-dual-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-402 + roles: 'Api,Peer,Voting' + - + publicKey: EF1209DC3C42B6450BEF658D404252DF2E26784CECD35FAEB19D929AE030A198 + endpoint: + host: ngl-dual-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-403 + roles: 'Api,Peer,Voting' + - + publicKey: E335B45C9FA2666121D81ACDC8007DF0C958D48A0E1ADD34D22894D85B3EA3BC + endpoint: + host: ngl-dual-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-404 + roles: 'Api,Peer,Voting' + - + publicKey: 606BF668BBD9EA1AFCD9E37A2C18C05BE39CC00752AAD99A0E22A79071CCAA7D + endpoint: + host: ngl-dual-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 428F68595322EADDCC0722F024FB0FAD7D35F40C50F1E99AE8FBC8B7EC68E7F2 + endpoint: + host: ngl-dual-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer,Voting' + - + publicKey: C5B4653E6EE56B7E9C1F87D4F0C712B00378D2828CF7AC73F6BE19F8B1B04B4B + endpoint: + host: ngl-dual-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-503 + roles: 'Api,Peer,Voting' + - + publicKey: E74C655E5A4E72E13EE86B8AE7051EEAAF9AD871D5750A04AB360A3FEFD03440 + endpoint: + host: ngl-dual-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-504 + roles: 'Api,Peer,Voting' + - + publicKey: 90009F2C2D396A6B788D6DBAB8F075CB20549A50BBA5259D382618FD86F1419A + endpoint: + host: ngl-dual-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E0AB078AC2F363DE0D6823D2A9B5229C092FFB8CB2735D72BE63B8AF94367CB6 + endpoint: + host: ngl-dual-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer,Voting' + - + publicKey: F8C70778B37A989480969CB44F509509D1372049E821CA6F0A759FC50E03ADBF + endpoint: + host: ngl-dual-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-603 + roles: 'Api,Peer,Voting' + - + publicKey: 9F62586518D1707CA57004EF38135509EAE9E9D2933A73041B6171EC0B3F50DF + endpoint: + host: ngl-dual-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-604 + roles: 'Api,Peer,Voting' + - + publicKey: BA3E425DA3D32458F8A36C8FCBD6DEDBF5E7A9D8E56A7962EA55AD5125C425B1 + endpoint: + host: ngl-dual-005.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-005 + roles: 'Api,Peer' + - + publicKey: 3FDFCB4F510E81A4A44B044298974DAA34F3B6FC9D24B6D5CE90FFA933C11F51 + endpoint: + host: ngl-dual-006.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-006 + roles: 'Api,Peer' + - + publicKey: 9266C64CDEE62F2AF54806F0CBF2A53D9144CB02AA10B7F7DDEAEAF483E87591 + endpoint: + host: ngl-dual-105.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-105 + roles: 'Api,Peer' + - + publicKey: AC63FD2AAA53B73B4E515F73077522925C8502BFC13B073A520B4BA2F3026BC8 + endpoint: + host: ngl-dual-106.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-106 + roles: 'Api,Peer' + - + publicKey: 7811A94C2BF3CE9E7E1933DF9E9D0C3A7C09DAEF5A3CAC23960B252BDB8D52D3 + endpoint: + host: ngl-dual-205.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-205 + roles: 'Api,Peer' + - + publicKey: 02A55829A1A10542C460A87C4D2C39D03DCCA3F53692B5095C424CCDC21E64A6 + endpoint: + host: ngl-dual-206.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-206 + roles: 'Api,Peer' + - + publicKey: 36CAF133D574DB99B4392D76959488D5B91BD71545039DC80249CFD1FC536795 + endpoint: + host: ngl-dual-305.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-305 + roles: 'Api,Peer' + - + publicKey: 9B302ABCE3CD5783D79AD522B1769DA9AAA10A69E1930B998C2675AA105356FA + endpoint: + host: ngl-dual-306.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-306 + roles: 'Api,Peer' + - + publicKey: 4C85111B10EFB6A25FB77C8A2675C5A92DA5FF36686C4CCE24F887B16342CC95 + endpoint: + host: ngl-dual-405.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-405 + roles: 'Api,Peer' + - + publicKey: 0AF73C5CAC76624DB9B51560820F8DFC88120994143C6DB344A035EBFF707A2F + endpoint: + host: ngl-dual-406.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-406 + roles: 'Api,Peer' + - + publicKey: E060CA383C533273DB4B3CE7AD964E0E3A2B17018B19ABF830590D5FB9338B29 + endpoint: + host: ngl-dual-505.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-505 + roles: 'Api,Peer' + - + publicKey: B1D2AA01E51A81E84CBB2919C0E6AFBBC1383A2760370E60A93C335245A6CB9C + endpoint: + host: ngl-dual-506.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-506 + roles: 'Api,Peer' + - + publicKey: 4F014A430E69EFC422AD8B440FA4D312CBDE9803BB857A0736F38E62CE4CF571 + endpoint: + host: ngl-dual-605.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-605 + roles: 'Api,Peer' + - + publicKey: E32504B5590B9927CA5509FAA0C0CA63DB3479095C2DB73D0150FB862AA0E1FC + endpoint: + host: ngl-dual-606.symbolblockchain.io + port: 7900 + metadata: + name: ngl-dual-606 + roles: 'Api,Peer' + - + publicKey: 47AC3041A5CA98EEA123C64CB7420ADA7F45355CF1993ECA8639891536958011 + endpoint: + host: ngl-api-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: FE0186777D17DD57CAE5E3D9531EC8E70F1F452ED777910E96A9F44D889D9684 + endpoint: + host: ngl-api-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-301 + roles: Api + - + publicKey: 642197D9D5B283252BFCBC2FEF8B2EE1A7B3383DCD964D159CBF135CA31DC22B + endpoint: + host: ngl-api-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-401 + roles: Api + - + publicKey: E1640F016401E1A8644614B1707D878992DB01B480B55AEDE0EA1A986067ED79 + endpoint: + host: ngl-api-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-501 + roles: Api + - + publicKey: 0282991F51E91F8994F1B3FD4A7D1CDE39F6B828A5D419150D6E07925CFFD27C + endpoint: + host: ngl-api-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-api-601 + roles: Api peer-node: - - publicKey: FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF - endpoint: - host: ngl-beacon-001.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-001 - roles: 'Peer,Voting' - - publicKey: AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF - endpoint: - host: ngl-beacon-101.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-101 - roles: 'Peer,Voting' - - publicKey: D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0 - endpoint: - host: ngl-beacon-201.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-201 - roles: 'Peer,Voting' - - publicKey: 78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C - endpoint: - host: ngl-beacon-301.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-301 - roles: 'Peer,Voting' - - publicKey: 9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7 - endpoint: - host: ngl-beacon-401.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-401 - roles: 'Peer,Voting' - - publicKey: B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1 - endpoint: - host: ngl-beacon-501.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-501 - roles: 'Peer,Voting' - - publicKey: 9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A - endpoint: - host: ngl-beacon-601.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-601 - roles: 'Peer,Voting' - - publicKey: EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F - endpoint: - host: ngl-beacon-002.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-002 - roles: 'Peer,Voting' - - publicKey: D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775 - endpoint: - host: ngl-beacon-102.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-102 - roles: 'Peer,Voting' - - publicKey: AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0 - endpoint: - host: ngl-beacon-202.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-202 - roles: 'Peer,Voting' - - publicKey: EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395 - endpoint: - host: ngl-beacon-302.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-302 - roles: 'Peer,Voting' - - publicKey: 3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9 - endpoint: - host: ngl-beacon-402.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-402 - roles: 'Peer,Voting' - - publicKey: 47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058 - endpoint: - host: ngl-beacon-502.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-502 - roles: 'Peer,Voting' - - publicKey: DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD - endpoint: - host: ngl-beacon-602.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-602 - roles: 'Peer,Voting' - - publicKey: 533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217 - endpoint: - host: ngl-beacon-003.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-003 - roles: Peer - - publicKey: DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202 - endpoint: - host: ngl-beacon-004.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-004 - roles: Peer - - publicKey: F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A - endpoint: - host: ngl-beacon-103.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-103 - roles: Peer - - publicKey: 4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A - endpoint: - host: ngl-beacon-104.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-104 - roles: Peer - - publicKey: EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E - endpoint: - host: ngl-beacon-203.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-203 - roles: Peer - - publicKey: 2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B - endpoint: - host: ngl-beacon-204.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-204 - roles: Peer - - publicKey: C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA - endpoint: - host: ngl-beacon-303.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-303 - roles: Peer - - publicKey: 082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB - endpoint: - host: ngl-beacon-304.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-304 - roles: Peer - - publicKey: 11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1 - endpoint: - host: ngl-beacon-403.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-403 - roles: Peer - - publicKey: 66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27 - endpoint: - host: ngl-beacon-404.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-404 - roles: Peer - - publicKey: C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655 - endpoint: - host: ngl-beacon-503.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-503 - roles: Peer - - publicKey: BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07 - endpoint: - host: ngl-beacon-504.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-504 - roles: Peer - - publicKey: 5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A - endpoint: - host: ngl-beacon-603.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-603 - roles: Peer - - publicKey: 00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39 - endpoint: - host: ngl-beacon-604.symbolblockchain.io - port: 7900 - metadata: - name: ngl-beacon-604 - roles: Peer - - publicKey: AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691 - endpoint: - host: ngl-peer-001.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-001 - roles: Peer - - publicKey: 990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822 - endpoint: - host: ngl-peer-301.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-301 - roles: Peer - - publicKey: 1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489 - endpoint: - host: ngl-peer-401.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-401 - roles: Peer - - publicKey: D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510 - endpoint: - host: ngl-peer-601.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-601 - roles: Peer - - publicKey: 92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806 - endpoint: - host: ngl-peer-501.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-501 - roles: Peer - - publicKey: DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D - endpoint: - host: ngl-peer-002.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-002 - roles: 'Peer,Voting' - - publicKey: 7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0 - endpoint: - host: ngl-peer-003.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-003 - roles: 'Peer,Voting' - - publicKey: E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE - endpoint: - host: ngl-peer-004.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-004 - roles: 'Peer,Voting' - - publicKey: FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A - endpoint: - host: ngl-peer-101.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-101 - roles: 'Peer,Voting' - - publicKey: E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD - endpoint: - host: ngl-peer-102.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-102 - roles: 'Peer,Voting' - - publicKey: FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1 - endpoint: - host: ngl-peer-103.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-103 - roles: 'Peer,Voting' - - publicKey: 0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F - endpoint: - host: ngl-peer-201.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-201 - roles: 'Peer,Voting' - - publicKey: ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF - endpoint: - host: ngl-peer-202.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-202 - roles: 'Peer,Voting' - - publicKey: 5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C - endpoint: - host: ngl-peer-302.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-302 - roles: 'Peer,Voting' - - publicKey: 504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB - endpoint: - host: ngl-peer-303.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-303 - roles: 'Peer,Voting' - - publicKey: D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7 - endpoint: - host: ngl-peer-304.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-304 - roles: 'Peer,Voting' - - publicKey: 729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644 - endpoint: - host: ngl-peer-402.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-402 - roles: 'Peer,Voting' - - publicKey: 8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD - endpoint: - host: ngl-peer-403.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-403 - roles: 'Peer,Voting' - - publicKey: 22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D - endpoint: - host: ngl-peer-404.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-404 - roles: 'Peer,Voting' - - publicKey: 00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86 - endpoint: - host: ngl-peer-502.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-502 - roles: 'Peer,Voting' - - publicKey: E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF - endpoint: - host: ngl-peer-503.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-503 - roles: 'Peer,Voting' - - publicKey: 4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2 - endpoint: - host: ngl-peer-504.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-504 - roles: 'Peer,Voting' - - publicKey: 98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170 - endpoint: - host: ngl-peer-602.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-602 - roles: 'Peer,Voting' - - publicKey: 8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2 - endpoint: - host: ngl-peer-603.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-603 - roles: 'Peer,Voting' - - publicKey: 9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85 - endpoint: - host: ngl-peer-604.symbolblockchain.io - port: 7900 - metadata: - name: ngl-peer-604 - roles: 'Peer,Voting' -httpsProxies: - - name: 'https-proxy' - excludeDockerService: true #disabled as default - openPort: 3001 - image: 'steveltn/https-portal:1' - #domains: 'symbol-node.example.com -> http://rest-gateway:3000' - stage: 'production' - webSocket: 'true' - serverNamesHashBucketSize: 128 - + - + publicKey: FA9F3974FE3B15585E6B72672C7D8BEAE27D1EDF6C4752BAFDB8B2FEA601C0CF + endpoint: + host: ngl-beacon-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: AFF16052217A847A6A71B326FEA9073CFF70D07FC5BA9026B3E05FB453C950DF + endpoint: + host: ngl-beacon-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: D237B4C5964183141868F90ABEF557F751FFB973E7CFF59CCC1B00C504E048F0 + endpoint: + host: ngl-beacon-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-201 + roles: 'Peer,Voting' + - + publicKey: 78480D48CC2AA6988E2FD05C884EE0525ACF6DC78766492034EA08CC1ADF788C + endpoint: + host: ngl-beacon-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-301 + roles: 'Peer,Voting' + - + publicKey: 9261DB223A28A3DB05315235DF2186260951B66515B17A6B890BBCE3EE9E3FE7 + endpoint: + host: ngl-beacon-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-401 + roles: 'Peer,Voting' + - + publicKey: B1B60E982CF0DE72584BED82EDCFAF5F187D24B21DECFA814F69605B5DE4A7C1 + endpoint: + host: ngl-beacon-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: 9785B471C23994341159DB2E66853F6B0EAEA1E6E2A838A020965F4B8E29D03A + endpoint: + host: ngl-beacon-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: EA77478068E3266CFA478E39AF1FDCD67EA512381889717AA8B66BFC4D01701F + endpoint: + host: ngl-beacon-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-002 + roles: 'Peer,Voting' + - + publicKey: D5A40927DDCCD657F52F4C53FE682B07FC2E375040E0CAC50D8FE060024BB775 + endpoint: + host: ngl-beacon-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-102 + roles: 'Peer,Voting' + - + publicKey: AF42867433DCAAA560A8A83A923822D55751F360BA385EDF21A932C33F3AEDD0 + endpoint: + host: ngl-beacon-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-202 + roles: 'Peer,Voting' + - + publicKey: EF14DAE981FBD1E697CCD551DB9146B379CA4FD153C84016E7DA7A1930AD2395 + endpoint: + host: ngl-beacon-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-302 + roles: 'Peer,Voting' + - + publicKey: 3F880DE47D4EB16D1871B1DED95F081151C9BF910EF682EDF202E8CA904B0CB9 + endpoint: + host: ngl-beacon-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-402 + roles: 'Peer,Voting' + - + publicKey: 47704C18AC5F0C50A92B3763049EA91D84B17FAC0D86D9A9340AF98E3F610058 + endpoint: + host: ngl-beacon-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-502 + roles: 'Peer,Voting' + - + publicKey: DE26F36D5426EC7B91200CB8C0DB70F4D82CD15F7FAFCE48A2174781D72CE6AD + endpoint: + host: ngl-beacon-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-602 + roles: 'Peer,Voting' + - + publicKey: 533F75316C28E09B652232D1F48468D19EC88AB5125E947873AA3E150E2DD217 + endpoint: + host: ngl-beacon-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-003 + roles: Peer + - + publicKey: DEE480BD3CA0B2E928543F087A28234E565FF6EDBBBC5B961F8302C16ACEB202 + endpoint: + host: ngl-beacon-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-004 + roles: Peer + - + publicKey: F925F965D66E2928DDF2C27BB3AB69781C92D0E414C84AE963A505686C66445A + endpoint: + host: ngl-beacon-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-103 + roles: Peer + - + publicKey: 4D0AAE4583FDA3BA3CFFA00F9C684A701C360E59DDD14EF3992233D20C59585A + endpoint: + host: ngl-beacon-104.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-104 + roles: Peer + - + publicKey: EEA3B0D28CAEF4A6354F65D7D7F4947145D6FD9FF9F36CA87856CB44A7B1531E + endpoint: + host: ngl-beacon-203.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-203 + roles: Peer + - + publicKey: 2D310E377C0CC84A945E8C9CFDB799F7FDE5F88EE07BBF90D5CED2BFCE27445B + endpoint: + host: ngl-beacon-204.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-204 + roles: Peer + - + publicKey: C1BD10D1320BB22F66692AE002129028BEE7D78E3AA991B12525AD5D3E1BE7DA + endpoint: + host: ngl-beacon-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-303 + roles: Peer + - + publicKey: 082F46AEAD35E6C3E443542616F41AAA992389035CAC2DD8807B8321C585E6BB + endpoint: + host: ngl-beacon-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-304 + roles: Peer + - + publicKey: 11D6421BC726D684614038B5A0E48D6723CA7C53CDF3A7F9305582227988B3A1 + endpoint: + host: ngl-beacon-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-403 + roles: Peer + - + publicKey: 66C2A930320B7A00D0A2653588F65967C73222A8356781DD5AB98F9E759AEF27 + endpoint: + host: ngl-beacon-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-404 + roles: Peer + - + publicKey: C08E5DD1539AA29F1408B288550BCBC27BEA447E97E31C5976E58067CD69F655 + endpoint: + host: ngl-beacon-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-503 + roles: Peer + - + publicKey: BADFA53EDBFC6B57511A836057DABAE9FF1669027EC37A5A188CCFB81A033C07 + endpoint: + host: ngl-beacon-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-504 + roles: Peer + - + publicKey: 5A85331AB54F8B296EC69F7ABF05E133907D6B87F658E43D09E5E9F6E7FDFB6A + endpoint: + host: ngl-beacon-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-603 + roles: Peer + - + publicKey: 00FB938646A8A458C55036682AEFAD6733DAEB86DDF19404DEED680FE79B1C39 + endpoint: + host: ngl-beacon-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-beacon-604 + roles: Peer + - + publicKey: AA91F88DF6D80A9FA097E2FD2A6FCC9CC937177FE0D8933D64B16C5C442B2691 + endpoint: + host: ngl-peer-001.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-001 + roles: Peer + - + publicKey: 990B2E1DD730964E62250A7DB1EC2EFCAEE8EE0FA9B2B5368CB4102964C4A822 + endpoint: + host: ngl-peer-301.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 1F39352BDBFDBDE4FAE4C58A51140C0843A1B8EE1D62B4297BCC7F6ECE47F489 + endpoint: + host: ngl-peer-401.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-401 + roles: Peer + - + publicKey: D12440291B4BD458FE6BAFAA67C502A638777462654C59C7070BE0B5215FF510 + endpoint: + host: ngl-peer-601.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-601 + roles: Peer + - + publicKey: 92AD7B4E370A7499F1449C1BA2863C5E484B584B59B148724F5970C6EFD6F806 + endpoint: + host: ngl-peer-501.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-501 + roles: Peer + - + publicKey: DEE184EB07DD52A171AA3381F5E7047AE3B830D2A99B7A9027461EA5CB6B878D + endpoint: + host: ngl-peer-002.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-002 + roles: 'Peer,Voting' + - + publicKey: 7080531438D8E76B732D76ECB936E74AEAAF3F9491A85691791BB41462EC2DD0 + endpoint: + host: ngl-peer-003.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-003 + roles: 'Peer,Voting' + - + publicKey: E4797E4362B7DE5E4EE834DE4EAAA1036B8F035F6A5352FD5BB85664B41633AE + endpoint: + host: ngl-peer-004.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-004 + roles: 'Peer,Voting' + - + publicKey: FEC90947D0AF30CB32BC6018928AA6CEC96ED9861DD0608DAFC69131BFDD971A + endpoint: + host: ngl-peer-101.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: E6C6D041D77590295432EDC5DC8D1019D4F1F0C002C37909EB4837FF03B139CD + endpoint: + host: ngl-peer-102.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-102 + roles: 'Peer,Voting' + - + publicKey: FC8C66547D7C20CD6CBF7F31DC5657247351AF8C12188E56F885FF012431B8C1 + endpoint: + host: ngl-peer-103.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-103 + roles: 'Peer,Voting' + - + publicKey: 0E8D31F20B4119D8AE8176970727A37247764CCCE966C72A5809685717FDEA0F + endpoint: + host: ngl-peer-201.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-201 + roles: 'Peer,Voting' + - + publicKey: ABCB18959666D248D8B3677D6E673F3EB7A217DEFC5C31B4EDAEB5D111321DDF + endpoint: + host: ngl-peer-202.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 5F32F1AAE8934112A9627EFF43414D9E5DA93CFDB5B5149864FBF76BC2EAA09C + endpoint: + host: ngl-peer-302.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: 504699E3C142DD465C5B46BCD7F43ABE232741F4AD82DFB66808E2A338B77EEB + endpoint: + host: ngl-peer-303.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-303 + roles: 'Peer,Voting' + - + publicKey: D2C9A5ECDF0FFBDAC5F9D54EDE06848450798086206C3B5E8D9C7737AC5BF4E7 + endpoint: + host: ngl-peer-304.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-304 + roles: 'Peer,Voting' + - + publicKey: 729073C51675055556F67BC1C4FD065A12ABDEEBB9455B835382BEA701B6B644 + endpoint: + host: ngl-peer-402.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-402 + roles: 'Peer,Voting' + - + publicKey: 8C63F371ECBEC388A14117662F3CB7456D5EA7449779D20DDC259F084203B9DD + endpoint: + host: ngl-peer-403.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-403 + roles: 'Peer,Voting' + - + publicKey: 22719E8A14770A076A81A3BD9A02847E0E198AA0D8E8D8E7CC0B359CA80CD73D + endpoint: + host: ngl-peer-404.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-404 + roles: 'Peer,Voting' + - + publicKey: 00794D10A9BDEC3E431A8165782D59D54A3EDA682FC50EA31B03BE46E3508D86 + endpoint: + host: ngl-peer-502.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-502 + roles: 'Peer,Voting' + - + publicKey: E6051F40218A770C56B170F27E2C031B61C19EB7EAF6D17CEE7854D3A3F264BF + endpoint: + host: ngl-peer-503.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-503 + roles: 'Peer,Voting' + - + publicKey: 4EF71A6C97ADD6A2C07568C38130A7CD7768F3E0F4E5E651A72119DDFF1F74A2 + endpoint: + host: ngl-peer-504.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-504 + roles: 'Peer,Voting' + - + publicKey: 98ECC6FFF03B4AB7C687A27C0DB120E3B0ECDFEAFECC54E10D8AA59409890170 + endpoint: + host: ngl-peer-602.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-602 + roles: 'Peer,Voting' + - + publicKey: 8EA3F1718C0C8DF68FB3B53702C8B3C44FEB88FA7018CAF0C52D163974CAECD2 + endpoint: + host: ngl-peer-603.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-603 + roles: 'Peer,Voting' + - + publicKey: 9C59D2235888E6FE638A9F4E3F6977C230836A9902929F1884220CF2F1A40B85 + endpoint: + host: ngl-peer-604.symbolblockchain.io + port: 7900 + metadata: + name: ngl-peer-604 + roles: 'Peer,Voting' inflation: starting-at-height-2: 0 starting-at-height-5760: 191997042 diff --git a/presets/shared.yml b/presets/shared.yml index 018e2b993..bb32778f7 100644 --- a/presets/shared.yml +++ b/presets/shared.yml @@ -71,6 +71,7 @@ symbolWalletImage: symbolplatform/symbol-desktop-wallet:1.0.1 symbolFaucetImage: symbolplatform/symbol-faucet:1.0.1-alpha symbolAgentImage: symbolplatform/symbol-node-rewards-agent:2.0.0 mongoImage: mongo:4.4.3-bionic +httpsPortalImage: steveltn/https-portal:1 mongoComposeRunParam: --wiredTigerCacheSizeGB 2 logLevel: 'Info' # brokerLogLevel: 'Info' @@ -215,7 +216,8 @@ maxSubscriptions: 300 restExtensions: 'accountLink, aggregate, lockHash, lockSecret, mosaic, metadata, multisig, namespace, receipts, restrictions, transfer, cmc' restDeploymentTool: symbol-bootstrap restProtocol: HTTP -restSSLKeyPath: '' -restSSLCertificatePath: '' +restSSLPath: '/symbol-workdir' +restSSLKeyFileName: 'restSSL.key' +restSSLCertificateFileName: 'restSSL.crt' restSSLKeyBase64: '' restSSLCertificateBase64: '' diff --git a/presets/testnet/assembly-api.yml b/presets/testnet/assembly-api.yml index 0c52118cd..8c4bb5755 100644 --- a/presets/testnet/assembly-api.yml +++ b/presets/testnet/assembly-api.yml @@ -20,3 +20,11 @@ gateways: databaseHost: 'db' openPort: true ipv4_address: 172.20.0.25 +httpsProxies: + - name: 'https-proxy' + excludeDockerService: true #disabled as default + openPort: 3001 + #domains: 'symbol-node.example.com -> http://rest-gateway:3000' + stage: 'production' + webSocket: 'true' + serverNamesHashBucketSize: 128 diff --git a/presets/testnet/assembly-dual.yml b/presets/testnet/assembly-dual.yml index 6ec842b8b..68663fba6 100644 --- a/presets/testnet/assembly-dual.yml +++ b/presets/testnet/assembly-dual.yml @@ -20,3 +20,11 @@ gateways: databaseHost: 'db' openPort: true ipv4_address: 172.20.0.25 +httpsProxies: + - name: 'https-proxy' + excludeDockerService: true #disabled as default + openPort: 3001 + #domains: 'symbol-node.example.com -> http://rest-gateway:3000' + stage: 'production' + webSocket: 'true' + serverNamesHashBucketSize: 128 diff --git a/presets/testnet/network.yml b/presets/testnet/network.yml index dc5d70c77..c3749f6b9 100644 --- a/presets/testnet/network.yml +++ b/presets/testnet/network.yml @@ -28,7 +28,7 @@ importanceGrouping: 180 votingSetGrouping: 720 votingKeyDesiredLifetime: 720 votingKeyDesiredFutureLifetime: 120 -lastKnownNetworkEpoch: 365 +lastKnownNetworkEpoch: 387 minVotingKeyLifetime: 28 maxVotingKeyLifetime: 720 stepDuration: 4m @@ -69,192 +69,207 @@ knownRestGateways: - 'http://ngl-api-101.testnet.symboldev.network:3000' knownPeers: api-node: - - publicKey: 1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44 - endpoint: - host: ngl-dual-501.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-501 - roles: 'Api,Peer,Voting' - - publicKey: 41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7 - endpoint: - host: ngl-dual-601.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-601 - roles: 'Api,Peer,Voting' - - publicKey: E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78 - endpoint: - host: ngl-dual-001.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-001 - roles: 'Api,Peer' - - publicKey: C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079 - endpoint: - host: ngl-dual-101.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-101 - roles: 'Api,Peer' - - publicKey: C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8 - endpoint: - host: ngl-dual-201.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-201 - roles: 'Api,Peer' - - publicKey: 4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C - endpoint: - host: ngl-dual-301.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-301 - roles: 'Api,Peer' - - publicKey: EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089 - endpoint: - host: ngl-dual-401.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-401 - roles: 'Api,Peer' - - publicKey: 093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142 - endpoint: - host: ngl-dual-502.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-502 - roles: 'Api,Peer' - - publicKey: 53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197 - endpoint: - host: ngl-dual-602.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-dual-602 - roles: 'Api,Peer' - - publicKey: 3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6 - endpoint: - host: ngl-api-001.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-api-001 - roles: Api - - publicKey: 904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F - endpoint: - host: ngl-api-101.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-api-101 - roles: Api + - + publicKey: 1B8491EE121B865E733A0AFC2B0B5A0C762B57A7CDDDBDE6608943EAE135BE44 + endpoint: + host: ngl-dual-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-501 + roles: 'Api,Peer,Voting' + - + publicKey: 41F38D9C02F7D3D460A4CB0311E3D6E67CB063351434A6A00BB6F7AE64CD4FD7 + endpoint: + host: ngl-dual-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-601 + roles: 'Api,Peer,Voting' + - + publicKey: E3FC28889BDE31406465167F1D9D6A16DCA1FF67A3BABFA5E5A8596478848F78 + endpoint: + host: ngl-dual-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-001 + roles: 'Api,Peer' + - + publicKey: C4348215B4C417D3E4B52ACAA3D370D29DE3A5F482CAED3C9F1BE257DD2B4079 + endpoint: + host: ngl-dual-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-101 + roles: 'Api,Peer' + - + publicKey: C084A7B93E7B2B04A95328A39FD0851086BEE4389987654315F02F4DE32634F8 + endpoint: + host: ngl-dual-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-201 + roles: 'Api,Peer' + - + publicKey: 4AD462EFDB312769AB0F146E287C4216E0858992F8181B32A232EDF94E4D4A7C + endpoint: + host: ngl-dual-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-301 + roles: 'Api,Peer' + - + publicKey: EBB821CFAE5B8FBE76FAD81D4A6A2135EB6E2603E083AE9A726132B6AE8A1089 + endpoint: + host: ngl-dual-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-401 + roles: 'Api,Peer' + - + publicKey: 093894ECBD487A2601E9DFEF100C40238F39EA29E9DF2DB244BFD4F3E7B64142 + endpoint: + host: ngl-dual-502.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-502 + roles: 'Api,Peer' + - + publicKey: 53100549CE67E4B94867B461DC489747862A0CB34ADA701C6A974134F1DCC197 + endpoint: + host: ngl-dual-602.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-dual-602 + roles: 'Api,Peer' + - + publicKey: 3BD4CECB2C82DE809CE6AD285ECF8687B4594EAE7D9220C2064E56812977EAE6 + endpoint: + host: ngl-api-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-001 + roles: Api + - + publicKey: 904303E0DAF19BA69CD6A1AB4CA3E2E80525BD9D814342B67C850A0CBB3ECC0F + endpoint: + host: ngl-api-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-api-101 + roles: Api peer-node: - - publicKey: 3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F - endpoint: - host: ngl-beacon-501.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-beacon-501 - roles: 'Peer,Voting' - - publicKey: CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435 - endpoint: - host: ngl-beacon-601.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-beacon-601 - roles: 'Peer,Voting' - - publicKey: 5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D - endpoint: - host: ngl-beacon-001.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-beacon-001 - roles: 'Peer,Voting' - - publicKey: 3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1 - endpoint: - host: ngl-beacon-101.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-beacon-101 - roles: 'Peer,Voting' - - publicKey: A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8 - endpoint: - host: ngl-beacon-401.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-beacon-401 - roles: Peer - - publicKey: 723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C - endpoint: - host: ngl-peer-201.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-201 - roles: Peer - - publicKey: DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837 - endpoint: - host: ngl-peer-301.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-301 - roles: Peer - - publicKey: 22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11 - endpoint: - host: ngl-peer-001.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-001 - roles: 'Peer,Voting' - - publicKey: 78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE - endpoint: - host: ngl-peer-101.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-101 - roles: 'Peer,Voting' - - publicKey: BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824 - endpoint: - host: ngl-peer-202.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-202 - roles: 'Peer,Voting' - - publicKey: 356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C - endpoint: - host: ngl-peer-302.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-302 - roles: 'Peer,Voting' - - publicKey: FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB - endpoint: - host: ngl-peer-401.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-401 - roles: 'Peer,Voting' - - publicKey: FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE - endpoint: - host: ngl-peer-501.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-501 - roles: 'Peer,Voting' - - publicKey: 2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732 - endpoint: - host: ngl-peer-601.testnet.symboldev.network - port: 7900 - metadata: - name: ngl-peer-601 - roles: 'Peer,Voting' -httpsProxies: - - name: 'https-proxy' - excludeDockerService: true #disabled as default - openPort: 3001 - image: 'steveltn/https-portal:1' - #domains: 'symbol-node.example.com -> http://rest-gateway:3000' - stage: 'production' - webSocket: 'true' - serverNamesHashBucketSize: 128 - + - + publicKey: 3CA5B729F46A56928C4971674B641C9535B93B560FC789F1134314786FC5766F + endpoint: + host: ngl-beacon-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-501 + roles: 'Peer,Voting' + - + publicKey: CFC25E8E5C7348C075B8189BD2FEF16E9AE26A1E4814A1002B562B95F5538435 + endpoint: + host: ngl-beacon-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-601 + roles: 'Peer,Voting' + - + publicKey: 5E5BF270398818DC58107C599238D00247DA33446BC1CE334CAD5ED44057184D + endpoint: + host: ngl-beacon-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-001 + roles: 'Peer,Voting' + - + publicKey: 3BE809A65B98E8AF7E5835A9C12F90B29BEDFFFF97E11C1160D8136F15B66AD1 + endpoint: + host: ngl-beacon-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-101 + roles: 'Peer,Voting' + - + publicKey: A33EF3ED8CFBF16C2C3468FCAEE78B36F6F0E737820CE9F48D349309515316F8 + endpoint: + host: ngl-beacon-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-beacon-401 + roles: Peer + - + publicKey: 723C4D540D0796C998D62258DF16AEE8D55A403F716211DEAB479FCE18640B2C + endpoint: + host: ngl-peer-201.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-201 + roles: Peer + - + publicKey: DC7A90D0676DB3A2D963768276F606AF76541A59588B23C6C6B48D98E0AC3837 + endpoint: + host: ngl-peer-301.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-301 + roles: Peer + - + publicKey: 22F6D59D56E17619B8F8B7323A500693892092268122AF5E2A02F6EE29FA2F11 + endpoint: + host: ngl-peer-001.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-001 + roles: 'Peer,Voting' + - + publicKey: 78EFF533B504F49054F8CACEA9E5751E88EDCBBB057DE7410161B9398FEB9FCE + endpoint: + host: ngl-peer-101.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-101 + roles: 'Peer,Voting' + - + publicKey: BA8CA590E44FE53FAAF8E98ED6E98A53C5E911CE2E6D0ACCAB22A979DA151824 + endpoint: + host: ngl-peer-202.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-202 + roles: 'Peer,Voting' + - + publicKey: 356854C754039984F94C37C26CF58CD282AC3BCAC99F9549367702823A50D37C + endpoint: + host: ngl-peer-302.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-302 + roles: 'Peer,Voting' + - + publicKey: FE5D4350784BF72E9D36B6E7BE7BB8F3DF26D501614BB707A4C0DFB8DB541BEB + endpoint: + host: ngl-peer-401.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-401 + roles: 'Peer,Voting' + - + publicKey: FB1B701426A29A22A0711E351117AAFB9449B69CD0D6F310663DED02CD29F5CE + endpoint: + host: ngl-peer-501.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-501 + roles: 'Peer,Voting' + - + publicKey: 2489946E49B03D9BE040E3FD42FEBC705D001A746BD25399E2796D615B35B732 + endpoint: + host: ngl-peer-601.testnet.symboldev.network + port: 7900 + metadata: + name: ngl-peer-601 + roles: 'Peer,Voting' inflation: starting-at-height-2: 0 starting-at-height-5760: 191997042 diff --git a/src/commands/wizard.ts b/src/commands/wizard.ts index e30db102c..b95d008ce 100644 --- a/src/commands/wizard.ts +++ b/src/commands/wizard.ts @@ -187,7 +187,6 @@ export default class Wizard extends Command { console.log(); const httpsOption: HttpsOption = await this.resolveHttpsOptions(); - let httpsProxies; const symbolHostNameRequired = httpsOption !== HttpsOption.None; const host = await Wizard.resolveHost( @@ -200,7 +199,6 @@ export default class Wizard extends Command { let gateways; if (httpsOption === HttpsOption.Native) { - // TODO ask keys and certs (file path or base64 encoded) const restSSLKeyBase64 = await Wizard.resolveRestSSLKeyAsBase64(); const restSSLCertificateBase64 = await Wizard.resolveRestSSLCertAsBase64(); gateways = [ @@ -211,12 +209,9 @@ export default class Wizard extends Command { }, ]; } else if (httpsOption === HttpsOption.Automatic) { - // Build httpProxies config here or alter - httpsProxies = [ + gateways = [ { - excludeDockerService: false, - domains: `${host} -> http://rest-gateway:3000`, - stage: 'production', + httpsProxy: true, }, ]; } else { @@ -246,7 +241,6 @@ export default class Wizard extends Command { ], ...(gateways ? { gateways } : {}), - ...(httpsProxies ? { httpsProxies } : {}), }; const defaultParams = ConfigService.defaultParams; @@ -446,11 +440,13 @@ export default class Wizard extends Command { default: PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT, choices: [ { - name: 'PROMPT_MAIN: Bootstrap may ask for the Main private key when doing certificates upgrades. Other keys are encrypted. Recommended for Supernodes.', + name: + 'PROMPT_MAIN: Bootstrap may ask for the Main private key when doing certificates upgrades. Other keys are encrypted. Recommended for Supernodes.', value: PrivateKeySecurityMode.PROMPT_MAIN, }, { - name: 'PROMPT_MAIN_TRANSPORT: Bootstrap may ask for the Main and Transport private keys when regenerating certificates and agent configuration. Other keys are encrypted. Recommended for regular nodes', + name: + 'PROMPT_MAIN_TRANSPORT: Bootstrap may ask for the Main and Transport private keys when regenerating certificates and agent configuration. Other keys are encrypted. Recommended for regular nodes', value: PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT, }, { name: 'ENCRYPT: All keys are encrypted, only password would be asked', value: PrivateKeySecurityMode.ENCRYPT }, @@ -586,10 +582,9 @@ export default class Wizard extends Command { if (input.length > 50) { return `Input (${input.length}) is larger than 50`; } - const valid = - /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$|^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$|^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/.test( - input, - ); + const valid = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$|^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$|^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/.test( + input, + ); return valid ? true : `It's not a valid IP or hostname`; } diff --git a/src/model/ConfigPreset.ts b/src/model/ConfigPreset.ts index d067c3739..9ed5b1a40 100644 --- a/src/model/ConfigPreset.ts +++ b/src/model/ConfigPreset.ts @@ -318,10 +318,10 @@ export interface GatewayConfigPreset { restDeploymentTool: string; restDeploymentToolVersion?: string; // default is dynamic, current bootstrap version restDeploymentToolLastUpdatedDate?: string; // default is dynamic, current datetime - restProtocol?: string; - restSSLKeyPath?: string; // TODO think about this should this be static? - restSSLCertificatePath?: string; // TODO think about this should this be static? - + restProtocol: string; + restSSLPath: string; + restSSLKeyFileName: string; + restSSLCertificateFileName: string; restSSLKeyBase64?: string; restSSLCertificateBase64?: string; } @@ -333,10 +333,10 @@ export interface GatewayPreset extends DockerServicePreset, Partial { + return `${fromDomain} -> ${toDomain}`; + }; + const resolveService = async ( servicePreset: DockerServicePreset, rawService: DockerComposeService, @@ -293,6 +297,32 @@ export class ComposeService { ...n.compose, }), ); + if (n.httpsProxy) { + if (presetData.httpsProxies?.length) { + if (presetData.nodes?.length && presetData.nodes[0].host) { + const httpsProxyPreset = presetData.httpsProxies[0]; + httpsProxyPreset.excludeDockerService = false; + const restGatewayDomains = resolveHttpsProxyDomains( + presetData.nodes[0].host, + `http://${n.name}:${internalPort}`, + ); + if (httpsProxyPreset.domains) { + // domains already defined + if (httpsProxyPreset.domains.indexOf(n.name) < 0) { + // if rest-gateway not in the domains then add it + httpsProxyPreset.domains += ',' + restGatewayDomains; + } + } else { + httpsProxyPreset.domains = restGatewayDomains; + } + if (typeof n.httpsProxy === 'number' && httpsProxyPreset.openPort === 3001) { + httpsProxyPreset.openPort = n.httpsProxy; + } + } else { + throw new Error(`HTTPS on ${n.name} is enabled, 'host' property must be set to a valid DNS record.`); + } + } + } }), ); @@ -301,12 +331,13 @@ export class ComposeService { .filter((d) => !d.excludeDockerService) .map(async (n) => { const internalPort = 443; + const volumes = [vol(`../${targetGatewaysFolder}/https-proxy`, nodeWorkingDirectory, false)]; services.push( await resolveService(n, { container_name: n.name, // user, // TODO fix the user permissions issue - image: n.image, + image: presetData.httpsPortalImage, stop_signal: 'SIGINT', working_dir: nodeWorkingDirectory, ports: resolvePorts([ diff --git a/src/service/ConfigService.ts b/src/service/ConfigService.ts index 208616b24..8c5229fcc 100644 --- a/src/service/ConfigService.ts +++ b/src/service/ConfigService.ts @@ -693,11 +693,19 @@ export class ConfigService { ['node.crt.pem', 'node.key.pem', 'ca.cert.pem'], ); - //TODO generate ssl key and certificate files if (gatewayPreset.restProtocol === 'HTTPS') { - // TODO check restSSLKeyBase64 and restSSLCertificateBase64 values exists! if not throw error - fs.writeFileSync(join(moveTo, 'restSSL.key.pem'), gatewayPreset.restSSLKeyBase64, 'base64'); - fs.writeFileSync(join(moveTo, 'restSSL.cert.pem'), gatewayPreset.restSSLCertificateBase64, 'base64'); + if (gatewayPreset.restSSLKeyBase64 && gatewayPreset.restSSLCertificateBase64) { + fs.writeFileSync(join(moveTo, presetData.restSSLKeyFileName), gatewayPreset.restSSLKeyBase64, 'base64'); + fs.writeFileSync( + join(moveTo, presetData.restSSLCertificateFileName), + gatewayPreset.restSSLCertificateBase64, + 'base64', + ); + } else { + console.log( + `Native SSL is enabled but restSSLKeyBase64 or restSSLCertificateBase64 properties are not found in the custom-preset file! Either use 'symbol-bootstrap wizard' command to fill those properties in the custom-preset or make sure you copy your SSL key and cert files to target/gateways folder.`, + ); + } } }), ); diff --git a/test/certificates/restSsl.crt b/test/certificates/restSsl.crt new file mode 100644 index 000000000..210657448 --- /dev/null +++ b/test/certificates/restSsl.crt @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICEjCCAXsCAg36MA0GCSqGSIb3DQEBBQUAMIGbMQswCQYDVQQGEwJKUDEOMAwG +A1UECBMFVG9reW8xEDAOBgNVBAcTB0NodW8ta3UxETAPBgNVBAoTCEZyYW5rNERE +MRgwFgYDVQQLEw9XZWJDZXJ0IFN1cHBvcnQxGDAWBgNVBAMTD0ZyYW5rNEREIFdl +YiBDQTEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBmcmFuazRkZC5jb20wHhcNMTIw +ODIyMDUyNjU0WhcNMTcwODIxMDUyNjU0WjBKMQswCQYDVQQGEwJKUDEOMAwGA1UE +CAwFVG9reW8xETAPBgNVBAoMCEZyYW5rNEREMRgwFgYDVQQDDA93d3cuZXhhbXBs +ZS5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEAm/xmkHmEQrurE/0re/jeFRLl +8ZPjBop7uLHhnia7lQG/5zDtZIUC3RVpqDSwBuw/NTweGyuP+o8AG98HxqxTBwID +AQABMA0GCSqGSIb3DQEBBQUAA4GBABS2TLuBeTPmcaTaUW/LCB2NYOy8GMdzR1mx +8iBIu2H6/E2tiY3RIevV2OW61qY2/XRQg7YPxx3ffeUugX9F4J/iPnnu1zAxxyBy +2VguKv4SWjRFoRkIfIlHX0qVviMhSlNy2ioFLy7JcPZb+v3ftDGywUqcBiVDoea0 +Hn+GmxZA +-----END CERTIFICATE----- diff --git a/test/certificates/restSsl.key b/test/certificates/restSsl.key new file mode 100644 index 000000000..bc4edabce --- /dev/null +++ b/test/certificates/restSsl.key @@ -0,0 +1,9 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIBOwIBAAJBAJv8ZpB5hEK7qxP9K3v43hUS5fGT4waKe7ix4Z4mu5UBv+cw7WSF +At0Vaag0sAbsPzU8Hhsrj/qPABvfB8asUwcCAwEAAQJAG0r3ezH35WFG1tGGaUOr +QA61cyaII53ZdgCR1IU8bx7AUevmkFtBf+aqMWusWVOWJvGu2r5VpHVAIl8nF6DS +kQIhAMjEJ3zVYa2/Mo4ey+iU9J9Vd+WoyXDQD4EEtwmyG1PpAiEAxuZlvhDIbbce +7o5BvOhnCZ2N7kYb1ZC57g3F+cbJyW8CIQCbsDGHBto2qJyFxbAO7uQ8Y0UVHa0J +BO/g900SAcJbcQIgRtEljIShOB8pDjrsQPxmI1BLhnjD1EhRSubwhDw5AFUCIQCN +A24pDtdOHydwtSB5+zFqFLfmVZplQM/g5kb4so70Yw== +-----END RSA PRIVATE KEY----- diff --git a/test/commands/Wizard.test.ts b/test/commands/Wizard.test.ts index a5fd2d67d..27b3b25d2 100644 --- a/test/commands/Wizard.test.ts +++ b/test/commands/Wizard.test.ts @@ -82,6 +82,9 @@ describe('Wizard', () => { '\n', 'EEE3F0EF0AB368B8D7AC194D52A8CCFA2D5050B80B9C76E4D2F4D4BF2CD461C1\n', 'y\n', + StdUtils.keys.down, // resolveHttpsOptions select none down 1/2 + StdUtils.keys.down, // resolveHttpsOptions select none down 2/2 + '\n', 'myhostname\n', 'myfriendlyname\n', '\n', @@ -140,6 +143,67 @@ describe('Wizard', () => { '\n', '\n', '\n', + StdUtils.keys.down, // resolveHttpsOptions select none down 1 + StdUtils.keys.down, // resolveHttpsOptions select none down 2 + '\n', + 'myhostname\n', + 'myfriendlyname\n', + '\n', + 'y\n', + // '\n', + // '\n', + // 'y\n', + ]); + + const customPresetFile = `${testFolder}/wizard-custom.yml`; + const password = '11111'; + await Wizard.execute(BootstrapUtils.resolveRootFolder(), { + customPreset: customPresetFile, + network: Network.mainnet, + noPassword: false, + skipPull: true, + target: `${testFolder}/target`, + password: password, + }); + const expectedCustomPreset: CustomPreset = { + assembly: 'dual', + nodes: [ + { + friendlyName: 'myfriendlyname', + host: 'myhostname', + mainPrivateKey: '0000000000000000000000000000000000000000000000000000000000000001', + remotePrivateKey: '0000000000000000000000000000000000000000000000000000000000000004', + transportPrivateKey: '0000000000000000000000000000000000000000000000000000000000000002', + voting: true, + vrfPrivateKey: '0000000000000000000000000000000000000000000000000000000000000003', + }, + ], + preset: Preset.mainnet, + privateKeySecurityMode: PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT, + }; + const customPreset = BootstrapUtils.loadYaml(customPresetFile, password); + expect(customPreset).deep.eq(expectedCustomPreset); + }); + + it('Enables httpsProxy on rest-gateway', async () => { + const toKey = (prefix: string | number, keySize = 64): string => { + return prefix.toString().padStart(keySize, '0'); + }; + let index = 0; + Wizard.generateAccount = (networkType: NetworkType) => { + return Account.createFromPrivateKey(toKey(++index), networkType); + }; + // assembly + StdUtils.in([ + '\n', + 'y\n', //Are you offline. + '\n', + '\n', + '\n', + '\n', + '\n', + StdUtils.keys.down, // resolveHttpsOptions select Automatic + '\n', 'myhostname\n', 'myfriendlyname\n', '\n', @@ -172,6 +236,79 @@ describe('Wizard', () => { vrfPrivateKey: '0000000000000000000000000000000000000000000000000000000000000003', }, ], + gateways: [ + { + httpsProxy: true, + }, + ], + preset: Preset.mainnet, + privateKeySecurityMode: PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT, + }; + const customPreset = BootstrapUtils.loadYaml(customPresetFile, password); + expect(customPreset).deep.eq(expectedCustomPreset); + }); + + it('Enables native SSL support on rest-gateway', async () => { + const toKey = (prefix: string | number, keySize = 64): string => { + return prefix.toString().padStart(keySize, '0'); + }; + let index = 0; + Wizard.generateAccount = (networkType: NetworkType) => { + return Account.createFromPrivateKey(toKey(++index), networkType); + }; + // assembly + StdUtils.in([ + '\n', + 'y\n', //Are you offline. + '\n', + '\n', + '\n', + '\n', + '\n', + '\n', // resolveHttpsOptions select Native + 'myhostname\n', + './test/certificates/restSsl.key\n', + './test/certificates/restSsl.crt\n', + 'myfriendlyname\n', + '\n', + 'y\n', + // '\n', + // '\n', + // 'y\n', + ]); + + const customPresetFile = `${testFolder}/wizard-custom.yml`; + const password = '11111'; + await Wizard.execute(BootstrapUtils.resolveRootFolder(), { + customPreset: customPresetFile, + network: Network.mainnet, + noPassword: false, + skipPull: true, + target: `${testFolder}/target`, + password: password, + }); + const expectedCustomPreset: CustomPreset = { + assembly: 'dual', + nodes: [ + { + friendlyName: 'myfriendlyname', + host: 'myhostname', + mainPrivateKey: '0000000000000000000000000000000000000000000000000000000000000001', + remotePrivateKey: '0000000000000000000000000000000000000000000000000000000000000004', + transportPrivateKey: '0000000000000000000000000000000000000000000000000000000000000002', + voting: true, + vrfPrivateKey: '0000000000000000000000000000000000000000000000000000000000000003', + }, + ], + gateways: [ + { + restProtocol: 'HTTPS', + restSSLCertificateBase64: + 'LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNFakNDQVhzQ0FnMzZNQTBHQ1NxR1NJYjNEUUVCQlFVQU1JR2JNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0cKQTFVRUNCTUZWRzlyZVc4eEVEQU9CZ05WQkFjVEIwTm9kVzh0YTNVeEVUQVBCZ05WQkFvVENFWnlZVzVyTkVSRQpNUmd3RmdZRFZRUUxFdzlYWldKRFpYSjBJRk4xY0hCdmNuUXhHREFXQmdOVkJBTVREMFp5WVc1ck5FUkVJRmRsCllpQkRRVEVqTUNFR0NTcUdTSWIzRFFFSkFSWVVjM1Z3Y0c5eWRFQm1jbUZ1YXpSa1pDNWpiMjB3SGhjTk1USXcKT0RJeU1EVXlOalUwV2hjTk1UY3dPREl4TURVeU5qVTBXakJLTVFzd0NRWURWUVFHRXdKS1VERU9NQXdHQTFVRQpDQXdGVkc5cmVXOHhFVEFQQmdOVkJBb01DRVp5WVc1ck5FUkVNUmd3RmdZRFZRUUREQTkzZDNjdVpYaGhiWEJzClpTNWpiMjB3WERBTkJna3Foa2lHOXcwQkFRRUZBQU5MQURCSUFrRUFtL3hta0htRVFydXJFLzByZS9qZUZSTGwKOFpQakJvcDd1TEhobmlhN2xRRy81ekR0WklVQzNSVnBxRFN3QnV3L05Ud2VHeXVQK284QUc5OEh4cXhUQndJRApBUUFCTUEwR0NTcUdTSWIzRFFFQkJRVUFBNEdCQUJTMlRMdUJlVFBtY2FUYVVXL0xDQjJOWU95OEdNZHpSMW14CjhpQkl1Mkg2L0UydGlZM1JJZXZWMk9XNjFxWTIvWFJRZzdZUHh4M2ZmZVV1Z1g5RjRKL2lQbm51MXpBeHh5QnkKMlZndUt2NFNXalJGb1JrSWZJbEhYMHFWdmlNaFNsTnkyaW9GTHk3SmNQWmIrdjNmdERHeXdVcWNCaVZEb2VhMApIbitHbXhaQQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==', + restSSLKeyBase64: + 'LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlCT3dJQkFBSkJBSnY4WnBCNWhFSzdxeFA5SzN2NDNoVVM1ZkdUNHdhS2U3aXg0WjRtdTVVQnYrY3c3V1NGCkF0MFZhYWcwc0Fic1B6VThIaHNyai9xUEFCdmZCOGFzVXdjQ0F3RUFBUUpBRzByM2V6SDM1V0ZHMXRHR2FVT3IKUUE2MWN5YUlJNTNaZGdDUjFJVThieDdBVWV2bWtGdEJmK2FxTVd1c1dWT1dKdkd1MnI1VnBIVkFJbDhuRjZEUwprUUloQU1qRUozelZZYTIvTW80ZXkraVU5SjlWZCtXb3lYRFFENEVFdHdteUcxUHBBaUVBeHVabHZoREliYmNlCjdvNUJ2T2huQ1oyTjdrWWIxWkM1N2czRitjYkp5VzhDSVFDYnNER0hCdG8ycUp5RnhiQU83dVE4WTBVVkhhMEoKQk8vZzkwMFNBY0piY1FJZ1J0RWxqSVNoT0I4cERqcnNRUHhtSTFCTGhuakQxRWhSU3Vid2hEdzVBRlVDSVFDTgpBMjRwRHRkT0h5ZHd0U0I1K3pGcUZMZm1WWnBsUU0vZzVrYjRzbzcwWXc9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=', + }, + ], preset: Preset.mainnet, privateKeySecurityMode: PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT, }; diff --git a/test/composes/expected-testnet-httpsproxy-compose.yml b/test/composes/expected-testnet-httpsproxy-compose.yml new file mode 100644 index 000000000..10fe67a57 --- /dev/null +++ b/test/composes/expected-testnet-httpsproxy-compose.yml @@ -0,0 +1,88 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + depends_on: + - db + - broker + networks: + default: + aliases: + - symbol-node-2.rockbear.io + hostname: symbol-node-2.rockbear.io + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3000:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 + https-proxy: + container_name: https-proxy + image: 'steveltn/https-portal:1' + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '80:80' + - '3001:443' + environment: + DOMAINS: 'symbol-node-2.rockbear.io -> http://rest-gateway:3000' + WEBSOCKET: 'true' + STAGE: production + SERVER_NAMES_HASH_BUCKET_SIZE: 128 + restart: 'on-failure:2' + volumes: + - '../gateways/https-proxy:/symbol-workdir:rw' + depends_on: + - rest-gateway +networks: + default: + ipam: + config: + - subnet: 172.20.0.0/24 diff --git a/test/reports/bootstrap-voting/rest-gateway-0-rest.json b/test/reports/bootstrap-voting/rest-gateway-0-rest.json index 7ece67cf8..d6aa3c921 100644 --- a/test/reports/bootstrap-voting/rest-gateway-0-rest.json +++ b/test/reports/bootstrap-voting/rest-gateway-0-rest.json @@ -4,6 +4,9 @@ "description": "catapult development network" }, "port": 3000, + "protocol": "HTTP", + "sslKeyPath": "/symbol-workdir/restSSL.key", + "sslCertificatePath": "/symbol-workdir/restSSL.crt", "crossDomain": { "allowedHosts": [ "*" @@ -88,4 +91,4 @@ "deploymentToolVersion": "abc", "lastUpdatedDate": "2021-05-23" } -} +} \ No newline at end of file diff --git a/test/reports/mainnet-dual-voting/rest-gateway-rest.json b/test/reports/mainnet-dual-voting/rest-gateway-rest.json index 060614d72..0b52f7034 100644 --- a/test/reports/mainnet-dual-voting/rest-gateway-rest.json +++ b/test/reports/mainnet-dual-voting/rest-gateway-rest.json @@ -4,6 +4,9 @@ "description": "catapult public main network" }, "port": 3000, + "protocol": "HTTP", + "sslKeyPath": "/symbol-workdir/restSSL.key", + "sslCertificatePath": "/symbol-workdir/restSSL.crt", "crossDomain": { "allowedHosts": [ "*" @@ -89,4 +92,4 @@ "deploymentToolVersion": "abc", "lastUpdatedDate": "2021-05-23" } -} +} \ No newline at end of file diff --git a/test/reports/mainnet-dual/rest-gateway-rest.json b/test/reports/mainnet-dual/rest-gateway-rest.json index 060614d72..0b52f7034 100644 --- a/test/reports/mainnet-dual/rest-gateway-rest.json +++ b/test/reports/mainnet-dual/rest-gateway-rest.json @@ -4,6 +4,9 @@ "description": "catapult public main network" }, "port": 3000, + "protocol": "HTTP", + "sslKeyPath": "/symbol-workdir/restSSL.key", + "sslCertificatePath": "/symbol-workdir/restSSL.crt", "crossDomain": { "allowedHosts": [ "*" @@ -89,4 +92,4 @@ "deploymentToolVersion": "abc", "lastUpdatedDate": "2021-05-23" } -} +} \ No newline at end of file diff --git a/test/reports/testnet-api/rest-gateway-rest.json b/test/reports/testnet-api/rest-gateway-rest.json index d01383936..27907d7c4 100644 --- a/test/reports/testnet-api/rest-gateway-rest.json +++ b/test/reports/testnet-api/rest-gateway-rest.json @@ -4,6 +4,9 @@ "description": "catapult public test network" }, "port": 3000, + "protocol": "HTTP", + "sslKeyPath": "/symbol-workdir/restSSL.key", + "sslCertificatePath": "/symbol-workdir/restSSL.crt", "crossDomain": { "allowedHosts": [ "*" @@ -89,4 +92,4 @@ "deploymentToolVersion": "ABC", "lastUpdatedDate": "2021-05-23" } -} +} \ No newline at end of file diff --git a/test/reports/testnet-dual-voting/rest-gateway-rest.json b/test/reports/testnet-dual-voting/rest-gateway-rest.json index 8cbda7298..55bd66777 100644 --- a/test/reports/testnet-dual-voting/rest-gateway-rest.json +++ b/test/reports/testnet-dual-voting/rest-gateway-rest.json @@ -4,6 +4,9 @@ "description": "catapult public test network" }, "port": 3000, + "protocol": "HTTP", + "sslKeyPath": "/symbol-workdir/restSSL.key", + "sslCertificatePath": "/symbol-workdir/restSSL.crt", "crossDomain": { "allowedHosts": [ "*" @@ -89,4 +92,4 @@ "deploymentToolVersion": "abc", "lastUpdatedDate": "2021-05-22" } -} +} \ No newline at end of file diff --git a/test/service/ComposeService.test.ts b/test/service/ComposeService.test.ts index 2a831824b..5c76c0772 100644 --- a/test/service/ComposeService.test.ts +++ b/test/service/ComposeService.test.ts @@ -158,6 +158,20 @@ ${BootstrapUtils.toYaml(dockerCompose)} await assertDockerCompose(params, 'expected-testnet-supernode-compose.yml'); }); + it('Compose testnet httpsProxy', async () => { + const params = { + ...ConfigService.defaultParams, + ...LinkService.defaultParams, + target: 'target/tests/testnet-https-proxy', + password, + customPreset: './test/unit-test-profiles/https-proxy.yml', + reset: false, + preset: Preset.testnet, + assembly: 'dual', + }; + await assertDockerCompose(params, 'expected-testnet-httpsproxy-compose.yml'); + }); + it('Compose testnet dual voting', async () => { const params = { ...ConfigService.defaultParams, diff --git a/test/unit-test-profiles/https-proxy.yml b/test/unit-test-profiles/https-proxy.yml new file mode 100644 index 000000000..55560128d --- /dev/null +++ b/test/unit-test-profiles/https-proxy.yml @@ -0,0 +1,11 @@ +privateKeySecurityMode: PROMPT_MAIN_TRANSPORT +nodes: + - host: symbol-node-2.rockbear.io + voting: false + friendlyName: symbol-node-2.rockbear.io + mainPrivateKey: 36AB6EE63C77C59351C68285C981E2F7E00E0065FC408C67C550F54D2B265B96 + vrfPrivateKey: D7DCF460F26ABABD01E58A3F8AA02CFE6AC3A0DB16522BDD5F396D274620310A + remotePrivateKey: 08CFC6BD0ABADEBF5C41371353BB79D572122C4858EE1135184237F3BF8DFF5B + transportPrivateKey: A88098E203E3CBA75433361EF7F59B767A82CEB9766F7735F9BD6AE1B204021A +gateways: + - httpsProxy: true From a993c7b310880d3445ff2647398695d36444a894 Mon Sep 17 00:00:00 2001 From: fernando Date: Thu, 29 Jul 2021 14:36:14 -0300 Subject: [PATCH 03/10] fixed --upgrade and ssl files when --customPreset is not provided. fixed typo and unit test. improved package.json scripts --- package.json | 2 +- presets/mainnet/network.yml | 2 +- presets/testnet/network.yml | 2 +- src/service/ConfigService.ts | 20 ++++++++++++++++---- test/service/VerifyService.test.ts | 2 +- 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index ae87f19ff..5c98fc3cc 100644 --- a/package.json +++ b/package.json @@ -115,4 +115,4 @@ "start-network": "symbol-bootstrap start -t target/bootstrap-test -u 'current'" }, "types": "lib/index.d.ts" -} \ No newline at end of file +} diff --git a/presets/mainnet/network.yml b/presets/mainnet/network.yml index 401f91648..b299365ff 100644 --- a/presets/mainnet/network.yml +++ b/presets/mainnet/network.yml @@ -30,7 +30,7 @@ minVotingKeyLifetime: 112 maxVotingKeyLifetime: 360 votingKeyDesiredLifetime: 360 votingKeyDesiredFutureLifetime: 60 -lastKnownNetworkEpoch: 268 +lastKnownNetworkEpoch: 271 stepDuration: 5m maxBlockFutureTime: 300ms maxAccountRestrictionValues: 100 diff --git a/presets/testnet/network.yml b/presets/testnet/network.yml index c3749f6b9..f92d885c2 100644 --- a/presets/testnet/network.yml +++ b/presets/testnet/network.yml @@ -28,7 +28,7 @@ importanceGrouping: 180 votingSetGrouping: 720 votingKeyDesiredLifetime: 720 votingKeyDesiredFutureLifetime: 120 -lastKnownNetworkEpoch: 387 +lastKnownNetworkEpoch: 391 minVotingKeyLifetime: 28 maxVotingKeyLifetime: 720 stepDuration: 4m diff --git a/src/service/ConfigService.ts b/src/service/ConfigService.ts index 8c5229fcc..48c9fa4a5 100644 --- a/src/service/ConfigService.ts +++ b/src/service/ConfigService.ts @@ -702,9 +702,18 @@ export class ConfigService { 'base64', ); } else { - console.log( - `Native SSL is enabled but restSSLKeyBase64 or restSSLCertificateBase64 properties are not found in the custom-preset file! Either use 'symbol-bootstrap wizard' command to fill those properties in the custom-preset or make sure you copy your SSL key and cert files to target/gateways folder.`, - ); + if ( + !existsSync(join(moveTo, presetData.restSSLKeyFileName)) && + !existsSync(join(moveTo, presetData.restSSLCertificateFileName)) + ) { + logger.warn( + `Native SSL is enabled but restSSLKeyBase64 or restSSLCertificateBase64 properties are not found in the custom-preset file! Either use 'symbol-bootstrap wizard' command to fill those properties in the custom-preset or make sure you copy your SSL key and cert files to target/gateways folder.`, + ); + } else { + logger.info( + `Native SSL certificates for gateway ${gatewayPreset.name} have been previously provided. Reusing...`, + ); + } } } }), @@ -824,7 +833,10 @@ export class ConfigService { }); (presetData.gateways || []).forEach(({ name }) => { const configFolder = BootstrapUtils.getTargetGatewayFolder(target, false, name); - BootstrapUtils.deleteFolder(configFolder); + BootstrapUtils.deleteFolder(configFolder, [ + join(configFolder, presetData.restSSLKeyFileName), + join(configFolder, presetData.restSSLCertificateFileName), + ]); }); } } diff --git a/test/service/VerifyService.test.ts b/test/service/VerifyService.test.ts index 664dfc4de..9ad7b6486 100644 --- a/test/service/VerifyService.test.ts +++ b/test/service/VerifyService.test.ts @@ -67,7 +67,7 @@ describe('VerifyService', () => { it('VerifyService verify current installation when too old', async () => { const expectedVersions = { node: '18.0.0', - docker: '19.4.0', + docker: '21.4.0', dockerCompose: '1.25.30', }; const service = new VerifyService(BootstrapUtils.resolveRootFolder(), expectedVersions); From 6e1eafb55b22c5da1649ba79417bf5d8f2712c02 Mon Sep 17 00:00:00 2001 From: fernando Date: Mon, 2 Aug 2021 22:41:36 -0300 Subject: [PATCH 04/10] feedback fixes --- .prettierrc.js | 4 ++-- presets/mainnet/network.yml | 2 +- presets/testnet/network.yml | 2 +- src/model/ConfigPreset.ts | 2 +- src/service/ComposeService.ts | 3 --- src/service/ConfigService.ts | 4 ++-- test/reports/bootstrap-voting/rest-gateway-0-rest.json | 2 +- test/reports/mainnet-dual-voting/rest-gateway-rest.json | 2 +- test/reports/mainnet-dual/rest-gateway-rest.json | 2 +- test/reports/testnet-api/rest-gateway-rest.json | 2 +- test/reports/testnet-dual-voting/rest-gateway-rest.json | 2 +- 11 files changed, 12 insertions(+), 15 deletions(-) diff --git a/.prettierrc.js b/.prettierrc.js index 745c62f64..212e486ae 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -16,8 +16,8 @@ module.exports = { semi: true, - trailingComma: 'all', + trailingComma: "all", singleQuote: true, printWidth: 140, - tabWidth: 4, + tabWidth: 4 }; diff --git a/presets/mainnet/network.yml b/presets/mainnet/network.yml index b299365ff..1c7f3ebc0 100644 --- a/presets/mainnet/network.yml +++ b/presets/mainnet/network.yml @@ -30,7 +30,7 @@ minVotingKeyLifetime: 112 maxVotingKeyLifetime: 360 votingKeyDesiredLifetime: 360 votingKeyDesiredFutureLifetime: 60 -lastKnownNetworkEpoch: 271 +lastKnownNetworkEpoch: 279 stepDuration: 5m maxBlockFutureTime: 300ms maxAccountRestrictionValues: 100 diff --git a/presets/testnet/network.yml b/presets/testnet/network.yml index f92d885c2..d2f460137 100644 --- a/presets/testnet/network.yml +++ b/presets/testnet/network.yml @@ -28,7 +28,7 @@ importanceGrouping: 180 votingSetGrouping: 720 votingKeyDesiredLifetime: 720 votingKeyDesiredFutureLifetime: 120 -lastKnownNetworkEpoch: 391 +lastKnownNetworkEpoch: 406 minVotingKeyLifetime: 28 maxVotingKeyLifetime: 720 stepDuration: 4m diff --git a/src/model/ConfigPreset.ts b/src/model/ConfigPreset.ts index 9ed5b1a40..02abd22ff 100644 --- a/src/model/ConfigPreset.ts +++ b/src/model/ConfigPreset.ts @@ -333,7 +333,7 @@ export interface GatewayPreset extends DockerServicePreset, Partial Date: Tue, 3 Aug 2021 11:01:18 -0300 Subject: [PATCH 05/10] Code simplification Removed httpProxy param from gateway, the httpProxies array can handle it. --- presets/mainnet/network.yml | 2 +- presets/testnet/network.yml | 2 +- src/commands/wizard.ts | 53 ++++++++++++++----------- src/model/ConfigPreset.ts | 5 +-- src/service/ComposeService.ts | 43 +++++++------------- test/commands/Wizard.test.ts | 4 +- test/unit-test-profiles/https-proxy.yml | 4 +- 7 files changed, 52 insertions(+), 61 deletions(-) diff --git a/presets/mainnet/network.yml b/presets/mainnet/network.yml index 1c7f3ebc0..66076c69a 100644 --- a/presets/mainnet/network.yml +++ b/presets/mainnet/network.yml @@ -30,7 +30,7 @@ minVotingKeyLifetime: 112 maxVotingKeyLifetime: 360 votingKeyDesiredLifetime: 360 votingKeyDesiredFutureLifetime: 60 -lastKnownNetworkEpoch: 279 +lastKnownNetworkEpoch: 280 stepDuration: 5m maxBlockFutureTime: 300ms maxAccountRestrictionValues: 100 diff --git a/presets/testnet/network.yml b/presets/testnet/network.yml index d2f460137..f368b036a 100644 --- a/presets/testnet/network.yml +++ b/presets/testnet/network.yml @@ -28,7 +28,7 @@ importanceGrouping: 180 votingSetGrouping: 720 votingKeyDesiredLifetime: 720 votingKeyDesiredFutureLifetime: 120 -lastKnownNetworkEpoch: 406 +lastKnownNetworkEpoch: 408 minVotingKeyLifetime: 28 maxVotingKeyLifetime: 720 stepDuration: 4m diff --git a/src/commands/wizard.ts b/src/commands/wizard.ts index b95d008ce..7b091b5a4 100644 --- a/src/commands/wizard.ts +++ b/src/commands/wizard.ts @@ -196,29 +196,35 @@ export default class Wizard extends Command { symbolHostNameRequired, ); - let gateways; - - if (httpsOption === HttpsOption.Native) { - const restSSLKeyBase64 = await Wizard.resolveRestSSLKeyAsBase64(); - const restSSLCertificateBase64 = await Wizard.resolveRestSSLCertAsBase64(); - gateways = [ - { - restProtocol: 'HTTPS', - restSSLKeyBase64, - restSSLCertificateBase64, - }, - ]; - } else if (httpsOption === HttpsOption.Automatic) { - gateways = [ - { - httpsProxy: true, - }, - ]; - } else { - // HttpsOption.None - console.log(`Warning! You've chosen to proceed with http, which is less secure in comparison to https.`); - } + const resolveHttpsCustomPreset = async (): Promise => { + if (httpsOption === HttpsOption.Native) { + const restSSLKeyBase64 = await Wizard.resolveRestSSLKeyAsBase64(); + const restSSLCertificateBase64 = await Wizard.resolveRestSSLCertAsBase64(); + return { + gateways: [ + { + restProtocol: 'HTTPS', + restSSLKeyBase64, + restSSLCertificateBase64, + }, + ], + }; + } else if (httpsOption === HttpsOption.Automatic) { + return { + httpsProxies: [ + { + excludeDockerService: false, + }, + ], + }; + } else { + // HttpsOption.None + console.log(`Warning! You've chosen to proceed with http, which is less secure in comparison to https.`); + return {}; + } + }; + const httpsCustomPreset = await resolveHttpsCustomPreset(); const friendlyName = await Wizard.resolveFriendlyName(host || accounts.main.publicKey.substr(0, 7)); const privateKeySecurityMode = await Wizard.resolvePrivateKeySecurityMode(); const voting = await Wizard.isVoting(); @@ -239,8 +245,7 @@ export default class Wizard extends Command { agentPrivateKey: accounts.agent?.privateKey, }, ], - - ...(gateways ? { gateways } : {}), + ...httpsCustomPreset, }; const defaultParams = ConfigService.defaultParams; diff --git a/src/model/ConfigPreset.ts b/src/model/ConfigPreset.ts index 02abd22ff..fce596b3b 100644 --- a/src/model/ConfigPreset.ts +++ b/src/model/ConfigPreset.ts @@ -318,7 +318,7 @@ export interface GatewayConfigPreset { restDeploymentTool: string; restDeploymentToolVersion?: string; // default is dynamic, current bootstrap version restDeploymentToolLastUpdatedDate?: string; // default is dynamic, current datetime - restProtocol: string; + restProtocol: 'HTTPS' | 'HTTP'; restSSLPath: string; restSSLKeyFileName: string; restSSLCertificateFileName: string; @@ -333,7 +333,6 @@ export interface GatewayPreset extends DockerServicePreset, Partial { explorers?: Partial[]; wallets?: Partial[]; faucets?: Partial[]; - httpsProxies?: HttpsProxyPreset[]; + httpsProxies?: Partial[]; } diff --git a/src/service/ComposeService.ts b/src/service/ComposeService.ts index 6555d9cc6..9fac93db9 100644 --- a/src/service/ComposeService.ts +++ b/src/service/ComposeService.ts @@ -274,12 +274,11 @@ export class ComposeService { } }), ); - + const restInternalPort = 3000; // Move to shared? await Promise.all( (presetData.gateways || []) .filter((d) => !d.excludeDockerService) .map(async (n) => { - const internalPort = 3000; const volumes = [vol(`../${targetGatewaysFolder}/${n.name}`, nodeWorkingDirectory, false)]; services.push( await resolveService(n, { @@ -289,7 +288,7 @@ export class ComposeService { command: 'npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json', stop_signal: 'SIGINT', working_dir: nodeWorkingDirectory, - ports: resolvePorts([{ internalPort: internalPort, openPort: n.openPort }]), + ports: resolvePorts([{ internalPort: restInternalPort, openPort: n.openPort }]), restart: restart, volumes: volumes, depends_on: [n.databaseHost], @@ -297,29 +296,6 @@ export class ComposeService { ...n.compose, }), ); - if (n.httpsProxy) { - if (presetData.httpsProxies?.length) { - if (presetData.nodes?.length && presetData.nodes[0].host) { - const httpsProxyPreset = presetData.httpsProxies[0]; - httpsProxyPreset.excludeDockerService = false; - const restGatewayDomains = resolveHttpsProxyDomains( - presetData.nodes[0].host, - `http://${n.name}:${internalPort}`, - ); - if (httpsProxyPreset.domains) { - // domains already defined - if (httpsProxyPreset.domains.indexOf(n.name) < 0) { - // if rest-gateway not in the domains then add it - httpsProxyPreset.domains += ',' + restGatewayDomains; - } - } else { - httpsProxyPreset.domains = restGatewayDomains; - } - } else { - throw new Error(`HTTPS on ${n.name} is enabled, 'host' property must be set to a valid DNS record.`); - } - } - } }), ); @@ -328,8 +304,19 @@ export class ComposeService { .filter((d) => !d.excludeDockerService) .map(async (n) => { const internalPort = 443; - + const host = n.host || presetData.nodes?.[0]?.host; + if (!host) { + throw new Error( + `HTTPS Proxy ${n.name} is invalid, 'host' property could not be resolved. It must be set to a valid DNS record.`, + ); + } const volumes = [vol(`../${targetGatewaysFolder}/https-proxy`, nodeWorkingDirectory, false)]; + const domains: string | undefined = + n.domains || + presetData.gateways?.map((g) => resolveHttpsProxyDomains(host, `http://${g.name}:${restInternalPort}`))[0]; + if (!domains) { + throw new Error(`HTTPS Proxy ${n.name} is invalid, 'domains' property could not be resolved!`); + } services.push( await resolveService(n, { container_name: n.name, @@ -342,7 +329,7 @@ export class ComposeService { { internalPort: internalPort, openPort: n.openPort }, ]), environment: { - DOMAINS: n.domains, + DOMAINS: domains, WEBSOCKET: n.webSocket, STAGE: n.stage, SERVER_NAMES_HASH_BUCKET_SIZE: n.serverNamesHashBucketSize, diff --git a/test/commands/Wizard.test.ts b/test/commands/Wizard.test.ts index 27b3b25d2..79ba77fff 100644 --- a/test/commands/Wizard.test.ts +++ b/test/commands/Wizard.test.ts @@ -236,9 +236,9 @@ describe('Wizard', () => { vrfPrivateKey: '0000000000000000000000000000000000000000000000000000000000000003', }, ], - gateways: [ + httpsProxies: [ { - httpsProxy: true, + excludeDockerService: false, }, ], preset: Preset.mainnet, diff --git a/test/unit-test-profiles/https-proxy.yml b/test/unit-test-profiles/https-proxy.yml index 55560128d..2141153ac 100644 --- a/test/unit-test-profiles/https-proxy.yml +++ b/test/unit-test-profiles/https-proxy.yml @@ -7,5 +7,5 @@ nodes: vrfPrivateKey: D7DCF460F26ABABD01E58A3F8AA02CFE6AC3A0DB16522BDD5F396D274620310A remotePrivateKey: 08CFC6BD0ABADEBF5C41371353BB79D572122C4858EE1135184237F3BF8DFF5B transportPrivateKey: A88098E203E3CBA75433361EF7F59B767A82CEB9766F7735F9BD6AE1B204021A -gateways: - - httpsProxy: true +httpsProxies: + - excludeDockerService: false From da0df0b0f5be7c5cb6da0972592a32c0553725e3 Mon Sep 17 00:00:00 2001 From: fernando Date: Tue, 3 Aug 2021 12:20:41 -0300 Subject: [PATCH 06/10] Changed port to 3001 in the native. Added native ssl unit compose unit test --- src/commands/wizard.ts | 1 + test/commands/Wizard.test.ts | 12 ++-- .../expected-testnet-native-ssl-compose.yml | 70 +++++++++++++++++++ test/service/ComposeService.test.ts | 14 ++++ test/unit-test-profiles/native-ssl.yml | 16 +++++ 5 files changed, 109 insertions(+), 4 deletions(-) create mode 100644 test/composes/expected-testnet-native-ssl-compose.yml create mode 100644 test/unit-test-profiles/native-ssl.yml diff --git a/src/commands/wizard.ts b/src/commands/wizard.ts index 7b091b5a4..7ab48fbe6 100644 --- a/src/commands/wizard.ts +++ b/src/commands/wizard.ts @@ -204,6 +204,7 @@ export default class Wizard extends Command { gateways: [ { restProtocol: 'HTTPS', + openPort: 3001, restSSLKeyBase64, restSSLCertificateBase64, }, diff --git a/test/commands/Wizard.test.ts b/test/commands/Wizard.test.ts index 79ba77fff..400fde86a 100644 --- a/test/commands/Wizard.test.ts +++ b/test/commands/Wizard.test.ts @@ -224,7 +224,9 @@ describe('Wizard', () => { password: password, }); const expectedCustomPreset: CustomPreset = { + preset: Preset.mainnet, assembly: 'dual', + privateKeySecurityMode: PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT, nodes: [ { friendlyName: 'myfriendlyname', @@ -241,9 +243,8 @@ describe('Wizard', () => { excludeDockerService: false, }, ], - preset: Preset.mainnet, - privateKeySecurityMode: PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT, }; + console.log(BootstrapUtils.toYaml(expectedCustomPreset)); const customPreset = BootstrapUtils.loadYaml(customPresetFile, password); expect(customPreset).deep.eq(expectedCustomPreset); }); @@ -288,7 +289,9 @@ describe('Wizard', () => { password: password, }); const expectedCustomPreset: CustomPreset = { + preset: Preset.mainnet, assembly: 'dual', + privateKeySecurityMode: PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT, nodes: [ { friendlyName: 'myfriendlyname', @@ -303,15 +306,16 @@ describe('Wizard', () => { gateways: [ { restProtocol: 'HTTPS', + openPort: 3001, restSSLCertificateBase64: 'LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNFakNDQVhzQ0FnMzZNQTBHQ1NxR1NJYjNEUUVCQlFVQU1JR2JNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0cKQTFVRUNCTUZWRzlyZVc4eEVEQU9CZ05WQkFjVEIwTm9kVzh0YTNVeEVUQVBCZ05WQkFvVENFWnlZVzVyTkVSRQpNUmd3RmdZRFZRUUxFdzlYWldKRFpYSjBJRk4xY0hCdmNuUXhHREFXQmdOVkJBTVREMFp5WVc1ck5FUkVJRmRsCllpQkRRVEVqTUNFR0NTcUdTSWIzRFFFSkFSWVVjM1Z3Y0c5eWRFQm1jbUZ1YXpSa1pDNWpiMjB3SGhjTk1USXcKT0RJeU1EVXlOalUwV2hjTk1UY3dPREl4TURVeU5qVTBXakJLTVFzd0NRWURWUVFHRXdKS1VERU9NQXdHQTFVRQpDQXdGVkc5cmVXOHhFVEFQQmdOVkJBb01DRVp5WVc1ck5FUkVNUmd3RmdZRFZRUUREQTkzZDNjdVpYaGhiWEJzClpTNWpiMjB3WERBTkJna3Foa2lHOXcwQkFRRUZBQU5MQURCSUFrRUFtL3hta0htRVFydXJFLzByZS9qZUZSTGwKOFpQakJvcDd1TEhobmlhN2xRRy81ekR0WklVQzNSVnBxRFN3QnV3L05Ud2VHeXVQK284QUc5OEh4cXhUQndJRApBUUFCTUEwR0NTcUdTSWIzRFFFQkJRVUFBNEdCQUJTMlRMdUJlVFBtY2FUYVVXL0xDQjJOWU95OEdNZHpSMW14CjhpQkl1Mkg2L0UydGlZM1JJZXZWMk9XNjFxWTIvWFJRZzdZUHh4M2ZmZVV1Z1g5RjRKL2lQbm51MXpBeHh5QnkKMlZndUt2NFNXalJGb1JrSWZJbEhYMHFWdmlNaFNsTnkyaW9GTHk3SmNQWmIrdjNmdERHeXdVcWNCaVZEb2VhMApIbitHbXhaQQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==', restSSLKeyBase64: 'LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlCT3dJQkFBSkJBSnY4WnBCNWhFSzdxeFA5SzN2NDNoVVM1ZkdUNHdhS2U3aXg0WjRtdTVVQnYrY3c3V1NGCkF0MFZhYWcwc0Fic1B6VThIaHNyai9xUEFCdmZCOGFzVXdjQ0F3RUFBUUpBRzByM2V6SDM1V0ZHMXRHR2FVT3IKUUE2MWN5YUlJNTNaZGdDUjFJVThieDdBVWV2bWtGdEJmK2FxTVd1c1dWT1dKdkd1MnI1VnBIVkFJbDhuRjZEUwprUUloQU1qRUozelZZYTIvTW80ZXkraVU5SjlWZCtXb3lYRFFENEVFdHdteUcxUHBBaUVBeHVabHZoREliYmNlCjdvNUJ2T2huQ1oyTjdrWWIxWkM1N2czRitjYkp5VzhDSVFDYnNER0hCdG8ycUp5RnhiQU83dVE4WTBVVkhhMEoKQk8vZzkwMFNBY0piY1FJZ1J0RWxqSVNoT0I4cERqcnNRUHhtSTFCTGhuakQxRWhSU3Vid2hEdzVBRlVDSVFDTgpBMjRwRHRkT0h5ZHd0U0I1K3pGcUZMZm1WWnBsUU0vZzVrYjRzbzcwWXc9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=', }, ], - preset: Preset.mainnet, - privateKeySecurityMode: PrivateKeySecurityMode.PROMPT_MAIN_TRANSPORT, }; + + console.log(BootstrapUtils.toYaml(expectedCustomPreset)); const customPreset = BootstrapUtils.loadYaml(customPresetFile, password); expect(customPreset).deep.eq(expectedCustomPreset); }); diff --git a/test/composes/expected-testnet-native-ssl-compose.yml b/test/composes/expected-testnet-native-ssl-compose.yml new file mode 100644 index 000000000..923b4f0db --- /dev/null +++ b/test/composes/expected-testnet-native-ssl-compose.yml @@ -0,0 +1,70 @@ +version: '2.4' +services: + db: + user: '1000:1000' + environment: + MONGO_INITDB_DATABASE: catapult + container_name: db + image: 'mongo:4.4.3-bionic' + command: mongod --dbpath=/dbdata --bind_ip=db --wiredTigerCacheSizeGB 2 + stop_signal: SIGINT + working_dir: /docker-entrypoint-initdb.d + volumes: + - './mongo:/docker-entrypoint-initdb.d:ro' + - '../databases/db:/dbdata:rw' + node: + user: '1000:1000' + container_name: node + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true + stop_signal: SIGINT + working_dir: /symbol-workdir + restart: 'on-failure:2' + ports: + - '7900:7900' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + depends_on: + - db + - broker + networks: + default: + aliases: + - symbol-node-2.rockbear.io + hostname: symbol-node-2.rockbear.io + broker: + user: '1000:1000' + container_name: broker + image: 'symbolplatform/symbol-server:gcc-10-1.0.1.0' + working_dir: /symbol-workdir + command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data broker server broker NORMAL + stop_signal: SIGINT + restart: 'on-failure:2' + volumes: + - '../nodes/node:/symbol-workdir:rw' + - './server:/symbol-commands:ro' + depends_on: + - db + rest-gateway: + container_name: rest-gateway + user: '1000:1000' + image: 'symbolplatform/symbol-rest:2.3.6' + command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json + stop_signal: SIGINT + working_dir: /symbol-workdir + ports: + - '3001:3000' + restart: 'on-failure:2' + volumes: + - '../gateways/rest-gateway:/symbol-workdir:rw' + depends_on: + - db + networks: + default: + ipv4_address: 172.20.0.25 +networks: + default: + ipam: + config: + - subnet: 172.20.0.0/24 diff --git a/test/service/ComposeService.test.ts b/test/service/ComposeService.test.ts index 5c76c0772..796b8b211 100644 --- a/test/service/ComposeService.test.ts +++ b/test/service/ComposeService.test.ts @@ -172,6 +172,20 @@ ${BootstrapUtils.toYaml(dockerCompose)} await assertDockerCompose(params, 'expected-testnet-httpsproxy-compose.yml'); }); + it('Compose testnet native ssl', async () => { + const params = { + ...ConfigService.defaultParams, + ...LinkService.defaultParams, + target: 'target/tests/testnet-native-ssl', + password, + customPreset: './test/unit-test-profiles/native-ssl.yml', + reset: false, + preset: Preset.testnet, + assembly: 'dual', + }; + await assertDockerCompose(params, 'expected-testnet-native-ssl-compose.yml'); + }); + it('Compose testnet dual voting', async () => { const params = { ...ConfigService.defaultParams, diff --git a/test/unit-test-profiles/native-ssl.yml b/test/unit-test-profiles/native-ssl.yml new file mode 100644 index 000000000..b004bdb24 --- /dev/null +++ b/test/unit-test-profiles/native-ssl.yml @@ -0,0 +1,16 @@ +privateKeySecurityMode: PROMPT_MAIN_TRANSPORT +nodes: + - host: symbol-node-2.rockbear.io + voting: false + friendlyName: symbol-node-2.rockbear.io + mainPrivateKey: 36AB6EE63C77C59351C68285C981E2F7E00E0065FC408C67C550F54D2B265B96 + vrfPrivateKey: D7DCF460F26ABABD01E58A3F8AA02CFE6AC3A0DB16522BDD5F396D274620310A + remotePrivateKey: 08CFC6BD0ABADEBF5C41371353BB79D572122C4858EE1135184237F3BF8DFF5B + transportPrivateKey: A88098E203E3CBA75433361EF7F59B767A82CEB9766F7735F9BD6AE1B204021A +gateways: + - restProtocol: HTTPS + openPort: 3001 + restSSLCertificateBase64: >- + LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNFakNDQVhzQ0FnMzZNQTBHQ1NxR1NJYjNEUUVCQlFVQU1JR2JNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0cKQTFVRUNCTUZWRzlyZVc4eEVEQU9CZ05WQkFjVEIwTm9kVzh0YTNVeEVUQVBCZ05WQkFvVENFWnlZVzVyTkVSRQpNUmd3RmdZRFZRUUxFdzlYWldKRFpYSjBJRk4xY0hCdmNuUXhHREFXQmdOVkJBTVREMFp5WVc1ck5FUkVJRmRsCllpQkRRVEVqTUNFR0NTcUdTSWIzRFFFSkFSWVVjM1Z3Y0c5eWRFQm1jbUZ1YXpSa1pDNWpiMjB3SGhjTk1USXcKT0RJeU1EVXlOalUwV2hjTk1UY3dPREl4TURVeU5qVTBXakJLTVFzd0NRWURWUVFHRXdKS1VERU9NQXdHQTFVRQpDQXdGVkc5cmVXOHhFVEFQQmdOVkJBb01DRVp5WVc1ck5FUkVNUmd3RmdZRFZRUUREQTkzZDNjdVpYaGhiWEJzClpTNWpiMjB3WERBTkJna3Foa2lHOXcwQkFRRUZBQU5MQURCSUFrRUFtL3hta0htRVFydXJFLzByZS9qZUZSTGwKOFpQakJvcDd1TEhobmlhN2xRRy81ekR0WklVQzNSVnBxRFN3QnV3L05Ud2VHeXVQK284QUc5OEh4cXhUQndJRApBUUFCTUEwR0NTcUdTSWIzRFFFQkJRVUFBNEdCQUJTMlRMdUJlVFBtY2FUYVVXL0xDQjJOWU95OEdNZHpSMW14CjhpQkl1Mkg2L0UydGlZM1JJZXZWMk9XNjFxWTIvWFJRZzdZUHh4M2ZmZVV1Z1g5RjRKL2lQbm51MXpBeHh5QnkKMlZndUt2NFNXalJGb1JrSWZJbEhYMHFWdmlNaFNsTnkyaW9GTHk3SmNQWmIrdjNmdERHeXdVcWNCaVZEb2VhMApIbitHbXhaQQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + restSSLKeyBase64: >- + LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlCT3dJQkFBSkJBSnY4WnBCNWhFSzdxeFA5SzN2NDNoVVM1ZkdUNHdhS2U3aXg0WjRtdTVVQnYrY3c3V1NGCkF0MFZhYWcwc0Fic1B6VThIaHNyai9xUEFCdmZCOGFzVXdjQ0F3RUFBUUpBRzByM2V6SDM1V0ZHMXRHR2FVT3IKUUE2MWN5YUlJNTNaZGdDUjFJVThieDdBVWV2bWtGdEJmK2FxTVd1c1dWT1dKdkd1MnI1VnBIVkFJbDhuRjZEUwprUUloQU1qRUozelZZYTIvTW80ZXkraVU5SjlWZCtXb3lYRFFENEVFdHdteUcxUHBBaUVBeHVabHZoREliYmNlCjdvNUJ2T2huQ1oyTjdrWWIxWkM1N2czRitjYkp5VzhDSVFDYnNER0hCdG8ycUp5RnhiQU83dVE4WTBVVkhhMEoKQk8vZzkwMFNBY0piY1FJZ1J0RWxqSVNoT0I4cERqcnNRUHhtSTFCTGhuakQxRWhSU3Vid2hEdzVBRlVDSVFDTgpBMjRwRHRkT0h5ZHd0U0I1K3pGcUZMZm1WWnBsUU0vZzVrYjRzbzcwWXc9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo= From 0c385cbe06bf90a081d60cd1fbc7f8fc7bf26e8a Mon Sep 17 00:00:00 2001 From: Baha Date: Wed, 11 Aug 2021 17:35:04 +0100 Subject: [PATCH 07/10] fix: removed restSSLKeyBase64 and restSSLCertificateBase64 keys from shared.yml as they are optional and bumped docker compose version in tests --- presets/shared.yml | 2 -- test/service/VerifyService.test.ts | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/presets/shared.yml b/presets/shared.yml index bb32778f7..99a5ce510 100644 --- a/presets/shared.yml +++ b/presets/shared.yml @@ -219,5 +219,3 @@ restProtocol: HTTP restSSLPath: '/symbol-workdir' restSSLKeyFileName: 'restSSL.key' restSSLCertificateFileName: 'restSSL.crt' -restSSLKeyBase64: '' -restSSLCertificateBase64: '' diff --git a/test/service/VerifyService.test.ts b/test/service/VerifyService.test.ts index 9ad7b6486..caca7ea80 100644 --- a/test/service/VerifyService.test.ts +++ b/test/service/VerifyService.test.ts @@ -68,7 +68,7 @@ describe('VerifyService', () => { const expectedVersions = { node: '18.0.0', docker: '21.4.0', - dockerCompose: '1.25.30', + dockerCompose: '1.29.5', }; const service = new VerifyService(BootstrapUtils.resolveRootFolder(), expectedVersions); const currentDockerVersion = await service.loadVersionFromCommand('docker --version'); From 417a0fac3169057e3d9c78b9cdd2f61c6e2805a9 Mon Sep 17 00:00:00 2001 From: Baha Date: Fri, 13 Aug 2021 11:04:53 +0100 Subject: [PATCH 08/10] fix: https-proxy volume, user, working_dir removed, updated https-portal image version Currently https-portal only works with the root user but this wouldn't be an issue since we don't mount any volumes any more. symbolbootstrap stop command will actually stop containers and run command will start, unless there is a version upgrade(which will trigger a new container creation) it wouldn't need to re-sign the certificates. So most of the time it will be reusing the same certificates. --- presets/shared.yml | 2 +- src/service/ComposeService.ts | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/presets/shared.yml b/presets/shared.yml index 99a5ce510..9285a945f 100644 --- a/presets/shared.yml +++ b/presets/shared.yml @@ -71,7 +71,7 @@ symbolWalletImage: symbolplatform/symbol-desktop-wallet:1.0.1 symbolFaucetImage: symbolplatform/symbol-faucet:1.0.1-alpha symbolAgentImage: symbolplatform/symbol-node-rewards-agent:2.0.0 mongoImage: mongo:4.4.3-bionic -httpsPortalImage: steveltn/https-portal:1 +httpsPortalImage: steveltn/https-portal:1.19 mongoComposeRunParam: --wiredTigerCacheSizeGB 2 logLevel: 'Info' # brokerLogLevel: 'Info' diff --git a/src/service/ComposeService.ts b/src/service/ComposeService.ts index 9fac93db9..84d7d4b7d 100644 --- a/src/service/ComposeService.ts +++ b/src/service/ComposeService.ts @@ -310,7 +310,6 @@ export class ComposeService { `HTTPS Proxy ${n.name} is invalid, 'host' property could not be resolved. It must be set to a valid DNS record.`, ); } - const volumes = [vol(`../${targetGatewaysFolder}/https-proxy`, nodeWorkingDirectory, false)]; const domains: string | undefined = n.domains || presetData.gateways?.map((g) => resolveHttpsProxyDomains(host, `http://${g.name}:${restInternalPort}`))[0]; @@ -320,10 +319,8 @@ export class ComposeService { services.push( await resolveService(n, { container_name: n.name, - // user, // TODO fix the user permissions issue image: presetData.httpsPortalImage, stop_signal: 'SIGINT', - working_dir: nodeWorkingDirectory, ports: resolvePorts([ { internalPort: 80, openPort: true }, { internalPort: internalPort, openPort: n.openPort }, @@ -335,7 +332,6 @@ export class ComposeService { SERVER_NAMES_HASH_BUCKET_SIZE: n.serverNamesHashBucketSize, }, restart: restart, - volumes: volumes, depends_on: [presetData.gateways![0].name], ...this.resolveDebugOptions(presetData.dockerComposeDebugMode, n.dockerComposeDebugMode), ...n.compose, From 4c7364c7a45980d356c710f45a0e30196a8e9745 Mon Sep 17 00:00:00 2001 From: Baha Date: Tue, 17 Aug 2021 13:33:54 +0100 Subject: [PATCH 09/10] fix: test issue (https-portal image version mismatch) fixed --- test/composes/expected-testnet-httpsproxy-compose.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/test/composes/expected-testnet-httpsproxy-compose.yml b/test/composes/expected-testnet-httpsproxy-compose.yml index 10fe67a57..ae814a7ef 100644 --- a/test/composes/expected-testnet-httpsproxy-compose.yml +++ b/test/composes/expected-testnet-httpsproxy-compose.yml @@ -65,9 +65,8 @@ services: ipv4_address: 172.20.0.25 https-proxy: container_name: https-proxy - image: 'steveltn/https-portal:1' + image: 'steveltn/https-portal:1.19' stop_signal: SIGINT - working_dir: /symbol-workdir ports: - '80:80' - '3001:443' @@ -77,8 +76,6 @@ services: STAGE: production SERVER_NAMES_HASH_BUCKET_SIZE: 128 restart: 'on-failure:2' - volumes: - - '../gateways/https-proxy:/symbol-workdir:rw' depends_on: - rest-gateway networks: From bc04a74265fbb8eb7a801f7a1cf3cbb24ba5ad80 Mon Sep 17 00:00:00 2001 From: Baha Date: Tue, 17 Aug 2021 15:27:34 +0100 Subject: [PATCH 10/10] fix: symbol-rest image version updated to 2.3.7-alpha (containing REST SSL changes) --- presets/shared.yml | 2 +- .../expected-docker-compose-bootstrap-custom-compose.yml | 2 +- .../composes/expected-docker-compose-bootstrap-custom.yml | 2 +- test/composes/expected-docker-compose-bootstrap-full.yml | 2 +- .../composes/expected-docker-compose-bootstrap-repeat.yml | 8 ++++---- test/composes/expected-docker-compose-bootstrap.yml | 2 +- test/composes/expected-mainnet-api-compose.yml | 2 +- test/composes/expected-mainnet-dual-compose.yml | 2 +- test/composes/expected-testnet-api-compose.yml | 2 +- test/composes/expected-testnet-dual-compose.yml | 2 +- test/composes/expected-testnet-httpsproxy-compose.yml | 2 +- test/composes/expected-testnet-native-ssl-compose.yml | 2 +- test/composes/expected-testnet-supernode-compose.yml | 2 +- test/composes/expected-testnet-voting-compose.yml | 2 +- test/supernode.yml | 2 +- 15 files changed, 18 insertions(+), 18 deletions(-) diff --git a/presets/shared.yml b/presets/shared.yml index 9285a945f..8a2b84d40 100644 --- a/presets/shared.yml +++ b/presets/shared.yml @@ -65,7 +65,7 @@ maxChildNamespaces: 256 maxNamespaceDepth: 3 batchVerificationRandomSource: symbolServerImage: symbolplatform/symbol-server:gcc-10-1.0.1.0 -symbolRestImage: symbolplatform/symbol-rest:2.3.6 +symbolRestImage: symbolplatform/symbol-rest:2.3.7-alpha symbolExplorerImage: symbolplatform/symbol-explorer:1.1.0-alpha symbolWalletImage: symbolplatform/symbol-desktop-wallet:1.0.1 symbolFaucetImage: symbolplatform/symbol-faucet:1.0.1-alpha diff --git a/test/composes/expected-docker-compose-bootstrap-custom-compose.yml b/test/composes/expected-docker-compose-bootstrap-custom-compose.yml index b8a6df29d..bc88b4529 100644 --- a/test/composes/expected-docker-compose-bootstrap-custom-compose.yml +++ b/test/composes/expected-docker-compose-bootstrap-custom-compose.yml @@ -105,7 +105,7 @@ services: rest-gateway-0: container_name: rest-gateway-0 user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' + image: 'symbolplatform/symbol-rest:2.3.7-alpha' command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json stop_signal: SIGINT working_dir: /symbol-workdir diff --git a/test/composes/expected-docker-compose-bootstrap-custom.yml b/test/composes/expected-docker-compose-bootstrap-custom.yml index 7a21f15eb..8553a3bfc 100644 --- a/test/composes/expected-docker-compose-bootstrap-custom.yml +++ b/test/composes/expected-docker-compose-bootstrap-custom.yml @@ -103,7 +103,7 @@ services: rest-gateway-0: container_name: rest-gateway-0 user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' + image: 'symbolplatform/symbol-rest:2.3.7-alpha' command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json stop_signal: SIGINT working_dir: /symbol-workdir diff --git a/test/composes/expected-docker-compose-bootstrap-full.yml b/test/composes/expected-docker-compose-bootstrap-full.yml index cb42bb3b5..c669fe5e5 100644 --- a/test/composes/expected-docker-compose-bootstrap-full.yml +++ b/test/composes/expected-docker-compose-bootstrap-full.yml @@ -108,7 +108,7 @@ services: rest-gateway-0: container_name: rest-gateway-0 user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' + image: 'symbolplatform/symbol-rest:2.3.7-alpha' command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json stop_signal: SIGINT working_dir: /symbol-workdir diff --git a/test/composes/expected-docker-compose-bootstrap-repeat.yml b/test/composes/expected-docker-compose-bootstrap-repeat.yml index a3ab1f359..92b832e13 100644 --- a/test/composes/expected-docker-compose-bootstrap-repeat.yml +++ b/test/composes/expected-docker-compose-bootstrap-repeat.yml @@ -249,7 +249,7 @@ services: rest-gateway-0: container_name: rest-gateway-0 user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' + image: 'symbolplatform/symbol-rest:2.3.7-alpha' command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json stop_signal: SIGINT working_dir: /symbol-workdir @@ -266,7 +266,7 @@ services: rest-gateway-1: container_name: rest-gateway-1 user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' + image: 'symbolplatform/symbol-rest:2.3.7-alpha' command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json stop_signal: SIGINT working_dir: /symbol-workdir @@ -283,7 +283,7 @@ services: rest-gateway-2: container_name: rest-gateway-2 user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' + image: 'symbolplatform/symbol-rest:2.3.7-alpha' command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json stop_signal: SIGINT working_dir: /symbol-workdir @@ -300,7 +300,7 @@ services: rest-gateway-3: container_name: rest-gateway-3 user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' + image: 'symbolplatform/symbol-rest:2.3.7-alpha' command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json stop_signal: SIGINT working_dir: /symbol-workdir diff --git a/test/composes/expected-docker-compose-bootstrap.yml b/test/composes/expected-docker-compose-bootstrap.yml index f2915689c..560db14b4 100644 --- a/test/composes/expected-docker-compose-bootstrap.yml +++ b/test/composes/expected-docker-compose-bootstrap.yml @@ -87,7 +87,7 @@ services: rest-gateway-0: container_name: rest-gateway-0 user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' + image: 'symbolplatform/symbol-rest:2.3.7-alpha' command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json stop_signal: SIGINT working_dir: /symbol-workdir diff --git a/test/composes/expected-mainnet-api-compose.yml b/test/composes/expected-mainnet-api-compose.yml index 602cdd629..42e223d4c 100644 --- a/test/composes/expected-mainnet-api-compose.yml +++ b/test/composes/expected-mainnet-api-compose.yml @@ -44,7 +44,7 @@ services: rest-gateway: container_name: rest-gateway user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' + image: 'symbolplatform/symbol-rest:2.3.7-alpha' command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json stop_signal: SIGINT working_dir: /symbol-workdir diff --git a/test/composes/expected-mainnet-dual-compose.yml b/test/composes/expected-mainnet-dual-compose.yml index 602cdd629..42e223d4c 100644 --- a/test/composes/expected-mainnet-dual-compose.yml +++ b/test/composes/expected-mainnet-dual-compose.yml @@ -44,7 +44,7 @@ services: rest-gateway: container_name: rest-gateway user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' + image: 'symbolplatform/symbol-rest:2.3.7-alpha' command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json stop_signal: SIGINT working_dir: /symbol-workdir diff --git a/test/composes/expected-testnet-api-compose.yml b/test/composes/expected-testnet-api-compose.yml index 602cdd629..42e223d4c 100644 --- a/test/composes/expected-testnet-api-compose.yml +++ b/test/composes/expected-testnet-api-compose.yml @@ -44,7 +44,7 @@ services: rest-gateway: container_name: rest-gateway user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' + image: 'symbolplatform/symbol-rest:2.3.7-alpha' command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json stop_signal: SIGINT working_dir: /symbol-workdir diff --git a/test/composes/expected-testnet-dual-compose.yml b/test/composes/expected-testnet-dual-compose.yml index 602cdd629..42e223d4c 100644 --- a/test/composes/expected-testnet-dual-compose.yml +++ b/test/composes/expected-testnet-dual-compose.yml @@ -44,7 +44,7 @@ services: rest-gateway: container_name: rest-gateway user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' + image: 'symbolplatform/symbol-rest:2.3.7-alpha' command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json stop_signal: SIGINT working_dir: /symbol-workdir diff --git a/test/composes/expected-testnet-httpsproxy-compose.yml b/test/composes/expected-testnet-httpsproxy-compose.yml index ae814a7ef..0660dd8f2 100644 --- a/test/composes/expected-testnet-httpsproxy-compose.yml +++ b/test/composes/expected-testnet-httpsproxy-compose.yml @@ -49,7 +49,7 @@ services: rest-gateway: container_name: rest-gateway user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' + image: 'symbolplatform/symbol-rest:2.3.7-alpha' command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json stop_signal: SIGINT working_dir: /symbol-workdir diff --git a/test/composes/expected-testnet-native-ssl-compose.yml b/test/composes/expected-testnet-native-ssl-compose.yml index 923b4f0db..09dd4d788 100644 --- a/test/composes/expected-testnet-native-ssl-compose.yml +++ b/test/composes/expected-testnet-native-ssl-compose.yml @@ -49,7 +49,7 @@ services: rest-gateway: container_name: rest-gateway user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' + image: 'symbolplatform/symbol-rest:2.3.7-alpha' command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json stop_signal: SIGINT working_dir: /symbol-workdir diff --git a/test/composes/expected-testnet-supernode-compose.yml b/test/composes/expected-testnet-supernode-compose.yml index b86054f9d..d994ce4f4 100644 --- a/test/composes/expected-testnet-supernode-compose.yml +++ b/test/composes/expected-testnet-supernode-compose.yml @@ -61,7 +61,7 @@ services: rest-gateway: container_name: rest-gateway user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' + image: 'symbolplatform/symbol-rest:2.3.7-alpha' command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json stop_signal: SIGINT working_dir: /symbol-workdir diff --git a/test/composes/expected-testnet-voting-compose.yml b/test/composes/expected-testnet-voting-compose.yml index 602cdd629..42e223d4c 100644 --- a/test/composes/expected-testnet-voting-compose.yml +++ b/test/composes/expected-testnet-voting-compose.yml @@ -44,7 +44,7 @@ services: rest-gateway: container_name: rest-gateway user: '1000:1000' - image: 'symbolplatform/symbol-rest:2.3.6' + image: 'symbolplatform/symbol-rest:2.3.7-alpha' command: npm start --prefix /app/catapult-rest/rest /symbol-workdir/rest.json stop_signal: SIGINT working_dir: /symbol-workdir diff --git a/test/supernode.yml b/test/supernode.yml index 1d021f4ff..896bd7559 100644 --- a/test/supernode.yml +++ b/test/supernode.yml @@ -6,7 +6,7 @@ votingKeyDesiredLifetime: 28 # create short voting key files, 28 is the minimun #votingKeyDesiredFutureLifetime: 300 # create files for at least 60 epochs in the future, this will create voting key file 2 and file 3 useExperimentalNativeVotingKeyGeneration: true # Use new native ts generation symbolServerImage: symbolplatform/symbol-server-private:gcc-voting-key-unlink-rollback-f2633f4a4c -symbolRestImage: 'symbolplatform/symbol-rest:2.3.6-alpha' +symbolRestImage: 'symbolplatform/symbol-rest:2.3.7-alpha' nodes: - voting: true rewardProgram: 'supernode'