Update run.md

Spanish translation
This commit is contained in:
yayguru 2025-02-13 20:27:43 +01:00 committed by GitHub
parent fb814cb848
commit db6ddd1249
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,35 +1,35 @@
--- ---
outline: [2, 4] outline: [2, 4]
--- ---
# Run Codex # Ejecutar Codex
As for now, Codex is implemented only in [Nim](https://nim-lang.org) and can be found in [nim-codex](https://github.com/codex-storage/nim-codex) repository. Por ahora, Codex está implementado solo en [Nim](https://nim-lang.org) y se puede encontrar en el repositorio [nim-codex](https://github.com/codex-storage/nim-codex) .
It is a command-line application which may be run in a different ways: Es una aplicación de línea de comandos que se puede ejecutar de diferentes maneras:
- [Using binary](#using-binary) - [Usando un binario](#using-binary)
- [Run as a daemon in Linux](#run-as-a-daemon-in-linux) (not supported yet) - [Ejecutar con Daemon en Linux](#run-as-a-daemon-in-linux) (not supported yet)
- [Run as a service in Windows](#run-as-a-service-in-windows) (not supported yet) - [Ejecutar como un servicio en Windows](#run-as-a-service-in-windows) (not supported yet)
- [Using Docker](#using-docker) - [Usando Docker](#using-docker)
- [Using Docker Compose](#using-docker-compose) - [Usando Docker Compose](#using-docker-compose)
- [On Kubernetes](#on-kubernetes) - [En Kubernetes](#on-kubernetes)
During the run, it is required to pass [configuration](#configuration) option to the application, which can be done in a different ways. Durante la ejecución, es necesario pasar una opción de [configuración](#configuration) a la aplicación, lo cual se puede hacer de diferentes maneras.
## Configuration ## Configuración
It is possible to configure Codex node in several ways: Es posible configurar un nodo Codex de varias maneras:
1. [CLI options](#cli-options) 1. [Opciones de la CLI](#cli-options)
2. [Environment variables](#environment-variables) 2. [Opciones de la CLI](#environment-variables)
3. [Configuration file](#configuration-file) 3. [Opciones de la CLI](#configuration-file)
The order of priority is the same as above: El orden de prioridad es el mismo que el anterior:
[CLI options](#cli-options) --> [Environment variables](#environment-variables) --> [Configuration file](#configuration-file). [Opciones de la CLI](#cli-options) --> [Variables de entorno](#environment-variables) --> [Archivo de configuración](#configuration-file).
### Common information ### Información Común
#### Units #### Unidades
For some configuration options, we can pass values in common units like following: Para algunas opciones de configuración, podemos pasar valores en unidades comunes, como las siguientes:
```shell ```shell
--cache-size=1m/1M/1mb/1MB --cache-size=1m/1M/1mb/1MB
--storage-quota=2m/2M/2mb/2MB --storage-quota=2m/2M/2mb/2MB
@ -38,115 +38,113 @@ For some configuration options, we can pass values in common units like followin
--block-ttl=2s/2S/2m/2M/2h/2H/2d/2D/2w/2W --block-ttl=2s/2S/2m/2M/2h/2H/2d/2D/2w/2W
``` ```
#### Logging #### Registro (Logging)
Codex uses [Chronicles](https://github.com/status-im/nim-chronicles) logging library, which allows great flexibility in working with logs. Codex utiliza la biblioteca de registro [Chronicles](https://github.com/status-im/nim-chronicles) que permite una gran flexibilidad al trabajar con registros. Chronicles tiene el concepto de temas, que categorizan las entradas de registro en grupos semánticos.
Chronicles has the concept of topics, which categorize log entries into semantic groups.
Using the `log-level` parameter, you can set the top-level log level like `--log-level="trace"`, but more importantly, Usando el parámetro `log-level` , se puede establecer el nivel de registro de nivel superior, como `--log-level="trace"`, , pero, lo que es más importante, se pueden establecer niveles de registro para temas específicos como `--log-level="info; trace: marketplace,node; error: blockexchange"`,
you can set log levels for specific topics like `--log-level="info; trace: marketplace,node; error: blockexchange"`, que establece el nivel de registro de nivel superior en `info` y luego para los temas `marketplace` y `node` establece el nivel en `trace` y así sucesivamente.
which sets the top-level log level to `info` and then for topics `marketplace` and `node` sets the level to `trace` and so on.
### CLI options ### Opciones de la CLI
```shell ```shell
codex --help codex --help
Usage: Uso:
codex [OPTIONS]... command codex [OPCIONES]... comando
The following options are available: Las siguientes opciones están disponibles:
--config-file Loads the configuration from a TOML file [=none]. --config-file Carga la configuración desde un archivo TOML [=none].
--log-level Sets the log level [=info]. --log-level Establece el nivel de registro [=info].
--metrics Enable the metrics server [=false]. --metrics Habilita el servidor de métricas [=false].
--metrics-address Listening address of the metrics server [=127.0.0.1]. --metrics-address Dirección de escucha del servidor de métricas [=127.0.0.1].
--metrics-port Listening HTTP port of the metrics server [=8008]. --metrics-port Puerto HTTP de escucha del servidor de métricas [=8008].
-d, --data-dir The directory where codex will store configuration and data -d, --data-dir El directorio donde Codex almacenará la configuración y los datos
[=/root/.cache/codex]. [=/root/.cache/codex].
-i, --listen-addrs Multi Addresses to listen on [=/ip4/0.0.0.0/tcp/0]. -i, --listen-addrs Multi Addresses para escuchar [=/ip4/0.0.0.0/tcp/0].
-a, --nat IP Addresses to announce behind a NAT [=127.0.0.1]. -a, --nat Direcciones IP para anunciar detrás de un NAT [=127.0.0.1].
-e, --disc-ip Discovery listen address [=0.0.0.0]. -e, --disc-ip Dirección de escucha de descubrimiento [=0.0.0.0].
-u, --disc-port Discovery (UDP) port [=8090]. -u, --disc-port Puerto de descubrimiento (UDP) [=8090].
--net-privkey Source of network (secp256k1) private key file path or name [=key]. --net-privkey Fuente de la ruta o nombre del archivo de la clave privada (secp256k1) de la red [=key].
-b, --bootstrap-node Specifies one or more bootstrap nodes to use when connecting to the network. -b, --bootstrap-node Especifica uno o más nodos de arranque para usar al conectarse a la red.
--max-peers The maximum number of peers to connect to [=160]. --max-peers El número máximo de pares a los que conectarse [=160].
--agent-string Node agent string which is used as identifier in network [=Codex]. --agent-string Cadena de agente del nodo que se utiliza como identificador en la red [=Codex].
--api-bindaddr The REST API bind address [=127.0.0.1]. --api-bindaddr La dirección de enlace de la API REST [=127.0.0.1].
-p, --api-port The REST Api port [=8080]. -p, --api-port El puerto de la API REST [=8080].
--api-cors-origin The REST Api CORS allowed origin for downloading data. '*' will allow all --api-cors-origin El origen permitido de CORS de la API REST para descargar datos. '*' permitirá todos
origins, '' will allow none. [=Disallow all cross origin requests to download los orígenes, '' no permitirá ninguno. [=No permitir ninguna solicitud de origen cruzado para descargar
data]. datos].
--repo-kind Backend for main repo store (fs, sqlite, leveldb) [=fs]. --repo-kind Backend para el almacén del repositorio principal (fs, sqlite, leveldb) [=fs].
-q, --storage-quota The size of the total storage quota dedicated to the node [=$DefaultQuotaBytes]. -q, --storage-quota El tamaño de la cuota total de almacenamiento dedicada al nodo [=$DefaultQuotaBytes].
-t, --block-ttl Default block timeout in seconds - 0 disables the ttl [=$DefaultBlockTtl]. -t, --block-ttl Tiempo de espera predeterminado del bloque en segundos - 0 deshabilita el ttl [=$DefaultBlockTtl].
--block-mi Time interval in seconds - determines frequency of block maintenance cycle: how --block-mi Intervalo de tiempo en segundos - determina la frecuencia del ciclo de mantenimiento del bloque: con qué
often blocks are checked for expiration and cleanup frecuencia se comprueban los bloques para la expiración y la limpieza
[=$DefaultBlockMaintenanceInterval]. [=$DefaultBlockMaintenanceInterval].
--block-mn Number of blocks to check every maintenance cycle [=1000]. --block-mn Número de bloques a comprobar en cada ciclo de mantenimiento [=1000].
-c, --cache-size The size of the block cache, 0 disables the cache - might help on slow hardrives -c, --cache-size El tamaño de la caché de bloques, 0 deshabilita la caché - podría ayudar en discos duros lentos
[=0]. [=0].
Available sub-commands: Subcomandos disponibles:
codex persistence [OPTIONS]... command codex persistence [OPCIONES]... comando
The following options are available: Las siguientes opciones están disponibles:
--eth-provider The URL of the JSON-RPC API of the Ethereum node [=ws://localhost:8545]. --eth-provider La URL de la API JSON-RPC del nodo Ethereum [=ws://localhost:8545].
--eth-account The Ethereum account that is used for storage contracts. --eth-account La cuenta de Ethereum que se utiliza para los contratos de almacenamiento.
--eth-private-key File containing Ethereum private key for storage contracts. --eth-private-key Archivo que contiene la clave privada de Ethereum para los contratos de almacenamiento.
--marketplace-address Address of deployed Marketplace contract. --marketplace-address Dirección del contrato Marketplace desplegado.
--validator Enables validator, requires an Ethereum node [=false]. --validator Habilita el validador, requiere un nodo Ethereum [=false].
--validator-max-slots Maximum number of slots that the validator monitors [=1000]. --validator-max-slots Número máximo de slots que el validador monitoriza [=1000].
--reward-recipient Address to send payouts to (eg rewards and refunds). --reward-recipient Dirección para enviar los pagos (ej. recompensas y reembolsos).
Available sub-commands: Subcomandos disponibles:
codex persistence prover [OPTIONS]... codex persistence prover [OPCIONES]...
The following options are available: Las siguientes opciones están disponibles:
-cd, --circuit-dir Directory where Codex will store proof circuit data -cd, --circuit-dir Directorio donde Codex almacenará los datos del circuito de prueba
[=/root/.cache/codex/circuits]. [=/root/.cache/codex/circuits].
--circom-r1cs The r1cs file for the storage circuit --circom-r1cs El archivo r1cs para el circuito de almacenamiento
[=/root/.cache/codex/circuits/proof_main.r1cs]. [=/root/.cache/codex/circuits/proof_main.r1cs].
--circom-wasm The wasm file for the storage circuit --circom-wasm El archivo wasm para el circuito de almacenamiento
[=/root/.cache/codex/circuits/proof_main.wasm]. [=/root/.cache/codex/circuits/proof_main.wasm].
--circom-zkey The zkey file for the storage circuit --circom-zkey El archivo zkey para el circuito de almacenamiento
[=/root/.cache/codex/circuits/proof_main.zkey]. [=/root/.cache/codex/circuits/proof_main.zkey].
--circom-no-zkey Ignore the zkey file - use only for testing! [=false]. --circom-no-zkey Ignora el archivo zkey - ¡úsalo sólo para pruebas! [=false].
--proof-samples Number of samples to prove [=5]. --proof-samples Número de muestras para probar [=5].
--max-slot-depth The maximum depth of the slot tree [=32]. --max-slot-depth La profundidad máxima del árbol de slots [=32].
--max-dataset-depth The maximum depth of the dataset tree [=8]. --max-dataset-depth La profundidad máxima del árbol de conjunto de datos [=8].
--max-block-depth The maximum depth of the network block merkle tree [=5]. --max-block-depth La profundidad máxima del árbol Merkle del bloque de red [=5].
--max-cell-elements The maximum number of elements in a cell [=67]. --max-cell-elements El número máximo de elementos en una celda [=67].
``` ```
### Environment variables ### Variables de entorno
In order to set a configuration option using environment variables, first find the desired [CLI option](#cli-options) Para establecer una opción de configuración utilizando variables de entorno, primero encuentre la [opción de la CLI](#cli-options)
and then transform it in the following way: deseada y luego transfórmela de la siguiente manera:
1. prepend it with `CODEX_` 1. Añada como prefijo `CODEX_`
2. make it uppercase 2. Póngala en mayúsculas
3. replace `-` with `_` 3. Reemplace `-` with `_`
For example, to configure `--log-level`, use `CODEX_LOG_LEVEL` as the environment variable name. Por ejemplo, para configurar `--log-level`, use `CODEX_LOG_LEVEL` como el nombre de la variable de entorno.
> [!WARNING] > [¡ATENCIÓN!]
> Some options can't be configured via environment variables for now [^multivalue-env-var] [^sub-commands]. > Algunas opciones no se pueden configurar a través de variables de entorno por ahora [^multivalue-env-var] [^sub-commands].
### Configuration file ### Archivo de Configuración
A [TOML](https://toml.io/en/) configuration file can also be used to set configuration values. Configuration option names and corresponding values are placed in the file, separated by `=`. Configuration option names can be obtained from the [`codex --help`](#cli-options) command, and should not include the `--` prefix. For example, a node's log level (`--log-level`) can be configured using TOML as follows: También se puede usar un archivo de configuración [TOML](https://toml.io/en/)para establecer valores de configuración. Los nombres de las opciones de configuración y los valores correspondientes se colocan en el archivo, separados por `=`. Los nombres de las opciones de configuración se pueden obtener del comando [`codex --help`](#cli-options) y no deben incluir el prefijo `--` Por ejemplo, el nivel de registro de un nodo (`--log-level`) se puede configurar usando TOML de la siguiente manera:
```toml ```toml
log-level = "trace" log-level = "trace"
``` ```
For option, like `bootstrap-node` and `listen-addrs` which accept multiple values we can specify data as an array Para opciones como `bootstrap-node` y `listen-addrs` que aceptan múltiples valores, podemos especificar los datos como un array:
```toml ```toml
listen-addrs = [ listen-addrs = [
"/ip4/0.0.0.0/tcp/1234", "/ip4/0.0.0.0/tcp/1234",
@ -154,37 +152,39 @@ listen-addrs = [
] ]
``` ```
The Codex node can then read the configuration from this file using the `--config-file` CLI parameter, like: El nodo Codex puede entonces leer la configuración de este archivo utilizando el parámetro de la CLI `--config-file` , de la siguiente manera:
```shell ```shell
codex --config-file=/path/to/your/config.toml codex --config-file=/path/to/your/config.toml
``` ```
## Run ## Ejecución
Basically, we can run Codex in three different modes: Basically, we can run Codex in three different modes:
- [Codex node](#codex-node) - useful for local testing/development and basic/files sharing. - [Nodo Codex](#codex-node) - útil para pruebas/desarrollo locales e intercambio básico de archivos.
- [Codex node with marketplace support](#codex-node-with-marketplace-support) - you can share files and buy the storage, this is the main mode and should be used by the end users. - [Nodo Codex con soporte de marketplace](#codex-node-with-marketplace-support) - puede compartir archivos y comprar almacenamiento; este es el modo principal y debe ser utilizado por los usuarios finales.
- [Codex storage node](#codex-storage-node) - should be used by storage providers or if you would like to sell your local storage. - [Nodo de almacenamiento Codex](#codex-storage-node) - debe ser utilizado por los proveedores de almacenamiento o si desea vender su almacenamiento local.
We also will touch in some words [Codex bootstrap node](#codex-bootstrap-node). También tocaremos en algunas palabras [ Nodo de arranque de Codex](#codex-bootstrap-node).
### Using binary ### Usando un binario
#### Nodo Codex
Podemos ejecutar Codex de una manera simple como la siguiente:
#### Codex node
We can run Codex in a simple way like following:
```shell ```shell
codex codex
``` ```
> [!WARNING] > [¡ATENCIÓN!]
> This command may not work properly when we use GitHub releases [^data-dir]. > Este comando puede no funcionar correctamente cuando usamos las versiones de GitHub [^data-dir].
But, it will use a default `data-dir` value and we can pass a custom one: Pero, usará un valor `data-dir` predeterminado y podemos pasar uno personalizado:
```shell ```shell
codex --data-dir=datadir codex --data-dir=datadir
``` ```
This will run Codex as an isolated instance, and if we would like to join an existing network, it is required to pass a [bootstrap node](#codex-bootstrap-node). We can pass multiple nodes as well: Esto ejecutará Codex como una instancia aislada, y si deseamos unirnos a una red existente, es necesario pasar un [nodo de arranque.](#codex-bootstrap-node). También podemos pasar varios nodos:
```shell ```shell
codex \ codex \
--data-dir=datadir \ --data-dir=datadir \
@ -192,10 +192,10 @@ codex \
--bootstrap-node=spr:CiUIAhIhAyUvcPkKoGE7-gh84RmKIPHJPdsX5Ugm_IHVJgF-Mmu_EgIDARo8CicAJQgCEiEDJS9w-QqgYTv6CHzhGYog8ck92xflSCb8gdUmAX4ya78QoemesAYaCwoJBES39Q2RAnVOKkYwRAIgLi3rouyaZFS_Uilx8k99ySdQCP1tsmLR21tDb9p8LcgCIG30o5YnEooQ1n6tgm9fCT7s53k6XlxyeSkD_uIO9mb3 --bootstrap-node=spr:CiUIAhIhAyUvcPkKoGE7-gh84RmKIPHJPdsX5Ugm_IHVJgF-Mmu_EgIDARo8CicAJQgCEiEDJS9w-QqgYTv6CHzhGYog8ck92xflSCb8gdUmAX4ya78QoemesAYaCwoJBES39Q2RAnVOKkYwRAIgLi3rouyaZFS_Uilx8k99ySdQCP1tsmLR21tDb9p8LcgCIG30o5YnEooQ1n6tgm9fCT7s53k6XlxyeSkD_uIO9mb3
``` ```
> [!IMPORTANT] > [¡IMPORTANTE!]
> Make sure you are using a proper value for the [network](/networks/networks) you would like to join. > Asegúrese de estar utilizando un valor adecuado para la [red](/networks/networks) a la que desea unirse.
Also, to make your Codex node accessible for other network participants, it is required to specify a public IP address which can be used to access your node: Además, para que su nodo Codex sea accesible para otros participantes de la red, es necesario especificar una dirección IP pública que pueda usarse para acceder a su nodo:
```shell ```shell
codex \ codex \
--data-dir=datadir \ --data-dir=datadir \
@ -203,10 +203,10 @@ codex \
--nat=<your public IP> --nat=<your public IP>
``` ```
> [!TIP] > [¡CONSEJO!]
> We can set public IP using curl and IP lookup service, like [ip.codex.storage](https://ip.codex.storage). > Podemos establecer la IP pública usando curl y un servicio de búsqueda de IP, como [ip.codex.storage](https://ip.codex.storage).
After that, node will announce itself using your public IP, default UDP ([discovery](https://docs.libp2p.io/concepts/discovery-routing/overview/)) and dynamic TCP port ([data transfer](https://docs.libp2p.io/concepts/transports/overview/)), which can be adjusted in the following way: Después de eso, el nodo se anunciará utilizando su IP pública, el puerto UDP predeterminado ([descubrimiento](https://docs.libp2p.io/concepts/discovery-routing/overview/)) y el puerto TCP dinámico ([transferencia de datos](https://docs.libp2p.io/concepts/transports/overview/)), que se pueden ajustar de la siguiente manera:
```shell ```shell
codex \ codex \
--data-dir=datadir \ --data-dir=datadir \
@ -216,24 +216,24 @@ codex \
--listen-addrs=/ip4/0.0.0.0/tcp/8070 --listen-addrs=/ip4/0.0.0.0/tcp/8070
``` ```
In that way, node will announce itself using specified [multiaddress](https://docs.libp2p.io/concepts/fundamentals/addressing/) and we can check that via [API](https://api.codex.storage/#tag/Debug/operation/getDebugInfo) call: De esa manera, el nodo se anunciará utilizando la [multiaddress](https://docs.libp2p.io/concepts/fundamentals/addressing/) especificada y podemos verificarlo a través de la llamada a la [API](https://api.codex.storage/#tag/Debug/operation/getDebugInfo) :
```shell ```shell
curl -s localhost:8080/api/codex/v1/debug/info | jq -r '.announceAddresses' curl -s localhost:8080/api/codex/v1/debug/info | jq -r '.announceAddresses'
``` ```
```json ```json
[ [
"/ip4/<your public IP>/tcp/8070" "/ip4/<tu IP pública>/tcp/8070"
] ]
``` ```
Basically, for P2P communication we should specify and configure two ports: Básicamente, para la comunicación P2P, deberíamos especificar y configurar dos puertos:
| # | Protocol | Function | CLI option | Example | | # | Protocolo | Función | CLI option | Ejemplo |
| - | -------- | ------------------------------------------------------------------------ | ---------------- | -------------------------------------- | | - | -------- | ------------------------------------------------------------------------ | ---------------- | -------------------------------------- |
| 1 | UDP | [Discovery](https://docs.libp2p.io/concepts/discovery-routing/overview/) | `--disc-port` | `--disc-port=8090` | | 1 | UDP | [Discovery](https://docs.libp2p.io/concepts/discovery-routing/overview/) | `--disc-port` | `--disc-port=8090` |
| 2 | TCP | [Transport](https://docs.libp2p.io/concepts/transports/overview/) | `--listen-addrs` | `--listen-addrs=/ip4/0.0.0.0/tcp/8070` | | 2 | TCP | [Transport](https://docs.libp2p.io/concepts/transports/overview/) | `--listen-addrs` | `--listen-addrs=/ip4/0.0.0.0/tcp/8070` |
And, also it is required to setup port-forwarding on your Internet router, to make your node accessible for participants [^port-forwarding]. Y, también es necesario configurar el reenvío de puertos en su enrutador de Internet para que su nodo sea accesible para los participantes [^port-forwarding].
So, a fully working basic configuration will looks like following: Entonces, una configuración básica y totalmente funcional se vería así:
```shell ```shell
codex \ codex \
--data-dir=datadir \ --data-dir=datadir \
@ -244,24 +244,24 @@ codex \
--api-cors-origin="*" --api-cors-origin="*"
``` ```
After node is up and running and port-forwarding configurations was done, we should be able to [Upload a file](/learn/using#upload-a-file)/[Download a file](/learn/using#download-a-file) in the network using [API](/developers/api). Después de que el nodo esté en funcionamiento y se hayan realizado las configuraciones de reenvío de puertos, deberíamos poder [ Cargar un archivo](/learn/using#upload-a-file)/[,Descargar un archivo](/learn/using#download-a-file) en la red usando la [API](/developers/api).
You also can use [Codex App UI](https://app.codex.storage) for files upload/download. También puede utilizar la [UI de la aplicación Codex](https://app.codex.storage) para cargar/descargar archivos.
And to be able to purchase a storage, we should run [Codex node with marketplace support](#codex-node-with-marketplace-support). Y para poder comprar almacenamiento, deberíamos ejecutar [Nodo Codex con soporte de marketplace](#codex-node-with-marketplace-support).
#### Codex node with marketplace support #### Nodo Codex con soporte de marketplace
[Marketplace](/learn/architecture.md#marketplace-architecture) support permits to purchase the storage in Codex network. Basically, we should add just a `persistence` sub-command and required [CLI options](#cli-options) to the [previous run](#codex-node). El soporte de [Marketplace](/learn/architecture.md#marketplace-architecture) permite comprar almacenamiento en la red Codex. Básicamente, deberíamos añadir solo un subcomando `persistence` y las [opciones de la CLI](#cli-options) requeridas a la [ejecución anterior](#codex-node).
> [!NOTE] > [¡NOTA!]
> Please ignore `--eth-account` CLI option, as it is obsolete [^eth-account]. > Por favor, ignore la opción de la CLI `--eth-account` , ya que está obsoleta [^eth-account].
1. For a daily use, we should consider to run a local blockchain node based on the [network](/networks/networks) you would like to join. That process is described in the [Join Codex Testnet](/networks/testnet) guide, but for a quick start we can use a public RPC endpoint. 1. Para el uso diario, debemos considerar ejecutar un nodo blockchain local basado en la [red](/networks/networks) a la que desea unirse. Ese proceso se describe en la guía [Unirse a Codex Testnet](/networks/testnet), pero para un inicio rápido podemos usar un endpoint RPC público.
2. Create a file with ethereum private key and set a proper permissions: 2. Cree un archivo con la clave privada de Ethereum y establezca los permisos adecuados:
> [!CAUTION] > [¡PRECAUCIÓN!]
> Please use key generation service for demo purpose only. > Utilice el servicio de generación de claves solo con fines de demostración.
```shell ```shell
response=$(curl -s https://key.codex.storage) response=$(curl -s https://key.codex.storage)
@ -269,7 +269,7 @@ And to be able to purchase a storage, we should run [Codex node with marketplace
awk -F ': ' '/address/ {print $2}' <<<"${response}" > eth.address awk -F ': ' '/address/ {print $2}' <<<"${response}" > eth.address
chmod 600 eth.key chmod 600 eth.key
``` ```
Show your ethereum address: Muestre su dirección Ethereum:
```shell ```shell
cat eth.address cat eth.address
``` ```
@ -277,11 +277,11 @@ And to be able to purchase a storage, we should run [Codex node with marketplace
0x412665aFAb17768cd9aACE6E00537Cc6D5524Da9 0x412665aFAb17768cd9aACE6E00537Cc6D5524Da9
``` ```
3. Fill-up your ethereum address with ETH and Tokens based on the the [network](/networks/networks) you would like to join. 3. Complete su dirección de Ethereum con ETH y tokens basados en la [red](/networks/networks) a la que desea unirse.
4. Specify bootstrap nodes and marketplace address based on the [network](/networks/networks) you would like to join. 4. Especifique los nodos de arranque y la dirección del marketplace según la [red](/networks/networks) a la que desea unirse.
5. Run the node: 5. Ejecute el nodo:
```shell ```shell
codex \ codex \
--data-dir=datadir \ --data-dir=datadir \
@ -296,31 +296,31 @@ And to be able to purchase a storage, we should run [Codex node with marketplace
--marketplace-address=0xAB03b6a58C5262f530D54146DA2a552B1C0F7648 --marketplace-address=0xAB03b6a58C5262f530D54146DA2a552B1C0F7648
``` ```
> [!NOTE] > [¡NOTA!]
> Codex also has a marketplace contract address autodiscovery mechanism based on the chain id, that mapping is done in the [source code](https://github.com/codex-storage/nim-codex/blob/master/codex/contracts/deployment.nim). In that way we can skip `--marketplace-address` argument or use it to override a hardcoded value. > Codex también tiene un mecanismo de autodescubrimiento de la dirección del contrato de marketplace basado en el ID de la cadena; esa asignación se realiza en el [código fuente](https://github.com/codex-storage/nim-codex/blob/master/codex/contracts/deployment.nim). De esa manera, podemos omitir el argumento `--marketplace-address` o usarlo para anular un valor codificado.
After node is up and running, and your address has founds, you should be able to [Purchase storage](/learn/using#purchase-storage) using [API](/developers/api). Una vez el nodo esté en funcionamiento y su dirección tenga fondos, debería poder [Comprar almacenamiento](/learn/using#purchase-storage) utilizando la [API](/developers/api).
You also can use [Codex App UI](https://app.codex.storage) for storage purchase. También puede usar la [UI de la aplicación Codex](https://app.codex.storage) para la compra de almacenamiento.
#### Codex storage node #### Nodo de Almacenamiento Codex
Codex [storage node](architecture#network-architecture) should be run by storage providers or in case you would like to sell your local storage. El [nodo de almacenamiento](architecture#network-architecture) Codex debe ser ejecutado por proveedores de almacenamiento o en caso de que desee vender su almacenamiento local.
For that, additionally to the [Codex node with marketplace support](#codex-node-with-marketplace-support) we should use `prover` sub-command and required [CLI options](#cli-options). Para eso, además del [Nodo Codex con soporte de marketplace](#codex-node-with-marketplace-support), debemos usar el subcomando `prover`y las [Opciones de la CLI](#cli-options) requeridas.
That sub-command will make Codex to listen for a proof requests on the blockchain and answer them. To compute an answer for the proof request, Codex will use stored data and circuit files generated by the code in the [codex-storage-proofs-circuits](https://github.com/codex-storage/codex-storage-proofs-circuits) repository. Ese subcomando hará que Codex escuche las solicitudes de prueba en la blockchain y las responda. Para calcular una respuesta para la solicitud de prueba, Codex usará los datos almacenados y los archivos de circuito generados por el código en el repositorio [codex-storage-proofs-circuits](https://github.com/codex-storage/codex-storage-proofs-circuits).
Every [network](/networks/networks) uses its own generated set of the files which are stored in the [codex-contracts-eth](https://github.com/codex-storage/codex-contracts-eth/tree/master/verifier/networks) repository and also uploaded to the CDN. Hash of the files set is also known by the [marketplace smart contract](/learn/architecture#smart-contract). Cada [red](/networks/networks) utiliza su propio conjunto generado de archivos que se almacenan en el repositorio [codex-contracts-eth](https://github.com/codex-storage/codex-contracts-eth/tree/master/verifier/networks) y también se cargan en la CDN. El hash del conjunto de archivos también es conocido por el [contrato inteligente del marketplace](/learn/architecture#smart-contract).
To download circuit files and make them available to Codex app, we have a stand-alone utility - `cirdl`. It can be [compiled from the sources](/learn/build#circuit-download-tool) or downloaded from the [GitHub release page](https://github.com/codex-storage/nim-codex/releases). Para descargar los archivos de circuito y hacerlos disponibles para la aplicación Codex, tenemos una utilidad independiente - `cirdl`. Se puede [compilar a partir de los fuentes](/learn/build#circuit-download-tool) o descargar desde la [página de lanzamiento de GitHub](https://github.com/codex-storage/nim-codex/releases).
1. Create ethereum key file 1. Crear archivo de clave Ethereum
<details> <details>
<summary>example</summary> <summary>example</summary>
> [!CAUTION] > [¡PRECAUCIÓN!]
> Please use key generation service for demo purpose only. > Utilice el servicio de generación de claves solo con fines de demostración.
```shell ```shell
response=$(curl -s https://key.codex.storage) response=$(curl -s https://key.codex.storage)
@ -328,7 +328,7 @@ To download circuit files and make them available to Codex app, we have a stand-
awk -F ': ' '/address/ {print $2}' <<<"${response}" > eth.address awk -F ': ' '/address/ {print $2}' <<<"${response}" > eth.address
chmod 600 eth.key chmod 600 eth.key
``` ```
Show your ethereum address: Muestre su dirección Ethereum:
```shell ```shell
cat eth.address cat eth.address
``` ```
@ -337,20 +337,20 @@ To download circuit files and make them available to Codex app, we have a stand-
``` ```
</details> </details>
2. To download circuit files, we should pass directory, RPC endpoint and marketplace address to the circuit downloader: 2. Para descargar los archivos de circuito, debemos pasar el directorio, el endpoint RPC y la dirección del marketplace al descargador de circuitos:
```shell ```shell
# Create circuit files folder # Crear carpeta de archivos de circuito
mkdir -p datadir/circuits mkdir -p datadir/circuits
chmod 700 datadir/circuits chmod 700 datadir/circuits
# Download circuit files # Descargar archivos de circuito
cirdl \ cirdl \
datadir/circuits \ datadir/circuits \
https://rpc.testnet.codex.storage \ https://rpc.testnet.codex.storage \
0xAB03b6a58C5262f530D54146DA2a552B1C0F7648 0xAB03b6a58C5262f530D54146DA2a552B1C0F7648
``` ```
2. Start Codex storage node 2. Iniciar el nodo de almacenamiento Codex
```shell ```shell
codex \ codex \
--data-dir=datadir \ --data-dir=datadir \
@ -366,17 +366,17 @@ To download circuit files and make them available to Codex app, we have a stand-
--circuit-dir=datadir/circuits --circuit-dir=datadir/circuits
``` ```
> [!NOTE] > [¡NOTA!]
> You would need to pass a bootstrap nodes, blockchain RPC endpoint and marketplace address based on the [network](/networks/networks) you would like to join. > Deberá pasar los nodos de arranque, el punto final RPC de la cadena de bloques y la dirección del marketplace en función de la [red](/networks/networks) a la que desee unirse.
After node is up and running, and your address has founds, you should be able to [sell the storage](/learn/using#create-storage-availability) using [API](/developers/api). Después de que el nodo esté en funcionamiento y su dirección haya encontrado, podrá [vender el almacenamiento](/learn/using#create-storage-availability) utilizando la [API](/developers/api).
You also can use [Codex App UI](https://app.codex.storage) to sell the storage. También puede usar la [UI de la aplicación Codex](https://app.codex.storage) para vender el almacenamiento.
#### Codex bootstrap node #### Nodo de Arranque Codex
Bootstrap nodes are used just to help peers with the initial nodes discovery and we need to run Codex with just some basic options: Los nodos de arranque se utilizan solo para ayudar a los pares con el descubrimiento inicial de nodos y necesitamos ejecutar Codex con solo algunas opciones básicas:
```shell ```shell
codex \ codex \
--data-dir=datadir \ --data-dir=datadir \
@ -384,7 +384,7 @@ codex \
--disc-port=8090 --disc-port=8090
``` ```
To get bootstrap node SPR we can use [API](https://api.codex.storage/#tag/Debug/operation/getDebugInfo) call: Para obtener el SPR del nodo de arranque podemos usar la llamada a la [API](https://api.codex.storage/#tag/Debug/operation/getDebugInfo) call:
```shell ```shell
curl -s localhost:8080/api/codex/v1/debug/info | jq -r '.spr' curl -s localhost:8080/api/codex/v1/debug/info | jq -r '.spr'
``` ```
@ -392,62 +392,62 @@ curl -s localhost:8080/api/codex/v1/debug/info | jq -r '.spr'
spr:CiUIAhIhApd79-AxPqwRDmu7Pk-berTDtoIoMz0ovKjo85Tz8CUdEgIDARo8CicAJQgCEiECl3v34DE-rBEOa7s-T5t6tMO2gigzPSi8qOjzlPPwJR0Qjv_WtwYaCwoJBFxzjbKRAh-aKkYwRAIgCiTq5jBTaJJb6lUxN-0uNCj8lkV9AGY682D21kIAMiICIE1yxrjbDdiSCiARnS7I2zqJpXC2hOvjB4JoL9SAAk67 spr:CiUIAhIhApd79-AxPqwRDmu7Pk-berTDtoIoMz0ovKjo85Tz8CUdEgIDARo8CicAJQgCEiECl3v34DE-rBEOa7s-T5t6tMO2gigzPSi8qOjzlPPwJR0Qjv_WtwYaCwoJBFxzjbKRAh-aKkYwRAIgCiTq5jBTaJJb6lUxN-0uNCj8lkV9AGY682D21kIAMiICIE1yxrjbDdiSCiARnS7I2zqJpXC2hOvjB4JoL9SAAk67
``` ```
That SPR record then can be used then by other peers for initial nodes discovery. Ese registro SPR puede ser utilizado entonces por otros pares para el descubrimiento inicial de nodos.
We should keep in mind some important things about SPR record (see [ENR](https://eips.ethereum.org/EIPS/eip-778)): Debemos tener en cuenta algunas cosas importantes sobre el registro SPR (ver [ENR](https://eips.ethereum.org/EIPS/eip-778)):
- It uses node IP (`--nat`), discovery port (`--disc-port`) and private key (`--net-privkey`) for record creation - Utiliza la IP del nodo (`--nat`), el puerto de descubrimiento (`--disc-port`) y la clave privada (`--net-privkey`) para la creación del registro.
- Specified data is signed on each run and will be changed but still contain specified node data when decoded - Los datos especificados se firman en cada ejecución y cambiarán, pero aún contendrán los datos especificados del nodo cuando se decodifiquen.
- You can decode it by passing to the Codex node at run and with `--log-level=trace` - Puede decodificarlo pasándolo al nodo Codex en la ejecución y con `--log-level=trace`
For bootstrap node, it is required to forward just discovery port on your Internet router. Para el nodo de arranque, es necesario reenviar solo el puerto de descubrimiento en su enrutador de Internet.
### Run as a daemon in Linux ### Ejecutar en Daemon en Linux
This functionality is not supported yet :construction: Esta funcionalidad aún no es compatible :construction:
### Run as a service in Windows ### Ejecutar como un servicio en Windows
This functionality is not supported yet :construction: Esta funcionalidad aún no es compatible :construction:
### Using Docker ### Usando Docker
We also ship Codex in Docker containers, which can be run on `amd64` and `arm64` platforms. También enviamos Codex en contenedores Docker, que se pueden ejecutar en plataformas `amd64` y `arm64`.
#### Docker entrypoint #### Docker entrypoint
[Docker entrypoint](https://github.com/codex-storage/nim-codex/blob/master/docker/docker-entrypoint.sh), supports some additional options, which can be used for easier configuration: El [punto de entrada de Docker](https://github.com/codex-storage/nim-codex/blob/master/docker/docker-entrypoint.sh), admite algunas opciones adicionales, que se pueden utilizar para facilitar la configuración:
- `ENV_PATH` - path to the file, in form `env=value` which will be sourced and available for Codex at run. That is useful for Kubernetes Pods configuration. - `ENV_PATH` - ruta al archivo, en forma `env=value` que se obtendrá y estará disponible para Codex en la ejecución. Eso es útil para la configuración de los Pods de Kubernetes.
- `NAT_IP_AUTO` - when set to `true`, will set `CODEX_NAT` variable with container internal IP address. It also is useful for Kubernetes Pods configuration, when we perform automated tests. - `NAT_IP_AUTO` - cuando se establece en `true`, establecerá la variable `CODEX_NAT` con la dirección IP interna del contenedor. También es útil para la configuración de los Pods de Kubernetes, cuando realizamos pruebas automatizadas.
- `NAT_PUBLIC_IP_AUTO` - used to set `CODEX_NAT` to public IP address using lookup services, like [ip.codex.storage](https://ip.codex.storage). Can be used for Docker/Kubernetes to set public IP in auto mode. - `NAT_PUBLIC_IP_AUTO` - se utiliza para establecer `CODEX_NAT` en la dirección IP pública utilizando servicios de búsqueda, como [ip.codex.storage](https://ip.codex.storage). Se puede utilizar para que Docker/Kubernetes establezcan la IP pública en modo automático.
- `ETH_PRIVATE_KEY` - can be used to pass ethereum private key, which will be saved and passed as a value of the `CODEX_ETH_PRIVATE_KEY` variable. It should be considered as unsafe option and used for testing purposes only. - `ETH_PRIVATE_KEY` - se puede utilizar para pasar la clave privada de Ethereum, que se guardará y pasará como valor de la variable`CODEX_ETH_PRIVATE_KEY` . Debe considerarse como una opción insegura y utilizarse solo con fines de prueba.
- When we set `prover` sub-command, entrypoint will run `cirdl` tool to download ceremony files, required by [Codex storage node](#codex-storage-node). - uando establecemos el subcomando `prover` , el punto de entrada ejecutará la herramienta `cirdl` para descargar los archivos de ceremonia, requeridos por el [nodo de almacenamiento Codex](#codex-storage-node).
#### Docker network #### Red Docker
When we are running Codex using Docker with default [bridge network](https://docs.docker.com/engine/network/drivers/bridge/), it will create a double NAT: Cuando ejecutamos Codex usando Docker con la [red de puente predeterminada](https://docs.docker.com/engine/network/drivers/bridge/), predeterminada, creará un NAT doble:
- One on the Docker side - Uno en el lado de Docker
- Second on your Internet router - Segundo en su enrutador de Internet
If your Internet router does not support [Full Cone NAT](https://learningnetwork.cisco.com/s/question/0D56e0000CWxJ9sCQF/lets-explain-in-details-full-cone-nat-restricted-cone-nat-and-symmetric-nat-terminologies-vs-cisco-nat-terminologies), you might have an issue and peer discovery and data transport will not work or might work unexpected. Si su enrutador de Internet no es compatible con [Full Cone NAT](https://learningnetwork.cisco.com/s/question/0D56e0000CWxJ9sCQF/lets-explain-in-details-full-cone-nat-restricted-cone-nat-and-symmetric-nat-terminologies-vs-cisco-nat-terminologies), es posible que tenga un problema y el descubrimiento de pares y el transporte de datos no funcionen o podrían funcionar de manera inesperada.
In that case, we should consider the following solutions: En ese caso, debemos considerar las siguientes soluciones:
- Use [host network](https://docs.docker.com/engine/network/drivers/host/) for Docker, which is supported only in Linux - Utilice la [red de host](https://docs.docker.com/engine/network/drivers/host/) para Docker, que solo es compatible con Linux
- Run [Using binary](#using-binary) - Ejecutar [usando binario](#using-binary)
- Use VM/VPS in the Cloud to run Docker with bridge or host network - Utilice VM/VPS en la nube para ejecutar Docker con red de puente o host
#### Run using Docker #### Ejecutar usando Docker
And we basically can use same options we [used for binary](#using-binary) and additionally it is required to mount volumes and map the ports. Y, básicamente, podemos usar las mismas opciones que [usamos para el bninario](#using-binary) y adicionalmente es necesario montar volúmenes y mapear los puertos.
[Codex storage node](#codex-storage-node) [Nodo de Almacenamiento Codex](#codex-storage-node)
1. Create ethereum key file 1. Crear archivo de clave Ethereum
<details> <details>
<summary>example</summary> <summary>example</summary>
> [!CAUTION] > [¡PRECAUCIÓN!]
> Please use key generation service for demo purpose only. > Utilice el servicio de generación de claves solo con fines de demostración.
```shell ```shell
response=$(curl -s https://key.codex.storage) response=$(curl -s https://key.codex.storage)
@ -455,7 +455,7 @@ And we basically can use same options we [used for binary](#using-binary) and ad
awk -F ': ' '/address/ {print $2}' <<<"${response}" > eth.address awk -F ': ' '/address/ {print $2}' <<<"${response}" > eth.address
chmod 600 eth.key chmod 600 eth.key
``` ```
Show your ethereum address: Muestre su dirección Ethereum:
```shell ```shell
cat eth.address cat eth.address
``` ```
@ -464,7 +464,7 @@ And we basically can use same options we [used for binary](#using-binary) and ad
``` ```
</details> </details>
2. Run Codex: 2. Ejecutar Codex:
```shell ```shell
docker run \ docker run \
--rm \ --rm \
@ -491,21 +491,21 @@ docker run \
--circuit-dir=/datadir/circuits --circuit-dir=/datadir/circuits
``` ```
> [!NOTE] > [¡NOTA!]
> You would need to pass a bootstrap nodes, blockchain RPC endpoint and marketplace address based on the [network](/networks/networks) you would like to join. > Deberá pasar nodos de arranque, el punto final RPC de la cadena de bloques y la dirección del marketplace según la [red](/networks/networks) a la que desee unirse.
### Using Docker Compose ### Usando Docker Compose
For Docker Compose, it is more suitable to use [environment variables](#environment-variables) for Codex configuration and we can reuse commands from example above, for Docker. Para Docker Compose, es más adecuado utilizar [variables de entorno](#environment-variables) para la configuración de Codex y podemos reutilizar los comandos del ejemplo anterior para Docker.
[Codex storage node](#codex-storage-node) [para la configuración de Codex y podemos reutilizar los comandos del ejemplo anterior para Docker.](#codex-storage-node)
1. Create ethereum key file 1. Crear archivo de clave Ethereum
<details> <details>
<summary>example</summary> <summary>example</summary>
> [!CAUTION] > [¡PRECAUCIÓN!]
> Please use key generation service for demo purpose only. > Utilice el servicio de generación de claves solo con fines de demostración.
```shell ```shell
response=$(curl -s https://key.codex.storage) response=$(curl -s https://key.codex.storage)
@ -513,7 +513,7 @@ For Docker Compose, it is more suitable to use [environment variables](#environm
awk -F ': ' '/address/ {print $2}' <<<"${response}" > eth.address awk -F ': ' '/address/ {print $2}' <<<"${response}" > eth.address
chmod 600 eth.key chmod 600 eth.key
``` ```
Show your ethereum address: Muestre su dirección Ethereum:
```shell ```shell
cat eth.address cat eth.address
``` ```
@ -522,7 +522,7 @@ For Docker Compose, it is more suitable to use [environment variables](#environm
``` ```
</details> </details>
2. Create `docker-compose.yaml` file: 2. Crear archivo `docker-compose.yaml`:
```yaml ```yaml
services: services:
codex: codex:
@ -565,22 +565,22 @@ For Docker Compose, it is more suitable to use [environment variables](#environm
max-file: 5 max-file: 5
``` ```
3. Run Codex: 3. Ejecutar Codex:
```shell ```shell
docker compose up docker compose up
``` ```
> [!NOTE] > [¡NOTA!]
> You would need to pass a bootstrap nodes, blockchain RPC endpoint and marketplace address based on the [network](/networks/networks) you would like to join. > Deberá pasar nodos de arranque, el punto final RPC de la cadena de bloques y la dirección del marketplace según la [red](/networks/networks) a la que desee unirse.
### On Kubernetes ### En Kubernetes
Helm chart code is available in [helm-charts](https://github.com/codex-storage/helm-charts) repository, but chart was not published yet. Helm chart code is available in [helm-charts](https://github.com/codex-storage/helm-charts) repository, but chart was not published yet.
## Known issues ## Known issues
[^multivalue-env-var]: Environment variables like `CODEX_BOOTSTRAP_NODE` and `CODEX_LISTEN_ADDRS` does not support multiple values. Please check [[Feature request] Support multiple SPR records via environment variable #525](https://github.com/codex-storage/nim-codex/issues/525), for more information. [^multivalue-env-var]: Las variables de entorno como `CODEX_BOOTSTRAP_NODE` y `CODEX_LISTEN_ADDRS` no admiten múltiples valores. Por favor, consulta [[Solicitud de función] Soporte para múltiples registros SPR a través de la variable de entorno #525](https://github.com/codex-storage/nim-codex/issues/525), para obtener más información.
[^sub-commands]: Sub-commands `persistence` and `persistence prover` can't be set via environment variables. [^sub-commands]: Los subcomandos `persistence` y `persistence prover` no se pueden establecer a través de variables de entorno.
[^data-dir]: We should set data-dir explicitly when we use GitHub releases - [[BUG] Change codex default datadir from compile-time to run-time #923](https://github.com/codex-storage/nim-codex/issues/923) [^data-dir]: Deberíamos establecer data-dir de forma explícita cuando usemos las versiones de GitHub - [[BUG] cambiar el datadir por defecto de Codex desde el tiempo de compilación al tiempo de ejecución #923.](https://github.com/codex-storage/nim-codex/issues/923)
[^port-forwarding]: [NAT traversal #753](https://github.com/codex-storage/nim-codex/issues/753) is not implemented yet and we would need to setup port-forwarding for discovery and transport protocols. [^port-forwarding]: [NAT traversal #753](https://github.com/codex-storage/nim-codex/issues/753) aún no está implementado, y necesitaremos configurar el reenvío de puertos para los protocolos de descubrimiento y transporte.
[^eth-account]: Please ignore `--eth-account` CLI option - [Drop support for --eth-account #727](https://github.com/codex-storage/nim-codex/issues/727). [^eth-account]: Por favor, ignora la opción de la CLI `--eth-account` - [Descartar el soporte para --eth-account #727](https://github.com/codex-storage/nim-codex/issues/727).