Ejecutando Localmente
Cuando construyes un procesador personalizado, podrías encontrar útil desarrollar contra una pila de desarrollo local. El Servicio de Stream de Transacciones es un sistema complicado de múltiples componentes. Para asistir con el desarrollo local, ofrecemos un script de Python que envuelve un archivo Docker compose para configurar todo el sistema.
Este script configura lo siguiente:
- Nodo único testnet con el stream GRPC del indexador habilitado.
- Una instancia de Redis.
- Servicio de Stream de Transacciones, incluyendo los siguientes componentes:
- cache-worker: Extrae transacciones del nodo y las almacena en Redis.
- file-store: Obtiene transacciones de Redis y las almacena en un sistema de archivos.
- data-service: Sirve transacciones vía un stream GRPC a clientes downstream. Extrae de la caché o del file store dependiendo de la edad de la transacción.
- Volúmenes compartidos y redes para conectarlo todo.
Puedes aprender más sobre la arquitectura del Servicio de Stream de Transacciones aquí y el archivo Docker compose aquí.
Prerrequisitos
Sección titulada «Prerrequisitos»Para usar el script de desarrollo local debes tener instalado lo siguiente:
- Python 3.8+: Guía de Instalación.
- Poetry: Guía de Instalación.
- Docker: Guía de Instalación.
- Docker Compose v2: Esto debería estar instalado por defecto con instalaciones modernas de Docker, verifica con este comando:
docker-compose version --short
- grpcurl: Guía de Instalación
- OpenSSL
Preparación
Sección titulada «Preparación»Clona el repositorio aptos-core:
# HTTPSgit clone https://github.com/aptos-labs/aptos-core.git
# SSHgit clone git@github.com:aptos-labs/aptos-core.git
Navega al directorio testsuite
:
cd aptos-corecd testsuite
Instala las dependencias de Python:
poetry install
Ejecutando el script
Sección titulada «Ejecutando el script»Iniciando el servicio
Sección titulada «Iniciando el servicio»poetry run python indexer_grpc_local.py start
Sabrás que esto tuvo éxito si el comando sale, y ves lo siguiente:
Attempting to stream from indexer grpc for 10sStream finished successfully
Deteniendo el servicio
Sección titulada «Deteniendo el servicio»poetry run python indexer_grpc_local.py stop
Limpiando los datos
Sección titulada «Limpiando los datos»Cuando inicias, detienes e inicias el servicio nuevamente, reutilizará los mismos datos de localnet. Si deseas limpiar el localnet y comenzar desde cero puedes ejecutar el siguiente comando:
poetry run python indexer_grpc_local.py wipe
Usando el servicio local
Sección titulada «Usando el servicio local»Puedes conectarte al Servicio de Stream de Transacciones local, ej. desde un procesador personalizado, usando los siguientes valores de configuración:
indexer_grpc_data_service_address: 127.0.0.1:50052auth_token: dummy_token
Puedes conectarte al nodo en la siguiente dirección:
http://127.0.0.1:8080/v1
Debugging
Sección titulada «Debugging»Uso en sistemas ARM
Sección titulada «Uso en sistemas ARM»Si tienes una máquina con un procesador ARM, por ejemplo, un M1/M2 Mac, el script debería detectar esto y establecer las variables de entorno apropiadas para asegurar que se usen las imágenes correctas. Si tienes problemas con esto, intenta establecer la siguiente variable de entorno:
export DOCKER_DEFAULT_PLATFORM=linux/amd64
Además, asegúrate de que las siguientes configuraciones sean correctas en Docker Desktop:
- Habilitado: Preferencias > General > Usar el marco de virtualización
- Habilitado: Preferencias > General > Usar Docker Compose V2
- Deshabilitado: Características en desarrollo -> Usar Rosetta para emulación x86/amd64 en Apple Silicon
Este script no ha sido probado en sistemas Linux ARM.
Redis falla para iniciar
Sección titulada «Redis falla para iniciar»Intenta establecer la siguiente variable de entorno antes de ejecutar el script:
export REDIS_IMAGE_REPO=arm64v8/redis
Cache worker está en bucle de crash o Redis actualización de la última versión fallida.
en el log
Sección titulada «Cache worker está en bucle de crash o Redis actualización de la última versión fallida. en el log»Limpia los datos:
poetry run python indexer_grpc_local.py wipe
Esto significa que se perderán los datos históricos.