diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ae11061..bd5809d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -138,9 +138,6 @@ jobs: labels: ${{ steps.meta.outputs.labels }} cache-from: type=registry,ref=zone117x/stacks-api-e2e:latest cache-to: type=inline - build-args: | - STACKS_21_HEIGHT=3 - STACKS_POX2_HEIGHT=4 build-push-stacks2_1-transition-docker: needs: build-stacks-node diff --git a/Dockerfile.e2e b/Dockerfile.e2e index ab2787d..39e9acb 100644 --- a/Dockerfile.e2e +++ b/Dockerfile.e2e @@ -2,7 +2,7 @@ FROM rust:bullseye as builder -ARG GIT_COMMIT=fe314a0b6650ecfa138e15c7ed4014fa829037ef +ARG GIT_COMMIT=3c6e4eb2e30dedd018085fc7ff3b340bd7dfcb2f ARG TARGETPLATFORM ENV DEBIAN_FRONTEND noninteractive @@ -40,6 +40,13 @@ ENV DEBIAN_FRONTEND noninteractive RUN apt-get update && apt-get install -y curl/bullseye-backports gettext-base jq RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* +# Install NodeJS +RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && apt-get install -y nodejs + +WORKDIR /root + +RUN npm init -y && npm install stacks-encoding-native-js@0.2.0-alpha.0 + VOLUME /chainstate # Stacks-node RPC @@ -61,12 +68,21 @@ ENV BITCOIN_RPC_PASS=btc ARG MINE_INTERVAL=5s ENV MINE_INTERVAL=$MINE_INTERVAL -ARG STACKS_21_HEIGHT=103 +ARG STACKS_20_HEIGHT=103 +ENV STACKS_20_HEIGHT=$STACKS_20_HEIGHT + +ARG STACKS_2_05_HEIGHT=104 +ENV STACKS_2_05_HEIGHT=$STACKS_2_05_HEIGHT + +ARG STACKS_21_HEIGHT=105 ENV STACKS_21_HEIGHT=$STACKS_21_HEIGHT -ARG STACKS_POX2_HEIGHT=104 +ARG STACKS_POX2_HEIGHT=106 ENV STACKS_POX2_HEIGHT=$STACKS_POX2_HEIGHT +ARG STACKS_LOG_DEBUG=0 +ENV STACKS_LOG_DEBUG=$STACKS_LOG_DEBUG + # priv: 6ad9cadb42d4edbfbe0c5bfb3b8a4125ddced021c4174f829b714ccbf527f02001 # ARG REWARD_RECIPIENT=STQM73RQC4EX0A07KWG1J5ECZJYBZS4SJ4ERC6WN ARG REWARD_RECIPIENT @@ -74,12 +90,12 @@ ENV REWARD_RECIPIENT=$REWARD_RECIPIENT COPY ./bitcoin.conf /root/.bitcoin/bitcoin.conf COPY ./stacks-krypton-miner.toml /root/config.toml.in +COPY ./event-observer.js /root/event-observer.js -WORKDIR /root - -# Bootstrap chainstates -SHELL ["/bin/bash", "-ce"] +# Create run script RUN < run.sh <<'EOM' +#!/bin/bash -e if [[ ! -z "${REWARD_RECIPIENT}" ]]; then export REWARD_RECIPIENT_CONF="block_reward_recipient = \"$REWARD_RECIPIENT\"" fi @@ -92,6 +108,9 @@ RUN < config.toml stacks-node start --config=config.toml & @@ -103,35 +122,10 @@ RUN < run.sh <<'EOM' -#!/bin/bash -e - if [[ ! -z "${REWARD_RECIPIENT}" ]]; then - export REWARD_RECIPIENT_CONF="block_reward_recipient = \"$REWARD_RECIPIENT\"" - fi - - bitcoind & - BTCD_PID=$! - - bitcoin-cli -rpcwait getmininginfo - - envsubst < config.toml.in > config.toml - stacks-node start --config=config.toml & - STACKS_PID=$! - function start_miner() { - bitcoin-cli -rpcwait generatetoaddress 1 $BTC_ADDR while true; do TX=$(bitcoin-cli listtransactions '*' 1 0 true) CONFS=$(echo "$TX" | jq '.[].confirmations') @@ -148,6 +142,8 @@ cat > run.sh <<'EOM' echo "Exiting, signal: $1" kill $STACKS_PID 2>/dev/null && echo "Stacks exiting.." wait $STACKS_PID 2>/dev/null && echo "Stacks exited" + kill $EVENT_OBSERVER_PID 2>/dev/null && echo "Event-observer exiting.." + wait $EVENT_OBSERVER_PID 2>/dev/null && echo "Event-observer exited" kill $BTCD_PID 2>/dev/null && echo "Bitcoind exiting.." wait $BTCD_PID 2>/dev/null && echo "Bitcoind exited" } diff --git a/docker-compose.yml b/docker-compose.yml index f4f42b3..c2e6a6f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,8 +9,10 @@ x-common-vars: - &BITCOIN_RPC_USER btc - &BITCOIN_RPC_PASS btc - &MINE_INTERVAL ${MINE_INTERVAL:-0.5s} - - &STACKS_21_HEIGHT ${STACKS_21_HEIGHT:-103} - - &STACKS_POX2_HEIGHT ${STACKS_POX2_HEIGHT:-104} # 104 is is stacks_block=1, 106 is stacks_block=3 + - &STACKS_20_HEIGHT ${STACKS_20_HEIGHT:-104} + - &STACKS_2_05_HEIGHT ${STACKS_2_05_HEIGHT:-105} + - &STACKS_21_HEIGHT ${STACKS_21_HEIGHT:-106} + - &STACKS_POX2_HEIGHT ${STACKS_POX2_HEIGHT:-106} # 104 is is stacks_block=1, 106 is stacks_block=3 - &REWARD_RECIPIENT ${REWARD_RECIPIENT:-STQM73RQC4EX0A07KWG1J5ECZJYBZS4SJ4ERC6WN} # priv: 6ad9cadb42d4edbfbe0c5bfb3b8a4125ddced021c4174f829b714ccbf527f02001 services: @@ -203,7 +205,7 @@ services: context: . dockerfile: Dockerfile.stacks-api args: - GIT_COMMIT: 4a332f353ee10802fa7b04e888b32e54d010a69d + GIT_COMMIT: e34fab5e5d92222433b19021c584da903b64f27a depends_on: - postgres ports: diff --git a/event-log.json b/event-log.json new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/event-log.json @@ -0,0 +1 @@ + diff --git a/event-observer.js b/event-observer.js new file mode 100755 index 0000000..1605978 --- /dev/null +++ b/event-observer.js @@ -0,0 +1,33 @@ +#!/usr/bin/env node + +const http = require('http'); +const fs = require('fs'); +const decodeTransaction = require('stacks-encoding-native-js').decodeTransaction; + +const server = http.createServer((request, response) => { + const { headers, method, url } = request; + let body = []; + request.on('error', (err) => { + console.error(err); + response.writeHead(500).end(); + }).on('data', (chunk) => { + body.push(chunk); + }).on('end', () => { + body = JSON.parse(Buffer.concat(body).toString()); + if (body.transactions) { + for (const transaction of body.transactions) { + transaction.decoded_tx = decodeTransaction(transaction.raw_tx) + } + } + console.log(url, body); + fs.appendFileSync('/event-log.json', `["${url}",${JSON.stringify(body)}]\n`); + response.writeHead(200).end(); + }); +}); +server.listen(3998, '0.0.0.0', () => { + console.log(`Event-observer started on: ${server.address().address}:${server.address().port}`); +}); + +process.on('exit', (code) => { + console.log(`Event-observer to exit with code: ${code}`); +}); diff --git a/readme-dev.md b/readme-dev.md new file mode 100644 index 0000000..b069521 --- /dev/null +++ b/readme-dev.md @@ -0,0 +1,11 @@ +### Locally build and test e2e dockerfile + +First build: +```shell +docker build -t e2e-test -f Dockerfile.e2e . +``` + +Then run: +```shell +docker run --rm -p "20443:20443" -e MINE_INTERVAL=0.01s -v "$(pwd)"/event-log.json:/event-log.json e2e-test +``` diff --git a/stacks-krypton-miner.toml b/stacks-krypton-miner.toml index c0d0266..e8df0e4 100644 --- a/stacks-krypton-miner.toml +++ b/stacks-krypton-miner.toml @@ -9,15 +9,20 @@ local_peer_seed = "$MINER_SEED" miner = true use_test_genesis_chainstate = true -pox_sync_sample_secs = 0 +pox_sync_sample_secs = 1 wait_time_for_blocks = 0 wait_time_for_microblocks = 50 microblock_frequency = 1000 # mine_microblocks = true # max_microblocks = 10 +[[events_observer]] +endpoint = "localhost:3998" +retry_count = 255 +events_keys = ["*"] + [miner] -first_attempt_time_ms = 5000 +first_attempt_time_ms = 30000 subsequent_attempt_time_ms = 5000 $REWARD_RECIPIENT_CONF @@ -51,11 +56,11 @@ start_height = 0 [[burnchain.epochs]] epoch_name = "2.0" -start_height = 1 +start_height = $STACKS_20_HEIGHT [[burnchain.epochs]] epoch_name = "2.05" -start_height = 2 +start_height = $STACKS_2_05_HEIGHT [[burnchain.epochs]] epoch_name = "2.1"