# bfanodo ## Un nodo transaccional para BFA. ### Caracteristicas El **bfanodo** es un container/Docker se puede descargar y correr en tu propia maquina, maquina virtual o datacenter. Se levanta como un nodo transaccional, **sin cuentas**, abierto a todo el mundo. Si no deseas brindar este servicio a la red, se puede usar *ipfilter* o, directamente no publicar el puerto 8545 (anclado únicamente a 127.0.0.1, igual que puerto 8546). Para hacer eso, hay que cambiar los parametros `-p` en `start.sh`. Como se puede apreciar en el ejemplo aquí abajo, los puertos 30303/tcp y 8545/tcp estan abiertos al mundo (0.0.0.0 = INADDR_ANY) y 8546/tcp esta abierto solamente para conecciones de tu maquina. ``` $ docker container port bfanodo 30303/tcp -> 0.0.0.0:30303 8545/tcp -> 0.0.0.0:8545 8546/tcp -> 127.0.0.1:8546 ``` Es importante entender que "tu maquina" incluye otros dockers en la misma maquina, si las has conectado con el parametro `--link`, como se puede ver aqui: (NOTA DE FRANCA: ESTO NO LO ENTIENDO) ``` $ docker run --rm -it --link bfanodo alpine env | grep BFANODO_PORT | sort BFANODO_PORT_30303_TCP_ADDR=172.17.0.2 BFANODO_PORT_30303_TCP_PORT=30303 BFANODO_PORT_30303_TCP_PROTO=tcp BFANODO_PORT_30303_TCP=tcp://172.17.0.2:30303 BFANODO_PORT_30303_UDP_ADDR=172.17.0.2 BFANODO_PORT_30303_UDP_PORT=30303 BFANODO_PORT_30303_UDP_PROTO=udp BFANODO_PORT_30303_UDP=udp://172.17.0.2:30303 BFANODO_PORT_8545_TCP_ADDR=172.17.0.2 BFANODO_PORT_8545_TCP_PORT=8545 BFANODO_PORT_8545_TCP_PROTO=tcp BFANODO_PORT_8545_TCP=tcp://172.17.0.2:8545 BFANODO_PORT_8546_TCP_ADDR=172.17.0.2 BFANODO_PORT_8546_TCP_PORT=8546 BFANODO_PORT_8546_TCP_PROTO=tcp BFANODO_PORT_8546_TCP=tcp://172.17.0.2:8546 BFANODO_PORT=tcp://172.17.0.2:8545 ``` Los puertos de los otros dockers están disponibles, sin usar `--link` . Pero no van a estar publicados en las variables del entorno. ``` $ docker run --rm alpine sh -c "date | nc 172.17.0.2 8545" ; echo HTTP/1.1 400 Bad Request Content-Type: text/plain; charset=utf-8 Connection: close 400 Bad Request ``` (puerto abierto) ### Cuentas Una leccion aprendida durante el primer año de BFA es que el `geth` normalmente no necesita una cuenta asociada (esto obviamente es distinto si se utiliza como nodo sellador). Las cuentas deben estar asociadas a las applicaciones que se conectan al nodo. Esto hace que el sistema sea más seguro, y que **cada applicacion necesite su propia cuenta**. Si no sos miembro del grupo `docker` (en `/etc/group` ) deberás hacer todo como `root` Así, se creará un directorio en `~/dockers/volumes/bfanodo,home,bfa,bfa,network,node,geth` . Si tenés cuentas/llaves van allí. Toda la blockchain tambien se puede ver en ese mismo lugar, para que no hay que bajar toda la blockchain de vuelta al actualizar el nodo. (NOTA DE FRANCA: NO ENTIENDO ESTA ULTIMA PARTE) ### Instalando Docker En [https://docs.docker.com/install/] hay instrucciones para instalar Docker para varios sistemas (CentOS, Debian, Fedora, Ubuntu). Una vez instalado, podés correr varios dockers a la vez. Si ves el aviso `WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.` la solucion posible está en https://docs.docker.com/install/linux/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities Normalmente es suficiente (en Debian) con: ``` $ echo 'GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"' >> /etc/default/grub $ update-grub $ reboot ``` ### Instalando bfanodo ``` $ wget https://gitlab.bfa.ar/docker/bfanodo/raw/master/start.sh $ ./start.sh ``` ### Registros / logs Estos comandos pueden brindar mas informacion sobre tu bfanodo (y hasta darte un shell): ``` $ docker stats bfanodo $ docker logs bfanodo $ docker exec bfanodo bfalog.sh $ docker exec bfanodo localstate.pl $ docker exec -it bfanodo bash ``` ### Crear Para crear el docker se utilizó el script `build.sh`. Por favor, no lo uses si no sabés como funciona todo.