Stacks 2.4
Stacks node and api
sync using Hiro archive
build and run stacks node
run api node
Power on
Leibniz;
btc-start-testnet
docker start bridge_api_staging
docker start revealer_api_staging
cd /mnt/bitcoin-testnet/stacks-testnet/stacks-blockchain-api
sn-run-api
cd /mnt/bitcoin-testnet/stacks-testnet/stacks-core/testnet/stacks-node
sn-run
check https://leibniz.brightblock.org/v2/info
Spinoza
btc-start-mainnet
docker start bridge_api_production
docker start revealer_api_production
cd /mnt/stacks-mainnet/stacks-blockchain-api
sn-run-api
cd /mnt/stacks-mainnet/stacks-core/testnet/stacks-node
sn-run
check https://spinoza.brightblock.org/v2/info
Archives
//data
wget https://archive.hiro.so/testnet/token-metadata-api-pg/token-metadata-api-pg-15-latest.dump
wget https://archive.hiro.so/testnet/stacks-blockchain/testnet-stacks-blockchain-latest.tar.gz
wget https://archive.hiro.so/testnet/stacks-blockchain-api-pg/stacks-blockchain-api-pg-15-latest.dump
Extract data
cd /mnt/bitcoin-testnet/stacks-testnet/archives
tar -zxvf testnet-stacks-blockchain-latest.tar.gz -C ../
Extract code
// code -> https://github.com/stacks-network/stacks-core/releases/tag/2.4.0.1.0
wget https://github.com/stacks-network/stacks-core/releases/download/2.4.0.1.0/linux-glibc-x64.zip
tar -zxvf 2.4.0.1.0.tar.gz -C ../
wget https://github.com/hirosystems/stacks-blockchain-api/archive/refs/tags/v7.9.0.tar.gz
tar -zxvf v7.9.0.tar.gz -C ../
ln -s stacks-core-2.4.0.1.0 stacks-core
ln -s stacks-blockchain-api-7.9.0 stacks-blockchain-api
Configure stacks node
// node expects data -> working_dir + / + mode
cat /mnt/bitcoin-testnet/stacks-testnet/stacks-core-2.4.0.1.0/testnet/stacks-node/conf/testnet-follower-conf.toml
1. working_dir = "/mnt/bitcoin-testnet/stacks-testnet"
2. uncomment events secions
Manage stacks node
> sn-run // nohup cargo run --bin stacks-node -- start --config ./conf/testnet-follower-conf.toml &
> sn-tail // tail -f -n 50 /mnt/bitcoin-testnet/stacks-testnet/stacks-core/testnet/stacks-node/nohup.out
> sn-stop // sudo kill $(ps -ef | grep "stacks-node start --config" | grep -v grep | awk {'print $2'})
> sn-check-api // ps -ef | grep "stacks-node start --config" | grep -v grep
// check
http://spinoza.brightblock.org:20443/v2/info # mainnet
http://leibniz.brightblock.org:20443/v2/info # testnet
Api as docker
Environment (.env)
NODE_ENV=production
GIT_TAG=master
PG_HOST=localhost
PG_PORT=5432
PG_USER=postgres
PG_PASSWORD=postgres
PG_DATABASE=postgres
STACKS_CHAIN_ID=0x80000000
V2_POX_MIN_AMOUNT_USTX=90000000260
STACKS_CORE_EVENT_PORT=3700
STACKS_CORE_EVENT_HOST=0.0.0.0
STACKS_BLOCKCHAIN_API_PORT=3999
STACKS_BLOCKCHAIN_API_HOST=0.0.0.0
STACKS_BLOCKCHAIN_API_DB=pg
STACKS_CORE_RPC_HOST=localhost
STACKS_CORE_RPC_PORT=20443
BNS_IMPORT_DIR=/bns-data
Docker command
docker run -d --rm \
--name stacks-blockchain-api \
--net=stacks-blockchain \
--env-file $(pwd)/.env \
-v $(pwd)/bns:/bns-data \
-p 5432:5432 \
-p 20443:20443 \
-p 20444:20444 \
-p 3700:3700 \
-p 3999:3999 \
blockstack/stacks-blockchain-api
Api as service
see here (requires nodejs, see below) run api from source
git clone https://github.com/hirosystems/stacks-blockchain-api.git
git switch v7.8.2 --detach
ln -s stacks-blockchain-api-7.8.2 stacks-blockchain-api
cd stacks-blockchain-api
echo "GIT_TAG=$(git tag --points-at HEAD)" >> .env
npm install
npm run build
npm prune --production
Import from tsv file
node ./lib/index.js import-events --file /mnt/bitcoin-testnet/stacks-testnet/archives/testnet-stacks-blockchain-api-7.8.2-20240322.tsv --wipe-db --force
Manage api service
> sn-run-api
> sn-tail-api
> sn-stop-api // sudo kill $(ps -ef | grep "lib/index.js" | grep -v grep | awk {'print $2'})
> sn-check-api // ps -ef | grep "lib/index.js" | grep -v grep
Postgres docker
Mount on partition and load dump file
docker run -d --rm --name postgres --net=stacks-blockchain -e POSTGRES_PASSWORD=postgres -v /mnt/bitcoin-testnet/stacks-testnet/postgres-docker:/var/lib/postgresql/data -p 5432:5432 postgres:alpine
# copy dump file inside
docker cp /mnt/bitcoin-testnet/stacks-testnet/archives/stacks-blockchain-api-pg-15-latest.dump postgres:/stacks-blockchain-api-pg-15-latest.dump
docker cp /mnt/bitcoin-testnet/stacks-testnet/archives/token-metadata-api-pg-15-latest.dump postgres:/token-metadata-api-pg-15-latest.dump
# shell into container
docker exec -it postgres bash
# restore it from within
psql -U postgres
create database token_metadata_api;
pg_restore --username postgres --verbose --jobs 4 --dbname stacks_blockchain_api /mainnet-stacks-blockchain-api-7.8.2-20240325.gz
pg_restore --username postgres --verbose --jobs 4 --dbname token_metadata_api /token-metadata-api-pg-15-latest.dump
# delete the dump file at end as this is on server storage
rm /stacks-blockchain-api-pg-15-latest.dump
Postgres service
Remove old versions
sudo apt-get --purge remove postgresql postgresql-*
Install postgres
// see https://monovm.com/blog/install-postgresql-on-debian/
> sudo apt install postgresql-15
Creta stacks_blockchain_api
CREATE DATABASE stacks_blockchain_api WITH OWNER='postgres' TEMPLATE = template0 ENCODING = 'UTF8' LOCALE_PROVIDER = libc LOCALE = 'en_US.UTF-8';
Change data directory
> sudo vi /etc/postgresql/15/main/postgresql.conf
data_directory = /mnt/postgres/
Testnet mainnet differences
\c stacks_blockchain_api
// testnet: displays tables list
select max(block_height) from stacks_blockchain_api.blocks;
max
--------
152035
\dt
List of relations
Schema | Name | Type | Owner
--------+-------------------------+-------+----------
public | blocks | table | postgres
public | burnchain_rewards | table | postgres
...
\z
Access privileges
Schema | Name | Type | Access privileges | Column privileges | Policies
--------+--------------------------------+-------------------+-------------------+-------------------+----------
public | blocks | table | | |
public | burnchain_rewards | table | | |
public | burnchain_rewards_id_seq | sequence | | |
// mainnet: nothing displayed
select max(block_height) from stacks_blockchain_api.blocks;
max
--------
144031
\dt
Did not find any relations.
\z
Access privileges
Schema | Name | Type | Access privileges | Column privileges | Policies
--------+------+------+-------------------+-------------------+----------
(0 rows)
Load dump file
// export PGPASSWORD=..
# pg_restore --username postgres --verbose --jobs 4 --dbname stacks_db
pg_restore --username=postgres --verbose --jobs=4 -d stacks_blockchain_api /mnt/bitcoin-testnet/stacks-testnet/archives/mainnet-stacks-blockchain-api-7.8.2-20240325.gz
SELECT pg_size_pretty( pg_database_size('stacks_blockchain_api') );
Postgres as service
/etc/init.d/postgresql stop
/etc/init.d/postgresql start
/etc/init.d/postgresql restart
pg_lsclusters
/etc/init.d/postgresql status
sudo service postgresql restart ?
Change passwords
> sudo -u postgres psql postgres
postgres=# \password postgres
Enter new password for user "postgres":
Enter it again:
Enable connections see fix;
> sudo vi /etc/postgresql/15/main/pg_hba.conf
This line:
local all postgres peer
Should be:
local all postgres md5
> /etc/init.d/postgresql restart
Manage data directory
> sudo -u postgres psql
postgres=# show data_directory;
> sudo systemctl stop postgresql
> sudo mkdir /mnt/postgres
> sudo rsync -av /var/lib/postgresql /mnt/bitcoin-testnet/stacks-testnet/postgres
> sudo vi /etc/postgresql/15/main/postgresql.conf
Install nodejs
sudo apt update
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
nvm --version // exit terminal
nvm install node
node --version
nvm install --lts
nvm ls
Running Event Replay
Verion 2: setup python etc
Note on leibniz (4G) process is Killed by Kernal (see dmesg)
git clone https://github.com/hirosystems/stacks-event-replay.git
wget https://archive.hiro.so/testnet/stacks-blockchain-api/testnet-stacks-blockchain-api-7.8.2-20240322.gz
cd stacks-event-replay/
sudo apt-get install python3-pip
sudo apt-get install python3-pandas
sudo apt-get install python3-numpy
# Ran on mac book pro 32G - Ubuntu 8G is too little memory to run this.
python3 -m event_replay --tsv-file ../testnet-stacks-blockchain-api-7.8.2-20240322.gz
rsync -aP events bob@leibniz.brightblock.org:/mnt/bitcoin-testnet/stacks-testnet/events-9.8.2/
$ STACKS_EVENTS_DIR="/mnt/bitcoin-testnet/stacks-testnet/events-9.8.2/events" NODE_OPTIONS="--max-old-space-size=4096" STACKS_CHAIN_ID=2147483648 node ./lib/index.js from-parquet-events --workers=2
Last updated