Commit 28f768a6 authored by kenshin-samourai's avatar kenshin-samourai
Browse files

Merge branch 'develop' into 'master'

Merge develop into master for v1.10.0

See merge request dojo/samourai-dojo!233
parents 390c4ccb 88e0ec4e
......@@ -3,6 +3,7 @@
## Releases ##
- [v1.10.0](#1_10_0)
- [v1.9.0](#1_9_0)
- [v1.8.1](#1_8_1)
- [v1.8.0](#1_8_0)
......@@ -16,6 +17,109 @@
- [v1.1.0](#1_1_0)
<a name="1_10_0"/>
## Samourai Dojo v1.10.0 ##
### Notable changes ###
#### Performances optimization ####
This release provides faster IBD, synchronization and rescans thanks to the optimization of multiple components of Dojo (Tracker, Importer, etc)
#### Export of XPUB activity ####
The Maintenance Tool now allows to export the activity history of a XPUB in CSV format
#### Upgrade of bitcoind to v0.21.1 ####
Upgrade to Bitcoin Core v0.21.1
#### Upgrade of whirlpool to v0.10.11 ####
Upgrade to whirlpool-cli 0.10.11
#### Upgrade of explorer to v3.1.1 ####
Upgrade to btc-rpc-explorer 3.1.1
#### Upgrade of tor to v0.4.4.8 ####
Upgrade to Tor v0.4.4.8
#### Upgrade of indexer to v0.5.0 ####
Upgrade to addrindexrs v0.5.0
### Change log ###
#### MyDojo ####
- [#mr199](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/199) manage linux uids and gids as dojo system parameters
- [#mr200](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/200) manage ip addresses of containers as dojo system parameters
- [#mr201](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/201) disable rescan-lookahead field if data source is third_party_explorer
- [#mr202](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/202) reference db container by its ip address
- [#mr203](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/203) add export of xpub history in csv format
- [#mr204](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/204) upgrade whirlpool to whirlpool cli v0 10 10
- [#mr206](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/206) add support of config profiles for mysql
- [#mr207](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/207) upgrade tor to tor 0.4.4.8
- [#mr208](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/208) improve performances of blocks processing by the tracker
- [#mr209](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/209) improve performances of api
- [#mr210](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/210) better seriesCall
- [#mr211](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/211) add support of rest api provided by addrindexrs
- [#mr212](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/212) minor optimizations
- [#mr214](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/214) upgrade explorer to btc rpc explorer 3.0.0
- [#mr215](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/215) handle Error in sendError method
- [#mr217](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/217) optimize tracker (parallel processing of blocks)
- [#mr218](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/218) optimize derivation of addresses
- [#mr219](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/219) optimize remote importer
- [#mr221](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/221) implement util.splitList() with slice() instead of splice()
- [#mr222](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/222) determine bitcoin network based on config file instead of cli argument
- [#mr223](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/223) upgrade bitcoind to bitcoin core 0.21.1
- [#mr224](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/224) switch to buster-slim and alpine images
- [#mr226](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/226) upgrade btc-rpc-explorer to v3.1.1
- [#mr227](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/227) switch from express to tiny-http
- [#mr228](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/228) set NODE_ENV to production for optimization purposes
- [#mr232](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/232) upgrade whirlpool to whirlpool-cli v0.10.11
#### Bug fixes ####
- [#mr220](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/220) switch tx isolation mode to read-committed
#### Security ####
- [#mr216](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/216) upgrade node packages
- [#mr229](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/229) update node dependencies
#### Documentation ####
- [#mr225](https://code.samourai.io/dojo/samourai-dojo/-/merge_requests/225) update docker_advanced_setups.md - fix typo
#### Credits ###
- flatcloud0b3
- kenshin-samourai
- LaurentMT
- MrHash
- pajasevi
<a name="1_9_0"/>
## Samourai Dojo v1.9.0 ##
......
......@@ -109,7 +109,7 @@ class ApiHelper {
* Express middleware validating if entities params are well formed
* @param {object} req - http request object
* @param {object} res - http response object
* @param {function} next - next express middleware
* @param {function} next - next tiny-http middleware
*/
validateEntitiesParams(req, res, next) {
const params = this.checkEntitiesParams(req.query) ? req.query : req.body
......
......@@ -57,7 +57,7 @@ class HeadersRestApi {
* Validate request arguments
* @param {object} req - http request object
* @param {object} res - http response object
* @param {function} next - next express middleware
* @param {function} next - next tiny-http middleware
*/
validateArgsGetHeader(req, res, next) {
const isValidHash = validator.isHash(req.params.hash, 'sha256')
......
......@@ -7,7 +7,7 @@
'use strict'
const Logger = require('../lib/logger')
const RpcClient = require('../lib/bitcoind-rpc/rpc-client')
const { waitForBitcoindRpcApi } = require('../lib/bitcoind-rpc/rpc-client')
const network = require('../lib/bitcoin/network')
const keys = require('../keys')[network.key]
const db = require('../lib/db/mysql-db-wrapper')
......@@ -31,10 +31,10 @@
*/
Logger.info('API : Process ID: ' + process.pid)
Logger.info('API : Preparing the REST API')
// Wait for Bitcoind RPC API
// being ready to process requests
await RpcClient.waitForBitcoindRpcApi()
await waitForBitcoindRpcApi()
// Initialize the db wrapper
const dbConfig = {
......
......@@ -79,7 +79,7 @@ class MultiaddrRestApi {
} finally {
if (debugApi) {
const strParams =
const strParams =
`${req.query.active ? req.query.active : ''} \
${req.query.new ? req.query.new : ''} \
${req.query.pubkey ? req.query.pubkey : ''} \
......@@ -120,7 +120,7 @@ class MultiaddrRestApi {
} finally {
if (debugApi) {
const strParams =
const strParams =
`${req.body.active ? req.body.active : ''} \
${req.body.new ? req.body.new : ''} \
${req.body.pubkey ? req.body.pubkey : ''} \
......
......@@ -336,7 +336,7 @@ class SupportRestApi {
* Validate arguments related to GET xpub info requests
* @param {object} req - http request object
* @param {object} res - http response object
* @param {function} next - next express middleware
* @param {function} next - next tiny-http middleware
*/
validateArgsGetXpubInfo(req, res, next) {
const isValidXpub = validator.isAlphanumeric(req.params.xpub)
......@@ -353,7 +353,7 @@ class SupportRestApi {
* Validate arguments related to GET xpub rescan requests
* @param {object} req - http request object
* @param {object} res - http response object
* @param {function} next - next express middleware
* @param {function} next - next tiny-http middleware
*/
validateArgsGetXpubRescan(req, res, next) {
const isValidXpub = validator.isAlphanumeric(req.params.xpub)
......@@ -371,7 +371,7 @@ class SupportRestApi {
* Validate arguments related to GET xpub delete requests
* @param {object} req - http request object
* @param {object} res - http response object
* @param {function} next - next express middleware
* @param {function} next - next tiny-http middleware
*/
validateArgsGetXpubDelete(req, res, next) {
const isValidXpub = validator.isAlphanumeric(req.params.xpub)
......@@ -388,7 +388,7 @@ class SupportRestApi {
* Validate arguments related to addresses requests
* @param {object} req - http request object
* @param {object} res - http response object
* @param {function} next - next express middleware
* @param {function} next - next tiny-http middleware
*/
validateAddress(req, res, next) {
const isValidAddress = validator.isAlphanumeric(req.params.addr)
......
......@@ -83,8 +83,15 @@ class TransactionsRestApi {
const active = apiHelper.parseEntities(req.query.active)
const page = req.query.page != null ? parseInt(req.query.page) : 0
const count = req.query.count != null ? parseInt(req.query.count) : keys.multiaddr.transactions
const excludeNullXfer = req.query.excludeNullXfer != null
const result = await walletService.getWalletTransactions(active, page, count)
if (excludeNullXfer) {
result.txs = result.txs.filter(tx => {
return tx['result'] != 0
})
}
const ret = JSON.stringify(result, null, 2)
HttpServer.sendRawData(res, ret)
......@@ -105,7 +112,7 @@ class TransactionsRestApi {
* Validate arguments of /tx requests
* @param {object} req - http request object
* @param {object} res - http response object
* @param {function} next - next express middleware
* @param {function} next - next tiny-http middleware
*/
validateArgsGetTransaction(req, res, next) {
const isValidTxid = validator.isHash(req.params.txid, 'sha256')
......@@ -130,7 +137,7 @@ class TransactionsRestApi {
* Validate arguments of /txs requests
* @param {object} req - http request object
* @param {object} res - http response object
* @param {function} next - next express middleware
* @param {function} next - next tiny-http middleware
*/
validateArgsGetTransactions(req, res, next) {
const isValidPage =
......@@ -141,7 +148,11 @@ class TransactionsRestApi {
!req.query.count
|| validator.isInt(req.query.count)
if (!(isValidPage && isValidCount)) {
const isValidExcludeNull =
!req.query.excludeNullXfer
|| validator.isAlphanumeric(req.query.excludeNullXfer)
if (!(isValidPage && isValidCount && isValidExcludeNull)) {
HttpServer.sendError(res, errors.body.INVDATA)
Logger.error(
req.query,
......
......@@ -40,7 +40,7 @@ class UnspentRestApi {
)
this.httpServer.app.post(
'/unspent',
'/unspent',
urlencodedParser,
authMgr.checkAuthentication.bind(authMgr),
apiHelper.validateEntitiesParams.bind(apiHelper),
......@@ -79,7 +79,7 @@ class UnspentRestApi {
} finally {
if (debugApi) {
const strParams =
const strParams =
`${req.query.active ? req.query.active : ''} \
${req.query.new ? req.query.new : ''} \
${req.query.pubkey ? req.query.pubkey : ''} \
......@@ -120,7 +120,7 @@ class UnspentRestApi {
} finally {
if (debugApi) {
const strParams =
const strParams =
`${req.body.active ? req.body.active : ''} \
${req.body.new ? req.body.new : ''} \
${req.body.pubkey ? req.body.pubkey : ''} \
......@@ -134,4 +134,4 @@ class UnspentRestApi {
}
module.exports = UnspentRestApi
\ No newline at end of file
module.exports = UnspentRestApi
......@@ -78,7 +78,7 @@ class WalletRestApi {
} finally {
if (debugApi) {
const strParams =
const strParams =
`${req.query.active ? req.query.active : ''} \
${req.query.new ? req.query.new : ''} \
${req.query.pubkey ? req.query.pubkey : ''} \
......@@ -119,7 +119,7 @@ class WalletRestApi {
} finally {
if (debugApi) {
const strParams =
const strParams =
`${req.body.active ? req.body.active : ''} \
${req.body.new ? req.body.new : ''} \
${req.body.pubkey ? req.body.pubkey : ''} \
......
......@@ -9,16 +9,14 @@ const bodyParser = require('body-parser')
const errors = require('../lib/errors')
const network = require('../lib/bitcoin/network')
const Logger = require('../lib/logger')
const db = require('../lib/db/mysql-db-wrapper')
const hdaHelper = require('../lib/bitcoin/hd-accounts-helper')
const hdaService = require('../lib/bitcoin/hd-accounts-service')
const RpcClient = require('../lib/bitcoind-rpc/rpc-client')
const HdAccountInfo = require('../lib/wallet/hd-account-info')
const authMgr = require('../lib/auth/authorizations-manager')
const HttpServer = require('../lib/http-server/http-server')
const remoteImporter = require('../lib/remote-importer/remote-importer')
const debugApi = !!(process.argv.indexOf('api-debug') > -1)
const debugApi = process.argv.indexOf('api-debug') > -1
const gap = require('../keys/')[network.key].gap
......@@ -34,9 +32,6 @@ class XPubRestApi {
constructor(httpServer) {
this.httpServer = httpServer
// Initialize the rpc client
this.rpcClient = new RpcClient()
// Establish routes
const urlencodedParser = bodyParser.urlencoded({ extended: true })
......@@ -404,7 +399,7 @@ class XPubRestApi {
* Validate arguments of postXpub requests
* @param {object} req - http request object
* @param {object} res - http response object
* @param {function} next - next express middleware
* @param {function} next - next tiny-http middleware
*/
validateArgsPostXpub(req, res, next) {
const isValidXpub = validator.isAlphanumeric(req.body.xpub)
......@@ -436,7 +431,7 @@ class XPubRestApi {
* Validate arguments of getXpub requests
* @param {object} req - http request object
* @param {object} res - http response object
* @param {function} next - next express middleware
* @param {function} next - next tiny-http middleware
*/
validateArgsGetXpub(req, res, next) {
const isValidXpub = validator.isAlphanumeric(req.params.xpub)
......@@ -456,7 +451,7 @@ class XPubRestApi {
* Validate arguments of postLockXpub requests
* @param {object} req - http request object
* @param {object} res - http response object
* @param {function} next - next express middleware
* @param {function} next - next tiny-http middleware
*/
validateArgsPostLockXpub(req, res, next) {
const isValidXpub = validator.isAlphanumeric(req.params.xpub)
......@@ -480,7 +475,7 @@ class XPubRestApi {
* Validate arguments of deleteXpub requests
* @param {object} req - http request object
* @param {object} res - http response object
* @param {function} next - next express middleware
* @param {function} next - next tiny-http middleware
*/
validateArgsDeleteXpub(req, res, next) {
const isValidXpub = validator.isAlphanumeric(req.params.xpub)
......
......@@ -11,7 +11,7 @@ A word of caution, though, the default values of these options try to maximize y
- [Local Electrum server used as data source for imports/rescans](#local_electrum)
- [Local Whirlpool client](#local_whirlpool)
- [External Bitcoin full node](#external_bitcoind)
- [bitcoind RPC API ans ZMQ notifications exposed to external apps](#exposed_rpc_zmq)
- [bitcoind RPC API and ZMQ notifications exposed to external apps](#exposed_rpc_zmq)
- [Static onion address for bitcoind hidden service](#static_onion)
- [Configure Tor Bridges](#tor_bridges)
- [Support of testnet](#testnet)
......@@ -282,7 +282,7 @@ Follow these steps if you want to speed up this operation by preloading an archi
<a name="exposed_rpc_zmq"/>
## bitcoind RPC API ans ZMQ notifications exposed to external apps ##
## bitcoind RPC API and ZMQ notifications exposed to external apps ##
By default, access to the RPC API of your bitcoind is restricted to Docker containers hosted on the "dojonet" network.
......
......@@ -12,6 +12,7 @@ GET /txs?active=...
* **active** - `string` - A pipe-separated list of extended public keys and/or loose addresses and/or pubkeys (`xpub1|address1|address2|pubkey1|...`)
* **page** - `integer` - Index of the requested page (first page is index 0)
* **count** - `integer` - Number of transactions returned per page
* **excludeNullXfer** - `boolean` - Boolean flag indicating if transactions that don't change the balance should be excluded from the result (default = false)
* **at** - `string` (optional) - Access Token (json web token). Required if authentication is activated. Alternatively, the access token can be passed through the `Authorization` HTTP header (with the `Bearer` scheme).
### Examples
......
......@@ -10,15 +10,34 @@
COMPOSE_CONVERT_WINDOWS_PATHS=1
DOJO_VERSION_TAG=1.9.0
DOJO_DB_VERSION_TAG=1.2.0
DOJO_BITCOIND_VERSION_TAG=1.11.0
DOJO_NODEJS_VERSION_TAG=1.9.0
DOJO_NGINX_VERSION_TAG=1.5.0
DOJO_TOR_VERSION_TAG=1.7.0
DOJO_EXPLORER_VERSION_TAG=1.4.0
DOJO_INDEXER_VERSION_TAG=1.2.0
DOJO_WHIRLPOOL_VERSION_TAG=1.3.0
DOJO_VERSION_TAG=1.10.0
DOJO_DB_VERSION_TAG=1.3.0
DOJO_BITCOIND_VERSION_TAG=1.12.0
DOJO_NODEJS_VERSION_TAG=1.10.0
DOJO_NGINX_VERSION_TAG=1.6.0
DOJO_TOR_VERSION_TAG=1.9.0
DOJO_EXPLORER_VERSION_TAG=1.7.0
DOJO_INDEXER_VERSION_TAG=1.3.0
DOJO_WHIRLPOOL_VERSION_TAG=1.4.0
#########################################
# NETWORKING
#########################################
NET_DOJO_MYSQL_IPV4=172.28.1.1
NET_DOJO_NODE_IPV4=172.28.1.2
NET_DOJO_NGINX_IPV4=172.28.1.3
NET_DOJO_TOR_IPV4=172.28.1.4
NET_DOJO_BITCOIND_IPV4=172.28.1.5
NET_DOJO_INDEXER_IPV4=172.28.1.6
NET_DOJO_EXPLORER_IPV4=172.28.1.7
NET_DMZ_NGINX_IPV4=172.29.1.3
NET_DMZ_TOR_IPV4=172.29.1.4
NET_WHIRL_NGINX_IPV4=172.30.1.3
NET_WHIRL_WHIRLPOOL_IPV4=172.30.1.8
#########################################
......@@ -32,6 +51,9 @@ MYSQL_DATABASE=samourai-main
# BITCOIND
#########################################
BITCOIND_LINUX_UID=1105
BITCOIND_LINUX_GID=1108
BITCOIND_DNSSEED=0
BITCOIND_DNS=0
......@@ -67,3 +89,35 @@ NODE_TRACKER_UNCONF_TXS_PERIOD=300000
#########################################
INDEXER_BATCH_SIZE=10
#########################################
# TOR
#########################################
TOR_LINUX_UID=1104
TOR_LINUX_GID=1107
#########################################
# WHIRLPOOL
#########################################
WHIRLPOOL_LINUX_UID=1110
WHIRLPOOL_LINUX_GID=1113
#########################################
# INDEXER
#########################################
INDEXER_LINUX_UID=1106
INDEXER_LINUX_GID=1109
#########################################
# SOROBAN
#########################################
SOROBAN_LINUX_UID=1111
SOROBAN_LINUX_GID=1114
FROM debian:buster
FROM debian:buster-slim
#################################################################
# INSTALL BITCOIN
#################################################################
ENV BITCOIN_HOME /home/bitcoin
ENV BITCOIN_VERSION 0.21.0
ENV BITCOIN_URL https://bitcoincore.org/bin/bitcoin-core-0.21.0/bitcoin-0.21.0-x86_64-linux-gnu.tar.gz
ENV BITCOIN_SHA256 da7766775e3f9c98d7a9145429f2be8297c2672fe5b118fd3dc2411fb48e0032
ENV BITCOIN_VERSION 0.21.1
ENV BITCOIN_URL https://bitcoincore.org/bin/bitcoin-core-0.21.1/bitcoin-0.21.1-x86_64-linux-gnu.tar.gz
ENV BITCOIN_SHA256 366eb44a7a0aa5bd342deea215ec19a184a11f2ca22220304ebb20b9c8917e2b
ENV BITCOIN_ASC_URL https://bitcoincore.org/bin/bitcoin-core-0.21.0/SHA256SUMS.asc
ENV BITCOIN_PGP_KS_URI hkp://keyserver.ubuntu.com:80
ENV BITCOIN_PGP_KEY 01EA5486DE18A882D4C2684590C8019E36C2E964
ARG BITCOIND_LINUX_UID
ARG BITCOIND_LINUX_GID
ARG TOR_LINUX_GID
RUN set -ex && \
apt-get update && \
apt-get install -qq --no-install-recommends ca-certificates dirmngr gosu gpg gpg-agent wget && \
......@@ -30,9 +35,9 @@ RUN set -ex && \
# Create groups bitcoin & tor
# Create user bitcoin and add it to groups
RUN addgroup --system -gid 1108 bitcoin && \
addgroup --system -gid 1107 tor && \
adduser --system --ingroup bitcoin -uid 1105 bitcoin && \
RUN addgroup --system -gid ${BITCOIND_LINUX_GID} bitcoin && \
addgroup --system -gid ${TOR_LINUX_GID} tor && \
adduser --system --ingroup bitcoin -uid ${BITCOIND_LINUX_UID} bitcoin && \
usermod -a -G tor bitcoin
# Create data directory
......@@ -53,4 +58,4 @@ RUN chown bitcoin:bitcoin /wait-for-it.sh && \
EXPOSE 8333 9501 9502 28256
USER bitcoin
\ No newline at end of file
USER bitcoin
......@@ -15,9 +15,9 @@ bitcoind_options=(
-mempoolexpiry=$BITCOIND_MEMPOOL_EXPIRY
-minrelaytxfee=$BITCOIND_MIN_RELAY_TX_FEE
-port=8333
-proxy=172.28.1.4:9050
-proxy=$NET_DOJO_TOR_IPV4:9050
-rpcallowip=0.0.0.0/0
-rpcbind=172.28.1.5
-rpcbind=$NET_DOJO_BITCOIND_IPV4
-rpcpassword=$BITCOIND_RPC_PASSWORD
-rpcport=28256
-rpcthreads=$BITCOIND_RPC_THREADS
......@@ -31,7 +31,7 @@ bitcoind_options=(
if [ "$BITCOIND_LISTEN_MODE" == "on" ]; then
bitcoind_options+=(-listen=1)
bitcoind_options+=(-bind=172.28.1.5)
bitcoind_options+=(-bind="$NET_DOJO_BITCOIND_IPV4")
bitcoind_options+=(-externalip=$(cat /var/lib/tor/hsv2bitcoind/hostname))
bitcoind_options+=(-externalip=$(cat /var/lib/tor/hsv3bitcoind/hostname))
fi
......
......@@ -15,4 +15,10 @@ MYSQL_USER=samourai
# Password of of user account
# Warning: This option must not be modified after the first installation
# Type: alphanumeric
MYSQL_PASSWORD=password
\ No newline at end of file
MYSQL_PASSWORD=password
# MySQL configuration profile
# default = default configuration parameters
# low_mem = configuration minimizing the RAM consumed by the database
# Values: default | low_mem
MYSQL_CONF_PROFILE=default
\ No newline at end of file
......@@ -22,7 +22,7 @@ services:
max-file: "10"
networks:
dojonet:
ipv4_address: 172.28.1.1
ipv4_address: ${NET_DOJO_MYSQL_IPV4}
node:
image: "samouraiwallet/dojo-nodejs:${DOJO_NODEJS_VERSION_TAG}"
......@@ -30,6 +30,8 @@ services:
build:
context: ./../..
dockerfile: ./docker/my-dojo/node/Dockerfile
args:
TOR_LINUX_GID: ${TOR_LINUX_GID}
env_file:
- ./.env
- ./conf/docker-common.conf
......@@ -55,7 +57,7 @@ services:
- db
networks:
dojonet:
ipv4_address: 172.28.1.2
ipv4_address: ${NET_DOJO_NODE_IPV4}
nginx:
image: "samouraiwallet/dojo-nginx:${DOJO_NGINX_VERSION_TAG}"
......@@ -79,17 +81,20 @@ services:
- node
networks:
whirlnet:
ipv4_address: 172.30.1.3
ipv4_address: ${NET_WHIRL_NGINX_IPV4}
dmznet:
ipv4_address: 172.29.1.3
ipv4_address: ${NET_DMZ_NGINX_IPV4}
dojonet:
ipv4_address: 172.28.1.3
ipv4_address: ${NET_DOJO_NGINX_IPV4}
tor:
image: "samouraiwallet/dojo-tor:${DOJO_TOR_VERSION_TAG}"
container_name: tor
build:
context: ./tor
args:
TOR_LINUX_UID: ${TOR_LINUX_UID}
TOR_LINUX_GID: ${TOR_LINUX_GID}
env_file:
- ./.env
- ./conf/docker-bitcoind.conf
......@@ -107,9 +112,9 @@ services:
max-file: "10"
networks:
dmznet:
ipv4_address: 172.29.1.4
ipv4_address: ${NET_DMZ_TOR_IPV4}
dojonet