mirror of
https://github.com/alexgo-io/stacks-node-mainnet.git
synced 2026-01-13 06:49:46 +08:00
Compare commits
61 Commits
block-1409
...
block-5657
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
680b51b100 | ||
|
|
5b8628bf89 | ||
|
|
25676d0a8c | ||
|
|
c8a1d58e49 | ||
|
|
8ca15cd0d4 | ||
|
|
b541d2b421 | ||
|
|
32f7e2f5f0 | ||
|
|
75534dab9c | ||
|
|
75b7271265 | ||
|
|
63101ced1e | ||
|
|
10cb6a4a88 | ||
|
|
c59454fa64 | ||
|
|
57eefbed4c | ||
|
|
34e84429d5 | ||
|
|
e481560aea | ||
|
|
f6bef3b4e0 | ||
|
|
676a1eeb46 | ||
|
|
3da4f66287 | ||
|
|
9fdcdd2c21 | ||
|
|
cf33d3ebf4 | ||
|
|
63cf180797 | ||
|
|
6053ae565c | ||
|
|
90935a3882 | ||
|
|
6a0668b46b | ||
|
|
f2f63e5554 | ||
|
|
affd017730 | ||
|
|
f71418d1d1 | ||
|
|
ce40bd3176 | ||
|
|
e1eb072274 | ||
|
|
38b08a9ac7 | ||
|
|
fe8ab27840 | ||
|
|
d730b7b145 | ||
|
|
c0891d2402 | ||
|
|
f898e26e4d | ||
|
|
aa772d1798 | ||
|
|
2a4fd48f5d | ||
|
|
fd6ae97acd | ||
|
|
d4de89bc95 | ||
|
|
0167788d35 | ||
|
|
fd352fa7f1 | ||
|
|
a4f1e609a6 | ||
|
|
ed57dfe430 | ||
|
|
16c8a7ffab | ||
|
|
dd8d0f1902 | ||
|
|
2707e6555b | ||
|
|
7d4639ab3d | ||
|
|
5e59f7d8b3 | ||
|
|
531fbc0fb6 | ||
|
|
f88e564f88 | ||
|
|
98bdebdeef | ||
|
|
f4e9811fbe | ||
|
|
c85726d9af | ||
|
|
aecc066ef5 | ||
|
|
fd95ae0832 | ||
|
|
a14580e84d | ||
|
|
560d7b4180 | ||
|
|
ae1fd8462d | ||
|
|
50da2a59f7 | ||
|
|
57f4cc45a3 | ||
|
|
64b6eed8c0 | ||
|
|
922378a6dd |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -1,3 +1,5 @@
|
||||
/stacks-node
|
||||
/postgresql
|
||||
/wait
|
||||
/wait
|
||||
/config/Stacks-*.toml
|
||||
/.envrc
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
References:
|
||||
|
||||
+ https://docs.hiro.so/stacks-blockchain-api/how-to-guides/how-to-run-mainnet-node
|
||||
+ https://docs.hiro.so/hiro-archive/overview
|
||||
- https://docs.stacks.co/guides-and-tutorials/nodes-and-miners
|
||||
- https://docs.hiro.so/stacks/archive
|
||||
|
||||
Note: **use `stop.sh` to shutdown daemons!**
|
||||
|
||||
@@ -16,7 +16,7 @@ The scripts are tested on debian 12. Clone this repo and follow the steps.
|
||||
1. Run ./setup.sh and reboot the server
|
||||
2. Restore the latest backup from https://github.com/alexgo-io/stacks-node-mainnet/releases
|
||||
3. Run ./start.sh
|
||||
4. Run `watch 'curl -s http://127.0.0.1:3999/extended/v1/status'`, wait until the block height matches that from `https://api.hiro.so/v2/info`
|
||||
4. Run `watch 'curl -s http://127.0.0.1:3999/extended'`, wait until the block height matches that from `https://api.hiro.so/v2/info`
|
||||
5. Done
|
||||
|
||||
## How to spin up a stacks-node from archive
|
||||
@@ -52,5 +52,5 @@ docker-compose logs -f
|
||||
Wait until the block height catches up with official node: `https://api.hiro.so/v2/info`
|
||||
|
||||
```bash
|
||||
watch 'curl -s http://127.0.0.1:3999/extended/v1/status'
|
||||
watch 'curl -s http://127.0.0.1:3999/extended'
|
||||
```
|
||||
|
||||
@@ -2,21 +2,20 @@
|
||||
working_dir = "/srv/stacks-node"
|
||||
rpc_bind = "0.0.0.0:20443"
|
||||
p2p_bind = "0.0.0.0:20444"
|
||||
bootstrap_node = "02196f005965cebe6ddc3901b7b1cc1aa7a88f305bb8c5893456b8f9a605923893@seed.mainnet.hiro.so:20444"
|
||||
bootstrap_node = "02196f005965cebe6ddc3901b7b1cc1aa7a88f305bb8c5893456b8f9a605923893@seed.mainnet.hiro.so:20444,02539449ad94e6e6392d8c1deb2b4e61f80ae2a18964349bc14336d8b903c46a8c@cet.stacksnodes.org:20444,02ececc8ce79b8adf813f13a0255f8ae58d4357309ba0cedd523d9f1a306fcfb79@sgt.stacksnodes.org:20444,0303144ba518fe7a0fb56a8a7d488f950307a4330f146e1e1458fc63fb33defe96@est.stacksnodes.org:20444"
|
||||
wait_time_for_microblocks = 10000
|
||||
|
||||
[burnchain]
|
||||
chain = "bitcoin"
|
||||
mode = "mainnet"
|
||||
peer_host = "bitcoin.blockstack.com"
|
||||
username = "blockstack"
|
||||
password = "blockstacksystem"
|
||||
peer_host = "bitcoin.mainnet.stacks.org"
|
||||
username = "stacks"
|
||||
password = "foundation"
|
||||
rpc_port = 8332
|
||||
peer_port = 8333
|
||||
|
||||
[[events_observer]]
|
||||
endpoint = "127.0.0.1:3700"
|
||||
retry_count = 255
|
||||
events_keys = ["*"]
|
||||
|
||||
[connection_options]
|
||||
@@ -24,4 +23,4 @@ read_only_call_limit_write_length = 15000000
|
||||
read_only_call_limit_read_length = 100000000
|
||||
read_only_call_limit_write_count = 7750
|
||||
read_only_call_limit_read_count = 7750
|
||||
read_only_call_limit_runtime = 5000000000
|
||||
read_only_call_limit_runtime = 5000000000
|
||||
|
||||
96
config/envoy.yaml
Normal file
96
config/envoy.yaml
Normal file
@@ -0,0 +1,96 @@
|
||||
node:
|
||||
id: stacks_node_envoy
|
||||
cluster: stacks_node
|
||||
static_resources:
|
||||
listeners:
|
||||
- address:
|
||||
socket_address:
|
||||
address: "::"
|
||||
port_value: 3999
|
||||
ipv4_compat: true
|
||||
filter_chains:
|
||||
- filters:
|
||||
- name: envoy.filters.network.http_connection_manager
|
||||
typed_config:
|
||||
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
|
||||
internal_address_config:
|
||||
cidr_ranges:
|
||||
address_prefix: 10.0.0.0
|
||||
prefix_len: 8
|
||||
stat_prefix: ingress_http
|
||||
codec_type: auto
|
||||
http_filters:
|
||||
- name: envoy.filters.http.cors
|
||||
typed_config:
|
||||
"@type": type.googleapis.com/envoy.extensions.filters.http.cors.v3.Cors
|
||||
- name: envoy.filters.http.router
|
||||
typed_config:
|
||||
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
|
||||
route_config:
|
||||
name: local_route
|
||||
virtual_hosts:
|
||||
- name: stacks_node
|
||||
domains:
|
||||
- "*"
|
||||
routes:
|
||||
- match:
|
||||
prefix: "/v2"
|
||||
route:
|
||||
cluster: stacks_core
|
||||
- match:
|
||||
prefix: "/v3"
|
||||
route:
|
||||
cluster: stacks_core
|
||||
- match:
|
||||
prefix: "/"
|
||||
route:
|
||||
cluster: stacks_api
|
||||
typed_per_filter_config:
|
||||
envoy.filters.http.cors:
|
||||
"@type": type.googleapis.com/envoy.extensions.filters.http.cors.v3.CorsPolicy
|
||||
allow_origin_string_match:
|
||||
- prefix: "*"
|
||||
allow_methods: "GET, POST, PUT, PATCH, DELETE, OPTIONS"
|
||||
allow_headers: "DNT, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type, Range, Authorization, Priority, Access-Control-Allow-Origin, X-Hiro-Product, X-Hiro-Version"
|
||||
allow_credentials: true
|
||||
max_age: "1728000"
|
||||
clusters:
|
||||
- name: stacks_api
|
||||
type: STATIC
|
||||
connect_timeout: 10s
|
||||
load_assignment:
|
||||
cluster_name: stacks_api
|
||||
endpoints:
|
||||
- lb_endpoints:
|
||||
- endpoint:
|
||||
address:
|
||||
socket_address:
|
||||
address: 127.0.0.1
|
||||
port_value: 23999
|
||||
- name: stacks_core
|
||||
type: STATIC
|
||||
connect_timeout: 10s
|
||||
load_assignment:
|
||||
cluster_name: stacks_core
|
||||
endpoints:
|
||||
- lb_endpoints:
|
||||
- endpoint:
|
||||
address:
|
||||
socket_address:
|
||||
address: 127.0.0.1
|
||||
port_value: 20443
|
||||
admin:
|
||||
access_log:
|
||||
- name: envoy.access_loggers.stdout
|
||||
typed_config:
|
||||
"@type": type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StdoutAccessLog
|
||||
address:
|
||||
socket_address:
|
||||
address: 0.0.0.0
|
||||
port_value: 23866
|
||||
overload_manager:
|
||||
resource_monitors:
|
||||
- name: "envoy.resource_monitors.global_downstream_max_connections"
|
||||
typed_config:
|
||||
"@type": type.googleapis.com/envoy.extensions.resource_monitors.downstream_connections.v3.DownstreamConnectionsConfig
|
||||
max_active_downstream_connections: 65535
|
||||
@@ -1,8 +1,15 @@
|
||||
version: "3.9"
|
||||
services:
|
||||
envoy:
|
||||
restart: always
|
||||
container_name: stacks_envoy
|
||||
image: envoyproxy/envoy:v1.36.4
|
||||
network_mode: "host"
|
||||
command: --base-id 3999 --config-path /etc/envoy/envoy.yaml
|
||||
volumes:
|
||||
- "$PWD/config/envoy.yaml:/etc/envoy/envoy.yaml:ro"
|
||||
stacks-blockchain-postgres:
|
||||
restart: always
|
||||
image: postgres:15.6
|
||||
image: postgres:18-trixie
|
||||
container_name: stacks_postgres
|
||||
command: postgres -c 'max_connections=1000'
|
||||
shm_size: 2gb
|
||||
@@ -13,10 +20,10 @@ services:
|
||||
POSTGRES_DB: stacks_blockchain_api
|
||||
volumes:
|
||||
- ./postgresql:/var/lib/postgresql
|
||||
- ./postgresql/data:/var/lib/postgresql/data
|
||||
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
|
||||
stacks-blockchain-api:
|
||||
restart: always
|
||||
image: bestmike007/stacks-blockchain-api:7.8.2
|
||||
image: bestmike007/stacks-blockchain-api:8.13.6
|
||||
container_name: stacks_api
|
||||
entrypoint: "/wait"
|
||||
network_mode: host
|
||||
@@ -29,10 +36,10 @@ services:
|
||||
PG_PASSWORD: 6nyi11z9tWbXJDYsVESHQfNVo
|
||||
PG_DATABASE: stacks_blockchain_api
|
||||
PG_SCHEMA: stacks_blockchain_api
|
||||
STACKS_CORE_EVENT_HOST: 127.0.0.1
|
||||
STACKS_CORE_EVENT_PORT: "3700"
|
||||
STACKS_CORE_EVENT_HOST: http://0.0.0.0
|
||||
STACKS_BLOCKCHAIN_API_PORT: "3999"
|
||||
STACKS_BLOCKCHAIN_API_HOST: 0.0.0.0
|
||||
STACKS_BLOCKCHAIN_API_HOST: 127.0.0.1
|
||||
STACKS_BLOCKCHAIN_API_PORT: "23999"
|
||||
STACKS_CORE_RPC_HOST: 127.0.0.1
|
||||
STACKS_CORE_RPC_PORT: "20443"
|
||||
STACKS_CHAIN_ID: "0x00000001"
|
||||
@@ -43,7 +50,7 @@ services:
|
||||
- ./wait:/wait:ro
|
||||
stacks-blockchain:
|
||||
restart: always
|
||||
image: bestmike007/stacks-blockchain:2.4.0.0.4
|
||||
image: bestmike007/stacks-blockchain:3.3.0.0.3
|
||||
container_name: stacks_node
|
||||
entrypoint: "/wait"
|
||||
network_mode: host
|
||||
@@ -51,17 +58,8 @@ services:
|
||||
WAIT_BEFORE: 3
|
||||
WAIT_AFTER: 3
|
||||
WAIT_HOSTS: "127.0.0.1:3700"
|
||||
WAIT_COMMAND: "stacks-node start --config=/srv/Stacks.toml"
|
||||
NOP_BLOCKSTACK_DEBUG: 0
|
||||
XBLOCKSTACK_DEBUG: 0
|
||||
RUST_BACKTRACE: 0
|
||||
STACKS_CHAIN_ID: "0x00000001"
|
||||
V2_POX_MIN_AMOUNT_USTX: 90000000260
|
||||
STACKS_CORE_RPC_HOST: 127.0.0.1
|
||||
STACKS_CORE_RPC_PORT: 20443
|
||||
STACKS_API_ENABLE_FT_METADATA: 1
|
||||
STACKS_API_ENABLE_NFT_METADATA: 1
|
||||
WAIT_COMMAND: "stacks-node start --config /srv/Stacks.toml"
|
||||
volumes:
|
||||
- ./config/Stacks.toml:/srv/Stacks.toml:ro
|
||||
- ./stacks-node/mainnet:/srv/stacks-node/mainnet
|
||||
- ${STACKS_NODE_TOML:-./config/Stacks.toml}:/srv/Stacks.toml:ro
|
||||
- ./stacks-node:/srv/stacks-node
|
||||
- ./wait:/wait:ro
|
||||
|
||||
@@ -9,6 +9,6 @@ if [ -e stacks-node ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
curl https://archive.hiro.so/mainnet/stacks-blockchain/mainnet-stacks-blockchain-latest.tar.gz | tar -zxv
|
||||
mkdir stacks-node
|
||||
mv mainnet stacks-node/
|
||||
cd stacks-node
|
||||
curl https://archive.hiro.so/mainnet/stacks-blockchain/mainnet-stacks-blockchain-latest.tar.gz | tar -zxv
|
||||
|
||||
@@ -10,7 +10,7 @@ if [ -e postresql ]; then
|
||||
fi
|
||||
|
||||
mkdir postgresql
|
||||
curl -o postgresql/latest.dump https://archive.hiro.so/mainnet/stacks-blockchain-api-pg/stacks-blockchain-api-pg-15-7.1.10-latest.dump
|
||||
curl -o postgresql/latest.dump https://archive.hiro.so/mainnet/stacks-blockchain-api-pg/stacks-blockchain-api-pg-17-latest.dump
|
||||
|
||||
docker-compose up -d stacks-blockchain-postgres
|
||||
WAIT_HOSTS='127.0.0.1:5432' ./wait
|
||||
|
||||
9
setup.sh
9
setup.sh
@@ -6,15 +6,14 @@ cd $DIR
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
apt-get update && apt-get dist-upgrade -y && apt-get autoremove -y && apt-get autoclean
|
||||
|
||||
apt-get install -y dstat vim zip unzip ca-certificates curl git gawk jq tmux screen traceroute dnsutils iftop ufw net-tools
|
||||
apt-get install -y dstat vim zip unzip ca-certificates curl git gawk jq tmux screen traceroute dnsutils iftop iotop htop ufw net-tools
|
||||
|
||||
echo "Port 20022" >> /etc/ssh/sshd_config
|
||||
echo "UseDNS no" >> /etc/ssh/sshd_config
|
||||
systemctl restart ssh
|
||||
ufw allow 3999/tcp
|
||||
ufw allow 20443/tcp
|
||||
ufw allow 20444/tcp
|
||||
ufw limit 20022
|
||||
ufw allow 20443:20444/tcp
|
||||
ufw limit 20022/tcp
|
||||
echo y | ufw enable
|
||||
|
||||
# docker
|
||||
@@ -30,7 +29,7 @@ if [ ! -e /usr/local/bin/docker-compose ]; then
|
||||
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
fi
|
||||
chmod a+r /etc/apt/keyrings/docker.gpg
|
||||
apt-get update && apt-get install -y docker-ce
|
||||
apt-get update && apt-get install -y docker-ce docker-compose-plugin
|
||||
ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/local/bin/docker-compose
|
||||
echo '{
|
||||
"log-driver": "json-file",
|
||||
|
||||
2
start.sh
2
start.sh
@@ -3,4 +3,4 @@ set -e
|
||||
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
||||
cd $DIR
|
||||
|
||||
docker-compose up -d
|
||||
docker compose up -d
|
||||
|
||||
Reference in New Issue
Block a user