Como instalar tu nodo de PulseChain en tu propio ordenador
En este tutorial voy a mostrarte los pasos a seguir para que puedas tener tu nodo de pulsechain totalmente funcionar en tu red local.
Atención, este tutorial no explica como montar un nodo validador, solo se explican los pasos para tener un nodo de pulsechain en tu red local.
Puedes adaptar este tutorial a cualquier blockchain basada en Ethereum, yo he escogido pulsechain ya que a día de hoy es la más descentralizada.
A nivel de sistemas vas a aprender muchas cosas, desde instalar máquinar virtuales a consultar la blockchain en tiempo real.
Para poder seguir este tutorial es necesario que tengas sólidos conocimientos de GNU/Linux, para ello encontrarás en mi web numerosos tutoriales en esta temática, además de que estoy preparando un curso gratuíto de introducción a GNU/Linux.
Para poder mantener el canal me va a ser muy útil que te suscribas a YouTube, le des a me gusta a los vídeos y hagas comentarios.
Tambien puedes hacer donaciones en PLS, PLSX o INC a la dirección 0x8E6baDd5Ea267A9F9a6f17239e45f39Fe2310dF6
Tabla de contenidos
Introducción
para empezar aquí tenéis el vídeo donde introduzco el tema del nodo
En este vídeo muestro el equipo que he comprado para montar el nodo: https://amzn.to/3TOoZbJ un Intel NUC, NUC11PAHi7 Desktop Mini-PC, Intel® Core i7-1165G7, 32 GB de RAM, SSD PCIe de 1 TB
Además le he añadido un disco ssd crucial de 1TB, concretamente este https://amzn.to/3Pz9r9m y otro de 256GByte para instalar proxmox.
En total tengo un disco de 256GB donde instalaré proxmox y dos discos duros de 1TByte
Instalación de proxmox
Aquí tenéis el vídeo donde instalo proxmox, que es el sitema operativo que he usado par montar el nodo.
He usado proxmox ya que disponía de dos discos de 1TByte y necesitamos un espacio de más de 1TByte para montar le nodo.
Una posible solución es que compréis un disco de 2TByte y pasar al punto de instalación de debian.
Crear volumen zfs en proxmox
Para crear un volumne zfs en proxmox para crear un espació contiguo de 2TBytes debemos unir los dos discos duros mediante raid0
Para ello nos conectaremos vía ssh a nuestro servidor, con el comando ssh root@la-ip-local
Y ejectuaremos los comandos siguientes:
#vemos el estado de nuestra zpool
zpool status
#creamos un storage de tipos raid 0 Donde /dev/sda y /dev/sdb son los disco que queremos unir, zfsR0 es el nombre del pool
zpool create -f -o ashift=12 zfsR0 /dev/sdb /dev/sdc
zpoll iostat -v
pvesm zfsscan
#creamos el storage para montar posteriormente
zfs create zfsR0/share
Podéis definir una cuota con el comando
zfs set quota=1800G zfsR0/share
si ahora visitamos la web de nuestro servidor proxmox
Si vamos a nuestro nodo y al apartado Disks->ZFS veremos el volumen creado por línea de comandos
Ahora debemos ir a storage y añadir un zfs
Y ya nos aparecerá disponiblre
Aquí tenéis el vídeo paso a paso…
Instalación de debian
Primero hay que descargar la iso de debian 12 que podéis encontrar aquí https://www.debian.org/index.es.html
Después si queréis seguir la instalación en proxmox podéis serguir este vídeo…
Si queréis instalar directamente sobre una máquina con un disco duro de 2TBytes hay que hacer un usb booteable y seguir la misma instalación del vídeo a partir del minuto 7
Instalación de docker
Vamos a montar el nodo usado docker por tanto vamo a tener que instalárlo en nuestra màquina virtual.
Para ello seguiremos el tutorial que hay mi web, concretamente en este enlace
Crear el contenedor para nuestro nodo con docker-compose
Aquí tenéis el vídeo de esta sección
Llegamos ahora al punto principal, que es el de crear el nodo usando docker compose.
Creamos los directorios siguientes
sudo mkdir -p /blockchain/secret
Hacemos que el propietario de este directorio sea nuestro usuario
sudo chown -R guillem:guillem /blockchain
Los clientes EL y CL necesitan comunicarse mediante Engine API y, para ello, es necesario crear una clave de cifrado secreta, denominada JWT Secret. Puede utilizar la herramienta de línea de comando estándar openssl para hacerlo:
openssl rand -hex 32 | tr -d «\n» > /blockchain/secret/jwt.hex
Creamos el directorio de trabajo, en mi caso iré a mi home y crearé el directorio pulse:
cd
mkdir pulse
Dentro de este directorio voy a crear el fichero docker-compose.yml con el siguiente contenido:
services:
pulsechain_execution:
image: registry.gitlab.com/pulsechaincom/go-pulse:latest
tty: true
ports:
- "0.0.0.0:8545:8545/tcp"
- "0.0.0.0:8546:8546/tcp"
- "0.0.0.0:6060:6060/tcp" # if used with --metrics or --pprof
- "30303:30303"
volumes:
- /blockchain:/blockchain
restart: unless-stopped
stop_grace_period: 3m
#oom_kill_disable: true
command:
- --datadir=/blockchain/execution
- --pulsechain
- --authrpc.jwtsecret=/blockchain/secret/jwt.hex
- --authrpc.addr=pulsechain_execution
- --authrpc.vhosts=pulsechain_execution
- --http
- --http.api=eth,net,web3
- --http.addr=0.0.0.0
- --http.corsdomain=pulsechain_execution
- --http.vhosts=pulsechain_execution
- --ws
- --ws.api=eth,net,web3
- --ws.addr=0.0.0.0
- --metrics
- --metrics.addr=0.0.0.0
- --pprof
- --pprof.addr=0.0.0.0
pulsechain_consensus:
image: registry.gitlab.com/pulsechaincom/lighthouse-pulse
tty: true
ports:
- "9000:9000/tcp"
- "9000:9000/udp"
- "0.0.0.0:5052:5052/tcp"
restart: unless-stopped
depends_on:
- pulsechain_execution
volumes:
- /blockchain:/blockchain
command:
- lighthouse
- beacon_node
- --network=pulsechain
- --datadir=/blockchain/consensus
- --execution-jwt=/blockchain/secret/jwt.hex
- --execution-endpoint=http://pulsechain_execution:8551
- --checkpoint-sync-url=https://checkpoint.pulsechain.com
- --http
- --http-address
- 127.0.0.1
Atención con las tabulaciones sino no os va a funcionar.
Para poder dejar el servidor sincronizando vamos a instalar la aplicación screen con el comando
sudo apt install screen
Ahora ejecutamos screen con el comando
screen
Ahora desde el directorio anterior ejecutamos el comando:
docker compose up
A partir de aqui el nodo se va a sicronizar con la blockchain, este proceso va a durar días, concretamente en mi caso tardó unos 4 días, por eso es necesario usar screen, ahora para salir de screen hace falta la combinación de teclas crtl + A + D
Para recuperar una sesión de screen usar el comando screen -r y mediante el tabulador veréis que sesión recuperar.
Podéis comprovar el estado de sincronización accediendo mediante geth con los siguientes comandos.
para ver los contenedores:
docker container ls
Para ejectuar geth
docker exec -it pulse-pulsechain_execution-1 geth –datadir=/blockchain/execution attach
Nos aparecera la consola de geth
Para ver el estado de sincronización ejecutamos eth.syncing
y podemos observar como va sincronizando el nodo, en este caso vamos por el bloque currentBlock: 1738080 y el bloque más alto es highestBlock: 19962219
Ahora hay que esperar y tener paciencia
Nodo sincronizado
El nodo está sicronizado cuando eth.syncing da como resultado false, como podéis ver en mi nodo:
Obtener información mediante curl
Ejecutad estos comandos desde la debian con el nodo sicronizado
Obtener la versión de geth
curl -H «Content-Type: application/json» -X POST –data ‘{«jsonrpc»:»2.0″,»method»:»web3_clientVersion»,»params»:[],»id»:67}’ 127.0.0.1:8545
obtener el net version
curl -H «Content-Type: application/json» -X POST –data ‘{«jsonrpc»:»2.0″,»method»:»net_version»,»params»:[],»id»:67}’ 127.0.0.1:854
Net_litening, devuelve true si el cliente está escuhando
curl -H «Content-Type: application/json» -X POST –data {«jsonrpc»:»2.0″,»method»:»net_listening»,»params»:[],»id»:67}’ 127.0.0.1:8545
net_peerCount devuelve el número de peers conectados
curl -H «Content-Type: application/json» -X POST –data ‘{«jsonrpc»:»2.0″,»method»:»net_peerCount»,»params»:[],»id»:74}’ 127.0.0.1:8545
gas_price: curl -H «Content-Type: application/json» -X POST –data ‘{«jsonrpc»:»2.0″,»method»:»eth_gasPrice»,»params»:[],»id»:74}’ 127.0.0.1:8545
Obtener el número de bloque curl -H «Content-Type: application/json» -X POST –data ‘{«jsonrpc»:»2.0″,»method»:»eth_blockNumber»,»params»:[],»id»:74}’ 127.0.0.1:8545
Obtener balance de una dirección específica
curl -H «Content-Type: application/json» -X POST –data ‘{«jsonrpc»:»2.0″,»method»:»eth_getBalance»,»params»:[«0x407d73d8a49eeb85d32cf465507dd71d507100c1», «latest»],»id»:1}’ 127.0.0.1:8545
Más ejemplos en esta dirección https://ethereumbuilders.gitbooks.io/guide/content/en/ethereum_json_rpc.html
Configuración del firewall
A continuación vamos a configurar el firewall para evitar ataques y disponer de más seguridad en nuestro nodo
Instalar paquetes
sudo apt-get update
sudo apt-get install ufw
sudo apt-get install net-tools
Deshabilitar firewall
de esta forma no perderemos la conexión mientras configuramos el firewall por ssh
sudo ufw disable
Denegar conexiones entrantes por defecto
sudo ufw default deny incoming
Permitir conexiones salientes por defecto
sudo ufw default allow outgoing
sudo netstat -tuln
sudo ss -tuln
Permitir puertos específicos
Se incluyen los puertos para nuestro nodo local
sudo ufw allow 22/tcp
sudo ufw allow 30303
sudo ufw allow 13000
sudo ufw allow 12000
sudo ufw allow 8545/tcp
sudo ufw allow 8546/tcp
Puertos para nginx
sudo ufw allow 80
sudo ufw allow 443
Habilitar el firewall
sudo ufw enable
Chequear los puertos
sudo ufw status verbose
sudo netstat -tlnp