diff --git a/configs/migrations.js b/configs/migrations.js index 3075dc7d..e4c8dcb4 100644 --- a/configs/migrations.js +++ b/configs/migrations.js @@ -215,6 +215,10 @@ module.exports = { config.core.sentinel.docker.image = systemConfigs.base.core.sentinel.docker.image; } + + if (typeof config.core.tor === 'undefined') { + config.core.tor = systemConfigs.base.core.tor; + } }); // Set validator set LLMQ Type @@ -251,6 +255,16 @@ module.exports = { configFile.configs.testnet.platform.dashpay = systemConfigs.testnet.platform.dashpay; configFile.configs.testnet.platform.featureFlags = systemConfigs.testnet.platform.featureFlags; + return configFile; + }, + '0.21.0': (configFile) => { + Object.entries(configFile.configs) + .forEach(([, config]) => { + if (typeof config.core.tor === 'undefined') { + config.core.tor = systemConfigs.base.core.tor; + } + }); + return configFile; }, }; diff --git a/configs/schema/configJsonSchema.js b/configs/schema/configJsonSchema.js index 32bc248d..f79a504a 100644 --- a/configs/schema/configJsonSchema.js +++ b/configs/schema/configJsonSchema.js @@ -195,6 +195,27 @@ module.exports = { required: ['docker'], additionalProperties: false, }, + tor: { + type: 'object', + properties: { + enable: { + type: 'boolean', + }, + docker: { + $ref: '#/definitions/docker', + }, + proxy: { + type: 'object', + properties: { + port: { + $ref: '#/definitions/port', + }, + }, + }, + }, + required: ['enable', 'docker', 'proxy'], + additionalProperties: false, + }, devnetName: { type: ['string', 'null'], minLength: 1, @@ -204,7 +225,7 @@ module.exports = { enum: [0, 1], }, }, - required: ['docker', 'p2p', 'rpc', 'spork', 'masternode', 'miner', 'devnetName', 'debug'], + required: ['docker', 'p2p', 'rpc', 'spork', 'masternode', 'miner', 'sentinel', 'tor', 'devnetName', 'debug'], additionalProperties: false, }, platform: { diff --git a/configs/system/base.js b/configs/system/base.js index 0008c8b8..43831a3b 100644 --- a/configs/system/base.js +++ b/configs/system/base.js @@ -41,6 +41,15 @@ module.exports = { image: 'dashpay/sentinel:1.6.0', }, }, + tor: { + enable: false, + docker: { + image: 'dperson/torproxy', + }, + proxy: { + port: 9050, + }, + }, debug: 0, devnetName: null, }, diff --git a/configs/system/testnet.js b/configs/system/testnet.js index bb308e74..629217b4 100644 --- a/configs/system/testnet.js +++ b/configs/system/testnet.js @@ -17,6 +17,9 @@ module.exports = lodashMerge({}, baseConfig, { rpc: { port: 19998, }, + tor: { + enable: true, + }, }, platform: { dpns: { diff --git a/docker-compose.tor.yml b/docker-compose.tor.yml new file mode 100644 index 00000000..ec09a9a4 --- /dev/null +++ b/docker-compose.tor.yml @@ -0,0 +1,12 @@ +version: '3.7' + +services: + core_tor: + image: ${CORE_TOR_DOCKER_IMAGE:?err} + restart: unless-stopped + ports: + - ${CORE_TOR_PROXY_PORT:?err}:${CORE_TOR_PROXY_PORT:?err} + volumes: + - ${DASHMATE_HOME_DIR:?err}/${CONFIG_NAME:?err}/core/tor/torrc:/etc/tor/torrc + environment: + - SERVICE=${CORE_P2P_PORT:?err};core:${CORE_P2P_PORT:?err} diff --git a/src/config/Config.js b/src/config/Config.js index b0634416..4ca147c2 100644 --- a/src/config/Config.js +++ b/src/config/Config.js @@ -143,6 +143,10 @@ class Config { toEnvs() { const dockerComposeFiles = ['docker-compose.yml']; + if (this.get('core.tor.enable') === true) { + dockerComposeFiles.push('docker-compose.tor.yml'); + } + if (this.has('platform')) { dockerComposeFiles.push('docker-compose.platform.yml'); diff --git a/templates/core/tor/torrc.dot b/templates/core/tor/torrc.dot new file mode 100644 index 00000000..04a9cefd --- /dev/null +++ b/templates/core/tor/torrc.dot @@ -0,0 +1,7 @@ +AutomapHostsOnResolve 1 +DNSPort 5353 +DataDirectory /var/lib/tor +ExitPolicy reject *:* +Log notice stderr +RunAsDaemon 0 +User tor