# Grin - Compilación, configuración y ejecución

## Plataformas soportadas

En un largo plazo, es probable que la mayoría de las plataformas sean compatibles en cierta medida.
El lenguaje de programación de Grin `rust` ha compilado metas para la mayoría de las plataformas.

¿Qué funciona hasta ahora?

* Linux x86\_64 y MacOS [grin + mining + development]
* Todavía no funciona con windows 10 [grin kind-of builds. No mining yet. Help wanted!]

## Requisitos

* rust 1.26+ (usa [rustup]((https://www.rustup.rs/))- por ejemplo, `curl https://sh.rustup.rs -sSf | sh; source $HOME/.cargo/env`)
  * Si rust está instalado, puede simplemente actualizar la versión con  `rustup update`
* clang
* ncurses y libs (ncurses, ncursesw5)
* zlib libs (zlib1g-dev or zlib-devel)
* pkg-config
* libssl-dev
* linux-headers (reportado como necesario en Alpine linux)

Para las distribuciones basadas en Debian (Debian, Ubuntu, Mint, etc), todo en un comando (exceptuando Rust):

```sh
apt install build-essential cmake git libgit2-dev clang libncurses5-dev libncursesw5-dev zlib1g-dev pkg-config libssl-dev
```

## Pasos para la compilación

```sh
git clone https://github.com/mimblewimble/grin.git
cd grin
cargo build --release
```

Grin también puede compilarse en modo debug (sin la etiqueta `--release`, pero usando la etiqueta `--debug` o `--verbose`) esto hará que la sincronización rápida sea excesivamente lenta debido a la gran sobrecarga de las operaciones criptográficas.

## Errores de compilación

Vea [Solución de problemas](https://github.com/mimblewimble/docs/wiki/Troubleshooting)

## ¿Qué se ha compilado?

Con una compilación finalizada se obtiene:

* `target/release/grin` - los binarios principales de grin

Todos los datos, configuración y archivos de registro creados y utilizados por Grin se encuentran en el directorio oculto `~/.grin` (bajo el directorio home del usuario) por defecto. Puede modificar toda la configuración editando el archivo `~/.grin/grin-server.toml`.

También es posible hacer que Grin cree sus propios archivos de datos en el directorio actual. Para ello ejecute:

```sh
grin server config
```

Lo que generará un archivo `grin-server.toml` en el directorio actual, preconfigurado para usar el directorio actual para todos sus datos. Ejecutando Grin desde un directorio que contiene el archivo `grin-server.toml` usará los valores de ese archivo en lugar de los valores por defecto de `~/.grin/grin-server.toml`.

Durante las pruebas, ponga el binario de Grin en su ruta de esta manera:

```sh
export PATH=/path/to/grin/dir/target/debug:$PATH
```

Donde `path/to/grin/dir` es su ruta absoluta al directorio raíz de la instalación de Grin.

Puede ejecutar `grin` directamente (pruebe `grin help` para más opciones).

## Configuración

Grin se ejecuta con valores predeterminados, y puede configurarse aún más a través del archivo `grin-server.toml`. Este fichero es generado por grin en su primera ejecución, y contiene documentación sobre cada opción disponible.

Aunque se recomienda que realice toda la configuración de grin server a través de `grin-server.toml`, también es posible suministrar cambios de comandos para grin que anulan cualquier configuración en el archivo.

Para obtener ayuda sobre los comandos de grin y sus cambios intente:

```sh
grin help
grin wallet help
grin client help
```

## Docker

```sh
docker build -t grin .
```

Puede ubicar la caché de Grin para que se ejecute dentro del contenedor

```sh
docker run -it -d -v $HOME/.grin:/root/.grin grin
```

## Compilación multiplataforma

Rust (cargo) puede compilar Grin para muchas plataformas, así que en teoría ejecutar `grin` como un nodo de validación en un dispositivo de baja potencia podría ser posible. Para hacer una compilación cruzada `grin` en una plataforma x86 Linux y generar binarios de ARM, por ejemplo para Raspberry-pi.

## Usando Grin

La página de la wiki [Cómo usar grin](https://github.com/mimblewimble/docs/wiki/How-to-use-grin) y las páginas de enlaces tienen más información sobre las características que disponemos, resolución de problemas, etc.

## Minando en Grin

Tenga en cuenta que todas las funciones de minería de Grin se han trasladado a un paquete independiente llamado [grin_minner](https://github.com/mimblewimble/grin-miner). Una vez que el nodo de grin esté listo y funcionando, puede empezar a minar compilando y ejecutando grin-miner con su nodo Grin en funcionamiento.
