# bfanodo ## Un nodo transaccional para BFA. ### Caracteristicas El **bfanodo** es un container/docker que podes bajar 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 queres brindar este servicio a la red, podes usar *ipfilter* o (mas facil) no publicar el puerto 8545 (atalo (bind) a 127.0.0.1 solamente, igual que puerto 8546). Para hacer eso, tenes que cambiar los parametros `-p` en `start.sh`. Como ves en el ejemplo abajo, puerto 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: ``` $ 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 estan disponibles de los otros dockers tambien sin usar `--link` pero no van a estar publicados en 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 aprendido durante el primer año de BFA es, que el `geth` normalmente no necesita una cuenta asociado (eso obviamente es distinto si lo usas como nodo sellador). Las cuentas deben estar asociados a los applicaciones que se conecta al nodo. Ese hace es sistema mas seguro, y **cada applicacion necesita su propia cuenta**. Si no sos miembro del grupo `docker` (en `/etc/group` ) tenes que hacer todo como `root` Te va a crear un directorio en `~/dockers/volumes/bfanodo,home,bfa,bfa,network,node,geth` . Si tenes cuentas/llaves van ahi. Toda la blockchain tambien se ve ahi, para que no hay que bajar toda la blockchain de vuelta al actualizar el nodo. ### Instalando Docker En [https://docs.docker.com/install/] hay instrucciones para instalar Docker para varios sistemas (CentOS, Debian, Fedora, Ubuntu). Una vez instalado, podes 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 esta 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 Para ver como esta tu bfanodo, estos comandos pueden brindar mas informacion (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 uso el script `build.sh`. No lo uses si no sabes como funciona todo.