diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1d250a0d5..862b74a5a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,91 +2,93 @@ name: CI Pipeline for the Backend and Frontend on: pull_request: - types: [ opened, review_requested, synchronize ] -env: - NODE_VERSION: 16.15.0 + types: [opened, review_requested, synchronize] jobs: backend: if: "!contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')" strategy: matrix: - flavor: ['dev', 'prod'] - runs-on: 'ubuntu-latest' + node: ["16.16.0", "18.5.0"] + flavor: ["dev", "prod"] + fail-fast: false + runs-on: "ubuntu-latest" - name: Backend (${{ matrix.flavor }}) + name: Backend (${{ matrix.flavor }}) - node ${{ matrix.node }} steps: - name: Checkout uses: actions/checkout@v3 with: - path: ${{ matrix.flavor }} + path: ${{ matrix.node }}/${{ matrix.flavor }} - name: Setup Node uses: actions/setup-node@v3 with: - node-version: ${{ env.NODE_VERSION }} - registry-url: 'https://registry.npmjs.org' + node-version: ${{ matrix.node }} + registry-url: "https://registry.npmjs.org" - name: Install if: ${{ matrix.flavor == 'dev'}} run: npm ci - working-directory: ${{ matrix.flavor }}/backend + working-directory: ${{ matrix.node }}/${{ matrix.flavor }}/backend - name: Install (Prod dependencies only) if: ${{ matrix.flavor == 'prod'}} run: npm ci --omit=dev --omit=optional - working-directory: ${{ matrix.flavor }}/backend + working-directory: ${{ matrix.node }}/${{ matrix.flavor }}/backend - - name: Lint + - name: Lint if: ${{ matrix.flavor == 'dev'}} run: npm run lint - working-directory: ${{ matrix.flavor }}/backend + working-directory: ${{ matrix.node }}/${{ matrix.flavor }}/backend - # - name: Test - # run: npm run test + # - name: Test + # run: npm run test - name: Build run: npm run build - working-directory: ${{ matrix.flavor }}/backend + working-directory: ${{ matrix.node }}/${{ matrix.flavor }}/backend frontend: if: "!contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')" strategy: matrix: - flavor: ['dev', 'prod'] - runs-on: 'ubuntu-latest' + node: ["16.15.0", "18.5.0"] + flavor: ["dev", "prod"] + fail-fast: false + runs-on: "ubuntu-latest" - name: Frontend (${{ matrix.flavor }}) + name: Frontend (${{ matrix.flavor }}) - node ${{ matrix.node }} steps: - name: Checkout uses: actions/checkout@v3 with: - path: ${{ matrix.flavor }} + path: ${{ matrix.node }}/${{ matrix.flavor }} - name: Setup Node uses: actions/setup-node@v3 with: - node-version: ${{ env.NODE_VERSION }} - registry-url: 'https://registry.npmjs.org' + node-version: ${{ matrix.node }} + registry-url: "https://registry.npmjs.org" - name: Install (Prod dependencies only) run: npm ci --omit=dev --omit=optional if: ${{ matrix.flavor == 'prod'}} - working-directory: ${{ matrix.flavor }}/frontend + working-directory: ${{ matrix.node }}/${{ matrix.flavor }}/frontend - name: Install if: ${{ matrix.flavor == 'dev'}} run: npm ci - working-directory: ${{ matrix.flavor }}/frontend + working-directory: ${{ matrix.node }}/${{ matrix.flavor }}/frontend - name: Lint if: ${{ matrix.flavor == 'dev'}} run: npm run lint - working-directory: ${{ matrix.flavor }}/frontend + working-directory: ${{ matrix.node }}/${{ matrix.flavor }}/frontend - # - name: Test + # - name: Test # run: npm run test - name: Build run: npm run build - working-directory: ${{ matrix.flavor }}/frontend + working-directory: ${{ matrix.node }}/${{ matrix.flavor }}/frontend diff --git a/.nvmrc b/.nvmrc index 7fd023741..f274881e5 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v16.15.0 +v16.16.0 diff --git a/backend/src/api/blocks.ts b/backend/src/api/blocks.ts index 631940dd2..b259f701d 100644 --- a/backend/src/api/blocks.ts +++ b/backend/src/api/blocks.ts @@ -168,7 +168,7 @@ class Blocks { blockExtended.extras.avgFeeRate = stats.avgfeerate; } - if (['mainnet', 'testnet', 'signet', 'regtest'].includes(config.MEMPOOL.NETWORK)) { + if (['mainnet', 'testnet', 'signet'].includes(config.MEMPOOL.NETWORK)) { let pool: PoolTag; if (blockExtended.extras?.coinbaseTx !== undefined) { pool = await this.$findBlockMiner(blockExtended.extras?.coinbaseTx); @@ -405,7 +405,7 @@ class Blocks { if (blockHeightTip >= 2016) { const previousPeriodBlockHash = await bitcoinApi.$getBlockHash(blockHeightTip - heightDiff - 2016); - const previousPeriodBlock = await bitcoinApi.$getBlock(previousPeriodBlockHash); + const previousPeriodBlock = await bitcoinClient.getBlock(previousPeriodBlockHash) this.previousDifficultyRetarget = (block.difficulty - previousPeriodBlock.difficulty) / previousPeriodBlock.difficulty * 100; logger.debug(`Initial difficulty adjustment data set.`); } @@ -527,13 +527,15 @@ class Blocks { } } - const block = await bitcoinApi.$getBlock(hash); + let block = await bitcoinClient.getBlock(hash); // Not Bitcoin network, return the block as it if (['mainnet', 'testnet', 'signet'].includes(config.MEMPOOL.NETWORK) === false) { return block; } + block = prepareBlock(block); + // Bitcoin network, add our custom data on top const transactions = await this.$getTransactionsExtended(hash, block.height, true); const blockExtended = await this.$getBlockExtended(block, transactions); @@ -577,47 +579,43 @@ class Blocks { } public async $getBlocks(fromHeight?: number, limit: number = 15): Promise { - try { - let currentHeight = fromHeight !== undefined ? fromHeight : this.getCurrentBlockHeight(); - const returnBlocks: BlockExtended[] = []; - - if (currentHeight < 0) { - return returnBlocks; - } - - if (currentHeight === 0 && Common.indexingEnabled()) { - currentHeight = await blocksRepository.$mostRecentBlockHeight(); - } - - // Check if block height exist in local cache to skip the hash lookup - const blockByHeight = this.getBlocks().find((b) => b.height === currentHeight); - let startFromHash: string | null = null; - if (blockByHeight) { - startFromHash = blockByHeight.id; - } else if (!Common.indexingEnabled()) { - startFromHash = await bitcoinApi.$getBlockHash(currentHeight); - } - - let nextHash = startFromHash; - for (let i = 0; i < limit && currentHeight >= 0; i++) { - let block = this.getBlocks().find((b) => b.height === currentHeight); - if (block) { - returnBlocks.push(block); - } else if (Common.indexingEnabled()) { - block = await this.$indexBlock(currentHeight); - returnBlocks.push(block); - } else if (nextHash != null) { - block = prepareBlock(await bitcoinApi.$getBlock(nextHash)); - nextHash = block.previousblockhash; - returnBlocks.push(block); - } - currentHeight--; - } + let currentHeight = fromHeight !== undefined ? fromHeight : this.getCurrentBlockHeight(); + const returnBlocks: BlockExtended[] = []; + if (currentHeight < 0) { return returnBlocks; - } catch (e) { - throw e; } + + if (currentHeight === 0 && Common.indexingEnabled()) { + currentHeight = await blocksRepository.$mostRecentBlockHeight(); + } + + // Check if block height exist in local cache to skip the hash lookup + const blockByHeight = this.getBlocks().find((b) => b.height === currentHeight); + let startFromHash: string | null = null; + if (blockByHeight) { + startFromHash = blockByHeight.id; + } else if (!Common.indexingEnabled()) { + startFromHash = await bitcoinApi.$getBlockHash(currentHeight); + } + + let nextHash = startFromHash; + for (let i = 0; i < limit && currentHeight >= 0; i++) { + let block = this.getBlocks().find((b) => b.height === currentHeight); + if (block) { + returnBlocks.push(block); + } else if (Common.indexingEnabled()) { + block = await this.$indexBlock(currentHeight); + returnBlocks.push(block); + } else if (nextHash != null) { + block = prepareBlock(await bitcoinClient.getBlock(nextHash)); + nextHash = block.previousblockhash; + returnBlocks.push(block); + } + currentHeight--; + } + + return returnBlocks; } public getLastDifficultyAdjustmentTime(): number { diff --git a/backend/src/utils/blocks-utils.ts b/backend/src/utils/blocks-utils.ts index 937a37448..0f282bdeb 100644 --- a/backend/src/utils/blocks-utils.ts +++ b/backend/src/utils/blocks-utils.ts @@ -3,14 +3,14 @@ import { BlockExtended } from '../mempool.interfaces'; export function prepareBlock(block: any): BlockExtended { return { id: block.id ?? block.hash, // hash for indexed block - timestamp: block.timestamp ?? block.blockTimestamp, // blockTimestamp for indexed block + timestamp: block.timestamp ?? block.time ?? block.blockTimestamp, // blockTimestamp for indexed block height: block.height, version: block.version, - bits: block.bits, + bits: (typeof block.bits === 'string' ? parseInt(block.bits, 16): block.bits), nonce: block.nonce, difficulty: block.difficulty, - merkle_root: block.merkle_root, - tx_count: block.tx_count, + merkle_root: block.merkle_root ?? block.merkleroot, + tx_count: block.tx_count ?? block.nTx, size: block.size, weight: block.weight, previousblockhash: block.previousblockhash, diff --git a/docker/backend/Dockerfile b/docker/backend/Dockerfile index 6b368f59e..8d13bc7f4 100644 --- a/docker/backend/Dockerfile +++ b/docker/backend/Dockerfile @@ -1,4 +1,4 @@ -FROM node:16.15.0-buster-slim AS builder +FROM node:16.16.0-buster-slim AS builder ARG commitHash ENV DOCKER_COMMIT_HASH=${commitHash} @@ -11,7 +11,7 @@ RUN apt-get install -y build-essential python3 pkg-config RUN npm install --omit=dev --omit=optional RUN npm run build -FROM node:16.15.0-buster-slim +FROM node:16.16.0-buster-slim WORKDIR /backend diff --git a/docker/frontend/Dockerfile b/docker/frontend/Dockerfile index b58b8ccd0..d144d5882 100644 --- a/docker/frontend/Dockerfile +++ b/docker/frontend/Dockerfile @@ -1,4 +1,4 @@ -FROM node:16.15.0-buster-slim AS builder +FROM node:16.16.0-buster-slim AS builder ARG commitHash ENV DOCKER_COMMIT_HASH=${commitHash} diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 1dc5832fa..2d8bfc982 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -11041,6 +11041,12 @@ "@sideway/pinpoint": "^2.0.0" } }, + "node_modules/jquery": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", + "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==", + "peer": true + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -13791,6 +13797,17 @@ "node": ">=10.13.0" } }, + "node_modules/popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", + "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/portfinder": { "version": "1.0.28", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", @@ -26069,6 +26086,12 @@ "@sideway/pinpoint": "^2.0.0" } }, + "jquery": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", + "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==", + "peer": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -28165,6 +28188,12 @@ "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==" }, + "popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", + "peer": true + }, "portfinder": { "version": "1.0.28", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", diff --git a/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.html b/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.html index 3ab3e8b01..03d7fc1e9 100644 --- a/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.html +++ b/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -15,7 +15,7 @@ - Value + Amount diff --git a/frontend/src/locale/messages.fr.xlf b/frontend/src/locale/messages.fr.xlf index 305d95eb3..74a068a4d 100644 --- a/frontend/src/locale/messages.fr.xlf +++ b/frontend/src/locale/messages.fr.xlf @@ -952,6 +952,10 @@ src/app/bisq/bisq-transactions/bisq-transactions.component.html 20,21 + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 18 + src/app/dashboard/dashboard.component.html 124,125 @@ -1363,7 +1367,7 @@ Echange src/app/bisq/lightweight-charts-area/lightweight-charts-area.component.ts - 90 + 99 @@ -1371,7 +1375,7 @@ Volume src/app/bisq/lightweight-charts-area/lightweight-charts-area.component.ts - 91 + 100 @@ -2076,16 +2080,6 @@ 264,266 - - Value - Valeur - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 18 - - Transaction value - transaction.value - Fee Frais diff --git a/frontend/src/locale/messages.nb.xlf b/frontend/src/locale/messages.nb.xlf index ea3d6338f..ae34c0248 100644 --- a/frontend/src/locale/messages.nb.xlf +++ b/frontend/src/locale/messages.nb.xlf @@ -952,6 +952,10 @@ src/app/bisq/bisq-transactions/bisq-transactions.component.html 20,21 + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 18 + src/app/dashboard/dashboard.component.html 124,125 @@ -1363,7 +1367,7 @@ Handler src/app/bisq/lightweight-charts-area/lightweight-charts-area.component.ts - 90 + 99 @@ -1371,7 +1375,7 @@ Volum src/app/bisq/lightweight-charts-area/lightweight-charts-area.component.ts - 91 + 100 @@ -2076,16 +2080,6 @@ 264,266 - - Value - Verdi - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 18 - - Transaction value - transaction.value - Fee Avgift diff --git a/frontend/src/locale/messages.xlf b/frontend/src/locale/messages.xlf index 0648705b1..b280b9e7a 100644 --- a/frontend/src/locale/messages.xlf +++ b/frontend/src/locale/messages.xlf @@ -878,6 +878,10 @@ src/app/bisq/bisq-transactions/bisq-transactions.component.html 20,21 + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 18 + src/app/dashboard/dashboard.component.html 124,125 @@ -1263,14 +1267,14 @@ Trades src/app/bisq/lightweight-charts-area/lightweight-charts-area.component.ts - 90 + 99 Volume src/app/bisq/lightweight-charts-area/lightweight-charts-area.component.ts - 91 + 100 @@ -1918,15 +1922,6 @@ 264,266 - - Value - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 18 - - Transaction value - transaction.value - Fee diff --git a/production/README.md b/production/README.md index 62218420a..91b087ffa 100644 --- a/production/README.md +++ b/production/README.md @@ -82,11 +82,11 @@ pkg install -y zsh sudo git screen curl wget neovim rsync nginx openssl openssh- ### Node.js + npm -Build Node.js v16.15 and npm v8 from source using `nvm`: +Build Node.js v16.16.0 and npm v8 from source using `nvm`: ``` curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | zsh source $HOME/.zshrc -nvm install v16.15.0 +nvm install v16.16.0 --shared-zlib nvm alias default node ``` diff --git a/production/install b/production/install index fc89e7e30..ea2b9ced7 100755 --- a/production/install +++ b/production/install @@ -197,6 +197,7 @@ case $OS in TOR_USER=debian-tor TOR_GROUP=debian-tor CERTBOT_PKG=python3-certbot-nginx + NGINX_ETC_FOLDER=/etc/nginx NGINX_CONFIGURATION=/etc/nginx/nginx.conf ;; esac @@ -646,193 +647,193 @@ ext4CreateDir() # does bitcoin exist? -########## -# dialog # -########## - -: ${DIALOG=dialog} - -: ${DIALOG_OK=0} -: ${DIALOG_CANCEL=1} -: ${DIALOG_HELP=2} -: ${DIALOG_EXTRA=3} -: ${DIALOG_ITEM_HELP=4} -: ${DIALOG_ESC=255} - -: ${SIG_OFFNE=0} -: ${SIG_HUP=1} -: ${SIG_INT=2} -: ${SIG_QUIT=3} -: ${SIG_KILL=9} -: ${SIG_TERM=15} - -input=`tempfile 2>/dev/null` || input=/tmp/input$$ -output=`tempfile 2>/dev/null` || output=/tmp/test$$ -trap "rm -f $input $output" $SIG_OFFNE $SIG_HUP $SIG_INT $SIG_TRAP $SIG_TERM - -DIALOG_ERROR=254 -export DIALOG_ERROR - -backtitle="Mempool Fullnode Installer" -title="Mempool Fullnode Installer" -returncode=0 - -################# -# dialog part 1 # -################# - -$CUT >$input <<-EOF -Tor:Enable Tor v3 HS Onion:ON -Certbot:Enable HTTPS using Certbot:ON -Mainnet:Enable Bitcoin Mainnet:ON -Mainnet-Minfee:Enable Bitcoin Mainnet Minfee:ON -Testnet:Enable Bitcoin Testnet:ON -Liquid:Enable Elements Liquid:ON -Bisq:Enable Bisq:ON -Lightmode:Enable Electrs Lightmode to save disk space:ON -Smalldisk:Disable Electrs Compaction to save disk space:ON -Firewall:Enable Firewall:ON -EOF - -cat $input | sed -e 's/^/"/' -e 's/:/" "/g' -e 's/$/"/' >$output -cat $output >$input - -$DIALOG --backtitle "${backtitle}" \ - --title "${title}" "$@" \ - --checklist "Toggle the features below to configure your fullnode:\n" \ - 20 80 10 \ - --file $input 2> $output - -retval=$? - -tempfile=$output -if [ $retval != $DIALOG_OK ];then - echo "Installation aborted." - exit 1 -fi - -if grep Tor $tempfile >/dev/null 2>&1;then - TOR_INSTALL=ON -else - TOR_INSTALL=OFF -fi - -if grep Certbot $tempfile >/dev/null 2>&1;then - CERTBOT_INSTALL=ON -else - CERTBOT_INSTALL=OFF -fi - -if grep Mainnet $tempfile >/dev/null 2>&1;then - BITCOIN_MAINNET_ENABLE=ON -else - BITCOIN_MAINNET_ENABLE=OFF -fi - -if grep Mainnet-Minfee $tempfile >/dev/null 2>&1;then - BITCOIN_MAINNET_MINFEE_ENABLE=ON -else - BITCOIN_MAINNET_MINFEE_ENABLE=OFF -fi - -if grep Testnet $tempfile >/dev/null 2>&1;then - BITCOIN_TESTNET_ENABLE=ON -else - BITCOIN_TESTNET_ENABLE=OFF -fi - -if grep Liquid $tempfile >/dev/null 2>&1;then - ELEMENTS_INSTALL=ON - ELEMENTS_LIQUID_ENABLE=ON -else - ELEMENTS_INSTALL=OFF - ELEMENTS_LIQUID_ENABLE=OFF -fi - -if grep Bisq $tempfile >/dev/null 2>&1;then - BISQ_INSTALL=ON - BISQ_MAINNET_ENABLE=ON -else - BISQ_INSTALL=OFF - BISQ_MAINNET_ENABLE=OFF -fi - -if grep Lightmode $tempfile >/dev/null 2>&1;then - BITCOIN_ELECTRS_LIGHT_MODE=ON -else - BITCOIN_ELECTRS_LIGHT_MODE=OFF -fi - -if grep Smalldisk $tempfile >/dev/null 2>&1;then - BITCOIN_ELECTRS_LIGHT_MODE=ON -else - BITCOIN_ELECTRS_LIGHT_MODE=OFF -fi - -################# -# dialog part 2 # -################# - -$DIALOG --cr-wrap \ - --title "INPUT BOX" --clear \ - --inputbox "$@" \ -"Enter the FQDN hostname for obtaining an SSL certificate using Certbot:" 0 0 "${HOSTNAME}" 2> $tempfile -HOSTNAME=$(cat $tempfile) - -################# -# dialog part 3 # -################# - -# --form text height width formheight -# [ label y x item y x flen ilen ] - #"BISQ_BLOCKNOTIFY_HOST" 0 1 "${BISQ_BLOCKNOTIFY_HOST}" 0 30 0 0 \ - -$DIALOG --ok-label "Submit" \ - --backtitle "$backtitle" "$@" \ - --form "Your fullnode will be installed as follows:" 0 0 0 \ - "BISQ_LATEST_RELEASE" 1 1 "${BISQ_LATEST_RELEASE}" 1 35 35 0 \ - "BISQ_REPO_BRANCH" 2 1 "${BISQ_REPO_BRANCH}" 2 35 35 0 \ - "BISQ_REPO_NAME" 3 1 "${BISQ_REPO_NAME}" 3 35 35 0 \ - "BISQ_REPO_URL" 4 1 "${BISQ_REPO_URL}" 4 35 35 0 \ - "BITCOIN_ELECTRS_LATEST_RELEASE" 5 1 "${BITCOIN_ELECTRS_LATEST_RELEASE}" 5 35 35 0 \ - "BITCOIN_ELECTRS_LIGHT_MODE" 6 1 "${BITCOIN_ELECTRS_LIGHT_MODE}" 6 35 35 0 \ - "BITCOIN_ELECTRS_REPO_BRANCH" 7 1 "${BITCOIN_ELECTRS_REPO_BRANCH}" 7 35 35 0 \ - "BITCOIN_ELECTRS_REPO_NAME" 8 1 "${BITCOIN_ELECTRS_REPO_NAME}" 8 35 35 0 \ - "BITCOIN_ELECTRS_REPO_URL" 9 1 "${BITCOIN_ELECTRS_REPO_URL}" 9 35 35 0 \ - "BITCOIN_LATEST_RELEASE" 10 1 "${BITCOIN_LATEST_RELEASE}" 10 35 35 0 \ - "BITCOIN_MAINNET_ENABLE" 11 1 "${BITCOIN_MAINNET_ENABLE}" 11 35 35 0 \ - "BITCOIN_REPO_BRANCH" 12 1 "${BITCOIN_REPO_BRANCH}" 12 35 35 0 \ - "BITCOIN_REPO_NAME" 13 1 "${BITCOIN_REPO_NAME}" 13 35 35 0 \ - "BITCOIN_REPO_URL" 14 1 "${BITCOIN_REPO_URL}" 14 35 35 0 \ - "BITCOIN_TESTNET_ENABLE" 15 1 "${BITCOIN_TESTNET_ENABLE}" 15 35 35 0 \ - "ELEMENTS_INSTALL" 16 1 "${ELEMENTS_INSTALL}" 16 35 35 0 \ - "ELEMENTS_LATEST_RELEASE" 17 1 "${ELEMENTS_LATEST_RELEASE}" 17 35 35 0 \ - "ELEMENTS_LIQUID_ENABLE" 18 1 "${ELEMENTS_LIQUID_ENABLE}" 18 35 35 0 \ - "ELEMENTS_REPO_BRANCH" 19 1 "${ELEMENTS_REPO_BRANCH}" 19 35 35 0 \ - "ELEMENTS_REPO_NAME" 20 1 "${ELEMENTS_REPO_NAME}" 20 35 35 0 \ - "ELEMENTS_REPO_URL" 21 1 "${ELEMENTS_REPO_URL}" 21 35 35 0 \ - "MEMPOOL_LATEST_RELEASE" 22 1 "${MEMPOOL_LATEST_RELEASE}" 22 35 35 0 \ - "MEMPOOL_LIQUID_HTTP_HOST" 23 1 "${MEMPOOL_LIQUID_HTTP_HOST}" 23 35 35 0 \ - "MEMPOOL_LIQUID_HTTP_PORT" 24 1 "${MEMPOOL_LIQUID_HTTP_PORT}" 24 35 35 0 \ - "MEMPOOL_MAINNET_HTTP_HOST" 25 1 "${MEMPOOL_MAINNET_HTTP_HOST}" 25 35 35 0 \ - "MEMPOOL_MAINNET_HTTP_PORT" 26 1 "${MEMPOOL_MAINNET_HTTP_PORT}" 26 35 35 0 \ - "MEMPOOL_REPO_BRANCH" 27 1 "${MEMPOOL_REPO_BRANCH}" 27 35 35 0 \ - "MEMPOOL_REPO_NAME" 28 1 "${MEMPOOL_REPO_NAME}" 28 35 35 0 \ - "MEMPOOL_REPO_URL" 29 1 "${MEMPOOL_REPO_URL}" 29 35 35 0 \ - "MEMPOOL_TESTNET_HTTP_HOST" 30 1 "${MEMPOOL_TESTNET_HTTP_HOST}" 30 35 35 0 \ - "MEMPOOL_TESTNET_HTTP_PORT" 31 1 "${MEMPOOL_TESTNET_HTTP_PORT}" 31 35 35 0 \ - "MEMPOOL_TOR_HS" 32 1 "${MEMPOOL_TOR_HS}" 32 35 35 0 \ - "HOSTNAME" 33 1 "${HOSTNAME}" 33 35 35 0 \ - "TOR_INSTALL" 34 1 "${TOR_INSTALL}" 34 35 35 0 \ - "CERTBOT_INSTALL" 35 1 "${CERTBOT_INSTALL}" 35 35 35 0 \ -2> $tempfile - -retval=$? - -if [ $retval != $DIALOG_OK ];then - echo "Installation aborted." - exit 1 -fi +########### +## dialog # +########### +# +#: ${DIALOG=dialog} +# +#: ${DIALOG_OK=0} +#: ${DIALOG_CANCEL=1} +#: ${DIALOG_HELP=2} +#: ${DIALOG_EXTRA=3} +#: ${DIALOG_ITEM_HELP=4} +#: ${DIALOG_ESC=255} +# +#: ${SIG_OFFNE=0} +#: ${SIG_HUP=1} +#: ${SIG_INT=2} +#: ${SIG_QUIT=3} +#: ${SIG_KILL=9} +#: ${SIG_TERM=15} +# +#input=`tempfile 2>/dev/null` || input=/tmp/input$$ +#output=`tempfile 2>/dev/null` || output=/tmp/test$$ +#trap "rm -f $input $output" $SIG_OFFNE $SIG_HUP $SIG_INT $SIG_TRAP $SIG_TERM +# +#DIALOG_ERROR=254 +#export DIALOG_ERROR +# +#backtitle="Mempool Fullnode Installer" +#title="Mempool Fullnode Installer" +#returncode=0 +# +################## +## dialog part 1 # +################## +# +#$CUT >$input <<-EOF +#Tor:Enable Tor v3 HS Onion:ON +#Certbot:Enable HTTPS using Certbot:ON +#Mainnet:Enable Bitcoin Mainnet:ON +#Mainnet-Minfee:Enable Bitcoin Mainnet Minfee:ON +#Testnet:Enable Bitcoin Testnet:ON +#Liquid:Enable Elements Liquid:ON +#Bisq:Enable Bisq:ON +#Lightmode:Enable Electrs Lightmode to save disk space:ON +#Smalldisk:Disable Electrs Compaction to save disk space:ON +#Firewall:Enable Firewall:ON +#EOF +# +#cat $input | sed -e 's/^/"/' -e 's/:/" "/g' -e 's/$/"/' >$output +#cat $output >$input +# +#$DIALOG --backtitle "${backtitle}" \ +# --title "${title}" "$@" \ +# --checklist "Toggle the features below to configure your fullnode:\n" \ +# 20 80 10 \ +# --file $input 2> $output +# +#retval=$? +# +#tempfile=$output +#if [ $retval != $DIALOG_OK ];then +# echo "Installation aborted." +# exit 1 +#fi +# +#if grep Tor $tempfile >/dev/null 2>&1;then +# TOR_INSTALL=ON +#else +# TOR_INSTALL=OFF +#fi +# +#if grep Certbot $tempfile >/dev/null 2>&1;then +# CERTBOT_INSTALL=ON +#else +# CERTBOT_INSTALL=OFF +#fi +# +#if grep Mainnet $tempfile >/dev/null 2>&1;then +# BITCOIN_MAINNET_ENABLE=ON +#else +# BITCOIN_MAINNET_ENABLE=OFF +#fi +# +#if grep Mainnet-Minfee $tempfile >/dev/null 2>&1;then +# BITCOIN_MAINNET_MINFEE_ENABLE=ON +#else +# BITCOIN_MAINNET_MINFEE_ENABLE=OFF +#fi +# +#if grep Testnet $tempfile >/dev/null 2>&1;then +# BITCOIN_TESTNET_ENABLE=ON +#else +# BITCOIN_TESTNET_ENABLE=OFF +#fi +# +#if grep Liquid $tempfile >/dev/null 2>&1;then +# ELEMENTS_INSTALL=ON +# ELEMENTS_LIQUID_ENABLE=ON +#else +# ELEMENTS_INSTALL=OFF +# ELEMENTS_LIQUID_ENABLE=OFF +#fi +# +#if grep Bisq $tempfile >/dev/null 2>&1;then +# BISQ_INSTALL=ON +# BISQ_MAINNET_ENABLE=ON +#else +# BISQ_INSTALL=OFF +# BISQ_MAINNET_ENABLE=OFF +#fi +# +#if grep Lightmode $tempfile >/dev/null 2>&1;then +# BITCOIN_ELECTRS_LIGHT_MODE=ON +#else +# BITCOIN_ELECTRS_LIGHT_MODE=OFF +#fi +# +#if grep Smalldisk $tempfile >/dev/null 2>&1;then +# BITCOIN_ELECTRS_LIGHT_MODE=ON +#else +# BITCOIN_ELECTRS_LIGHT_MODE=OFF +#fi +# +################## +## dialog part 2 # +################## +# +#$DIALOG --cr-wrap \ +# --title "INPUT BOX" --clear \ +# --inputbox "$@" \ +#"Enter the FQDN hostname for obtaining an SSL certificate using Certbot:" 0 0 "${HOSTNAME}" 2> $tempfile +#HOSTNAME=$(cat $tempfile) +# +################## +## dialog part 3 # +################## +# +## --form text height width formheight +## [ label y x item y x flen ilen ] +# #"BISQ_BLOCKNOTIFY_HOST" 0 1 "${BISQ_BLOCKNOTIFY_HOST}" 0 30 0 0 \ +# +#$DIALOG --ok-label "Submit" \ +# --backtitle "$backtitle" "$@" \ +# --form "Your fullnode will be installed as follows:" 0 0 0 \ +# "BISQ_LATEST_RELEASE" 1 1 "${BISQ_LATEST_RELEASE}" 1 35 35 0 \ +# "BISQ_REPO_BRANCH" 2 1 "${BISQ_REPO_BRANCH}" 2 35 35 0 \ +# "BISQ_REPO_NAME" 3 1 "${BISQ_REPO_NAME}" 3 35 35 0 \ +# "BISQ_REPO_URL" 4 1 "${BISQ_REPO_URL}" 4 35 35 0 \ +# "BITCOIN_ELECTRS_LATEST_RELEASE" 5 1 "${BITCOIN_ELECTRS_LATEST_RELEASE}" 5 35 35 0 \ +# "BITCOIN_ELECTRS_LIGHT_MODE" 6 1 "${BITCOIN_ELECTRS_LIGHT_MODE}" 6 35 35 0 \ +# "BITCOIN_ELECTRS_REPO_BRANCH" 7 1 "${BITCOIN_ELECTRS_REPO_BRANCH}" 7 35 35 0 \ +# "BITCOIN_ELECTRS_REPO_NAME" 8 1 "${BITCOIN_ELECTRS_REPO_NAME}" 8 35 35 0 \ +# "BITCOIN_ELECTRS_REPO_URL" 9 1 "${BITCOIN_ELECTRS_REPO_URL}" 9 35 35 0 \ +# "BITCOIN_LATEST_RELEASE" 10 1 "${BITCOIN_LATEST_RELEASE}" 10 35 35 0 \ +# "BITCOIN_MAINNET_ENABLE" 11 1 "${BITCOIN_MAINNET_ENABLE}" 11 35 35 0 \ +# "BITCOIN_REPO_BRANCH" 12 1 "${BITCOIN_REPO_BRANCH}" 12 35 35 0 \ +# "BITCOIN_REPO_NAME" 13 1 "${BITCOIN_REPO_NAME}" 13 35 35 0 \ +# "BITCOIN_REPO_URL" 14 1 "${BITCOIN_REPO_URL}" 14 35 35 0 \ +# "BITCOIN_TESTNET_ENABLE" 15 1 "${BITCOIN_TESTNET_ENABLE}" 15 35 35 0 \ +# "ELEMENTS_INSTALL" 16 1 "${ELEMENTS_INSTALL}" 16 35 35 0 \ +# "ELEMENTS_LATEST_RELEASE" 17 1 "${ELEMENTS_LATEST_RELEASE}" 17 35 35 0 \ +# "ELEMENTS_LIQUID_ENABLE" 18 1 "${ELEMENTS_LIQUID_ENABLE}" 18 35 35 0 \ +# "ELEMENTS_REPO_BRANCH" 19 1 "${ELEMENTS_REPO_BRANCH}" 19 35 35 0 \ +# "ELEMENTS_REPO_NAME" 20 1 "${ELEMENTS_REPO_NAME}" 20 35 35 0 \ +# "ELEMENTS_REPO_URL" 21 1 "${ELEMENTS_REPO_URL}" 21 35 35 0 \ +# "MEMPOOL_LATEST_RELEASE" 22 1 "${MEMPOOL_LATEST_RELEASE}" 22 35 35 0 \ +# "MEMPOOL_LIQUID_HTTP_HOST" 23 1 "${MEMPOOL_LIQUID_HTTP_HOST}" 23 35 35 0 \ +# "MEMPOOL_LIQUID_HTTP_PORT" 24 1 "${MEMPOOL_LIQUID_HTTP_PORT}" 24 35 35 0 \ +# "MEMPOOL_MAINNET_HTTP_HOST" 25 1 "${MEMPOOL_MAINNET_HTTP_HOST}" 25 35 35 0 \ +# "MEMPOOL_MAINNET_HTTP_PORT" 26 1 "${MEMPOOL_MAINNET_HTTP_PORT}" 26 35 35 0 \ +# "MEMPOOL_REPO_BRANCH" 27 1 "${MEMPOOL_REPO_BRANCH}" 27 35 35 0 \ +# "MEMPOOL_REPO_NAME" 28 1 "${MEMPOOL_REPO_NAME}" 28 35 35 0 \ +# "MEMPOOL_REPO_URL" 29 1 "${MEMPOOL_REPO_URL}" 29 35 35 0 \ +# "MEMPOOL_TESTNET_HTTP_HOST" 30 1 "${MEMPOOL_TESTNET_HTTP_HOST}" 30 35 35 0 \ +# "MEMPOOL_TESTNET_HTTP_PORT" 31 1 "${MEMPOOL_TESTNET_HTTP_PORT}" 31 35 35 0 \ +# "MEMPOOL_TOR_HS" 32 1 "${MEMPOOL_TOR_HS}" 32 35 35 0 \ +# "HOSTNAME" 33 1 "${HOSTNAME}" 33 35 35 0 \ +# "TOR_INSTALL" 34 1 "${TOR_INSTALL}" 34 35 35 0 \ +# "CERTBOT_INSTALL" 35 1 "${CERTBOT_INSTALL}" 35 35 35 0 \ +#2> $tempfile +# +#retval=$? +# +#if [ $retval != $DIALOG_OK ];then +# echo "Installation aborted." +# exit 1 +#fi ############################ # START DOING ACTUAL STUFF # @@ -841,8 +842,6 @@ fi date echo "[*] Mempool installation script for ${OS}" -set -x - ################################### # create filesystems if necessary # ################################### @@ -906,7 +905,7 @@ echo "[*] Installing nvm.sh from GitHub" osSudo "${MEMPOOL_USER}" sh -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | zsh' echo "[*] Building NodeJS via nvm.sh" -osSudo "${MEMPOOL_USER}" zsh -c 'source ~/.zshrc ; nvm install v16.15.0' +osSudo "${MEMPOOL_USER}" zsh -c 'source ~/.zshrc ; nvm install v16.16.0 --shared-zlib' #################### # Tor installation # @@ -925,6 +924,8 @@ if [ "${TOR_INSTALL}" = ON ];then osSudo "${ROOT_USER}" /bin/sh -c "echo HiddenServiceDir ${TOR_RESOURCES}/${MEMPOOL_TOR_HS}/ >> ${TOR_CONFIGURATION}" osSudo "${ROOT_USER}" /bin/sh -c "echo HiddenServicePort 80 127.0.0.1:81 >> ${TOR_CONFIGURATION}" osSudo "${ROOT_USER}" /bin/sh -c "echo HiddenServiceVersion 3 >> ${TOR_CONFIGURATION}" + else + osSudo "${ROOT_USER}" sed -i.orig "s!__TOR_RESOURCES__!${TOR_RESOURCES}!" "${TOR_CONFIGURATION}" fi case $OS in @@ -936,7 +937,7 @@ if [ "${TOR_INSTALL}" = ON ];then # start tor now so it can bootstrap in time for bitcoin starting a few mins later echo "[*] Starting Tor service" - osSudo "${ROOT_USER}" service tor start + osSudo "${ROOT_USER}" service tor restart fi ######################## @@ -1282,7 +1283,25 @@ if [ "${ELEMENTS_LIQUID_ENABLE}" = ON ];then ;; Debian) - osSudo "${ROOT_USER}" install -c -o "${ROOT_USER}" -g "${ROOT_GROUP}" -m 644 "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/linux/liquid.service" "${DEBIAN_SERVICE_HOME}" + osSudo "${ROOT_USER}" install -c -o "${ROOT_USER}" -g "${ROOT_GROUP}" -m 644 "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/linux/elements-liquid.service" "${DEBIAN_SERVICE_HOME}" + ;; + esac +fi + +####################################### +# Bitcoin instance for Liquid Testnet # +####################################### + +if [ "${ELEMENTS_LIQUID_ENABLE}" = ON ];then + echo "[*] Installing Bitcoin Liquid service" + case $OS in + + FreeBSD) + echo "[*] FIXME: Bitcoin Liquid service must be installed manually on FreeBSD" + ;; + + Debian) + osSudo "${ROOT_USER}" install -c -o "${ROOT_USER}" -g "${ROOT_GROUP}" -m 644 "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/linux/elements-liquidtestnet.service" "${DEBIAN_SERVICE_HOME}" ;; esac fi @@ -1340,7 +1359,7 @@ if [ "${ELEMENTS_LIQUID_ENABLE}" = ON ];then echo "[*] Installing Elements crontab" case $OS in FreeBSD) - echo [*] FIXME: must only crontab enabled daemons + echo "[*] FIXME: must only crontab enabled daemons" osSudo "${ROOT_USER}" crontab -u "${ELEMENTS_USER}" "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/elements.crontab" ;; esac @@ -1377,33 +1396,33 @@ fi echo "[*] Installing crontabs" case $OS in FreeBSD) - echo [*] FIXME: must only crontab enabled daemons + echo "[*] FIXME: must only crontab enabled daemons" osSudo "${ROOT_USER}" crontab -u "${BITCOIN_USER}" "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/bitcoin.crontab" osSudo "${ROOT_USER}" crontab -u "${MINFEE_USER}" "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/minfee.crontab" ;; Debian) crontab_bitcoin=() if [ "${BITCOIN_MAINNET_ENABLE}" = ON ];then - echo [*] Installing Electrs Mainnet Cronjob + echo "[*] Installing Electrs Mainnet Cronjob" crontab_bitcoin+="@reboot sleep 30 ; screen -dmS mainnet /bitcoin/electrs/electrs-start-mainnet\n" fi if [ "${BITCOIN_TESTNET_ENABLE}" = ON ];then - echo [*] Installing Electrs Testnet Cronjob + echo "[*] Installing Electrs Testnet Cronjob" crontab_bitcoin+="@reboot sleep 70 ; screen -dmS testnet /bitcoin/electrs/electrs-start-testnet\n" fi if [ "${BITCOIN_SIGNET_ENABLE}" = ON ];then - echo [*] Installing Electrs Signet Cronjob + echo "[*] Installing Electrs Signet Cronjob" crontab_bitcoin+="@reboot sleep 90 ; screen -dmS signet /bitcoin/electrs/electrs-start-signet\n" fi echo "${crontab_bitcoin}" | crontab -u "${BITCOIN_USER}" - crontab_elements=() if [ "${ELEMENTS_LIQUID_ENABLE}" = ON ];then - echo [*] Installing Liquid Asset Mainnet Cronjob + echo "[*] Installing Liquid Asset Mainnet Cronjob" crontab_elements+="6 * * * * cd $HOME/asset_registry_db && git pull origin master >/dev/null 2>&1\n" fi if [ "${ELEMENTS_LIQUIDTESTNET_ENABLE}" = ON ];then - echo [*] Installing Liquid Asset Testnet Cronjob + echo "[*] Installing Liquid Asset Testnet Cronjob" crontab_elements+="6 * * * * cd $HOME/asset_registry_testnet_db && git pull origin master >/dev/null 2>&1\n" fi echo "${crontab_elements}" | crontab -u "${ELEMENTS_USER}" - @@ -1508,6 +1527,12 @@ _EOF_ ##### nginx + +echo "[*] Read tor v3 onion hostnames" +NGINX_MEMPOOL_ONION=$(cat "${TOR_RESOURCES}/mempool/hostname") +NGINX_BISQ_ONION=$(cat "${TOR_RESOURCES}/bisq/hostname") +NGINX_LIQUID_ONION=$(cat "${TOR_RESOURCES}/liquid/hostname") + echo "[*] Adding Nginx configuration" case $OS in @@ -1517,8 +1542,16 @@ case $OS in Debian) osSudo "${ROOT_USER}" install -c -o "${ROOT_USER}" -g "${ROOT_GROUP}" -m 644 "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/nginx/nginx.conf" "${NGINX_CONFIGURATION}" -#echo "[*] Restarting Nginx" -#osSudo "${ROOT_USER}" service nginx restart + mkdir -p /var/cache/nginx/services /var/cache/nginx/api + chown www-data: /var/cache/nginx/services /var/cache/nginx/api + ln -s /mempool/mempool /etc/nginx/mempool + osSudo "${ROOT_USER}" sed -i.orig "s!__NGINX_USER__!www-data!" "${NGINX_CONFIGURATION}" + osSudo "${ROOT_USER}" sed -i.orig "s!__NGINX_ETC_FOLDER__!${NGINX_ETC_FOLDER}!" "${NGINX_CONFIGURATION}" + osSudo "${ROOT_USER}" sed -i.orig "s!__NGINX_MEMPOOL_ONION__!${NGINX_MEMPOOL_ONION%.onion}!" "${NGINX_CONFIGURATION}" + osSudo "${ROOT_USER}" sed -i.orig "s!__NGINX_BISQ_ONION__!${NGINX_BISQ_ONION%.onion}!" "${NGINX_CONFIGURATION}" + osSudo "${ROOT_USER}" sed -i.orig "s!__NGINX_LIQUID_ONION__!${NGINX_LIQUID_ONIONi%.onion}!" "${NGINX_CONFIGURATION}" + echo "[*] Restarting Nginx" + osSudo "${ROOT_USER}" service nginx restart ;; esac @@ -1551,7 +1584,10 @@ case $OS in osSudo "${ROOT_USER}" systemctl enable bisq.service fi if [ "${ELEMENTS_LIQUID_ENABLE}" = ON ];then - osSudo "${ROOT_USER}" systemctl enable liquid.service + osSudo "${ROOT_USER}" systemctl enable elements-liquid.service + fi + if [ "${ELEMENTS_LIQUIDTESTNET_ENABLE}" = ON ];then + osSudo "${ROOT_USER}" systemctl enable elements-liquidtestnet.service fi ;; esac @@ -1575,7 +1611,10 @@ EOF ;; esac +##### Build Mempool +echo "[*] Build Mempool" +osSudo "${MEMPOOL_USER}" sh -c "cd ${MEMPOOL_HOME} && ./upgrade" @@ -1654,8 +1693,21 @@ esac ##### finish -echo 'Please reboot to start all the services.' +case $OS in + FreeBSD) + ;; + + Debian) + echo "This are the generated Tor addresses:" + echo "${NGINX_MEMPOOL_ONION}" + echo "${NGINX_BISQ_ONION}" + echo "${NGINX_LIQUID_ONION}" + ;; +esac + +echo +echo 'Please reboot to start all the services.' echo '[*] Done!' exit 0 diff --git a/production/linux/elements-testnet.service b/production/linux/elements-liquid.service similarity index 74% rename from production/linux/elements-testnet.service rename to production/linux/elements-liquid.service index ff57c247b..0dd42e130 100644 --- a/production/linux/elements-testnet.service +++ b/production/linux/elements-liquid.service @@ -1,13 +1,13 @@ [Unit] -Description=Elementsd +Description=Elementsd-liquid After=network.target [Service] -ExecStart=/usr/local/bin/elementsd -daemon -printtoconsole -chain=liquidtestnet -pid=/elements/elements-testnet.pid +ExecStart=/usr/local/bin/elementsd -daemon -printtoconsole -chain=liquidv1 -pid=/elements/elements-liquid.pid ExecStop=/usr/local/bin/elements-cli stop Type=forking -PIDFile=/elements/elements-testnet.pid +PIDFile=/elements/elements-liquid.pid Restart=on-failure User=elements diff --git a/production/linux/elements.service b/production/linux/elements-liquidtestnet.service similarity index 69% rename from production/linux/elements.service rename to production/linux/elements-liquidtestnet.service index 84f79abaa..febefd7da 100644 --- a/production/linux/elements.service +++ b/production/linux/elements-liquidtestnet.service @@ -1,13 +1,13 @@ [Unit] -Description=Elementsd +Description=Elementsd-liquidtestnet After=network.target [Service] -ExecStart=/usr/local/bin/elementsd -daemon -printtoconsole -chain=liquidv1 -pid=/elements/elements.pid +ExecStart=/usr/local/bin/elementsd -daemon -printtoconsole -chain=liquidtestnet -pid=/elements/elements-liquidtestnet.pid ExecStop=/usr/local/bin/elements-cli stop Type=forking -PIDFile=/elements/elements.pid +PIDFile=/elements/elements-liquidtestnet.pid Restart=on-failure User=elements diff --git a/production/nginx/nginx.conf b/production/nginx/nginx.conf index 24f389533..83a794e51 100644 --- a/production/nginx/nginx.conf +++ b/production/nginx/nginx.conf @@ -1,4 +1,4 @@ -user nobody; +user __NGINX_USER__; pid /var/run/nginx.pid; worker_processes auto; @@ -10,11 +10,11 @@ events { } http { - # DNS servers for on-demand recursive resolver + # DNS servers for on-demand resolution, change if desired resolver 8.8.8.8; # include default mime types - include /usr/local/etc/nginx/mime.types; + include __NGINX_ETC_FOLDER__/mime.types; default_type application/octet-stream; # HTTP basic configuration @@ -32,9 +32,13 @@ http { # MEMPOOL.NINJA server { # clearnet v4/v6 - listen 443 ssl http2; - listen [::]:443 ssl http2; - server_name mempool.ninja; + #listen 443 ssl http2; + #listen [::]:443 ssl http2; + server_name _; + + # tor v3 + listen 127.0.0.1:81; + set $onion "__NGINX_MEMPOOL_ONION__"; # for services from mempool.space like contributors on about page set $mempoolSpaceServices "https://mempool.space"; @@ -52,30 +56,24 @@ http { set $esploraTestnet "http://esplora-bitcoin-testnet"; set $esploraSignet "http://esplora-bitcoin-signet"; - # tor v3 - listen 127.0.0.1:81; - set $onion "mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad"; - # filesystem paths root /mempool/public_html/mainnet/; access_log /var/log/nginx/mempool-access.log; error_log /var/log/nginx/mempool-error.log; - # ssl configuration - ssl_certificate /usr/local/etc/letsencrypt/live/mempool.ninja/fullchain.pem; - ssl_certificate_key /usr/local/etc/letsencrypt/live/mempool.ninja/privkey.pem; - include /usr/local/etc/letsencrypt/options-ssl-nginx.conf; - ssl_dhparam /usr/local/etc/letsencrypt/ssl-dhparams.pem; - # site configuration include mempool/production/nginx/server-mempool.conf; } # BISQ.NINJA server { # clearnet v4/v6 - listen 443 ssl http2; - listen [::]:443 ssl http2; - server_name bisq.ninja; + #listen 443 ssl http2; + #listen [::]:443 ssl http2; + server_name _; + + # tor v3 + listen 127.0.0.1:82; + set $onion "__NGINX_BISQ_ONION__"; # for services from mempool.space like contributors on about page set $mempoolSpaceServices "https://mempool.space"; @@ -86,30 +84,24 @@ http { # for blockstream/esplora daemon, see upstream-esplora.conf set $esploraMainnet "http://esplora-bitcoin-mainnet"; - # tor v3 - listen 127.0.0.1:82; - set $onion "bisqmktse2cabavbr2xjq7xw3h6g5ottemo5rolfcwt6aly6tp5fdryd"; - # filesystem paths root /mempool/public_html/bisq/; access_log /var/log/nginx/bisq-access.log; error_log /var/log/nginx/bisq-error.log; - # ssl configuration - ssl_certificate /usr/local/etc/letsencrypt/live/bisq.ninja/fullchain.pem; - ssl_certificate_key /usr/local/etc/letsencrypt/live/bisq.ninja/privkey.pem; - include /usr/local/etc/letsencrypt/options-ssl-nginx.conf; - ssl_dhparam /usr/local/etc/letsencrypt/ssl-dhparams.pem; - # site configuration include mempool/production/nginx/server-bisq.conf; } # LIQUID.PLACE server { # clearnet v4/v6 - listen 443 ssl http2; - listen [::]:443 ssl http2; - server_name liquid.place; + #listen 443 ssl http2; + #listen [::]:443 ssl http2; + server_name _; + + # tor v3 + listen 127.0.0.1:83; + set $onion "__NGINX_LIQUID_ONION__"; # for services from mempool.space like contributors on about page set $mempoolSpaceServices "https://mempool.space"; @@ -122,36 +114,12 @@ http { set $esploraMainnet "http://esplora-liquid-mainnet"; set $esploraTestnet "http://esplora-liquid-testnet"; - # tor v3 - listen 127.0.0.1:83; - set $onion "liquidmom47f6s3m53ebfxn47p76a6tlnxib3wp6deux7wuzotdr6cyd"; - # filesystem paths root /mempool/public_html/liquid/; access_log /var/log/nginx/liquid-access.log; error_log /var/log/nginx/liquid-error.log; - # ssl configuration - ssl_certificate /usr/local/etc/letsencrypt/live/liquid.place/fullchain.pem; - ssl_certificate_key /usr/local/etc/letsencrypt/live/liquid.place/privkey.pem; - include /usr/local/etc/letsencrypt/options-ssl-nginx.conf; - ssl_dhparam /usr/local/etc/letsencrypt/ssl-dhparams.pem; - # site configuration include mempool/production/nginx/server-liquid.conf; } - # HTTP to HTTPS redirect - server { - # clearnet v4/v6 - listen 80; - listen [::]:80; - server_name _; - - # only redirect for our hosted domains - if ($host ~ "^(mempool.ninja|bisq.ninja|liquid.place)$") - { - return 301 https://$host$request_uri; - } - return 503; - } } diff --git a/production/torrc b/production/torrc index 9adace613..454cafba0 100644 --- a/production/torrc +++ b/production/torrc @@ -3,21 +3,21 @@ SOCKSPort 9050 ControlPort 9051 Log notice syslog -DataDirectory /var/db/tor +DataDirectory __TOR_RESOURCES__ DataDirectoryGroupReadable 1 CookieAuthentication 1 -CookieAuthFile /var/db/tor/control_auth_cookie +CookieAuthFile __TOR_RESOURCES__/control_auth_cookie CookieAuthFileGroupReadable 1 -HiddenServiceDir /var/db/tor/mempool +HiddenServiceDir __TOR_RESOURCES__/mempool HiddenServicePort 80 127.0.0.1:81 HiddenServiceVersion 3 -HiddenServiceDir /var/db/tor/bisq +HiddenServiceDir __TOR_RESOURCES__/bisq HiddenServicePort 80 127.0.0.1:82 HiddenServiceVersion 3 -HiddenServiceDir /var/db/tor/liquid +HiddenServiceDir __TOR_RESOURCES__/liquid HiddenServicePort 80 127.0.0.1:83 HiddenServiceVersion 3