diff --git a/.dockerignore b/.dockerignore index 8a5a20c6..862cda4c 100644 --- a/.dockerignore +++ b/.dockerignore @@ -11,9 +11,10 @@ prerender-server/node_modules data_bitcoin_mainnet data_liquid_mainnet data_bitcoin_testnet +data_bitcoin_testnet4 data_bitcoin_regtest data_liquid_regtest www/libwally data_liquid_testnet data_bitcoin_signet -gitlab/ \ No newline at end of file +gitlab/ diff --git a/README.md b/README.md index f811543b..abbba2de 100644 --- a/README.md +++ b/README.md @@ -173,6 +173,15 @@ docker run -p 50001:50001 -p 8084:80 \ bash -c "/srv/explorer/run.sh bitcoin-testnet explorer" ``` +## How to run the explorer for Bitcoin testnet4 + +``` +docker run -p 50001:50001 -p 8084:80 \ + --volume $PWD/data_bitcoin_testnet4:/data \ + --rm -i -t esplora \ + bash -c "/srv/explorer/run.sh bitcoin-testnet4 explorer" +``` + ## How to run the explorer for Bitcoin signet ```bash diff --git a/contrib/Dockerfile b/contrib/Dockerfile index 6f7b63a0..87eb3de3 100644 --- a/contrib/Dockerfile +++ b/contrib/Dockerfile @@ -26,6 +26,8 @@ RUN source /root/.nvm/nvm.sh \ npm run dist -- bitcoin-mainnet \ && DEST=/srv/explorer/static/bitcoin-testnet \ npm run dist -- bitcoin-testnet \ + && DEST=/srv/explorer/static/bitcoin-testnet4 \ + npm run dist -- bitcoin-testnet4 \ && DEST=/srv/explorer/static/bitcoin-signet \ npm run dist -- bitcoin-signet \ && DEST=/srv/explorer/static/bitcoin-regtest \ @@ -40,6 +42,8 @@ RUN source /root/.nvm/nvm.sh \ npm run dist -- bitcoin-mainnet blockstream \ && DEST=/srv/explorer/static/bitcoin-testnet-blockstream \ npm run dist -- bitcoin-testnet blockstream \ + && DEST=/srv/explorer/static/bitcoin-testnet4-blockstream \ + npm run dist -- bitcoin-testnet4 blockstream \ && DEST=/srv/explorer/static/bitcoin-signet-blockstream \ npm run dist -- bitcoin-signet blockstream \ && DEST=/srv/explorer/static/bitcoin-regtest-blockstream \ diff --git a/contrib/Dockerfile.base b/contrib/Dockerfile.base index 2a185dbb..65c47208 100644 --- a/contrib/Dockerfile.base +++ b/contrib/Dockerfile.base @@ -31,10 +31,10 @@ RUN git clone --quiet --depth 1 --single-branch --branch v0.40.1 https://github. ARG TARGETARCH ENV SHA256SUM_ELEMENTS_X86_64="86e3061a6cb82ea979954d7b187442b6a104648c26bda2ddf297e513b5d53c51" ENV SHA256SUM_ELEMENTS_ARM64="e44566fad37cb632fa7b4d288e6e20fb3af26745a20950da8c55997ad427e05c" -ENV SHA256SUM_BITCOINCORE_X86_64="acc223af46c178064c132b235392476f66d486453ddbd6bca6f1f8411547da78" -ENV SHA256SUM_BITCOINCORE_ARM64="154c9b9e6e17136edc8f20fda5d252fb339e727e4a85ef49e7d8facb9085f2d3" +ENV SHA256SUM_BITCOINCORE_X86_64="98add5f220c01b387343b70edeb6273403fe081e22cd85fda132704cdcaa98aa" +ENV SHA256SUM_BITCOINCORE_ARM64="10581b6d4aeb091c08c9e69eb4e4ced000038c009286dc1edb8a876656ccf6df" -ENV VERSION_BITCOINCORE=27.2 +ENV VERSION_BITCOINCORE=28.2 RUN if [ "${TARGETARCH}" = "arm64" ]; then \ curl -sL -o bitcoin.tar.gz "https://bitcoincore.org/bin/bitcoin-core-${VERSION_BITCOINCORE}/bitcoin-${VERSION_BITCOINCORE}-aarch64-linux-gnu.tar.gz"; \ echo "${SHA256SUM_BITCOINCORE_ARM64} bitcoin.tar.gz" | sha256sum --check; \ @@ -65,7 +65,7 @@ RUN source /root/.cargo/env \ && mkdir -p /srv/explorer/electrs{,_liquid} \ && git clone --no-checkout https://github.com/blockstream/electrs.git \ && (cd electrs \ - && git checkout 306f66acf2ab10bcd99b8012e95a0de30b2cc012 \ + && git checkout fee74a0450bc28f50f89d8115c8434844088d469 \ && cp contrib/popular-scripts.txt /srv/explorer \ && cargo install --root /srv/explorer/electrs_bitcoin --locked --path . --features electrum-discovery \ && cargo install --root /srv/explorer/electrs_liquid --locked --path . --features electrum-discovery,liquid \ diff --git a/contrib/bitcoin-testnet4-explorer.conf.in b/contrib/bitcoin-testnet4-explorer.conf.in new file mode 100644 index 00000000..0da574e0 --- /dev/null +++ b/contrib/bitcoin-testnet4-explorer.conf.in @@ -0,0 +1,11 @@ +testnet4=1 +[testnet4] +server=1 +peerbloomfilters=0 +enforcenodebloom=1 +disablewallet=1 +listenonion=1 +listen=1 +mempoolfullrbf=1 +blocknotify=pkill -USR1 electrs +maxmempool=1000 diff --git a/flavors/bitcoin-testnet4/config.env b/flavors/bitcoin-testnet4/config.env new file mode 100755 index 00000000..46105212 --- /dev/null +++ b/flavors/bitcoin-testnet4/config.env @@ -0,0 +1,12 @@ +#!/bin/bash + +export SITE_TITLE='Bitcoin Testnet4 Explorer' +export HOME_TITLE='Bitcoin Testnet4 Explorer' +export NATIVE_ASSET_LABEL=tBTC +export NATIVE_ASSET_NAME='Bitcoin Testnet4' + +export MENU_ACTIVE='Bitcoin Testnet4' +export BASE_HREF=${BASE_HREF:-'/testnet4/'} + +export CUSTOM_ASSETS="$CUSTOM_ASSETS flavors/bitcoin-testnet4/www/*" +export CUSTOM_CSS="$CUSTOM_CSS flavors/bitcoin-testnet4/extras.css" diff --git a/flavors/bitcoin-testnet4/extras.css b/flavors/bitcoin-testnet4/extras.css new file mode 100644 index 00000000..14ab3d3a --- /dev/null +++ b/flavors/bitcoin-testnet4/extras.css @@ -0,0 +1,71 @@ +#BitcoinTestnet, #LiquidTestnet{ + display: block; +} + +#Bitcoin, #Liquid{ + display: none; +} + +.main-nav li.active a{ + border: 1px solid rgba(168, 184, 201, 1); +} + +.sub-nav .active { + border-bottom: solid 2px rgba(168, 184, 201, 1); +} + +.details-btn > div { + color: rgba(168, 184, 201, 1); + border: 1px solid rgba(168, 184, 201, 1); +} + +.transaction-box > .footer > div:nth-child(3) { + color: rgba(168, 184, 201, 1); +} + +.navbar { + background-image: linear-gradient(-90deg, rgba(84, 103, 124, 1) 0%, rgba(29, 72, 111, 1) 18%, rgba(24, 53, 80, 1) 36%, rgba(29, 37, 48, 1) 58%, rgba(14, 16, 17, 1) 100%); +} + +.sub-nav a sup.highlight{ + display: none; +} + +.main-nav li a{ + color: #78838e; +} + +.nav-link:hover{ + color: white !important; +} + +.sub-navbar:before { + content: "Bitcoin Testnet4 is used for testing. Funds have no value!"; + width: 100%; + height: 35px; + background: #ba042a; + position: absolute; + margin-top: -10px; + text-align: center; + font-size: 14px; + line-height: 2.4; +} + +.sub-nav-container{ + margin-top: 25px; +} + +.table-title, .block-header-title, .transaction-header-title{ + display: flex; +} + +.table-title:after, .block-header-title:after, .transaction-header-title:after { + content: "Testnet4"; + font-size: 13px; + background-color: rgb(48 59 70); + padding: 3px 12px; + border-radius: 30px; + margin-left: 15px; + display: inline-block; + align-self: center; +} diff --git a/flavors/bitcoin-testnet4/www/img/block.png b/flavors/bitcoin-testnet4/www/img/block.png new file mode 100644 index 00000000..34e97f0d Binary files /dev/null and b/flavors/bitcoin-testnet4/www/img/block.png differ diff --git a/flavors/bitcoin-testnet4/www/img/favicon.png b/flavors/bitcoin-testnet4/www/img/favicon.png new file mode 100644 index 00000000..2a954284 Binary files /dev/null and b/flavors/bitcoin-testnet4/www/img/favicon.png differ diff --git a/flavors/bitcoin-testnet4/www/img/icons/menu-logo.svg b/flavors/bitcoin-testnet4/www/img/icons/menu-logo.svg new file mode 100644 index 00000000..99ae109c --- /dev/null +++ b/flavors/bitcoin-testnet4/www/img/icons/menu-logo.svg @@ -0,0 +1,11 @@ + + + btc_test + + + + + + + + \ No newline at end of file diff --git a/flavors/bitcoin-testnet4/www/img/icons/minus.png b/flavors/bitcoin-testnet4/www/img/icons/minus.png new file mode 100644 index 00000000..d8c84942 Binary files /dev/null and b/flavors/bitcoin-testnet4/www/img/icons/minus.png differ diff --git a/flavors/bitcoin-testnet4/www/img/icons/plus.png b/flavors/bitcoin-testnet4/www/img/icons/plus.png new file mode 100644 index 00000000..de3d03b9 Binary files /dev/null and b/flavors/bitcoin-testnet4/www/img/icons/plus.png differ diff --git a/flavors/bitcoin-testnet4/www/img/icons/search.png b/flavors/bitcoin-testnet4/www/img/icons/search.png new file mode 100644 index 00000000..6476e512 Binary files /dev/null and b/flavors/bitcoin-testnet4/www/img/icons/search.png differ diff --git a/flavors/bitcoin-testnet4/www/img/transaction.png b/flavors/bitcoin-testnet4/www/img/transaction.png new file mode 100644 index 00000000..f4a6cb09 Binary files /dev/null and b/flavors/bitcoin-testnet4/www/img/transaction.png differ diff --git a/run.sh b/run.sh index cebacfdc..a9fd846d 100755 --- a/run.sh +++ b/run.sh @@ -10,7 +10,7 @@ SYNC_SOURCE=$5 NGINX_GCLB_IP=${NGINX_GCLB_IP:-34.36.36.12} # bs.info if [ -z "$FLAVOR" ] || [ ! -d /srv/explorer/static/$FLAVOR ]; then - echo "Please provide bitcoin-mainnet, bitcoin-testnet, bitcoin-signet, bitcoin-regtest, liquid-mainnet, liquid-testnet or liquid-regtest as a parameter" + echo "Please provide bitcoin-mainnet, bitcoin-testnet, bitcoin-testnet4, bitcoin-signet, bitcoin-regtest, liquid-mainnet, liquid-testnet or liquid-regtest as a parameter" echo "For example run.sh bitcoin-mainnet explorer" exit 1 fi @@ -26,7 +26,9 @@ ELECTRS_NETWORK=${NETWORK} DAEMON_DIR="/data/$DAEMON" if [ "$DAEMON-$NETWORK" == "bitcoin-testnet" ]; then - DAEMON_DIR="$DAEMON_DIR/testnet3" + DAEMON_DIR="$DAEMON_DIR/testnet" +elif [ "$DAEMON-$NETWORK" == "bitcoin-testnet4" ]; then + DAEMON_DIR="$DAEMON_DIR/testnet4" elif [ "$DAEMON-$NETWORK" == "bitcoin-signet" ]; then DAEMON_DIR="$DAEMON_DIR/signet" elif [ "$DAEMON-$NETWORK" == "liquid-mainnet" ]; then @@ -54,7 +56,7 @@ NGINX_REWRITE_NOJS='return 301 " /nojs$uri"' NGINX_CSP="default-src 'self'; script-src 'self' 'unsafe-eval'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; font-src 'self' data:; object-src 'none'" if [ "${DAEMON}" != "liquid" ]; then - if [ "$NETWORK" == "testnet" ] || [ "$NETWORK" == "signet" ] || [ "$NETWORK" == "regtest" ]; then + if [ "$NETWORK" == "testnet" ] || [ "$NETWORK" == "testnet4" ] || [ "$NETWORK" == "signet" ] || [ "$NETWORK" == "regtest" ]; then NGINX_PATH="$NETWORK/" NGINX_NOSLASH_PATH="$NETWORK" NGINX_REWRITE='rewrite ^/'$NETWORK'(/.*)$ $1 break;'