diff --git a/LICENSE-APACHE-2.0 b/LICENSE-APACHE-2.0 index cbd5c75..c28cc67 100644 --- a/LICENSE-APACHE-2.0 +++ b/LICENSE-APACHE-2.0 @@ -1,199 +1,226 @@ - Apache License - Version 2.0, January 2004 + Licencia Apache + Versión 2.0, Enero de 2004 http://www.apache.org/licenses/ - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at + TÉRMINOS Y CONDICIONES PARA EL USO, LA REPRODUCCIÓN Y LA DISTRIBUCIÓN + + 1. Definiciones. + + A los efectos de la presente Licencia, "Licencia" se entenderá como los + términos y condiciones para el uso, la reproducción y la distribución + según lo definido en las Secciones 1 a 9 de este documento. + + A los efectos de la presente Licencia, "Licenciante" se entenderá como el + propietario de los derechos de autor o la entidad autorizada por el + propietario de los derechos de autor que otorga la Licencia. + + A los efectos de la presente Licencia, "Entidad Legal" se entenderá como + la unión de la entidad actuante y todas las demás entidades que + controlan, son controladas por o están bajo control común con esa + entidad. Para los fines de esta definición, "control" significa (i) la + facultad, directa o indirecta, de dirigir o gestionar dicha entidad, ya + sea por contrato o de otro modo, o (ii) la titularidad del cincuenta por + ciento (50%) o más de las acciones en circulación, o (iii) la titularidad + real de dicha entidad. + + A los efectos de la presente Licencia, "Usted" (o "Su") se entenderá como + una persona física o Entidad Legal que ejerce los permisos otorgados por + esta Licencia. + + A los efectos de la presente Licencia, la forma "Fuente" se entenderá como + la forma preferida para realizar modificaciones, incluyendo, entre otros + elementos, el código fuente del software, la fuente de la documentación + y los archivos de configuración. + + A los efectos de la presente Licencia, la forma "Objeto" se entenderá como + cualquier forma resultante de la transformación o traducción mecánica de + una forma Fuente, incluyendo, entre otros elementos, el código objeto + compilado, la documentación generada y las conversiones a otros tipos de + medios. + + A los efectos de la presente Licencia, "Obra" se entenderá como la obra + de autoría, ya sea en forma Fuente u Objeto, puesta a disposición bajo la + Licencia, tal como se indica mediante un aviso de derechos de autor que + se incluye o adjunta a la obra (se proporciona un ejemplo en el Apéndice + a continuación). + + A los efectos de la presente Licencia, "Obras Derivadas" se entenderá como + cualquier obra, ya sea en forma Fuente u Objeto, que se base en (o se + derive de) la Obra y para la cual las revisiones editoriales, + anotaciones, elaboraciones u otras modificaciones representen, en su + conjunto, una obra original de autoría. Para los fines de esta + Licencia, las Obras Derivadas no incluirán aquellas obras que permanezcan + separadas de la Obra, o que simplemente se enlacen (o se vinculen por + nombre) a las interfaces de la misma y de sus Obras Derivadas. + + A los efectos de la presente Licencia, "Contribución" se entenderá como + cualquier obra de autoría, incluyendo la versión original de la Obra y + cualquier modificación o adición a dicha Obra o a sus Obras Derivadas, + que se someta intencionadamente al Licenciante para su inclusión en la + Obra por el titular de los derechos de autor o por una persona física o + Entidad Legal autorizada a presentarla en nombre de dicho titular. A los + efectos de esta definición, "sometida" se entenderá como cualquier forma + de comunicación electrónica, verbal o escrita enviada al Licenciante o a + sus representantes, incluyendo, entre otros medios, la comunicación a + través de listas de correo electrónico, sistemas de control de código + fuente y sistemas de seguimiento de incidencias que sean gestionados por + el Licenciante o en su nombre con el fin de debatir y mejorar la Obra, + excluyendo, sin embargo, aquella comunicación que esté marcada de forma + destacada o designada de otro modo por escrito por el titular de los + derechos de autor como "No es una Contribución". + + A los efectos de la presente Licencia, "Contribuyente" se entenderá como + el Licenciante y cualquier persona física o Entidad Legal en cuyo nombre + el Licenciante haya recibido una Contribución y que posteriormente se + haya incorporado a la Obra. + + 2. Otorgamiento de Licencia de Derechos de Autor. Sujeto a los términos y + condiciones de esta Licencia, cada Contribuyente otorga por la presente a + Usted una licencia de derechos de autor, de carácter perpetuo, mundial, + no exclusivo, gratuito, exento de regalías e irrevocable, para + reproducir, preparar Obras Derivadas de, exhibir públicamente, ejecutar + públicamente, sublicenciar y distribuir la Obra y dichas Obras Derivadas + en forma Fuente u Objeto. + + 3. Otorgamiento de Licencia de Patente. Sujeto a los términos y condiciones + de esta Licencia, cada Contribuyente otorga por la presente a Usted una + licencia de patente, de carácter perpetuo, mundial, no exclusivo, + gratuito, exento de regalías e irrevocable (salvo por lo indicado en esta + sección), para fabricar, hacer fabricar, utilizar, ofrecer a la venta, + vender, importar y de otro modo transferir la Obra, donde dicha licencia + se aplica únicamente a aquellas reivindicaciones de patentes que puedan + ser objeto de licencia por dicho Contribuyente y que resulten + necesariamente infringidas por su(s) Contribución(es), bien de forma + aislada o bien por la combinación de su(s) Contribución(es) con la Obra a + la que se haya(n) sometido dicha(s) Contribución(es). Si Usted + entabla un litigio en materia de patentes contra cualquier entidad + (incluida una demanda reconvencional o una contrademanda en un proceso + judicial) alegando que la Obra o una Contribución incorporada a la misma + constituye una infracción de patente directa o indirecta, toda licencia + de patente que le haya sido otorgada a Usted en virtud de esta Licencia + para dicha Obra quedará resuelta a partir de la fecha de presentación de + dicho litigio. + + 4. Redistribución. Usted tiene la facultad de reproducir y distribuir copias + de la Obra o de sus Obras Derivadas en cualquier medio, con o sin + modificaciones, y en forma Fuente u Objeto, siempre y cuando cumpla con + las condiciones siguientes: + + (a) Deberá proporcionar a cualesquiera otros destinatarios de la Obra o + de las Obras Derivadas una copia de la presente Licencia; y + + (b) Deberá hacer que todos los archivos modificados lleven avisos + prominentes que indiquen que Usted ha modificado dichos archivos; y + + (c) Deberá conservar, en la forma Fuente de toda Obra Derivada que + distribuya, todos los avisos de derechos de autor, patentes, marcas + comerciales y atribución que figuren en la forma Fuente de la Obra, + excluyendo aquellos avisos que no guarden relación con parte alguna + de las Obras Derivadas; y + + (d) Si la Obra incluye un archivo de texto "NOTICE" como parte de su + distribución, toda Obra Derivada que Usted distribuya deberá + incluir una copia legible de los avisos de atribución contenidos + en dicho archivo NOTICE, excluyendo aquellos avisos que no guarden + relación con parte alguna de las Obras Derivadas, en al menos uno de + los lugares siguientes: dentro de un archivo de texto "NOTICE" + distribuido como parte de las Obras Derivadas; dentro de la forma + Fuente o la documentación, si se proporciona junto con las Obras + Derivadas; o bien, dentro de una visualización generada por las + Obras Derivadas, si tales avisos de terceros aparecen normalmente y + dondequiera que lo hagan. Los contenidos del archivo "NOTICE" + tienen fines meramente informativos y no modifican la Licencia. + Usted podrá añadir sus propios avisos de atribución dentro de las + Obras Derivadas que distribuya, junto con o como un apéndice al + texto "NOTICE" de la Obra, a condición de que dichos avisos de + atribución adicionales no puedan interpretarse como una + modificación de la Licencia. + + Usted podrá añadir su propia declaración de derechos de autor a sus + modificaciones y podrá establecer términos y condiciones de licencia + adicionales o diferentes para el uso, la reproducción o la + distribución de sus modificaciones, o para cualesquiera de dichas Obras + Derivadas en su conjunto, siempre y cuando su uso, reproducción y + distribución de la Obra cumplan, por lo demás, con las condiciones + establecidas en la presente Licencia. + + 5. Presentación de Contribuciones. Salvo que Usted indique expresamente lo + contrario, toda Contribución que someta intencionadamente al Licenciante + para su inclusión en la Obra quedará sujeta a los términos y + condiciones de la presente Licencia, sin que resulten de aplicación + términos o condiciones adicionales de clase alguna. No obstante lo + anterior, nada de lo dispuesto en este documento sustituirá o + modificará los términos de acuerdo de licencia independiente alguno que + pueda haber celebrado con el Licenciante en relación con dichas + Contribuciones. + + 6. Marcas Comerciales. La presente Licencia no otorga autorización para + utilizar los nombres comerciales, marcas comerciales, marcas de servicio + o nombres de productos del Licenciante, salvo en la medida en que ello + resulte necesario para un uso razonable y habitual al describir el + origen de la Obra y al reproducir el contenido del archivo "NOTICE". + + 7. Exclusión de Garantía. Salvo que lo exija la legislación aplicable o se + haya acordado lo contrario por escrito, el Licenciante facilita la Obra + (y cada Contribuyente facilita sus Contribuciones) "TAL CUAL", SIN + GARANTÍAS NI CONDICIONES DE CLASE ALGUNA, ya sean expresas o + implícitas, incluyendo, sin carácter limitativo, garantía o condición + alguna de TITULARIDAD, NO INFRACCIÓN, COMERCIABILIDAD o IDONEIDAD PARA + UN FIN PARTICULAR. Usted es el único responsable de determinar la + idoneidad del uso o la redistribución de la Obra y asume todo riesgo + asociado al ejercicio por Su parte de los permisos otorgados en virtud + de la presente Licencia. + + 8. Limitación de Responsabilidad. En ningún caso y con independencia de la + teoría jurídica aplicable, ya sea por responsabilidad extracontractual + (incluida la negligencia), responsabilidad contractual o de otro tipo— + salvo que lo exija la legislación aplicable (como en caso de actuación + dolosa o negligencia grave) o se haya acordado lo contrario por + escrito—ningún Contribuyente será responsable ante Usted por daños y + perjuicios, incluyendo cualesquiera daños y perjuicios directos, + indirectos, especiales, incidentales o derivados de cualquier clase que + surjan como resultado de la presente Licencia o del uso o la + imposibilidad de usar la Obra (incluyendo, sin carácter limitativo, los + daños y perjuicios por lucro cesante, paralización del trabajo, fallos o + funcionamiento incorrecto de equipos informáticos o cualesquiera otros + daños o pérdidas de naturaleza comercial), incluso en el caso de que + dicho Contribuyente haya sido advertido de la posibilidad de que se + produzcan tales daños y perjuicios. + + 9. Aceptación de Garantía o Responsabilidad Adicional. Al redistribuir la + Obra o sus Obras Derivadas, Usted podrá optar por ofrecer, y cobrar una + tarifa por ello, la asunción de obligaciones de soporte, garantía, + indemnización u otras obligaciones y/o derechos de responsabilidad que + sean compatibles con la presente Licencia. No obstante, al asumir tales + obligaciones, Usted solo podrá actuar en nombre propio y bajo su + exclusiva responsabilidad, no en nombre de ningún otro Contribuyente, y + únicamente si Usted se compromete a indemnizar, defender y mantener + indemne a todo Contribuyente frente a toda responsabilidad en la que + éste incurra o frente a toda reclamación que se presente contra éste a + causa de la asunción por Su parte de dicha garantía o responsabilidad + adicional. + + FIN DE LOS TÉRMINOS Y CONDICIONES + + APÉNDICE: Cómo aplicar la Licencia Apache a su obra. + + Para aplicar la Licencia Apache a su obra, adjunte el siguiente aviso + estándar, sustituyendo la información comprendida entre corchetes "[ ]" + por su propia información identificativa. (No incluya los corchetes). + El texto deberá incluirse dentro de la sintaxis de comentario apropiada + para el formato de archivo. Asimismo, se recomienda que se incluya un + nombre de archivo o de clase y una descripción del propósito en la misma + "página impresa" que el aviso de derechos de autor para facilitar la + identificación dentro de los archivos de terceros. + + Amparado por la Licencia Apache, Versión 2.0 (la "Licencia"); + no podrá utilizar este archivo salvo en cumplimiento de la Licencia. + Podrá obtener una copia de la Licencia en: http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Salvo que lo exija la legislación aplicable o se haya acordado lo contrario + por escrito, el software distribuido en virtud de la Licencia se facilita + "TAL CUAL", SIN GARANTÍAS NI CONDICIONES DE CLASE ALGUNA, ya sean expresas + o implícitas. Consulte la Licencia para conocer el articulado específico + que rige los permisos y las limitaciones en virtud de la Licencia. diff --git a/LICENSE-MIT b/LICENSE-MIT index 9cf1062..9ad3d3b 100644 --- a/LICENSE-MIT +++ b/LICENSE-MIT @@ -1,19 +1,18 @@ -MIT License +Licencia MIT -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Por la presente se concede permiso, a título gratuito, a cualquier persona que obtenga una copia +de este software y de los archivos de documentación asociados (el "Software"), para utilizar +el Software sin restricción alguna, incluyendo, sin carácter limitativo, el derecho a +usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar y/o vender +copias del Software, y para permitir a aquellas personas a quienes se les facilite +el Software a hacer lo propio, con sujeción a las condiciones siguientes: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +El aviso de derechos de autor anterior y el presente aviso de permiso se incluirán en todas +las copias o partes sustanciales del Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, YA SEA EXPRESA O +IMPLÍCITA, INCLUYENDO, A TÍTULO MERAMENTE ENUNCIATIVO Y NO LIMITATIVO, LAS GARANTÍAS DE COMERCIABILIDAD, +IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS +AUTORES O LOS TITULARES DE LOS DERECHOS DE AUTOR SERÁN RESPONSABLES DE RECLAMACIÓN, DAÑO O +RESPONSABILIDAD ALGUNA, YA SEA DERIVADA DE UN INCUMPLIMIENTO CONTRACTUAL, DE UN ACTO ILÍCITO O DE OTRA ÍNDOLE, QUE SURJA DE, +EN RELACIÓN CON O A RAÍZ DEL SOFTWARE, SU USO O CUALQUIER OTRO TIPO DE OPERACIÓN REALIZADA CON EL MISMO. diff --git a/README.md b/README.md index c4e1a51..d408931 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,25 @@ -# Codex documentation +# Documentación de Codex - Welcome to Codex documentation. +Bienvenido a la documentación de Codex. - Codex is a decentralised data storage platform that provides exceptionally strong censorship resistance and durability guarantees. +Codex es una plataforma descentralizada de almacenamiento de datos que ofrece una gran resistencia a la censura y sólidas garantías de durabilidad. +## Ejecutar y construir -## Run and build +Para la documentación, utilizamos [VitePress](https://vitepress.dev/), que es un generador de sitios web estáticos impulsado por [Vue](https://vuejs.org/) construido sobre [Vite](https://vitejs.dev/). - For documentation we use [VitePress](https://vitepress.dev/), which is [Vue](https://vuejs.org/)-powered static site generator built on top of [Vite](https://vitejs.dev/). +Para ejecutar el sitio localmente, debemos clonar el repositorio, instalar las dependencias y ejecutar el siguiente comando: - To run site locally, we should clone repository, install dependencies and run the following command - ```shell - npm run docs:dev +```shell +npm run docs:dev ```
- Detailed guide + Guía detallada - 1. [Install](https://nodejs.org/en/download/package-manager) node 20 or [above](https://nodejs.org/en/about/previous-releases) + 1. [Instala](https://nodejs.org/en/download/package-manager) node 20 o [superior](https://nodejs.org/en/about/previous-releases) - Using [nvm](https://github.com/nvm-sh/nvm) + Usando [nvm](https://github.com/nvm-sh/nvm) ```shell # nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash @@ -33,18 +33,18 @@ v22.6.0 ``` - 2. Clone repository + 2. Clona el repositorio ```shell git clone https://github.com/codex-storage/codex-docs cd codex-docs ``` - 3. Install dependencies + 3. Instala las dependencias ```shell npm install ``` - 4. Start a local dev server with instant hot updates + 4. Inicia un servidor de desarrollo local con actualizaciones instantáneas ```shell # Local npm run docs:dev @@ -53,7 +53,7 @@ npm run docs:dev -- --host ``` - 5. [Build the site](https://vitepress.dev/guide/deploy) + 5. [Genera el sitio web](https://vitepress.dev/guide/deploy) ```shell npm run docs:build @@ -62,17 +62,18 @@
-## Contribute +## Contribuir - Please check [VitePress documentation](https://vitepress.dev/) for more details about customizations. + Por favor, consulta la [documentación de VitePress](https://vitepress.dev/) para obtener más información sobre las opciones de personalización. - Process - - Create a fork - - Create a custom branch in your fork - - Add your contribution - - Make a PR to the upstream repository + Proceso: - Project structure - - `learn` - All information to learn about Codex - - `networks` - Codex networks related information - - `developers` - Codex development process and guides +* Haz un fork del repositorio. +* Crea una rama (branch) en tu fork. +* Añade tu contribución. +* Envía un pull request (PR) al repositorio upstream. + + Estructura del proyecto: +- `learn` - Toda la información para aprender sobre Codex. +- `networks` - Información relacionada con las redes de Codex. +- `developers` - Proceso de desarrollo y guías de Codex. diff --git a/codex/disclaimer.md b/codex/disclaimer.md index dba0977..e818a7f 100644 --- a/codex/disclaimer.md +++ b/codex/disclaimer.md @@ -1,5 +1,5 @@ -# Disclaimer +# Descargo de responsabilidad -The code and instructions provided within this repository and related repositories are provided “as-is”, without warranty of any kind, express or implied, including but not limited to the safety or correctness, or performance of the code or instructions provided. We make no assurance that the code will work as intended, and users may experience delays, failures, errors, omissions or loss of transmitted information whilst using or running Codex. +El código y las instrucciones proporcionadas dentro de este repositorio y repositorios relacionados se proporcionan "tal cual", sin garantía de ningún tipo, expresa o implícita, incluyendo, entre otras, la seguridad o corrección, o el rendimiento del código o las instrucciones proporcionadas. No aseguramos que el código funcionará como se pretende, y los usuarios pueden experimentar retrasos, fallos, errores, omisiones o pérdida de información transmitida al usar o ejecutar Codex. -Running Codex is done at your own risk. As such, we are not responsible nor liable for any damage that may occur to your hardware, software, data, or network, or for any loss, claim, damage of whatever nature, or other liability arising from or in connection with the use of the provided code and instructions. +La ejecución de Codex se realiza bajo su propio riesgo. Como tal, no somos responsables de ningún daño que pueda ocurrir a su hardware, software, datos o red, ni de ninguna pérdida, reclamación, daño de cualquier naturaleza u otra responsabilidad que surja de o en conexión con el uso del código e instrucciones proporcionados. diff --git a/codex/privacy-policy.md b/codex/privacy-policy.md index 256025f..02628a1 100644 --- a/codex/privacy-policy.md +++ b/codex/privacy-policy.md @@ -1,15 +1,15 @@ --- lastUpdated: false --- -# Privacy Policy +# Política de privacidad -Last updated: 9 February 2024 +Última actualización: 9 de febrero de 2024 -This Privacy Policy is intended to inform users of our approach to privacy in respect of this website (**"Website"**). In this regard, if you are visiting our Website, this Privacy Policy applies to you. +El objetivo de esta Política de privacidad es informar a los usuarios de nuestro enfoque sobre la privacidad con respecto a este sitio web ("Sitio web"). En este sentido, si está visitando nuestro Sitio web, esta Política de privacidad se aplica a usted. -### 1) Who we are +### 1) Quiénes somos -For the purposes of this Privacy Policy and the collection and processing of personal data as a controller, the relevant entity is the Logos Collective Association, which has its registered office in Zug and its legal domicile address at +A los efectos de esta Política de privacidad y la recopilación y el procesamiento de datos personales como controlador, la entidad relevante es la Logos Collective Association, que tiene su domicilio social en Zug y su domicilio legal en ``` Logos Collective Association @@ -19,54 +19,54 @@ Baarerstrasse 10 Switzerland ``` -Whenever we refer to “Logos”, “we” or other similar references, we are referring to the Logos Collective Association. +Siempre que nos refiramos a "Logos", "nosotros" u otras referencias similares, nos referimos a Logos Collective Association. -### 2) We limit the collection and processing of personal data from your use of the Website +### 2) Limitamos la recopilación y el procesamiento de datos personales derivados de su uso del Sitio web -We aim to limit the collection and collection and processing of personal data from users of the Website. We only collect and process certain personal data for specific purposes and where we have the legal basis to do so under applicable privacy legislation. We will not collect or process any personal data that we don’t need and where we do store any personal data, we will only store it for the least amount of time needed for the indicated purpose. +Nuestro objetivo es limitar la recopilación y el procesamiento de datos personales de los usuarios del Sitio web. Solo recopilamos y procesamos ciertos datos personales para fines específicos y cuando tenemos la base legal para hacerlo según la legislación de privacidad aplicable. No recopilaremos ni procesaremos ningún dato personal que no necesitemos y, cuando almacenemos algún dato personal, solo lo almacenaremos durante el menor tiempo necesario para el propósito indicado. -In this regard, we collect and process the following personal data from your use of the Website: +En este sentido, recopilamos y procesamos los siguientes datos personales de su uso del Sitio web: -* **IP address**: As part of such use of the Website, we briefly process your IP address but we have no way of identifying you. We however have a legitimate interest in processing such IP addresses to ensure the technical functionality and enhance the security measures of the Website. This IP address is not stored by us over time. +* **Dirección IP**:Como parte de dicho uso del Sitio web, procesamos brevemente su dirección IP, pero no tenemos forma de identificarlo. Sin embargo, tenemos un interés legítimo en procesar dichas direcciones IP para garantizar la funcionalidad técnica y mejorar las medidas de seguridad del Sitio web. Esta dirección IP no es almacenada por nosotros a lo largo del tiempo. -### 3) Third party processing of personal data +### 3) Procesamiento de datos personales por parte de terceros -In addition to our limited and collection of personal data, third parties may collect or process personal data as a result of the Website making use of certain features or to provide certain content. To the extent you interact with such third party content or features, their respective privacy policies will apply. +Además de nuestra recopilación limitada de datos personales, terceros pueden recopilar o procesar datos personales como resultado de que el sitio web utilice ciertas funciones o para proporcionar cierto contenido. En la medida en que interactúe con dicho contenido o funciones de terceros, se aplicarán sus respectivas políticas de privacidad. -### 4) Security measures we take in respect of the Website +### 4) Medidas de seguridad que tomamos con respecto al Sitio web -As a general approach, we take data security seriously and we have implemented a variety of security measures on the Website to maintain the safety of your personal data when you submit such information to us. +Como enfoque general, tomamos en serio la seguridad de los datos y hemos implementado una variedad de medidas de seguridad en el Sitio web para mantener la seguridad de sus datos personales cuando nos envía dicha información. -### 5) Exporting data outside the European Union and Switzerland +### 5) Exportación de datos fuera de la Unión Europea y Suiza -We are obliged to protect the privacy of personal data that you may have submitted in the unlikely event that we export your personal data to places outside the European Union or Switzerland. This means that personal data will only be processed in countries or by parties that provide an adequate level of protection as deemed by Switzerland or the European Commission. Otherwise, we will use other forms of protections, such as specific forms of contractual clauses to ensure such personal data is provided the same protection as required in Switzerland or Europe. In any event, the transmission of personal data outside the European Union and Switzerland will always occur in conformity with applicable privacy legislation. +Estamos obligados a proteger la privacidad de los datos personales que pueda haber enviado en el improbable caso de que exportemos sus datos personales a lugares fuera de la Unión Europea o Suiza. Esto significa que los datos personales solo se procesarán en países o por partes que proporcionen un nivel adecuado de protección según lo considere Suiza o la Comisión Europea. De lo contrario, utilizaremos otras formas de protección, como formas específicas de cláusulas contractuales para garantizar que dichos datos personales reciban la misma protección que la requerida en Suiza o Europa. En cualquier caso, la transmisión de datos personales fuera de la Unión Europea y Suiza siempre ocurrirá de conformidad con la legislación de privacidad aplicable. -### 6) Your choices and rights +### 6) Sus opciones y derechos -As explained in this Privacy Policy, we limit our collection and processing of your personal data wherever possible. Nonetheless, you still have certain choices and rights in respect of the personal data which we do collect and process. As laid out in relevant privacy legislation, you have the right to: +Como se explica en esta Política de privacidad, limitamos nuestra recopilación y procesamiento de sus datos personales siempre que sea posible. No obstante, todavía tiene ciertas opciones y derechos con respecto a los datos personales que recopilamos y procesamos. Como se establece en la legislación de privacidad pertinente, tiene derecho a: -* Ask us to correct or update your personal data (where reasonably possible); +* Pedirnos que corrijamos o actualicemos sus datos personales (cuando sea razonablemente posible); + +* Pedirnos que eliminemos sus datos personales de nuestros sistemas; + +* Pedirnos una copia de sus datos personales, que también pueden ser transferidos a otro controlador de datos a su solicitud; + +* Retirar su consentimiento para procesar sus datos personales (solo si se solicitó el consentimiento para una actividad de procesamiento), lo que solo afecta a las actividades de procesamiento que se basan en su consentimiento y no afecta a la validez de dichas actividades de procesamiento antes de que haya retirado su consentimiento; + +* Oponerse al procesamiento de sus datos personales; y + +*Presentar una queja ante el Comisionado Federal de Protección de Datos e Información (FDPIC), si cree que sus datos personales han sido procesados ilegalmente. -* Ask us to remove your personal data from our systems; +### 7) Enlaces de terceros -* Ask us for a copy of your personal data, which may also be transferred to another data controller at your request; +En este Sitio web, puede encontrar enlaces a sitios web de terceros. Estos sitios de terceros tienen políticas de privacidad separadas e independientes. Por lo tanto, no tenemos ninguna responsabilidad por el contenido y las actividades de estos sitios web de terceros. -* Withdraw your consent to process your personal data (only if consent was asked for a processing activity), which only affects processing activities that are based on your consent and doesn’t affect the validity of such processing activities before you have withdrawn your consent; +### 8) Esta Política de privacidad podría cambiar -* Object to the processing of your personal data; and +Podemos modificar o reemplazar cualquier parte de esta Política de privacidad en cualquier momento y sin previo aviso. Consulte el sitio web periódicamente para ver si hay cambios. La nueva Política de privacidad entrará en vigor inmediatamente después de su publicación en nuestro Sitio Web. -* File a complaint with the Federal Data Protection and Information Commissioner (FDPIC), if you believe that your personal data has been processed unlawfully. +### 9) Información de contacto -### 7) Third party links +En la medida en que tenga alguna pregunta sobre la Política de privacidad, por favor contáctenos en legal@free.technology. -On this Website, you may come across links to third party websites. These third party sites have separate and independent privacy policies. We therefore have no responsibility or liability for the content and activities of these third party websites. - -### 8) This Privacy Policy might change - -We may modify or replace any part of this Privacy Policy at any time and without notice. Please check the Website periodically for any changes. The new Privacy Policy will be effective immediately upon its posting on our Website. - -### 9) Contact information - -To the extent that you have any questions about the Privacy Policy, please contact us at legal@free.technology. - -This document is licensed under CC-BY-SA. +Este documento está licenciado bajo CC-BY-SA diff --git a/codex/security.md b/codex/security.md index 4da6ab5..ee7c07f 100644 --- a/codex/security.md +++ b/codex/security.md @@ -1,7 +1,7 @@ -# Security +# Seguridad -We take security seriously at Codex and across the Institute of Free Technology and its affiliates. +En Codex, y en todo e Instituto de Tecnología Libre y sus afiliados, nos tomamos la seguridad muy en serio. -Please report any security incidents via security@free.technology. +Por favor, informe de cualquier incidente de seguridad a través de security@free.technology. -Please report any discovered vulnerabilities in our bounty programme at HackenProof to help ensure our protocols and software remain secure. +Por favor, informe de cualquier vulnerabilidad descubierta en nuestro programa de recompensas en HackenProof para ayudar a garantizar que nuestros protocolos y software permanezcan seguros. diff --git a/codex/terms-of-use.md b/codex/terms-of-use.md index bf8472b..e84de8c 100644 --- a/codex/terms-of-use.md +++ b/codex/terms-of-use.md @@ -1,19 +1,18 @@ --- lastUpdated: false --- -# Terms of Use +# Términos de Uso +Última actualización: 14 de febrero de 2024 -Last updated: 14 February 2024 +Estos términos de uso del sitio web ("Términos de Uso del Sitio Web") son celebrados entre usted y nosotros, y rigen su acceso y uso de este Sitio Web, incluyendo cualquier contenido y funcionalidad contenida en el Sitio Web. -These website terms of use ("**Website Terms of Use**") are entered into by you and us, and they govern your access and use of this Website, including any content and functionality contained in the Website. +Es su responsabilidad leer los Términos de Uso del Sitio Web cuidadosamente antes de su uso del Sitio Web y su uso del Sitio Web significa que ha aceptado estar obligado a cumplir con estos Términos de Uso del Sitio Web. -It is your responsibility to read the Website Terms of Use carefully before your use of the Website and your use of the Website means you have agreed to be bound and comply with these Website Terms of Use. +Si no está de acuerdo con estos Términos de Uso del Sitio Web, no debe acceder ni utilizar el Sitio Web. -If you do not agree with these Website Terms of Use, you must not access or use the Website. +### 1) Quiénes somos -### 1) Who we are - -For the purposes of these Website Terms of Use, the relevant entity is the Logos Collective Association, which has its registered office in Zug and its legal domicile address at: +A los efectos de estos Términos de Uso del Sitio Web, la entidad relevante es la Logos Collective Association, que tiene su domicilio social en Zug y su domicilio legal en: ``` Logos Collective Association @@ -23,74 +22,74 @@ Baarerstrasse 10 Switzerland ``` -Whenever we refer to "Logos", "we", "us" or any other similar references, we are referring to the Logos Collective Association. +Siempre que nos refiramos a "Logos", "nosotros", "nos" o cualquier otra referencia similar, nos referimos a la Logos Collective Association. -### 2) Disclaimers +### 2) Descargos de responsabilidad -The Website is provided by us on an ‘as is’ basis and you use the Website at your own sole discretion and risk. +El Sitio Web es proporcionado por nosotros "tal cual" y usted utiliza el Sitio Web bajo su propia discreción y riesgo exclusivos. -We disclaim all warranties of any kind, express or implied, including without limitation the warranties of merchantability, fitness for a particular purpose, and non-infringement of intellectual property or other violation of rights. We do not warrant or make any representations concerning the completeness, accuracy, legality, utility, reliability, suitability or availability of the use of the Website, the content on this Website or otherwise relating to the Website, such content or on any sites linked to this site.These disclaimers will apply to the maximum extent permitted by applicable law. +Renunciamos a todas las garantías de cualquier tipo, ya sean expresas o implícitas, incluyendo, entre otras, las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción de la propiedad intelectual u otra violación de derechos. No garantizamos ni hacemos ninguna declaración con respecto a la integridad, exactitud, legalidad, utilidad, fiabilidad, idoneidad o disponibilidad del uso del Sitio Web, el contenido de este Sitio Web o en relación con el Sitio Web, dicho contenido o en cualquier sitio vinculado a este sitio. Estos descargos de responsabilidad se aplicarán en la medida máxima permitida por la ley aplicable. -We make no claims that the Website or any of its content is accessible, legally compliant or appropriate in your jurisdiction. Your access or use of the Website is at your own sole discretion and you are solely responsible for complying with any applicable local laws. +No afirmamos que el Sitio Web o cualquiera de sus contenidos sean accesibles, legalmente compatibles o apropiados en su jurisdicción. Su acceso o uso del Sitio Web es bajo su propia discreción exclusiva y usted es el único responsable de cumplir con cualquier ley local aplicable. -The content herein or as accessible through this website is intended to be made available for informational purposes only and should not be considered as creating any expectations or forming the basis of any contract, commitment or binding obligation with us. No information herein shall be considered to contain or be relied upon as a promise, representation, warranty or guarantee, whether express or implied and whether as to the past, present or the future in relation to the projects and matters described herein. +El contenido aquí o accesible a través de este sitio web tiene la intención de estar disponible solo con fines informativos y no debe considerarse como la creación de ninguna expectativa o la formación de la base de ningún contrato, compromiso u obligación vinculante con nosotros. Ninguna información aquí contenida se considerará que contiene o se confiará en ella como una promesa, representación, garantía o garantía, ya sea expresa o implícita y ya sea en cuanto al pasado, presente o futuro en relación con los proyectos y asuntos descritos aquí. -The information contained herein does not constitute financial, legal, tax, or other advice and should not be treated as such. +La información contenida aquí no constituye asesoramiento financiero, legal, fiscal o de otro tipo y no debe tratarse como tal. -Nothing in this Website should be construed by you as an offer to buy or sell, or soliciting any offer to buy or sell any tokens or any security. +Nada en este Sitio Web debe ser interpretado por usted como una oferta para comprar o vender, o solicitar cualquier oferta para comprar o vender cualquier token o cualquier valor. -### 3) Forward looking statements +### 3) Declaraciones prospectivas -The Website may also contain forward-looking statements that are based on current expectations, estimates, forecasts, assumptions and projections about the technology, industry and markets in general. +El Sitio Web también puede contener declaraciones prospectivas que se basan en expectativas, estimaciones, pronósticos, suposiciones y proyecciones actuales sobre la tecnología, la industria y los mercados en general. -The forward looking statements, which may include statements about the roadmap, project descriptions, technical details, functionalities, features, the development and use of tokens by projects, and any other statements related to such matters or as accessible through this website are subject to a high degree of risk and uncertainty. The forward looking statements are subject to change based on, among other things, market conditions, technical developments, and regulatory environment. The actual development and results, including the order and the timeline, might vary from what’s presented. The information contained herein is a summary and does not purport to be accurate, reliable or complete and we bear no responsibility for the accuracy, reliability or completeness of information contained herein. Because of the high degree of risk and uncertainty described above, you should not place undue reliance on any matters described in this website or as accessible through this website. +Las declaraciones prospectivas, que pueden incluir declaraciones sobre la hoja de ruta, descripciones de proyectos, detalles técnicos, funcionalidades, características, el desarrollo y uso de tokens por proyectos, y cualquier otra declaración relacionada con tales asuntos o accesible a través de este sitio web están sujetas a un alto grado de riesgo e incertidumbre. Las declaraciones prospectivas están sujetas a cambios basados en, entre otras cosas, las condiciones del mercado, los desarrollos técnicos y el entorno regulatorio. El desarrollo y los resultados reales, incluido el orden y el cronograma, podrían variar de lo que se presenta. La información contenida aquí es un resumen y no pretende ser precisa, fiable o completa y no tenemos ninguna responsabilidad por la exactitud, fiabilidad o integridad de la información aquí contenida. Debido al alto grado de riesgo e incertidumbre descritos anteriormente, no debe depositar una confianza indebida en ningún asunto descrito en este sitio web o accesible a través de este sitio web. -While we aim to update our website regularly, all information, including the timeline and the specifics of each stage, is subject to change and may be amended or supplemented at any time, without notice and at our sole discretion. +Si bien nuestro objetivo es actualizar nuestro sitio web regularmente, toda la información, incluyendo el cronograma y los detalles específicos de cada etapa, está sujeta a cambios y puede ser enmendada o complementada en cualquier momento, sin previo aviso y a nuestra entera discreción. -### 4) Intellectual property rights +### 4) Derechos de propiedad intelectual -The Website and its contents are made available under Creative Commons Attribution 4.0 International license (CC-BY 4.0). In essence this licence allows users to copy, modify and distribute the content in any format for any purpose, including commercial use, subject to certain requirements such as attributing us. For the full terms of this licence, please refer to the following website: https://creativecommons.org/licenses/by/4.0/. +El Sitio Web y sus contenidos se ponen a disposición bajo la licencia Creative Commons Attribution 4.0 International (CC-BY 4.0). En esencia, esta licencia permite a los usuarios copiar, modificar y distribuir el contenido en cualquier formato para cualquier propósito, incluyendo el uso comercial, sujeto a ciertos requisitos tales como atribuirnos. Para conocer los términos completos de esta licencia, consulte el siguiente sitio web: https://creativecommons.org/licenses/by/4.0/. -### 5) Third party website links +### 5) Enlaces a sitios web de terceros -To the extent the Website provides any links to a third party website, then their terms and conditions, including privacy policies, govern your use of those third party websites. By linking such third party websites, Status does not represent or imply that it endorses or supports such third party websites or content therein, or that it believes such third party websites and content therein to be accurate, useful or non-harmful. We have no control over such third party websites and will not be liable for your use of or activities on any third party websites accessed through the Website. If you access such third party websites through the Website, it is at your own risk and you are solely responsible for your activities on such third party websites. +En la medida en que el Sitio Web proporcione algún enlace a un sitio web de terceros, entonces sus términos y condiciones, incluyendo las políticas de privacidad, rigen su uso de esos sitios web de terceros. Al enlazar dichos sitios web de terceros, Status no representa ni implica que respalda o apoya dichos sitios web de terceros o el contenido de los mismos, o que cree que dichos sitios web de terceros y el contenido de los mismos sean precisos, útiles o no dañinos. No tenemos control sobre dichos sitios web de terceros y no seremos responsables de su uso o actividades en ningún sitio web de terceros al que se acceda a través del Sitio Web. Si accede a dichos sitios web de terceros a través del Sitio Web, lo hace bajo su propio riesgo y usted es el único responsable de sus actividades en dichos sitios web de terceros. -### 6) Limitation of liability +### 6) Limitación de responsabilidad -We will not be held liable to you under any contract, negligence, strict liability, or other legal or equitable theory for any lost profits, cost of procurement for substitute services, or any special, incidental, or consequential damages related to, arising from, or in any way connected with these Website Terms of Use, the Website, the content on the Website, or your use of the Website, even if we have been advised of the possibility of such damages. In any event, our aggregate liability for such claims is limited to EUR 100 (one hundred Euros). This limitation of liability will apply to the maximum extent permitted by applicable law. +No seremos responsables ante usted bajo ningún contrato, negligencia, responsabilidad estricta u otra teoría legal o equitativa por cualquier pérdida de beneficios, costo de adquisición de servicios sustitutos, o cualquier daño especial, incidental o consecuente relacionado con, derivado de, o de alguna manera conectado con estos Términos de Uso del Sitio Web, el Sitio Web, el contenido del Sitio Web, o su uso del Sitio Web, incluso si hemos sido advertidos de la posibilidad de tales daños. En cualquier caso, nuestra responsabilidad agregada por tales reclamaciones se limita a 100 EUR (cien euros). Esta limitación de responsabilidad se aplicará en la medida máxima permitida por la ley aplicable. -### 7) Indemnity +### 7) Indemnización -You shall indemnify us and hold us harmless from and against any and all claims, damages and expenses, including attorneys’ fees, arising from or related to your use of the Website, the content on the Website, including without limitation your violation of these Website Terms of Use. +Usted nos indemnizará y nos eximirá de toda responsabilidad frente a cualquier reclamación, daño y gasto, incluyendo los honorarios de los abogados, que surjan de o estén relacionados con su uso del Sitio Web, el contenido del Sitio Web, incluyendo, sin limitación, su violación de estos Términos de Uso del Sitio Web. -### 8) Modifications +### 8) Modificaciones -We may modify or replace any part of this Website Terms of Use at any time and without notice. You are responsible for checking the Website periodically for any changes. The new Website Terms of Use will be effective immediately upon its posting on the Website. +Podemos modificar o reemplazar cualquier parte de estos Términos de Uso del Sitio Web en cualquier momento y sin previo aviso. Usted es responsable de revisar el Sitio Web periódicamente para verificar si hay cambios. Los nuevos Términos de Uso del Sitio Web entrarán en vigor inmediatamente después de su publicación en el Sitio Web. -### 9) Governing law +### 9) Ley aplicable -Swiss law governs these Website Terms of Use and any disputes between you and us, whether in court or arbitration, without regard to conflict of laws provisions. +La ley suiza rige estos Términos de Uso del Sitio Web y cualquier disputa entre usted y nosotros, ya sea en un tribunal o en arbitraje, sin tener en cuenta las disposiciones sobre conflicto de leyes. -### 10) Disputes +### 10) Disputas -In these terms, “dispute” has the broadest meaning enforceable by law and includes any claim you make against or controversy you may have in relation to these Website Terms of Use, the Website, the content on the Website, or your use of the Website. +En estos términos, "disputa" tiene el significado más amplio exigible por la ley e incluye cualquier reclamación que usted haga contra o controversia que pueda tener en relación con estos Términos de Uso del Sitio Web, el Sitio Web, el contenido del Sitio Web, o su uso del Sitio Web. -We prefer arbitration over litigation as we believe it meets our principle of resolving disputes in the most effective and cost effective manner. You are bound by the following arbitration clause, which waives your right to litigation and to be heard by a judge. Please note that court review of an arbitration award is limited. You also waive all your rights to a jury trial (if any) in any and all jurisdictions. +Preferimos el arbitraje al litigio, ya que creemos que cumple con nuestro principio de resolver las disputas de la manera más eficaz y rentable. Usted está obligado por la siguiente cláusula de arbitraje, que renuncia a su derecho a litigar y a ser escuchado por un juez. Tenga en cuenta que la revisión judicial de un laudo arbitral es limitada. También renuncia a todos sus derechos a un juicio con jurado (si los hubiera) en todas y cada una de las jurisdicciones. -If a (potential) dispute arises, you must first use your reasonable efforts to resolve it amicably with us. If these efforts do not result in a resolution of such dispute, you shall then send us a written notice of dispute setting out (i) the nature of the dispute, and the claim you are making; and (ii) the remedy you are seeking. +Si surge una (potencial) disputa, primero debe hacer todos los esfuerzos razonables para resolverla amigablemente con nosotros. Si estos esfuerzos no resultan en una resolución de tal disputa, entonces deberá enviarnos una notificación escrita de la disputa que establezca (i) la naturaleza de la disputa, y la reclamación que está haciendo; y (ii) el remedio que está buscando. -If we and you are unable to further resolve this dispute within sixty (60) calendar days of us receiving this notice of dispute, then any such dispute will be referred to and finally resolved by you and us through an arbitration administered by the Swiss Chambers’ Arbitration Institution in accordance with the Swiss Rules of International Arbitration for the time being in force, which rules are deemed to be incorporated herein by reference. The arbitral decision may be enforced in any court. The arbitration will be held in Zug, Switzerland, and may be conducted via video conference virtual/online methods if possible. The tribunal will consist of one arbitrator, and all proceedings as well as communications between the parties will be kept confidential. The language of the arbitration will be in English. Payment of all relevant fees in respect of the arbitration, including filing, administration and arbitrator fees will be in accordance with the Swiss Rules of International Arbitration. +Si nosotros y usted no podemos resolver esta disputa dentro de los sesenta (60) días naturales siguientes a la recepción de esta notificación de disputa, entonces cualquiera de tales disputas será remitida y finalmente resuelta por usted y por nosotros a través de un arbitraje administrado por la Swiss Chambers' Arbitration Institution de acuerdo con el Reglamento Suizo de Arbitraje Internacional vigente en ese momento, cuyas normas se consideran incorporadas aquí por referencia. La decisión arbitral podrá ser ejecutada en cualquier tribunal. El arbitraje se llevará a cabo en Zug, Suiza, y podrá realizarse mediante métodos virtuales/en línea por videoconferencia si es posible. El tribunal estará compuesto por un árbitro, y todos los procedimientos, así como las comunicaciones entre las partes, se mantendrán confidenciales. El idioma del arbitraje será el inglés. El pago de todas las tasas correspondientes con respecto al arbitraje, incluyendo las tasas de presentación, administración y arbitraje, se realizará de acuerdo con el Reglamento Suizo de Arbitraje Internacional. -Regardless of any applicable statute of limitations, you must bring any claims within one year after the claim arose or the time when you should have reasonably known about the claim. You also waive the right to participate in a class action lawsuit or a classwide arbitration against us. +Independientemente de cualquier estatuto de limitaciones aplicable, usted debe presentar cualquier reclamación dentro de un año después de que surja la reclamación o el momento en que razonablemente debería haber tenido conocimiento de la reclamación. También renuncia al derecho a participar en una demanda colectiva o en un arbitraje colectivo contra nosotros. -### 11) About these Website Terms of Use +### 11) Acerca de estos Términos de Uso del Sitio Web -These Website Terms of Use cover the entire agreement between you and us regarding the Website and supersede all prior and contemporaneous understandings, agreements, representations and warranties, both written and oral, with respect to the Website. +Estos Términos de Uso del Sitio Web cubren todo el acuerdo entre usted y nosotros con respecto al Sitio Web y reemplazan todos los entendimientos, acuerdos, representaciones y garantías anteriores y contemporáneas, tanto escritos como orales, con respecto al Sitio Web. -The captions and headings identifying sections and subsections of these Website Terms of Use are for reference only and do not define, modify, expand, limit, or affect the interpretation of any provisions of these Website Terms of Use. +Los títulos y encabezados que identifican las secciones y subsecciones de estos Términos de Uso del Sitio Web son solo para referencia y no definen, modifican, amplían, limitan o afectan la interpretación de ninguna disposición de estos Términos de Uso del Sitio Web. -If any part of these Website Terms of Use is held invalid or unenforceable, that part will be severable from these Website Terms of Use, and the remaining portions will remain in full force and effect. If we fail to enforce any of these Website Terms of Use, that does not mean that we have waived our right to enforce them. +Si alguna parte de estos Términos de Uso del Sitio Web se considera inválida o inaplicable, esa parte será separable de estos Términos de Uso del Sitio Web, y las partes restantes permanecerán en pleno vigor y efecto. Si no logramos hacer cumplir alguno de estos Términos de Uso del Sitio Web, eso no significa que hayamos renunciado a nuestro derecho a hacerlos cumplir. -If you have any specific questions about these Website Terms of Use, please contact us at llegal@free.technology. +Si tiene alguna pregunta específica sobre estos Términos de Uso del Sitio Web, por favor contáctenos en llegal@free.technology. -This document is licensed under CC-BY-SA. +Este documento está licenciado bajo CC-BY-SA. diff --git a/developers/api.md b/developers/api.md index 4df2651..98500ee 100644 --- a/developers/api.md +++ b/developers/api.md @@ -1,5 +1,5 @@ -# Codex API +# API de Codex - Codex uses REST API to interact with the node and we can use HTTP client for interaction and configuration. +Codex utiliza la API REST para interactuar con el nodo y podemos usar el cliente HTTP para la interacción y la configuración. - API specification can be found on the [api.codex.storage](https://api.codex.storage) and it is generated based on [openapi.yaml](https://github.com/codex-storage/nim-codex/blob/master/openapi.yaml). We also generate a [Postman Collection](https://api.codex.storage/postman.json). + La especificación de la API se puede encontrar en [api.codex.storage](https://api.codex.storage) y se genera en base a [openapi.yaml](https://github.com/codex-storage/nim-codex/blob/master/openapi.yaml).También generamos una [Colección de Postman](https://api.codex.storage/postman.json). diff --git a/index.md b/index.md index 25756b1..703cc10 100644 --- a/index.md +++ b/index.md @@ -4,30 +4,29 @@ layout: home hero: name: Codex - text: Decentralised data storage platform - tagline: Codex is a durable, decentralised data storage protocol, created so the world community can preserve its most important knowledge without risk of censorship. + text: Plataforma descentralizada de almacenamiento de datos + tagline: Codex es un protocolo descentralizado de almacenamiento de datos duradero, creado para que la comunidad global pueda preservar su conocimiento más importante sin riesgo de ser censurado. actions: - theme: brand - text: What is Codex? + text: ¿Qué es Codex? link: /learn/what-is-codex - theme: alt - text: Quick start + text: Inicio rápido link: /learn/quick-start - theme: alt - text: Join Codex Testnet + text: Únete a la Testnet de Codex link: /networks/testnet features: - - title: Learn - details: Get more information about Codex + - title: Aprender + details: Obtén más información sobre Codex link: /learn/what-is-codex icon: 📚 - - title: Networks - details: Participate in Codex network as a Storage operator or Buyer + - title: Redes + details: Participa en la red Codex como Operador de Almacenamiento o Comprador link: /networks/networks icon: 🚦 - - title: Developers - details: Build and Codex and + - title: Desarrolladores + details: Construye con Codex link: /developers/api icon: 🏗️ ---- diff --git a/learn/architecture.md b/learn/architecture.md index d6e8341..a993915 100644 --- a/learn/architecture.md +++ b/learn/architecture.md @@ -1,123 +1,80 @@ -# Description and architecture +# Descripción y Arquitectura -Codex is building a durable data storage engine that is fully decentralised, providing corruption and censorship resistance to web3 applications. It innately protects network participants by giving hosts plausible deniability over the data they store, and clients provable durability guarantees—up to 99.99%—while remaining storage and bandwidth efficient. +Codex está construyendo un motor de almacenamiento de datos duradero que es completamente descentralizado, proporcionando resistencia a la corrupción y a la censura para aplicaciones web3. Protege inherentemente a los participantes de la red al otorgar a los hosts una negación plausible sobre los datos que almacenan, y a los clientes garantías de durabilidad comprobables (hasta el 99.99%), a la vez manteniendo la eficacia en almacenamiento y ancho de banda. -These four key features combine to differentiate Codex from existing projects in the decentralised storage niche: +Estas cuatro características clave se combinan para diferenciar a Codex de los proyectos existentes en el nicho del almacenamiento descentralizado: -- **Erasure coding:** Provides efficient data redundancy, which increases data durability guarantees. +* **Codificación de borrado (Erasure coding):** Proporciona redundancia de datos eficiente, lo que aumenta las garantías de durabilidad de los datos. +* **Prueba de recuperabilidad basada en ZK (ZK-based proof-of-retrievability):** Para garantizar la durabilidad de los datos de forma ligera. +* **Mecanismo de reparación perezosa (Lazy repair mechanism):** Para una reconstrucción eficiente de los datos y prevención de la pérdida. +* **Incentivación:** Para fomentar un comportamiento racional, una participación generalizada en la red y la provisión eficiente de recursos de red finitos. -- **ZK-based proof-of-retrievability:** For lightweight data durability assurances. +Descentralización incentivada -- **Lazy repair mechanism:** For efficient data reconstruction and loss prevention. +Los mecanismos de incentivación son una de las piezas clave que faltan en las redes tradicionales de intercambio de archivos. Codex cree que una estructura de incentivos sólida basada en el mercado garantizará una amplia participación en todos los tipos de nodos que se detallan a continuación. -- **Incentivization:** To encourage rational behaviour, widespread network participation, and the efficient provision of finite network resources. +El desarrollo de una estructura de incentivos adecuada está impulsado por los siguientes objetivos: +* Oferta y demanda para fomentar un uso óptimo de los recursos de la red. +* Aumentar la participación permitiendo a los nodos utilizar sus ventajas competitivas para maximizar las ganancias. +* Prevenir el spam y desalentar la participación maliciosa. -### Incentivized decentralisation +Aunque aún no se ha finalizado, la estructura de incentivos de Codex involucrará un mercado de participantes que desean almacenar datos, y aquellos que proporcionan almacenamiento publicando garantías (collateral), y estos últimos pujando por contratos de almacenamiento abiertos. Esta estructura tiene como objetivo garantizar que los incentivos de los participantes se alineen, lo que resulta en que Codex funcione según lo previsto. -Incentivization mechanisms are one of the key pieces missing from traditional file-sharing networks. Codex believes that a robust marketplace-based incentive structure will ensure wide participation across the node types detailed below. +Arquitectura de la red -The development of an adequate incentive structure is driven by the following goals: +Codex se compone de múltiples tipos de nodos, cada uno de los cuales desempeña un papel diferente en el funcionamiento de la red. Del mismo modo, las demandas de hardware para cada tipo de nodo varían, lo que permite participar a aquellos que operan dispositivos con recursos restringidos. -- Supply and demand to encourage optimum network resource usage. +Nodos de almacenamiento -- Increase participation by enabling nodes to utilise their competitive advantages to maximise profits. +Como proveedores de almacenamiento confiables a largo plazo de Codex, los nodos de almacenamiento apuestan garantías (collateral) basadas en la garantía publicada en el lado de la solicitud de los contratos, y en el número de espacios que tiene un contrato. Esto está ligado a la durabilidad exigida por el usuario. El no proporcionar pruebas periódicas de posesión de datos resulta en penalizaciones de "slashing" (recorte de la garantía). -- Prevent spam and discourage malicious participation. +Nodo Agregador -Although still to be finalised, the Codex incentive structure will involve a marketplace of participants who want to store data, and those provisioning storage posting collateral, with the latter bidding on open storage contracts. This structure aims to ensure that participants' incentives align, resulting in Codex functioning as intended. +Un método para descargar la codificación de borrado, la generación de pruebas y la agregación de pruebas por parte de un nodo cliente con bajos recursos, actualmente es un Trabajo En Progreso (WIP) y formará parte de la siguiente versión de Codex en el Q2/Q4 del próximo año. +Nodos Cliente -### Network architecture +Los nodos cliente realizan solicitudes para que otros nodos almacenen, encuentren y recuperen datos. La mayor parte de la red Codex estará compuesta por nodos Cliente, y estos participantes pueden también funcionar como nodos de caché para compensar el costo de los recursos de red que consumen. -Codex is composed of multiple node types, each taking a different role in the network's operation. Similarly, the hardware demands for each node type vary, enabling those operating resource-restricted devices to participate. +Cuando un nodo se compromete con un contrato de almacenamiento y un usuario carga datos, la red verificará de forma proactiva que el nodo de almacenamiento esté en línea y que los datos sean recuperables. A continuación, se consulta aleatoriamente a los nodos de almacenamiento para que transmitan pruebas de posesión de datos durante un intervalo que se corresponde con la duración del contrato y las "9s" de garantía de recuperabilidad que ofrece el protocolo. -**Storage nodes** +Si el nodo de almacenamiento envía pruebas no válidas o no las proporciona a tiempo, la red expulsa al nodo de almacenamiento del espacio, y el espacio estará disponible para el primer nodo que genere una prueba válida para ese espacio. -As Codex's long-term reliable storage providers, storage nodes stake collateral based on the collateral posted on the request side of contracts, and the number of slots that a contract has. This is tied to the durability demanded by the user. Failure to provide periodic proof of data possession results in slashing penalties. +Cuando se vuelve a publicar el contrato, parte de la garantía del nodo defectuoso paga las tarifas de ancho de banda del nuevo nodo de almacenamiento. La "codificación de borrado" complementa el esquema de reparación al permitir la reconstrucción de los fragmentos que faltan a partir de los datos de otros espacios dentro del mismo contrato de almacenamiento alojado por nodos de almacenamiento sin fallos. -**Aggregator Node** +Arquitectura del Marketplace -A method for off-loading erasure coding, proof generation and proof aggregation by a client node with low-resources, currently a WIP and will be part of subsequent Codex release Q2/Q4 next year. +El mercado consiste en un contrato inteligente (smart contract) que se implementa "on-chain", y los módulos de compra y venta que forman parte del software del nodo. El módulo de compra es responsable de publicar las solicitudes de almacenamiento en el contrato inteligente. El módulo de venta es su contraparte, que los proveedores de almacenamiento utilizan para determinar qué solicitudes de almacenamiento les interesan. -**Client nodes** +Contrato Inteligente (Smart Contract) -Client nodes make requests for other nodes to store, find, and retrieve data. Most of the Codex network will be Client nodes, and these participants can double as caching nodes to offset the cost of the network resources they consume. +El contrato inteligente facilita la coincidencia entre los proveedores de almacenamiento y los clientes de almacenamiento. Un cliente de almacenamiento puede solicitar una cierta cantidad de almacenamiento durante una cierta duración. Esta solicitud se publica entonces "on-chain", para que los proveedores de almacenamiento puedan verla y decidir si quieren llenar un espacio en la solicitud. -When a node commits to a storage contract and a user uploads data, the network will proactively verify that the storage node is online and that the data is retrievable. Storage nodes are then randomly queried to broadcast proofs of data possession over an interval corresponding to the contract duration and 9's of retrievability guarantee the protocol provides. +Los principales parámetros de una solicitud de almacenamiento son: -If the storage node sends invalid proofs or fails to provide them in time, the network evicts the storage node from the slot, and the slot will become available for the first node that generates a valid proof for that slot. +* La cantidad de bytes de almacenamiento que se solicita +* Un identificador de contenido (CID) de los datos que deben almacenarse +* La duración durante la cual deben almacenarse los datos +* El número de espacios (basado en los parámetros de codificación de borrado) +* Una cantidad de tokens a pagar por el almacenamiento -When the contract is reposted, some of the faulty node's collateral pays for the new storage node's bandwidth fees. Erasure coding complements the repair scheme by allowing the reconstruction of the missing chunks from data in other slots within the same storage contract hosted by faultless storage nodes. +A nivel de protocolo, un cliente de almacenamiento es libre de determinar estos parámetros como mejor le parezca, de modo que pueda elegir un nivel de durabilidad que sea adecuado para los datos, y ajustarse a los precios de almacenamiento cambiantes. Las aplicaciones construidas sobre Codex pueden proporcionar orientación a sus usuarios para elegir los parámetros correctos, de forma análoga a cómo las billeteras de Ethereum ayudan a determinar las tarifas de gas. +El contrato inteligente también comprueba que los proveedores de almacenamiento cumplen sus promesas. Los proveedores de almacenamiento publican garantías (collateral) cuando prometen llenar un espacio de una solicitud de almacenamiento. Se espera que publiquen pruebas de almacenamiento periódicas en el contrato, ya sea directamente o a través de un agregador. Si no lo hacen repetidamente, entonces su garantía puede ser confiscada. Su espacio se concede entonces a otro proveedor de almacenamiento. -![architect](/learn/architecture.png) +El contrato inteligente indica cuándo un determinado proveedor de almacenamiento tiene que proporcionar una prueba de almacenamiento. Esto no se hace en un intervalo de tiempo fijo, sino que se determina estocásticamente para garantizar que no sea posible que un proveedor de almacenamiento prediga cuándo debe proporcionar la siguiente prueba de almacenamiento. -### Marketplace architecture ### +Compra (Purchasing) -The marketplace consists of a smart contract that is deployed on-chain, and the -purchasing and sales modules that are part of the node software. The purchasing -module is responsible for posting storage requests to the smart contract. The -sales module is its counterpart that storage providers use to determine which -storage requests they are interested in. +El módulo de compra en el software del nodo interactúa con el contrato inteligente en nombre del operador del nodo. Publica las solicitudes de almacenamiento y gestiona cualquier otra interacción que se requiera durante la vida útil de la solicitud. Por ejemplo, cuando una solicitud se cancela porque no hay suficientes proveedores de almacenamiento interesados, el módulo de compra puede retirar los tokens que estaban asociados a la solicitud. -#### Smart contract #### +Venta (Sales) -The smart contract facilitates matching between storage providers and storage -clients. A storage client can request a certain amount of storage for a certain -duration. This request is then posted on-chain, so that storage providers can -see it, and decide whether they want to fill a slot in the request. +El módulo de venta es la contraparte del módulo de compra. Supervisa el contrato inteligente para ser notificado de las solicitudes de almacenamiento entrantes. Mantiene una lista de las solicitudes más prometedoras que puede cumplir. Favorecerá aquellas solicitudes que tengan una alta recompensa y una baja garantía (collateral). Tan pronto como encuentre una solicitud adecuada, intentará primero reservar y luego llenar un espacio descargando los datos asociados, creando una prueba de almacenamiento y publicándola en el contrato inteligente. A continuación, seguirá supervisando el contrato inteligente para proporcionarle pruebas de almacenamiento cuando sean necesarias. -The main parameters of a storage request are: -- the amount of bytes of storage that is requested -- a content identifier (CID) of the data that should be stored -- the duration for which the data should be stored -- the number of slots (based on the erasure coding parameters) -- an amount of tokens to pay for the storage +El módulo de venta contiene una estrategia de "mejor esfuerzo" (best effort) para determinar qué solicitudes de almacenamiento le interesan. Con el tiempo, esperamos que surjan estrategias más especializadas para satisfacer las necesidades de, por ejemplo, grandes proveedores frente a proveedores que ejecutan un nodo desde su casa. -At the protocol level a storage client is free to determine these parameters as -it sees fit, so that it can choose a level of durability that is suitable for -the data, and adjust for changing storage prices. Applications built on Codex -can provide guidance to their users for picking the correct parameters, -analogous to how Ethereum wallets help with determining gas fees. +### Libro Blanco ### -The smart contract also checks that storage providers keep their promises. -Storage providers post collateral when they promise to fill a slot of a storage -request. They are expected to post periodic storage proofs to the contract, -either directly or through an aggregator. If they fail to do so repeatedly, then -their collateral can be forfeited. Their slot is then awarded to another storage -provider. - -The smart contract indicates when a certain storage provider has to provide a -storage proof. This is not done on a fixed time interval, but determined -stochastically to ensure that it is not possible for a storage provider to -predict when it should provide the next storage proof. - -#### Purchasing #### - -The purchasing module in the node software interacts with the smart contract on -behalf of the node operator. It posts storage requests, and handles any other -interactions that are required during the lifetime of the request. For instance, -when a request is canceled because there are not enough interested storage -providers, then the purchasing module can withdraw the tokens that were -associated with the request. - -#### Sales #### - -The sales module is the counterpart to the sales module. It monitors the smart -contract to be notified of incoming storage requests. It keeps a list of the -most promising requests that it can fulfill. It will favor those requests that -have a high reward and low collateral. As soon as it finds a suitable request, -it will then try to first reserve and then fill a slot by downloading the -associated data, creating a storage proof, and posting it to the smart contract. -It will then continue to monitor the smart contract to provide it with storage -proofs when they are required. - -The sales module contains a best effort strategy for determining which storage -requests it is interested in. Over time, we expect more specialized strategies -to emerge to cater to the needs of e.g. large providers versus providers that -run a node from their home. - -### Whitepaper ### - -Read the [Codex whitepaper](/learn/whitepaper) +Leer [Codex whitepaper](/learn/whitepaper) diff --git a/learn/build.md b/learn/build.md index fa5f538..ec14d8b 100644 --- a/learn/build.md +++ b/learn/build.md @@ -1,83 +1,83 @@ -# Build Codex +# Construir Codex -## Table of Contents +## Tabla de Contenidos -- [Install developer tools](#prerequisites) +- [Instalar herramientas de desarrollo](#prerequisites) - [Linux](#linux) - [macOS](#macos) - [Windows + MSYS2](#windows-msys2) - - [Other](#other) -- [Clone and prepare the Git repository](#repository) -- [Build the executable](#executable) -- [Run the example](#example-usage) + - [Otros](#other) +- [Clonar y preparar el repositorio Git](#repository) +- [Construir el ejecutable](#executable) +- [Ejecutar el ejemplo](#example-usage) -**Optional** -- [Run the tests](#tests) +**Opcional** +- [Ejecutar las pruebas](#tests) -## Prerequisites +## Prerrequisitos -To build nim-codex, developer tools need to be installed and accessible in the OS. +Para construir nim-codex, es necesario instalar las herramientas de desarrollo y que sean accesibles en el sistema operativo. -Instructions below correspond roughly to environmental setups in nim-codex's [CI workflow](https://github.com/codex-storage/nim-codex/blob/master/.github/workflows/ci.yml) and are known to work. +Las instrucciones siguientes corresponden aproximadamente a las configuraciones ambientales en el flujo de trabajo CI de nim-codex [CI workflow](https://github.com/codex-storage/nim-codex/blob/master/.github/workflows/ci.yml) y se sabe que funcionan. -Other approaches may be viable. On macOS, some users may prefer [MacPorts](https://www.macports.org/) to [Homebrew](https://brew.sh/). On Windows, rather than use MSYS2, some users may prefer to install developer tools with [winget](https://docs.microsoft.com/en-us/windows/package-manager/winget/), [Scoop](https://scoop.sh/), or [Chocolatey](https://chocolatey.org/), or download installers for e.g. Make and CMake while otherwise relying on official Windows developer tools. Community contributions to these docs and our build system are welcome! +Otros enfoques pueden ser viables. En macOS, algunos usuarios pueden preferir [MacPorts](https://www.macports.org/) o [Homebrew](https://brew.sh/). En Windows, en lugar de usar MSYS2, algunos usuarios pueden preferir instalar herramientas de desarrollo con [winget](https://docs.microsoft.com/en-us/windows/package-manager/winget/), [Scoop](https://scoop.sh/), o [Chocolatey](https://chocolatey.org/), o descargar instaladores para, por ejemplo, Make y CMake, mientras que de otro modo confían en las herramientas de desarrollo oficiales de Windows. ¡Las contribuciones de la comunidad a estos documentos y a nuestro sistema de construcción son bienvenidas! ### Rust -The current implementation of Codex's zero-knowledge proving circuit requires the installation of rust v1.79.0 or greater. Be sure to install it for your OS and add it to your terminal's path such that the command `cargo --version` gives a compatible version. +La implementación actual del circuito de prueba de conocimiento cero de Codex requiere la instalación de rust v1.79.0 o superior. Asegúrate de instalarlo para tu sistema operativo y agregarlo a la ruta de tu terminal de tal manera que el comando `cargo --version` dé una versión compatible. ### Linux -> [!WARNING] -> Linux builds currently require gcc $\leq$ 13. If this is not an option in your -> system, you can try [building within Docker](#building-within-docker) as a workaround. +> [¡ATENCION!] +> Las compilaciones de Linux actualmente requieren gcc ≤ 13. Si esta no es una opción en tu +> system, sistema, puedes intentar construir [dentro de Docker](#building-within-docker) como una solución alternativa. -*Package manager commands may require `sudo` depending on OS setup.* -On a bare bones installation of Debian (or a distribution derived from Debian, such as Ubuntu), run +*Los comandos del administrador de paquetes pueden requerir `sudo` dependiendo de la configuración del sistema operativo.* + +En una instalación básica de Debian (o una distribución derivada de Debian, como Ubuntu), ejecuta ```shell apt-get update && apt-get install build-essential cmake curl git rustc cargo ``` -Non-Debian distributions have different package managers: `apk`, `dnf`, `pacman`, `rpm`, `yum`, etc. +Las distribuciones que no son Debian tienen diferentes administradores de paquetes: `apk`, `dnf`, `pacman`, `rpm`, `yum`, etc. -For example, on a bare bones installation of Fedora, run +Por ejemplo, en una instalación básica de Fedora, ejecuta ```shell dnf install @development-tools cmake gcc-c++ rust cargo ``` -In case your distribution does not provide required Rust version, we may install it using [rustup](https://www.rust-lang.org/tools/install) +En caso de que su distribución no proporcione la versión requerida de rust, podemos instalarla utilizando [rustup](https://www.rust-lang.org/tools/install) ```shell curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs/ | sh -s -- --default-toolchain=1.79.0 -y . "$HOME/.cargo/env" ``` -Note that you will currently not be able to build Codex with gcc 14. To verify that -you have a supported version, run: +Ten en cuenta que actualmente no podrás construir Codex con gcc 14. Para verificar +que tienes una versión compatible, ejecuta: ```shell gcc --version ``` -If you get a number that starts with 14 (e.g. `14.2.0`), then you need to either -downgrade, or try a workaround like [building within Docker](#building-within-docker). +Si obtienes un número que comienza con 14 (p.j. `14.2.0`), entonces necesitas degradar o probar una solución alternativa como [construir dentro de Docker](#building-within-docker). ### macOS -Install the [Xcode Command Line Tools](https://mac.install.guide/commandlinetools/index.html) by opening a terminal and running +Instala las Herramientas de [Línea de Comandos de Xcode](https://mac.install.guide/commandlinetools/index.html) abriendo una terminal y ejecutando ```shell xcode-select --install ``` -Install [Homebrew (`brew`)](https://brew.sh/) and in a new terminal run +Instala [Homebrew (`brew`)](https://brew.sh/) y en una nueva terminal ejecuta ```shell brew install bash cmake rust ``` -Check that `PATH` is setup correctly +Comprueba que `PATH` está configurado correctamente ```shell which bash cmake @@ -87,19 +87,19 @@ which bash cmake ### Windows + MSYS2 -*Instructions below assume the OS is 64-bit Windows and that the hardware or VM is [x86-64](https://en.wikipedia.org/wiki/X86-64) compatible.* +*Las siguientes instrucciones asumen que el sistema operativo es Windows de 64 bits y que el hardware o la máquina virtual es compatible con [x86-64](https://en.wikipedia.org/wiki/X86-64) * -Download and run the installer from [msys2.org](https://www.msys2.org/). +Descarga y ejecuta el instalador desde [msys2.org](https://www.msys2.org/). -Launch an MSYS2 [environment](https://www.msys2.org/docs/environments/). UCRT64 is generally recommended: from the Windows *Start menu* select `MSYS2 MinGW UCRT x64`. +Inicia un [entorno MSYS2](https://www.msys2.org/docs/environments/). Generalmente se recomienda UCRT64: desde el menú *Inicio de Windows* selecciona `MSYS2 MinGW UCRT x64`. -Assuming a UCRT64 environment, in Bash run +Asumiendo un entorno UCRT64, en Bash ejecuta ```shell pacman -Suy pacman -S base-devel git unzip mingw-w64-ucrt-x86_64-toolchain mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-rust ``` -We should downgrade GCC to version 13 [^gcc-14] +Deberíamos degradar GCC a la versión 13 [^gcc-14] ```shell pacman -U --noconfirm \ https://repo.msys2.org/mingw/ucrt64/mingw-w64-ucrt-x86_64-gcc-13.2.0-6-any.pkg.tar.zst \ @@ -110,10 +110,11 @@ pacman -U --noconfirm \ -#### Optional: VSCode Terminal integration +#### Opcional: Integración del Terminal de VSCode + -You can link the MSYS2-UCRT64 terminal into VSCode by modifying the configuration file as shown below. -File: `C:/Users//AppData/Roaming/Code/User/settings.json` +Puedes vincular el terminal MSYS2-UCRT64 a VSCode modificando el archivo de configuración como se muestra a continuación. +Archivo: `C:/Users//AppData/Roaming/Code/User/settings.json` ```json { ... @@ -135,111 +136,107 @@ File: `C:/Users//AppData/Roaming/Code/User/settings.json` } ``` -### Other +### Otros -It is possible that nim-codex can be built and run on other platforms supported by the [Nim](https://nim-lang.org/) language: BSD family, older versions of Windows, etc. There has not been sufficient experimentation with nim-codex on such platforms, so instructions are not provided. Community contributions to these docs and our build system are welcome! +Es posible que nim-codex pueda ser construido y ejecutado en otras plataformas soportadas por el lenguaje [Nim](https://nim-lang.org/) : familia BSD, versiones antiguas de Windows, etc. No ha habido suficiente experimentación con nim-codex en tales plataformas, por lo que no se proporcionan instrucciones. ¡Las contribuciones de la comunidad a estos documentos y a nuestro sistema de construcción son bienvenidas! -## Repository +## Repositorio -In Bash run +En Bash ejecuta ```shell git clone https://github.com/codex-storage/nim-codex.git repos/nim-codex && cd repos/nim-codex ``` -nim-codex uses the [nimbus-build-system](https://github.com/status-im/nimbus-build-system), so next run +nim-codex utiliza el [nimbus-build-system](https://github.com/status-im/nimbus-build-system), así que a continuación ejecuta ```shell make update ``` -This step can take a while to complete because by default it builds the [Nim compiler](https://nim-lang.org/docs/nimc.html). +Este paso puede tardar un tiempo en completarse porque por defecto construye el [compilador de Nim](https://nim-lang.org/docs/nimc.html). -To see more output from `make` pass `V=1`. This works for all `make` targets in projects using the nimbus-build-system +Para ver más salida de `make` pasa `V=1`. Esto funciona para todos los objetivos de `make` en proyectos que utilizan el nimbus-build-system ```shell make V=1 update ``` -## Executable +## Ejecutable -In Bash run +En Bash ejecuta ```shell make ``` -The default `make` target creates the `build/codex` executable. - -## Tools +El objetivo `make` predeterminado crea el ejecutable `build/codex`. -### Circuit download tool +## Herramientas -To build the circuit download tool located in `tools/cirdl` run: +### Herramienta de descarga de circuitos +Para construir la herramienta de descarga de circuitos ubicada en `tools/cirdl` ejecuta: ```shell make cirdl ``` -## Example usage +## Ejemplo de uso -See the instructions in the [Quick Start](/learn/quick-start). +Consulta las instrucciones en la [Guía de Inicio Rápido](/learn/quick-start). -## Tests +## Pruebas -In Bash run +En Bash ejecuta ```shell make test ``` ### testAll -#### Prerequisites +#### Prerrequisitos -To run the integration tests, an Ethereum test node is required. Follow these instructions to set it up. +Para ejecutar las pruebas de integración, se requiere un nodo de prueba de Ethereum. Sigue estas instrucciones para configurarlo. -##### Windows (do this before 'All platforms') +##### Windows (haz esto antes de 'Todas las plataformas') -1. Download and install Visual Studio 2017 or newer. (Not VSCode!) In the Workloads overview, enable `Desktop development with C++`. ( https://visualstudio.microsoft.com ) +1. Descarga e instala Visual Studio 2017 o más nuevo. (¡No VSCode!). En la descripción general de Workloads, habilita `Desktop development with C++`. ( https://visualstudio.microsoft.com ) -##### All platforms +##### Todas las plataformas -1. Install NodeJS (tested with v18.14.0), consider using NVM as a version manager. [Node Version Manager (`nvm`)](https://github.com/nvm-sh/nvm#readme) -1. Open a terminal -1. Go to the vendor/codex-contracts-eth folder: `cd //vendor/codex-contracts-eth/` -1. `npm install` -> Should complete with the number of packages added and an overview of known vulnerabilities. -1. `npm test` -> Should output test results. May take a minute. +1. Instala NodeJS (probado con v18.14.0), considera usar NVM como administrador de versiones. [Node Version Manager (`nvm`)](https://github.com/nvm-sh/nvm#readme) +1. Abre una terminal +1. Ve a la carpeta vendor/codex-contracts-eth: `cd //vendor/codex-contracts-eth/` +1. `npm install` -> Debería completarse con el número de paquetes añadidos y una descripción general de las vulnerabilidades conocidas. +1. `npm test` -> Debería mostrar los resultados de las pruebas. Puede tardar un minuto. -Before the integration tests are started, you must start the Ethereum test node manually. -1. Open a terminal -1. Go to the vendor/codex-contracts-eth folder: `cd //vendor/codex-contracts-eth/` -1. `npm start` -> This should launch Hardhat, and output a number of keys and a warning message. +Antes de que se inicien las pruebas de integración, debes iniciar el nodo de prueba de Ethereum manualmente. +1. Abre una terminal +1. Ve a la carpeta vendor/codex-contracts-eth: `cd //vendor/codex-contracts-eth/` +1. `npm start` -> Esto debería iniciar Hardhat, y mostrar una serie de claves más un mensaje de advertencia. -#### Run +#### Ejecutar -The `testAll` target runs the same tests as `make test` and also runs tests for nim-codex's Ethereum contracts, as well a basic suite of integration tests. +El objetivo `testAll` ejecuta las mismas pruebas que `make test` y también ejecuta pruebas para los contratos Ethereum de nim-codex, así como un conjunto básico de pruebas de integración. -To run `make testAll`. +Para ejecutar `make testAll`. -Use a new terminal to run: +Usa una nueva terminal para ejecutar: ```shell make testAll ``` -## Building Within Docker +## Construyendo Dentro de Docker -For the specific case of Linux distributions which ship with gcc 14 -and a downgrade to 13 is not possible/desirable, building within a Docker -container and pulling the binaries out by copying or mounting remains an -option; e.g.: +Para el caso específico de las distribuciones de Linux que se entregan con gcc 14 y una degradación a 13 no es posible/deseable, la construcción dentro de un contenedor Docker y la extracción de los binarios copiando o montando sigue siendo una opción; por ejemplo: ```bash= -# Clone original repo. +# Clona el repositorio original. git clone https://github.com/codex-storage/nim-codex -# Build inside docker +# Construye dentro de docker docker build -t codexstorage/nim-codex:latest -f nim-codex/docker/codex.Dockerfile nim-codex -# Extract executable +# Extrae el ejecutable docker create --name=codex-build codexstorage/nim-codex:latest docker cp codex-build:/usr/local/bin/codex ./codex docker cp codex-build:/usr/local/bin/cirdl ./cirdl ``` -and voilà, you should have the binaries available in the current folder. +y voilà, deberías tener los binarios disponibles en la carpeta actual. diff --git a/learn/download-flow.md b/learn/download-flow.md index f8dec92..f446fdd 100644 --- a/learn/download-flow.md +++ b/learn/download-flow.md @@ -1,8 +1,10 @@ -# Download Flow -Sequence of interactions that result in dat blocks being transferred across the network. + Flujo de Descarga -## Local Store -When data is available in the local blockstore, +Secuencia de interacciones que resultan en la transferencia de bloques de datos a través de la red. + +## Almacén Local (Local Store) + +Cuando los datos están disponibles en el almacén de bloques local (local blockstore), ```mermaid sequenceDiagram @@ -10,19 +12,19 @@ actor Alice participant API Alice->>API: Download(CID) API->>+Node/StoreStream: Retrieve(CID) -loop Get manifest block, then data blocks +loop Obtener bloque de manifiesto, luego bloques de datos Node/StoreStream->>NetworkStore: GetBlock(CID) NetworkStore->>LocalStore: GetBlock(CID) LocalStore->>NetworkStore: Block NetworkStore->>Node/StoreStream: Block end -Node/StoreStream->>Node/StoreStream: Handle erasure coding -Node/StoreStream->>-API: Data stream -API->>Alice: Stream download of block +Node/StoreStream->>Node/StoreStream: Manejar codificación de borrado (Handle erasure coding) +Node/StoreStream->>-API: Flujo de datos (Data stream) +API->>Alice: Descarga en flujo del bloque (Stream download of block) ``` -## Network Store -When data is not found ih the local blockstore, the block-exchange engine is used to discover the location of the block within the network. Connection will be established to the node(s) that have the block, and exchange can take place. +## Almacén de Red +Cuando los datos no se encuentran en el almacén de bloques local, el motor de intercambio de bloques se utiliza para descubrir la ubicación del bloque dentro de la red. Se establecerá una conexión con el/los nodo(s) que tienen el bloque, y el intercambio puede tener lugar. ```mermaid sequenceDiagram @@ -39,29 +41,29 @@ participant OtherNode end Alice->>API: Download(CID) API->>+Node/StoreStream: Retrieve(CID) -Node/StoreStream->>-API: Data stream -API->>Alice: Download stream begins -loop Get manifest block, then data blocks +Node/StoreStream->>-API: Flujo de datos (Data stream) +API->>Alice: Comienza la descarga en flujo (Download stream begins) +loop Obtener bloque de manifiesto, luego bloques de datos Node/StoreStream->>NetworkStore: GetBlock(CID) NetworkStore->>Engine: RequestBlock(CID) - opt CID not known + opt CID no conocido Engine->>Discovery: Discovery Block - Discovery->>Discovery: Locates peers who provide block - Discovery->>Engine: Peers - Engine->>Engine: Update peers admin + Discovery->>Discovery: Localiza pares que proporcionan el bloque (Locates peers who provide block) + Discovery->>Engine: Pares (Peers) + Engine->>Engine: Actualizar administración de pares (Update peers admin) end - Engine->>Engine: Select optimal peer - Engine->>OtherNode: Send WantHave list - OtherNode->>Engine: Send BlockPresence - Engine->>Engine: Update peers admin - Engine->>Engine: Decide to buy block - Engine->>OtherNode: Send WantBlock list - OtherNode->>Engine: Send Block + Engine->>Engine: Seleccionar par óptimo (Select optimal peer) + Engine->>OtherNode: Enviar lista WantHave (Send WantHave list) + OtherNode->>Engine: Enviar Presencia de Bloque (Send BlockPresence) + Engine->>Engine: Actualizar administración de pares (Update peers admin) + Engine->>Engine: Decidir comprar bloque (Decide to buy block) + Engine->>OtherNode: Enviar lista WantBlock (Send WantBlock list) + OtherNode->>Engine: Enviar Bloque (Send Block) Engine->>NetworkStore: Block - NetworkStore->>NetworkStore: Add to Local store - NetworkStore->>Node/StoreStream: Resolve Block - Node/StoreStream->>Node/StoreStream: Handle erasure coding - Node/StoreStream->>API: Push data to stream + NetworkStore->>NetworkStore: Añadir al almacén local (Add to Local store) + NetworkStore->>Node/StoreStream: Resolver Bloque (Resolve Block) + Node/StoreStream->>Node/StoreStream: Manejar codificación de borrado (Handle erasure coding) + Node/StoreStream->>API: Empujar datos al flujo (Push data to stream) end -API->>Alice: Download stream finishes +API->>Alice: Finaliza la descarga en flujo (Download stream finishes) ``` diff --git a/learn/local-marketplace.md b/learn/local-marketplace.md index 6582faa..98db99d 100644 --- a/learn/local-marketplace.md +++ b/learn/local-marketplace.md @@ -1,56 +1,53 @@ --- outline: [2, 3] --- -# Running a Local Codex Network with Marketplace Support +# Ejecutando una Red Codex Local con Soporte de Marketplace -This tutorial will teach you how to run a small Codex network with the -_storage marketplace_ enabled; i.e., the functionality in Codex which -allows participants to offer and buy storage in a market, ensuring that -storage providers honor their part of the deal by means of cryptographic proofs. +Este tutorial te enseñará cómo ejecutar una pequeña red Codex con el +_storage marketplace_ habilitado; es decir, la funcionalidad en Codex que +permite a los participantes ofrecer y comprar almacenamiento en un mercado, asegurando que +los proveedores de almacenamiento cumplan con su parte del acuerdo mediante pruebas criptográficas. -In this tutorial, you will: +En este tutorial, aprenderás a: -1. [Set Up a Geth PoA network](#_1-set-up-a-geth-poa-network); -2. [Set up The Marketplace](#_2-set-up-the-marketplace); -3. [Run Codex](#_3-run-codex); -4. [Buy and Sell Storage in the Marketplace](#_4-buy-and-sell-storage-on-the-marketplace). +1. [En este tutorial, aprenderás a:](#_1-set-up-a-geth-poa-network); +2. [Configurar El Marketplace](#_2-set-up-the-marketplace); +3. [Ejecutar Codex](#_3-run-codex); +4. [Comprar y Vender Almacenamiento en el Marketplace](#_4-buy-and-sell-storage-on-the-marketplace). -## Prerequisites +## Prerrequisitos -To complete this tutorial, you will need: +Para completar este tutorial, necesitarás: -* the [geth](https://github.com/ethereum/go-ethereum) Ethereum client; - You need version `1.13.x` of geth as newer versions no longer support - Proof of Authority (PoA). This tutorial was tested using geth version `1.13.15`. -* a Codex binary, which [you can compile from source](https://github.com/codex-storage/nim-codex?tab=readme-ov-file#build-and-run). +* el cliente Ethereum [geth](https://github.com/ethereum/go-ethereum); + Necesitas la versión `1.13.x` de geth ya que las versiones más nuevas ya no son compatibles con la Prueba de Autoridad (PoA). Este tutorial se probó utilizando la versión `1.13.15` de geth. +* un binario Codex, que, [puedes compilar desde el código fuente](https://github.com/codex-storage/nim-codex?tab=readme-ov-file#build-and-run). -We will also be using [bash](https://en.wikipedia.org/wiki/Bash_(Unix_shell)) -syntax throughout. If you use a different shell, you may need to adapt -things to your platform. +También estaremos usando la sintaxis de [bash](https://en.wikipedia.org/wiki/Bash_(Unix_shell)) +en todo el documento. Si utilizas una shell diferente, es posible que debas adaptar +algunas cosas a tu plataforma. -To get started, create a new folder where we will keep the tutorial-related -files so that we can keep them separate from the codex repository. -We assume the name of the folder to be `marketplace-tutorial`. +Para comenzar, crea una nueva carpeta donde guardaremos los archivos relacionados con el tutorial +para que podamos mantenerlos separados del repositorio Codex. +Asumimos que el nombre de la carpeta es `marketplace-tutorial`. -## 1. Set Up a Geth PoA Network +## 1. Configurar una Red Geth PoA -For this tutorial, we will use a simple -[Proof-of-Authority](https://github.com/ethereum/EIPs/issues/225) network -with geth. The first step is creating a _signer account_: an account which -will be used by geth to sign the blocks in the network. -Any block signed by a signer is accepted as valid. +Para este tutorial, utilizaremos una simple red +[Prueba de Autoridad](https://github.com/ethereum/EIPs/issues/225) con geth. El primer paso es crear una cuenta de firmante: una cuenta que +será utilizada por geth para firmar los bloques en la red. +Cualquier bloque firmado por un firmante se acepta como válido. +### 1.1. Crear una Cuenta de Firmante -### 1.1. Create a Signer Account - -To create a signer account, from the `marketplace-tutorial` directory run: +Para crear una cuenta de firmante, desde el directorio `marketplace-tutorial` ejecuta: ```bash geth account new --datadir geth-data ``` -The account generator will ask you to input a password, which you can -leave blank. It will then print some information, -including the account's public address: +El generador de cuentas te pedirá que ingreses una contraseña, que puedes +dejar en blanco. Luego imprimirá cierta información, +incluida la dirección pública de la cuenta: ```bash INFO [09-29|16:49:24.244] Maximum peer count ETH=50 total=50 @@ -69,37 +66,37 @@ Path of the secret key file: geth-data/keystore/UTC--2024-09-29T14-49-31.6552720 - You must REMEMBER your password! Without the password, it's impossible to decrypt the key! ``` -In this example, the public address of the signer account is +En este ejemplo, la dirección pública de la cuenta de firmante es `0x33A904Ad57D0E2CB8ffe347D3C0E83C2e875E7dB`. -Yours will print a different address. Save it for later usage. +Tu consola imprimirá una dirección diferente. Guárdala para usarla más adelante. -Next set an environment variable for later usage: +A continuación, configura una variable de entorno para usarla más adelante: ```bash export GETH_SIGNER_ADDR="0x0000000000000000000000000000000000000000" echo ${GETH_SIGNER_ADDR} > geth_signer_address.txt ``` -> Here make sure you replace `0x0000000000000000000000000000000000000000` -> with your public address of the signer account -> (`0x33A904Ad57D0E2CB8ffe347D3C0E83C2e875E7dB` in our example). +> Aquí, asegúrate de reemplazar `0x0000000000000000000000000000000000000000` +> con tu dirección pública de la cuenta de firmante +> (`0x33A904Ad57D0E2CB8ffe347D3C0E83C2e875E7dB` en nuestro ejemplo). -### 1.2. Configure The Network and Create the Genesis Block +### 1.2. Configurar la Red y Crear el Bloque Génesis -The next step is telling geth what kind of network you want to run. -We will be running a [pre-merge](https://ethereum.org/en/roadmap/merge/) -network with Proof-of-Authority consensus. -To get that working, create a `network.json` file. +El siguiente paso es decirle a geth qué tipo de red quieres ejecutar. +Estaremos ejecutando una red [pre-merge](https://ethereum.org/en/roadmap/merge/) +con consenso de Prueba de Autoridad. +Para que eso funcione, crea un archivo `network.json` . -If you set the `GETH_SIGNER_ADDR` variable above you can run the following -command to create the `network.json` file: +Si configuraste la variable `GETH_SIGNER_ADDR` anteriormente, puedes ejecutar el siguiente +comando para crear el archivo `network.json` . ```bash echo "{\"config\": { \"chainId\": 12345, \"homesteadBlock\": 0, \"eip150Block\": 0, \"eip155Block\": 0, \"eip158Block\": 0, \"byzantiumBlock\": 0, \"constantinopleBlock\": 0, \"petersburgBlock\": 0, \"istanbulBlock\": 0, \"berlinBlock\": 0, \"londonBlock\": 0, \"arrowGlacierBlock\": 0, \"grayGlacierBlock\": 0, \"clique\": { \"period\": 1, \"epoch\": 30000 } }, \"difficulty\": \"1\", \"gasLimit\": \"8000000\", \"extradata\": \"0x0000000000000000000000000000000000000000000000000000000000000000${GETH_SIGNER_ADDR:2}0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\", \"alloc\": { \"${GETH_SIGNER_ADDR}\": { \"balance\": \"10000000000000000000000\"}}}" > network.json ``` -You can also manually create the file remembering update it with your -signer public address: +También puedes crear el archivo manualmente recordando actualizarlo con tu +dirección pública de firmante: ```json { @@ -133,49 +130,48 @@ signer public address: } ``` -Note that the signer account address is embedded in two different places: -* inside of the `"extradata"` string, surrounded by zeroes and stripped of - its `0x` prefix; -* as an entry key in the `alloc` session. - Make sure to replace that ID with the account ID that you wrote down in - [Step 1.1](#_1-1-create-a-signer-account). +Ten en cuenta que la dirección de la cuenta de firmante está incrustada en dos lugares diferentes: +* dentro de la cadena `"extradata"` , rodeada de ceros y sin su prefijo `0x` ; +* como una clave de entrada en la sesión `alloc` . + Asegúrate de reemplazar esa ID con la ID de cuenta que anotaste en + [Paso 1.1](#_1-1-create-a-signer-account). -Once `network.json` is created, you can initialize the network with: +Una vez que se crea `network.json` , puedes inicializar la red con: ```bash geth init --datadir geth-data network.json ``` -The output of the above command you may include some warnings, like: +El resultado del comando anterior puede incluir algunas advertencias, como: ```bash WARN [08-21|14:48:12.305] Unknown config environment variable envvar=GETH_SIGNER_ADDR ``` -or even errors when running the command for the first time: +o incluso errores al ejecutar el comando por primera vez: ```bash ERROR[08-21|14:48:12.399] Head block is not reachable ``` -The important part is that at the end you should see something similar to: +Lo importante es que al final debes ver algo similar a: ```bash INFO [08-21|14:48:12.639] Successfully wrote genesis state database=lightchaindata hash=768bf1..42d06a ``` -### 1.3. Start your PoA Node +### 1.3. Iniciar tu Nodo PoA -We are now ready to start our $1$-node, private blockchain. -To launch the signer node, open a separate terminal in the same working -directory and make sure you have the `GETH_SIGNER_ADDR` set. -For convenience use the `geth_signer_address.txt`: +Ahora estamos listos para iniciar nuestra blockchain privada de $1$ nodo. +Para lanzar el nodo firmante, abre una terminal separada en el mismo directorio de trabajo +y asegúrate de tener `GETH_SIGNER_ADDR` configurado. +Para mayor comodidad, utiliza el `geth_signer_address.txt`: ```bash export GETH_SIGNER_ADDR=$(cat geth_signer_address.txt) ``` -Having the `GETH_SIGNER_ADDR` variable set, run: +Teniendo la variable `GETH_SIGNER_ADDR` configurada, ejecuta: ```bash geth\ @@ -190,14 +186,14 @@ geth\ --allow-insecure-unlock ``` -Note that, once again, the signer account created in -[Step 1.1](#_1-1-create-a-signer-account) appears both in -`--unlock` and `--allow-insecure-unlock`. +Ten en cuenta que, una vez más, la cuenta de firmante creada en +[Paso 1.1](#_1-1-create-a-signer-account) aparece tanto en +`--unlock` como en `--allow-insecure-unlock`. -Geth will prompt you to insert the account's password as it starts up. -Once you do that, it should be able to start up and begin "mining" blocks. +Geth te pedirá que insertes la contraseña de la cuenta a medida que se inicia. +Una vez que lo hagas, debería poder iniciarse y comenzar a "minar" bloques. -Also here, you may encounter errors like: +También aquí, puedes encontrar errores como: ```bash ERROR[08-21|15:00:27.625] Bootstrap node filtered by netrestrict id=c845e51a5e470e44 ip=18.138.108.67 @@ -206,41 +202,40 @@ ERROR[08-21|15:00:27.625] Bootstrap node filtered by netrestrict id=ef2d7ab886 ERROR[08-21|15:00:27.625] Bootstrap node filtered by netrestrict id=6b36f791352f15eb ip=157.90.35.166 ``` -You can safely ignore them. +Puedes ignorarlos con seguridad. -If the command above fails with: +Si el comando anterior falla con: ```bash Fatal: Failed to register the Ethereum service: only PoS networks are supported, please transition old ones with Geth v1.13.x ``` -make sure, you are running the correct Geth version -(see Section [Prerequisites](#prerequisites)) - -## 2. Set Up The Marketplace +asegúrate de estar ejecutando la versión correcta de Geth +(consulta la Secció [Prerrequisitos](#prerequisites)) -You will need to open new terminal for this section and geth needs to be -running already. Setting up the Codex marketplace entails: +## 2. Configurar El Marketplace -1. Deploying the Codex Marketplace contracts to our private blockchain -2. Setup Ethereum accounts we will use to buy and sell storage in - the Codex marketplace -3. Provisioning those accounts with the required token balances +Necesitarás abrir una nueva terminal para esta sección y geth debe estar +ejecutándose ya. La configuración del marketplace de Codex implica: -### 2.1. Deploy the Codex Marketplace Contracts - -Make sure you leave the `marketplace-tutorial` directory, and clone -the `codex-storage/nim-codex.git`: +1. Implementar los Contratos del Marketplace de Codex en nuestra blockchain privada +2. Configurar cuentas de Ethereum que utilizaremos para comprar y vender almacenamiento en el marketplace de Codex +3. Aprovisionar esas cuentas con los saldos de tokens requeridos + +2.1. Implementar los Contratos del Marketplace de Codex +Asegúrate de salir del directorio `marketplace-tutorial` y clonar +el `codex-storage/nim-codex.git`: ```bash git clone https://github.com/codex-storage/nim-codex.git ``` -> If you just want to clone the repo to run the tutorial, you can -> skip the history and just download the head of the master branch by using +> Si solo quieres clonar el repositorio para ejecutar el tutorial, puedes +omitir el historial y simplemente descargar el head de la rama principal utilizando +el > `--depth 1` option: `git clone --depth 1 https://github.com/codex-storage/nim-codex.git` -Thus, our directory structure for the purpose of this tutorial looks like this: +Por lo tanto, nuestra estructura de directorios para el propósito de este tutorial se ve así: ```bash | @@ -248,49 +243,49 @@ Thus, our directory structure for the purpose of this tutorial looks like this: └-- marketplace-tutorial ``` -> You could clone the `codex-storage/nim-codex.git` to some other location. -> Just to keeps things nicely separated it is best to make sure that -> `nim-codex` is not under `marketplace-tutorial` directory. +> Podrías clonar el `codex-storage/nim-codex.git` a alguna otra ubicación. +> olo para mantener las cosas bien separadas, lo mejor es asegurarse de que +> `nim-codex` o esté bajo el directorio `marketplace-tutorial` . -Now, from the `nim-codex` folder run: +Ahora, desde la carpeta `nim-codex` ejecuta: ```bash make update && make ``` -> This may take a moment as it will also build the `nim` compiler. Be patient. +> Esto puede tomar un momento ya que también construirá el compilador `nim` Ten paciencia. -Now, in order to start a local Ethereum network run: +Ahora, para iniciar una red Ethereum local ejecuta: ```bash cd vendor/codex-contracts-eth npm install ``` -> While writing the document we used `node` version `v20.17.0` and -> `npm` version `10.8.2`. +> Mientras escribíamos el documento, utilizamos la version `v20.17.0` de `node` y +> la version `10.8.2` de `npm` . -Before continuing you now must **wait until $256$ blocks are mined** -**in your PoAnetwork**, or deploy will fail. This should take about -$4$ minutes and $30$ seconds. You can check which block height you are -currently at by running the following command -**from the `marketplace-tutorial` folder**: +Antes de continuar, ahora debes **esperar hasta que se minen $256$ bloques** +**en tu red PoA**, o la implementación fallará. Esto debería tomar alrededor de +$4$ minutos y $30$ segundos. Puedes verificar en qué altura de bloque te encuentras +actualmente ejecutando el siguiente comando +**desde la carpeta `marketplace-tutorial` **: ```bash geth attach --exec web3.eth.blockNumber ./geth-data/geth.ipc ``` -once that gets past $256$, you are ready to go. +una vez que pase de $256$, estarás listo para continuar. -To deploy contracts, from the `codex-contracts-eth` directory run: +Para implementar contratos, desde el directorio `codex-contracts-eth` ejecuta: ```bash export DISTTEST_NETWORK_URL=http://localhost:8545 npx hardhat --network codexdisttestnetwork deploy ``` -If the command completes successfully, you will see the output similar -to this one: +Si el comando se completa correctamente, verás un resultado similar +a este: ```bash Deployed Marketplace with Groth16 Verifier at: @@ -300,139 +295,134 @@ Deployed Marketplace with Groth16 Verifier at: You are now ready to prepare the accounts. -### 2.2. Generate the Required Accounts +### 2.2. Generar las Cuentas Requeridas -We will run $2$ Codex nodes: a **storage provider**, which will sell storage -on the network, and a **client**, which will buy and use such storage; -we therefore need two valid Ethereum accounts. We could create random -accounts by using one of the many tools available to that end but, since -this is a tutorial running on a local private network, we will simply -provide you with two pre-made accounts along with their private keys, -which you can copy and paste instead: +Ejecutaremos $2$ nodos Codex: un **proveedor de almacenamiento**,que venderá almacenamiento +en la red, y un **cliente**, que comprará y usará dicho almacenamiento; +por lo tanto, necesitamos dos cuentas de Ethereum válidas. Podríamos crear cuentas aleatorias +utilizando una de las muchas herramientas disponibles para tal fin pero, dado que +este es un tutorial que se ejecuta en una red privada local, simplemente +te proporcionaremos dos cuentas pre-hechas junto con sus claves privadas, +que puedes copiar y pegar en su lugar: -First make sure you're back in the `marketplace-tutorial` folder and -not the `codex-contracts-eth` subfolder. Then set these variables: +Primero, asegúrate de estar de vuelta en la carpeta `marketplace-tutorial` folder y +no en la subcarpeta `codex-contracts-eth` . Luego, configura estas variables: -**Storage:** +**Almacenamiento:** ```bash export ETH_STORAGE_ADDR=0x45BC5ca0fbdD9F920Edd12B90908448C30F32a37 export ETH_STORAGE_PK=0x06c7ac11d4ee1d0ccb53811b71802fa92d40a5a174afad9f2cb44f93498322c3 echo $ETH_STORAGE_PK > storage.pkey && chmod 0600 storage.pkey ``` -**Client:** +**Cliente:** ```bash export ETH_CLIENT_ADDR=0x9F0C62Fe60b22301751d6cDe1175526b9280b965 export ETH_CLIENT_PK=0x5538ec03c956cb9d0bee02a25b600b0225f1347da4071d0fd70c521fdc63c2fc echo $ETH_CLIENT_PK > client.pkey && chmod 0600 client.pkey ``` -### 2.3. Provision Accounts with Tokens +### 2.3. Aprovisionar Cuentas con Tokens -We now need to transfer some ETH to each of the accounts, as well as provide -them with some Codex tokens for the storage node to use as collateral and -for the client node to buy actual storage. +Ahora necesitamos transferir algo de ETH a cada una de las cuentas, así como proporcionarles +algunos tokens Codex para que el nodo de almacenamiento los use como colateral y +para que el nodo cliente compre almacenamiento real. -Although the process is not particularly complicated, I suggest you use -[the script we prepared](https://github.com/gmega/local-codex-bare/blob/main/scripts/mint-tokens.js) -for that. This script, essentially: +Aunque el proceso no es particularmente complicado, te sugiero que uses +[el script que preparamos](https://github.com/gmega/local-codex-bare/blob/main/scripts/mint-tokens.js) +para eso. Este script, esencialmente: -1. reads the Marketplace contract address and its ABI from the deployment data; -2. transfers $1$ ETH from the signer account to a target account if the target - account has no ETH balance; -3. mints $n$ Codex tokens and adds it into the target account's balance. +1. Lee la dirección del contrato del Marketplace y su ABI de los datos de implementación; +2. Transfiere $1$ ETH de la cuenta del firmante a una cuenta de destino si la cuenta de destino no tiene saldo de ETH; +3. Acuña $n$ tokens Codex y los agrega al saldo de la cuenta de destino. -To use the script, just download it into a local file named `mint-tokens.js`, -for instance using `curl` (make sure you are in -the `marketplace-tutorial` directory): +Para usar el script, simplemente descárgalo en un archivo local llamado `mint-tokens.js`, +por ejemplo, usando `curl` (asegúrate de estar en +el directorio `marketplace-tutorial` ): ```bash -# download script +# descargar script curl https://raw.githubusercontent.com/gmega/codex-local-bare/main/scripts/mint-tokens.js -o mint-tokens.js ``` -Then run: +Luego ejecuta: ```bash -# set the contract file location (we assume you are in the marketplace-tutorial directory) +# establecer la ubicación del archivo de contrato (asumimos que estás en el directorio marketplace-tutorial) export CONTRACT_DEPLOY_FULL="../nim-codex/vendor/codex-contracts-eth/deployments/codexdisttestnetwork" export GETH_SIGNER_ADDR=$(cat geth_signer_address.txt) -# Installs Web3-js +# Instala Web3-js npm install web3 -# Provides tokens to the storage account. +# Proporciona tokens a la cuenta de almacenamiento. node ./mint-tokens.js $CONTRACT_DEPLOY_FULL/TestToken.json $GETH_SIGNER_ADDR 0x45BC5ca0fbdD9F920Edd12B90908448C30F32a37 10000000000 -# Provides tokens to the client account. +# Proporciona tokens a la cuenta del cliente. node ./mint-tokens.js $CONTRACT_DEPLOY_FULL/TestToken.json $GETH_SIGNER_ADDR 0x9F0C62Fe60b22301751d6cDe1175526b9280b965 10000000000 ``` -If you get a message like +Si te sale un mensaje como ```bash Usage: mint-tokens.js ``` -then you need to ensure you provided all the required arguments. -In particular you need to ensure that the `GETH_SIGNER_ADDR` env variable -holds the signer address (we used -`export GETH_SIGNER_ADDR=$(cat geth_signer_address.txt)` above to -make sure it is set). +entonces necesitas asegurarte que proveiste todos los argumentos requeridos. +En particular necesitas asegurar, que la variable de entorno `GETH_SIGNER_ADDR` contenga la dirección del firmante (usamos +`export GETH_SIGNER_ADDR=$(cat geth_signer_address.txt)` arriba, para +asegurar que este establecida) -## 3. Run Codex +## 3. Ejecutar Codex -With accounts and geth in place, we can now start the Codex nodes. +Con las cuentas y geth configurados, ahora podemos iniciar los nodos Codex. -### 3.1. Storage Node +### 3.1.Storage Node -The storage node will be the one storing data and submitting the proofs of -storage to the chain. To do that, it needs access to: +El nodo de almacenamiento será el que almacene los datos y envíe las pruebas de +almacenamiento a la cadena. Para hacer eso necesita access a: -1. the address of the Marketplace contract that has been deployed to - the local geth node in [Step 2.1](#_2-1-deploy-the-codex-marketplace-contracts); -2. the sample ceremony files which are shipped in the Codex contracts repo +1. La dirección de contrata del Marketplace que fue "deployed" a el nodo geth local en [Paso 2.1](#_2-1-deploy-the-codex-marketplace-contracts); +2. A los "sample ceremony files" los cuales estan dentro de Codex contracts repo (`nim-codex/vendor/codex-contracts-eth`). -**Address of the Marketplace Contract.** The contract address can be found -inside of the file `nim-codex/vendor/codex-contracts-eth/deployments/codexdisttestnetwork/Marketplace.json`. -We captured that location above in `CONTRACT_DEPLOY_FULL` variable, thus, from -the `marketplace-tutorial` folder just run: +**Dirección del Contrato Marketplace.** La dirección del contracto se puede encontrar +dentro el archivo `nim-codex/vendor/codex-contracts-eth/deployments/codexdisttestnetwork/Marketplace.json`. +Capturamos esta ubicación en la variable `CONTRACT_DEPLOY_FULL` arriba, por lo tanto, desde la carpeta `marketplace-tutorial` ejecuta: ```bash grep '"address":' ${CONTRACT_DEPLOY_FULL}/Marketplace.json ``` -which should print something like: +esto imprimirá algo como: ```bash "address": "0xCf0df6C52B02201F78E8490B6D6fFf5A82fC7BCd", ``` -> This address should match the address we got earlier when deploying -> the Marketplace contract above. +> Esta dirección debería de coincidir con la que obtuvimos antes cuando "deployeamos" +> el contracto Marketplace arriba. -Then run the following with the correct market place address: +Después ejecuta lo siguiente con la dirección correcta del mercado: ```bash export MARKETPLACE_ADDRESS="0x0000000000000000000000000000000000000000" echo ${MARKETPLACE_ADDRESS} > marketplace_address.txt ``` -where you replace `0x0000000000000000000000000000000000000000` with -the Marketplace contract above in -[Step 2.1](#_2-1-deploy-the-codex-marketplace-contracts). +donde reemplazariamos `0x0000000000000000000000000000000000000000` con +el contrato Marketplace de arriba en +[Paso 2.1](#_2-1-deploy-the-codex-marketplace-contracts). -**Prover ceremony files.** The ceremony files are under the +**Archivos de ceremonia del "prover".** The "ceremony files" están bajo el +subdirectorio `nim-codex/vendor/codex-contracts-eth/verifier/networks/codexdisttestnetwork` -subdirectory. There are three of them: `proof_main.r1cs`, `proof_main.zkey`, -and `prooof_main.wasm`. We will need all of them to start the Codex storage node. + Son tres: `proof_main.r1cs`, `proof_main.zkey`, +y `prooof_main.wasm`. Los necesitaremos todos para iniciar el nodo de almacenamiento Codex. -**Starting the storage node.** Let: +**Iniciando el nodo de almacenamiento.** Sea: -* `PROVER_ASSETS` contain the directory where the prover ceremony files are - located. **This must be an absolute path**; -* `CODEX_BINARY` contain the location of your Codex binary; -* `MARKETPLACE_ADDRESS` contain the address of the Marketplace contract - (we have already set it above). +* `PROVER_ASSETS` conteniendo la dirección donde los archivos de ceremonia del "prover" están ubicados. **Esta debe de ser una ruta absoluta**; +* `CODEX_BINARY` conteniendo la ubicación de tu binario Codex; +* `MARKETPLACE_ADDRESS` conteniendo la dirección de el contrato Marketplace (ya hemos configurado esto arriba). -Set these paths into environment variables (make sure you are in -the `marketplace-tutorial` directory): +Configura estas rutas en variables de entorno (asegúrate que esta en +el directorio `marketplace-tutorial` ): ```bash export CONTRACT_DEPLOY_FULL=$(realpath "../nim-codex/vendor/codex-contracts-eth/deployments/codexdisttestnetwork") @@ -440,10 +430,10 @@ export PROVER_ASSETS=$(realpath "../nim-codex/vendor/codex-contracts-eth/verifie export CODEX_BINARY=$(realpath "../nim-codex/build/codex") export MARKETPLACE_ADDRESS=$(cat marketplace_address.txt) ``` -> you may notice, that we have already set the `CONTRACT_DEPLOY_FULL` variable -> above. Here, we make sure it is an absolute path. +> puedes notar, que ya establecimos la variable `CONTRACT_DEPLOY_FULL` variable +> arriba. Ahora, nos aseguramos que es una dirección absoluta -To launch the storage node, run: +Para lanzar el nodo de almacenamiento , ejecuta : ```bash ${CODEX_BINARY}\ @@ -463,35 +453,34 @@ ${CODEX_BINARY}\ --circom-zkey=${PROVER_ASSETS}/proof_main.zkey ``` -**Starting the client node.** - -The client node is started similarly except that: +**Iniciando el nodo cliente.** -* we need to pass the SPR of the storage node so it can form a network with it; -* since it does not run any proofs, it does not require any ceremony files. +El nodo client se inicializa similar, excepto que: -We get the Signed Peer Record (SPR) of the storage node so we can bootstrap -the client node with it. To get the SPR, issue the following call: +necesitamos pasar la SPR del nodo de almacenamiento, par que pueda formar uan red con el; +desde que no ejecuta ningún "proofs", no requiere archivos de "ceremonia". +Obtenemos el "Signed Peer Record (SPR)" del nodo de almacenamiento, para poder "bootstrap" +el nodo cliente con el. Para obtener la SPR, ejecuta la llamada siguiente: ```bash curl -H 'Accept: text/plain' 'http://localhost:8000/api/codex/v1/spr' --write-out '\n' ``` -You should get the SPR back starting with `spr:`. +Deberías recibir el SPR de vuelta, empezando con `spr:`. -Before you proceed, open new terminal, and enter `marketplace-tutorial` directory. +Antes de proceder, abre una nueva terminal, y entra en en directorio `marketplace-tutorial` . -Next set these paths into environment variables: +Lo siguiente es establecer estas rutas en variables de entorno: ```bash -# set the SPR for the storage node +# establece el SPR para el nodo de almacenamiento export STORAGE_NODE_SPR=$(curl -H 'Accept: text/plain' 'http://localhost:8000/api/codex/v1/spr') -# basic vars +# variables basicas export CONTRACT_DEPLOY_FULL=$(realpath "../nim-codex/vendor/codex-contracts-eth/deployments/codexdisttestnetwork") export CODEX_BINARY=$(realpath "../nim-codex/build/codex") export MARKETPLACE_ADDRESS=$(cat marketplace_address.txt) ``` -and then run: +y después ejecuta: ```bash ${CODEX_BINARY}\ @@ -506,18 +495,18 @@ ${CODEX_BINARY}\ --marketplace-address=${MARKETPLACE_ADDRESS} ``` -## 4. Buy and Sell Storage on the Marketplace +## 4. Comprar y Vender Almacenamiento en el Marketplace -Any storage negotiation has two sides: a buyer and a seller. -Therefore, before we can actually request storage, we must first offer -some of it for sale. +Cualquier negociación de almacenamiento tiene dos lados:: un comprador y un vendedor. +Por lo tanto, antes de que podamos realmente solicitar almacenamiento, primero debemos ofrecer +algo de el a la venta. -### 4.1 Sell Storage +### 4.1 Vender Almacenamiento -The following request will cause the storage node to put out $50\text{MB}$ -of storage for sale for $1$ hour, at a price of $1$ Codex token -per slot per second, while expressing that it's willing to take at most -a $1000$ Codex token penalty for not fulfilling its part of the contract.[^1] +LA siguiente solicitud hara, que el nodo de almacenamiento ponga a la venta $50\text{MB}$ +de almacenamiento por $1$ hora , a un precio de $1$ token Codex +por "slot" por segundo, al tiempo que expresa que está dispuesto a asumir como máximo +una penalización de $1000$ tokens Codex, por no cumplir con su parte del contrato.[^1] ```bash curl 'http://localhost:8000/api/codex/v1/sales/availability' \ @@ -530,53 +519,53 @@ curl 'http://localhost:8000/api/codex/v1/sales/availability' \ }' ``` -This should return a JSON response containing an `id` (e.g. `"id": "0xb55b3bc7aac2563d5bf08ce8a177a38b5a40254bfa7ee8f9c52debbb176d44b0"`) -which identifies this storage offer. +Esto debería devolver una respuesta JSON conteniendo un `id` (p.ej. `"id": "0xb55b3bc7aac2563d5bf08ce8a177a38b5a40254bfa7ee8f9c52debbb176d44b0"`) +que identifica la oferta de almacenamiento. -> To make JSON responses more readable, you can try -> [jq](https://jqlang.github.io/jq/) JSON formatting utility -> by just adding `| jq` after the command. -> On macOS you can install with `brew install jq`. +> Para que las respuestas JSON sean más legibles, puedes intentar +> [jq](https://jqlang.github.io/jq/) la utilidad de formato JSON, +> simplemente agregando `| jq` después del comando. +> En macOS puedes instalarlo con `brew install jq`. -To check the current storage offers for this node, you can issue: +Para revisar las ofertas de almacenamiento actuales para ste nodo, puedes ejecutar: ```bash curl 'http://localhost:8000/api/codex/v1/sales/availability' ``` -or with `jq`: +o con `jq`: ```bash curl 'http://localhost:8000/api/codex/v1/sales/availability' | jq ``` -This should print a list of offers, with the one you just created figuring -among them (for our tutorial, there will be only one offer returned -at this time). +Esto debería de imprimir una lista de ofertas, con la que acabas de crear figurando +entre ellas (para nuestro tutorial, solo se devolverá una oferta +en este momento). -### 4.2. Buy Storage +### 4.2. Comprar Almacenamiento -Before we can buy storage, we must have some actual data to request -storage for. Start by uploading a small file to your client node. -On Linux (or macOS) you could, for instance, use `dd` to generate a $1M$ file: +Antes de que podamos comprar almacenamiento, necesitamos mas data para solicitar +almacenamiento. Empieza subiendo un archivo pequeño a tu nodo cliente. +En Linux (o macOS) podrías, por ejemplo, usar `dd` para generar un archivo $1M$: ```bash dd if=/dev/urandom of=./data.bin bs=1M count=1 ``` -Assuming your file is named `data.bin`, you can upload it with: +Asumiendo que tu archivo se llama `data.bin`, puedes subirlo con: ```bash curl --request POST http://localhost:8001/api/codex/v1/data --header 'Content-Type: application/octet-stream' --write-out '\n' -T ./data.bin ``` -Once the upload completes, you should see a _Content Identifier_, -or _CID_ (e.g. `zDvZRwzm2mK7tvDzKScRLapqGdgNTLyyEBvx1TQY37J2CdWdS6Sj`) -for the uploaded file printed to the terminal. -Use that CID in the purchase request: +Una vez que se complete la carga, deberías ver un _Content Identifier_, +o _CID_ (p.ej. `zDvZRwzm2mK7tvDzKScRLapqGdgNTLyyEBvx1TQY37J2CdWdS6Sj`) +para el archivo cargado impreso en la terminal. +Usa ese CID en la solicitud de compra: ```bash -# make sure to replace the CID before with the CID you got in the previous step +# asegúrate de reemplazar el CID anterior con el CID que obtuviste en el paso anterior export CID=zDvZRwzm2mK7tvDzKScRLapqGdgNTLyyEBvx1TQY37J2CdWdS6Sj ``` @@ -595,39 +584,36 @@ curl "http://localhost:8001/api/codex/v1/storage/request/${CID}" \ --write-out '\n' ``` -The parameters under `--data` say that: +Los parámetros en `--data` dicen: -1. we want to purchase storage for our file for $5$ minutes (`"duration": "600"`); -2. we are willing to pay up to $1$ token per slot per second (`"reward": "1"`) -3. our file will be split into three pieces (`"nodes": 3`). - Because we set `"tolerance": 1` we only need two (`nodes - tolerance`) - pieces to rebuild the file; i.e., we can tolerate that at most one node - stops storing our data; either due to failure or other reasons; -4. we demand `1000` tokens in collateral from storage providers for each piece. - Since there are $3$ such pieces, there will be `3000` in total collateral - committed by the storage provider(s) once our request is started. -5. finally, the `expiry` puts a time limit for filling all the slots by - the storage provider(s). If slot are not filled by the `expire` interval, - the request will timeout and fail. +1. queremos comprar almacenamiento para nuestro archivo durante $5$ minutos (`"duration": "600"`); +2. estamos dispuestos pagar a hasta $1$ token por slot por segundo (`"reward": "1"`) +3. nuestro archivo se dividirá en tres pedazos (`"nodes": 3`). + Porque establecimos `"tolerance": 1` solo necesitamos dos (`nodes - tolerance`) + pedazos para reconstruir el archivo; i.e., podemos tolerar que a lo mucho 1 nodo deje de almacenar nuestros datos; ya sea debido a falla u otras razones; +4. exigimos `1000` tokens en garantía de los proveedores de almacensmiento por slot. Desde que hay $3$ slots de estos, habrá `3000` en garantía total + comprometido por los proveedores de almacenamiento una vez que se inicie nuestra solicitud. +5. finalmente, el `expiry` pone un límite de tiempo para llenar todos los "slots" por los proveedores de almacenamiento. Si los slots no se llenan antes del intervalo `expire` interval, +la solicitud expirará, y fallara. -### 4.3. Track your Storage Requests +### 4.3. Rastrear Tus Solicitudes de Almacenamiento -POSTing a storage request will make it available in the storage market, -and a storage node will eventually pick it up. +"POSTeando" una solicitud de almacenamiento la pondrá a disposicion en el mercado de almacenamiento, +y un nodo de almacenamiento eventualmente la recogerá. -You can poll the status of your request by means of: +Puedes mandar a llamar el estado de tu solicitud por medios de:: ```bash export STORAGE_PURCHASE_ID="1d0ec5261e3364f8b9d1cf70324d70af21a9b5dccba380b24eb68b4762249185" curl "http://localhost:8001/api/codex/v1/storage/purchases/${STORAGE_PURCHASE_ID}" ``` -For instance: +Por ejemplo: ```bash > curl 'http://localhost:8001/api/codex/v1/storage/purchases/6c698cd0ad71c41982f83097d6fa75beb582924e08a658357a1cd4d7a2a6766d' ``` -This returns a result like: +Esto devuelve un resultado como: ```json { @@ -655,15 +641,15 @@ This returns a result like: } ``` -Shows that a request has been submitted but has not yet been filled. -Your request will be successful once `"state"` shows `"started"`. -Anything other than that means the request has not been completely -processed yet, and an `"error"` state other than `null` means it failed. +Muestra que a una solicitud se le ha dado "submitted" pero aun no ha sido completada. +Tu solicitud tendrá éxito una vez que `"state"` muestre `"started"`. +Cualquier otra cosa fuera de eso significa que una solicitud no ha sido completamente +procesada aun, y un estado `"error"` a parte de `null` significa que ha fallado. -Well, it was quite a journey, wasn't it? You can congratulate yourself for -successfully finishing the codex marketplace tutorial! +Bueno, este ha sido un camino largo verdad? Puedes felicitarte a ti mismo por +haber terminado exitosamenet el tutorial de Codex marketplace ! -[^1]: Codex files get partitioned into pieces called "slots" and distributed -to various storage providers. The collateral refers to one such slot, -and will be slowly eaten away as the storage provider fails to deliver -timely proofs, but the actual logic is [more involved than that](https://github.com/codex-storage/codex-contracts-eth/blob/6c9f797f408608958714024b9055fcc330e3842f/contracts/Marketplace.sol#L209). +[^1]: Los archivos Codex se han dividido en pedazos llamados "slots" y distribuidos +a varios proveedores de almacenamiento. "The colateral refiers to one such slot" +y lo consumiran lentamente a medida que el proveedor de almacenamiento falle en el +entrega oportuna de "proofs" , pero la lógica actual es [más compleja que eso](https://github.com/codex-storage/codex-contracts-eth/blob/6c9f797f408608958714024b9055fcc330e3842f/contracts/Marketplace.sol#L209). diff --git a/learn/local-two-client-test.md b/learn/local-two-client-test.md index 31c8efd..8080551 100644 --- a/learn/local-two-client-test.md +++ b/learn/local-two-client-test.md @@ -1,28 +1,27 @@ -# Codex Two-Client Test +# Prueba de Dos Clientes Codex -The two-client test is a manual test you can perform to check your setup and familiarize yourself with the Codex API. These steps will guide you through running and connecting two nodes, in order to upload a file to one and then download that file from the other. This test also includes running a local blockchain node in order to have the Marketplace functionality available. However, running a local blockchain node is not strictly necessary, and you can skip steps marked as optional if you choose not start a local blockchain node. +La prueba de dos clientes es una prueba manual que puede realizar para verificar su configuración y familiarizarse con la API de Codex. Estos pasos le guiarán a través de la ejecución y conexión de dos nodos, con el fin de cargar un archivo a uno y luego descargarlo desde el otro. Esta prueba también incluye la ejecución de un nodo blockchain local para tener disponible la funcionalidad del Marketplace. Sin embargo, la ejecución de un nodo blockchain local no es estrictamente necesaria, y puede omitir los pasos marcados como opcionales si decide no iniciar un nodo blockchain local. -## Prerequisite +## Requisitos Previos -Make sure you have [built the client](/learn/build) or obtained [compiled binary](/learn/quick-start#get-codex-binary). +Asegúrese de haber [ compilado el cliente](/learn/build) o haber obtenido el [ binario compilado](/learn/quick-start#get-codex-binary). ## Steps -### 0. Setup blockchain node (optional) +### 0. Configuración del nodo blockchain (opcional) -You need to have installed NodeJS and npm in order to spinup a local blockchain node. +Necesita tener instalado NodeJS y npm para poder levantar un nodo blockchain local. -Go to directory `vendor/codex-contracts-eth` and run these two commands: +Diríjase al directorio `vendor/codex-contracts-eth` y ejecute estos dos comandos: ``` npm ci npm start ``` -This will launch a local Ganache blockchain. +Esto iniciará una blockchain Ganache local. -### 1. Launch Node #1 - -Open a terminal and run: +### 1. Inicio del Nodo #1 +Abra una terminal y ejecute: - Mac/Linux: ```shell codex \ @@ -40,35 +39,35 @@ Open a terminal and run: --listen-addrs="/ip4/127.0.0.1/tcp/8070" ``` -Optionally, if you want to use the Marketplace blockchain functionality, you need to also include these flags: `--persistence --eth-account=`, where `account` can be one following: +Opcionalmente, si desea utilizar la funcionalidad de Marketplace blockchain, también debe incluir las siguientes flags: `--persistence --eth-account=`, donde `account` puede ser una de las siguientes: - `0x70997970C51812dc3A010C7d01b50e0d17dc79C8` - `0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC` - `0x90F79bf6EB2c4f870365E785982E1f101E93b906` - `0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65` -**For each node use a different account!** +**¡Para cada nodo use una cuenta diferente!** -| Argument | Description | +| Argumento | Descripción | |----------------|-----------------------------------------------------------------------| -| `data-dir` | We specify a relative path where the node will store its data. | -| `listen-addrs` | Multiaddress where the node will accept connections from other nodes. | -| `api-port` | Port on localhost where the node will expose its API. | -| `disc-port` | Port the node will use for its discovery service. | -| `persistence` | Enables Marketplace functionality. Requires a blockchain connection. | -| `eth-account` | Defines which blockchain account the node should use. | +| `data-dir` | Especifica la ruta relativa donde el nodo almacenará sus datos. | +| `listen-addrs` | Multiaddress donde el nodo aceptará conexiones de otros nodos. | +| `api-port` | Puerto en localhost donde el nodo expondrá su API. | +| `disc-port` | Puerto que el nodo utilizará para su servicio de descubrimiento. | +| `persistence` | Habilita la funcionalidad de Marketplace. Requiere una conexión a la blockchain. | +| `eth-account` | Define qué cuenta de blockchain debe usar el nodo. Esta cuenta debe tener fondos (ETH) para pagar las transacciones. | -Codex uses sane defaults for most of its arguments. Here we specify some explicitly for the purpose of this walk-through. +Codex utiliza valores predeterminados sensatos para la mayoría de sus argumentos. Aquí especificamos algunos explícitamente para el propósito de esta guía. -### 2. Sign of life +### 2. Señal de vida -Run the command : +Ejecute el comando : ```bash curl -X GET http://127.0.0.1:8080/api/codex/v1/debug/info ``` -This GET request will return the node's debug information. The response will be in JSON and should look like: +Esta solicitud GET devolverá la información de depuración del nodo. La respuesta estará en formato JSON y debería verse así: ```json { @@ -98,23 +97,23 @@ This GET request will return the node's debug information. The response will be } ``` -| Field | Description | +| Campo | Descripción | | ------------------- | ---------------------------------------------------------------------------------------- | -| `id` | Id of the node. Also referred to as 'peerId'. | -| `addrs` | Multiaddresses currently open to accept connections from other nodes. | -| `repo` | Path of this node's data folder. | -| `spr` | Signed Peer Record, encoded information about this node and its location in the network. | -| `announceAddresses` | Multiaddresses used for annoucning this node | -| `table` | Table of nodes present in the node's DHT | -| `codex` | Codex version information | +| `id` | ID del nodo. También conocido como 'peerId'. | +| `addrs` | Multiaddresses actualmente abiertos para aceptar conexiones de otros nodos. | +| `repo` | Ruta de la carpeta de datos de este nodo. | +| `spr` | Signed Peer Record, información codificada sobre este nodo y su ubicación en la red. Este registro está firmado criptográficamente. | +| `announceAddresses` | Multiaddresses utilizados para anunciar este nodo. | +| `table` | Tabla de nodos presentes en la DHT del nodo. | +| `codex` | Información sobre la versión de Codex. | -### 3. Launch Node #2 +### 3. Inicio del Nodo #2 -We will need the signed peer record (SPR) from the first node that you got in the previous step. +Necesitaremos el Signed Peer Record (SPR) del primer nodo que obtuvo en el paso anterior. -Replace `` in the following command with the SPR returned from the previous command, note that it should include the `spr:` at the beginning. +Reemplace `` en el siguiente comando con el SPR devuelto por el comando anterior, tenga en cuenta que debe incluir el `spr:` al principio. -Open a new terminal and run: +Abra una nueva terminal y ejecute: - Mac/Linux: ```shell codex \ @@ -134,7 +133,7 @@ Open a new terminal and run: --bootstrap-node= ``` -Alternatively on Mac, Linux, or MSYS2 and a recent Codex binary you can run it in one command like: +Alternativamente en Mac, Linux, o MSYS2 y un binario Codex reciente se puede ejecutar en un solo comando como: ```shell codex \ @@ -145,15 +144,15 @@ codex \ --bootstrap-node=$(curl -H "Accept: text/plain" http://127.0.0.1:8080/api/codex/v1/spr) ``` -Notice we're using a new data-dir, and we've increased each port number by one. This is needed so that the new node won't try to open ports already in use by the first node. +Observe que estamos utilizando un nuevo data-dir, y hemos incrementado cada número de puerto en uno. Esto es necesario para que el nuevo nodo no intente abrir puertos ya en uso por el primer nodo. -We're now also including the `bootstrap-node` argument. This allows us to link the new node to another one, bootstrapping our own little peer-to-peer network. SPR strings always start with `spr:`. +Ahora también estamos incluyendo el argumento `bootstrap-node` Esto nos permite enlazar el nuevo nodo a otro, iniciando nuestra propia pequeña red peer-to-peer (P2P). Las cadenas SPR siempre comienzan con `spr:`. -### 4. Connect The Two +### 4. Conectando los Dos Nodos -Normally the two nodes will automatically connect. If they do not automatically connect or you want to manually connect nodes you can use the peerId to connect nodes. +Normalmente, los dos nodos se conectarán automáticamente. Si no se conectan automáticamente o desea conectar los nodos manualmente, puede utilizar el peerId para conectar los nodos. -You can get the first node's peer id by running the following command and finding the `"peerId"` in the results: +Puede obtener el peer id del primer nodo ejecutando el siguiente comando y encontrando el `"peerId"` en los resultados: ```shell curl -X GET \ @@ -161,27 +160,27 @@ curl -X GET \ http://127.0.0.1:8081/api/codex/v1/peerid ``` -Next replace `` in the following command with the peerId returned from the previous command: +A continuación, reemplace `` en el siguiente comando con el peerId devuelto por el comando anterior: ```shell curl -X GET \ http://127.0.0.1:8080/api/codex/v1/connect/?addrs=/ip4/127.0.0.1/tcp/8071 ``` -Alternatively on Mac, Linux, or MSYS2 and a recent Codex binary you can run it in one command like: +Alternativamente en Mac, Linux, o MSYS2 y un binario Codex reciente se puede ejecutar en un solo comando como: ```shell curl -X GET \ http://127.0.0.1:8080/api/codex/v1/connect/$(curl -X GET -H "Accept: text/plain" http://127.0.0.1:8081/api/codex/v1/peerid)\?addrs=/ip4/127.0.0.1/tcp/8071 ``` -Notice that we are sending the "`peerId`" and the multiaddress of node 2 to the `/connect` endpoint of node 1. This provides node 1 all the information it needs to communicate with node 2. The response to this request should be `Successfully connected to peer`. +Observe que estamos enviando el "`peerId`" y la multiaddress del nodo 2 al endpoint `/connect` del nodo 1. Esto proporciona al nodo 1 toda la información que necesita para comunicarse con el nodo 2. La respuesta a esta solicitud debería ser `Successfully connected to peer`. -### 5. Upload The File +### 5. Subir un Archivo -We're now ready to upload a file to the network. In this example we'll use node 1 for uploading and node 2 for downloading. But the reverse also works. +Ahora estamos listos para subir un archivo a la red. En este ejemplo, utilizaremos el nodo 1 para la carga y el nodo 2 para la descarga. Pero también funciona al revés. -Next replace `` with the path to the file you want to upload in the following command: +A continuación, reemplace `` con la ruta al archivo que desea cargar en el siguiente comando: ```shell curl -X POST \ @@ -190,14 +189,14 @@ curl -X POST \ -H "Expect: 100-continue" \ -T "" ``` -> [!TIP] -> If curl is reluctant to show you the response, add `-o ` to write the result to a file. +> [¡CONSEJO!] +> Si curl se resiste a mostrarle la respuesta, agregue `-o ` para escribir el resultado en un archivo. -Depending on the file size this may take a moment. Codex is processing the file by cutting it into blocks and generating erasure-recovery data. When the process is finished, the request will return the content-identifier (CID) of the uploaded file. It should look something like `zdj7WVxH8HHHenKtid8Vkgv5Z5eSUbCxxr8xguTUBMCBD8F2S`. +Dependiendo del tamaño del archivo, esto puede tomar un momento. Codex está procesando el archivo dividiéndolo en bloques y generando datos de recuperación de borrado. Cuando el proceso finalice, la solicitud devolverá el Content Identifier (CID) del archivo cargado. Debería verse algo como `zdj7WVxH8HHHenKtid8Vkgv5Z5eSUbCxxr8xguTUBMCBD8F2S`. -### 6. Download The File +### 6. Descarga del Archivo -Replace `` with the identifier returned in the previous step. Replace `` with the filename where you want to store the downloaded file: +Reemplace `` con el identificador devuelto en el paso anterior. Reemplace `` con el nombre del archivo donde desea almacenar el archivo descargado: ```bash curl -X GET \ @@ -205,16 +204,16 @@ curl -X GET \ -o ``` -Notice we are connecting to the second node in order to download the file. The CID we provide contains the information needed to locate the file within the network. +Observe que nos estamos conectando al segundo nodo para descargar el archivo. El CID que proporcionamos contiene la información necesaria para localizar el archivo dentro de la red. -### 7. Verify The Results +### 7. Verificar los Resultados -If your file is downloaded and identical to the file you uploaded, then this manual test has passed. Rejoice! If on the other hand that didn't happen or you were unable to complete any of these steps, please leave us a message detailing your troubles. +Si su archivo se descarga y es idéntico al archivo que cargó, entonces esta prueba manual ha pasado. ¡Regocíjese! Si, por otro lado, eso no sucedió o no pudo completar ninguno de estos pasos, déjenos un mensaje detallando sus problemas. -## Notes +## Notas -When using the Ganache blockchain, there are some deviations from the expected behavior, mainly linked to how blocks are mined, which affects certain functionalities in the Sales module. -Therefore, if you are manually testing processes such as payout collection after a request is finished or proof submissions, you need to mine some blocks manually for it to work correctly. You can do this by using the following curl command: +Cuando se utiliza la blockchain Ganache, existen algunas desviaciones del comportamiento esperado, principalmente vinculadas a la forma en que se minan los bloques, lo que afecta a ciertas funcionalidades del módulo de Ventas. +Por lo tanto, si está probando manualmente procesos como el cobro de pagos después de que se completa una solicitud o el envío de pruebas, debe minar algunos bloques manualmente para que funcione correctamente. Puede hacerlo utilizando el siguiente comando curl: ```shell curl -X POST \ diff --git a/learn/quick-start.md b/learn/quick-start.md index c5dc609..6326b7c 100644 --- a/learn/quick-start.md +++ b/learn/quick-start.md @@ -1,80 +1,80 @@ -# Quick Start +# Inicio Rápido -To run Codex through this guide we would need to perform the following steps: -- [Review the disclaimer](/codex/disclaimer) -- [Get Codex binary](#get-codex-binary) -- [Run Codex](#run-codex) -- [Interact with Codex](#interact-with-codex) +Para ejecutar Codex a través de esta guía, necesitaremos realizar los siguientes pasos: +- [Revisar el descargo de responsabilidad](/codex/disclaimer) +- [Obtener el binario de Codex](#get-codex-binary) +- [Ejecutar Codex](#run-codex) +- [Interactuar con Codex](#interact-with-codex) -## Get Codex binary +## Obtener el binario de Codex -For quick a start we will use precompiled binaries from [GitHub release page](https://github.com/codex-storage/nim-codex/releases). If you prefer to compile from the sources, please check [Build Codex](/learn/build). +Para un inicio rápido, utilizaremos binarios precompilados desde la [página de lanzamiento de GitHub](https://github.com/codex-storage/nim-codex/releases). Si prefiere compilar desde las fuentes, consulte [Compilar Codex](/learn/build). -Please follow the steps for your OS from the list: +Por favor, siga los pasos para su sistema operativo de la lista: - [Linux/macOS](#linux-macos) - [Windows](#windows) ### Linux/macOS -1. Install latest Codex release +1. Instalar la última versión de Codex ```shell curl -s https://get.codex.storage/install.sh | bash ``` -2. Install dependencies +2. Instalar dependencias ```shell # Debian-based Linux sudo apt update && sudo apt install libgomp1 ``` -3. Check the result +3. Verificar el resultado ```shell codex --version ``` ### Windows -1. Install latest Codex release +1. Instalar la última versión de Codex ```batch curl -sO https://get.codex.storage/install.cmd && install.cmd ``` - > [!WARNING] - > Windows antivirus software and built-in firewalls may cause steps to fail. We will cover some possible errors here, but always consider checking your setup if requests fail - in particular, if temporarily disabling your antivirus fixes it, then it is likely to be the culprit. + > [¡ATENCIÓN!] + > El software antivirus de Windows y los firewalls integrados pueden causar que los pasos fallen. Cubriremos algunos posibles errores aquí, pero siempre considere verificar su configuración si las solicitudes fallan; en particular, si deshabilitar temporalmente su antivirus lo soluciona, entonces es probable que sea el culpable. - If you see an error like: + Si ve un error como: ```batch curl: (35) schannel: next InitializeSecurityContext failed: CRYPT_E_NO_REVOCATION_CHECK (0x80092012) - The revocation function was unable to check revocation for the certificate. ``` - You may need to add the `--ssl-no-revoke` option to your curl calls, i.e., modify the calls above so they look like this: + Es posible que necesite añadir la opción `--ssl-no-revoke` a sus llamadas cuirl, es decir, modificar las llamadas anteriores para que se vean así: ```batch curl -LO --ssl-no-revoke https://... ``` -2. Update path using console output - - Current session only +2. Actualizar el PATH usando la salida de la consola + - Solo sesión actual ```batch :: Default installation directory set "PATH=%PATH%%LOCALAPPDATA%\Codex;" ``` - - Update PATH permanently - - Control Panel --> System --> Advanced System settings --> Environment Variables - - Alternatively, type `environment variables` into the Windows Search box + - Actualizar el PATH permanentemente + Panel de control --> Sistema --> Configuración avanzada del sistema --> Variables de entorno + - Alternativamente, escriba `environment variables` en el cuadro de búsqueda de Windows -3. Check the result +3. Verificar el resultado ```shell codex --version ``` -## Run Codex +## Ejecutar Codex -We may [run Codex in different modes](/learn/run#run), and for a quick start we will run [Codex node](/learn/run#codex-node), to be able to share files in the network. +Podemos [ejecutar Codex en diferentes modos](/learn/run#run), y para un inicio rápido ejecutaremos un [nodo de Codex](/learn/run#codex-node), para poder compartir archivos en la red. -1. Run Codex +1. Ejecutar Codex **Linux/macOS** ```shell @@ -89,32 +89,32 @@ We may [run Codex in different modes](/learn/run#run), and for a quick start we **Windows** - > [!WARNING] - > Windows might at this stage prompt you to grant internet access to Codex. You must allow it for things to work. - > It also might be required to add incoming firewall rules for Codex and we can use `netsh` utility. + > [¡ATENCIÓN!] + > Windows podría en esta etapa pedirle que otorgue acceso a Internet a Codex. Debe permitirlo para que las cosas funcionen. + > ambién podría ser necesario añadir reglas de firewall de entrada para Codex y podemos usar la utilidad `netsh` .
add firewall rules using netsh ```batch - :: Add rules + :: Añadir reglas netsh advfirewall firewall add rule name="Allow Codex (TCP-In)" protocol=TCP dir=in localport=8070 action=allow netsh advfirewall firewall add rule name="Allow Codex (UDP-In)" protocol=UDP dir=in localport=8090 action=allow - :: List rules + :: Listar reglas netsh advfirewall firewall show rule name=all | find /I "Codex" - :: Delete rules + :: Eliminar reglas netsh advfirewall firewall delete rule name="Allow Codex (TCP-In)" netsh advfirewall firewall delete rule name="Allow Codex (UDP-In)" ```
```batch - :: Get Public IP + :: Obtener IP Pública for /f "delims=" %a in ('curl -s --ssl-reqd ip.codex.storage') do set nat=%a - :: Run Codex + :: Ejecutar Codex codex ^ --data-dir=datadir ^ --disc-port=8090 ^ @@ -124,27 +124,27 @@ We may [run Codex in different modes](/learn/run#run), and for a quick start we --bootstrap-node=spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P ``` - > [!TIP] - > In the example above we use [Codex Testnet](/networks/testnet#bootstrap-nodes) bootstrap nodes and thus we join Testnet. If you would like to join a different network, please use [appropriate value](/networks/networks). + > [¡CONSEJO!] + > En el ejemplo anterior, utilizamos los nodos de arranque de [Codex Testnet](/networks/testnet#bootstrap-nodes) y, por lo tanto, nos unimos a Testnet. Si desea unirse a una red diferente , utilice el [valor apropiado](/networks/networks). -2. Configure port-forwarding for the TCP/UDP ports on your Internet router - | Protocol | Service | Port | +2. Configurar el reenvío de puertos para los puertos TCP/UDP en su enrutador de Internet + | Protocolo | Servicio | Puerto | | -------- | --------- | ------ | - | UDP | Discovery | `8090` | - | TCP | Transport | `8070` | + | UDP | Descubrimiento | `8090` | + | TCP | Transporte | `8070` | -If you would like to purchase or sell storage, please consider to run [Codex node with marketplace support](/learn/run#codex-node-with-marketplace-support) or [Codex storage node](/learn/run#codex-storage-node). +Si desea comprar o vender almacenamiento, considere ejecutar [Nodo Codex con soporte de marketplace](/learn/run#codex-node-with-marketplace-support) o [Nodo de almacenamiento Codex](/learn/run#codex-storage-node). -## Interact with Codex +## Interactuar con Codex -When your Codex node is up and running you can interact with it using [Codex App UI](https://app.codex.storage) for files sharing. +Cuando su nodo Codex esté en funcionamiento, puede interactuar con él utilizando la [UI de la aplicación de Codex](https://app.codex.storage) para compartir archivos. -Also, you can interact with Codex using [Codex API](/developers/api) and for a walk-through of the API, consider following the [Using Codex](/learn/using) guide. +Además, puede interactuar con Codex utilizando la [API de Codex](/developers/api) y, para un recorrido por la API, considere seguir la guía [Usando Codex](/learn/using). -## Stay in touch +## Mantente en Contacto -Want to stay up-date, or looking for further assistance? Try our [discord-server](https://discord.gg/codex-storage). +¿Quiere mantenerse actualizado o busca más ayuda? Pruebe nuestro [servidor de Discord](https://discord.gg/codex-storage). -Ready to explore Codex functionality? Please [Join Codex Testnet](/networks/testnet). +¿Listo para explorar la funcionalidad de Codex? Por favor [Únase a Codex Testnet](/networks/testnet). -If you want to run Codex locally without joining the Testnet, consider trying the [Codex Two-Client Test](/learn/local-two-client-test) or the [Running a Local Codex Network with Marketplace Support](/learn/local-marketplace). +Si desea ejecutar Codex localmente sin unirse a Testnet, considere probar la [Prueba de dos clientes Codex ](/learn/local-two-client-test) o la [Ejecución de una red Codex local con soporte de Marketplace](/learn/local-marketplace). diff --git a/learn/run.md b/learn/run.md index a2b8433..adcc43c 100644 --- a/learn/run.md +++ b/learn/run.md @@ -1,35 +1,35 @@ --- 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: - - [Using binary](#using-binary) - - [Run as a daemon in 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) - - [Using Docker](#using-docker) - - [Using Docker Compose](#using-docker-compose) - - [On Kubernetes](#on-kubernetes) +Es una aplicación de línea de comandos que se puede ejecutar de diferentes maneras: + - [Usando un binario](#using-binary) + - [Ejecutar con Daemon en Linux](#run-as-a-daemon-in-linux) (not supported yet) + - [Ejecutar como un servicio en Windows](#run-as-a-service-in-windows) (not supported yet) + - [Usando Docker](#using-docker) + - [Usando Docker Compose](#using-docker-compose) + - [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: - 1. [CLI options](#cli-options) - 2. [Environment variables](#environment-variables) - 3. [Configuration file](#configuration-file) +Es posible configurar un nodo Codex de varias maneras: + 1. [Opciones de la CLI](#cli-options) + 2. [Opciones de la CLI](#environment-variables) + 3. [Opciones de la CLI](#configuration-file) -The order of priority is the same as above: -[CLI options](#cli-options) --> [Environment variables](#environment-variables) --> [Configuration file](#configuration-file). +El orden de prioridad es el mismo que el anterior: +[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 --cache-size=1m/1M/1mb/1MB --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 ``` -#### Logging +#### Registro (Logging) -Codex uses [Chronicles](https://github.com/status-im/nim-chronicles) logging library, which allows great flexibility in working with logs. -Chronicles has the concept of topics, which categorize log entries into semantic groups. +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. -Using the `log-level` parameter, you can set the top-level log level like `--log-level="trace"`, but more importantly, -you can set log levels for specific topics like `--log-level="info; trace: marketplace,node; error: blockexchange"`, -which sets the top-level log level to `info` and then for topics `marketplace` and `node` sets the level to `trace` and so on. +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"`, +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. -### CLI options +### Opciones de la CLI ```shell 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]. - --log-level Sets the log level [=info]. - --metrics Enable the metrics server [=false]. - --metrics-address Listening address of the metrics server [=127.0.0.1]. - --metrics-port Listening HTTP port of the metrics server [=8008]. - -d, --data-dir The directory where codex will store configuration and data + --config-file Carga la configuración desde un archivo TOML [=none]. + --log-level Establece el nivel de registro [=info]. + --metrics Habilita el servidor de métricas [=false]. + --metrics-address Dirección de escucha del servidor de métricas [=127.0.0.1]. + --metrics-port Puerto HTTP de escucha del servidor de métricas [=8008]. + -d, --data-dir El directorio donde Codex almacenará la configuración y los datos [=/root/.cache/codex]. - -i, --listen-addrs Multi Addresses to listen on [=/ip4/0.0.0.0/tcp/0]. - -a, --nat IP Addresses to announce behind a NAT [=127.0.0.1]. - -e, --disc-ip Discovery listen address [=0.0.0.0]. - -u, --disc-port Discovery (UDP) port [=8090]. - --net-privkey Source of network (secp256k1) private key file path or name [=key]. - -b, --bootstrap-node Specifies one or more bootstrap nodes to use when connecting to the network. - --max-peers The maximum number of peers to connect to [=160]. - --agent-string Node agent string which is used as identifier in network [=Codex]. - --api-bindaddr The REST API bind address [=127.0.0.1]. - -p, --api-port The REST Api port [=8080]. - --api-cors-origin The REST Api CORS allowed origin for downloading data. '*' will allow all - origins, '' will allow none. [=Disallow all cross origin requests to download - data]. - --repo-kind Backend for main repo store (fs, sqlite, leveldb) [=fs]. - -q, --storage-quota The size of the total storage quota dedicated to the node [=$DefaultQuotaBytes]. - -t, --block-ttl Default block timeout in seconds - 0 disables the ttl [=$DefaultBlockTtl]. - --block-mi Time interval in seconds - determines frequency of block maintenance cycle: how - often blocks are checked for expiration and cleanup + -i, --listen-addrs Multi Addresses para escuchar [=/ip4/0.0.0.0/tcp/0]. + -a, --nat Direcciones IP para anunciar detrás de un NAT [=127.0.0.1]. + -e, --disc-ip Dirección de escucha de descubrimiento [=0.0.0.0]. + -u, --disc-port Puerto de descubrimiento (UDP) [=8090]. + --net-privkey Fuente de la ruta o nombre del archivo de la clave privada (secp256k1) de la red [=key]. + -b, --bootstrap-node Especifica uno o más nodos de arranque para usar al conectarse a la red. + --max-peers El número máximo de pares a los que conectarse [=160]. + --agent-string Cadena de agente del nodo que se utiliza como identificador en la red [=Codex]. + --api-bindaddr La dirección de enlace de la API REST [=127.0.0.1]. + -p, --api-port El puerto de la API REST [=8080]. + --api-cors-origin El origen permitido de CORS de la API REST para descargar datos. '*' permitirá todos + los orígenes, '' no permitirá ninguno. [=No permitir ninguna solicitud de origen cruzado para descargar + datos]. + --repo-kind Backend para el almacén del repositorio principal (fs, sqlite, leveldb) [=fs]. + -q, --storage-quota El tamaño de la cuota total de almacenamiento dedicada al nodo [=$DefaultQuotaBytes]. + -t, --block-ttl Tiempo de espera predeterminado del bloque en segundos - 0 deshabilita el ttl [=$DefaultBlockTtl]. + --block-mi Intervalo de tiempo en segundos - determina la frecuencia del ciclo de mantenimiento del bloque: con qué + frecuencia se comprueban los bloques para la expiración y la limpieza [=$DefaultBlockMaintenanceInterval]. - --block-mn Number of blocks to check every maintenance cycle [=1000]. - -c, --cache-size The size of the block cache, 0 disables the cache - might help on slow hardrives + --block-mn Número de bloques a comprobar en cada ciclo de mantenimiento [=1000]. + -c, --cache-size El tamaño de la caché de bloques, 0 deshabilita la caché - podría ayudar en discos duros lentos [=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-account The Ethereum account that is used for storage contracts. - --eth-private-key File containing Ethereum private key for storage contracts. - --marketplace-address Address of deployed Marketplace contract. - --validator Enables validator, requires an Ethereum node [=false]. - --validator-max-slots Maximum number of slots that the validator monitors [=1000]. - --reward-recipient Address to send payouts to (eg rewards and refunds). + --eth-provider La URL de la API JSON-RPC del nodo Ethereum [=ws://localhost:8545]. + --eth-account La cuenta de Ethereum que se utiliza para los contratos de almacenamiento. + --eth-private-key Archivo que contiene la clave privada de Ethereum para los contratos de almacenamiento. + --marketplace-address Dirección del contrato Marketplace desplegado. + --validator Habilita el validador, requiere un nodo Ethereum [=false]. + --validator-max-slots Número máximo de slots que el validador monitoriza [=1000]. + --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]. - --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]. - --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]. - --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]. - --circom-no-zkey Ignore the zkey file - use only for testing! [=false]. - --proof-samples Number of samples to prove [=5]. - --max-slot-depth The maximum depth of the slot tree [=32]. - --max-dataset-depth The maximum depth of the dataset tree [=8]. - --max-block-depth The maximum depth of the network block merkle tree [=5]. - --max-cell-elements The maximum number of elements in a cell [=67]. + --circom-no-zkey Ignora el archivo zkey - ¡úsalo sólo para pruebas! [=false]. + --proof-samples Número de muestras para probar [=5]. + --max-slot-depth La profundidad máxima del árbol de slots [=32]. + --max-dataset-depth La profundidad máxima del árbol de conjunto de datos [=8]. + --max-block-depth La profundidad máxima del árbol Merkle del bloque de red [=5]. + --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) -and then transform it in the following way: +Para establecer una opción de configuración utilizando variables de entorno, primero encuentre la [opción de la CLI](#cli-options) +deseada y luego transfórmela de la siguiente manera: - 1. prepend it with `CODEX_` - 2. make it uppercase - 3. replace `-` with `_` + 1. Añada como prefijo `CODEX_` + 2. Póngala en mayúsculas + 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] -> Some options can't be configured via environment variables for now [^multivalue-env-var] [^sub-commands]. +> [¡ATENCIÓN!] +> 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 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 listen-addrs = [ "/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 codex --config-file=/path/to/your/config.toml ``` -## Run +## Ejecución Basically, we can run Codex in three different modes: - - [Codex node](#codex-node) - useful for local testing/development and basic/files sharing. - - [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. - - [Codex storage node](#codex-storage-node) - should be used by storage providers or if you would like to sell your local storage. + - [Nodo Codex](#codex-node) - útil para pruebas/desarrollo locales e intercambio básico de archivos. + - [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. + - [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 codex ``` -> [!WARNING] -> This command may not work properly when we use GitHub releases [^data-dir]. +> [¡ATENCIÓN!] +> 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 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 codex \ --data-dir=datadir \ @@ -192,10 +192,10 @@ codex \ --bootstrap-node=spr:CiUIAhIhAyUvcPkKoGE7-gh84RmKIPHJPdsX5Ugm_IHVJgF-Mmu_EgIDARo8CicAJQgCEiEDJS9w-QqgYTv6CHzhGYog8ck92xflSCb8gdUmAX4ya78QoemesAYaCwoJBES39Q2RAnVOKkYwRAIgLi3rouyaZFS_Uilx8k99ySdQCP1tsmLR21tDb9p8LcgCIG30o5YnEooQ1n6tgm9fCT7s53k6XlxyeSkD_uIO9mb3 ``` -> [!IMPORTANT] -> Make sure you are using a proper value for the [network](/networks/networks) you would like to join. +> [¡IMPORTANTE!] +> 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 codex \ --data-dir=datadir \ @@ -203,10 +203,10 @@ codex \ --nat= ``` -> [!TIP] -> We can set public IP using curl and IP lookup service, like [ip.codex.storage](https://ip.codex.storage). +> [¡CONSEJO!] +> 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 codex \ --data-dir=datadir \ @@ -216,24 +216,24 @@ codex \ --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 curl -s localhost:8080/api/codex/v1/debug/info | jq -r '.announceAddresses' ``` ```json [ - "/ip4//tcp/8070" + "/ip4//tcp/8070" ] ``` -Basically, for P2P communication we should specify and configure two ports: -| # | Protocol | Function | CLI option | Example | +Básicamente, para la comunicación P2P, deberíamos especificar y configurar dos puertos: +| # | Protocolo | Función | CLI option | Ejemplo | | - | -------- | ------------------------------------------------------------------------ | ---------------- | -------------------------------------- | | 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` | -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 codex \ --data-dir=datadir \ @@ -244,24 +244,24 @@ codex \ --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] -> Please ignore `--eth-account` CLI option, as it is obsolete [^eth-account]. +> [¡NOTA!] +> 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: - > [!CAUTION] - > Please use key generation service for demo purpose only. +2. Cree un archivo con la clave privada de Ethereum y establezca los permisos adecuados: + > [¡PRECAUCIÓN!] + > Utilice el servicio de generación de claves solo con fines de demostración. ```shell 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 chmod 600 eth.key ``` - Show your ethereum address: + Muestre su dirección Ethereum: ```shell cat eth.address ``` @@ -277,11 +277,11 @@ And to be able to purchase a storage, we should run [Codex node with marketplace 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 codex \ --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 ``` -> [!NOTE] -> 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. +> [¡NOTA!] +> 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
example - > [!CAUTION] - > Please use key generation service for demo purpose only. + > [¡PRECAUCIÓN!] + > Utilice el servicio de generación de claves solo con fines de demostración. ```shell 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 chmod 600 eth.key ``` - Show your ethereum address: + Muestre su dirección Ethereum: ```shell cat eth.address ``` @@ -337,20 +337,20 @@ To download circuit files and make them available to Codex app, we have a stand- ```
-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 - # Create circuit files folder + # Crear carpeta de archivos de circuito mkdir -p datadir/circuits chmod 700 datadir/circuits - # Download circuit files + # Descargar archivos de circuito cirdl \ datadir/circuits \ https://rpc.testnet.codex.storage \ 0xAB03b6a58C5262f530D54146DA2a552B1C0F7648 ``` -2. Start Codex storage node +2. Iniciar el nodo de almacenamiento Codex ```shell codex \ --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 ``` -> [!NOTE] -> 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. +> [¡NOTA!] +> 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 codex \ --data-dir=datadir \ @@ -384,7 +384,7 @@ codex \ --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 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 ``` -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)): -- It uses node IP (`--nat`), discovery port (`--disc-port`) and private key (`--net-privkey`) for record creation -- Specified data is signed on each run and will be changed but still contain specified node data when decoded -- You can decode it by passing to the Codex node at run and with `--log-level=trace` +Debemos tener en cuenta algunas cosas importantes sobre el registro SPR (ver [ENR](https://eips.ethereum.org/EIPS/eip-778)): +- Utiliza la IP del nodo (`--nat`), el puerto de descubrimiento (`--disc-port`) y la clave privada (`--net-privkey`) para la creación del registro. +- 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. +- 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](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. -- `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_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. -- `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. -- When we set `prover` sub-command, entrypoint will run `cirdl` tool to download ceremony files, required by [Codex storage node](#codex-storage-node). +- `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` - 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` - 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` - 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. +- 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: - - One on the Docker side - - Second on your Internet router +Cuando ejecutamos Codex usando Docker con la [red de puente predeterminada](https://docs.docker.com/engine/network/drivers/bridge/), predeterminada, creará un NAT doble: + - Uno en el lado de Docker + - 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: -- Use [host network](https://docs.docker.com/engine/network/drivers/host/) for Docker, which is supported only in Linux -- Run [Using binary](#using-binary) -- Use VM/VPS in the Cloud to run Docker with bridge or host network +En ese caso, debemos considerar las siguientes soluciones: +- Utilice la [red de host](https://docs.docker.com/engine/network/drivers/host/) para Docker, que solo es compatible con Linux +- Ejecutar [usando binario](#using-binary) +- 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
example - > [!CAUTION] - > Please use key generation service for demo purpose only. + > [¡PRECAUCIÓN!] + > Utilice el servicio de generación de claves solo con fines de demostración. ```shell 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 chmod 600 eth.key ``` - Show your ethereum address: + Muestre su dirección Ethereum: ```shell cat eth.address ``` @@ -464,7 +464,7 @@ And we basically can use same options we [used for binary](#using-binary) and ad ```
-2. Run Codex: +2. Ejecutar Codex: ```shell docker run \ --rm \ @@ -491,21 +491,21 @@ docker run \ --circuit-dir=/datadir/circuits ``` -> [!NOTE] -> 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. +> [¡NOTA!] +> 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
example - > [!CAUTION] - > Please use key generation service for demo purpose only. + > [¡PRECAUCIÓN!] + > Utilice el servicio de generación de claves solo con fines de demostración. ```shell 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 chmod 600 eth.key ``` - Show your ethereum address: + Muestre su dirección Ethereum: ```shell cat eth.address ``` @@ -522,7 +522,7 @@ For Docker Compose, it is more suitable to use [environment variables](#environm ```
-2. Create `docker-compose.yaml` file: +2. Crear archivo `docker-compose.yaml`: ```yaml services: codex: @@ -565,22 +565,22 @@ For Docker Compose, it is more suitable to use [environment variables](#environm max-file: 5 ``` -3. Run Codex: +3. Ejecutar Codex: ```shell docker compose up ``` -> [!NOTE] -> 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. +> [¡NOTA!] +> 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. ## 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. -[^sub-commands]: Sub-commands `persistence` and `persistence prover` can't be set via environment variables. -[^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) -[^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. -[^eth-account]: Please ignore `--eth-account` CLI option - [Drop support for --eth-account #727](https://github.com/codex-storage/nim-codex/issues/727). +[^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]: Los subcomandos `persistence` y `persistence prover` no se pueden establecer a través de variables de entorno. +[^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) aún no está implementado, y necesitaremos configurar el reenvío de puertos para los protocolos de descubrimiento y transporte. +[^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). diff --git a/learn/tokenomics-litepaper.md b/learn/tokenomics-litepaper.md index 1c6973a..80142cc 100644 --- a/learn/tokenomics-litepaper.md +++ b/learn/tokenomics-litepaper.md @@ -1,276 +1,277 @@ --- outline: [1, 3] --- -# Codex Tokenomics Litepaper - Testnet Version +# Codex Tokenomics Litepaper - Versión Testnet -**Codex: A Decentralized Storage Protocol for Durable Information** +**Codex: Un Protocolo de Almacenamiento Descentralizado para Información Duradera** -# Legal Notices +# Avisos Legales -*The information contained in this document is intended to be made available for informational purposes only and does not constitute a prospectus, nor an offer to buy, a solicitation or an invitation to buy, or a recommendation for any token or any security. Neither this document nor any of its content should be considered as creating any expectations or forming the basis of any contract, commitment or binding obligation. No information herein should be considered to contain or be relied upon as a promise, representation, warranty or guarantee, whether express or implied and whether as to the past, present or the future in relation to the projects and matters described herein. The information presented is a summary and does not purport to be accurate, reliable or complete. This document is under continuous legal review and may be amended or supplemented at any time without prior notice.  No responsibility will be borne for the accuracy, reliability or completeness of information contained herein. Because of the high degree of risk and uncertainty described above, undue reliance should not be placed by anyone on any matters described in this document. Any tokens referenced in this document have not been registered under any securities laws and may not be offered or sold in any jurisdiction where such offer or sale would be prohibited.* +*La información contenida en este documento tiene como objetivo ser puesta a disposición únicamente con fines informativos y no constituye un prospecto, ni una oferta de compra, una solicitud o una invitación a comprar, ni una recomendación para ningún token o valor. Ni este documento ni ninguno de sus contenidos deben considerarse como la creación de expectativas o la base de ningún contrato, compromiso u obligación vinculante. Ninguna información aquí contenida debe considerarse como conteniendo o debiendo ser invocada como una promesa, representación, garantía, ya sea expresa o implícita, y ya sea en relación con el pasado, el presente o el futuro en relación con los proyectos y asuntos aquí descritos. La información presentada es un resumen y no pretende ser precisa, fiable o completa. Este documento está bajo revisión legal continua y puede ser modificado o complementado en cualquier momento sin previo aviso. No se asumirá ninguna responsabilidad por la precisión, fiabilidad o integridad de la información contenida en este documento. Debido al alto grado de riesgo e incertidumbre descrito anteriormente, nadie debe depositar una confianza indebida en ningún asunto descrito en este documento. Cualquier token al que se haga referencia en este documento no ha sido registrado bajo ninguna ley de valores y no puede ser ofrecido o vendido en ninguna jurisdicción donde dicha oferta o venta esté prohibida.* -*This document may contain forward-looking statements that are based only on current expectations, estimates, forecasts, assumptions and projections about the technology, industry and markets in general. The forward looking statements, projects, content and any other matters described in this document are subject to a high degree of risk and uncertainty. The roadmap, results, project descriptions, technical details, functionalities, and other features are subject to change based on, among other things, market conditions, technical developments, and regulatory environment. The actual development and results, including the order and the timeline, might differ materially from those anticipated in these forward-looking statements.* +*Este documento puede contener declaraciones prospectivas que se basan únicamente en expectativas, estimaciones, previsiones, suposiciones y proyecciones actuales sobre la tecnología, la industria y los mercados en general. Las declaraciones prospectivas, los proyectos, el contenido y cualquier otro asunto descrito en este documento están sujetos a un alto grado de riesgo e incertidumbre. La hoja de ruta, los resultados, las descripciones de los proyectos, los detalles técnicos, las funcionalidades y otras características están sujetos a cambios basados, entre otras cosas, en las condiciones del mercado, los desarrollos técnicos y el entorno regulatorio. El desarrollo y los resultados reales, incluyendo el orden y el calendario, podrían diferir materialmente de los previstos en estas declaraciones prospectivas.* -*The information contained in this document does not constitute financial, legal, tax, investment, professional or other advice and should not be treated as such.* +*La información contenida en este documento no constituye asesoramiento financiero, legal, fiscal, de inversión, profesional o de otro tipo y no debe ser tratada como tal.* -# Overview +# Descripción General -## Scope +## Alcance -This document describes the Codex Tokenomics with elements that reflect the Testnet deployment of the Codex Protocol. +Este documento describe los Tokenomics de Codex con elementos que reflejan el despliegue de Testnet del Protocolo Codex. -## What Codex Does +## Qué Hace Codex -Codex is a state-of-the-art decentralized storage platform that offers a novel solution that enhances data durability guarantees for storing vast amounts of data while eliminating any reliance on centralized institutions that could lead to a single point of failure. +Codex es una plataforma de almacenamiento descentralizada de última generación que ofrece una solución novedosa que mejora las garantías de durabilidad de los datos para almacenar grandes cantidades de datos, eliminando al mismo tiempo cualquier dependencia de instituciones centralizadas que puedan conducir a un único punto de fallo. -While centralized storage systems such as Google Cloud tout eleven nines of durability, durable file storage in distributed systems that provide censorship resistance and privacy are a vital prerequisite to use cases such as preserving factual records of history in network states. +Mientras que los sistemas de almacenamiento centralizados como Google Cloud pregonan once nueves de durabilidad, el almacenamiento duradero de archivos en sistemas distribuidos que proporcionan resistencia a la censura y privacidad es un requisito previo vital para casos de uso como la preservación de registros factuales de la historia en los estados de la red. -While no system can guarantee absolute protection against data loss, through its technical architecture, economic incentives, and algorithmic encoding, Codex is designed to provide highly decentralized data storage with high durability, resiliency to cloud failures, and resistance to censorship. +Aunque ningún sistema puede garantizar una protección absoluta contra la pérdida de datos, a través de su arquitectura técnica, incentivos económicos y codificación algorítmica, Codex está diseñado para proporcionar un almacenamiento de datos altamente descentralizado con alta durabilidad, resistencia a los fallos de la nube y resistencia a la censura. -## How Codex Works +## Cómo Funciona Codex -Codex operates as a network of storage nodes, referred to herein as **Storage Providers** (SP), that store user data for the duration of a contract entered into by SPs and storage users, referred to herein simply as **Clients**. +Codex opera como una red de nodos de almacenamiento, denominados aquí **Proveedores de Almacenamiento** (SP), que almacenan los datos del usuario durante la duración de un contrato celebrado por los SP y los usuarios de almacenamiento, denominados aquí simplemente **Clientes**. -Storage contracts are initiated by a **Client** requesting to store a specified amount of data, for a specified amount of time, and at a specific price per the full contract. **Storage Providers** commit to slots to store redundant fragments of this data. +Los contratos de almacenamiento son iniciados por un **Cliente** que solicita almacenar una cantidad específica de datos, durante una cantidad específica de tiempo, y a un precio específico por la totalidad del contrato. Los **Proveedores de Almacenamiento** se comprometen a espacios para almacenar fragmentos redundantes de estos datos. -The fact that **SPs** must post collateral (stake) in order to fill a slot helps protect against Sybil attacks, promoting diversity in storage nodes fulfilling each contract. Additionally, this collateral acts as an economic incentive to ensure that **SPs** fulfill their obligations to periodically prove that they are still in possession of the data in question. +El hecho de que los **SPs** deban depositar colateral (stake) para ocupar un espacio ayuda a proteger contra los ataques Sybil, promoviendo la diversidad en los nodos de almacenamiento que cumplen cada contrato. Además, este colateral actúa como un incentivo económico para garantizar que los **SPs** cumplan con sus obligaciones de probar periódicamente que todavía están en posesión de los datos en cuestión. -This is achieved by periodic challenges to **SPs** to provide cryptographic proofs that demonstrate the data they have contracted to store can be retrieved. Codex incorporates Zero Knowledge (ZK) and Data Availability Sampling (DAS) to achieve low-cost, highly efficient, and reliable data loss detection. +Esto se logra mediante desafíos periódicos a los **SPs** para proporcionar pruebas criptográficas que demuestren que los datos que han contratado para almacenar pueden ser recuperados. Codex incorpora Zero Knowledge (ZK) y Data Availability Sampling (DAS) para lograr una detección de pérdida de datos de bajo costo, altamente eficiente y fiable. -**SPs** are required to respond to these challenges, sending their proofs to **Validators,** who verify the validity of the proofs and posts to the blockchain only the absence of a proof. This reduces costs of validating proofs, while not affecting the **Protocol**’s security. +Los **SPs** están obligados a responder a estos desafíos, enviando sus pruebas a los **Validadores,** quienes verifican la validez de las pruebas y publican en la blockchain sólo la ausencia de una prueba. Esto reduce los costos de validación de las pruebas, sin afectar la seguridad del **Protocolo**. -Should SPs fail to prove a fixed number of times they still have the data in question, or send an invalid proof, their collateral is partially slashed. The slash penalty is a fixed percentage of the total collateral. This slashing continues until a certain number of slashings is reached, at which point the entire collateral is slashed. At this moment, the SP slot is considered “abandoned”. The slashed collateral is used as an incentive for a new **SP** to take over the failed slot through the “slot recovery mechanism” (discussed further later). This ensures the collateral provides an economic incentive to ensure the durability of the data. +Si los SPs no prueban un número fijo de veces que todavía tienen los datos en cuestión, o envían una prueba no válida, su colateral se reduce parcialmente. La penalización por slash es un porcentaje fijo del colateral total. Este slashing continúa hasta que se alcanza un cierto número de slashings, momento en el cual todo el colateral se reduce. En este momento, el espacio del SP se considera "abandonado". El colateral reducido se utiliza como incentivo para que un nuevo **SP** se haga cargo del espacio fallido a través del "mecanismo de recuperación de espacios" (discutido más adelante). Esto asegura que el colateral proporcione un incentivo económico para asegurar la durabilidad de los datos. -Codex is thus designed such that rational behavior for **SPs** consists of storing the data in the most space-efficient manner to minimize excess storage costs, while balancing the need for enough redundancy to recover from the possibility of data loss/corruption by the penalty of forfeiture of their collateral (slashing). +Codex está por lo tanto diseñado de tal manera que el comportamiento racional para los **SPs** consiste en almacenar los datos de la manera más eficiente en cuanto a espacio para minimizar los costos excesivos de almacenamiento, al tiempo que se equilibra la necesidad de suficiente redundancia para recuperarse de la posibilidad de pérdida/corrupción de datos por la penalización de la pérdida de su colateral (slashing). -While Codex’s tech maximizes recoverability and durability in the event of partial data loss, Codex’s economic incentives coordinate rational actors to provide a stable and predictable environment for data storage users. At the heart of these economic incentives is the Codex utility token (CDX), which serves as the collateral to protect file durability and facilitate slot repair, and the means of payment to coordinate successful storage contracts. +Mientras que la tecnología de Codex maximiza la recuperabilidad y la durabilidad en el caso de una pérdida parcial de datos, los incentivos económicos de Codex coordinan a los actores racionales para proporcionar un entorno estable y predecible para los usuarios de almacenamiento de datos. En el corazón de estos incentivos económicos está el token de utilidad Codex (CDX), que sirve como colateral para proteger la durabilidad de los archivos y facilitar la reparación de los espacios, y el medio de pago para coordinar los contratos de almacenamiento exitosos. -# Contract Lifecycle +# Ciclo de Vida del Contrato -The marketplace coordinates matching **Clients** who want to pay for storing files with **Storage Providers** who are offering storage space and posting collateral in order to earn payments for the contract. +El mercado coordina el emparejamiento de **Clientes** que quieren pagar por almacenar archivos con **Proveedores de Almacenamiento** que ofrecen espacio de almacenamiento y depositan colateral con el fin de obtener pagos por el contrato. -## Contract Request Initiation +## Inicio de la Solicitud de Contrato -As a design principle, **Clients** should post the deal terms they are looking for, and Storage Providers prioritize which deals meet their criteria and pose the best deals to take. +Como principio de diseño, los **Clientes** deben publicar los términos del acuerdo que están buscando, y los Proveedores de Almacenamiento priorizan qué acuerdos cumplen con sus criterios y presentan las mejores ofertas para tomar. -When the contract request is created, the **Client** deposits the full price of the length of the contract at that time. This deposit acts as a spam prevention mechanism and ensures that **SP** time and resources are not wasted filling slots for deals that a **Client** does not complete payment for. +Cuando se crea la solicitud de contrato, el **Cliente** deposita el precio total de la duración del contrato en ese momento. Este depósito actúa como un mecanismo de prevención de spam y asegura que el tiempo y los recursos de **SP** no se desperdicien llenando espacios para acuerdos por los cuales un **Cliente** no completa el pago. -## Storage Providers Fill Requests +## Los Proveedores de Almacenamiento Llenan las Solicitudes -Ahead of matching with storage contracts, **Storage Providers** specify their aggregate availabilities for new contracts. +Antes de emparejarse con contratos de almacenamiento, los **Proveedores de Almacenamiento** especifican sus disponibilidades agregadas para nuevos contratos. -Based on each **SPs’** availabilities, a queue is created for each **SP**, ranking the open **Client** request for contract deals with the most favorable deals at the top. Over time, this queue resolves by pairing **SPs** with contracts that are compatible with their availabilities, starting with the highest ranked deals first. +En base a las disponibilidades de cada **SP**, se crea una cola para cada **SP**, clasificando la solicitud de **Cliente** abierta para acuerdos de contrato con los acuerdos más favorables en la parte superior. Con el tiempo, esta cola se resuelve emparejando **SPs** con contratos que son compatibles con sus disponibilidades, comenzando con los acuerdos mejor clasificados primero. -At launch, **SPs** will not be able to customize the queue creation algorithm, which means **SPs** with the same availabilities will have identical queues (other than differences due to a randomness function that increases **SP** diversity per each contract). In the future, **SPs** are expected to be able to customize their queue ranking algorithm. +En el lanzamiento, los **SPs** no podrán personalizar el algoritmo de creación de colas, lo que significa que los **SPs** con las mismas disponibilidades tendrán colas idénticas (aparte de las diferencias debidas a una función de aleatoriedad que aumenta la diversidad de **SP** por cada contrato). En el futuro, se espera que los **SPs** puedan personalizar su algoritmo de clasificación de colas. -If a **SP** matches with a storage contract and they're eligible to reserve a slot in the contract, they reserve an open slot, download the slot data from the **Client** or existing **SPs** whose data can be used to reconstruct the slot’s contents, create an initial storage proof, and submit this proof, along with collateral, to the **Protocol**. +Si un **SP** coincide con un contrato de almacenamiento y es elegible para reservar un espacio en el contrato, reserva un espacio abierto, descarga los datos del espacio del **Cliente** o de los **SPs** existentes cuyos datos pueden utilizarse para reconstruir el contenido del espacio, crea una prueba de almacenamiento inicial y envía esta prueba, junto con el colateral, al **Protocolo**. -Note that a slot is not considered confirmed as filled until after an **SP** both posts associated collateral and produces a proof for the slot. +Tenga en cuenta que un espacio no se considera confirmado como llenado hasta después de que un **SP** publique tanto el colateral asociado como produzca una prueba para el espacio. -## Contract Expires Before Beginning +## El Contrato Caduca Antes de Comenzar -If there are still empty slots when the timeout/expiry for the contract request expires, the deal is terminated. +Si todavía hay espacios vacíos cuando el tiempo de espera/vencimiento de la solicitud de contrato expira, el acuerdo se termina. -The **Storage Providers** who did fill slots, if any, are compensated for the amount of time which they did store the slot data, at the contract requests specified price per TB per Month. The remainder of the **Client**’s deposit is returned. +Los **Proveedores de Almacenamiento** que sí llenaron espacios, si los hay, son compensados por la cantidad de tiempo durante el cual almacenaron los datos del espacio, al precio especificado en las solicitudes de contrato por TB por Mes. El resto del depósito del **Cliente** es devuelto. -As there is a high probability of having at least a few slots occupied, there should be no need for further penalties on the **Client** to prevent spam requests and incentivise **Clients** to submit attractive deals. +Como hay una alta probabilidad de tener al menos algunos espacios ocupados, no debería haber necesidad de más sanciones para el **Cliente** para prevenir solicitudes de spam e incentivar a los **Clientes** a presentar acuerdos atractivos. -## Contract Begins +## El Contrato Comienza -The contract begins if *all* slots are occupied, that is, **SPs** have downloaded the data, posted collateral, and posted proofs before the timeout/expiry for the contract request is reached. +El contrato comienza si *todos* los espacios están ocupados, es decir, los **SPs** han descargado los datos, publicado el colateral y publicado las pruebas antes de que se alcance el tiempo de espera/vencimiento de la solicitud de contrato. -At this moment, a *protocol fee* is applied on the user’s deposit. The proceedings are burned. +En este momento, se aplica una *tasa de protocolo* sobre el depósito del usuario. El producto se quema. -The remaining of the client’s deposit is held by the protocol and will be used to pay **SPs** at the end of the contract. +El resto del depósito del cliente es retenido por el protocolo y se utilizará para pagar a los **SPs** al final del contrato. -## Contract is Running +## El Contrato Está en Curso -**Storage Providers** must submit proofs to **Validators** according to the storage request’s proof frequency, a parameter set by the Client in the request. +Los **Proveedores de Almacenamiento** deben enviar pruebas a los **Validadores** de acuerdo con la frecuencia de prueba de la solicitud de almacenamiento, un parámetro establecido por el Cliente en la solicitud. -### Missing Proofs +### Falta de Pruebas -If an **SP** fails to submit proofs within the rolling last periods, they are partially slashed. The penalty is a fixed percentage of the collateral. Upon provision of a proof after being partially slashed, the SP should top up the missing collateral. +Si un **SP** no envía pruebas dentro de los últimos períodos de tiempo, se le reduce parcialmente. La penalización es un porcentaje fijo del colateral. Tras la presentación de una prueba después de haber sido parcialmente reducido, el SP debe reponer el colateral faltante. -Should the SP be slashed enough times, their entire collateral will be slashed and confiscated, and the SP is considered to have abandoned its slot. The provision of a correct proof at this moment will not revert the start of the slot recovery mechanism. +Si el SP es reducido suficientes veces, todo su colateral será reducido y confiscado, y se considera que el SP ha abandonado su espacio. La provisión de una prueba correcta en este momento no revertirá el inicio del mecanismo de recuperación del espacio. -## A Slot in the Contract is Abandoned +## Un Espacio en el Contrato es Abandonado -When an **SP** fails to submit enough proofs such that they are slashed enough times, their slot is considered abandoned. In order to incentivize a new **SP** to come in and takeover the abandoned slot (slot recovery), 50% of the collateral confiscated from the **SP** which has abandoned the slot is used as an incentive to the new **SP**. The remaining confiscated collateral is burned. +Cuando un **SP** no envía suficientes pruebas de tal manera que se le reduce suficientes veces, su espacio se considera abandonado. Con el fin de incentivar a un nuevo **SP** a entrar y hacerse cargo del espacio abandonado (recuperación del espacio), el 50% del colateral confiscado del **SP** que ha abandonado el espacio se utiliza como un incentivo para el nuevo **SP**. El colateral confiscado restante se quema. -This helps align the economic incentive for **SPs** to take over abandoned slots before filling new deals, since they can effectively earn forfeited collateral for taking over and fulfilling abandoned slots. +Esto ayuda a alinear el incentivo económico para que los **SPs** se hagan cargo de los espacios abandonados antes de llenar nuevos acuerdos, ya que pueden ganar colateral perdido por hacerse cargo y cumplir los espacios abandonados. -## Contract Defaults +## El Contrato Incumple -If, at any time during the life of the storage contract, the number of slots currently in an abandoned state (not yet recovered), meets or exceeds the maximum number of storage slots that can be lost before the data is unrecoverable, then the entire storage deal is considered to be in a *failed* state. +Si, en cualquier momento durante la vida del contrato de almacenamiento, el número de espacios actualmente en un estado abandonado (aún no recuperado), alcanza o excede el número máximo de espacios de almacenamiento que se pueden perder antes de que los datos sean irrecuperables, entonces todo el acuerdo de almacenamiento se considera que está en un estado *fallido*. -Each **Storage Providers** posted collateral is burned. This incentivizes **SPs** not to let storage deals to be at risk of defaulting. **SPs** are incentivized to *proactively* avoid this by diversifying their infrastructure and the storage contracts they enter, and *reactively* by backing up their own slot data, or even backing up data from other slots so they can better assist slot recovery, as the deal approaches a failed state. +El colateral publicado por cada **Proveedor de Almacenamiento** se quema. Esto incentiva a los **SPs** a no dejar que los acuerdos de almacenamiento corran el riesgo de incumplimiento. Los **SPs** están incentivados a *evitar proactivamente* esto diversificando su infraestructura y los contratos de almacenamiento en los que entran, y *reactivamente* haciendo copias de seguridad de los datos de sus propios espacios, o incluso haciendo copias de seguridad de los datos de otros espacios para que puedan ayudar mejor a la recuperación del espacio, a medida que el acuerdo se acerca a un estado fallido. -Clients also receive back any leftover from their original payment. +Los Clientes también reciben de vuelta cualquier sobrante de su pago original. -## Contract Ends Its Full Duration +## El Contrato Termina Su Duración Completa -When a started contract reaches its pre-specified duration without having previously defaulted, the contract completes. +Cuando un contrato iniciado alcanza su duración pre-especificada sin haber incumplido previamente, el contrato se completa. -All collateral is returned to **SPs t**hat currently fill the slots (note due to slot recovery these are not necessarily the same **SPs** that filled the slots at contract inception), and all remaining payment is returned to the client. +Todo el colateral es devuelto a los **SPs** que actualmente llenan los espacios (tenga en cuenta que, debido a la recuperación de los espacios, estos no son necesariamente los mismos **SPs** que llenaron los espacios al principio del contrato), y todo el pago restante es devuelto al cliente. -Deals can not be automatically rolled forward or extended. If a **Client** desires to continue a deal, they must create a new storage contract request. Otherwise, Clients can retrieve their data. +Los acuerdos no pueden renovarse o extenderse automáticamente. Si un **Cliente** desea continuar un acuerdo, debe crear una nueva solicitud de contrato de almacenamiento. De lo contrario, los clientes pueden recuperar sus datos. -# CDX Testnet Tokenomics +# CDX Testnet Tokenomics -The CDX token does not exist in the Testnet Phase. The description below refers to the mechanics of a Testnet token and not CDX itself and will be referred to as *CDX (Testnet token)* for this purpose. +El token CDX no existe en la Fase Testnet. La descripción a continuación se refiere a la mecánica de un token Testnet y no al CDX en sí, y se denominará *CDX (Token Testnet)* para este propósito. -For the avoidance of doubt, the *CDX (Testnet token)* are virtual items with no value of any kind and they are not convertible to any other currency, token, or any other form of property. They are solely intended to be utilised for the purposes of enabling the tokenomics and facilitating the different roles in this Testnet Phase. +Para evitar dudas, los *CDX (Token Testnet)* son elementos virtuales sin valor de ningún tipo y no son convertibles a ninguna otra moneda, token o cualquier otra forma de propiedad. Están destinados únicamente a ser utilizados con el fin de habilitar la tokenomía y facilitar los diferentes roles en esta Fase Testnet. ## Roles -The Codex protocol has two primary roles fulfilled by network participants. +El protocolo Codex tiene dos roles principales cumplidos por los participantes de la red. -- **Clients**: pay Storage Providers in *CDX (Testnet token)* to securely store their data on the Codex network for an agreed upon amount of time. -- **Storage Providers**: post *CDX (Testnet token)* collateral to enter into storage contracts with Clients in exchange for a *CDX (Testnet token)* denominated payment. -- **Validators**: post *CDX (Testnet token)* collateral to validate storage proofs in exchange for a *CDX (Testnet token)* denominated payment. +- **Clientes**: pagan a los Proveedores de Almacenamiento en *CDX (Token Testnet)* para almacenar de forma segura sus datos en la red Codex durante una cantidad de tiempo acordada. +- **Proveedores de Almacenamiento**: publican colateral *CDX (Token Testnet)* para celebrar contratos de almacenamiento con los Clientes a cambio de un pago denominado en *CDX (Token Testnet)*. +- **Validadores**: publican colateral *CDX (Token Testnet)* para validar pruebas de almacenamiento a cambio de un pago denominado en *CDX (Token Testnet)*. -## Token Utility +## Utilidad del Token -The *CDX (Testnet token)* is used as both a form of posted collateral and a means of payment in order to secure the network and access its services. +El *CDX (Token Testnet)* se utiliza tanto como una forma de colateral publicado como un medio de pago para asegurar la red y acceder a sus servicios. -Collateral is primarily used as a spam and sybil-attack prevention mechanism, liability insurance (e.g. compensating Clients in case of catastrophic loss of data), and to enforce rational behavior. +El colateral se utiliza principalmente como un mecanismo de prevención de spam y ataques Sybil, seguro de responsabilidad (por ejemplo, compensación a los Clientes en caso de pérdida catastrófica de datos) y para hacer cumplir el comportamiento racional. -Payments are made by Clients to Providers for services rendered, such as for storing data for a certain amount of time or retrieving data. This is implemented through the Marketplace contract, which serves as an escrow. Data in a storage contract is distributed into slots where each is, ideally, hosted by a different Storage Provider. +Los pagos son realizados por los Clientes a los Proveedores por los servicios prestados, como el almacenamiento de datos durante un cierto período de tiempo o la recuperación de datos. Esto se implementa a través del contrato Marketplace, que actúa como un depósito en garantía. Los datos en un contrato de almacenamiento se distribuyen en espacios donde cada uno es, idealmente, alojado por un Proveedor de Almacenamiento diferente. -### **For Clients** +### **Para los Clientes** -- Pay storage costs and fees in *CDX (Testnet token)* for storing files. +- Pagar los costos de almacenamiento y las tarifas en *CDX (Token Testnet)* para almacenar archivos. -### **For Storage Providers** +### **Para los Proveedores de Almacenamiento** -- Post collateral in *CDX (Testnet token)* when committing to new storage contracts. This collateral is slashed if they do not fulfill their agreed upon services. -- Earn *CDX (Testnet token)* from the collateral of slashed Storage Providers by participating in the slot recovery mechanism. -- Earn *CDX (Testnet token)* from Clients when successfully completing the storage service. +- Publicar colateral en *CDX (Token Testnet)* al comprometerse con nuevos contratos de almacenamiento. Este colateral se reduce si no cumplen con sus servicios acordados. +- Ganar *CDX (Token Testnet)* del colateral de los Proveedores de Almacenamiento reducidos participando en el mecanismo de recuperación de espacios. +- Ganar *CDX (Token Testnet)* de los Clientes al completar con éxito el servicio de almacenamiento. -### For Validators +### Para los Validadores -- Post collateral in *CDX (Testnet token)* to operate the validation service. This collateral is slashed if they do not mark a proof as missing within a predetermined period. -- Earn *CDX (Testnet token)* from the collateral of slashed Storage Providers by marking proofs as missed +- Publicar colateral en *CDX (Token Testnet)* para operar el servicio de validación. Este colateral se reduce si no marcan una prueba como faltante dentro de un período predeterminado. +- Ganar *CDX (Token Testnet)* del colateral de los Proveedores de Almacenamiento reducidos marcando las pruebas como perdidas. -Figure below depicts the flow of the *CDX (Testnet token)* token within the system. +La siguiente figura muestra el flujo del token *CDX (Token Testnet)* dentro del sistema. -![Flow of the *CDX token within the system](/learn/tokenomics-token-flow.png) +![Flujo del token *CDX dentro del sistema](/learn/tokenomics-token-flow.png) -## Value Capture and Accrual Mechanisms +## Mecanismos de Captura y Acumulación de Valor -Codex creates *value* to participants: +Codex crea *valor* para los participantes: -- Clients can benefit from storing data with strong durability guarantees; -- Storage Providers can earn yield from their spare resources or capital by providing a service. -- Validators earn payouts for marking proofs as missing. +- Los clientes pueden beneficiarse del almacenamiento de datos con fuertes garantías de durabilidad; +- Los proveedores de almacenamiento pueden obtener rendimiento de sus recursos o capital de repuesto al proporcionar un servicio. +- Los validadores obtienen pagos por marcar las pruebas como perdidas. -Clients need *CDX (Testnet token)* tokens to request storage deals. *CDX (Testnet token)* captures the value created to Clients by being a *Value Transfer Token* to them. +Los clientes necesitan tokens *CDX (Token Testnet)* para solicitar acuerdos de almacenamiento. *CDX (Token Testnet)* captura el valor creado para los Clientes al ser un *Token de Transferencia de Valor* para ellos. -Storage Providers and Validators are rewarded in *CDX (Testnet token)* token and also need it as a proof of commitment to the Protocol. They risk being slashed in exchange for rewards. *CDX (Testnet token)* captures the value created to Providers by being a *Work Token* to them. +Los proveedores de almacenamiento y los validadores son recompensados con el token *CDX (Token Testnet)* y también lo necesitan como prueba de compromiso con el Protocolo. Se arriesgan a ser reducidos a cambio de recompensas. *CDX (Token Testnet)* captura el valor creado para los Proveedores al ser un *Token de Trabajo* para ellos. -The following mechanisms describe how the value accrues to the *CDX (Testnet token)* token. +Los siguientes mecanismos describen cómo el valor se acumula en el token *CDX (Token Testnet)*. -### Protocol Fee over Contracts +### Tarifa de Protocolo sobre los Contratos -If the contract is canceled before it starts, Client's deposited amount is charged a small penalty and returned, aiding to prevent low quality spam deal requests. +Si el contrato se cancela antes de que comience, al monto depositado por el Cliente se le cobra una pequeña penalización y se devuelve, lo que ayuda a prevenir solicitudes de acuerdos de spam de baja calidad. -If the contract successfully initiates, the protocol collects a fee for facilitating the transaction. The remaining amount is made available for payments to Storage Providers. +Si el contrato se inicia con éxito, el protocolo cobra una tarifa por facilitar la transacción. El monto restante se pone a disposición para los pagos a los Proveedores de Almacenamiento. -The collected fees are burned in both cases. This creates a small but constant deflationary force on the token supply, which is proportional to the product demand. +Las tarifas cobradas se queman en ambos casos. Esto crea una fuerza deflacionaria pequeña pero constante en el suministro del token, que es proporcional a la demanda del producto. -## Behavior & Motivations +## Comportamiento y Motivaciones -### Clients +### Clientes -Clients have the following rational behavior: +Los clientes tienen el siguiente comportamiento racional: -- Requesting storage from the network with a fee at fair market rates -- Providing data to storage nodes that meet their criteria +- Solicitar almacenamiento de la red con una tarifa a tasas de mercado justas +- Proporcionar datos a los nodos de almacenamiento que cumplan con sus criterios -They may also exhibit the following adversarial behavior, whether for profit driven, malicious, or censorship motivations: +También pueden exhibir el siguiente comportamiento desfavorable, ya sea por motivaciones impulsadas por las ganancias, maliciosas o de censura: -- Requesting storage from the network but never making the data available for any or all slots -- Requesting storage from the network but not releasing the data within required time period to begin the contract successfully -- Requesting storage from the network but not releasing the data to specific Providers -- Attacking SPs that host their data to attempt to relieve their payment obligations at the end of the contract. +- Solicitar almacenamiento a la red, pero nunca hacer que los datos estén disponibles para ninguno o todos los espacios. +- Solicitar almacenamiento a la red, pero no liberar los datos dentro del período de tiempo requerido para comenzar el contrato con éxito +- Solicitar almacenamiento a la red, pero no liberar los datos a Proveedores específicos +- Atacar a los SP que alojan sus datos para intentar aliviar sus obligaciones de pago al final del contrato. -### **Storage Providers** +### **Proveedores de Almacenamiento** -Storage Providers have the following rational behavior: +Los proveedores de almacenamiento tienen el siguiente comportamiento racional: -- Committing to slots of storage contracts to earn a fee. -- Providing proofs of storage for their committed slots to avoid collateral slashing penalties. -- Releasing the data to anyone who requests it. -- Committing to failed slots of storage contracts to maintain the integrity of the data +- Comprometerse con espacios de contratos de almacenamiento para ganar una tarifa. +- Proporcionar pruebas de almacenamiento para sus espacios comprometidos para evitar las penalizaciones por reducción del colateral. +- Liberar los datos a cualquiera que los solicite. +- Comprometerse con espacios fallidos de contratos de almacenamiento para mantener la integridad de los datos -They may also exhibit the following adversarial behavior, whether for profit driven, malicious, or censorship motivations: +También pueden exhibir el siguiente comportamiento desfavorable, ya sea por motivaciones impulsadas por las ganancias, maliciosas o de censura: -- Reserving a contract slot but never filling it (attempt to prevent contract from starting) -- Ceasing to provide proofs mid the lifespan of a contract -- Producing proofs, but not making data available for other nodes to retrieve +- Reservar un espacio de contrato, pero nunca llenarlo (intento de evitar que el contrato comience) +- Dejar de proporcionar pruebas a mitad de la vida útil de un contrato +- Producir pruebas, pero no hacer que los datos estén disponibles para que otros nodos los recuperen -### Validators +### Validadores -Validators have the following rational behavior: +Los validadores tienen el siguiente comportamiento racional: -- Marking a proof as missing to earn a fee -- Tracking the history of missed proofs of a **SP** -- Triggering the Slot Recovery Mechanism when an **SP** reaches the maximum allowed number of missed proofs +- Marcar una prueba como perdida para ganar una tarifa +- Rastrear el historial de pruebas perdidas de un **SP** +- Activar el Mecanismo de Recuperación de Espacios cuando un **SP** alcanza el número máximo permitido de pruebas perdidas -They may also exhibit the following adversarial behavior, whether for profit driven, malicious, or censorship motivations: +También pueden exhibir el siguiente comportamiento desfavorable, ya sea por motivaciones impulsadas por las ganancias, maliciosas o de censura: -- Colluding with SPs to ignore missed proofs -- Observing a missed proof but do not post it onchain +- Conspirar con los SP para ignorar las pruebas perdidas +- Observar una prueba perdida, pero no publicarla en la cadena -## Incentive Mechanisms +## Mecanismos de Incentivos -The following mechanisms help incentivize the expected behavior of each role and mitigate the detrimental ones. +Los siguientes mecanismos ayudan a incentivar el comportamiento esperado de cada rol y a mitigar los desfavorables. -### Clients Provide Full Payment Upfront +### Los Clientes Proporcionan el Pago Completo por Adelantado -Clients must deposit the full amount in *CDX (Testnet token)* that covers the entirety of the storage contract duration upfront. This indicates their pledge to pay a certain amount for the storage contract, though the contract only begins when and if all data slots are filled by Storage Providers. +Los clientes deben depositar el monto total en *CDX (Token Testnet)* que cubra la totalidad de la duración del contrato de almacenamiento por adelantado. Esto indica su compromiso de pagar una cierta cantidad por el contrato de almacenamiento, aunque el contrato solo comienza cuando y si todos los espacios de datos son llenados por los Proveedores de Almacenamiento. -### Delayed Payment to Storage Providers +### Pago Retrasado a los Proveedores de Almacenamiento -Storage Providers only receive payment related to the provision of services at the end of the contract duration. +Los proveedores de almacenamiento solo reciben el pago relacionado con la prestación de servicios al final de la duración del contrato. -### Collateral Requirement +### Requisito de Colateral -In order to fill a data slot, Storage Providers first stake and commit the required collateral in the form of the *CDX (Testnet token)* for that slot which is then subject to slashing if they do not post a proof to confirm the slot. +Para llenar un espacio de datos, los Proveedores de Almacenamiento primero deben apostar y comprometer el colateral requerido en forma de *CDX (Token Testnet)* para ese espacio, que luego está sujeto a reducción si no publican una prueba para confirmar el espacio. -Validators also need to post collateral to participate in the validation service. +Los validadores también necesitan publicar colateral para participar en el servicio de validación. -### Proof of Storage +### Prueba de Almacenamiento -Contracts only start when all data slots are filled. Slots are only considered filled after a Storage Provider has posted collateral and the associated proof for its slot. +Los contratos solo comienzan cuando todos los espacios de datos están llenos. Los espacios solo se consideran llenos después de que un Proveedor de Almacenamiento haya publicado el colateral y la prueba asociada para su espacio. -Once the contract begins, Storage Providers regularly provide proof of storage. +Una vez que comienza el contrato, los Proveedores de Almacenamiento proporcionan regularmente una prueba de almacenamiento. -### **Slashing for Missed Proofs of Storage** +### **Reducción por Pruebas de Almacenamiento Perdidas** -At any point during the duration of the storage contract, the storage provider is slashed if it fails to provide a certain number of proof of storage in a row. Should the SP resume providing proof of storage, it needs to top up the slashed collateral. The penalty is a fixed percentage of the total collateral. +En cualquier momento durante la duración del contrato de almacenamiento, el proveedor de almacenamiento se reduce si no proporciona un cierto número de pruebas de almacenamiento seguidas. Si el SP reanuda la provisión de pruebas de almacenamiento, debe reponer el colateral reducido. La penalización es un porcentaje fijo del colateral total. -### Slot Recovery Mechanism +### Mecanismo de Recuperación de Espacios -If a Storage Provider does not submit the required storage proofs when required, after a number of slashings their entire collateral will be seized. A portion of the confiscated collateral is used as an incentive for the new Storage Provider who recovers and starts serving the abandoned slot. The remainder of the confiscated collateral in *CDX (Testnet token)* is burned. +Si un Proveedor de Almacenamiento no envía las pruebas de almacenamiento requeridas cuando se requiere, después de una serie de reducciones, todo su colateral será incautado. Una parte del colateral confiscado se utiliza como incentivo para el nuevo Proveedor de Almacenamiento que recupera y comienza a servir el espacio abandonado. El resto del colateral confiscado en *CDX (Token Testnet)* se quema. -### Slashing Defaulted Contract +### Reducción del Contrato Incumplido -If, at any point during the duration of the storage contract, the number of data slots currently abandoned (and not yet recovered) reaches or surpasses the maximum allowable lost slots (meaning the data becomes irretrievable), then the entire storage contract is deemed to be *failed*. +Si, en cualquier momento durante la duración del contrato de almacenamiento, el número de espacios de datos actualmente abandonados (y aún no recuperados) alcanza o supera el número máximo permitido de espacios perdidos (lo que significa que los datos se vuelven irrecuperables), entonces todo el contrato de almacenamiento se considera *fallido*. -At this stage, collaterals of all Storage Providers serving data slots in the contract are entirely slashed. +En esta etapa, los colaterales de todos los Proveedores de Almacenamiento que sirven espacios de datos en el contrato se reducen por completo. -### Client Reimbursement +### Reembolso al Cliente -If at any point during the contract, sufficient slots are abandoned such that the data is not fully recoverable, Clients receive back any leftover from their original payment. +Si en cualquier momento durante el contrato, se abandonan suficientes espacios de tal manera que los datos no sean completamente recuperables, los Clientes reciben de vuelta cualquier sobrante de su pago original. -## Token Lifecycle +## Ciclo de Vida del Token -### Burning +### Quema -*CDX (Testnet token)* tokens are burned in these instances: +Los tokens *CDX (Token Testnet)* se queman en estos casos: + +- Cuando no se inicia un contrato de acuerdo de almacenamiento, se quema una pequeña parte del pago del Cliente por el acuerdo de almacenamiento. Esto sirve principalmente como un mecanismo para disuadir el spam y garantizar que las solicitudes de acuerdo se envíen a precios apropiados para el mercado del almacenamiento. +- Cuando un contrato de acuerdo de almacenamiento se inicia con éxito, el protocolo aplica una tarifa por facilitar la transacción. +- Siempre que un Proveedor de Almacenamiento pierde una cierta cantidad de pruebas de almacenamiento, se reduce y se quema una parte del colateral. +- Una vez que se resuelve el mecanismo de recuperación de espacios, se quema el resto del colateral del Proveedor de Almacenamiento que abandona. -- When a storage deal contract fails to initiate, a small portion of the Client's payment for the storage deal is burned. This serves primarily as a mechanism to deter spam and ensure that deal requests are submitted at market-appropriate prices for storage. -- When a storage deal contract successfully initiates, the protocol applies a fee for facilitating the transaction. -- Whenever a Storage Provider misses a certain number of storage proofs, a portion of the collateral is slashed and burned. -- Once the slot recovery mechanism resolves, the remaining of the abandoning Storage Provider’s collateral is burned. diff --git a/learn/troubleshoot.md b/learn/troubleshoot.md index a9e0eee..6584787 100644 --- a/learn/troubleshoot.md +++ b/learn/troubleshoot.md @@ -1,30 +1,30 @@ --- outline: [2, 3] --- -# Troubleshoot +# Solución de Problemas -Having trouble getting your Codex node connected to the testnet? Here's a list of common Codex connection conundrums and steps to diagnose and solve them. If your troubles are not addressed here, check our open issues on Github or reach out via our Discord server. +¿Estás teniendo problemas para conectar tu nodo Codex a la testnet? Aquí tiene una lista de problemas comunes de conexión de Codex y los pasos para diagnosticarlos y resolverlos. Si sus problemas no se abordan aquí, consulte nuestros problemas abiertos en Github o póngase en contacto a través de nuestro servidor de Discord. -## Some basics +## Algunos conceptos básicos -You've probably already considered these. But just in case: +Probablemente ya haya considerado esto. Pero por si acaso: -1. Are you using a VPN? Make sure it's configured correctly to forward the right ports, and make sure you announce your node by the public IP address where you can be reached. -1. Are you using a firewall or other security software? Make sure it's configured to allow incoming connections to Codex's discovery and peer-to-peer ports. +1. ¿Está utilizando una VPN? Asegúrese de que esté configurada correctamente para reenviar los puertos correctos y asegúrese de anunciar su nodo por la dirección IP pública donde se le pueda contactar. +2. ¿Está utilizando un firewall u otro software de seguridad? Asegúrese de que esté configurado para permitir las conexiones entrantes a los puertos de descubrimiento y peer-to-peer de Codex. -## Check your announce address +## Compruebe su dirección de anuncio -Your node announces your public address to the network, so other nodes can connect to you. A common issue is connection failure due to incorrect announce addresses. Follow these steps to check your announce address. +Su nodo anuncia su dirección pública a la red, para que otros nodos puedan conectarse a usted. Un problema común es el fallo de conexión debido a direcciones de anuncio incorrectas. Siga estos pasos para comprobar su dirección de anuncio. -1. Go to a whats-my-ip site, or `ip.codex.storage` and note the IP address. -1. Go into your router/modem WAN settings and find the public IP address. -1. These two addresses should match. -1. If they do not, it's possible that A) you're behind a VPN. In this case, it's up to you to disable the VPN or make sure all forwarding is configured correctly. or B) Your internet-service-provider has placed your uplink behind a secondary NAT. ISPs do this to save public IP addresses. The address assigned to your router/moderm is not a 'true' public internet address. Usually this issue can be solved by your ISP. Contact customer support and ask them to give you a public address (sometimes also called Dynamic IP address). -1. Call Codex's debug/info endpoint. See the [Using Codex](/learn/using) for the details. -1. In the JSON response, you'll find "announceAddresses". -1. The IP address listed there should match your public IP. -1. If the announce address in the JSON is incorrect, you can adjust it manually by changing Codex's CLI argument `--nat` or setting the environment variable `CODEX_NAT`. After you've changed your announce address and restarted your node, please allow some time (20-30mins) for the network to disseminate the updated address. +1. Vaya a un sitio de cuál-es-mi-ip, o a `ip.codex.storage` y anote la dirección IP. +2. Vaya a la configuración WAN de su router/módem y busque la dirección IP pública. +3. Estas dos direcciones deben coincidir. +4. Si no coinciden, es posible que A) esté detrás de una VPN. En este caso, depende de usted deshabilitar la VPN o asegurarse de que todo el reenvío esté configurado correctamente. o B) Su proveedor de servicios de Internet ha colocado su enlace ascendente detrás de un NAT secundario. Los ISP hacen esto para ahorrar direcciones IP públicas. La dirección asignada a su router/módem no es una dirección de Internet pública "verdadera". Por lo general, este problema puede ser resuelto por su ISP. Póngase en contacto con el servicio de atención al cliente y pídales que le den una dirección pública (a veces también llamada dirección IP dinámica). +5. Llame al punto final debug/info de Codex. Consulte la sección [Usando Codex](/learn/using) para obtener más detalles. +6. En la respuesta JSON, encontrará "announceAddresses". +7. La dirección IP que aparece allí debe coincidir con su IP pública. +8. Si la dirección de anuncio en el JSON es incorrecta, puede ajustarla manualmente cambiando el argumento de la CLI de Codex `--nat` o estableciendo la variable de entorno `CODEX_NAT`. Después de haber cambiado su dirección de anuncio y reiniciado su nodo, espere un tiempo (20-30 minutos) para que la red difunda la dirección actualizada. -If you've performed these steps and haven't found any issues, your announce address is probably not the problem. +Si ha realizado estos pasos y no ha encontrado ningún problema, es probable que su dirección de anuncio no sea el problema. diff --git a/learn/using.md b/learn/using.md index c0ac91e..67a905d 100644 --- a/learn/using.md +++ b/learn/using.md @@ -1,38 +1,38 @@ --- outline: [2, 3] --- -# Using Codex +# Usando Codex -We can interact with Codex using [REST API](/developers/api). This document will show you several useful examples. +Podemos interactuar con Codex usando la [API REST](/developers/api). Este documento le mostrará varios ejemplos útiles. -Also, we can check [Codex App UI](https://app.codex.storage). +Además, podemos consultar la [UI de la App Codex](https://app.codex.storage). -Command line interpreter on [Linux/macOS](#linux-macos) and [Windows](#windows) works slightly different, so please use steps for your OS. +El intérprete de línea de comandos en [Linux/macOS](#linux-macos) y [Windows](#windows) funciona de forma ligeramente diferente, así que utilice los pasos para su sistema operativo. ## Linux/macOS -### Overview +### Descripción General 1. [Debug](#debug) -2. [Upload a file](#upload-a-file) -3. [Download a file](#download-a-file) -4. [Local data](#local-data) -5. [Create storage availability](#create-storage-availability) -6. [Purchase storage](#purchase-storage) -7. [View purchase status](#view-purchase-status) +2. [Subir un archivo](#upload-a-file) +3. [Descargar un archivo](#download-a-file) +4. [Datos Locales](#local-data) +5. [Crear disponibilidad de almacenamiento](#create-storage-availability) +6. [Comprar almacenamiento](#purchase-storage) +7. [Ver el estado de la compra](#view-purchase-status) ### Debug -An easy way to check that your node is up and running is: +na forma sencilla de comprobar que su nodo está activo y en funcionamiento e ```shell curl http://localhost:8080/api/codex/v1/debug/info \ -w '\n' ``` -This will return a JSON structure with plenty of information about your local node. It contains peer information that may be useful when troubleshooting connection issues. +Esto devolverá una estructura JSON con mucha información sobre su nodo local. Contiene información de pares que puede ser útil para solucionar problemas de conexión. -### Upload a file -> [!Warning] -> Once you upload a file to Codex, other nodes in the network can download it. Please do not upload anything you don't want others to access, or, properly encrypt your data *first*. +### Subir un archivo +> [¡ATENCIÓN!] +> Una vez que sube un archivo a Codex, otros nodos de la red pueden descargarlo. Por favor, no suba nada a lo que no quiera que otros accedan, o, encripte apropiadamente sus datos *primero*. ```shell curl -X POST \ @@ -42,13 +42,13 @@ curl -X POST \ -T ``` -On successful upload, you'll receive a CID. This can be used to download the file from any node in the network. +Tras una subida exitosa, recibirá un CID. Esto puede ser utilizado para descargar el archivo desde cualquier nodo en la red. -> [!TIP] -> Are you on the [Codex Discord server](https://discord.gg/codex-storage)? Post your CID in the [# :wireless: | share-cids](https://discord.com/channels/895609329053474826/1278383098102284369) channel, see if others are able to download it. Codex does not (yet?) provide file metadata, so if you want others to be able to open your file, tell them which extension to give it. +> [¡CONSEJO!] +> Está en el [servidor de Discord de Codex](https://discord.gg/codex-storage)? Publique su CID en el canal [# :wireless: | share-cids](https://discord.com/channels/895609329053474826/1278383098102284369) , vea si otros pueden descargarlo. Codex no proporciona (¿todavía?) metadatos de archivos, así que, si quiere que otros puedan abrir su archivo, dígasles qué extensión deben darle. -### Download a file -When you have a CID of data you want to download, you can use the following commands: +### Descargar un archivo +Cuando tenga un CID de datos que quiera descargar, puede usar los siguientes comandos: ```shell # paste your CID from the previous step here between the quotes @@ -60,21 +60,21 @@ curl "http://localhost:8080/api/codex/v1/data/${CID}/network/stream" \ -o "${CID}.png" ``` -Please use the correct extension for the downloaded file, because Codex does not store yet content-type or extension information. +Utilice la extensión correcta para el archivo descargado, porque Codex aún no almacena información de content-type o extensión. -### Local data -You can view which datasets are currently being stored by your node: +### Datos locales +Puede ver qué conjuntos de datos están siendo almacenados actualmente por su nodo: ```shell curl http://localhost:8080/api/codex/v1/data \ -w '\n' ``` -### Create storage availability -> [!WARNING] -> This step requires that Codex was started with the [`prover`](/learn/run#codex-storage-node) option. +### Crear disponibilidad de almacenamiento +> [¡ATENCIÓN!] +> Este paso requiere que Codex se haya iniciado con la opción [`prover`](/learn/run#codex-storage-node) . -In order to start selling storage space to the network, you must configure your node with the following command. Once configured, the node will monitor on-chain requests-for-storage and will automatically enter into contracts that meet these specifications. In order to enter and maintain storage contracts, your node is required to submit zero-knowledge storage proofs. The calculation of these proofs will increase the CPU and RAM usage of Codex. +Para empezar a vender espacio de almacenamiento a la red, debe configurar su nodo con el siguiente comando. Una vez configurado, el nodo supervisará las solicitudes de almacenamiento en cadena y celebrará automáticamente los contratos que cumplan con estas especificaciones. Para celebrar y mantener los contratos de almacenamiento, su nodo debe presentar pruebas de almacenamiento de conocimiento cero. El cálculo de estas pruebas aumentará el uso de CPU y RAM de Codex. ```shell curl -X POST \ @@ -89,12 +89,12 @@ curl -X POST \ }' ``` -For descriptions of each parameter, please view the [spec](https://api.codex.storage/#tag/Marketplace/operation/offerStorage). +Para obtener descripciones de cada parámetro, consulte la [especificación](https://api.codex.storage/#tag/Marketplace/operation/offerStorage). -### Purchase storage -To purchase storage space from the network, first you must upload your data. Once you have the CID, use the following to create a request-for-storage. +### Comprar almacenamiento +Para comprar espacio de almacenamiento de la red, primero debe subir sus datos. Una vez que tenga el CID, utilice lo siguiente para crear una solicitud de almacenamiento. -Set your CID: +Establezca su CID: ```shell # paste your CID from the previous step here between the quotes @@ -102,7 +102,7 @@ CID="..." echo "CID: ${CID}" ``` -Next you can run: +A continuación, puede ejecutar: ```shell curl -X POST \ @@ -119,59 +119,59 @@ curl -X POST \ }' ``` -For descriptions of each parameter, please view the [spec](https://api.codex.storage/#tag/Marketplace/operation/createStorageRequest). +Para obtener descripciones de cada parámetro, consulte la [especificación](https://api.codex.storage/#tag/Marketplace/operation/createStorageRequest). -When successful, this request will return a Purchase-ID. +Si tiene éxito, esta solicitud devolverá un Purchase-ID. -### View purchase status -Using a Purchase-ID, you can check the status of your request-for-storage contract: +### Ver el estado de la compra +Usando un Purchase-ID, puede comprobar el estado de su contrato de solicitud de almacenamiento: ```shell -# paste your PURCHASE_ID from the previous step here between the quotes +# pegue su PURCHASE_ID del paso anterior aquí entre las comillas PURCHASE_ID="..." ``` -Then: +Entonces: ```shell curl "http://localhost:8080/api/codex/v1/storage/purchases/${PURCHASE_ID}" \ -w '\n' ``` -This will display state and error information for your purchase. -| State | Description | +Esto mostrará información de estado y errores para su compra. +| Estado | Descripción | |-----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Pending | Request is waiting for chain confirmation. | -| Submitted | Request is on-chain. Hosts may now attempt to download the data. | -| Started | Hosts have downloaded the data and provided proof-of-storage. | -| Failed | The request was started, but (too many) hosts failed to provide proof-of-storage on time. While the data may still be available in the network, for the purpose of the purchase it is considered lost. | -| Finished | The request was started successfully and the duration has elapsed. | -| Expired | (Not enough) hosts have submitted proof-of-storage before the request's expiry elapsed. | -| Errored | An unfortunate state of affairs. The 'error' field should tell you more. | +| Pendiente | La solicitud está esperando la confirmación de la cadena. | +| Enviado | La solicitud está en la cadena. Los hosts ahora pueden intentar descargar los datos. | +| Iniciado | Los hosts han descargado los datos y han proporcionado prueba de almacenamiento. | +| Fallido | La solicitud se inició, pero (demasiados) hosts no proporcionaron la prueba de almacenamiento a tiempo. Aunque los datos pueden seguir estando disponibles en la red, a efectos de la compra se consideran perdidos. | +| Finalizado | La solicitud se inició correctamente y la duración ha transcurrido. | +| Expirado | (No suficientes) hosts han enviado una prueba de almacenamiento antes de que transcurriera la fecha de caducidad de la solicitud. | +| Erróneo | Un desafortunado estado de cosas. El campo 'error' debería darle más información. | ## Windows -### Overview {#overview-windows} +### Descripción General {#overview-windows} 1. [Debug](#debug-windows) -2. [Upload a file](#upload-a-file-windows) -3. [Download a file](#download-a-file-windows) -4. [Local data](#local-data-windows) -5. [Create storage availability](#create-storage-availability-windows) -6. [Purchase storage](#purchase-storage-windows) -7. [View purchase status](#view-purchase-status-windows) +2. [Subir un archivo](#upload-a-file-windows) +3. [Descargar un archivo](#download-a-file-windows) +4. [Datos locales](#local-data-windows) +5. [Crear disponibilidad de almacenamiento](#create-storage-availability-windows) +6. [Comprar almacenamiento](#purchase-storage-windows) +7. [Ver el estado de la compra](#view-purchase-status-windows) ### Debug {#debug-windows} -An easy way to check that your node is up and running is: +Una forma sencilla de comprobar que su nodo está activo y en funcionamiento es: ```batch curl http://localhost:8080/api/codex/v1/debug/info ``` -This will return a JSON structure with plenty of information about your local node. It contains peer information that may be useful when troubleshooting connection issues. +Esto devolverá una estructura JSON con mucha información sobre su nodo local. Contiene información de pares que puede ser útil para solucionar problemas de conexión. -### Upload a file {#upload-a-file-windows} -> [!Warning] -> Once you upload a file to Codex, other nodes in the network can download it. Please do not upload anything you don't want others to access, or, properly encrypt your data *first*. +### Subir un archivo {#upload-a-file-windows} +> [¡ATENCIÓN!] +> Una vez que sube un archivo a Codex, otros nodos de la red pueden descargarlo. Por favor, no suba nada a lo que no quiera que otros accedan, o, encripte apropiadamente sus datos *primero*. ```batch curl -X POST ^ @@ -180,16 +180,16 @@ curl -X POST ^ -T ``` -On successful upload, you'll receive a CID. This can be used to download the file from any node in the network. +Tras una subida exitosa, recibirá un CID. Esto puede ser utilizado para descargar el archivo desde cualquier nodo en la red. -> [!TIP] -> Are you on the [Codex Discord server](https://discord.gg/codex-storage)? Post your CID in the [# :wireless: | share-cids](https://discord.com/channels/895609329053474826/1278383098102284369) channel, see if others are able to download it. Codex does not (yet?) provide file metadata, so if you want others to be able to open your file, tell them which extension to give it. +> [¡CONSEJO!] +> Está en el [servidor de Discord de Codex](https://discord.gg/codex-storage)? Publique su CID en el canal [# :wireless: | share-cids](https://discord.com/channels/895609329053474826/1278383098102284369), vea si otros pueden descargarlo. Codex no proporciona (¿todavía?) metadatos de archivos, así que, si quiere que otros puedan abrir su archivo, dígasles qué extensión deben darle. -### Download a file {#download-a-file-windows} -When you have a CID of data you want to download, you can use the following commands: +### Descargar un archivo {#download-a-file-windows} +Cuando tenga un CID de datos que quiera descargar, puede usar los siguientes comandos: ```batch -:: paste your CID from the previous step here between the quotes +:: pegue su CID del paso anterior aquí entre las comillas set CID="..." ``` @@ -198,20 +198,20 @@ curl "http://localhost:8080/api/codex/v1/data/%CID%/network/stream" ^ -o "%CID%.png" ``` -Please use the correct extension for the downloaded file, because Codex does not store yet content-type or extension information. +Utilice la extensión correcta para el archivo descargado, porque Codex aún no almacena información de content-type o extensión. -### Local data {#local-data-windows} -You can view which datasets are currently being stored by your node: +### Datos locales {#local-data-windows} +Puede ver qué conjuntos de datos están siendo almacenados actualmente por su nodo: ```batch curl http://localhost:8080/api/codex/v1/data ``` -### Create storage availability {#create-storage-availability-windows} -> [!WARNING] -> This step requires that Codex was started with the [`prover`](/learn/run#codex-storage-node) option. +### Crear disponibilidad de almacenamiento {#create-storage-availability-windows} +> [¡ATENCIÓN!] +> Este paso requiere que Codex se haya iniciado con la opción [`prover`](/learn/run#codex-storage-node) . -In order to start selling storage space to the network, you must configure your node with the following command. Once configured, the node will monitor on-chain requests-for-storage and will automatically enter into contracts that meet these specifications. In order to enter and maintain storage contracts, your node is required to submit zero-knowledge storage proofs. The calculation of these proofs will increase the CPU and RAM usage of Codex. +Para empezar a vender espacio de almacenamiento a la red, debe configurar su nodo con el siguiente comando. Una vez configurado, el nodo supervisará las solicitudes de almacenamiento en cadena y celebrará automáticamente los contratos que cumplan con estas especificaciones. Para celebrar y mantener los contratos de almacenamiento, su nodo debe presentar pruebas de almacenamiento de conocimiento cero. El cálculo de estas pruebas aumentará el uso de CPU y RAM de Codex. ```batch curl -X POST ^ @@ -220,12 +220,12 @@ curl -X POST ^ -d "{""totalSize"": ""8000000"", ""duration"": ""7200"", ""minPrice"": ""10"", ""maxCollateral"": ""10""}" ``` -For descriptions of each parameter, please view the [spec](https://api.codex.storage/#tag/Marketplace/operation/offerStorage). +Para obtener descripciones de cada parámetro, consulte la [especificación](https://api.codex.storage/#tag/Marketplace/operation/offerStorage). -### Purchase storage {#purchase-storage-windows} -To purchase storage space from the network, first you must upload your data. Once you have the CID, use the following to create a request-for-storage. +### Comprar almacenamiento {#purchase-storage-windows} +Para comprar espacio de almacenamiento de la red, primero debe subir sus datos. Una vez que tenga el CID, utilice lo siguiente para crear una solicitud de almacenamiento. -Set your CID: +Establezca su CID: ```batch :: paste your CID from the previous step here between the quotes @@ -233,7 +233,7 @@ set CID="..." echo CID: %CID% ``` -Next you can run: +A continuación, puede ejecutar: ```batch curl -X POST ^ @@ -242,34 +242,34 @@ curl -X POST ^ -d "{""duration"": ""3600"",""reward"": ""1"", ""proofProbability"": ""5"", ""expiry"": ""1200"", ""nodes"": 5, ""tolerance"": 2, ""collateral"": ""1""}" ``` -For descriptions of each parameter, please view the [spec](https://api.codex.storage/#tag/Marketplace/operation/createStorageRequest). +Para obtener descripciones de cada parámetro, consulte la [especificación](https://api.codex.storage/#tag/Marketplace/operation/createStorageRequest). -When successful, this request will return a Purchase-ID. +Si tiene éxito, esta solicitud devolverá un Purchase-ID. -### View purchase status {#view-purchase-status-windows} -Using a Purchase-ID, you can check the status of your request-for-storage contract: +### Ver el estado de la compra {#view-purchase-status-windows} +Usando un Purchase-ID, puede comprobar el estado de su contrato de solicitud de almacenamiento: ```batch -:: paste your PURCHASE_ID from the previous step here between the quotes +:: pegue su PURCHASE_ID del paso anterior aquí entre las comillas set PURCHASE_ID="..." ``` -Then: +Entonces: ```batch curl "http://localhost:8080/api/codex/v1/storage/purchases/%PURCHASE_ID%" ``` -This will display state and error information for your purchase. -| State | Description | +Esto mostrará información de estado y errores para su compra. +| Estado | Descripción | |-----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Pending | Request is waiting for chain confirmation. | -| Submitted | Request is on-chain. Hosts may now attempt to download the data. | -| Started | Hosts have downloaded the data and provided proof-of-storage. | -| Failed | The request was started, but (too many) hosts failed to provide proof-of-storage on time. While the data may still be available in the network, for the purpose of the purchase it is considered lost. | -| Finished | The request was started successfully and the duration has elapsed. | -| Expired | (Not enough) hosts have submitted proof-of-storage before the request's expiry elapsed. | -| Errored | An unfortunate state of affairs. The 'error' field should tell you more. | - -## Known issues -1. We add a new line to the API calls to get more readable output, please check [[rest] Add line ending on responses #771](https://github.com/codex-storage/nim-codex/issues/771) for more details. +| Pendiente | La solicitud está esperando la confirmación de la cadena. | +| Enviado | La solicitud está en la cadena. Los hosts ahora pueden intentar descargar los datos. | +| Iniciado | Los hosts han descargado los datos y han proporcionado prueba de almacenamiento. | +| Fallido | La solicitud se inició, pero (demasiados) hosts no proporcionaron la prueba de almacenamiento a tiempo. Aunque los datos pueden seguir estando disponibles en la red, a efectos de la compra se consideran perdidos. | +| Finalizado | La solicitud se inició correctamente y la duración ha transcurrido. | +| Expirado | (No suficientes) hosts han enviado una prueba de almacenamiento antes de que transcurriera la fecha de caducidad de la solicitud. | +| Erróneo | Un desafortunado estado de cosas. El campo 'error' debería darle más información. | + +## Problemas conocidos +1. Añadimos una nueva línea a las llamadas a la API para obtener una salida más legible, consulte [[rest] Add line ending on responses #771](https://github.com/codex-storage/nim-codex/issues/771) para obtener más detalles. diff --git a/learn/what-is-codex.md b/learn/what-is-codex.md index 543db17..791154f 100644 --- a/learn/what-is-codex.md +++ b/learn/what-is-codex.md @@ -1,37 +1,37 @@ -# What is Codex? +# ¿Qué es Codex? -Codex is a decentralised data storage protocol. Its primary features are strong censorship resistance and durability guarantees. It has a reference implementation by the same name, written in nim. It serves as the storage layer of the [Logos](https://logos.co/) tech stack. Alongside the trustless agreement layer, [Nomos](http://nomos.tech), and the communications layer, [Waku](http://waku.org), it is one of the Logos Collective's foundational projects. +Codex es un protocolo descentralizado de almacenamiento de datos. Sus principales características son una fuerte resistencia a la censura y garantías de durabilidad. Tiene una implementación de referencia con el mismo nombre, escrita en nim. Sirve como la capa de almacenamiento de la pila tecnológica de [Logos](https://logos.co/). Junto con la capa de acuerdo sin confianza, [Nomos](http://nomos.tech), y la capa de comunicaciones, [Waku](http://waku.org), es uno de los proyectos fundacionales del Colectivo Logos.
-### Motive +### Motivo -The remote storage landscape is dominated by an increasingly small number of internet powerhouses—Google, Microsoft, Amazon, etc. While these services score highly in terms of user experience and convenience, centralised cloud data storage suffers from the following drawbacks: +El panorama del almacenamiento remoto está dominado por un número cada vez menor de potencias de Internet: Google, Microsoft, Amazon, etc. Si bien estos servicios obtienen una alta puntuación en términos de experiencia de usuario y conveniencia, el almacenamiento de datos en la nube centralizado sufre de los siguientes inconvenientes: -- Censorship +- Censura -- Lack of data ownership +- Falta de propiedad de los datos -- Breaches and outages +- Brechas e interrupciones -- High cost +- Alto costo -Centralised cloud storage providers have an established history of censoring data and, as de facto owners of said data, have the power to do so according to their own standards. Furthermore, centralised platforms have fallen victim to major data breaches and service outages on numerous occasions. +Los proveedores de almacenamiento en la nube centralizados tienen una historia establecida de censura de datos y, como propietarios de facto de dichos datos, tienen el poder de hacerlo de acuerdo con sus propios estándares. Además, las plataformas centralizadas han sido víctimas de importantes violaciones de datos e interrupciones del servicio en numerosas ocasiones. -Such incidents have created a gap in the market for a decentralised, censorship-resistant alternative. Existing peer-to-peer storage and file-sharing networks address some of these issues—such as robustness in the face of network disruptions, and desirable resistance to censorship. Yet without adequate incentives and strong data durability guarantees, they make for unsuitable foundations upon which to build truly unstoppable applications. +Tales incidentes han creado una brecha en el mercado para una alternativa descentralizada y resistente a la censura. Las redes peer-to-peer de almacenamiento e intercambio de archivos existentes abordan algunos de estos problemas, como la robustez frente a las interrupciones de la red y la resistencia deseable a la censura. Sin embargo, sin incentivos adecuados y fuertes garantías de durabilidad de los datos, resultan ser bases inadecuadas sobre las cuales construir aplicaciones verdaderamente imparables. -Existing decentralised storage solutions purport to improve upon early P2P file-sharing platforms like eDonkey and Gnutella. However, the market still lacks a decentralised storage solution that is efficient in terms of storage and bandwidth usage, while offering performance and durability guarantees comparable to incumbents. +Las soluciones de almacenamiento descentralizadas existentes pretenden mejorar las primeras plataformas de intercambio de archivos P2P como eDonkey y Gnutella. Sin embargo, el mercado aún carece de una solución de almacenamiento descentralizada que sea eficiente en términos de almacenamiento y uso del ancho de banda, al tiempo que ofrece un rendimiento y garantías de durabilidad comparables a los titulares.
-### Decentralising data storage +### Descentralizando el almacenamiento de datos -Codex began in 2021 to address a need for a durable, decentralised storage layer for the web3 tech stack. +Codex comenzó en 2021 para abordar la necesidad de una capa de almacenamiento duradera y descentralizada para la pila de tecnología web3. -The name "Codex" refers to an ancient form of book—an allusion to the data storage engine's extremely robust—99.99%—durability guarantees. +El nombre "Codex" se refiere a una forma antigua de libro: una alusión a las garantías de durabilidad extremadamente robustas (99,99%) del motor de almacenamiento de datos. -Codex was announced as a core Logos Collective protocol in June 2023. +Codex fue anunciado como un protocolo central del Colectivo Logos en junio de 2023. ### Testnet -Codex is currently in the testnet phase. The client implementation is free and open software. If you're interested, we encourage you to try Codex, connect to the testnet and experiment with its features. [Get started here](./quick-start.md) +Codex se encuentra actualmente en la fase de testnet. La implementación del cliente es software libre y de código abierto. Si está interesado, le animamos a que pruebe Codex, se conecte a la testnet y experimente con sus características. [Empiece aquí](./quick-start.md) diff --git a/learn/whitepaper.md b/learn/whitepaper.md index 7ee3688..b4fe4b2 100644 --- a/learn/whitepaper.md +++ b/learn/whitepaper.md @@ -1,198 +1,198 @@
-**Abstract** +**Resumen**
-The internet is becoming more and more centralized. As companies and individuals increasingly rely on centralized cloud providers for storage, critical concerns on privacy, censorship, and user control, as well as on the concentration of economic power in the hands of few entities become more pronounced. +Internet se está volviendo cada vez más centralizado. A medida que las empresas y los individuos dependen cada vez más de los proveedores de nube centralizados para el almacenamiento, las preocupaciones críticas sobre la privacidad, la censura y el control del usuario, así como sobre la concentración del poder económico en manos de unas pocas entidades, se vuelven más pronunciadas. -While there have been several attempts at providing alternatives, modern decentralized storage networks (DSNs) often fall short on basic aspects like having strong durability guarantees, being efficient to operate, or providing scalable proofs of storage. This in turn leads to solutions that are either: _i)_ not useful, as they can lose data; _ii)_ not friendly to decentralization, as they require specialized or expensive hardware, or; _iii)_ economically unfeasible, as they burden providers with too many costs beyond those of the storage hardware itself. +Si bien ha habido varios intentos de proporcionar alternativas, las redes de almacenamiento descentralizadas (DSN) modernas a menudo no cumplen con aspectos básicos, como tener sólidas garantías de durabilidad, ser eficientes para operar o proporcionar pruebas escalables de almacenamiento. Esto, a su vez, conduce a soluciones que son: i) no útiles, ya que pueden perder datos; ii) no amigables con la descentralización, ya que requieren hardware especializado o costoso; o iii) económicamente inviables, ya que sobrecargan a los proveedores con demasiados costos más allá de los del hardware de almacenamiento en sí. -In this paper, we introduce Codex, a novel Erasure Coded Decentralized Storage Network that attempts to tackle those issues. Codex leverages erasure coding as part of both redundancy and storage proofs, coupling it with zero-knowledge proofs and lazy repair to achieve tunable durability guarantees while being modest on hardware and energy requirements. Central to Codex is the concept of the Decentralized Durability Engine (DDE), a framework we formalize to systematically address data redundancy, remote auditing, repair, incentives, and data dispersal in decentralized storage systems. +En este artículo, presentamos Codex, una novedosa Red de Almacenamiento Descentralizada con Codificación de Borrado que intenta abordar esos problemas. Codex aprovecha la codificación de borrado como parte tanto de la redundancia como de las pruebas de almacenamiento, combinándola con pruebas de conocimiento cero y reparación diferida para lograr garantías de durabilidad ajustables, al tiempo que es modesta en cuanto a los requisitos de hardware y energía. Un concepto central de Codex es el Motor de Durabilidad Descentralizado (DDE), un marco que formalizamos para abordar sistemáticamente la redundancia de datos, la auditoría remota, la reparación, los incentivos y la dispersión de datos en los sistemas de almacenamiento descentralizados. -We describe the architecture and mechanisms of Codex, including its marketplace and proof systems, and provide a preliminary reliability analysis using a Continuous Time Markov-Chain (CTMC) model to evaluate durability guarantees. Codex represents a step toward creating a decentralized, resilient, and economically viable storage layer critical for the broader decentralized ecosystem. +Describimos la arquitectura y los mecanismos de Codex, incluido su mercado y sus sistemas de prueba, y proporcionamos un análisis preliminar de la confiabilidad utilizando un modelo de Cadena de Markov de Tiempo Continuo (CTMC) para evaluar las garantías de durabilidad. Codex representa un paso hacia la creación de una capa de almacenamiento descentralizada, resiliente y económicamente viable que es fundamental para el ecosistema descentralizado más amplio.
-## 1. Introduction -Data production has been growing at an astounding pace, with significant implications. Data is a critical asset for businesses, driving decision-making, strategic planning, and innovation. Individuals increasingly intertwine their physical lives with the digital world, meticulously documenting every aspect of their lives, taking pictures and videos, sharing their views and perspectives on current events, using digital means for communication and artistic expression, etc. Digital personas have become as important as their physical counterparts, and this tendency is only increasing. +## 1. Introducción +La producción de datos ha estado creciendo a un ritmo asombroso, con importantes implicaciones. Los datos son un activo crítico para las empresas, impulsando la toma de decisiones, la planificación estratégica y la innovación. Los individuos entrelazan cada vez más sus vidas físicas con el mundo digital, documentando meticulosamente cada aspecto de sus vidas, tomando fotos y videos, compartiendo sus puntos de vista y perspectivas sobre los acontecimientos actuales, utilizando medios digitales para la comunicación y la expresión artística, etc. Las identidades digitales se han vuelto tan importantes como sus contrapartes físicas, y esta tendencia solo está aumentando. -Yet, the current trend towards centralization on the web has led to a situation where users have little to no control over their personal data and how it is used. Large corporations collect, analyze, and monetize user data, often without consent or transparency. This lack of privacy leaves individuals vulnerable to targeted advertising, profiling, surveillance, and potential misuse of their personal information. +Sin embargo, la tendencia actual hacia la centralización en la web ha llevado a una situación en la que los usuarios tienen poco o ningún control sobre sus datos personales y cómo se utilizan. Las grandes corporaciones recopilan, analizan y monetizan los datos de los usuarios, a menudo sin consentimiento ni transparencia. Esta falta de privacidad deja a las personas vulnerables a la publicidad dirigida, la creación de perfiles, la vigilancia y el posible uso indebido de su información personal. -Moreover, the concentration of data and power in the hands of a few centralized entities creates a significant risk of censorship: platforms can unilaterally decide to remove, modify, or suppress content that they deem undesirable, effectively limiting users’ freedom of expression and access to information. This power imbalance undermines the open and democratic nature of the internet, creating echo chambers and curtailing the free flow of ideas. +Además, la concentración de datos y poder en manos de unas pocas entidades centralizadas crea un riesgo significativo de censura: las plataformas pueden decidir unilateralmente eliminar, modificar o suprimir contenido que consideren indeseable, limitando efectivamente la libertad de expresión y el acceso a la información de los usuarios. Este desequilibrio de poder socava la naturaleza abierta y democrática de Internet, creando cámaras de eco y restringiendo el libre flujo de ideas. -Another undesirable aspect of centralization is economical: as bigtech dominance in this space evolves to an oligopoly, all revenues flow into the hands of a selected few, while the barrier to entry becomes higher and higher. +Otro aspecto indeseable de la centralización es económico: a medida que el dominio de las grandes empresas tecnológicas en este espacio evoluciona hacia un oligopolio, todos los ingresos fluyen hacia las manos de unos pocos seleccionados, mientras que la barrera de entrada se vuelve cada vez más alta.. -To address these issues, there is a growing need for decentralized technologies. Decentralized technologies enable users to: _i)_ own and control their data by providing secure and transparent mechanisms for data storage and sharing, and _ii)_ participate in the storage economy as providers, allowing individuals and organizations to take their share of revenues. Users can choose to selectively share their data with trusted parties, retain the ability to revoke access when necessary, and monetize their data and their hardware if they so desire. This paradigm shift towards user-centric data and infrastructure ownership has the potential to create a more equitable and transparent digital ecosystem. +Para abordar estos problemas, existe una necesidad creciente de tecnologías descentralizadas. Las tecnologías descentralizadas permiten a los usuarios: i) poseer y controlar sus datos al proporcionar mecanismos seguros y transparentes para el almacenamiento y el intercambio de datos, y ii) participar en la economía del almacenamiento como proveedores, permitiendo a los individuos y organizaciones tomar su parte de los ingresos. Los usuarios pueden optar por compartir selectivamente sus datos con terceros de confianza, conservar la capacidad de revocar el acceso cuando sea necesario y monetizar sus datos y su hardware si así lo desean. Este cambio de paradigma hacia la propiedad de datos e infraestructura centrada en el usuario tiene el potencial de crear un ecosistema digital más equitativo y transparente. -Despite their potential benefits, however, the lack of efficient and reliable decentralized storage leaves a key gap that needs to be addressed before any notion of a decentralized technology stack can be seriously contemplated. +A pesar de sus beneficios potenciales, sin embargo, la falta de almacenamiento descentralizado eficiente y confiable deja una brecha clave que debe abordarse antes de que se pueda contemplar seriamente cualquier noción de una pila de tecnología descentralizada. -In response to these challenges, we introduce Codex: a novel Erasure Coded Decentralized Storage Network which relies on erasure coding for redundancy and efficient proofs of storage. This method provides unparalleled reliability and allows for the storage of large datasets, larger than any single node in the network, in a durable and secure fashion. Our compact and efficient proofs of storage can detect and prevent catastrophic data loss with great accuracy, while incurring relatively modest hardware and electricity requirements -- two preconditions for achieving true decentralization. In addition, we introduce and formalize in this paper the notion of durability in decentralized storage networks through a new concept we call the _Decentralized Durability Engine_ (DDE). +En respuesta a estos desafíos, presentamos Codex: una novedosa Red de Almacenamiento Descentralizada con Codificación de Borrado que se basa en la codificación de borrado para la redundancia y las pruebas eficientes de almacenamiento. Este método proporciona una confiabilidad sin igual y permite el almacenamiento de grandes conjuntos de datos, más grandes que cualquier nodo individual en la red, de una manera duradera y segura. Nuestras pruebas de almacenamiento compactas y eficientes pueden detectar y prevenir la pérdida catastrófica de datos con gran precisión, al tiempo que incurren en requisitos de hardware y electricidad relativamente modestos – dos condiciones previas para lograr una verdadera descentralización. Además, introducimos y formalizamos en este artículo la noción de durabilidad en las redes de almacenamiento descentralizadas a través de un nuevo concepto que llamamos el Motor de Durabilidad Descentralizado (DDE). -The remainder of this paper is organized as follows. First, we discuss the context on which Codex is built (Sec. 2) by expanding on the issues of centralized cloud storage, and providing background on previous takes at decentralized alternatives -- namely, p2p networks, blockchains, and DSNs. Then, we introduce the conceptual framework that underpins Codex in Sec. 3 -- the Decentralized Durability Engine (DDE) -- followed by a more detailed descriptions of the mechanisms behind Codex and how it materializes as a DDE in Sec. 4. Sec. 5 then presents a preliminary reliability analysis, which places Codex's storage parameters alongside more formal durability guarantees. Finally, Sec. 6 provides conclusions and ongoing work. +El resto de este artículo está organizado de la siguiente manera. Primero, discutimos el contexto en el que se construye Codex (Sec. 2) mediante la ampliación de los problemas de almacenamiento en la nube centralizado, y proporcionando información básica sobre los enfoques previos a las alternativas descentralizadas - en concreto, las redes p2p, blockchains, y DSNs. Luego, introducimos el marco conceptual que sustenta Codex en la Sec. 3 - el Motor de Durabilidad Descentralizado (DDE) - seguido de una descripción más detallada de los mecanismos detrás de Codex y cómo se materializa como un DDE en la Sec. 4. Sec. 5, a continuación, presenta un análisis de fiabilidad preliminar, que sitúa los parámetros de almacenamiento de Codex junto con mayores garantías de durabilidad formales. Finalmente, la Sec. 6 proporciona las conclusiones y el trabajo en curso. -## 2. Background and Context +## 2. Antecedentes y Contexto -Codex aims at being a useful and decentralized alternative to centralized storage. In this section, we discuss the context in which this needs arises, as well as why past and current approaches to building and reasoning about decentralized storage were incomplete. This will set the stage for our introduction of the Decentralized Durability Engine -- our approach to reasoning about decentralized storage -- in Sec. 3. +Codex pretende ser una alternativa útil y descentralizada para el almacenamiento centralizado. En esta sección, se analiza el contexto en el que surge esta necesidad, así como por qué los enfoques anteriores y actuales para la construcción y el razonamiento sobre el almacenamiento descentralizado resultaron incompletos. Esto sentará las bases para nuestra introducción del Motor de Durabilidad Descentralizado - nuestro enfoque para el razonamiento sobre el almacenamiento descentralizado - en la Sec. 3. -### 2.1. Centralized Cloud Storage -Over the past two decades, centralized cloud storage has become the _de facto_ approach for storage services on the internet for both individuals and companies alike. Indeed, recent research places the percentage of businesses that rely on at least one cloud provider at $94\%$[^zippia_cloud_report], while most modern smartphones will backup their contents to a cloud storage provider by default. +### 2.1. Almacenamiento en la Nube Centralizado +Durante las últimas dos décadas, el almacenamiento en la nube centralizado se ha convertido en el enfoque de facto para los servicios de almacenamiento en Internet, tanto para particulares como para empresas. De hecho, una investigación reciente sitúa el porcentaje de empresas que dependen de al menos un proveedor de servicios en la nube en el $94%$ [^zippia_cloud_report], mientras que la mayoría de los smartphones modernos realizan copias de seguridad de sus contenidos en un proveedor de almacenamiento en la nube de forma predeterminada. -The appeal is clear: scalable, easy-to-use elastic storage and networking coupled with a flexible pay-as-you-go model and a strong focus on durability[^s3_reinvent_19] translating to dependable infrastructure that is available immediately and at the exact scale required. +El atractivo es claro: escalable, fácil de utilizar el almacenamiento elástico y la conexión en red junto con un modelo flexible de pago por uso y un fuerte enfoque en la durabilidad [^s3_reinvent_19] que se traduce en una infraestructura fiable que está disponible de inmediato y en la escala exacta requerida. -Centralization, however, carries a long list of downsides, most of them due to having a single actor in control of the whole system. This effectively puts users at the mercy of the controlling actor's commercial interests, which may and often will not coincide with the user's interests on how their data gets used, as well as their ability to stay afloat in the face of natural, political, or economical adversity. Government intervention and censorship are also important sources of concern[^liu_19]. Larger organizations are acutely aware of these risks, with $98\%$ of cloud user businesses adopting multi-cloud environments to mitigate them[^multicloud]. +La centralización, sin embargo, conlleva una larga lista de inconvenientes, la mayoría de ellos debidos a tener un único actor en el control de todo el sistema. Esto coloca efectivamente a los usuarios a merced de los intereses comerciales del actor controlador, que puede que no coincidan con los intereses del usuario respecto a la forma en que se utilizan sus datos, así como su capacidad para permanecer a flote frente a la adversidad natural, política o económica. La intervención del gobierno y la censura son también importantes fuentes de preocupación [^liu_19]. Las organizaciones más grandes son muy conscientes de estos riesgos, con un $98%$ de los usuarios empresariales de la nube que adoptan entornos multi-nube para mitigarlos [^multicloud]. -The final downside is economical: since very few companies can currently provide such services at the scale and quality required, the billions in customer spending gets funneled into the pockets of a handful of individuals. Oligopolies such as these can derail into an uncompetitive market which finds its equilibrium at a price point which is not necessarily in the best interest of end-users[^feng_14]. +El último inconveniente es económico: ya que muy pocas empresas pueden proveer actualmente estos servicios a la escala y la calidad necesarias, los miles de millones de gasto de los clientes se canalizan a los bolsillos de un puñado de individuos. Oligopolios como estos pueden descarrilar a un mercado no competitivo que encuentra su equilibrio en un punto de precio que no está necesariamente en el mejor interés de los usuarios finales [^feng_14]. -### 2.2. Decentralized Alternatives: Past and Present +### 2.2. Alternativas Descentralizadas: Pasado y Presente -Given the downsides of centralized cloud storage, it is natural to wonder if there could be alternatives, and indeed those have been extensively researched since the early 2000's. We will not attempt to cover that entire space here, and will instead focus on what we consider to be the three main technological breakthroughs that happened in decentralized systems over these past two decades, and why they have failed to make meaningful inroads thus far: P2P networks, blockchains, and Data Storage Networks (DSNs). +Teniendo en cuenta los inconvenientes del almacenamiento centralizado en la nube, es natural preguntarse si podría haber alternativas; y, de hecho, estos han sido investigados ampliamente desde principios de la década de 2000. No vamos a intentar cubrir todo ese espacio aquí, y en su lugar nos centraremos en lo que consideramos que son los tres principales avances tecnológicos que se produjeron en los sistemas descentralizados en estas últimas dos décadas, y por qué no han logrado avances significativos hasta el momento: Redes P2P, blockchains, y Redes de Almacenamiento de Datos (DSNs). -**P2P Networks.** P2P networks have been around for over two decades. Their premise is that users can run client software on their own machines and form a self-organizing network that enables sharing of resources like bandwidth, compute, and storage to provide higher-level services like search or decentralized file sharing without the need for a centralized controlling actor. +**Redes P2P.** Las redes P2P han existido durante más de dos décadas. Su premisa es que los usuarios pueden ejecutar software cliente en sus propias máquinas y formar una red autoorganizada que permite compartir recursos como ancho de banda, computación y almacenamiento para proporcionar servicios de nivel superior como búsqueda o intercambio de archivos descentralizado sin la necesidad de un actor controlador centralizado. -Early networks like BitTorrent[^cohen_01], however, only had rudimentary incentives based on a form of barter economy in which nodes providing blocks to other nodes would be rewarded with access to more blocks. This provides some basic incentives for nodes to exchange the data they hold, but whether or not a node decides to hold a given piece of data is contingent on whether or not the node operator was interested in that data to begin with; i.e., a node will likely not download a movie if they are not interested in watching it. +Las primeras redes como BitTorrent[^cohen_01], sin embargo, solo tenían incentivos rudimentarios basados en una forma de economía de trueque en la que los nodos que proporcionaban bloques a otros nodos serían recompensados con acceso a más bloques. Esto proporciona algunos incentivos básicos para que los nodos intercambien los datos que poseen, pero si un nodo decide o no mantener una determinada pieza de datos depende de si el operador del nodo estaba interesado en esos datos para empezar; es decir, un nodo probablemente no descargará una película si no está interesado en verla. -Files which are not popular, therefore, tend to disappear from the network as no one is interested in them, and there is no way to incentivize nodes to do otherwise. This lack of even basic durability guarantees means BitTorrent and, in fact, most of the early p2p file-sharing networks, are suitable as distribution networks at best, but not as storage networks as data can, and probably will, be eventually lost. Even more recent attempts at decentralized file sharing like IPFS[^ipfs_website] suffer from similar shortcomings: by default, IPFS offers no durability guarantees, i.e., there is no way to punish a pinning service if it fails to keep data around. +Por lo tanto, los archivos que no son populares tienden a desaparecer de la red, ya que nadie está interesado en ellos, y no hay forma de incentivar a los nodos para que hagan lo contrario. Esta falta de incluso garantías básicas de durabilidad significa que BitTorrent y, de hecho, la mayoría de las primeras redes de intercambio de archivos P2P, son adecuadas como redes de distribución en el mejor de los casos, pero no como redes de almacenamiento, ya que los datos pueden, y probablemente lo harán, perderse eventualmente. Incluso los intentos más recientes de intercambio de archivos descentralizado como IPFS[^ipfs_website] sufren de deficiencias similares: por defecto, IPFS no ofrece garantías de durabilidad, es decir, no hay forma de castigar a un servicio de pinning si no mantiene los datos disponibles. -**Blockchains.** Blockchains have been introduced as part of Bitcoin in 2008[^nakamoto_08], with the next major player Ethereum[^buterin_13] going live in 2013. A blockchain consists of a series of blocks, each containing a list of transactions. These blocks are linked together in chronological order through cryptographic hashes. Each block contains a hash of the previous block, which secures the chain against tampering. This structure ensures that once a block is added to the blockchain, the information it contains cannot be altered without redoing all subsequent blocks, making it secure against fraud and revisions. For all practical purposes, once a block gets added, it can no longer be removed. +**Blockchains.** Las blockchains se introdujeron como parte de Bitcoin en 2008[^nakamoto_08], y el siguiente actor principal, Ethereum[^buterin_13], entró en funcionamiento en 2013. Una blockchain consta de una serie de bloques, cada uno de los cuales contiene una lista de transacciones. Estos bloques están vinculados entre sí en orden cronológico a través de hashes criptográficos. Cada bloque contiene un hash del bloque anterior, lo que asegura la cadena contra la manipulación. Esta estructura asegura que una vez que se agrega un bloque a la blockchain, la información que contiene no se puede alterar sin rehacer todos los bloques subsiguientes, lo que la hace segura contra el fraude y las revisiones. Para todos los propósitos prácticos, una vez que se agrega un bloque, ya no se puede eliminar. -This permanence allied to the fully replicated nature of blockchain means they provide very strong durability and availability guarantees, and this has been recognized since very early on. The full-replication model of blockchains, however, also turns out to be what makes them impractical for data storage: at the date of this writing, storing as little as a gigabyte of data on a chain like Ethereum remains prohibitively expensive[^kostamis_24]. +Esta permanencia aliada a la naturaleza totalmente replicada de la blockchain significa que proporciona garantías de durabilidad y disponibilidad muy sólidas, y esto se ha reconocido desde muy temprano. El modelo de replicación completa de las blockchains, sin embargo, también resulta ser lo que las hace poco prácticas para el almacenamiento de datos: en la fecha de esta redacción, almacenar tan solo un gigabyte de datos en una cadena como Ethereum sigue siendo prohibitivamente caro[^kostamis_24]. -Blockchains represent nevertheless a game-changing addition to decentralized systems in that they allow system designers to build much stronger and complex incentive mechanisms based on monetary economies, and to implement key mechanisms like cryptoeconomic security[^chaudhry_24] through slashing, which were simply not possible before. +Las blockchains representan, sin embargo, una adición revolucionaria a los sistemas descentralizados, ya que permiten a los diseñadores de sistemas construir mecanismos de incentivos mucho más sólidos y complejos basados en economías monetarias, e implementar mecanismos clave como la seguridad criptoeconómica[^chaudhry_24] a través del slashing, que simplemente no eran posibles antes. -**Decentralized Storage Networks (DSNs).** Decentralized Storage Networks (DSNs) represent a natural stepping stone in decentralized storage: by combining traditional P2P technology with the strong incentive mechanisms afforded by modern blockchains and new cryptographic primitives, they provide a much more credible take on decentralized storage. +**Redes de Almacenamiento Descentralizadas (DSNs).** Las Redes de Almacenamiento Descentralizadas (DSNs) representan un paso natural en el almacenamiento descentralizado: al combinar la tecnología P2P tradicional con los sólidos mecanismos de incentivos que ofrecen las blockchains modernas y las nuevas primitivas criptográficas, proporcionan una visión mucho más creíble del almacenamiento descentralizado. -Like early P2P networks, DSNs consolidate storage capacities from various independent providers and orchestrate data storage and retrieval services for clients. Unlike early P2P networks, however, DSNs employ the much stronger mechanisms afforded by blockchains to incentivize correct operation. They typically employ remote auditing techniques like Zero-Knowledge proofs to hold participants accountable, coupled with staking/slashing mechanisms which inflict monetary losses on bad participants as they are caught. +Al igual que las primeras redes P2P, las DSN consolidan las capacidades de almacenamiento de varios proveedores independientes y orquestan los servicios de almacenamiento y recuperación de datos para los clientes. A diferencia de las primeras redes P2P, sin embargo, las DSN emplean los mecanismos mucho más sólidos que ofrecen las blockchains para incentivar el funcionamiento correcto. Normalmente emplean técnicas de auditoría remota como pruebas de conocimiento cero para responsabilizar a los participantes, junto con mecanismos de staking/slashing que infligen pérdidas monetarias a los participantes malos cuando son atrapados. -In their seminal paper[^protocol_17], the Filecoin team characterizes a DSN as a tuple $\Pi = \left(\text{Put}, \text{Get}, \text{Manage}\right)$, where: +En su artículo seminal[^protocol_17], el equipo de Filecoin caracteriza una DSN como una tupla $\Pi = \left(\text{Put}, \text{Get}, \text{Manage}\right)$, donde: -* $\text{Put(data)} \rightarrow \text{key}$: Clients execute the Put protocol to store data under a unique identifier key. -* $\text{Get(key)} \rightarrow \text{data}$: Clients execute the Get protocol to retrieve data that is currently stored using key. -* $\text{Manage()}$: The network of participants coordinates via the Manage protocol to: control the available storage, audit the service offered by providers and repair possible faults. The Manage protocol is run by storage providers often in conjunction with clients or a network of auditors. +* $\text{Put(data)} \rightarrow \text{key}$: Los clientes ejecutan el protocolo Put para almacenar datos bajo una clave identificadora única. +* $\text{Get(key)} \rightarrow \text{data}$: Los clientes ejecutan el protocolo Get para recuperar los datos que están almacenados actualmente utilizando la clave. +* $\text{Manage()}$: La red de participantes se coordina a través del protocolo Manage para: controlar el almacenamiento disponible, auditar el servicio ofrecido por los proveedores y reparar posibles fallas. El protocolo Manage es ejecutado por los proveedores de almacenamiento, a menudo en conjunto con los clientes o una red de auditores. -While useful, we argue this definition is incomplete as it pushes a number of key elements onto an unspecified black box protocol/primitive named $\text{Manage}()$. These include: +Si bien es útil, argumentamos que esta definición es incompleta, ya que traslada una serie de elementos clave a un protocolo/primitiva de caja negra no especificada llamada $\text{Manage}()$. Estos incluyen: -* incentive and slashing mechanisms; -* remote auditing and repair protocols; -* strategies for data redundancy and dispersal. +* mecanismos de incentivos y slashing; +* protocolos de auditoría remota y reparación; +* estrategias para la redundancia y dispersión de datos. -Such elements are of particular importance as one attempts to reason about what would be required to construct a DSN that provides actual utility. As we set out to design Codex and asked ourselves that question, we found that the key to useful DSNs is in _durability_; i.e., a storage system is only useful if it can provide durability guarantees that can be reasoned about. +Tales elementos son de particular importancia cuando uno intenta razonar sobre lo que se requeriría para construir una DSN que proporcione utilidad real. Al comenzar a diseñar Codex y hacernos esa pregunta, descubrimos que la clave para las DSN útiles está en la durabilidad; es decir, un sistema de almacenamiento sólo es útil si puede proporcionar garantías de durabilidad que se puedan razonar. -In the next section, we explore a construct we name Decentralized Durability Engines which, we argue, lead to a more principled approach to designing storage systems that provide utility. +En la siguiente sección, exploramos una construcción que llamamos Decentralized Durability Engines (Motores de Durabilidad Descentralizados), que, argumentamos, conducen a un enfoque más fundamentado para diseñar sistemas de almacenamiento que proporcionen utilidad. -## 3. Decentralized Durability Engines (DDE) +## 3. Motores de Durabilidad Descentralizados (DDE) -A Decentralized Durability Engine is a tuple $\Gamma = \text{(R, A, P, I, D)}$ where: +Un Motor de Durabilidad Descentralizado es una tupla $\Gamma = \text{(R, A, P, I, D)}$ donde: -* $R$ is a set of redundancy mechanisms, such as erasure coding and replication, that ensure data availability and fault tolerance. -* $A$ is a set of remote auditing protocols that verify the integrity and availability of stored data. -* $P$ is a set of repair mechanisms that maintain the desired level of redundancy and data integrity by detecting and correcting data corruption and loss. -* $I$ is a set of incentive mechanisms that encourage nodes to behave honestly and reliably by rewarding good behavior and penalizing malicious or negligent actions. -* $D$ is a set of data dispersal algorithms that strategically distribute data fragments across multiple nodes to minimize the risk of data loss due to localized failures and to improve data availability and accessibility. +* $R$ es un conjunto de mecanismos de redundancia, como la codificación de borrado y la replicación, que garantizan la disponibilidad de los datos y la tolerancia a fallos. +* $A$ es un conjunto de protocolos de auditoría remota que verifican la integridad y la disponibilidad de los datos almacenados. +* $P$ es un conjunto de mecanismos de reparación que mantienen el nivel deseado de redundancia y la integridad de los datos mediante la detección y corrección de la corrupción y la pérdida de datos. +* $I$ es un conjunto de mecanismos de incentivos que alientan a los nodos a comportarse de manera honesta y fiable, recompensando el buen comportamiento y penalizando las acciones maliciosas o negligentes. +* $D$ es un conjunto de algoritmos de dispersión de datos que distribuyen estratégicamente los fragmentos de datos en múltiples nodos para minimizar el riesgo de pérdida de datos debido a fallos localizados y para mejorar la disponibilidad y la accesibilidad de los datos. -We argue that when designing a storage system that can keep data around, none of these elements are optional. Data needs to be redundant ($R$), there needs to be a way to detect failures and misbehavior ($A$), we must be able to repair data so it is not lost to accumulated failures $(P)$, misbehaving nodes must be penalized ($I$), and data must be placed so as fault correlation is understood ($D$). - -This is a somewhat informal treatment for now, but the actual parameters that would be input into any reliability analysis of a storage system would be contingent on those choices. In a future publication, we will explore how durability is affected by the choice of each of these elements in a formal framework. +Argumentamos que, al diseñar un sistema de almacenamiento que pueda conservar los datos, ninguno de estos elementos es opcional. Los datos deben ser redundantes ($R$), debe haber una manera de detectar fallos y comportamientos indebidos ($A$), debemos ser capaces de reparar los datos para que no se pierdan debido a la acumulación de fallos ($P$), los nodos que se comportan mal deben ser penalizados ($I$) y los datos deben colocarse de manera que se comprenda la correlación de fallos ($D$). + +Este es un tratamiento un tanto informal por ahora, pero los parámetros reales que se ingresarían en cualquier análisis de fiabilidad de un sistema de almacenamiento dependerían de esas elecciones. En una publicación futura, exploraremos cómo la elección de cada uno de estos elementos afecta la durabilidad en un marco formal. -## 4. Codex: A Decentralized Durability Engine +## 4. Codex: Un Motor de Durabilidad Descentralizado -This section describes how Codex actually works. The primary motivation behind Codex is to provide a scalable and robust decentralized storage solution which addresses the limitations of existing DSNs. This includes: i) enhanced durability guarantees that can be reasoned about, ii) scalability and performance and iii) decentralization and censorship resistance. +Esta sección describe cómo funciona realmente Codex. La motivación principal detrás de Codex es proporcionar una solución de almacenamiento descentralizada escalable y robusta que aborde las limitaciones de las DSN existentes. Esto incluye: i) garantías de durabilidad mejoradas que se pueden razonar, ii) escalabilidad y rendimiento y iii) descentralización y resistencia a la censura. -We start this section by laying out key concepts required to understand how Codex works (Sec. 4.1). We then discuss the redundancy ($R$), remote auditing ($A$), and repair mechanisms ($P$) of Codex and how they combine erasure codes and zero-knowledge proofs into a system that is lightweight, efficient, and amenable to decentralization. Sec. 4.4 takes a detour onto the networking layer and provides an overview of our scalable data transfer protocols. Finally, incentives ($I$) and dispersal $(D)$ are discussed in Sec. 4.5 as part of the Codex marketplace. +Comenzamos esta sección exponiendo los conceptos clave necesarios para comprender cómo funciona Codex (Sec. 4.1). Luego, analizamos la redundancia ($R$), la auditoría remota ($A$) y los mecanismos de reparación ($P$) de Codex y cómo combinan los códigos de borrado y las pruebas de conocimiento cero en un sistema que es ligero, eficiente y susceptible a la descentralización. La Sec. 4.4 se desvía hacia la capa de red y proporciona una visión general de nuestros protocolos escalables de transferencia de datos. Finalmente, los incentivos ($I$) y la dispersión ($D$) se discuten en la Sec. 4.5 como parte del mercado de Codex. -### 4.1. Concepts +### 4.1. Conceptos -In the context of Codex (and of storage systems in general), two properties appear as fundamental: +En el contexto de Codex (y de los sistemas de almacenamiento en general), dos propiedades aparecen como fundamentales: -**Availability.** A system is said to be _available_ when it is able to provide its intended service, and _unavailable_ otherwise. The availability of a system over any given interval of time is given by [^tanembaum]: +Disponibilidad. Se dice que un sistema está disponible cuando es capaz de proporcionar el servicio previsto, y no disponible en caso contrario. La disponibilidad de un sistema durante un intervalo de tiempo dado viene dada por [^tanembaum]: $$ p_\text{avail} =\frac{t_a}{t_a + t_u} $$ -where $t_a$ and $t_u$ are the total times in which the system remained available and unavailable, respectively. To maintain high availability, a storage system needs to be _fault tolerant_; i.e., it should be able to correctly service storage and retrieval requests in the presence of hardware faults and malicious participants. +donde $t_a$ y $t_u$ son los tiempos totales en los que el sistema permaneció disponible y no disponible, respectivamente. Para mantener una alta disponibilidad, un sistema de almacenamiento necesita ser tolerante a fallos; es decir, debería ser capaz de atender correctamente las solicitudes de almacenamiento y recuperación en presencia de fallos de hardware y participantes maliciosos. -**Durability.** Quantified as a probability $p_\text{dur} = 1 - p_\text{loss}$ that a given unit of data _will not_ be lost over a given period of time; e.g. the probability that some file is not lost within a $1$-year period. This probability is sometimes expressed as a percentage (e.g. in S3). +**Durabilidad.** Cuantificada como una probabilidad $p_\text{dur} = 1 - p_\text{loss}$ de que una unidad de datos dada no se pierda durante un período de tiempo dado; por ejemplo, la probabilidad de que algún archivo no se pierda en un período de 1 año. Esta probabilidad a veces se expresa como un porcentaje (por ejemplo, en S3). -If this number is very close to one, e.g. $p_\text{loss} \leq 10^{-6}$, then the system is said to be _highly durable_. Systems that are not highly durable are those that can lose data with higher or unbounded probability, or that do not quantify their loss probabilities at all. +Si este número es muy cercano a uno, por ejemplo, $p_\text{loss} \leq 10^{-6}$, entonces se dice que el sistema es altamente duradero. Los sistemas que no son altamente duraderos son aquellos que pueden perder datos con una probabilidad mayor o ilimitada, o que no cuantifican en absoluto sus probabilidades de pérdida. -Ideally, we would like storage systems to be highly available and highly durable. Since achieving _provable availability_ is in general not possible[^bassam_18], Codex focuses on stronger guarantees for durability and on incentivizing availability instead. +Idealmente, nos gustaría que los sistemas de almacenamiento fueran altamente disponibles y altamente duraderos. Dado que lograr la disponibilidad demostrable no es posible en general[^bassam_18], Codex se centra en garantías más sólidas para la durabilidad y en incentivar la disponibilidad en su lugar. -**Dataset.** A _dataset_ $D = \{c_1, \cdots c_b\}$ is defined in Codex as an ordered set of $b \in \mathbb{N}$ fixed-sized blocks. Blocks are typically small, on the order of $64\text{kB}$. For all intents and purposes, one can think of a dataset as being a regular file. +**Conjunto de datos.** Un conjunto de datos $D = {c_1, \cdots c_b}$ se define en Codex como un conjunto ordenado de $b \in \mathbb{N}$ bloques de tamaño fijo. Los bloques suelen ser pequeños, del orden de $64\text{kB}$. A todos los efectos, se puede pensar en un conjunto de datos como un archivo normal. -**Storage Client (SC).** A Storage Client is a node that participates in the Codex network to buy storage. These may be individuals seeking to backup the contents of their hard drives, or organizations seeking to store business data. +**Cliente de almacenamiento (SC).** Un cliente de almacenamiento es un nodo que participa en la red Codex para comprar almacenamiento. Estos pueden ser individuos que buscan hacer una copia de seguridad del contenido de sus discos duros, u organizaciones que buscan almacenar datos comerciales. -**Storage Provider (SP).** A Storage Provider is a node that participates in Codex by selling disk space to other nodes. +**Proveedor de almacenamiento (SP).** Un proveedor de almacenamiento es un nodo que participa en Codex vendiendo espacio en disco a otros nodos. -### 4.2. Overview +### 4.2. Visión general -At a high level, storing data in Codex works as follows. Whenever a SC wishes to store a dataset $D$ into Codex, it: +A un alto nivel, el almacenamiento de datos en Codex funciona de la siguiente manera. Siempre que un SC desea almacenar un conjunto de datos $D$ en Codex, este: -1. splits $D$ into $k$ disjoint $\{S_1, \cdots, S_k\}$ partitions named **slots**, where each slot contains $s = \left\lceil \frac{b}{k} \right\rceil$ blocks; -1. erasure-codes $D$ with a Reed-Solomon Code[^reed_60] by extending it into a new dataset $D_e$ which adds an extra $m \times s$ parity blocks to $D$ (Sec. 4.3). This effectively adds $m$ new slots to the dataset. Since we use a systematic code, $D$ remains a prefix of $D_e$; -1. computes two different Merkle tree roots: one used for inclusion proofs during data exchange, based on SHA256, and another one for storage proofs, based on Poseidon2 (Sec 4.3); -1. generates a content-addressable manifest for $D_e$ and advertises it into the Codex DHT (Sec. 4.4); -1. posts a **storage request** containing a set of parameters in the Codex marketplace (on-chain), which includes things like how much the SC is willing to pay for storage, as well as expectations that may impact the profitability of candidate SPs and the durability guarantees for $D_e$, for each slot (Sec. 4.5). +1. divide $D$ en $k$ particiones disjuntas ${S_1, \cdots, S_k}$ denominadas slots, donde cada slot contiene $s = \left\lceil \frac{b}{k} \right\rceil$ bloques; +2. codifica con borrado $D$ con un código Reed-Solomon[^reed_60] extendiéndolo a un nuevo conjunto de datos $D_e$ que añade un extra de $m \times s$ bloques de paridad a $D$ (Sec. 4.3). Esto añade efectivamente $m$ nuevos slots al conjunto de datos. Como utilizamos un código sistemático, $D$ sigue siendo un prefijo de $D_e$; +3. calcula dos raíces de árbol Merkle diferentes: una utilizada para las pruebas de inclusión durante el intercambio de datos, basada en SHA256, y otra para las pruebas de almacenamiento, basada en Poseidon2 (Sec 4.3); +4. genera un manifiesto direccionable por contenido para $D_e$ y lo anuncia en el Codex DHT (Sec. 4.4); +5. publica una solicitud de almacenamiento que contiene un conjunto de parámetros en el mercado de Codex (en la cadena), que incluye cosas como cuánto está dispuesto a pagar el SC por el almacenamiento, así como las expectativas que pueden afectar la rentabilidad de los SP candidatos y las garantías de durabilidad para $D_e$, para cada slot (Sec. 4.5). -The Codex marketplace (Sec. 4.5) then ensures that SPs willing to store data for a given storage request are provided a fair opportunity to do so. Eventually, for each slot $S_i \in D_e$, _some_ SP will: +El mercado de Codex (Sec. 4.5) luego asegura que los SP dispuestos a almacenar datos para una solicitud de almacenamiento determinada tengan una oportunidad justa de hacerlo. Eventualmente, para cada slot $S_i \in D_e$, algún SP: -1. declare its interest in it by filing a **slot reservation**; -1. download the data for the slot from the SC; -1. provide an initial proof of storage and some staking collateral for it. +1. declara su interés en él presentando una reserva de slot; +2. descarga los datos para el slot desde el SC; +3. proporciona una prueba inicial de almacenamiento y alguna garantía de staking para ello. -Once this process completes, we say that slot $S_i$ has been **filled**. Once all slots in $D_e$ have been filled, we say that $D_e$ has been **fulfilled**. For the remainder of this section, we will dive into the architecture and mechanisms of Codex by explaining in more detail each aspect of the storage flow. +Una vez que este proceso se completa, decimos que el slot $S_i$ ha sido completado. Una vez que todos los slots en $D_e$ han sido completados, decimos que $D_e$ ha sido cumplido. Para el resto de esta sección, profundizaremos en la arquitectura y los mecanismos de Codex explicando con más detalle cada aspecto del flujo de almacenamiento. -### 4.3. Erasure Coding, Repair, and Storage Proofs +### 4.3. Codificación de Borrado, Reparación y Pruebas de Almacenamiento -Erasure coding plays two main roles in Codex: _i)_ allowing data to be recovered following loss of one or more SPs and the slots that they hold (redundancy) and _ii)_ enabling cost-effective proofs of storage. We will go through each of these aspects separately. +a codificación de borrado desempeña dos funciones principales en Codex: i) permitir que los datos se recuperen tras la pérdida de uno o más SP y los slots que poseen (redundancia) y ii) permitir pruebas de almacenamiento rentables. Revisaremos cada uno de estos aspectos por separado. -**Erasure Coding for Redundancy.** As described before, a dataset $D$ is initially split into $k$ slots of size $s = \left\lceil \frac{b}{k} \right\rceil$ (Figure 1). Since $b$ may not actually be divisible by $k$, Codex will add _padding blocks_ as required so that the number of blocks in $D$ is $b_p = s \times k$. +**Codificación de Borrado para la Redundancia.** Como se describió antes, un conjunto de datos $D$ se divide inicialmente en $k$ slots de tamaño $s = \left\lceil \frac{b}{k} \right\rceil$ (Figura 1). Dado que $b$ puede no ser realmente divisible por $k$, Codex añadirá bloques de relleno según sea necesario para que el número de bloques en $D$ sea $b_p = s \times k$.
-**Figure 1.** A padded dataset $D$ split into $k$ slots. +**Figura 1.** Un conjunto de datos rellenado $D$ dividido en $k$ slots. -Codex then erasure-codes $D$ by _interleaving_ blocks taken from each slot (Figure 2), one at a time. The procedure runs $s$ interleaving steps, where $s$ is the number of blocks in a slot. +odex luego codifica con borrado $D$ entrelazando bloques tomados de cada slot (Figura 2), uno a la vez. El procedimiento ejecuta $s$ pasos de entrelazado, donde $s$ es el número de bloques en un slot.
-**Figure 2.** Erasure-coded dataset $D_e$ with $k + m$ slots and interleaving process. +**Figura 2.** Conjunto de datos codificado con borrado $D_e$ con $k + m$ slots y proceso de entrelazado. -At each _interleaving step_, we collect $k$ blocks by selecting the $i^{th}$ block within each of the $k$ slots ($1 \leq i \leq s$), and feed those through the Reed-Solomon encoder. The encoder then outputs $m$ parity blocks, which get added as the $i^{th}$ block of $m$ new distinct _parity slots_. Since slots have $s$ blocks each we are left, at the end of this process, with $m$ parity slots of $s$ blocks each, or $m \times s$ new parity blocks. +En cada paso de entrelazado, recogemos $k$ bloques seleccionando el bloque $i^{th}$ dentro de cada uno de los $k$ slots ($1 \leq i \leq s$), y los alimentamos a través del codificador Reed-Solomon. El codificador luego genera $m$ bloques de paridad, que se añaden como el bloque $i^{th}$ de $m$ nuevos slots de paridad distintos. Dado que los slots tienen $s$ bloques cada uno, al final de este proceso, nos quedan $m$ slots de paridad de $s$ bloques cada uno, o $m \times s$ nuevos bloques de paridad. -The Codex marketplace (Sec. 4.5) then employs mechanisms to ensure that each one of these slots are assigned to a different node so that failure probabilities for each slot are decorrelated. This is important as, bridging back to durability guarantees, assuming that we could know the probability $p_{\text{loss}}$ with which a given SP could fail over a one year period, this would bound the probability of data loss at $p_{\text{loss}} \leq \binom{k + m}{k} p_{\text{loss}}^k(1 - p_{\text{loss}})^{m}$. We say this is a bound because in practice repair would kick in earlier, so the probability of loss is actually a lot smaller than this. We will carry a more detailed analysis taking those aspects into account in Sec. 5. +l mercado de Codex (Sec. 4.5) luego emplea mecanismos para asegurar que cada uno de estos slots se asignen a un nodo diferente para que las probabilidades de fallo para cada slot estén descorrelacionadas. Esto es importante ya que, volviendo a las garantías de durabilidad, asumiendo que pudiéramos conocer la probabilidad $p_{\text{loss}}$ con la que un SP dado podría fallar durante un período de un año, esto limitaría la probabilidad de pérdida de datos en $p_{\text{loss}} \leq \binom{k + m}{k} p_{\text{loss}}^k(1 - p_{\text{loss}})^{m}$. Decimos que esto es un límite porque en la práctica la reparación se activaría antes, por lo que la probabilidad de pérdida es en realidad mucho menor que esta. Llevaremos a cabo un análisis más detallado teniendo en cuenta esos aspectos en la Sec. 5. -**Erasure Coding for Storage Proofs.** The other, less obvious way in which Codex employs erasure coding is _locally_ at each SP when generating storage proofs. This allows Codex to be expedient in detecting both unintentional and malicious data loss with a high level of accuracy. - -To understand how this works, imagine we had an SP that has promised to store some slot $S_i \in D_e$ until a certain time instant $t_b$. How do we ensure that the SP is indeed holding its promise? One way to approach this would be by having a verifier download the whole slot $S_i$ from the SP at random instants in time. This would ensure the data is still there, but would be costly. +**Codificación de Borrado para Pruebas de Almacenamiento.** La otra forma, menos obvia, en la que Codex emplea la codificación de borrado es localmente en cada SP al generar pruebas de almacenamiento. Esto permite a Codex ser expeditivo en la detección de la pérdida de datos, tanto no intencional como maliciosa, con un alto nivel de precisión. -A smarter approach would be by _sampling_: instead of downloading the entire file, the verifier can ask for a random subset of the blocks in the file and their Merkle inclusion proofs. While this also works, the problem here is that the probability of detecting lost blocks is directly impacted by what fraction of blocks $l_i$ have been lost: if we ask the SP for $j$ samples, then the probability that we catch a missing block is $p_{\text{detect}} = 1 - (1 - l_i)^j$. - -Although the decay is always geometric, the impact of having a loss fraction that is low (e.g. less than $1\%$) can be significant: as depicted in Figure 3, for $l_i = 0.01$ we get a $p_{\text{detect}}$ that is smaller than $0.5$ even after drawing $50$ samples. If that does not sound too bad, consider an adversarial setting in which an SP purposefully drops a very small fraction of a large file, perhaps one single block out of a million. For fractions that small ($10^{-6}$), one would require hundreds of thousands of samples to get reasonable detection probabilities, e.g. $p_{\text{detect}} > 0.99$. +Para entender cómo funciona esto, imagine que tenemos un SP que ha prometido almacenar algún slot $S_i \in D_e$ hasta un cierto instante de tiempo $t_b$. ¿Cómo nos aseguramos de que el SP está realmente cumpliendo su promesa? Una forma de abordar esto sería que un verificador descargue el slot completo $S_i$ desde el SP en instantes aleatorios en el tiempo. Esto aseguraría que los datos todavía están allí, pero sería costoso. + +Un enfoque más inteligente sería mediante muestreo: en lugar de descargar el archivo completo, el verificador puede pedir un subconjunto aleatorio de los bloques en el archivo y sus pruebas de inclusión Merkle. Si bien esto también funciona, el problema aquí es que la probabilidad de detectar bloques perdidos se ve directamente afectada por qué fracción de bloques $l_i$ se han perdido: si pedimos al SP $j$ muestras, entonces la probabilidad de que detectemos un bloque faltante es $p_{\text{detect}} = 1 - (1 - l_i)^j$. + +Aunque la decadencia es siempre geométrica, el impacto de tener una fracción de pérdida que es baja (por ejemplo, menos del $1%$) puede ser significativo: como se representa en la Figura 3, para $l_i = 0.01$ obtenemos un $p_{\text{detect}}$ que es menor que $0.5$ incluso después de extraer $50$ muestras. Si eso no suena tan mal, considere un entorno adversarial en el que un SP deliberadamente descarta una fracción muy pequeña de un archivo grande, quizás un solo bloque de un millón. Para fracciones tan pequeñas ($10^{-6}$), se requerirían cientos de miles de muestras para obtener probabilidades de detección razonables, por ejemplo, $p_{\text{detect}} > 0.99$.
-**Figure 3.** Number of samples $j$ required by a verifier to assert data loss ($p_{\text{detect}}$) for various loss fractions ($l_i$). - -The reason it is hard to detect loss is because we are attempting to find the perhaps single block that is missing out of $b$ blocks by random sampling. Erasure coding completely changes that dynamic in that _any_ $k$ out of $b$ blocks is enough to recover the data, so that only loss fractions that are larger than $k/b$ matter as any smaller fraction can be compensated by the erasure code. - -If we require SPs to _locally encode_ slots with a code rate [^wikipedia_code_rate] that is higher than $0.5$ so that a dataset with $b$ blocks expands to $2b$ and any $b$ blocks out of those are enough to recover the data, this means that data will only be lost if _more than half of the blocks_ are dropped, i.e., when $l_i \geq 0.5$. From Figure 3, we can see that in this case we approach $p_{\text{detect}} = 1$ with a very small number of samples: indeed, by looking at only $10$ samples, we already get $p_{\text{detect}} > 0.99$. The actual implementation in Codex borrows heavily from these ideas, though it requires SPs to use a somewhat more intrincate two-dimensional encoding structure for other technical reasons[^spanbroek_23]. +**Figura 3.** Número de muestras $j$ requeridas por un verificador para afirmar la pérdida de datos ($p_{\text{detect}}$) para varias fracciones de pérdida ($l_i$). + +La razón por la que es difícil detectar la pérdida es porque estamos intentando encontrar el quizás único bloque que falta de $b$ bloques mediante muestreo aleatorio. La codificación de borrado cambia completamente esa dinámica en el sentido de que cualquier $k$ de $b$ bloques es suficiente para recuperar los datos, de modo que sólo importan las fracciones de pérdida que son mayores que $k/b$, ya que cualquier fracción menor puede ser compensada por el código de borrado. -The final step for Codex proofs is that they need to be _publicly verifiable_. The actual proving mechanism in Codex constructs a Groth16[^groth_16] proof so that it can be verified on-chain; i.e., the verifiers are the public blockchain nodes themselves. The implementation has therefore both an on-chain component, which contains the logic to determine when proofs are required and when they are overdue, and an off-chain component, which runs periodically to trigger those at the right instants. +Si requerimos que los SP codifiquen localmente los slots con una tasa de código [^wikipedia_code_rate] que sea superior a 0.5, de modo que un conjunto de datos con $b$ bloques se expanda a $2b$ y cualquier $b$ bloques de esos sean suficientes para recuperar los datos, esto significa que los datos sólo se perderán si se descarta más de la mitad de los bloques, es decir, cuando $l_i \geq 0.5$. De la Figura 3, podemos ver que en este caso nos acercamos a $p_{\text{detect}} = 1$ con un número muy pequeño de muestras: de hecho, con sólo mirar 10 muestras, ya obtenemos $p_{\text{detect}} > 0.99$. La implementación real en Codex toma prestado mucho de estas ideas, aunque requiere que los SP utilicen una estructura de codificación bidimensional algo más intrincada por otras razones técnicas[^spanbroek_23]. -Algorithm 1 depicts, in Python-pseudocode, the _proving loop_ that SPs must run for every slot $S_i$ that they fill. It starts by waiting for a period boundary (line $7$), which is a fixed time slice that is larger than the average time between consecutive blocks in the target blockchain; i.e., the loop in lines $6$ -- $15$ runs _at most once_ per block. +El paso final para las pruebas de Codex es que necesitan ser verificables públicamente. El mecanismo de prueba real en Codex construye una prueba Groth16[^groth_16] para que pueda ser verificada on-chain; es decir, los verificadores son los propios nodos de la blockchain pública. Por tanto, la implementación tiene tanto un componente on-chain, que contiene la lógica para determinar cuándo se requieren las pruebas y cuándo están vencidas, como un componente off-chain, que se ejecuta periódicamente para activar aquellas en los instantes correctos. + +El Algoritmo 1 muestra, en pseudocódigo de Python, el bucle de prueba que los SP deben ejecutar para cada slot $S_i$ que completen. Comienza esperando un límite de período (línea 7), que es un segmento de tiempo fijo que es mayor que el tiempo promedio entre bloques consecutivos en la blockchain de destino; es decir, el bucle en las líneas 6 -- 15 se ejecuta como máximo una vez por bloque. -It then asks the on-chain contract if a proof is required for this period (line $8$). The contract will then execute Algorithm 2 (on-chain), which checks if the current blockhash modulo a `frequency` parameter (lines $3$) amounts to zero. Since hash values are approximately random, that condition will turn out to be true, on average, at every `frequency` blocks. +A continuación, pregunta al contrato on-chain si se requiere una prueba para este período (línea 8). El contrato ejecutará entonces el Algoritmo 2 (on-chain), que comprueba si el blockhash actual módulo un parámetro `frequency` (líneas 3) es igual a cero. Dado que los valores hash son aproximadamente aleatorios, esa condición resultará ser verdadera, en promedio, en cada `frequency` bloques. -Going back to Algorithm 1, if a proof turns out to be required for the current period, the SP will then retrieve a random value from the contract (line $9$), which is also derived from the current blockhash. +Volviendo al Algoritmo 1, si resulta que se requiere una prueba para el período actual, el SP recuperará entonces un valor aleatorio del contrato (línea 9), que también se deriva del blockhash actual. ```python= @@ -212,51 +212,51 @@ async def proving_loop( private = [slot_root, merkle_proofs] )) ``` -**Algorithm 1.** Codex's proving loop (ran on SPs, off-chain). +**Algoritmo 1.** Bucle de prueba de Codex (ejecutado en SPs, off-chain). -It then uses this randomness to determine the indices of the blocks within the locally erasure-coded slot that it needs to provide proofs for, and computes Merkle inclusion proofs for each (line $10$). The zero-knowledge proof is then constructed by running a verification of those inclusion proofs against the dataset root in a zk-SNARK, in which the randomness, the dataset (Merkle) root, and the slot index are taken as public inputs, and the inclusion proofs and the slot (Merkle) root are private instead (lines $12$ - $15$). Once the proof is calculated, it is posted on-chain (line $11$), where it is verified. +Luego, utiliza esta aleatoriedad para determinar los índices de los bloques dentro del slot codificado con borrado localmente para los que necesita proporcionar pruebas, y calcula las pruebas de inclusión Merkle para cada uno (línea $10$). La prueba de conocimiento cero se construye entonces ejecutando una verificación de esas pruebas de inclusión contra la raíz del conjunto de datos en un zk-SNARK, en el que la aleatoriedad, la raíz (Merkle) del conjunto de datos y el índice del slot se toman como entradas públicas, y las pruebas de inclusión y la raíz (Merkle) del slot son privadas en su lugar (líneas $12$ - $15$). Una vez que se calcula la prueba, se publica on-chain (línea $11$), donde se verifica. ```python= def is_proof_required() randomness = block.blockhash() return randomness % frequency == 0: ``` -**Algorithm 2.** Checking if a proof is required (ran on smart contract, on-chain). +**Algoritmo 2.** Comprobación de si se requiere una prueba (ejecutado en el contrato inteligente, on-chain). -Merkle trees for proof verification are built using $\text{Poseidon2}$ hashes[^grassi_23] as those are more efficient to compute inside arithmetic circuits than, say, SHA256, though this may change as we evolve the proving system. +Los árboles Merkle para la verificación de pruebas se construyen utilizando hashes $\text{Poseidon2}$[^grassi_23], ya que son más eficientes de calcular dentro de circuitos aritméticos que, por ejemplo, SHA256, aunque esto puede cambiar a medida que evolucionemos el sistema de pruebas. -**Repair.** The redundancy and proof mechanisms outlined so far allow Codex to _repair_ data in a relatively simple fashion: missing proofs signal lost slots, and are used as failure detectors. Whenever a threshold amount of slots are lost, a lazy repair process is triggered in which the lost slots are put back on sale. Providers are then allowed to fill such slots again but, instead of downloading the slot itself, they download enough blocks from other nodes so they can reconstruct the missing slot, say, $S_i$. They then proceed as before and submit a proof for $S_i$, causing that slot to be filled again. +**Reparación.** Los mecanismos de redundancia y prueba descritos hasta ahora permiten a Codex reparar los datos de una manera relativamente sencilla: las pruebas faltantes señalan los slots perdidos y se utilizan como detectores de fallos. Siempre que se pierde una cantidad umbral de slots, se activa un proceso de reparación perezoso en el que los slots perdidos se ponen a la venta de nuevo. Entonces se permite a los proveedores completar esos slots de nuevo, pero, en lugar de descargar el slot en sí, descargan suficientes bloques de otros nodos para poder reconstruir el slot faltante, digamos, $S_i$. A continuación, proceden como antes y envían una prueba para $S_i$, haciendo que ese slot se complete de nuevo. -The way Codex organizes its data as partitioned and erasure coded slots is largely inspired by HAIL[^bowers_09]. The use of local erasure coding and compact proofs is instead inspired by earlier work on PoRs[^juels_07] and PDPs[^ateniese_07], as well as compact PoRs[^schacham_08]. +La forma en que Codex organiza sus datos como slots particionados y codificados con borrado está en gran medida inspirada en HAIL[^bowers_09]. El uso de la codificación de borrado local y las pruebas compactas está en cambio inspirado en trabajos anteriores sobre PoRs[^juels_07] y PDPs[^ateniese_07], así como en PoRs compactos[^schacham_08]. -A key aspect of the Codex proving system is that it attempts to be as lightweight as possible. The final goal is to be able to run it on simple computers equipped with inexpensive CPUs and modest amounts of RAM. Current requirements for home SPs are well around what a NUC or consumer laptop can provide, but those should drop even further as we optimize it. This is key as an efficient proving system means that: - -1. both non-storage hardware; e.g. CPUs and RAM, and electricity overhead costs for proofs should be small. This leads to better margins for SPs; -2. minimal requirements are modest, which favours decentralization. - -### 4.4. Publishing and Retrieving Data +Un aspecto clave del sistema de pruebas de Codex es que intenta ser lo más ligero posible. El objetivo final es poder ejecutarlo en ordenadores sencillos equipados con CPUs económicas y cantidades modestas de RAM. Los requisitos actuales para los SP domésticos están muy por debajo de lo que puede proporcionar un NUC o un portátil de consumo, pero deberían disminuir aún más a medida que lo optimicemos. Esto es clave, ya que un sistema de pruebas eficiente significa que: -Datasets stored in Codex need to be advertised over a Distributed Hash Table (DHT), which is a flavour of the Kademlia DHT[^maymounkov_02], so they can be located and retrieved by other peers. At a basic level, the Codex DHT maps _Content IDentifiers_ (CIDs)[^cid_spec], which identify data, onto _provider lists_, which identify peers holding that data. +1. tanto el hardware que no es de almacenamiento, por ejemplo, las CPUs y la RAM, como los costes generales de electricidad para las pruebas deberían ser bajos. Esto conduce a mejores márgenes para los SP; +2. los requisitos mínimos son modestos, lo que favorece la descentralización. -A CID unequivocally identifies a piece of data by encoding a flavour of a hash of its content together with the type of hashing method used to compute it. In the case of a Codex dataset $D_e$ (Figure 4), this hash is taken to be the root of the SHA256 Merkle tree constructed over its blocks $\{b_1, \cdots, b_{s \times (k + m)}\}$. +### 4.4. Publicación y Recuperación de Datos + +Los conjuntos de datos almacenados en Codex deben anunciarse a través de una Tabla Hash Distribuida (DHT), que es una variante de la DHT Kademlia[^maymounkov_02], para que puedan ser localizados y recuperados por otros pares. A un nivel básico, la DHT de Codex asigna los Identificadores de Contenido (CIDs)[^cid_spec], que identifican los datos, a las listas de proveedores, que identifican a los pares que tienen esos datos. + +Un CID identifica inequívocamente una pieza de datos codificando una variante de un hash de su contenido junto con el tipo de método de hashing utilizado para calcularlo. En el caso de un conjunto de datos Codex $D_e$ (Figura 4), este hash se toma como la raíz del árbol Merkle SHA256 construido sobre sus bloques ${b_1, \cdots, b_{s \times (k + m)}}$.
-**Figure 4.** CIDs for Codex datasets. - -Nodes that hold either part or the entirety of $D_e$ will periodically advertise a _Signed Peer Record_ (SPR) under $D_e$'s CID in the DHT to inform other peers that they are available to provide blocks for $D_e$. An SPR is a signed record[^signed_envelope_spec] which contains the peer's ID, its public key, and its supported network addresses as a list of multiaddresses[^multiaddress_spec]. +**Figure 4.** CIDs para conjuntos de datos Codex. -This structure affords a great deal of flexibility in how peers choose to communicate and encode datasets, and is key in creating a p2p network which can support multiple concurrent p2p client versions and can therefore be upgraded seamlessly. - -**Metadata.** Codex stores dataset metadata in descriptors called **manifests**. Those are currently kept separate from the dataset itself, in a manner similar to BitTorrent's _torrent files_. They contain metadata on a number of attributes required to describe and properly process the dataset, such as the Merkle roots for both the content (SHA256) and proof ($\text{Poseidon2}$) trees, the number of blocks contained in the dataset, the block size, erasure coding parameters, and the datasets' MIME-type. Although the CID of a dataset is largely independent of its manifest, a dataset can neither be decoded nor properly verified without it. +Los nodos que tienen parte o la totalidad de $D_e$ anunciarán periódicamente un Registro de Par Firmado (SPR) bajo el CID de $D_e$ en la DHT para informar a otros pares de que están disponibles para proporcionar bloques para $D_e$. Un SPR es un registro firmado[^signed_envelope_spec] que contiene el ID del par, su clave pública y sus direcciones de red admitidas como una lista de multiaddresses[^multiaddress_spec]. + +Esta estructura ofrece una gran flexibilidad en la forma en que los pares eligen comunicarse y codificar los conjuntos de datos, y es clave para crear una red p2p que pueda admitir múltiples versiones concurrentes de clientes p2p y, por lo tanto, pueda actualizarse sin problemas. -Manifests are currently stored as content-addressable blocks in Codex and treated similarly to datasets: nodes holding the manifest of a given dataset will advertise its CID onto the DHT, which is computed by taking a SHA256 hash of the manifest's contents. Since manifests are stored separate from the dataset, however, they can also be exchanged out-of-band, like torrent files can. +**Metadata.** Codex almacena los metadatos del conjunto de datos en descriptores llamados manifiestos. Actualmente, estos se mantienen separados del conjunto de datos en sí, de forma similar a los archivos torrent de BitTorrent. Contienen metadatos sobre varios atributos necesarios para describir y procesar correctamente el conjunto de datos, como las raíces Merkle tanto para los árboles de contenido (SHA256) como de prueba ($\text{Poseidon2}$), el número de bloques contenidos en el conjunto de datos, el tamaño del bloque, los parámetros de codificación de borrado y el tipo MIME de los conjuntos de datos. Aunque el CID de un conjunto de datos es en gran medida independiente de su manifiesto, un conjunto de datos no puede decodificarse ni verificarse correctamente sin él. -Other systems choose tighter coupling between the metadata and the dataset. IPFS and Swarm use cryptographic structures such as Merkle DAG and a Merkle Tree, where intermediate nodes are placed on the network and queried iteratively to retrieve the respective vertexes and leaves. Such design decisions have their own tradeoffs and advantages, for example an advantage of storing the metadata in a single addressable unit is that it eliminates intermediary network round trips, as opposed to a distributed cryptographic structure such as a tree or a DAG. +Los manifiestos se almacenan actualmente como bloques direccionables por contenido en Codex y se tratan de forma similar a los conjuntos de datos: los nodos que tienen el manifiesto de un conjunto de datos determinado anunciarán su CID en la DHT, que se calcula tomando un hash SHA256 del contenido del manifiesto. Sin embargo, dado que los manifiestos se almacenan separados del conjunto de datos, también se pueden intercambiar fuera de banda, como se pueden hacer con los archivos torrent. -**Retrieving data.** Data retrieval in Codex follows a process similar to BitTorrent: a peer wishing to download a dataset $D_e$ must first acquire its manifest, either through Codex itself by looking up the manifest's CID on the DHT and downloading it from peers providing it, or out-of-band. Once in posession of the manifest, the peer can learn the dataset's CID (constructed from its SHA256 Merkle root) and look that up over the DHT. This is depicted Figure 5a **(1)**. +Otros sistemas eligen un acoplamiento más estrecho entre los metadatos y el conjunto de datos. IPFS y Swarm utilizan estructuras criptográficas como Merkle DAG y un árbol Merkle, donde los nodos intermedios se colocan en la red y se consultan iterativamente para recuperar los vértices y las hojas respectivos. Tales decisiones de diseño tienen sus propios compromisos y ventajas, por ejemplo, una ventaja de almacenar los metadatos en una única unidad direccionable es que elimina los viajes de ida y vuelta de la red intermediaria, a diferencia de una estructura criptográfica distribuida como un árbol o un DAG. + +**Recuperación de datos.** La recuperación de datos en Codex sigue un proceso similar a BitTorrent: un par que desee descargar un conjunto de datos $D_e$ primero debe adquirir su manifiesto, ya sea a través de Codex buscando el CID del manifiesto en la DHT y descargándolo de los pares que lo proporcionan, o fuera de banda. Una vez en posesión del manifiesto, el par puede aprender el CID del conjunto de datos (construido a partir de su raíz Merkle SHA256) y buscarlo en la DHT. Esto se representa en la Figura 5a (1).
@@ -269,55 +269,55 @@ Other systems choose tighter coupling between the metadata and the dataset. IPFS
-**Figure 5.** (a) DHT lookup and (b) download swarm. +**Figura 5.** (a) Búsqueda en la DHT y (b) enjambre de descarga. -The nodes responsible for that CID will reply with a (randomized) subset of the providers for that CID (Figure 5a **(2)**). The peer can then contact these nodes to bootstrap itself into a download swarm (Figure 5b). Once part of the swarm, the peer will engage in an exchange protocol similar to BitSwap[^bitswap_spec] by advertising the blocks it wishes to download to neighbors, and receiving requests from neighbors in return. Dropped peers are replaced by querying the DHT again. Note that SPs always participate in the swarms for the datasets they host, acting as seeders. Since the mechanism is so similar to BitTorrent, we expect Codex to scale at least as well. - -Codex right now relies on simple incentive mechanisms to ensure that peers share blocks. There is current ongoing work on _bandwidth incentives_ and, in future versions, peers will be able to purchase block transfers from each other. +Los nodos responsables de ese CID responderán con un subconjunto (aleatorizado) de los proveedores para ese CID (Figura 5a (2)). El par puede entonces contactar con estos nodos para integrarse en un enjambre de descarga (Figura 5b). Una vez que forma parte del enjambre, el par participará en un protocolo de intercambio similar a BitSwap[^bitswap_spec] anunciando los bloques que desea descargar a los vecinos, y recibiendo peticiones de los vecinos a cambio. Los pares que se desconectan se sustituyen volviendo a consultar la DHT. Tenga en cuenta que los SP siempre participan en los enjambres para los conjuntos de datos que alojan, actuando como seeders. Dado que el mecanismo es tan similar a BitTorrent, esperamos que Codex escale al menos igual de bien. + +Codex ahora mismo se basa en mecanismos de incentivos sencillos para garantizar que los pares compartan bloques. Actualmente se está trabajando en incentivos de ancho de banda y, en futuras versiones, los pares podrán comprar transferencias de bloques entre sí. -### 4.5. Codex Marketplace +### 4.5. Mercado de Codex -The Codex marketplace is the set of components that run both on-chain, as smart contracts, and off-chain, as part of both SCs and SPs. Its main goal is to define and enforce the set of rules which together enable: _i)_ orderly selling and purchasing of storage; _ii)_ verification of storage proofs; _iii)_ rules for penalizing faulty actors (slashing) and compensating SP repairs and SC data loss; and _iv)_ various other aspects of the system's economics, which will be discussed as part of an upcoming Codex tokenomics litepaper. +El mercado de Codex es el conjunto de componentes que se ejecutan tanto on-chain, como contratos inteligentes, como off-chain, como parte de ambos SCs y SPs. Su principal objetivo es definir y hacer cumplir el conjunto de reglas que, juntas, permiten: i) la venta y compra ordenada de almacenamiento; ii) la verificación de las pruebas de almacenamiento; iii) las reglas para penalizar a los actores defectuosos (slashing) y compensar las reparaciones de SP y la pérdida de datos de SC; y iv) varios otros aspectos de la economía del sistema, que se discutirán como parte de un próximo litepaper de tokenomics de Codex. -Codex implements an ask/bid market in which SCs post **storage requests** on chain, and SPs can then act on those if they turn out to be profitable. This means that the request side; i.e., how much an SC is willing to pay, is always visible, whereas the bid side; i.e., at what price an SP is willing to sell, is not. - -An SC that wishes Codex to store a dataset $D_e$ needs to provide $5$ main parameters. Those are: - -1. **Size in bytes.** Specifies how many storage bytes the SC wishes to purchase. -2. **Duration.** Specifies for how long the SC wishes to purchase the storage bytes in (1); e.g. one year. -3. **Number of slots.** Contains the number of slots in $D_e$. This is derived from the erasure coding parameters $k$ and $m$ discussed in Sec. 4.3. -4. **Price.** The price this SC is willing to pay for storage, expressed as a fractional amount of Codex tokens per byte, per second. For instance, if this is set to $1$ and the SC wants to buy $1\text{MB}$ of storage for $10$ seconds, then this means the SC is willing to disburse $10$ million Codex tokens for this request. -5. **Collateral per slot.** Dictates the amount of Codex tokens that the SP is expected to put as collateral if they decide to fulfill a slot in this request (staking). Failure to provide timely proofs may result in loss of this collateral (slashing). +Codex implementa un mercado de ask/bid en el que los SCs publican solicitudes de almacenamiento en la cadena, y los SPs pueden entonces actuar sobre ellas si resultan ser rentables. Esto significa que el lado de la solicitud; es decir, cuánto está dispuesto a pagar un SC, es siempre visible, mientras que el lado de la oferta; es decir, a qué precio está dispuesto a vender un SP, no lo es. -As discussed in Sec. 5, these parameters may impact durability guarantees directly, and the system offers complete flexibility so that applications can tailor spending and parameters to specific needs. Applications built on Codex will need to provide guidance to their users so they can pick the correct parameters for their needs, not unlike Ethereum wallets help users determine gas fees. +Un SC que desea que Codex almacene un conjunto de datos $D_e$ necesita proporcionar 5 parámetros principales. Estos son: + +1. Tamaño en bytes. Especifica cuántos bytes de almacenamiento desea comprar el SC. +2. Duración. Especifica durante cuánto tiempo desea comprar el SC los bytes de almacenamiento en (1); por ejemplo, un año. +3. Número de slots. Contiene el número de slots en $D_e$. Esto se deriva de los parámetros de codificación de borrado $k$ y $m$ discutidos en la Sec. 4.3. +4. Precio. El precio que este SC está dispuesto a pagar por el almacenamiento, expresado como una cantidad fraccionaria de tokens Codex por byte, por segundo. Por ejemplo, si esto se establece en $1$ y el SC quiere comprar $1\text{MB}$ de almacenamiento durante $10$ segundos, entonces esto significa que el SC está dispuesto a desembolsar $10$ millones de tokens Codex para esta solicitud. +5. Colateral por slot. Dicta la cantidad de tokens Codex que se espera que el SP ponga como colateral si deciden cumplir un slot en esta solicitud (staking). El no proporcionar pruebas oportunas puede resultar en la pérdida de este colateral (slashing). + +Como se explica en la Sec. 5, estos parámetros pueden afectar directamente a las garantías de durabilidad, y el sistema ofrece una flexibilidad completa para que las aplicaciones puedan adaptar el gasto y los parámetros a necesidades específicas. Las aplicaciones construidas sobre Codex deberán proporcionar orientación a sus usuarios para que puedan elegir los parámetros correctos para sus necesidades, de forma no muy diferente a como las carteras de Ethereum ayudan a los usuarios a determinar las tasas de gas.
-**Figure 6.** Storage requests and their processing by SPs. +**Figura 6.** Solicitudes de almacenamiento y su procesamiento por los SPs -As depicted in Figure 6, every storage request posted by an SC gets recorded on-chain, and generates a blockchain event that SPs listen to. Internally, SPs will rank unfilled storage requests by their own criteria, typically profitability, and will attempt to fill the slots for requests that are most interesting to them first. As discussed in Sec. 4.2, filling a slot entails: _i)_ reserving the slot on-chain; _ii)_ downloading the data from the SC; _iii)_ providing an initial storage proof as well as the staking collateral. +Como se muestra en la Figura 6, cada solicitud de almacenamiento publicada por un SC queda registrada on-chain y genera un evento de blockchain que los SPs escuchan. Internamente, los SPs clasificarán las solicitudes de almacenamiento sin completar según sus propios criterios, normalmente la rentabilidad, e intentarán completar primero los slots para las solicitudes que les resulten más interesantes. Como se explica en la Sec. 4.2, completar un slot implica: i) reservar el slot on-chain; ii) descargar los datos del SC; iii) proporcionar una prueba de almacenamiento inicial, así como la garantía de staking. -**Ensuring diversity.** SPs compete for unfilled slots. If we allowed this competition to happen purely based on latency; i.e., the fastest provider to reserve a slot wins, we could easily end up with a system that is too centralized or, even worse, with multiple slots ending up at a single provider. The latter is particularly serious as failures within a provider may not be decorrelated, and we therefore want to ensure that the distribution of slots amongst providers is as randomized as possible. +**Garantizar la diversidad.** Los SPs compiten por los slots sin completar. Si permitiéramos que esta competencia se produjera puramente basándose en la latencia; es decir, el proveedor más rápido en reservar un slot gana, podríamos fácilmente terminar con un sistema demasiado centralizado o, incluso peor, con múltiples slots terminando en un solo proveedor. Esto último es particularmente grave, ya que los fallos dentro de un proveedor pueden no estar descorrelacionados y, por lo tanto, queremos asegurar que la distribución de slots entre los proveedores sea lo más aleatoria posible. -To help mitigate these issues, the Codex marketplace implements a time-based, _expanding window_ mechanism to allow SPs to compete for slots. As depicted in Figure 7, each storage request is assigned a random position in a $z$-bit ID space by taking a hashing function $h$ and computing, for slot $S_i$, the value $h(u\,\|\, i)$, where $u$ is a random nonce. This will effectively disperse storage requests for slots approximately uniformly at random over the ID space. +Para ayudar a mitigar estos problemas, el mercado de Codex implementa un mecanismo de ventana en expansión basado en el tiempo para permitir que los SPs compitan por los slots. Como se muestra en la Figura 7, a cada solicitud de almacenamiento se le asigna una posición aleatoria en un espacio de ID de $z$ bits tomando una función hash $h$ y calculando, para el slot $S_i$, el valor $h(u,|, i)$, donde $u$ es un nonce aleatorio. Esto dispersará efectivamente las solicitudes de almacenamiento para los slots de forma aproximadamente uniforme y aleatoria sobre el espacio de ID.
-**Figure 7.** Slots placed at random in a $z$-bit space. +**Figura 7.** Slots colocados aleatoriamente en un espacio de $z$ bits. -We then allow only hosts whose blockchain IDs are within a certain "distance" of a slot to compete in filling it (Figure 8). +A continuación, permitimos que sólo los hosts cuyos IDs de blockchain estén dentro de una cierta "distancia" de un slot compitan por completarlo (Figura 8).
-**Figure 8.** SP eligibility as a function of time and its distance to a slot. +**Figura 8.** Elegibilidad de SP en función del tiempo y su distancia a un slot. -This distance expands over time according to a _dispersal parameter_ $\mu$. Let $d: \{0,1\}^z \times \{0,1\}^z \longrightarrow [0, 2^z)$ be our distance function - we could for instance take the XOR of $a$ and $b$. A host with blockchain ID $b$ will only be allowed to fill a slot at position $a$ at time $t$ if: +Esta distancia se expande con el tiempo según un parámetro de dispersión $\mu$. Sea $d: {0,1}^z \times {0,1}^z \longrightarrow [0, 2^z)$ nuestra función de distancia - podríamos, por ejemplo, tomar el XOR de $a$ y $b$. A un host con ID de blockchain $b$ sólo se le permitirá completar un slot en la posición $a$ en el tiempo $t$ si: $$ \begin{equation} @@ -325,94 +325,100 @@ $$ \end{equation}\tag{1} $$ -where $t = 0$ at the moment in which the storage request for $a$ is published. In the example in Figure 8, host $b$ will be allowed to fill slot $a$ when $t \geq 2$, whereas host $c$ will only be allowed to try once $t \geq 3$. We will not attempt to formally prove this but, under relatively weak assumptions, this guarantees that the assignments of slots to SPs happens approximately uniformly at random. +donde $t = 0$ en el momento en que se publica la solicitud de almacenamiento para $a$. En el ejemplo de la Figura 8, al host $b$ se le permitirá completar el slot $a$ cuando $t \geq 2$, mientras que al host $c$ sólo se le permitirá intentarlo una vez que $t \geq 3$. No intentaremos probar esto formalmente, pero, bajo supuestos relativamente débiles, esto garantiza que la asignación de slots a los SPs se produzca de forma aproximadamente uniforme y aleatoria. -## 5. Reliability Analysis +## 5. Análisis de fiabilidad -In this section, we provide an initial analysis of durability for Codex. The main goal is investigating the values for $p_{\text{loss}}$, our probability of losing data over a 1-year period. In particular, we are interested in understanding what sorts of parameters are required for us to obtain very high levels of reliability (e.g. $p_{\text{loss}} = 10^{-9}$, or nine nines of availability). - -Codex, as a system, stores a large amount of datasets, each encoded, distributed, verified, and repaired according to the specific parameters set up in the respective storage contract. Since datasets are set up independently and operate (mostly) independently, we can model the system at the level of the dataset. We will later discuss correlation between various datasets stored in the system. +En esta sección, proporcionamos un análisis inicial de la durabilidad para Codex. El objetivo principal es investigar los valores para $p_{\text{loss}}$, nuestra probabilidad de perder datos durante un período de 1 año. En particular, estamos interesados en comprender qué tipo de parámetros se requieren para que podamos obtener niveles muy altos de fiabilidad (por ejemplo, $p_{\text{loss}} = 10^{-9}$, o nueve nueves de disponibilidad). + +Codex, como sistema, almacena una gran cantidad de conjuntos de datos, cada uno codificado, distribuido, verificado y reparado de acuerdo con los parámetros específicos establecidos en el contrato de almacenamiento respectivo. Dado que los conjuntos de datos se configuran de forma independiente y operan (en su mayoría) de forma independiente, podemos modelar el sistema a nivel del conjunto de datos. Más adelante hablaremos de la correlación entre varios conjuntos de datos almacenados en el sistema. -In our first model, we use a Continuous Time Markov-Chain (CTMC) model to describe the state of the dataset at any time instance. The model considers the following aspects of Codex: -- dataset encoding; -- node failures; -- the proving process; -- dataset repair. +En nuestro primer modelo, utilizamos un modelo de Cadena de Markov de Tiempo Continuo (CTMC) para describir el estado del conjunto de datos en cualquier instante de tiempo. El modelo considera los siguientes aspectos de Codex: -Before discussing the state space and the rate matix of the CTMC model, lets describe these aspects of the system. +* codificación de datos; +* fallos de nodo; +* el proceso de prueba; +* reparación de conjuntos de datos. + +Antes de discutir el espacio de estados y la matriz de tasas del modelo CTMC, vamos a describir estos aspectos del sistema. -As before, we assume a dataset $D$ split into $k$ disjoint partitions, and encoded into a new dataset $D_e$ with $n=k+m$ slots $\{S_1, \cdots, S_k , \cdots, S_{k+m}\}$. This encoding is often characterized by it's code expansion factor $e = n/k =1+m/k$, expressing the storage overhead due to code redundancy. +Como antes, asumimos un conjunto de datos $D$ dividido en $k$ particiones disjuntas, y codificado en un nuevo conjunto de datos $D_e$ con $n=k+m$ slots ${S_1, \cdots, S_k , \cdots, S_{k+m}}$. Esta codificación se caracteriza a menudo por su factor de expansión de código $e = n/k =1+m/k$, que expresa la sobrecarga de almacenamiento debido a la redundancia del código. -### 5.1. Failure Model +### 5.1. Modelo de fallo + +Al hablar de fallos, debemos diferenciar entre fallos transitorios y permanentes, así como entre fallos catastróficos de nodos (los datos del slot se pierden por completo) y fallos parciales. -When discussing failures, we should differentiate between transient and permanent failures, as well as between catastrophic node failures (the slot data is entirely lost) and partial failures. +En nuestro primer modelo, nos centramos en fallos permanentes de los nodos. Desde la perspectiva de Codex, se considera que un nodo se ha perdido si no puede proporcionar pruebas. El fallo permanente de un nodo puede deberse a un fallo del disco, a otros fallos de hardware o software que conduzcan a la corrupción de los datos, pero también a riesgos operativos, incluidos los fallos de hardware, los fallos de red o las decisiones operativas. -In our first model, we focus on permanent node failures. From the perspective of Codex, a node is considered lost if it cannot provide proofs. Permanent node failure can be due to disk failure, to other hardware or software failures leading to data corruption, but also due to operational risks, including hardware failures, network failures, or operational decisions. +Los fallos de hardware irreparables se suelen caracterizar con su métrica MTTF (Mean Time To Failure - Tiempo Medio Hasta el Fallo), asumiendo una distribución exponencial del tiempo hasta el fallo. Existen varias estadísticas de MTTF disponibles sobre los fallos de disco[^schroeder_07]. -Unrepairable hardware failures are typically characterized with their **MTTF** (Mean Time To Failure) metric, assuming an exponential distribution of the time to failure. There are various MTTF statistics available about disk failures[^schroeder_07]. +Como primera aproximación, uno podría partir de las cifras de MTTF de disco anteriores, e intentar tener en cuenta otras razones de fallos permanentes de nodos. El MTTF de disco se especifica en el rango de 1e+6 horas, sin embargo, tenemos buenas razones para ser más pesimistas, o al menos errar en el lado más poco fiable, y asumir un MTTF en el rango de 1e+4 horas, es decir, alrededor de un año. -As a first approximation, one could start from the above disk MTTF numbers, and try to factor in other reasons of permanent node failures. Disk MTTF is specified in the range of 1e+6 hours, however, we have good reasons to be more pessimistic, or at least err on the more unreliable side, and assume MTTF in the 1e+4 hour range, i.e. around a year. +En aras de la modelización, también asumimos fallos i.i.d. (independientes e idénticamente distribuidos) entre el conjunto de nodos que almacenan un determinado conjunto de datos. Este es un modelo optimista en comparación con los casos en los que algunos proveedores de almacenamiento podrían fallar juntos, por ejemplo, por estar en un hardware compartido, en el mismo centro de datos o por estar bajo la misma autoridad administrativa. Modelaremos estos eventos correlacionados en un documento aparte. -For the sake of modeling, we also assume i.i.d. (independent and identically distributed) failures among the set of nodes storing a given dataset. This is an optimistic model compared to cases where some storage providers might fail together e.g. because of being on shared hardware, in the same data center, or being under the same administrative authority. We will model these correlated events in a separate document. +También podría haber nodos maliciosos en el conjunto de proveedores de almacenamiento, por ejemplo, reteniendo datos cuando se requiriera la reconstrucción. De nuevo, ampliaremos el modelo para estos en un documento aparte. -There might also be malicious nodes in the set of storage providers, e.g. withholding data when reconstruction would be required. Again, we will extend the model to these in a separate document. +### 5.2. de reconstrucción -### 5.2. Reconstruction Model +El siguiente parámetro importante relacionado con el tiempo del modelo es el MTTR (Mean Time To Reconstruct - Tiempo Medio Para Reconstruir). Si bien modelamos los eventos a nivel de un solo conjunto de datos, es importante tener en cuenta aquí que un evento de fallo probablemente involucra discos enteros o nodos enteros con múltiples discos, con muchos conjuntos de datos y una gran cantidad de datos. Por lo tanto, en el caso de la reconstrucción, los procesos estocásticos de conjuntos de datos individuales no son independientes entre sí, lo que lleva a tiempos de reconstrucción más altos e inciertos. -The next important time related parameter of the model is **MTTR** (Mean Time To Reconstruct). While we model events at the level of a single dataset, it is important to note here that a failure event most probably involves entire disks or entire nodes with multiple disks, with many datasets and a large amount of data. Therefore, in the case of reconstruction, the stochastic processes of individual datasets are not independent of each other, leading to higher and uncertain reconstruction times. +El tiempo real de reparación depende de varios factores: -The actual repair time depends on a number of factors: -- time to start repairing the dataset, -- data transmission for the purposes of Erasure Code decoding, -- EC decoding itself, -- allocating the new nodes to hold the repaired blocks, -- distributing repaired data to the allocated nodes. +- tiempo para comenzar a reparar el conjunto de datos, +- transmisión de datos para fines de decodificación de código de borrado, +- la propia decodificación EC, +- asignación de los nuevos nodos para albergar los bloques reparados, +- distribución de datos reparados a los nodos asignados. -Overall, it is clearly not easy to come up with a reasonable distribution for the time of repair, not even the mean time of repair. While time to repair is most probably not an exponential distribution, we model it as such in a first approximation to allow Markov Chain based modeling. +En general, claramente no es fácil obtener una distribución razonable para el tiempo de reparación, ni siquiera el tiempo medio de reparación. Si bien es muy probable que el tiempo de reparación no sea una distribución exponencial, la modelamos como tal en una primera aproximación para permitir la modelización basada en la cadena de Markov. -### 5.3. Triggering Reconstruction +### 5.3. Activación de la reconstrucción + +La reconstrucción y la reasignación de slots se pueden activar mediante el estado observado, y nuestro sistema "observa" el estado a través del proceso de prueba. En nuestro modelo, asumimos que los nodos proporcionan pruebas de acuerdo con un proceso aleatorio con una distribución exponencial entre los tiempos de prueba, con una media de MTBF (Mean Time Between Proofs - Tiempo Medio Entre Pruebas), i.i.d. entre nodos. También son posibles otras distribuciones, pero en aras de la modelización, comenzamos con una distribución exponencial, que también es sencilla de implementar en la práctica. + +La reconstrucción se puede activar en función del estado observado de varias maneras: -Reconstruction and re-allocation of slots can be triggered by the observed state, and our system "observes" state through the proving process. In our model, we assume that nodes are providing proofs according to a random process with an exponential distribution between proving times, with **MTBF** (Mean Time Between Proofs) mean, i.i.d. between nodes. Other distributions are also possible, but for the sake of modelling we start with an exponential distribution, which is also simple to implement in practice. +- si a un nodo individual le falta una prueba de slot (o, más generalmente, una serie de pruebas), se puede iniciar la reconstrucción. La ventaja de esta opción es que las consecuencias de fallar una prueba sólo dependen del propio nodo, y no de otros nodos. +- la reconstrucción también se puede activar mediante el estado del sistema observado, es decir, el número de nodos que han perdido la última prueba (o más en general, algunas de las últimas pruebas). De hecho, gracias a las propiedades de los códigos RS, siempre que se está reparando un slot, todos los datos del slot se regeneran. Como consecuencia, el coste de la reparación es independiente del número de slots que se estén reparando, y al activar la reparación sólo después de que se observan varios slots perdidos (la llamada "reparación perezosa"), podemos reducir drásticamente el coste de la reparación. -Reconstruction can be triggered based on the observed state in various ways: -- if an individual node is missing a slot proof (or more generally, a series of proofs), reconstruction can start. The advantage of this option is that the consequences of failing a proof only depend on the node itself, and not on other nodes. -- reconstruction can also be triggered by the observed system state, i.e. the number of nodes that have missed the last proof (or more in general some of the last proofs). In fact, thanks to the properties of RS codes, whenever a slot is being repaired, all slot's data are regenerated. As a consequence, the cost of repair is independent of the number of slots being repaired, and by triggering repair only after multiple slots are observed lost (the so called "lazy repair"), we can drastically reduce the cost of repair. +En nuestro modelo, asumimos una reconstrucción que utiliza una combinación de los dos activadores anteriores. -In our model, we assume reconstruction that uses a combination of the above too triggers. -- Reconstruction is triggered based on the observed system state, allowing for lazy repair, by triggering it when $l_0$ of the slots is considered lost. -- A single slot is considered lost if it was missing the last $l_1$ proofs. +- La reconstrucción se activa en función del estado del sistema observado, lo que permite una reparación perezosa, activándola cuando $l_0$ de los slots se consideran perdidos. +- Se considera que un solo slot se ha perdido si le faltó la última $l_1$ pruebas. -Other reconstruction strategies, such as considering all the proofs from all the slots in a time window, are also possible, but we leave these for further study. +También son posibles otras estrategias de reconstrucción, como considerar todas las pruebas de todos los slots en una ventana de tiempo, pero las dejamos para un estudio posterior. -### 5.4. CTMC Model +### 5.4. Modelo CTMC -We model the system using a CTMC with a multi-dimensional state space representing slot status and proof progress. To keep the description simple, we introduce the model for the case of $l_1 = 1$ here. An extension to $l_1 > 1$ is possible by increasing the dimensions of the state space to $1+l_1$. +Modelamos el sistema utilizando un CTMC con un espacio de estados multidimensional que representa el estado del slot y el progreso de la prueba. Para mantener la descripción sencilla, introducimos aquí el modelo para el caso de $l_1 = 1$. Una extensión a $l_1 > 1$ es posible aumentando las dimensiones del espacio de estados a $1+l_1$. -**State space.** We model the system with a multi-dimensional state space $S_{l,f}$ with the following dimensions: -- losses: $l \in [0, \cdots, m+1]$: the number of lost slots. Practical values of $l$ go from $0$ to $m$. As soon as $l$ reaches $m+1$, the dataset can be considered lost. -- observations: $f \in [0, \cdots, l]$ is the number of slots with the last test failed, or in other words, observed losses. Repair is triggered when $l \ge l_0$. Since repair reallocates slots to new nodes, we can assume that repaired slots are all available after the process. Hence, $f \le l$ in all reachable states. +**Espacio de estados.** Modelamos el sistema con un espacio de estados multidimensional $S_{l,f}$ con las siguientes dimensiones: -**State transition rates.** From a given state $S_{l,f}$ we can get to the following states: -- slot loss, $S_{l+1,f}$: slot loss is driven by MTTF, assuming i.i.d slot losses. Obviously, only available slots can be lost, so the transition probability also depends on $n-l$. -- missing proofs, $S_{l,f+1}$: we are only interested in the event of observing the loss of a slot that we haven't seen before. Thus, the state transition probability depends on $f-l$. -- repair, $S_{0,0}$: repair is only triggered once the number of observed losses reaches the lazy repair threshold $l_0$. In case of a successful repair, all slots are fully restored (even if the actual set of nodes storing the slots are changing). +- pérdidas: $l \in [0, \cdots, m+1]$: el número de slots perdidos. Los valores prácticos de $l$ van de $0$ a $m$. En cuanto $l$ alcanza $m+1$, el conjunto de datos puede considerarse perdido. +observaciones: $f \in [0, \cdots, l]$ es el número de slots con la última prueba fallida, o dicho de otro modo, las - - pérdidas observadas. La reparación se activa cuando $l \ge l_0$. Dado que la reparación reasigna slots a nuevos nodos, podemos asumir que todos los slots reparados están disponibles después del proceso. Por lo tanto, $f \le l$ en todos los estados alcanzables. + +**Tasas de transición de estado.** Desde un estado dado $S_{l,f}$ podemos llegar a los siguientes estados: + +- pérdida de slot, $S_{l+1,f}$: la pérdida de slot está impulsada por el MTTF, asumiendo pérdidas de slot i.i.d. Obviamente, sólo se pueden perder los slots disponibles, por lo que la probabilidad de transición también depende de $n-l$. +- pruebas faltantes, $S_{l,f+1}$: sólo nos interesa el evento de observar la pérdida de un slot que no hemos visto antes. Por lo tanto, la probabilidad de transición de estado depende de $f-l$. +- reparación, $S_{0,0}$: la reparación sólo se activa una vez que el número de pérdidas observadas alcanza el umbral de reparación perezosa $l_0$. En caso de una reparación exitosa, todos los slots se restauran completamente (incluso si el conjunto real de nodos que almacenan los slots está cambiando). -States $S_{M+1,f}$ for each $f$ are absorbing states. By calculating the expected time of absorption, we can quantify the reliability of the system. +Los estados $S_{M+1,f}$ para cada $f$ son estados de absorción. Calculando el tiempo esperado de absorción, podemos cuantificar la fiabilidad del sistema.
-**Figure 9.** $p_{\text{loss}}$ (y axis) as a function of $n$ for various values of $l_0$ and expansion factors ($e$). +**Figura 9.** $p_{\text{loss}}$ (eje y) en función de $n$ para varios valores de $l_0$ y factores de expansión ($e$). -Figure 9 shows dataset reliability ($p_{\text{loss}}$) as a function of $n$, the number of slots, assuming an MTTF of 1 year and an MTTR of 24 hours. We set the repair frequency (MTBR) to 24 hours, and explore various options on the code expansion factor $e$ and the lazy repair threshold $l_0$. Clearly, adding more redundancy (using an RS code with a higher expansion factor) allows us to store a dataset on fewer SPs. As expected lazy repair requires the use of more SPs, but reduces repair cost by delaying repair. +La Figura 9 muestra la fiabilidad del conjunto de datos ($p_{\text{loss}}$) en función de $n$, el número de slots, asumiendo un MTTF de 1 año y un MTTR de 24 horas. Establecemos la frecuencia de reparación (MTBR) en 24 horas, y exploramos varias opciones en el factor de expansión de código $e$ y el umbral de reparación perezosa $l_0$. Claramente, añadir más redundancia (utilizando un código RS con un factor de expansión más alto) nos permite almacenar un conjunto de datos en menos SPs. Como se esperaba, la reparación perezosa requiere el uso de más SPs, pero reduce el coste de la reparación al retrasarla. -The figure also shows what $k$ and $m$ values are needed to reach a given reliability threshold under different expansion factors and lazy repair thresholds. For example, values for a failure probability in a year of $10^{-9}$, also called "nine nines" reliability, are summarized in Table 1. +La figura también muestra qué valores de $k$ y $m$ son necesarios para alcanzar un determinado umbral de fiabilidad bajo diferentes factores de expansión y umbrales de reparación perezosa. Por ejemplo, los valores para una probabilidad de fallo en un año de $10^{-9}$, también llamada fiabilidad de "nueve nueves", se resumen en la Tabla 1.
-| Expansion ($e$) | Lazy repair ($l_0$) |Required k + m| +| Expansión ($e$) | Reparación perezosa ($l_0$) |k + m Requerido| |:---------------:|:-------------------:|:------------:| | 1.5 | 1 | 18 + 9 | | 2 | 1 | 7 + 7 | @@ -423,47 +429,45 @@ The figure also shows what $k$ and $m$ values are needed to reach a given reliab
-**Table 1.** Expansion, lazy repair, and required values for $k$ and $m$ to achieve $p_{\text{loss}} = 10^{-9}$ +**Table 1.** Expansión, reparación perezosa y valores requeridos para $k$ y $m$ para lograr $p_{\text{loss}} = 10^{-9}$ -### 5.5 Proving frequency +### 5.5 Frecuencia de prueba -An important parameter to asses is the frequency of proofs, expressed in our model as MTBP, since it directly translates into proof generation and proof submission costs. If we could double MTBP, we could halve the associated costs. +Un parámetro importante para evaluar es la frecuencia de las pruebas, expresada en nuestro modelo como MTBP, ya que se traduce directamente en costes de generación y envío de pruebas. Si pudiéramos duplicar el MTBP, podríamos reducir a la mitad los costes asociados.
-**Figure 10.** $p_{\text{loss}}$ (y axis) as a function of the proof frequency (MTBP), for various slot counts ($k+m$) and lazy repair thresholds ($l_0$). - -In Figure 10 we keep MTTF 1 year and MTTR 1 day, like before, and we show $p_{\text{loss}}$ as a function of MTBP (expressed in days for simplicity). Note that the x axis is logarithmic to show better the cost-benefit of changing the proving interval. - -As expected, large values of MTBP (infrequent proofs) are not acceptable, the dataset could easily be lost without triggering repair. What the curves also show is that requiring proofs with an MTBF below a day does not make a significant difference. In fact, with several parameter combinations, namely, with higher $n$ values, we can afford to increase MTBF considerably, to several days. +**Figura 10.** $p_{\text{loss}}$ (eje y) en función de la frecuencia de la prueba (MTBP), para varios recuentos de slots ($k+m$) y umbrales de reparación perezosa ($l_0$). -Note however that we are still using $l_1=1$ in our model, i.e. a slot is considered lost after a single failed proof. We consider this to be too reactive, since single proofs might be missed due to temporary failures. Without going into much detail, a higher tolerance on missed proofs ($l_1 > 1$) is similar to multiplying MTBF by $l_1$ (although the model becomes more complex, with an $l_1 +1$ dimensional state space). +En la Figura 10 mantenemos el MTTF de 1 año y el MTTR de 1 día, como antes, y mostramos $p_{\text{loss}}$ en función del MTBP (expresado en días para mayor simplicidad). Tenga en cuenta que el eje x es logarítmico para mostrar mejor la relación coste-beneficio de cambiar el intervalo de prueba. +Como era de esperar, los valores grandes de MTBP (pruebas poco frecuentes) no son aceptables, el conjunto de datos podría perderse fácilmente sin activar la reparación. Lo que también muestran las curvas es que requerir pruebas con un MTBF inferior a un día no supone una diferencia significativa. De hecho, con varias combinaciones de parámetros, en concreto, con valores de $n$ más altos, podemos permitirnos aumentar el MTBF considerablemente, hasta varios días. -## 6. Conclusions and Future Work +Sin embargo, tenga en cuenta que todavía estamos utilizando $l_1=1$ en nuestro modelo, es decir, un slot se considera perdido después de una sola prueba fallida. Consideramos que esto es demasiado reactivo, ya que las pruebas individuales pueden perderse debido a fallos temporales. Sin entrar en muchos detalles, una mayor tolerancia en las pruebas perdidas ($l_1 > 1$) es similar a multiplicar MTBF por $l_1$ (aunque el modelo se vuelve más complejo, con un espacio de estados dimensional de $l_1 +1$). -We have presented Codex, a Decentralized Durability Engine which employs erasure coding and efficient proofs of storage to provide tunable durability guarantees and a favourable tradeoff in cost and complexity for storage providers. By having proofs that are lightweight, Codex can keep the overhead spendings on hardware and electricity to a minimal. This is important both for fostering participation, as storage provider margins can be increased while prices for clients can decrease, and decentralization, as modest requirements are more likely to encourage a more diverse set of participants ranging from hobbyist home providers to larger players. +## 6. Conclusiones y trabajo futuro -Despite our ambitious goals, Codex is a work in progress. Ongoing efforts on improving it include: +Hemos presentado Codex, un Motor de Durabilidad Descentralizado que emplea la codificación de borrado y pruebas eficientes de almacenamiento para proporcionar garantías de durabilidad ajustables y una compensación favorable en coste y complejidad para los proveedores de almacenamiento. Al tener pruebas ligeras, Codex puede mantener los gastos generales en hardware y electricidad al mínimo. Esto es importante tanto para fomentar la participación, ya que los márgenes de los proveedores de almacenamiento pueden aumentarse a la vez que los precios para los clientes pueden disminuir, y la descentralización, ya que los requisitos modestos son más propensos a fomentar un conjunto más diverso de participantes que van desde proveedores domésticos aficionados a jugadores más grandes. -* **Reduction of proving costs.** Verifying proofs on-chain is expensive. To bring down costs on the short-term, we are working on an in-node aggregation mechanism which allow providers to batch proofs over multiple slots. On a slightly longer time horizon, we also intend to build our own aggregation network, which will ultimately allow Codex to go on-chain very infrequentely. Finally, at the level of individual proofs, we are working on more efficient proof systems which should bring down hardware requirements even more. -* **Bandwidth incentives.** Codex is designed to provide strong incentives that favor durability. While incentivizing availability is harder as it is in general not possible to provide proofs for it[^bassam_18] we can still provide an effective, even if weaker, form of incentive by allowing providers to sell bandwidth. To that end, we are currently working on mechanisms to enable an efficient bandwidth market in Codex which should complement the storage market. -* **Privacy and encryption.** Codex will, in the future, encrypt data by default so that SPs cannot ever know what they are storing. This should also offer SCs more privacy. -* **P2P layer.** We are currently working on optimizing protocols so they scale and perform better. This includes improvements in block transfer latency and throughput, more efficient swarms and block discovery mechanism, as well as research into more secure protocols. -* **Tools and APIs.** We are currently working on creating developer tools (SDKs) and APIs to facilitate the development of decentralized applications on top of the Codex network. +A pesar de nuestros ambiciosos objetivos, Codex es un trabajo en curso. Los esfuerzos en curso para mejorarlo incluyen: -Work within a longer time horizon include: +* **Reducción de los costes de prueba.** La verificación de pruebas on-chain es costosa. Para reducir los costes a corto plazo, estamos trabajando en un mecanismo de agregación en el nodo que permita a los proveedores agrupar pruebas en varios slots. En un horizonte temporal ligeramente más largo, también tenemos la intención de construir nuestra propia red de agregación, que en última instancia permitirá a Codex ir on-chain con muy poca frecuencia. Por último, a nivel de pruebas individuales, estamos trabajando en sistemas de prueba más eficientes que deberían reducir aún más los requisitos de hardware. +* **Incentivos de ancho de banda.** odex está diseñado para proporcionar incentivos sólidos que favorezcan la durabilidad. Si bien incentivar la disponibilidad resulta más difícil, ya que en general no es posible proporcionar pruebas para ella[^bassam_18], todavía podemos proporcionar una forma de incentivo eficaz, aunque más débil, permitiendo a los proveedores vender ancho de banda. Con ese fin, actualmente estamos trabajando en mecanismos para habilitar un mercado de ancho de banda eficiente en Codex que complemente el mercado de almacenamiento. +* **Privacidad y cifrado.** En el futuro, Codex cifrará los datos de forma predeterminada para que los SP nunca sepan lo que están almacenando. Esto también debería ofrecer a los SCs más privacidad. +* **Capa P2P.** Actualmente estamos trabajando en la optimización de los protocolos para que escalen y rindan mejor. Esto incluye mejoras en la latencia y el rendimiento de la transferencia de bloques, enjambres más eficientes y mecanismos de descubrimiento de bloques, así como la investigación de protocolos más seguros. +* **Herramientas y APIs.** Actualmente estamos trabajando en la creación de herramientas de desarrollo (SDKs) y APIs para facilitar el desarrollo de aplicaciones descentralizadas sobre la red Codex. -* **Support for fine-grained and mutable files.** Codex, as many other DSNs, is currently suitable for large immutable datasets, and any other use case will currently require additional middleware. We have ongoing work on exploring polynomial commitments as opposed to Merkle trees for proofs, which should allow us to incrementally change datasets without having to completely re-encode them. This will unlock a host of new use cases, and allow Codex to be used in a much more natural fashion. -* **Improvements to erasure coding.** There is a large number of different codes offering different tradeoffs, e.g. non-MDS codes like turbocodes and tornado codes, which could result in better performance than the Reed-Solomon codes we currently employ. +El trabajo dentro de un horizonte temporal más largo incluye: -Codex has the potential to support a wide range of use cases, from personal data storage and decentralized web hosting to secure data backup and archival, decentralized identities, and decentralized content distribution. +* **Soporte para archivos mutables y de grano fino.** Codex, como muchos otros DSNs, es actualmente adecuado para conjuntos de datos inmutables grandes, y cualquier otro caso de uso requerirá actualmente middleware adicional. Tenemos trabajos en curso sobre la exploración de compromisos polinómicos en lugar de árboles Merkle para las pruebas, lo que debería permitirnos cambiar incrementalmente los conjuntos de datos sin tener que volver a codificarlos por completo. Esto desbloqueará una serie de nuevos casos de uso, y permitirá que Codex se utilice de una forma mucho más natural. +* **Mejoras en la codificación de borradog.** Existe un gran número de códigos diferentes que ofrecen diferentes compromisos, por ejemplo, códigos no MDS como los turbocódigos y los códigos tornado, que podrían dar como resultado un mejor rendimiento que los códigos Reed-Solomon que empleamos actualmente. -Ultimately, the use case for Codex is that of a durable and functional decentralized storage layer, without which no decentralized technology stack can be seriously contemplated. As the decentralized ecosystem continues to evolve, we expect Codex’s DDE-based approach to storage to play a crucial role in enabling new types of applications and services that prioritize user control, privacy, and resilience. +Codex tiene el potencial de soportar una amplia gama de casos de uso, desde el almacenamiento de datos personales y el alojamiento web descentralizado hasta la copia de seguridad y el archivo de datos seguros, las identidades descentralizadas y la distribución de contenidos descentralizada. -## References +En última instancia, el caso de uso de Codex es el de una capa de almacenamiento descentralizada duradera y funcional, sin la cual no se puede contemplar seriamente ninguna pila de tecnología descentralizada. A medida que el ecosistema descentralizado continúa evolucionando, esperamos que el enfoque de almacenamiento de Codex basado en DDE desempeñe un papel crucial para permitir nuevos tipos de aplicaciones y servicios que prioricen el control del usuario, la privacidad y la resistencia. +## Referencias [^tanembaum]: A. S. Tanenbaum and M. van Steen, Distributed Systems: Principles and Paradigms, 2nd ed. Upper Saddle River, NJ, USA: Pearson Education, 2007. diff --git a/networks/networks.md b/networks/networks.md index 3858283..72b4d86 100644 --- a/networks/networks.md +++ b/networks/networks.md @@ -1,19 +1,21 @@ -# Codex networks +# # Redes de Codex - At Codex, we are launching several networks which are used for different purposes - | Network | Status | Blockchain | Purpose | - | ------------------ | ----------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | - | Devnet | :building_construction: | [Geth PoA](https://geth.ethereum.org/docs/fundamentals/private-network) | Dedicated for development purposes and following latest `master` builds | - | [Testnet](testnet) | :white_check_mark: | [Geth PoA](https://geth.ethereum.org/docs/fundamentals/private-network) | A public network for testing purposes, following latest releases | - | Mainnet | :construction: | :construction: | A main public network | +En Codex, estamos lanzando varias redes que se utilizan para diferentes propósitos. - The main difference between networks are following - - Network purpose - - Bootstrap nodes - - Number of storage nodes - - Available storage volume - - Blockchain network - - Marketplace contract version - - Circuit files set used for proof verification +| Red | Estado | Blockchain | Propósito | +| ------------------ | ----------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | +| Devnet | :building_construction: | [Geth PoA](https://geth.ethereum.org/docs/fundamentals/private-network) | Dedicada a fines de desarrollo y siguiendo las últimas compilaciones de la rama principal `master` | +| [Testnet](testnet) | :white_check_mark: | [Geth PoA](https://geth.ethereum.org/docs/fundamentals/private-network) | Una red pública para fines de prueba, siguiendo las últimas versiones publicadas | +| Mainnet | :construction: | :construction: | Una red pública principal | - The easiest way to start to use Codex is to [Join Testnet](testnet). +La principal diferencia entre las redes es la siguiente: + +* Propósito de la red +* Nodos de bootstrap +* Número de nodos de almacenamiento +* Volumen de almacenamiento disponible +* Red Blockchain +* Versión del contrato Marketplace +* Conjunto de archivos de circuito utilizados para la verificación de pruebas + +La forma más fácil de empezar a usar Codex es [unirse a la Testnet](testnet). diff --git a/networks/testnet.md b/networks/testnet.md index 33b33af..5becd11 100644 --- a/networks/testnet.md +++ b/networks/testnet.md @@ -3,165 +3,165 @@ outline: [2, 4] --- # Codex Testnet -The Codex Testnet has been launched and is ready to be used for testing. +La red de pruebas (Testnet) de Codex ha sido lanzada y está lista para ser utilizada para pruebas. -Your participation in the Codex Testnet is subject to the [Codex Testnet Terms and Conditions](https://github.com/codex-storage/codex-testnet-starter/blob/master/Codex%20Testnet%20Terms%20and%20Conditions.pdf) and [Codex Testnet Privacy Policy](https://github.com/codex-storage/codex-testnet-starter/blob/master/Codex%20Testnet%20Privacy%20Policy.pdf). +Tu participación en la Testnet de Codex está sujeta a los [Términos y Condiciones de la Testnet de Codex](https://github.com/codex-storage/codex-testnet-starter/blob/master/Codex%20Testnet%20Terms%20and%20Conditions.pdf) y a la [Política de Privacidad de la Testnet de Codex](https://github.com/codex-storage/codex-testnet-starter/blob/master/Codex%20Testnet%20Privacy%20Policy.pdf). -**Guides.** We have basic guides covering how to set up a Storage Client which can be used to upload and persist files by buying storage in the Codex network. We recommend that you start with those. +**Guías.** Tenemos guías básicas que cubren cómo configurar un Cliente de Almacenamiento, que puede ser utilizado para subir y almacenar archivos comprando espacio de almacenamiento en la red Codex. Recomendamos que comiences con estas. -Running a Storage Provider is more involved and is covered as a separate guide which demonstrates the storage sales side, as well as how to run Codex with its own local Ethereum execution client. +Ejecutar un Proveedor de Almacenamiento es más complejo y está cubierto en una guía separada, la cual demuestra el lado de la venta de almacenamiento, así como también cómo ejecutar Codex con su propio cliente de ejecución de Ethereum local. -Guides are available either on Discord, as step-by-step, interactive guides, or here as simple instructions that you can follow: +Las guías están disponibles en Discord, como guías interactivas paso a paso, o aquí como instrucciones simples que puedes seguir: -- **Basic: running a storage client.** [[Discord](#sc-guide-discord) | [web](#sc-guide-web)] -- **Advanced: Running a storage provider.** [[web](#sp-guide-web)] +- **Básico: Ejecutando un cliente de almacenamiento.** [[Discord](#sc-guide-discord) | [Web](#sc-guide-web)] +- **Avanzado: Ejecutando un proveedor de almacenamiento.** [[Web](#sp-guide-web)] -The guides were tested on the following operating systems: +Las guías fueron probadas en los siguientes sistemas operativos: - - Linux: Ubuntu 24.04, Debian 12, Fedora 40 - - macOS: 15 - - Windows: 11, Server 2022 +- Linux: Ubuntu 24.04, Debian 12, Fedora 40 +- macOS: 15 +- Windows: 11, Server 2022 -## Running a Storage Client (Discord Version) {#sc-guide-discord} +## Ejecutando un Cliente de Almacenamiento (Versión Discord) {#sc-guide-discord} -You can join [Codex Discord server](https://discord.gg/codex-storage) and jump into the [#:tv:|join-testnet](https://discord.com/channels/895609329053474826/1289923125928001702) channel. +Puedes unirte al [servidor de Discord de Codex](https://discord.gg/codex-storage) e ingresar al canal [#:tv:|join-testnet](https://discord.com/channels/895609329053474826/1289923125928001702). -It is mostly the same as a [Web guide](#sc-guide-web), but uses Discord capabilities so you can have an interactive, step-by-step guide, and you also can get a support in the [#:sos:|node-help](https://discord.com/channels/895609329053474826/1286205545837105224) channel. +Es prácticamente lo mismo que la [Guía Web](#sc-guide-web), pero utiliza las capacidades de Discord para que puedas tener una guía interactiva paso a paso, y también puedes obtener soporte en el canal [#:sos:|node-help](https://discord.com/channels/895609329053474826/1286205545837105224). -## Running a Storage Client (Web Version) {#sc-guide-web} +## Ejecutando un Cliente de Almacenamiento (Versión Web) {#sc-guide-web} -**Prerequisites** +**Prerrequisitos** - - Access to your Internet router so you can [configure port forwarding](#basic-common) +- Acceso a tu enrutador de Internet para que puedas [configurar el reenvío de puertos](#basic-common) -Steps for [Linux/macOS](#basic-linux-macos) and [Windows](#basic-windows) are slightly different, so please use ones for your OS. +Los pasos para [Linux/macOS](#basic-linux-macos) y [Windows](#basic-windows) son ligeramente diferentes, así que por favor utiliza los que correspondan a tu sistema operativo.
### Linux/macOS {#basic-linux-macos} -1. Download the master tarball from the Codex testnet starter repository, and untar its contents: +1. Descarga el archivo tarball maestro del repositorio de inicio de la testnet de Codex, y descomprime su contenido: ```shell curl -LO https://github.com/codex-storage/codex-testnet-starter/archive/master.tar.gz tar xzvf master.tar.gz rm master.tar.gz ``` -2. Navigate to the scripts folder: +2. Navega a la carpeta de scripts: ```shell cd codex-testnet-starter-master/scripts ``` -3. Install dependencies when required: +3. Instala las dependencias cuando sea necesario: ```shell - # Debian-based Linux + # Linux basado en Debian sudo apt update && sudo apt install libgomp1 ``` -4. Download Codex binaries from GitHub releases: +4. Descarga los binarios de Codex desde las versiones de GitHub: ```shell ./download_online.sh ``` -5. Generate an ethereum keypair: +5. Genera claves Ethereum: ```shell ./generate.sh ``` - Your private key will be saved to `eth.key` and address to `eth.address` file. + Tu clave privada se guardará en el archivo `eth.key` y la dirección en el archivo `eth.address` . -6. Fill-up your address shown on the screen with the tokens: - - Use the web faucets to mint some [ETH](https://faucet-eth.testnet.codex.storage) and [TST](https://faucet-tst.testnet.codex.storage) tokens. - - We can also do this using Discord [# bot](https://discord.com/channels/895609329053474826/1230785221553819669) channel - - Use `/set ethaddress` command to enter your generated address - - Use `/mint` command to receive ETH and TST tokens - - Use `/balance` command to check if you have received test tokens successfully +6. Completa tu dirección que se muestra en la pantalla con los tokens: + - Usa los grifos web para acuñar algunos [ETH](https://faucet-eth.testnet.codex.storage) y los tokens [TST](https://faucet-tst.testnet.codex.storage) . + - También podemos hacer esto usando el canal Discord [# bot](https://discord.com/channels/895609329053474826/1230785221553819669) . + - Use `/set ethaddress` comando para ingresar su dirección generada + - Use `/mint` comando para recibir ETH y tokens TST + - Use `/balance` comando para verificar si recibió los tokens de prueba con éxito -7. Run Codex node: +7. Ejecuta el nodo Codex: ```shell ./run_client.sh ``` -8. Configure [port forwarding](#basic-common) and we are ready go to. +8. Configura el [reenvío de puertos](#basic-common) y ya estaría. ### Windows {#basic-windows} -1. Download the master tarball from the Codex testnet starter repository, and untar its contents: - > [!WARNING] - > Windows antivirus software and built-in firewalls may cause steps to fail. We will cover some possible errors here, but always consider checking your setup if requests fail - in particular, if temporarily disabling your antivirus fixes it, then it is likely to be the culprit. +1. Descarga el archivo tarball maestro del repositorio de inicio de la testnet de Codex, y descomprime su contenido: + > [¡ATENCIÓN!] + > El software antivirus de Windows y los firewalls integrados pueden causar que los pasos fallen. Cubriremos algunos posibles errores aquí, pero considera siempre revisar tu configuración si las peticiones fallan - en particular, si deshabilitar temporalmente tu antivirus lo soluciona, entonces es probable que este sea el culpable. ```batch curl -LO https://github.com/codex-storage/codex-testnet-starter/archive/master.tar.gz ``` - If you see an error like: + Si ves un error como: ```batch curl: (35) schannel: next InitializeSecurityContext failed: CRYPT_E_NO_REVOCATION_CHECK (0x80092012) - The revocation function was unable to check revocation for the certificate. ``` - You may need to add the `--ssl-no-revoke` option to your curl call, e.g.: + Puede que necesites añadir la opción `--ssl-no-revoke` a tu llamada curl, por ejemplo: ```batch curl -LO --ssl-no-revoke https://github.com/codex-storage/codex-testnet-starter/archive/master.tar.gz ``` -1. Extract the contents of the tar file, and then delete it: +2. Extrae el contenido del archivo tar, y luego elimínalo: ```batch tar xzvf master.tar.gz del master.tar.gz ``` -2. Navigate to the scripts folder: +3. Navega a la carpeta de scripts: ```batch cd codex-testnet-starter-master\scripts\windows ``` -3. Download Codex binaries from GitHub releases: +4. Descarga los binarios de Codex desde las versiones de GitHub: ```batch download-online.bat ``` -4. Generate an ethereum keypair: +5. Genera claves de Ethereum: ```batch generate.bat ``` - Your private key will be saved to `eth.key` and address to `eth.address` file. + Tu clave privada se guardará en el archivo `eth.key` y la dirección en el archivo `eth.address` . -5. Fill-up your address shown on the screen with the tokens: - - Use the web faucets to mint some [ETH](https://faucet-eth.testnet.codex.storage) and [TST](https://faucet-tst.testnet.codex.storage) tokens. - - We can also do this using Discord [# bot](https://discord.com/channels/895609329053474826/1230785221553819669) channel - - Use `/set ethaddress` command to enter your generated address - - Use `/mint` command to receive ETH and TST tokens - - Use `/balance` command to check if you have received test tokens successfully +5. Completa tu dirección que se muestra en la pantalla con los tokens: + - Usa los grifos web para acuñar algunos [ETH](https://faucet-eth.testnet.codex.storage) y los tokens [TST](https://faucet-tst.testnet.codex.storage) . + - También podemos hacer esto usando el canal Discord [# bot](https://discord.com/channels/895609329053474826/1230785221553819669) . + - Use `/set ethaddress` comando para ingresar su dirección generada + - Use `/mint` comando para recibir ETH y tokens TST + - Use `/balance` comando para verificar si recibió los tokens de prueba con éxito -6. Run Codex node: + +7. Ejecuta el nodo Codex: ```batch run-client.bat ``` - 7. Configure [port forwarding](#basic-common) and we are ready go to. + 8. Configura el [reenvío de puertos](#basic-common) y ya estaría. -### All OS {#basic-common} +### Todos los SO {#basic-common} -Configure [port forwarding](https://en.wikipedia.org/wiki/Port_forwarding) on your Internet router -| # | Protocol | Port | Description | +Configura el [reenvío de puertos](https://en.wikipedia.org/wiki/Port_forwarding) en tu router +| # | Protocolo | Puerto | Descripción | | - | -------- | ------ | ----------------- | -| 1 | `UDP` | `8090` | `Codex Discovery` | -| 2 | `TCP` | `8070` | `Codex Transport` | - -After your node is up and running, you can use the [Codex API](/developers/api) to be able to interact with your Codex node, please check our [API walk-through](/learn/using) for more details. +| 1 | `UDP` | `8090` | `Descubrimiento de Codex` | +| 2 | `TCP` | `8070` | `Transporte de Codex` | -You also can use [Codex App UI](https://app.codex.storage) to interact with your local Codex node. +Una vez que tu nodo esté en funcionamiento, puedes utilizar la [API de Codex](/developers/api) para interactuar con tu nodo Codex. Por favor, revisa nuestro [recorrido por la API](/learn/using) para más detalles. -Need help? Reach out to us in [#:sos:|node-help](https://discord.com/channels/895609329053474826/1286205545837105224) channel or check [troubleshooting guide](/learn/troubleshoot.md). +También puedes utilizar la [Interfaz de Usuario de la App de Codex](https://app.codex.storage) para interactuar con tu nodo Codex local. -## Running a Storage Provider (Web Version) {#sp-guide-web} +¿Necesitas ayuda? Contáctanos en el canal [#:sos:|node-help](https://discord.com/channels/895609329053474826/1286205545837105224) o revisa la [guía de resolución de problemas](/learn/troubleshoot.md). -Work in progress :construction: +## Ejecutando un Proveedor de Almacenamiento (Versión Web) {#sp-guide-web} +Trabajo en progreso :construction: -## Testnet Data +## Datos de la Testnet -### Bootstrap Nodes +### Nodos Bootstrap **Codex** ```shell spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P @@ -184,20 +184,20 @@ enode://6eeb3b3af8bef5634b47b573a17477ea2c4129ab3964210afe3b93774ce57da832eb110f enode://6ba0e8b5d968ca8eb2650dd984cdcf50acc01e4ea182350e990191aadd79897801b79455a1186060aa3818a6bc4496af07f0912f7af53995a5ddb1e53d6f31b5@209.38.160.40:40070 ``` -### Smart contracts +### Contratos Inteligentes -| Contract | Address | +| Contract | Dirección | | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------- | | Token | [`0x34a22f3911De437307c6f4485931779670f78764`](https://explorer.testnet.codex.storage/address/0x34a22f3911De437307c6f4485931779670f78764) | -| Verifier | [`0x02dd582726F7507D7d0F8bD8bf8053d3006F9092`](https://explorer.testnet.codex.storage/address/0x02dd582726F7507D7d0F8bD8bf8053d3006F9092) | +| Dirección | [`0x02dd582726F7507D7d0F8bD8bf8053d3006F9092`](https://explorer.testnet.codex.storage/address/0x02dd582726F7507D7d0F8bD8bf8053d3006F9092) | | Marketplace | [`0xAB03b6a58C5262f530D54146DA2a552B1C0F7648`](https://explorer.testnet.codex.storage/address/0xAB03b6a58C5262f530D54146DA2a552B1C0F7648) | -### Endpoints +### Puntos de Acceso (Endpoints) | # | Service | URL | | - | --------------- | ---------------------------------------------------------------------------- | -| 1 | Geth Public RPC | [rpc.testnet.codex.storage](https://rpc.testnet.codex.storage) | -| 2 | Block explorer | [explorer.testnet.codex.storage](https://explorer.testnet.codex.storage) | +| 1 | Geth RPC Público | [rpc.testnet.codex.storage](https://rpc.testnet.codex.storage) | +| 2 | Explorador de Bloques | [explorer.testnet.codex.storage](https://explorer.testnet.codex.storage) | | 3 | Faucet ETH | [faucet-eth.testnet.codex.storage](https://faucet-eth.testnet.codex.storage) | | 4 | Faucet TST | [faucet-tst.testnet.codex.storage](https://faucet-tst.testnet.codex.storage) | -| 5 | Status page | [status.testnet.codex.storage](https://status.testnet.codex.storage) | +| 5 | Página de Estado | [status.testnet.codex.storage](https://status.testnet.codex.storage) |