From eca22d14f78596bdf2a43fa442b220838f5cdc08 Mon Sep 17 00:00:00 2001 From: Nadai2010 Date: Thu, 12 Oct 2023 08:09:16 +0100 Subject: [PATCH 1/3] Update [i18n ES] TEST Translations --- po/es.mo | Bin 0 -> 19771 bytes po/es.po | 1706 ++++++++++++++++++++---------------------------------- 2 files changed, 635 insertions(+), 1071 deletions(-) create mode 100644 po/es.mo diff --git a/po/es.mo b/po/es.mo new file mode 100644 index 0000000000000000000000000000000000000000..f9660b1f6d21e6a4af44c91385d9ac10b3070027 GIT binary patch literal 19771 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\n" "Language-Team: Spanish \n" "Language: es\n" @@ -14,7 +14,7 @@ msgstr "" #: src/SUMMARY.md:1 msgid "The Starknet Book" -msgstr "El libro de Starknet" +msgstr "El Libro de Starknet" #: src/SUMMARY.md:4 msgid "Introduction" @@ -34,191 +34,191 @@ msgstr "Instalación básica" #: src/SUMMARY.md:14 msgid "Compile, Deploy, Interact" -msgstr "" +msgstr "Compilar, Desplegar, Interactuar" #: src/SUMMARY.md:15 msgid "Scarb: The Package Manager" -msgstr "" +msgstr "Scarb: El Gestor de Paquetes" #: src/SUMMARY.md:16 msgid "Starkli: A CLI interface 🚧" -msgstr "" +msgstr "Starkli: Una interfaz CLI 🚧" #: src/SUMMARY.md:17 msgid "Katana: A Local Node" -msgstr "" +msgstr "Katana: Un Nodo Local" #: src/SUMMARY.md:18 msgid "Starknet Devnet 🚧" -msgstr "" +msgstr "Starknet Devnet 🚧" #: src/SUMMARY.md:19 msgid "Starknet-js: Javascript SDK" -msgstr "" +msgstr "Starknet-js: Javascript SDK" #: src/SUMMARY.md:20 src/SUMMARY.md:46 msgid "Examples" -msgstr "" +msgstr "Ejemplos" #: src/SUMMARY.md:21 msgid "Beginner - ERC-20 UI" -msgstr "" +msgstr "Principiante - ERC-20 UI" #: src/SUMMARY.md:22 msgid "Intermediate - Million Dollar Homepage" -msgstr "" +msgstr "Intermedio - Página de inicio de Million Dollar" #: src/SUMMARY.md:23 msgid "Starknet-React: React Integration" -msgstr "" +msgstr "Starknet-React: Integración de React" #: src/SUMMARY.md:24 msgid "Starknet-py: Python SDK 🚧" -msgstr "" +msgstr "Starknet-py: Python SDK 🚧" #: src/SUMMARY.md:25 msgid "Starknet-rs: Rust SDK 🚧" -msgstr "" +msgstr "Starknet-py: Python SDK 🚧" #: src/SUMMARY.md:26 msgid "Foundry Forge: Testing 🚧" -msgstr "" +msgstr "Foundry Forge: Testing 🚧" #: src/SUMMARY.md:27 msgid "Foundry Cast: Interacting with Starknet 🚧" -msgstr "" +msgstr "Foundry Cast: Interactuando con Starknet 🚧" #: src/SUMMARY.md:29 msgid "Architecture" -msgstr "" +msgstr "Arquitectura" #: src/SUMMARY.md:32 msgid "Transactions" -msgstr "" +msgstr "Transacciones" #: src/SUMMARY.md:33 msgid "Sequencers" -msgstr "" +msgstr "Secuenciadores" #: src/SUMMARY.md:34 msgid "Provers 🚧" -msgstr "" +msgstr "Provers🚧" #: src/SUMMARY.md:35 msgid "Nodes 🚧" -msgstr "" +msgstr "Nodos 🚧" #: src/SUMMARY.md:36 msgid "Layer 3 and App Chains 🚧 " -msgstr "" +msgstr "Layer 3 y App Chains 🚧 " #: src/SUMMARY.md:37 msgid "Solidity Verifier 🚧" -msgstr "" +msgstr "Solidity Verifier 🚧" #: src/SUMMARY.md:38 msgid "Decentralization 🚧" -msgstr "" +msgstr "Descentralización 🚧" #: src/SUMMARY.md:40 msgid "Account Abstraction" -msgstr "" +msgstr "Abstracción de Cuenta" #: src/SUMMARY.md:43 msgid "Accounts" -msgstr "" +msgstr "Cuentas" #: src/SUMMARY.md:44 msgid "Hello, Account! 🚧" -msgstr "" +msgstr "¡Hola Cuenta! 🚧" #: src/SUMMARY.md:45 msgid "Standard AccounT 🚧" -msgstr "" +msgstr "Cuenta Estándar 🚧" #: src/SUMMARY.md:47 msgid "Multicaller 🚧" -msgstr "" +msgstr "Multicaller 🚧" #: src/SUMMARY.md:48 msgid "Multisig 🚧" -msgstr "" +msgstr "Multisig 🚧" #: src/SUMMARY.md:49 msgid "Auto-Payments 🚧" -msgstr "" +msgstr "Auto-Payments 🚧" #: src/SUMMARY.md:50 msgid "Alternative Signature Schemes 🚧" -msgstr "" +msgstr "Esquemas de Firma Alternativos 🚧" #: src/SUMMARY.md:54 msgid "STARKs 🚧" -msgstr "" +msgstr "STARKs 🚧" #: src/SUMMARY.md:55 msgid "Basics 🚧" -msgstr "" +msgstr "Básicos 🚧" #: src/SUMMARY.md:56 msgid "Math Primer 🚧" -msgstr "" +msgstr "Manual de Matemáticas 🚧" #: src/SUMMARY.md:57 msgid "Number Theory 🚧" -msgstr "" +msgstr "Teoría de Números 🚧" #: src/SUMMARY.md:58 msgid "Geometry 🚧" -msgstr "" +msgstr "Geometría 🚧" #: src/SUMMARY.md:59 msgid "Cryptographic Primitives 🚧" -msgstr "" +msgstr "Primitivas Criptográficas 🚧" #: src/SUMMARY.md:60 msgid "Arithimization 🚧" -msgstr "" +msgstr "Aritimización 🚧" #: src/SUMMARY.md:61 msgid "Low Degree Testing 🚧" -msgstr "" +msgstr "Pruebas de Bajo Grado 🚧" #: src/SUMMARY.md:62 msgid "FRI Protocol 🚧" -msgstr "" +msgstr "FRI 🚧" #: src/SUMMARY.md:63 msgid "Efficient STARKs" -msgstr "" +msgstr "STARK Eficientes" #: src/SUMMARY.md:64 msgid "STARKs Protocol (Python) 🚧" -msgstr "" +msgstr "Protocolo STARK (Python) 🚧" #: src/SUMMARY.md:65 src/SUMMARY.md:70 msgid "Trace/Low Degree Extension 🚧" -msgstr "" +msgstr "Traza/Extensión de Bajo Grado 🚧" #: src/SUMMARY.md:66 src/SUMMARY.md:71 msgid "Constraints 🚧" -msgstr "" +msgstr "Restricciones 🚧" #: src/SUMMARY.md:67 src/SUMMARY.md:72 msgid "FRI Commitments 🚧" -msgstr "" +msgstr "Compromisos de FRI 🚧" #: src/SUMMARY.md:68 src/SUMMARY.md:73 msgid "Query Phase 🚧" -msgstr "" +msgstr "Fase de Consulta 🚧" #: src/SUMMARY.md:69 msgid "STARKs Protocol (Rust) 🚧" -msgstr "" +msgstr "Protocolo STARK (Rust) 🚧" #: src/title-page.md:1 msgid "# The Starknet Book" -msgstr "" +msgstr "# El Libro de Starknet" #: src/title-page.md:3 msgid "" @@ -227,6 +227,10 @@ msgid "" "marked under a 🚧 emoji. We welcome your suggestions, feedback, and\n" "content contributions to make this book a reliable guide for everyone." msgstr "" +"El Libro de Starknet es un trabajo en progreso, moldeado por los aportes\n" +"continuos de la comunidad. Algunas secciones pueden estar incompletas o aún bajo revisión y son\n" +"marcado debajo de un emoji 🚧. Agradecemos sus sugerencias, comentarios y\n" +"contribuciones de contenido para hacer de este libro una guía confiable para todos." #: src/title-page.md:8 msgid "" @@ -234,6 +238,9 @@ msgid "" "essentials of Starknet development. It’s a community effort, with each\n" "chapter guiding you through the Starknet ecosystem." msgstr "" +"El Libro de Starknet es una guía paso a paso destinada a enseñarle los\n" +"Conceptos básicos del desarrollo de Starknet. Es un esfuerzo comunitario, en el que cada\n" +"capítulo lo guiará a través del ecosistema Starknet." #: src/title-page.md:12 msgid "" @@ -242,6 +249,10 @@ msgid "" "Cairo Book, another community resource. You can access the Cairo Book\n" "[**here**](https://book.cairo-lang.org/)." msgstr "" +"Entendiendo Cairo, el lenguaje de programación clave para Smart Contract en\n" +"Starknet, es crucial. Es por eso que este libro trabaja de la mano con el\n" +"Libro de Cairo, otro recurso comunitario. Puedes acceder al Libro Cairo\n" +"[**aquí**](https://book.cairo-lang.org/)." #: src/title-page.md:17 msgid "" @@ -251,14 +262,19 @@ msgid "" "to tools, architecture, account setups, STARKs, and Starknet-specific\n" "apps." msgstr "" +"En resumen, el Libro de Cairo te ayuda a dominar Cairo, mientras que El Libro de Starknet\n" +"se centra en las características específicas de Starknet. Para una completa\n" +"comprensión, recomendamos explorar ambos. Este libro te presentará\n" +"herramientas, arquitectura, configuraciones de cuentas, STARK y aplicaciones específicas\n" +"de Starknet." #: src/title-page.md:23 msgid "## Table of Contents" -msgstr "" +msgstr "## Tabla de Contenido" #: src/title-page.md:25 msgid "**Chapter Titles**" -msgstr "" +msgstr "**Títulos de los Capítulos**" #: src/title-page.md:27 msgid "" @@ -268,29 +284,31 @@ msgid "" "| ------------------------ | " "----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- " "|\n" -"| 1: Starknet Introduction | Delve into the fundamental concepts of Starknet " -"and acquaint yourself with the deployment of smart " -"contracts. " -"|\n" -"| 2: Starknet Tooling | Familiarize yourself with vital tools, such as " -"Protostar and Hardhat, and explore how languages like Javascript, Python, " -"and Rust can be leveraged for Starknet interactions. |\n" -"| 3: Starknet Architecture | Uncover Starknet’s core structure, gaining " -"insights into the transaction lifecycle and the interplay between the " -"Sequencer, Prover, and Nodes. |\n" -"| 4: Account Abstraction | Delve deep into Starknet’s unique approach to " -"user accounts, and master the art of crafting custom " -"accounts. " -"|\n" -"| 5: STARKs | Dive into the intricacies of STARKs and their " -"pivotal role in shaping Starknet’s " -"landscape. " -"|" -msgstr "" +"| 1: Starknet Introduction | Delve into the fundamental concepts of Starknet and acquaint yourself with the deployment of smart " +"contracts. |\n" +"| 2: Starknet Tooling | Familiarize yourself with vital tools, such as Protostar and Hardhat, and explore how languages like Javascript, Python, and Rust can be " +"leveraged for Starknet interactions. |\n" +"| 3: Starknet Architecture | Uncover Starknet’s core structure, gaining insights into the transaction lifecycle and the interplay between the Sequencer, Prover, and " +"Nodes. |\n" +"| 4: Account Abstraction | Delve deep into Starknet’s unique approach to user accounts, and master the art of crafting custom " +"accounts. |\n" +"| 5: STARKs | Dive into the intricacies of STARKs and their pivotal role in shaping Starknet’s " +"landscape. |" +msgstr "" +"| Capítulo | Descripción |\n" +"| ------------------------ | -------------------------------------------------- -------------------------------------------------- " +"-------------------------------------------------- ----------------------- |\n" +"| 1: Introducción a Starknet | Profundice en los conceptos fundamentales de Starknet y familiarícese con el despliegue de contratos inteligentes. |\n" +"| 2: Herramientas Starknet | Familiarícese con herramientas vitales, como Protostar y Hardhat, y explore cómo se pueden aprovechar lenguajes como Javascript, Python y Rust " +"para las interacciones con Starknet. |\n" +"| 3: Arquitectura Starknet | Descubra la estructura central de Starknet y obtenga información sobre el ciclo de vida de las transacciones y la interacción entre el " +"Secuenciador, el Prover y los nodos. |\n" +"| 4: Abstracción de cuenta | Profundice en el enfoque único de Starknet para las cuentas de usuario y domine el arte de crear cuentas personalizadas. |\n" +"| 5: STARK | Sumérgete en las complejidades de los STARK y su papel fundamental en la configuración del panorama de Starknet. |" #: src/title-page.md:35 msgid "# Where to Start?" -msgstr "" +msgstr "# ¿Donde Empezar?" #: src/title-page.md:37 msgid "" @@ -298,6 +316,9 @@ msgid "" "through the Starknet Book. Here are some recommendations based on\n" "various objectives:" msgstr "" +"Dependiendo de tus objetivos e intereses, puedes elegir diferentes caminos\n" +"a través del Libro de Starknet. A continuación se presentan algunas recomendaciones basadas en\n" +"varios objetivos:" #: src/title-page.md:41 msgid "" @@ -308,8 +329,7 @@ msgid "" "- If you’re an **experienced developer** looking to quickly dive into\n" " writing scalable and decentralized smart contracts, focus on the\n" " Cairo Book, particularly **chapter 12: Starknet Smart Contracts**\n" -" ([link](https://book.cairo-lang.org/ch99-00-starknet-smart-contracts." -"html)).\n" +" ([link](https://book.cairo-lang.org/ch99-00-starknet-smart-contracts.html)).\n" "\n" "- If you’re a **frontend developer** wanting to integrate Starknet\n" " with a React frontend using Javascript, prioritize the\n" @@ -332,16 +352,47 @@ msgid "" " understand the fundamentals of STARKs and their connection to the\n" " Starknet ecosystem, delve into **STARKs**." msgstr "" +"- Si eres un **completo principiante** y quieres comenzar a aprender sobre\n" +" Cairo y Starknet desde cero, sigue el libro en su totalidad,\n" +" comenzando con **Introducción a Starknet**.\n" +"\n" +"- Si eres un **desarrollador experimentado** y buscas sumergirte rápidamente en\n" +" escribir contratos inteligentes escalables y descentralizados, centrarse en el\n" +" Libro de Cairo, en particular **capítulo 12: Contratos inteligentes de Starknet**\n" +" ([enlace](https://book.cairo-lang.org/ch99-00-starknet-smart-contracts.html)).\n" +"\n" +"- Si eres un **desarrollador frontend** que desea integrar Starknet\n" +" con una interfaz React usando Javascript, priorice la\n" +" **starknet-js** y **starknet-react** subcapítulos en **Starknet\n" +" Tooling**\n" +"\n" +"- Si es un **ingeniero de DevOps** o un **operador de nodo** interesado en\n" +" ejecutando un nodo Starknet y un indexador, diríjase directamente a **Starknet\n" +" Arquitectura**.\n" +"\n" +"- Si es un **investigador de seguridad** o un **auditor de contratos inteligentes**\n" +" querer aprender sobre la función de Abstracción de Cuenta y sus\n" +" implicaciones, opte por **Abstracción de cuenta**.\n" +"\n" +"- Si eres un **entusiasta de blockchain** y tienes curiosidad sobre lo subyacente\n" +" arquitectura y mecánica de Starknet y Cairo, explora **Starknet\n" +" Arquitectura**.\n" +"\n" +"- Si eres un **experto en criptografía** o un **investigador** deseoso de\n" +" comprender los fundamentos de STARK y su conexión con el\n" +" Ecosistema Starknet, profundiza en **STARKs**." #: src/title-page.md:71 msgid "" "Feel free to mix and match these paths based on your unique interests\n" "and requirements." msgstr "" +"Siéntete libre de mezclar y combinar estos caminos según tus intereses únicos\n" +"y requisitos." #: src/title-page.md:74 msgid "# Your Contributions Matter" -msgstr "" +msgstr "# Tus Contribuciones Importan" #: src/title-page.md:76 msgid "" @@ -349,19 +400,25 @@ msgid "" "than sharing expertise—you’re shaping the future of decentralized tech.\n" "Let’s build a guide that helps developers unlock Starknet’s potential." msgstr "" +"¡Bienvenido a bordo! Al contribuir al Libro de Starknet, estás haciendo más\n" +"que compartir experiencia, estás dando forma al futuro de la tecnología descentralizada.\n" +"Creemos una guía que ayude a los desarrolladores a desbloquear el potencial de Starknet." #: src/title-page.md:80 msgid "" "For detailed contribution guidelines, visit the [Contributors\n" -"Guide](https://github.com/starknet-edu/starknetbook/blob/main/CONTRIBUTING." -"adoc).\n" +"Guide](https://github.com/starknet-edu/starknetbook/blob/main/CONTRIBUTING.adoc).\n" "Every contribution counts. Your skills and passion will help make this\n" "book an invaluable tool." msgstr "" +"Para obtener pautas de contribución detalladas, visite [Contributors\n" +"Guía](https://github.com/starknet-edu/starknetbook/blob/main/CONTRIBUTING.adoc).\n" +"Cada contribución cuenta. Tus habilidades y pasión te ayudarán a lograrlo.\n" +"Reserve una herramienta invaluable." #: src/title-page.md:85 msgid "## How You Can Help" -msgstr "" +msgstr "## Cómo Puedes Ayudar" #: src/title-page.md:87 msgid "" @@ -379,10 +436,23 @@ msgid "" "\n" "- Show off your favorite Cairo features through new exercises." msgstr "" +"- ¿Encontraste una sección vacía? ¡Rellenalo!\n" +"\n" +"- ¿Crees que necesitamos una nueva sección? Sugiere uno.\n" +"\n" +"- ¿Ves margen de mejora? Continúe y modifíquelo.\n" +"\n" +"- ¿Quieres agregar código en un nuevo lenguaje de programación? A por ello.\n" +"\n" +"- ¿Encontraste un error? Arreglalo.\n" +"\n" +"- ¿Los ejercicios no están claros? Añade explicaciones.\n" +"\n" +"- Muestra tus características favoritas de Cairo a través de nuevos ejercicios." #: src/title-page.md:101 msgid "# Additional Key Educational Resources" -msgstr "" +msgstr "# Recursos Educativos Clave Adicionales" #: src/title-page.md:103 msgid "" @@ -390,6 +460,9 @@ msgid "" "deepen your understanding and enhance your skills in coding with Cairo\n" "and staying abreast with Starknet developments:" msgstr "" +"Hemos compilado una lista de valiosos recursos educativos que le ayudarán\n" +"profundice su comprensión y mejore sus habilidades en codificación con Cairo\n" +"y mantenerse al tanto de los desarrollos de Starknet:" #: src/title-page.md:107 msgid "" @@ -417,50 +490,73 @@ msgid "" " networking, sharing ideas, and troubleshooting together. Join us on\n" " Telegram [here](https://t.me/starknetna)." msgstr "" +"1. **Libro de El Cairo**: Una guía completa de Cairo, la programación\n" +" lenguaje para contratos inteligentes de Starknet. Puedes acceder a él\n" +" [aquí](https://book.cairo-lang.org/).\n" +"\n" +"2. **Starklings**: un recurso diseñado específicamente para guiarte\n" +" a través del aprendizaje de la programación de Cairo, asegurándose de que alcance un\n" +" nivel competente. Puedes acceder a él\n" +" [aquí](https://github.com/shramee/starklings-cairo1).\n" +"\n" +"3. **Foro de la comunidad Starknet**: una plataforma en línea donde puedes\n" +" participar en debates sobre los últimos desarrollos en Starknet.\n" +" Únase a la conversación [aquí](https://community.starknet.io/).\n" +"\n" +"4. **Documentación de Starknet**: Puedes navegar a través de la documentación\n" +" [aquí](https://docs.starknet.io/).\n" +"\n" +"5. **Documentación de Cairo**: explórela\n" +" [aquí](https://www.cairo-lang.org/docs).\n" +"\n" +"6. **Starknet Developer Telegram (inglés)**: Una comunidad para\n" +" Desarrolladores Starknet de habla inglesa. Esta es una gran plataforma para\n" +" establecer contactos, compartir ideas y solucionar problemas juntos. Únete a nosotros\n" +" Telegram [aquí](https://t.me/starknetna)." #: src/ch00-00-introduction.md:1 msgid "# The Starknet Network" -msgstr "" +msgstr "# La Red de Starknet" #: src/ch00-00-introduction.md:3 msgid "## Preamble" -msgstr "" +msgstr "## Preámbulo" #: src/ch00-00-introduction.md:5 msgid "" -"Historically, societal roles like currency, property rights, and social " -"status titles have been governed by _protocols_ and _registries_. Their " -"value stems from a widely accepted understanding of their integrity. These " -"functions have predominantly been overseen by centralized entities prone to " -"challenges such as corruption, agency conflicts, and exclusion ([Eli Ben-" -"Sasson, Bareli, Brandt, Volokh, 2023](https://hackmd.io/@Elibensasson/" -"ryMelVulp))." +"Historically, societal roles like currency, property rights, and social status titles have been governed by _protocols_ and _registries_. Their value stems from a widely " +"accepted understanding of their integrity. These functions have predominantly been overseen by centralized entities prone to challenges such as corruption, agency conflicts, " +"and exclusion ([Eli Ben-Sasson, Bareli, Brandt, Volokh, 2023](https://hackmd.io/@Elibensasson/ryMelVulp))." msgstr "" +"Históricamente, los roles sociales como la moneda, los derechos de propiedad y los títulos de estatus social han estado gobernados por protocolos y registros. Su valor surge " +"de una comprensión ampliamente aceptada de su integridad. Estas funciones han sido supervisadas predominantemente por entidades centralizadas propensas a desafíos como la " +"corrupción, los conflictos de agencia y la exclusión ([Eli Ben-Sasson, Bareli, Brandt, Volokh, 2023](https://hackmd.io/@Elibensasson/ryMelVulp) )." #: src/ch00-00-introduction.md:7 -msgid "" -"Satoshi's creation, Bitcoin, introduced a novel approach for these " -"functions, termed an _integrity web_. This is an infrastructure for societal " -"roles that:" +msgid "Satoshi's creation, Bitcoin, introduced a novel approach for these functions, termed an _integrity web_. This is an infrastructure for societal roles that:" msgstr "" +"La creación de Satoshi, Bitcoin, introdujo un enfoque novedoso para estas funciones, denominado _red de integridad_. Se trata de una infraestructura para roles sociales que:" #: src/ch00-00-introduction.md:9 msgid "" "1. Is openly described by a public protocol.\n" "2. Operates over a wide, inclusive, peer-to-peer network.\n" -"3. Distributes value fairly and extensively to maintain societal consensus " -"on its integrity." +"3. Distributes value fairly and extensively to maintain societal consensus on its integrity." msgstr "" +"1. Está descrito abiertamente por un protocolo público.\n" +"2. Opera a través de una red peer-to-peer amplia e inclusiva.\n" +"3. Distribuye valor de manera justa y amplia para mantener el consenso social sobre su integridad." #: src/ch00-00-introduction.md:13 msgid "" -"While Bitcoin addressed monetary functions, Ethereum expanded this to " -"include any function that can be defined by computer programming. Both faced " -"the challenge of balancing scalability with decentralization. These " -"integrity webs have often favored inclusivity over capacity, ensuring even " -"those with limited resources can authenticate the system's integrity. Yet, " -"this means they struggle to meet global demand." +"While Bitcoin addressed monetary functions, Ethereum expanded this to include any function that can be defined by computer programming. Both faced the challenge of balancing " +"scalability with decentralization. These integrity webs have often favored inclusivity over capacity, ensuring even those with limited resources can authenticate the " +"system's integrity. Yet, this means they struggle to meet global demand." msgstr "" +"Mientras que Bitcoin abordó las funciones monetarias, Ethereum amplió esto para incluir cualquier función que pueda definirse mediante programación informática. Ambos " +"enfrentaron el desafío de equilibrar la escalabilidad con la descentralización. Estas redes de integridad a menudo han favorecido la inclusión sobre la capacidad, asegurando " +"que incluso aquellos con recursos limitados puedan autenticar la integridad del sistema. Sin embargo, esto significa que tienen dificultades para satisfacer la demanda " +"global." #: src/ch00-00-introduction.md:15 msgid "## Defining \"Blockchain\"" @@ -468,36 +564,24 @@ msgstr "" #: src/ch00-00-introduction.md:17 msgid "" -"In the ever-evolving realm of technology, defining a term as multifaceted as " -"\"Blockchain\" can be challenging. Based on current understandings and " -"applications, a Blockchain can be characterized by the following three " -"properties ([Eli Ben-Sasson, 2023](https://twitter.com/EliBenSasson/" -"status/1709272086504485265)):" +"In the ever-evolving realm of technology, defining a term as multifaceted as \"Blockchain\" can be challenging. Based on current understandings and applications, a " +"Blockchain can be characterized by the following three properties ([Eli Ben-Sasson, 2023](https://twitter.com/EliBenSasson/status/1709272086504485265)):" msgstr "" #: src/ch00-00-introduction.md:19 msgid "" -"1. **Public Protocol:** The foundation of a Blockchain rests upon a protocol " -"that is openly available. This transparency ensures that any interested " -"party can understand its workings, fostering trust and enabling wider " -"adoption.\n" -"2. **Open P2P Network:** Instead of relying on a centralized entity, a " -"Blockchain operates over a peer-to-peer (P2P) network. This decentralized " -"approach ensures that operations are distributed across various participants " -"or nodes, making the system more resilient to failures and censorship.\n" -"3. **Value Distribution:** Central to the Blockchain's operation is the way " -"it rewards its operators. The system autonomously distributes value in a " -"manner that is wide-ranging and equitable. This incentivization not only " -"motivates participants to maintain the system's integrity but also ensures a " -"broader societal consensus." +"1. **Public Protocol:** The foundation of a Blockchain rests upon a protocol that is openly available. This transparency ensures that any interested party can understand its " +"workings, fostering trust and enabling wider adoption.\n" +"2. **Open P2P Network:** Instead of relying on a centralized entity, a Blockchain operates over a peer-to-peer (P2P) network. This decentralized approach ensures that " +"operations are distributed across various participants or nodes, making the system more resilient to failures and censorship.\n" +"3. **Value Distribution:** Central to the Blockchain's operation is the way it rewards its operators. The system autonomously distributes value in a manner that is wide-" +"ranging and equitable. This incentivization not only motivates participants to maintain the system's integrity but also ensures a broader societal consensus." msgstr "" #: src/ch00-00-introduction.md:23 msgid "" -"While these properties capture the essence of many Blockchains, the term's " -"definition might need refinement as the technology matures and finds new " -"applications. Engaging in continuous dialogue and revisiting definitions " -"will be crucial in this dynamic landscape." +"While these properties capture the essence of many Blockchains, the term's definition might need refinement as the technology matures and finds new applications. Engaging in " +"continuous dialogue and revisiting definitions will be crucial in this dynamic landscape." msgstr "" #: src/ch00-00-introduction.md:25 @@ -506,20 +590,15 @@ msgstr "" #: src/ch00-00-introduction.md:27 msgid "" -"Starknet is a Layer-2 network that makes Ethereum transactions faster, " -"cheaper, and more secure using zk-STARKs technology. Think of it as a " -"boosted layer on top of Ethereum, optimized for speed and cost." +"Starknet is a Layer-2 network that makes Ethereum transactions faster, cheaper, and more secure using zk-STARKs technology. Think of it as a boosted layer on top of " +"Ethereum, optimized for speed and cost." msgstr "" #: src/ch00-00-introduction.md:29 msgid "" -"Starknet bridges the gap between scalability and broad consensus. It " -"integrates a mathematical framework to navigate the balance between capacity " -"and inclusivity. Its integrity hinges on the robustness of succinct, " -"transparent proofs of computational integrity. This method lets powerful " -"operators enhance Starknet's capacity, ensuring everyone can authenticate " -"Starknet's integrity using universally accessible tools ([Eli Ben-Sasson, " -"Bareli, Brandt, Volokh, 2023](https://hackmd.io/@Elibensasson/ryMelVulp))." +"Starknet bridges the gap between scalability and broad consensus. It integrates a mathematical framework to navigate the balance between capacity and inclusivity. Its " +"integrity hinges on the robustness of succinct, transparent proofs of computational integrity. This method lets powerful operators enhance Starknet's capacity, ensuring " +"everyone can authenticate Starknet's integrity using universally accessible tools ([Eli Ben-Sasson, Bareli, Brandt, Volokh, 2023](https://hackmd.io/@Elibensasson/ryMelVulp))." msgstr "" #: src/ch00-00-introduction.md:31 @@ -527,9 +606,7 @@ msgid "## Starknet’s Mission" msgstr "" #: src/ch00-00-introduction.md:33 -msgid "" -"_Starknet’s mission is to allow individuals to freely implement and use any " -"social function they desire._" +msgid "_Starknet’s mission is to allow individuals to freely implement and use any social function they desire._" msgstr "" #: src/ch00-00-introduction.md:35 @@ -537,35 +614,25 @@ msgid "## Starknet’s Values" msgstr "" #: src/ch00-00-introduction.md:37 -msgid "" -"Starknet's ethos is anchored in core principles ([Eli Ben-Sasson, Bareli, " -"Brandt, Volokh, 2023](https://hackmd.io/@Elibensasson/ryMelVulp)):" +msgid "Starknet's ethos is anchored in core principles ([Eli Ben-Sasson, Bareli, Brandt, Volokh, 2023](https://hackmd.io/@Elibensasson/ryMelVulp)):" msgstr "" #: src/ch00-00-introduction.md:39 msgid "" -"- **Lasting Broadness.** Starknet continuously resists power consolidation. " -"Key points include:\n" +"- **Lasting Broadness.** Starknet continuously resists power consolidation. Key points include:\n" "\n" -" - Broad power distribution underpins Starknet's legitimacy and must " -"persist across operations and decision-making. While centralized operation " -"may be necessary at times, it should be short-lived.\n" -" - Starknet's protocol and governance should always be open and " -"transparent.\n" -" - Governance should bolster inclusivity, with a flexible structure that " -"can evolve to ensure enduring inclusivity.\n" +" - Broad power distribution underpins Starknet's legitimacy and must persist across operations and decision-making. While centralized operation may be necessary at times, " +"it should be short-lived.\n" +" - Starknet's protocol and governance should always be open and transparent.\n" +" - Governance should bolster inclusivity, with a flexible structure that can evolve to ensure enduring inclusivity.\n" "\n" -"- **Neutrality.** Starknet remains impartial to the societal functions it " -"supports.\n" +"- **Neutrality.** Starknet remains impartial to the societal functions it supports.\n" "\n" -" - The objectives and ethos of functions on Starknet lie with their " -"creators.\n" -" - **Censorship resistance:** Starknet remains agnostic to the nature and " -"meaning of user transactions.\n" +" - The objectives and ethos of functions on Starknet lie with their creators.\n" +" - **Censorship resistance:** Starknet remains agnostic to the nature and meaning of user transactions.\n" "\n" -"- **Individual Empowerment.** At its core, Starknet thrives on a well-" -"informed and autonomous user base. This is achieved by fostering a culture " -"rooted in its core mission and values, with a strong emphasis on education." +"- **Individual Empowerment.** At its core, Starknet thrives on a well-informed and autonomous user base. This is achieved by fostering a culture rooted in its core mission " +"and values, with a strong emphasis on education." msgstr "" #: src/ch00-00-introduction.md:52 @@ -706,8 +773,7 @@ msgid "" "specifications of the change and the reasons behind it. If you’re\n" "proposing a SNIP, it’s your job to rally community support and document\n" "any objections (more details\n" -"[here](https://community.starknet.io/t/draft-simp-1-simp-purpose-and-" -"guidelines/1197#what-is-a-snip-2)).\n" +"[here](https://community.starknet.io/t/draft-simp-1-simp-purpose-and-guidelines/1197#what-is-a-snip-2)).\n" "Once a SNIP is approved, it becomes a part of the Starknet protocol. All\n" "the SNIPs can be found in [this\n" "repository](https://github.com/starknet-io/SNIPs)." @@ -762,21 +828,16 @@ msgid "" " Practical tutorials and examples" msgstr "" -#: src/ch00-00-introduction.md:176 src/ch02-08-starknet-react.md:361 -#: src/ch03-00-architecture.md:251 src/ch03-02-sequencers.md:216 -#: src/ch03-03-provers.md:243 src/ch04-00-account-abstraction.md:242 +#: src/ch00-00-introduction.md:176 src/ch02-08-starknet-react.md:361 src/ch03-00-architecture.md:251 src/ch03-02-sequencers.md:216 src/ch03-03-provers.md:243 +#: src/ch04-00-account-abstraction.md:242 msgid "## Conclusion" msgstr "" #: src/ch00-00-introduction.md:178 msgid "" -"In decentralized technology, Starknet offers a solution to challenges that " -"previous systems encountered. It's based on established _protocols_ and " -"_registries_, following the initial concepts introduced by figures such as " -"Satoshi. Through a specific mathematical method, Starknet seeks a balance " -"between scalability and consensus. As this technology progresses, Starknet " -"adheres to principles of inclusivity, neutrality, and user empowerment. It's " -"poised for continuous adaptation and improvement in the field." +"In decentralized technology, Starknet offers a solution to challenges that previous systems encountered. It's based on established _protocols_ and _registries_, following " +"the initial concepts introduced by figures such as Satoshi. Through a specific mathematical method, Starknet seeks a balance between scalability and consensus. As this " +"technology progresses, Starknet adheres to principles of inclusivity, neutrality, and user empowerment. It's poised for continuous adaptation and improvement in the field." msgstr "" #: src/ch01-00-getting-started.md:1 @@ -785,20 +846,13 @@ msgstr "" #: src/ch01-00-getting-started.md:3 msgid "" -"Starknet is a scalable Layer-2 solution on Ethereum. This guide will walk " -"you through the process of deploying and interacting with your first " -"Starknet smart contract using the Cairo programming language, a language " -"tailored for creating validity proofs and that Starknet uses. For seasoned " -"developers looking to understand the core concepts and get hands-on " -"experience, this guide offers step-by-step instructions and essential " -"details." +"Starknet is a scalable Layer-2 solution on Ethereum. This guide will walk you through the process of deploying and interacting with your first Starknet smart contract using " +"the Cairo programming language, a language tailored for creating validity proofs and that Starknet uses. For seasoned developers looking to understand the core concepts and " +"get hands-on experience, this guide offers step-by-step instructions and essential details." msgstr "" #: src/ch01-00-getting-started.md:5 -msgid "" -"We will use the Starknet Remix Plugin to compile, deploy and interact with " -"our smart contract. It is a great tool to get started with Starknet " -"development." +msgid "We will use the Starknet Remix Plugin to compile, deploy and interact with our smart contract. It is a great tool to get started with Starknet development." msgstr "" #: src/ch01-00-getting-started.md:7 @@ -809,9 +863,7 @@ msgid "" msgstr "" #: src/ch01-00-getting-started.md:11 -msgid "" -"\"Activate" +msgid "\"Activate" msgstr "" #: src/ch01-00-getting-started.md:13 @@ -819,9 +871,7 @@ msgid "Activate the Starknet Plugin" msgstr "" #: src/ch01-00-getting-started.md:15 -msgid "" -"4. After enabling, the Starknet logo appears on the left sidebar. Click it " -"to interact with opened Cairo files." +msgid "4. After enabling, the Starknet logo appears on the left sidebar. Click it to interact with opened Cairo files." msgstr "" #: src/ch01-00-getting-started.md:17 @@ -829,9 +879,7 @@ msgid "## Introduction to Starknet Smart Contracts" msgstr "" #: src/ch01-00-getting-started.md:19 -msgid "" -"The script below is a simple `Ownable` contract pattern written in Cairo for " -"Starknet. It features:" +msgid "The script below is a simple `Ownable` contract pattern written in Cairo for Starknet. It features:" msgstr "" #: src/ch01-00-getting-started.md:21 @@ -884,8 +932,7 @@ msgid "" "\n" " #[external(v0)]\n" " impl OwnableImpl of super::OwnableTrait {\n" -" fn transfer_ownership(ref self: ContractState, new_owner: " -"ContractAddress) {\n" +" fn transfer_ownership(ref self: ContractState, new_owner: ContractAddress) {\n" " self.only_owner();\n" " let prev_owner = self.owner.read();\n" " self.owner.write(new_owner);\n" @@ -917,30 +964,23 @@ msgstr "" #: src/ch01-00-getting-started.md:93 msgid "" -"The following is a brief description of the components in the contract. We " -"will get into more details when we get deeper into Cairo so feel free to " -"skip this section for now if you are not familiar with smart contract " -"development." +"The following is a brief description of the components in the contract. We will get into more details when we get deeper into Cairo so feel free to skip this section for now " +"if you are not familiar with smart contract development." msgstr "" #: src/ch01-00-getting-started.md:95 msgid "" "1. **Dependencies and Interface**:\n" -" - **`starknet::ContractAddress`**: Represents a Starknet contract " -"address.\n" -" - **`OwnableTrait`**: Specifies functions for transferring and getting " -"ownership.\n" +" - **`starknet::ContractAddress`**: Represents a Starknet contract address.\n" +" - **`OwnableTrait`**: Specifies functions for transferring and getting ownership.\n" "2. **Events**:\n" -" - **`OwnershipTransferred1`**: Indicates ownership change with previous " -"and new owner details.\n" +" - **`OwnershipTransferred1`**: Indicates ownership change with previous and new owner details.\n" "3. **Storage**:\n" -" - **`Storage`**: Holds the contract's state with the current owner's " -"address.\n" +" - **`Storage`**: Holds the contract's state with the current owner's address.\n" "4. **Constructor**:\n" " - Initializes the contract with a starting owner.\n" "5. **External Functions**:\n" -" - Functions for transferring ownership and retrieving the current owner's " -"details.\n" +" - Functions for transferring ownership and retrieving the current owner's details.\n" "6. **Private Methods**:\n" " - **`only_owner`**: Validates if the caller is the current owner." msgstr "" @@ -964,17 +1004,13 @@ msgid "" "\n" " - Choose the `Ownable.cairo` file.\n" " - In the \"Starknet\" tab, select \"Compile Ownable.cairo\".\n" -" - Post-compilation, an \"artifacts\" folder emerges containing the " -"compiled contract in two distinct formats: Sierra (JSON file) and CASM. For " -"Starknet deployment, Remix will use the Sierra file. Do not worry about this " -"process for now; we will cover it in detail in a later chapter. For now, " -"Remix will handle the compilation and deployment for us." +" - Post-compilation, an \"artifacts\" folder emerges containing the compiled contract in two distinct formats: Sierra (JSON file) and CASM. For Starknet deployment, Remix " +"will use the Sierra file. Do not worry about this process for now; we will cover it in detail in a later chapter. For now, Remix will handle the compilation and deployment " +"for us." msgstr "" #: src/ch01-00-getting-started.md:124 -msgid "" -"\"Artifacts" +msgid "\"Artifacts" msgstr "" #: src/ch01-00-getting-started.md:126 @@ -986,15 +1022,11 @@ msgid "## Deployment on the Development Network" msgstr "" #: src/ch01-00-getting-started.md:130 -msgid "" -"To set your smart contract in motion, an initial owner must be defined. The " -"Constructor function needs this information." +msgid "To set your smart contract in motion, an initial owner must be defined. The Constructor function needs this information." msgstr "" #: src/ch01-00-getting-started.md:132 -msgid "" -"Here's a step-by-step guide to deploying your smart contract on the " -"development network:" +msgid "Here's a step-by-step guide to deploying your smart contract on the development network:" msgstr "" #: src/ch01-00-getting-started.md:134 @@ -1002,13 +1034,11 @@ msgid "" "1. **Select the Appropriate Network**\n" "\n" " - Go to the Environment selection tab.\n" -" - Choose \"Remote Devnet\" for deploying your inaugural contract on a " -"development network.\n" +" - Choose \"Remote Devnet\" for deploying your inaugural contract on a development network.\n" "\n" "2. **Choose a Devnet Account**\n" "\n" -" - Under \"Devnet account selection\", a list of accounts specific to the " -"chosen devnet is presented.\n" +" - Under \"Devnet account selection\", a list of accounts specific to the chosen devnet is presented.\n" " - Pick any account and copy its address.\n" "\n" "3. **Initiating Deployment**\n" @@ -1019,17 +1049,13 @@ msgid "" msgstr "" #: src/ch01-00-getting-started.md:150 -msgid "" -"Post-deployment, Remix's terminal will send various logs. These logs provide " -"crucial details, including:" +msgid "Post-deployment, Remix's terminal will send various logs. These logs provide crucial details, including:" msgstr "" #: src/ch01-00-getting-started.md:152 msgid "" -"- `transaction_hash`: The unique hash of the transaction. This hash can be " -"used to track the transaction's status.\n" -"- `contract_address`: The address of the deployed contract. Use this address " -"to interact with your contract.\n" +"- `transaction_hash`: The unique hash of the transaction. This hash can be used to track the transaction's status.\n" +"- `contract_address`: The address of the deployed contract. Use this address to interact with your contract.\n" "- `calldata`: Contains the `init_owner` address fed to the constructor." msgstr "" @@ -1037,10 +1063,8 @@ msgstr "" msgid "" "```bash\n" "{\n" -" \"transaction_hash\": " -"\"0x275e6d2caf9bc98b47ba09fa9034668c6697160a74de89c4655e2a70be84247\",\n" -" \"contract_address\": " -"\"0x5eb239955ad4c4333b8ab83406a3cf5970554b60a0d8e78a531df18c59a0db9\",\n" +" \"transaction_hash\": \"0x275e6d2caf9bc98b47ba09fa9034668c6697160a74de89c4655e2a70be84247\",\n" +" \"contract_address\": \"0x5eb239955ad4c4333b8ab83406a3cf5970554b60a0d8e78a531df18c59a0db9\",\n" " ...\n" " \"calldata\": [\n" " \"0x4d9c8282b5633eeb1aab56393690d76f71e32f1b7be1bea03eb03e059245a28\"\n" @@ -1051,9 +1075,7 @@ msgid "" msgstr "" #: src/ch01-00-getting-started.md:168 -msgid "" -"By following the above process, you successfully deploy your smart contract " -"on the development network." +msgid "By following the above process, you successfully deploy your smart contract on the development network." msgstr "" #: src/ch01-00-getting-started.md:170 @@ -1061,10 +1083,7 @@ msgid "## Interaction with the Contract" msgstr "" #: src/ch01-00-getting-started.md:172 -msgid "" -"With the contract now active on the development network, interaction becomes " -"possible. Here's a guide to effectively interact with your contract on " -"Starknet:" +msgid "With the contract now active on the development network, interaction becomes possible. Here's a guide to effectively interact with your contract on Starknet:" msgstr "" #: src/ch01-00-getting-started.md:174 @@ -1076,12 +1095,10 @@ msgid "" "\n" "2. **Calling the `get_owner` Function**\n" "\n" -" - Choose the `get_owner` function. Since this function doesn't require " -"arguments, the calldata field remains blank. (This is a read function, hence " -"calling it is termed as a \"call\".)\n" -" - Press the \"get_owner\" button. Your terminal will display the result, " -"revealing the owner's address provided during the contract's deployment as " -"calldata for the constructor:" +" - Choose the `get_owner` function. Since this function doesn't require arguments, the calldata field remains blank. (This is a read function, hence calling it is termed " +"as a \"call\".)\n" +" - Press the \"get_owner\" button. Your terminal will display the result, revealing the owner's address provided during the contract's deployment as calldata for the " +"constructor:" msgstr "" #: src/ch01-00-getting-started.md:184 @@ -1100,9 +1117,7 @@ msgid "" msgstr "" #: src/ch01-00-getting-started.md:196 -msgid "" -"This call currently doesn't spend gas because the function does not change " -"the state of the contract." +msgid "This call currently doesn't spend gas because the function does not change the state of the contract." msgstr "" #: src/ch01-00-getting-started.md:198 @@ -1111,27 +1126,17 @@ msgstr "" #: src/ch01-00-getting-started.md:200 msgid "" -"- Now, for the **`transfer_ownership`** function, which requires the new " -"owner's address as input.\n" -"- Enter this address into the calldata field. (For this, use any address " -"from the \"Devnet account selection\" listed in the Environment tab.)\n" -"- Click the \"transfer_ownership\" button. The terminal then showcases the " -"transaction hash indicating the contract's state alteration. Since we are " -"altering the contract's state this typo of interaction is called an " -"\"invoke\" and needs to be signed by the account that is calling the " -"function." +"- Now, for the **`transfer_ownership`** function, which requires the new owner's address as input.\n" +"- Enter this address into the calldata field. (For this, use any address from the \"Devnet account selection\" listed in the Environment tab.)\n" +"- Click the \"transfer_ownership\" button. The terminal then showcases the transaction hash indicating the contract's state alteration. Since we are altering the contract's " +"state this typo of interaction is called an \"invoke\" and needs to be signed by the account that is calling the function." msgstr "" #: src/ch01-00-getting-started.md:204 msgid "" -"For these transactions, the terminal logs will exhibit a \"status\" " -"variable, indicating the transaction's fate. If the status reads " -"\"ACCEPTED_ON_L2\", the Sequencer has accepted the transaction, pending " -"block inclusion. However, a \"REJECTED\" status signifies the Sequencer's " -"disapproval, and the transaction won't feature in the upcoming block. More " -"often than not, this transaction gains acceptance, leading to a contract " -"state modification. On calling the **`get_owner`** function again we get " -"this:" +"For these transactions, the terminal logs will exhibit a \"status\" variable, indicating the transaction's fate. If the status reads \"ACCEPTED_ON_L2\", the Sequencer has " +"accepted the transaction, pending block inclusion. However, a \"REJECTED\" status signifies the Sequencer's disapproval, and the transaction won't feature in the upcoming " +"block. More often than not, this transaction gains acceptance, leading to a contract state modification. On calling the **`get_owner`** function again we get this:" msgstr "" #: src/ch01-00-getting-started.md:206 @@ -1150,9 +1155,7 @@ msgid "" msgstr "" #: src/ch01-00-getting-started.md:218 -msgid "" -"You've now adeptly compiled, deployed, and interacted with your inaugural " -"Starknet smart contract. Well done!" +msgid "You've now adeptly compiled, deployed, and interacted with your inaugural Starknet smart contract. Well done!" msgstr "" #: src/ch01-00-getting-started.md:220 @@ -1161,10 +1164,8 @@ msgstr "" #: src/ch01-00-getting-started.md:222 msgid "" -"After testing your smart contract on a development network, it's time to " -"deploy it to the Starknet Testnet. Starknet Testnet is a public platform " -"available for everyone, ideal for testing smart contracts and collaborating " -"with fellow developers." +"After testing your smart contract on a development network, it's time to deploy it to the Starknet Testnet. Starknet Testnet is a public platform available for everyone, " +"ideal for testing smart contracts and collaborating with fellow developers." msgstr "" #: src/ch01-00-getting-started.md:224 @@ -1177,10 +1178,8 @@ msgstr "" #: src/ch01-00-getting-started.md:228 msgid "" -"Before deploying your smart contract to Starknet, you must handle the " -"transaction cost. While deploying to the Starknet Goerli Testnet is free, a " -"smart wallet account is essential. You can set up a smart wallet using " -"either:" +"Before deploying your smart contract to Starknet, you must handle the transaction cost. While deploying to the Starknet Goerli Testnet is free, a smart wallet account is " +"essential. You can set up a smart wallet using either:" msgstr "" #: src/ch01-00-getting-started.md:230 @@ -1191,24 +1190,20 @@ msgstr "" #: src/ch01-00-getting-started.md:233 msgid "" -"Both are reliable Starknet wallets offering enhanced security and " -"accessibility features thanks to the possibilities that the Cairo VM brings, " -"such as Account Abstraction (keep reading the Book for more on this)." +"Both are reliable Starknet wallets offering enhanced security and accessibility features thanks to the possibilities that the Cairo VM brings, such as Account Abstraction " +"(keep reading the Book for more on this)." msgstr "" #: src/ch01-00-getting-started.md:235 msgid "" "1. Install the recommended chrome/brave extension for your chosen wallet.\n" "2. Follow your wallet provider's instructions to deploy your account.\n" -" 1. Use the [Starknet Faucet](https://faucet.goerli.starknet.io/) to fund " -"your account.\n" +" 1. Use the [Starknet Faucet](https://faucet.goerli.starknet.io/) to fund your account.\n" "3. Deploy the account to the network. This usually takes around 10 seconds." msgstr "" #: src/ch01-00-getting-started.md:240 -msgid "" -"Once set up, you're ready to deploy your smart contracts to the Starknet " -"Testnet." +msgid "Once set up, you're ready to deploy your smart contracts to the Starknet Testnet." msgstr "" #: src/ch01-00-getting-started.md:242 @@ -1219,14 +1214,11 @@ msgstr "" msgid "" "1. Follow the previous deployment steps.\n" "2. In the 'Environment selection' tab, choose 'Wallet Selection'.\n" -"3. Select your Starknet account and continue with deploying and interacting " -"with your contract." +"3. Select your Starknet account and continue with deploying and interacting with your contract." msgstr "" #: src/ch01-00-getting-started.md:248 -msgid "" -"You can monitor transaction hashes and addresses using any Starknet block " -"explorers like:" +msgid "You can monitor transaction hashes and addresses using any Starknet block explorers like:" msgstr "" #: src/ch01-00-getting-started.md:250 @@ -1237,10 +1229,8 @@ msgstr "" #: src/ch01-00-getting-started.md:253 msgid "" -"These tools provide a visual representation of transactions and contract " -"state alterations. Notably, when you alter the contract ownership using the " -"`transfer_ownership` function, the event emitted by the contract appears in " -"the block explorer. It's an effective method to track contract events." +"These tools provide a visual representation of transactions and contract state alterations. Notably, when you alter the contract ownership using the `transfer_ownership` " +"function, the event emitted by the contract appears in the block explorer. It's an effective method to track contract events." msgstr "" #: src/ch01-00-getting-started.md:255 @@ -1253,19 +1243,13 @@ msgstr "" #: src/ch01-00-getting-started.md:259 msgid "" -"1. **Deepen Your Starknet Knowledge**: For an extensive grasp of Starknet's " -"inner workings and potential use cases, delve into Chapter 3 of the Starknet " -"Book. This chapter details Starknet’s architectural nuances. Then go ahead " -"from there.\n" +"1. **Deepen Your Starknet Knowledge**: For an extensive grasp of Starknet's inner workings and potential use cases, delve into Chapter 3 of the Starknet Book. This chapter " +"details Starknet’s architectural nuances. Then go ahead from there.\n" "\n" -"2. **Dive into Cairo**: If you're more attuned to coding and wish to craft " -"Starknet contracts, then Cairo is essential. It stands as Starknet's core " -"contract language. Begin with Chapters 1-6 of the [Cairo Book](https://book." -"cairo-lang.org/title-page.html), ranging from basics in _Getting Started_ to " -"more advanced aspects such as _Enums and Pattern Matching_. Conclude by " -"navigating to the [Starknet Smart Contracts chapter](https://book.cairo-lang." -"org/ch99-00-starknet-smart-contracts.html), ensuring you have a well-rounded " -"understanding." +"2. **Dive into Cairo**: If you're more attuned to coding and wish to craft Starknet contracts, then Cairo is essential. It stands as Starknet's core contract language. Begin " +"with Chapters 1-6 of the [Cairo Book](https://book.cairo-lang.org/title-page.html), ranging from basics in _Getting Started_ to more advanced aspects such as _Enums and " +"Pattern Matching_. Conclude by navigating to the [Starknet Smart Contracts chapter](https://book.cairo-lang.org/ch99-00-starknet-smart-contracts.html), ensuring you have a " +"well-rounded understanding." msgstr "" #: src/ch02-00-starknet-tooling.md:1 @@ -1343,8 +1327,7 @@ msgid "" "6. Starknet-react: Builds front-end apps using React." msgstr "" -#: src/ch02-01-basic-installation.md:1 src/ch02-03-scarb.md:34 -#: src/ch02-07-starknet-js.md:13 +#: src/ch02-01-basic-installation.md:1 src/ch02-03-scarb.md:34 src/ch02-07-starknet-js.md:13 msgid "# Installation" msgstr "" @@ -1413,9 +1396,7 @@ msgid "## Scarb Package Manager Installation" msgstr "" #: src/ch02-01-basic-installation.md:39 -msgid "" -"We will get deeper into Scarb later in this chapter. For now, we will go " -"over the installation process." +msgid "We will get deeper into Scarb later in this chapter. For now, we will go over the installation process." msgstr "" #: src/ch02-01-basic-installation.md:41 @@ -1425,8 +1406,7 @@ msgstr "" #: src/ch02-01-basic-installation.md:43 msgid "" "```bash\n" -" curl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/" -"install.sh | sh\n" +" curl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/install.sh | sh\n" "```" msgstr "" @@ -1440,8 +1420,7 @@ msgstr "" msgid "Restart the terminal and run:" msgstr "" -#: src/ch02-01-basic-installation.md:52 -#: src/ch02-02-compile-deploy-interact.md:38 +#: src/ch02-01-basic-installation.md:52 src/ch02-02-compile-deploy-interact.md:38 msgid "" "```bash\n" " scarb --version\n" @@ -1512,8 +1491,7 @@ msgid "" "```bash\n" " ...\n" " --compiler-version \n" -" Statically-linked Sierra compiler version [possible values: " -"[COMPILER VERSIONS]]]\n" +" Statically-linked Sierra compiler version [possible values: [COMPILER VERSIONS]]]\n" " ...\n" "```" msgstr "" @@ -1553,8 +1531,7 @@ msgstr "" #: src/ch02-02-compile-deploy-interact.md:58 msgid "" "```bash\n" -" curl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/" -"install.sh | sh -s -- -v 0.6.1\n" +" curl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/install.sh | sh -s -- -v 0.6.1\n" "```" msgstr "" @@ -1629,8 +1606,7 @@ msgstr "" #: src/ch02-02-compile-deploy-interact.md:104 msgid "" "```bash\n" -" starkli signer keystore from-key ~/.starkli-wallets/deployer/" -"my_keystore_1.json\n" +" starkli signer keystore from-key ~/.starkli-wallets/deployer/my_keystore_1.json\n" " Enter private key:\n" " Enter password:\n" "```" @@ -1686,8 +1662,7 @@ msgid "" "3. **Smart Wallet Address**: Unlike Ethereum, the address here is\n" " influenced by the public key, class hash, and a salt. **[Learn more\n" " in Starknet\n" -" Documentation](https://docs.starknet.io/documentation/" -"architecture_and_concepts/Smart_Contracts/contract-address/)**." +" Documentation](https://docs.starknet.io/documentation/architecture_and_concepts/Smart_Contracts/contract-address/)**." msgstr "" #: src/ch02-02-compile-deploy-interact.md:144 @@ -1714,19 +1689,16 @@ msgid "" " \"cipherparams\": {\n" " \"iv\": \"dba5f9a67456b121f3f486aa18e24db7\"\n" " },\n" -" \"ciphertext\": " -"\"b3cda3df39563e3dd61064149d6ed8c9ab5f07fbcd6347625e081fb695ddf36c\",\n" +" \"ciphertext\": \"b3cda3df39563e3dd61064149d6ed8c9ab5f07fbcd6347625e081fb695ddf36c\",\n" " \"kdf\": \"scrypt\",\n" " \"kdfparams\": {\n" " \"dklen\": 32,\n" " \"n\": 8192,\n" " \"p\": 1,\n" " \"r\": 8,\n" -" \"salt\": " -"\"6dd5b06b1077ba25a7bf511510ea0c608424c6657dd3ab51b93029244537dffb\"\n" +" \"salt\": \"6dd5b06b1077ba25a7bf511510ea0c608424c6657dd3ab51b93029244537dffb\"\n" " },\n" -" \"mac\": " -"\"55e1616d9ddd052864a1ae4207824baac58a6c88798bf28585167a5986585ce6\"\n" +" \"mac\": \"55e1616d9ddd052864a1ae4207824baac58a6c88798bf28585167a5986585ce6\"\n" " },\n" " \"id\": \"afbb9007-8f61-4e62-bf14-e491c30fd09a\",\n" " \"version\": 3\n" @@ -1815,8 +1787,7 @@ msgstr "" #: src/ch02-02-compile-deploy-interact.md:240 msgid "" "```bash\n" -" starkli account fetch --output ~/.starkli-wallets/" -"deployer/my_account_1.json\n" +" starkli account fetch --output ~/.starkli-wallets/deployer/my_account_1.json\n" "```" msgstr "" @@ -1832,8 +1803,7 @@ msgid "" "```bash\n" " Account contract type identified as: Braavos\n" " Description: Braavos official proxy account\n" -" Downloaded new account config file: ~/.starkli-wallets/deployer/" -"my_account_1.json\n" +" Downloaded new account config file: ~/.starkli-wallets/deployer/my_account_1.json\n" "```" msgstr "" @@ -1860,25 +1830,21 @@ msgid "" " \"variant\": {\n" " \"type\": \"braavos\",\n" " \"version\": 1,\n" -" \"implementation\": " -"\"0x5dec330eebf36c8672b60db4a718d44762d3ae6d1333e553197acb47ee5a062\",\n" +" \"implementation\": \"0x5dec330eebf36c8672b60db4a718d44762d3ae6d1333e553197acb47ee5a062\",\n" " \"multisig\": {\n" " \"status\": \"off\"\n" " },\n" " \"signers\": [\n" " {\n" " \"type\": \"stark\",\n" -" \"public_key\": " -"\"0x49759ed6197d0d385a96f9d8e7af350848b07777e901f5570b3dc2d9744a25e\"\n" +" \"public_key\": \"0x49759ed6197d0d385a96f9d8e7af350848b07777e901f5570b3dc2d9744a25e\"\n" " }\n" " ]\n" " },\n" " \"deployment\": {\n" " \"status\": \"deployed\",\n" -" \"class_hash\": " -"\"0x3131fa018d520a037686ce3efddeab8f28895662f019ca3ca18a626650f7d1e\",\n" -" \"address\": " -"\"0x6dcb489c1a93069f469746ef35312d6a3b9e56ccad7f21f0b69eb799d6d2821\"\n" +" \"class_hash\": \"0x3131fa018d520a037686ce3efddeab8f28895662f019ca3ca18a626650f7d1e\",\n" +" \"address\": \"0x6dcb489c1a93069f469746ef35312d6a3b9e56ccad7f21f0b69eb799d6d2821\"\n" " }\n" "}\n" "```" @@ -1931,8 +1897,7 @@ msgstr "" #: src/ch02-02-compile-deploy-interact.md:311 msgid "" "To get started, navigate to the `contracts/` directory in the [first\n" -"chapter](https://github.com/starknet-edu/starknetbook/tree/main/chapters/" -"book/modules/chapter_1/pages/contracts)\n" +"chapter](https://github.com/starknet-edu/starknetbook/tree/main/chapters/book/modules/chapter_1/pages/contracts)\n" "of the Starknet Book repo. The `src/lib.cairo` file contains a basic\n" "contract to practice with." msgstr "" @@ -1985,8 +1950,7 @@ msgid "" " up an API key and choose an endpoint. For Infura, it would look like\n" " `https://starknet-goerli.infura.io/v3/`. Learn more in the\n" " [Infura\n" -" documentation](https://docs.infura.io/networks/starknet/how-to/choose-a-" -"network).\n" +" documentation](https://docs.infura.io/networks/starknet/how-to/choose-a-network).\n" "\n" "3. **Your Own Node**: For those who want full control. It’s the most\n" " complex but offers the most freedom. Check out [Chapter 4 of the\n" @@ -2003,8 +1967,7 @@ msgstr "" #: src/ch02-02-compile-deploy-interact.md:356 msgid "" "```bash\n" -" export STARKNET_RPC=\"https://starknet-goerli.g.alchemy.com/v2/" -"\"\n" +" export STARKNET_RPC=\"https://starknet-goerli.g.alchemy.com/v2/\"\n" "```" msgstr "" @@ -2058,8 +2021,7 @@ msgstr "" #: src/ch02-02-compile-deploy-interact.md:387 msgid "" "```bash\n" -" Class hash declared: " -"0x04c70a75f0246e572aa2e1e1ec4fffbe95fa196c60db8d5677a5c3a3b5b6a1a8\n" +" Class hash declared: 0x04c70a75f0246e572aa2e1e1ec4fffbe95fa196c60db8d5677a5c3a3b5b6a1a8\n" "```" msgstr "" @@ -2067,8 +2029,7 @@ msgstr "" msgid "" "You can think of this hash as the contract class’s _address._ Use a\n" "block explorer like\n" -"[StarkScan](https://testnet.starkscan.co/" -"class/0x04c70a75f0246e572aa2e1e1ec4fffbe95fa196c60db8d5677a5c3a3b5b6a1a8)\n" +"[StarkScan](https://testnet.starkscan.co/class/0x04c70a75f0246e572aa2e1e1ec4fffbe95fa196c60db8d5677a5c3a3b5b6a1a8)\n" "to verify this hash on the blockchain." msgstr "" @@ -2108,8 +2069,7 @@ msgstr "" msgid "" "In our example, the constructor expects an _owner_ address. You can\n" "learn more about constructors in \\[Chapter 12 of The Cairo\n" -"Book\\]()." +"Book\\]()." msgstr "" #: src/ch02-02-compile-deploy-interact.md:418 @@ -2136,8 +2096,7 @@ msgstr "" msgid "" "```bash\n" " starkli deploy \\\n" -" 0x04c70a75f0246e572aa2e1e1ec4fffbe95fa196c60db8d5677a5c3a3b5b6a1a8 " -"\\\n" +" 0x04c70a75f0246e572aa2e1e1ec4fffbe95fa196c60db8d5677a5c3a3b5b6a1a8 \\\n" " 0x02cdAb749380950e7a7c0deFf5ea8eDD716fEb3a2952aDd4E5659655077B8510\n" "```" msgstr "" @@ -2151,13 +2110,9 @@ msgstr "" #: src/ch02-02-compile-deploy-interact.md:439 msgid "" "```bash\n" -" Deploying class " -"0x04c70a75f0246e572aa2e1e1ec4fffbe95fa196c60db8d5677a5c3a3b5b6a1a8 with salt " -"0x065034b27a199cbb2a5b97b78a8a6a6c6edd027c7e398b18e5c0e5c0c65246b7...\n" -" The contract will be deployed at address " -"0x02a83c32d4b417d3c22f665acbc10e9a1062033b9ab5b2c3358952541bc6c012\n" -" Contract deployment transaction: " -"0x0743de1e233d38c4f3e9fb13f1794276f7d4bf44af9eac66e22944ad1fa85f14\n" +" Deploying class 0x04c70a75f0246e572aa2e1e1ec4fffbe95fa196c60db8d5677a5c3a3b5b6a1a8 with salt 0x065034b27a199cbb2a5b97b78a8a6a6c6edd027c7e398b18e5c0e5c0c65246b7...\n" +" The contract will be deployed at address 0x02a83c32d4b417d3c22f665acbc10e9a1062033b9ab5b2c3358952541bc6c012\n" +" Contract deployment transaction: 0x0743de1e233d38c4f3e9fb13f1794276f7d4bf44af9eac66e22944ad1fa85f14\n" " Contract deployed:\n" " 0x02a83c32d4b417d3c22f665acbc10e9a1062033b9ab5b2c3358952541bc6c012\n" "```" @@ -2167,8 +2122,7 @@ msgstr "" msgid "" "The contract is now live on the Starknet testnet. You can verify its\n" "status using a block explorer like\n" -"[StarkScan](https://testnet.starkscan.co/" -"contract/0x02a83c32d4b417d3c22f665acbc10e9a1062033b9ab5b2c3358952541bc6c012).\n" +"[StarkScan](https://testnet.starkscan.co/contract/0x02a83c32d4b417d3c22f665acbc10e9a1062033b9ab5b2c3358952541bc6c012).\n" "On the \"Read/Write Contract\" tab, you’ll see the contract’s external\n" "functions." msgstr "" @@ -2196,8 +2150,7 @@ msgid "" "requires no arguments." msgstr "" -#: src/ch02-02-compile-deploy-interact.md:466 -#: src/ch02-02-compile-deploy-interact.md:523 +#: src/ch02-02-compile-deploy-interact.md:466 src/ch02-02-compile-deploy-interact.md:523 msgid "" "```bash\n" " starkli call \\\n" @@ -2255,8 +2208,7 @@ msgstr "" #: src/ch02-02-compile-deploy-interact.md:501 msgid "" "```bash\n" -" Execution was reverted; failure reason: " -"[0x43616c6c6572206973206e6f7420746865206f776e6572].\n" +" Execution was reverted; failure reason: [0x43616c6c6572206973206e6f7420746865206f776e6572].\n" "```" msgstr "" @@ -2348,8 +2300,7 @@ msgstr "" msgid "" "Scarb is cross-platform, supporting macOS, Linux, and Windows. For\n" "installation, refer to the [Chapter 1 setup\n" -"guide](https://book.starknet.io/chapter_1/environment_setup." -"html#the_scarb_package_manager_installation)." +"guide](https://book.starknet.io/chapter_1/environment_setup.html#the_scarb_package_manager_installation)." msgstr "" #: src/ch02-03-scarb.md:40 @@ -2467,8 +2418,7 @@ msgid "" " name = \"hello_scarb\"\n" " version = \"0.1.0\"\n" "\n" -" # See more keys and their definitions at https://docs.swmansion.com/" -"scarb/docs/reference/manifest.html\n" +" # See more keys and their definitions at https://docs.swmansion.com/scarb/docs/reference/manifest.html\n" " [dependencies]\n" " # foo = { path = \"vendor/foo\" }" msgstr "" @@ -2533,8 +2483,7 @@ msgid "" "`target/dev/hello_scarb.sierra` file. Sierra serves as an intermediate\n" "layer between high-level Cairo and compilation targets such as Cairo\n" "Assembly (CASM). To understand more about Sierra, check out this\n" -"[article](https://medium.com/nethermind-eth/under-the-hood-of-cairo-1-0-" -"exploring-sierra-7f32808421f5/)." +"[article](https://medium.com/nethermind-eth/under-the-hood-of-cairo-1-0-exploring-sierra-7f32808421f5/)." msgstr "" #: src/ch02-03-scarb.md:151 @@ -2567,8 +2516,7 @@ msgstr "" #: src/ch02-03-scarb.md:165 msgid "" "[dependencies]\n" -" alexandria_math = { git = \"https://github.com/keep-starknet-strange/" -"alexandria.git\" }" +" alexandria_math = { git = \"https://github.com/keep-starknet-strange/alexandria.git\" }" msgstr "" #: src/ch02-03-scarb.md:168 @@ -2581,8 +2529,7 @@ msgstr "" #: src/ch02-03-scarb.md:172 msgid "" "[dependencies]\n" -" alexandria_math = { git = \"https://github.com/keep-starknet-strange/" -"alexandria.git\", rev = \"81bb93c\" }" +" alexandria_math = { git = \"https://github.com/keep-starknet-strange/alexandria.git\", rev = \"81bb93c\" }" msgstr "" #: src/ch02-03-scarb.md:175 @@ -2600,9 +2547,7 @@ msgid "" msgstr "" #: src/ch02-03-scarb.md:182 -msgid "" -"$ scarb add alexandria_math --git https://github.com/keep-starknet-strange/" -"alexandria.git" +msgid "$ scarb add alexandria_math --git https://github.com/keep-starknet-strange/alexandria.git" msgstr "" #: src/ch02-03-scarb.md:184 @@ -2696,28 +2641,19 @@ msgid "" "Happy coding!" msgstr "" -#: src/ch02-03-scarb.md:239 src/ch02-07-starknet-js.md:174 -#: src/ch02-08-starknet-react.md:395 src/ch03-00-architecture.md:264 -#: src/ch03-02-sequencers.md:254 src/ch03-03-provers.md:233 -#: src/ch03-04-nodes.md:439 src/ch04-00-account-abstraction.md:297 -#: src/ch04-01-accounts.md:116 src/ch04-02-hello-account.md:199 -#: src/ch04-03-standard-account.md:370 src/ch04-04-01-multicaller.md:91 -#: src/ch04-04-02-multisig.md:412 +#: src/ch02-03-scarb.md:239 src/ch02-07-starknet-js.md:174 src/ch02-08-starknet-react.md:395 src/ch03-00-architecture.md:264 src/ch03-02-sequencers.md:254 +#: src/ch03-03-provers.md:233 src/ch03-04-nodes.md:439 src/ch04-00-account-abstraction.md:297 src/ch04-01-accounts.md:116 src/ch04-02-hello-account.md:199 +#: src/ch04-03-standard-account.md:370 src/ch04-04-01-multicaller.md:91 src/ch04-04-02-multisig.md:412 msgid "The Book is a community-driven effort created for the community." msgstr "" -#: src/ch02-03-scarb.md:241 src/ch02-07-starknet-js.md:176 -#: src/ch02-08-starknet-react.md:397 src/ch03-00-architecture.md:266 -#: src/ch03-02-sequencers.md:256 src/ch03-03-provers.md:235 -#: src/ch03-04-nodes.md:441 src/ch04-00-account-abstraction.md:299 -#: src/ch04-01-accounts.md:118 src/ch04-02-hello-account.md:201 -#: src/ch04-03-standard-account.md:372 src/ch04-04-01-multicaller.md:93 -#: src/ch04-04-02-multisig.md:414 +#: src/ch02-03-scarb.md:241 src/ch02-07-starknet-js.md:176 src/ch02-08-starknet-react.md:397 src/ch03-00-architecture.md:266 src/ch03-02-sequencers.md:256 +#: src/ch03-03-provers.md:235 src/ch03-04-nodes.md:441 src/ch04-00-account-abstraction.md:299 src/ch04-01-accounts.md:118 src/ch04-02-hello-account.md:201 +#: src/ch04-03-standard-account.md:372 src/ch04-04-01-multicaller.md:93 src/ch04-04-02-multisig.md:414 msgid "" "- If you’ve learned something, or not, please take a moment to provide\n" " feedback through [this 3-question\n" -" survey](https://a.sprig.com/" -"WTRtdlh2VUlja09lfnNpZDo4MTQyYTlmMy03NzdkLTQ0NDEtOTBiZC01ZjAyNDU0ZDgxMzU=).\n" +" survey](https://a.sprig.com/WTRtdlh2VUlja09lfnNpZDo4MTQyYTlmMy03NzdkLTQ0NDEtOTBiZC01ZjAyNDU0ZDgxMzU=).\n" "\n" "- If you discover any errors or have additional suggestions, don’t\n" " hesitate to open an [issue on our GitHub\n" @@ -2856,26 +2792,17 @@ msgid "" " PREFUNDED ACCOUNTS\n" " ==================\n" "\n" -" | Account address | " -"0x03ee9e18edc71a6df30ac3aca2e0b02a198fbce19b7480a63a0d71cbd76652e0\n" -" | Private key | " -"0x0300001800000000300000180000000000030000000000003006001800006600\n" -" | Public key | " -"0x01b7b37a580d91bc3ad4f9933ed61f3a395e0e51c9dd5553323b8ca3942bb44e\n" +" | Account address | 0x03ee9e18edc71a6df30ac3aca2e0b02a198fbce19b7480a63a0d71cbd76652e0\n" +" | Private key | 0x0300001800000000300000180000000000030000000000003006001800006600\n" +" | Public key | 0x01b7b37a580d91bc3ad4f9933ed61f3a395e0e51c9dd5553323b8ca3942bb44e\n" "\n" -" | Account address | " -"0x033c627a3e5213790e246a917770ce23d7e562baa5b4d2917c23b1be6d91961c\n" -" | Private key | " -"0x0333803103001800039980190300d206608b0070db0012135bd1fb5f6282170b\n" -" | Public key | " -"0x04486e2308ef3513531042acb8ead377b887af16bd4cdd8149812dfef1ba924d\n" +" | Account address | 0x033c627a3e5213790e246a917770ce23d7e562baa5b4d2917c23b1be6d91961c\n" +" | Private key | 0x0333803103001800039980190300d206608b0070db0012135bd1fb5f6282170b\n" +" | Public key | 0x04486e2308ef3513531042acb8ead377b887af16bd4cdd8149812dfef1ba924d\n" "\n" -" | Account address | " -"0x01d98d835e43b032254ffbef0f150c5606fa9c5c9310b1fae370ab956a7919f5\n" -" | Private key | " -"0x07ca856005bee0329def368d34a6711b2d95b09ef9740ebf2c7c7e3b16c1ca9c\n" -" | Public key | " -"0x07006c42b1cfc8bd45710646a0bb3534b182e83c313c7bc88ecf33b53ba4bcbc\n" +" | Account address | 0x01d98d835e43b032254ffbef0f150c5606fa9c5c9310b1fae370ab956a7919f5\n" +" | Private key | 0x07ca856005bee0329def368d34a6711b2d95b09ef9740ebf2c7c7e3b16c1ca9c\n" +" | Public key | 0x07006c42b1cfc8bd45710646a0bb3534b182e83c313c7bc88ecf33b53ba4bcbc\n" "\n" "\n" " ACCOUNTS SEED\n" @@ -2931,9 +2858,7 @@ msgid "" msgstr "" #: src/ch02-07-starknet-js.md:9 -msgid "" -"\"Starknet-js" +msgid "\"Starknet-js" msgstr "" #: src/ch02-07-starknet-js.md:11 @@ -2948,10 +2873,8 @@ msgstr "" msgid "- For the latest official release (main branch):" msgstr "" -#: src/ch02-07-starknet-js.md:19 src/ch02-07-starknet-js.md:25 -#: src/ch04-02-hello-account.md:156 src/ch04-02-hello-account.md:165 -#: src/ch04-02-hello-account.md:174 src/ch04-03-standard-account.md:305 -#: src/ch04-03-standard-account.md:314 +#: src/ch02-07-starknet-js.md:19 src/ch02-07-starknet-js.md:25 src/ch04-02-hello-account.md:156 src/ch04-02-hello-account.md:165 src/ch04-02-hello-account.md:174 +#: src/ch04-03-standard-account.md:305 src/ch04-03-standard-account.md:314 msgid "" msgstr "" @@ -3026,9 +2949,8 @@ msgstr "" #: src/ch02-07-starknet-js.md:64 msgid "" -"The snippet above uses the `connect` function provided by `get-starknet` to " -"establish a connection to the user wallet. Once connected, we are able to " -"access account methods, such as `signMessage` or `execute`." +"The snippet above uses the `connect` function provided by `get-starknet` to establish a connection to the user wallet. Once connected, we are able to access account methods, " +"such as `signMessage` or `execute`." msgstr "" #: src/ch02-07-starknet-js.md:66 @@ -3080,14 +3002,11 @@ msgstr "" #: src/ch02-07-starknet-js.md:97 msgid "" "```ts\n" -"const contract = new Contract(abi_erc20, contractAddress, starknet." -"account);\n" +"const contract = new Contract(abi_erc20, contractAddress, starknet.account);\n" "\n" "const balance = await contract.balanceOf(starknet.account.address);\n" -"const transfer = await contract.transfer(recipientAddress, " -"amountFormatted);\n" -"//or: const transfer = await contract.invoke(\"transfer\", [to, " -"amountFormatted]);\n" +"const transfer = await contract.transfer(recipientAddress, amountFormatted);\n" +"//or: const transfer = await contract.invoke(\"transfer\", [to, amountFormatted]);\n" "\n" "console.log(`Tx hash: ${transfer.transaction_hash}`);\n" "```" @@ -3205,10 +3124,8 @@ msgstr "" #: src/ch02-07-01-examples.md:3 msgid "" -"In this subchapter, readers will find practical examples demonstrating the " -"usage of both `starknet-js` and `starknet-react`. It provides insight into " -"real-world applications and serves as a guide for developers to understand " -"and implement these tools effectively." +"In this subchapter, readers will find practical examples demonstrating the usage of both `starknet-js` and `starknet-react`. It provides insight into real-world applications " +"and serves as a guide for developers to understand and implement these tools effectively." msgstr "" #: src/ch02-07-01-examples.md:5 @@ -3222,9 +3139,7 @@ msgid "" msgstr "" #: src/ch02-07-01-examples.md:10 -msgid "" -"Your insights and feedback are instrumental in making this resource more " -"comprehensive and accurate." +msgid "Your insights and feedback are instrumental in making this resource more comprehensive and accurate." msgstr "" #: src/ch02-07-01-00-erc20-ui.md:1 @@ -3232,10 +3147,7 @@ msgid "# ERC-20 UI" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:3 -msgid "" -"This guide offers steps to build an ERC20 smart contract using Cairo and to " -"incorporate it within a React web application with Starknet React. Readers " -"will:" +msgid "This guide offers steps to build an ERC20 smart contract using Cairo and to incorporate it within a React web application with Starknet React. Readers will:" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:5 @@ -3248,27 +3160,20 @@ msgstr "" #: src/ch02-07-01-00-erc20-ui.md:10 msgid "" -"A prerequisite for this guide is a foundational understanding of both the " -"Cairo programming language and ReactJS. Additionally, ensure Node.js and NPM " -"are installed on the system." +"A prerequisite for this guide is a foundational understanding of both the Cairo programming language and ReactJS. Additionally, ensure Node.js and NPM are installed on the " +"system." msgstr "" #: src/ch02-07-01-00-erc20-ui.md:12 -msgid "" -"The example will walk through creating an ERC20 token named MKT and crafting " -"a web3 interface for functionalities such as balance verification and token " -"transfer." +msgid "The example will walk through creating an ERC20 token named MKT and crafting a web3 interface for functionalities such as balance verification and token transfer." msgstr "" #: src/ch02-07-01-00-erc20-ui.md:14 -msgid "" -"\"Basic" +msgid "\"Basic" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:17 -msgid "" -"Throughout this guide, the following tools and libraries will be utilized:" +msgid "Throughout this guide, the following tools and libraries will be utilized:" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:19 @@ -3288,8 +3193,7 @@ msgid "## Initiating a New Starknet Project" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:30 -msgid "" -"Begin by establishing a new Starknet project named \"erc20\" using Scarb:" +msgid "Begin by establishing a new Starknet project named \"erc20\" using Scarb:" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:32 @@ -3302,9 +3206,7 @@ msgid "" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:38 -msgid "" -"Subsequently, update the Scarb.toml to include the essential OpenZeppelin " -"libraries. Post edits, the Scarb.toml should appear as:" +msgid "Subsequently, update the Scarb.toml to include the essential OpenZeppelin libraries. Post edits, the Scarb.toml should appear as:" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:40 @@ -3314,13 +3216,11 @@ msgid "" "name = \"erc20\"\n" "version = \"0.1.0\"\n" "\n" -"# For more keys and definitions, visit https://docs.swmansion.com/scarb/docs/" -"reference/manifest.html\n" +"# For more keys and definitions, visit https://docs.swmansion.com/scarb/docs/reference/manifest.html\n" "\n" "[dependencies]\n" "starknet = \">=2.2.0\"\n" -"openzeppelin = { git = \"https://github.com/OpenZeppelin-contracts.git\", " -"tag = \"v0.7.0\" }\n" +"openzeppelin = { git = \"https://github.com/OpenZeppelin-contracts.git\", tag = \"v0.7.0\" }\n" "\n" "[[target.starknet-contract]]\n" "```" @@ -3331,9 +3231,7 @@ msgid "## Implementing the ERC20 Token" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:56 -msgid "" -"Begin by creating a new file named `src/erc20.cairo`. In this file, the " -"ERC20 token named MKT, along with its associated functions, will be defined:" +msgid "Begin by creating a new file named `src/erc20.cairo`. In this file, the ERC20 token named MKT, along with its associated functions, will be defined:" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:58 @@ -3358,21 +3256,18 @@ msgid "" "\n" " let mut unsafe_state = ERC20::unsafe_new_contract_state();\n" " ERC20::InternalImpl::initializer(ref unsafe_state, name, symbol);\n" -" ERC20::InternalImpl::_mint(ref unsafe_state, recipient, " -"initial_supply);\n" +" ERC20::InternalImpl::_mint(ref unsafe_state, recipient, initial_supply);\n" " }\n" "\n" " #[external(v0)]\n" " #[generate_trait]\n" " impl Ierc20Impl of Ierc20 {\n" -" fn balance_of(self: @ContractState, account: ContractAddress) -> " -"u256 {\n" +" fn balance_of(self: @ContractState, account: ContractAddress) -> u256 {\n" " let unsafe_state = ERC20::unsafe_new_contract_state();\n" " ERC20::ERC20Impl::balance_of(@unsafe_state, account)\n" " }\n" "\n" -" fn transfer(ref self: ContractState, recipient: ContractAddress, " -"amount: u256) -> bool {\n" +" fn transfer(ref self: ContractState, recipient: ContractAddress, amount: u256) -> bool {\n" " let mut unsafe_state = ERC20::unsafe_new_contract_state();\n" " ERC20::ERC20Impl::transfer(ref unsafe_state, recipient, amount)\n" " }\n" @@ -3382,9 +3277,7 @@ msgid "" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:97 -msgid "" -"\"Basic" +msgid "\"Basic" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:99 @@ -3399,17 +3292,13 @@ msgid "" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:105 -msgid "" -"Subsequent to the compilation, declare the smart contract on the Starknet " -"testnet:" +msgid "Subsequent to the compilation, declare the smart contract on the Starknet testnet:" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:108 msgid "" "```bash\n" -"starkli declare target/dev/erc20_erc20.sierra.json --account ../../demo-" -"account.json --keystore ../../demo-key.json --compiler-version 2.1.0 --" -"network goerli-1 --watch\n" +"starkli declare target/dev/erc20_erc20.sierra.json --account ../../demo-account.json --keystore ../../demo-key.json --compiler-version 2.1.0 --network goerli-1 --watch\n" "```" msgstr "" @@ -3421,27 +3310,21 @@ msgstr "" msgid "" "```bash\n" "Enter keystore password: \n" -"Declaring Cairo 1 class: " -"0x04940154eae35788e899ceb0ef2794eaa5ea6818af5c1c726d6d278fd4979713\n" +"Declaring Cairo 1 class: 0x04940154eae35788e899ceb0ef2794eaa5ea6818af5c1c726d6d278fd4979713\n" "... [shortened for brevity]\n" -"Class hash declared: " -"0x04940154eae35788e899ceb0ef2794eaa5ea6818af5c1c726d6d278fd4979713\n" +"Class hash declared: 0x04940154eae35788e899ceb0ef2794eaa5ea6818af5c1c726d6d278fd4979713\n" "```" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:121 -msgid "" -"In cases where no modifications have been made to the provided contract, a " -"notification will indicate that the contract has previously been declared on " -"Starknet:" +msgid "In cases where no modifications have been made to the provided contract, a notification will indicate that the contract has previously been declared on Starknet:" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:123 msgid "" "```bash\n" "Enter keystore password: \n" -"Not declaring class as it's already declared. Class hash: " -"0x04940154eae35788e899ceb0ef2794eaa5ea6818af5c1c726d6d278fd4979713\n" +"Not declaring class as it's already declared. Class hash: 0x04940154eae35788e899ceb0ef2794eaa5ea6818af5c1c726d6d278fd4979713\n" "```" msgstr "" @@ -3450,30 +3333,21 @@ msgid "## Deploying the ERC20 Contract" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:130 -msgid "" -"Proceed to deploy the MKT Token using Starkli. Provide these arguments for " -"successful deployment:" +msgid "Proceed to deploy the MKT Token using Starkli. Provide these arguments for successful deployment:" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:132 msgid "" -"- `Initial mint`: Mint 1,000,000 tokens. Given that the MKT token comprises " -"18 decimals (a standard of OpenZeppelin), the input required is 1,000,000 * " -"10^18 or 0xd3c21bcecceda1000000. Due to the contract's expectation of a u256 " -"mint value, provide both low and high values: 0xd3c21bcecceda1000000 and 0 " -"respectively.\n" -"- `Receiver address`: Use a preferred address. In this example: " -"0x0334863e3e851de87fb4b6b6113aa2a6b40ea20f22dbec55536e4eac912206fc" +"- `Initial mint`: Mint 1,000,000 tokens. Given that the MKT token comprises 18 decimals (a standard of OpenZeppelin), the input required is 1,000,000 * 10^18 or " +"0xd3c21bcecceda1000000. Due to the contract's expectation of a u256 mint value, provide both low and high values: 0xd3c21bcecceda1000000 and 0 respectively.\n" +"- `Receiver address`: Use a preferred address. In this example: 0x0334863e3e851de87fb4b6b6113aa2a6b40ea20f22dbec55536e4eac912206fc" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:135 msgid "" "```bash\n" -"starkli deploy " -"0x04940154eae35788e899ceb0ef2794eaa5ea6818af5c1c726d6d278fd4979713 --" -"account ../../demo-account.json --keystore ../../demo-key.json --network " -"goerli-1 --watch 0xd3c21bcecceda1000000 0 " -"0x0334863e3e851de87fb4b6b6113aa2a6b40ea20f22dbec55536e4eac912206fc\n" +"starkli deploy 0x04940154eae35788e899ceb0ef2794eaa5ea6818af5c1c726d6d278fd4979713 --account ../../demo-account.json --keystore ../../demo-key.json --network goerli-1 --watch " +"0xd3c21bcecceda1000000 0 0x0334863e3e851de87fb4b6b6113aa2a6b40ea20f22dbec55536e4eac912206fc\n" "```" msgstr "" @@ -3482,22 +3356,18 @@ msgid "" "```bash\n" "Enter keystore password: \n" "... [shortened for brevity]\n" -"Contract deployed: " -"0x001892d81e09cb2c2005f0112891dacb92a6f8ce571edd03ed1f3e549abcf37f\n" +"Contract deployed: 0x001892d81e09cb2c2005f0112891dacb92a6f8ce571edd03ed1f3e549abcf37f\n" "```" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:147 msgid "" -"NOTE: The deployed address received will differ for every user. Retain this " -"address, as it will replace instances in subsequent TypeScript files to " -"match the specific contract address." +"NOTE: The deployed address received will differ for every user. Retain this address, as it will replace instances in subsequent TypeScript files to match the specific " +"contract address." msgstr "" #: src/ch02-07-01-00-erc20-ui.md:149 -msgid "" -"Well done! The Cairo ERC20 smart contract has been deployed successfully on " -"Starknet." +msgid "Well done! The Cairo ERC20 smart contract has been deployed successfully on Starknet." msgstr "" #: src/ch02-07-01-00-erc20-ui.md:151 @@ -3505,9 +3375,7 @@ msgid "## Installing the Starknet React Library" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:153 -msgid "" -"With the contract in place, initiate the development of the web application. " -"Begin by incorporating the Starknet React library:" +msgid "With the contract in place, initiate the development of the web application. Begin by incorporating the Starknet React library:" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:155 @@ -3529,9 +3397,7 @@ msgid "" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:165 -msgid "" -"The output should display the installed version, such as `@starknet-react/" -"core@1.0.4`." +msgid "The output should display the installed version, such as `@starknet-react/core@1.0.4`." msgstr "" #: src/ch02-07-01-00-erc20-ui.md:167 @@ -3539,9 +3405,7 @@ msgid "## Setting Up a New React Project" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:169 -msgid "" -"Starknet React library provides the `create-starknet` script that " -"streamlines the setup of a Starknet application using TypeScript:" +msgid "Starknet React library provides the `create-starknet` script that streamlines the setup of a Starknet application using TypeScript:" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:171 @@ -3552,9 +3416,7 @@ msgid "" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:175 -msgid "" -"Once set up, make modifications to `erc20_web/index.tsx` by replacing its " -"content with the following code:" +msgid "Once set up, make modifications to `erc20_web/index.tsx` by replacing its content with the following code:" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:177 @@ -3574,10 +3436,8 @@ msgid "" " <>\n" " \n" " Create Starknet\n" -" \n" -" \n" +" \n" +" \n" " \n" " \n" "
\n" @@ -3612,9 +3472,7 @@ msgid "" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:221 -msgid "" -"NOTE: Observe the server port that appears during launch. This will be " -"useful for subsequent testing." +msgid "NOTE: Observe the server port that appears during launch. This will be useful for subsequent testing." msgstr "" #: src/ch02-07-01-00-erc20-ui.md:224 @@ -3622,16 +3480,11 @@ msgid "## Enhancing Your React Application with Additional Features" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:226 -msgid "" -"To enhance the app's functionality, create two components for balance and " -"transfer. Subsequently, update the `Wallet.tsx` file to incorporate the new " -"features:" +msgid "To enhance the app's functionality, create two components for balance and transfer. Subsequently, update the `Wallet.tsx` file to incorporate the new features:" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:228 -msgid "" -"\"Basic" +msgid "\"Basic" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:231 @@ -3639,9 +3492,7 @@ msgid "### Balance Component" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:232 -msgid "" -"Design a balance component inside `components/Balance.tsx` and integrate the " -"following code:" +msgid "Design a balance component inside `components/Balance.tsx` and integrate the following code:" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:234 @@ -3653,8 +3504,7 @@ msgid "" "function Balance() {\n" " const { address } = useAccount();\n" " const { data, isLoading, error, refetch } = useContractRead({\n" -" address: " -"'0x001892d81e09cb2c2005f0112891dacb92a6f8ce571edd03ed1f3e549abcf37f',\n" +" address: '0x001892d81e09cb2c2005f0112891dacb92a6f8ce571edd03ed1f3e549abcf37f',\n" " abi: erc20ABI,\n" " functionName: 'balance_of',\n" " args: [address],\n" @@ -3687,9 +3537,7 @@ msgid "### Transfer Component" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:268 -msgid "" -"Craft a transfer component in `components/Transfer.tsx` and embed the " -"subsequent code:" +msgid "Craft a transfer component in `components/Transfer.tsx` and embed the subsequent code:" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:270 @@ -3706,8 +3554,7 @@ msgid "" " \n" " const calls = useMemo(() => {\n" " const tx = {\n" -" contractAddress: " -"'0x001892d81e09cb2c2005f0112891dacb92a6f8ce571edd03ed1f3e549abcf37f',\n" +" contractAddress: '0x001892d81e09cb2c2005f0112891dacb92a6f8ce571edd03ed1f3e549abcf37f',\n" " entrypoint: 'transfer',\n" " calldata: [recipient, amount, 0]\n" " };\n" @@ -3721,13 +3568,11 @@ msgid "" "

Transfer:

\n" "

\n" " Recipient:\n" -" " -"setRecipient(e.target.value)} />\n" +" setRecipient(e.target.value)} />\n" "

\n" "

\n" " Amount (default: 1 MKT with 18 decimals):\n" -" setAmount(e." -"target.value)} />\n" +" setAmount(e.target.value)} />\n" "

\n" "

\n" "
\n" @@ -3740,8 +3585,7 @@ msgid "" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:311 -msgid "" -"NOTE: Replace contractAddress with the address of your deployed contract." +msgid "NOTE: Replace contractAddress with the address of your deployed contract." msgstr "" #: src/ch02-07-01-00-erc20-ui.md:314 @@ -3749,9 +3593,7 @@ msgid "### Updating the Wallet Component" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:316 -msgid "" -"Proceed to modify the `components/Wallet.tsx` file. Replace any existing " -"content with the following enhanced code:" +msgid "Proceed to modify the `components/Wallet.tsx` file. Replace any existing content with the following enhanced code:" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:318 @@ -3808,9 +3650,7 @@ msgid "" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:368 -msgid "" -"This updated code refines the Wallet component to offer a more interactive " -"experience for users intending to connect or manage their wallets." +msgid "This updated code refines the Wallet component to offer a more interactive experience for users intending to connect or manage their wallets." msgstr "" #: src/ch02-07-01-00-erc20-ui.md:371 @@ -3818,50 +3658,36 @@ msgid "## Finalizing the MKT Token Application" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:373 -msgid "" -"To finalize the application setup, we need the ABI file for the MKT token. " -"Follow the steps below to generate and integrate it:" +msgid "To finalize the application setup, we need the ABI file for the MKT token. Follow the steps below to generate and integrate it:" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:375 msgid "" "1. At the root of your project, create a new directory named `assets/`.\n" -"2. Inside the `assets/` directory, create an empty JSON file named `erc20." -"json`.\n" -"3. Go back to your ERC20 Cairo project folder and locate the `erc20/target/" -"erc20_erc20_sierra.json` file." +"2. Inside the `assets/` directory, create an empty JSON file named `erc20.json`.\n" +"3. Go back to your ERC20 Cairo project folder and locate the `erc20/target/erc20_erc20_sierra.json` file." msgstr "" #: src/ch02-07-01-00-erc20-ui.md:379 -msgid "" -"\"ABI" +msgid "\"ABI" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:381 -msgid "" -"4. Extract the ABI definition (ensuring you include the square brackets) and " -"integrate it into the previously created `assets/erc20.json` file." +msgid "4. Extract the ABI definition (ensuring you include the square brackets) and integrate it into the previously created `assets/erc20.json` file." msgstr "" #: src/ch02-07-01-00-erc20-ui.md:383 -msgid "" -"\"ABI" +msgid "\"ABI" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:385 msgid "" -"Well done! The basic MKT token application is now operational locally. " -"Access it via `http://localhost:3000` or the port noted from earlier server " -"setup. The app allows users to connect their wallets, review their balances, " -"and perform token transfers." +"Well done! The basic MKT token application is now operational locally. Access it via `http://localhost:3000` or the port noted from earlier server setup. The app allows " +"users to connect their wallets, review their balances, and perform token transfers." msgstr "" #: src/ch02-07-01-00-erc20-ui.md:387 -msgid "" -"\"Localhost\"" +msgid "\"Localhost\"" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:390 @@ -3870,9 +3696,7 @@ msgstr "" #: src/ch02-07-01-00-erc20-ui.md:392 msgid "" -"To share your application with friends and allow them to check their " -"balances and transfer tokens, publish your app online. Vercel offers a " -"straightforward way to do this:" +"To share your application with friends and allow them to check their balances and transfer tokens, publish your app online. Vercel offers a straightforward way to do this:" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:394 @@ -3906,23 +3730,18 @@ msgid "" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:411 -msgid "" -"After entering your email, check your inbox and click on the \"Verify\" " -"button." +msgid "After entering your email, check your inbox and click on the \"Verify\" button." msgstr "" #: src/ch02-07-01-00-erc20-ui.md:413 msgid "" -"\"Vercel\n" +"\"Vercel\n" "\n" -"\"Vercel" +"\"Vercel" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:418 -msgid "" -"On successful verification, you'll receive a confirmation in the console." +msgid "On successful verification, you'll receive a confirmation in the console." msgstr "" #: src/ch02-07-01-00-erc20-ui.md:420 @@ -3959,15 +3778,11 @@ msgid "" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:438 -msgid "" -"Congratulations! Your MKT token web3 application is now accessible to " -"everyone." +msgid "Congratulations! Your MKT token web3 application is now accessible to everyone." msgstr "" #: src/ch02-07-01-00-erc20-ui.md:440 -msgid "" -"\"Vercel" +msgid "\"Vercel" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:442 @@ -3979,9 +3794,7 @@ msgid "* Connecting your wallet:" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:446 -msgid "" -"\"Vercel" +msgid "\"Vercel" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:448 @@ -3989,9 +3802,7 @@ msgid "* Checking your balance:" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:450 -msgid "" -"\"Vercel" +msgid "\"Vercel" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:452 @@ -3999,9 +3810,7 @@ msgid "* Transferring tokens:" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:454 -msgid "" -"\"Vercel" +msgid "\"Vercel" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:456 @@ -4010,40 +3819,29 @@ msgstr "" #: src/ch02-07-01-00-erc20-ui.md:458 msgid "" -"Throughout this tutorial, you've walked through the steps to craft a web3 " -"application using React and Starknet Cairo. This application, complete with " -"an ERC20 smart contract, offers a modern web interface for user interaction. " -"Here's a snapshot of your achievements:" +"Throughout this tutorial, you've walked through the steps to craft a web3 application using React and Starknet Cairo. This application, complete with an ERC20 smart " +"contract, offers a modern web interface for user interaction. Here's a snapshot of your achievements:" msgstr "" #: src/ch02-07-01-00-erc20-ui.md:460 msgid "" -"- **Project Initialization**: Set up a Starknet project with Scarb and " -"incorporated OpenZeppelin libraries.\n" +"- **Project Initialization**: Set up a Starknet project with Scarb and incorporated OpenZeppelin libraries.\n" " \n" -"- **Crafting the ERC20 Contract**: Developed an ERC20 token using Cairo, " -"enriched with functionalities like balance checks and token transfers. This " -"was then compiled and launched on the Starknet network.\n" +"- **Crafting the ERC20 Contract**: Developed an ERC20 token using Cairo, enriched with functionalities like balance checks and token transfers. This was then compiled and " +"launched on the Starknet network.\n" "\n" -"- **React Application**: Built a React application powered by Starknet " -"React, featuring components dedicated to balance inquiries and token " -"transactions.\n" +"- **React Application**: Built a React application powered by Starknet React, featuring components dedicated to balance inquiries and token transactions.\n" "\n" -"- **ABI Creation**: Produced the ABI for the MKT token, a critical component " -"to liaise with the contract.\n" +"- **ABI Creation**: Produced the ABI for the MKT token, a critical component to liaise with the contract.\n" "\n" -"- **Online Deployment**: Brought your application to a wider audience by " -"deploying it on Vercel. This empowered users to connect their wallets, " -"scrutinize their balances, and execute token transactions." +"- **Online Deployment**: Brought your application to a wider audience by deploying it on Vercel. This empowered users to connect their wallets, scrutinize their balances, " +"and execute token transactions." msgstr "" #: src/ch02-07-01-00-erc20-ui.md:470 msgid "" -"The insights you've gathered from this tutorial lay a solid groundwork for " -"creating intricate web3 applications. You're now equipped with the prowess " -"to craft more intricate decentralized applications and smart contracts. The " -"vast expanse of decentralized finance and blockchain is ripe for your " -"innovative inputs. Dive in and happy coding!" +"The insights you've gathered from this tutorial lay a solid groundwork for creating intricate web3 applications. You're now equipped with the prowess to craft more intricate " +"decentralized applications and smart contracts. The vast expanse of decentralized finance and blockchain is ripe for your innovative inputs. Dive in and happy coding!" msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:1 @@ -4052,32 +3850,23 @@ msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:3 msgid "" -"[Starknet Homepage](https://github.com/dbejarano820/starknet_homepage) is a " -"decentralized application on the Starknet blockchain. It provides a virtual " -"space where users can claim and personalize sections of a 100x100 grid, " -"known as \"Starknet Homepage\". Each section is a 10x10 pixel area. Users " -"can acquire these sections by minting non-fungible tokens (NFTs) and then " -"personalizing them with images and other content." +"[Starknet Homepage](https://github.com/dbejarano820/starknet_homepage) is a decentralized application on the Starknet blockchain. It provides a virtual space where users can " +"claim and personalize sections of a 100x100 grid, known as \"Starknet Homepage\". Each section is a 10x10 pixel area. Users can acquire these sections by minting non-" +"fungible tokens (NFTs) and then personalizing them with images and other content." msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:5 -msgid "" -"View the live app on testnet [here](https://starknet-homepage-kappa.vercel." -"app/)." +msgid "View the live app on testnet [here](https://starknet-homepage-kappa.vercel.app/)." msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:7 -msgid "" -"\"homepage\"" +msgid "\"homepage\"" msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:9 msgid "" -"This initiative is an adaptation of the renowned Million Dollar Homepage and " -"was conceived at the Starknet Summit 2023 Hacker House in Palo Alto, " -"California. The following is a guide to understanding how this project was " -"developed using the available tools in the ecosystem." +"This initiative is an adaptation of the renowned Million Dollar Homepage and was conceived at the Starknet Summit 2023 Hacker House in Palo Alto, California. The following " +"is a guide to understanding how this project was developed using the available tools in the ecosystem." msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:11 @@ -4088,8 +3877,7 @@ msgstr "" msgid "" "- [Starknet-react](https://github.com/apibara/starknet-react)\n" "- [Starknet.js](https://github.com/0xs34n/starknet.js)\n" -"- [OpenZeppelin Cairo Contracts](https://github.com/OpenZeppelin/cairo-" -"contracts)\n" +"- [OpenZeppelin Cairo Contracts](https://github.com/OpenZeppelin/cairo-contracts)\n" "- [MaterialUI](https://mui.com/material-ui/)" msgstr "" @@ -4098,9 +3886,7 @@ msgid "## Initial Setup" msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:20 -msgid "" -"The `Starknet-react` app offers a command to initialize a Starknet app. This " -"command sets up the foundational structure needed for a NextJS application." +msgid "The `Starknet-react` app offers a command to initialize a Starknet app. This command sets up the foundational structure needed for a NextJS application." msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:22 @@ -4112,10 +3898,8 @@ msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:26 msgid "" -"The `StarknetConfig` component accepts a `connectors` prop, which defines " -"wallet connection options for the user. Additionally, it can take a " -"`defaultProvider` to set the network the application should connect to by " -"default." +"The `StarknetConfig` component accepts a `connectors` prop, which defines wallet connection options for the user. Additionally, it can take a `defaultProvider` to set the " +"network the application should connect to by default." msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:28 @@ -4146,10 +3930,8 @@ msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:51 msgid "" -"Both `CacheProvider` and `ThemeProvider` are components that facilitate the " -"seamless integration of MaterialUI with NextJS. For a comprehensive setup " -"guide on these components, please refer to [this link](https://blog." -"logrocket.com/getting-started-with-mui-and-next-js/)." +"Both `CacheProvider` and `ThemeProvider` are components that facilitate the seamless integration of MaterialUI with NextJS. For a comprehensive setup guide on these " +"components, please refer to [this link](https://blog.logrocket.com/getting-started-with-mui-and-next-js/)." msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:53 @@ -4158,12 +3940,9 @@ msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:55 msgid "" -"The core functionality of the Starknet Homepage centers around selecting a 4-" -"sided region on a matrix, representing the desired 10x10 cells, and minting " -"a token based on those cells. The responsibility of the smart contract is to " -"validate whether the selected cells are available for minting. If a user " -"owns Starknet Homepage tokens, they can access a dropdown to modify the " -"token's content, including the associated image and link on the grid." +"The core functionality of the Starknet Homepage centers around selecting a 4-sided region on a matrix, representing the desired 10x10 cells, and minting a token based on " +"those cells. The responsibility of the smart contract is to validate whether the selected cells are available for minting. If a user owns Starknet Homepage tokens, they can " +"access a dropdown to modify the token's content, including the associated image and link on the grid." msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:57 @@ -4182,22 +3961,19 @@ msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:66 msgid "" -"A significant aspect to consider is the string limitation in Cairo " -"contracts. To store links of varying sizes, they are stored as arrays of " -"`felt252`s. The contract uses the following logic for this purpose:" +"A significant aspect to consider is the string limitation in Cairo contracts. To store links of varying sizes, they are stored as arrays of `felt252`s. The contract uses the " +"following logic for this purpose:" msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:68 msgid "" "```rust\n" "impl StoreFelt252Array of Store> {\n" -" fn read(address_domain: u32, base: StorageBaseAddress) -> " -"SyscallResult> {\n" +" fn read(address_domain: u32, base: StorageBaseAddress) -> SyscallResult> {\n" " StoreFelt252Array::read_at_offset(address_domain, base, 0)\n" " }\n" " fn write(\n" -" address_domain: u32, base: StorageBaseAddress, value: " -"Array\n" +" address_domain: u32, base: StorageBaseAddress, value: Array\n" " ) -> SyscallResult<()> {\n" " StoreFelt252Array::write_at_offset(address_domain, base, 0, value)\n" " }\n" @@ -4205,44 +3981,36 @@ msgid "" " address_domain: u32, base: StorageBaseAddress, mut offset: u8\n" " ) -> SyscallResult> {\n" " let mut arr: Array = ArrayTrait::new();\n" -" // Read the stored array's length. If the length is superior to 255, " -"the read will fail.\n" -" let len: u8 = Store::::read_at_offset(address_domain, base, " -"offset)\n" +" // Read the stored array's length. If the length is superior to 255, the read will fail.\n" +" let len: u8 = Store::::read_at_offset(address_domain, base, offset)\n" " .expect('Storage Span too large');\n" "\n" " offset += 1;\n" "\n" -" // Sequentially read all stored elements and append them to the " -"array.\n" +" // Sequentially read all stored elements and append them to the array.\n" " let exit = len + offset;\n" " loop {\n" " if offset >= exit {\n" " break;\n" " }\n" -" let value = Store::::read_at_offset(address_domain, " -"base, offset).unwrap();\n" +" let value = Store::::read_at_offset(address_domain, base, offset).unwrap();\n" " arr.append(value);\n" " offset += Store::::size();\n" " };\n" " Result::Ok(arr)\n" " }\n" " fn write_at_offset(\n" -" address_domain: u32, base: StorageBaseAddress, mut offset: u8, mut " -"value: Array\n" +" address_domain: u32, base: StorageBaseAddress, mut offset: u8, mut value: Array\n" " ) -> SyscallResult<()> {\n" -" // // Store the length of the array in the first storage slot. 255 " -"of elements is max\n" -" let len: u8 = value.len().try_into().expect('Storage - Span too " -"large');\n" +" // // Store the length of the array in the first storage slot. 255 of elements is max\n" +" let len: u8 = value.len().try_into().expect('Storage - Span too large');\n" " Store::::write_at_offset(address_domain, base, offset, len);\n" " offset += 1;\n" " // Store the array elements sequentially\n" " loop {\n" " match value.pop_front() {\n" " Option::Some(element) => {\n" -" Store::::write_at_offset(address_domain, base, " -"offset, element);\n" +" Store::::write_at_offset(address_domain, base, offset, element);\n" " offset += Store::::size();\n" " },\n" " Option::None => {\n" @@ -4279,12 +4047,9 @@ msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:140 msgid "" -"The OpenZeppelin Cairo Contracts library played a crucial role in speeding " -"up the development of the ERC721 contract for Starknet Homepage. You can " -"find the contract for review [here](https://github.com/dbejarano820/" -"starknet_homepage/blob/main/cairo_contracts/src/ERC721.cairo). Once you have " -"installed the library, you can refer to the following example for typical " -"usage:" +"The OpenZeppelin Cairo Contracts library played a crucial role in speeding up the development of the ERC721 contract for Starknet Homepage. You can find the contract for " +"review [here](https://github.com/dbejarano820/starknet_homepage/blob/main/cairo_contracts/src/ERC721.cairo). Once you have installed the library, you can refer to the " +"following example for typical usage:" msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:142 @@ -4306,8 +4071,7 @@ msgid "" " let symbol = 'MTK';\n" " let mut unsafe_state = ERC20::unsafe_new_contract_state();\n" " ERC20::InternalImpl::initializer(ref unsafe_state, name, symbol);\n" -" ERC20::InternalImpl::_mint(ref unsafe_state, recipient, " -"initial_supply);\n" +" ERC20::InternalImpl::_mint(ref unsafe_state, recipient, initial_supply);\n" " }\n" " #[external(v0)]\n" " fn name(self: @ContractState) -> felt252 {\n" @@ -4329,11 +4093,8 @@ msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:174 msgid "" -"The Grid component represents a 100x100 matrix, with each cell being 100 " -"pixels. This layout corresponds to the data structure found in the smart " -"contract. To showcase the tokens already minted on the Homepage, the app " -"employs a React Hook from `starknet-react` to invoke the `getAllTokens` " -"function from the contract." +"The Grid component represents a 100x100 matrix, with each cell being 100 pixels. This layout corresponds to the data structure found in the smart contract. To showcase the " +"tokens already minted on the Homepage, the app employs a React Hook from `starknet-react` to invoke the `getAllTokens` function from the contract." msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:176 @@ -4359,9 +4120,8 @@ msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:194 msgid "" -"Deserialization ensures the data from the Starknet contract is aptly " -"transformed for frontend use. This process involves decoding the array of " -"`felt252`s into extensive strings." +"Deserialization ensures the data from the Starknet contract is aptly transformed for frontend use. This process involves decoding the array of `felt252`s into extensive " +"strings." msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:196 @@ -4384,16 +4144,12 @@ msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:211 msgid "" -"Furthermore, the Grid component manages the cell selection process, leading " -"to the minting of a corresponding token. Once an area is chosen, a modal " -"appears displaying the mint details and other necessary inputs for the call " -"data. The intricacies of the multicall will be addressed subsequently." +"Furthermore, the Grid component manages the cell selection process, leading to the minting of a corresponding token. Once an area is chosen, a modal appears displaying the " +"mint details and other necessary inputs for the call data. The intricacies of the multicall will be addressed subsequently." msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:213 -msgid "" -"\"Wallets\"" +msgid "\"Wallets\"" msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:215 @@ -4401,22 +4157,15 @@ msgid "#### Modals" msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:217 -msgid "" -"Modals offer a convenient means to present varied functionalities within the " -"app, such as wallet connection, token minting, and token editing." +msgid "Modals offer a convenient means to present varied functionalities within the app, such as wallet connection, token minting, and token editing." msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:219 -msgid "" -"\"Wallets\"" +msgid "\"Wallets\"" msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:221 -msgid "" -"A recognized best practice is to invoke the React hook for shared " -"information at a top-level, ensuring components like the `WalletBar` remain " -"streamlined and focused." +msgid "A recognized best practice is to invoke the React hook for shared information at a top-level, ensuring components like the `WalletBar` remain streamlined and focused." msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:223 @@ -4434,10 +4183,8 @@ msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:233 msgid "" -"Below, the `WalletConnected` function displays the connected wallet's " -"address, while the `ConnectWallet` function allows users to select and " -"connect their wallet. The `WalletBar` function renders the appropriate modal " -"based on the connection status." +"Below, the `WalletConnected` function displays the connected wallet's address, while the `ConnectWallet` function allows users to select and connect their wallet. The " +"`WalletBar` function renders the appropriate modal based on the connection status." msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:235 @@ -4483,8 +4230,7 @@ msgid "" " Connect to a wallet\n" " \n" " \n" -" \n" +" \n" " {connectors.map((connector) => (\n" " : ;\n" +" return account ? : ;\n" "}\n" "```" msgstr "" @@ -4533,10 +4278,8 @@ msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:319 msgid "" -"The dropdown component is dedicated to showcasing the tokens associated with " -"the currently connected wallet. To retrieve these tokens, a transaction like " -"the one shown below can be executed. The sole argument for this function is " -"the contract address of the intended owner." +"The dropdown component is dedicated to showcasing the tokens associated with the currently connected wallet. To retrieve these tokens, a transaction like the one shown below " +"can be executed. The sole argument for this function is the contract address of the intended owner." msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:321 @@ -4562,17 +4305,13 @@ msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:337 msgid "" -"The provided code offers an illustration of a multicall, specifically to " -"approve a transaction for the mint price transfer followed by the actual " -"minting action. Notably, the `shortString` module from `starknet.js` plays a " -"pivotal role; it encodes and segments a lengthy string into an array of " -"`felt252`s, the expected argument type for the contract on Starknet." +"The provided code offers an illustration of a multicall, specifically to approve a transaction for the mint price transfer followed by the actual minting action. Notably, " +"the `shortString` module from `starknet.js` plays a pivotal role; it encodes and segments a lengthy string into an array of `felt252`s, the expected argument type for the " +"contract on Starknet." msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:339 -msgid "" -"The `useContractWrite` is a Hook dedicated to executing a Starknet " -"multicall, which can be employed for a singular transaction or multiple ones." +msgid "The `useContractWrite` is a Hook dedicated to executing a Starknet multicall, which can be employed for a singular transaction or multiple ones." msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:341 @@ -4611,17 +4350,12 @@ msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:372 msgid "" -"Another crucial aspect to point out is the `calldata` of the approve " -"function for the ether transfer: calldata: " -"`[STARKNET_HOMEPAGE_ERC721_ADDRESS, '${price}', \"0\"],`. The amount " -"argument is split into two parts because it's a `u256`, which is composed of " -"two separate `felt252` values." +"Another crucial aspect to point out is the `calldata` of the approve function for the ether transfer: calldata: `[STARKNET_HOMEPAGE_ERC721_ADDRESS, '${price}', \"0\"],`. The " +"amount argument is split into two parts because it's a `u256`, which is composed of two separate `felt252` values." msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:374 -msgid "" -"Once the multicall is prepared, the next step is to initiate the function " -"and sign the transaction using the connected wallet." +msgid "Once the multicall is prepared, the next step is to initiate the function and sign the transaction using the connected wallet." msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:376 @@ -4650,24 +4384,17 @@ msgid "### Conditional Multicall for Token Editing" msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:396 -msgid "" -"Another instructive illustration of a conditional multicall setup is the " -"modal used to modify the data associated with a token." +msgid "Another instructive illustration of a conditional multicall setup is the modal used to modify the data associated with a token." msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:398 -msgid "" -"\"homepage\"" +msgid "\"homepage\"" msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:400 msgid "" -"There are scenarios where the user may wish to alter just one attribute of " -"the token, rather than both. Consequently, a conditional multicall " -"configuration becomes necessary. It's essential to recall that the token id " -"in the Cairo contract is defined as a `u256`, implying it comprises two " -"`felt252` values." +"There are scenarios where the user may wish to alter just one attribute of the token, rather than both. Consequently, a conditional multicall configuration becomes " +"necessary. It's essential to recall that the token id in the Cairo contract is defined as a `u256`, implying it comprises two `felt252` values." msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:402 @@ -4707,24 +4434,18 @@ msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:432 msgid "" -"- **Grid Component**: Represents a 100x100 matrix, allowing users to select " -"cells and mint corresponding tokens. It fetches existing tokens using the " -"`getAllTokens` function from the contract and displays them.\n" -"- **Modals**: Serve as the user interface for actions like wallet " -"connection, token minting, and token editing.\n" -"- **Token Dropdown**: Displays tokens associated with a connected wallet. It " -"retrieves these tokens using the `getTokensByOwner` function.\n" -"- **Multicall Contract Interaction**: Enables token minting and editing. " -"This process utilizes conditional multicalls based on user preferences, " -"especially for editing token attributes." +"- **Grid Component**: Represents a 100x100 matrix, allowing users to select cells and mint corresponding tokens. It fetches existing tokens using the `getAllTokens` function " +"from the contract and displays them.\n" +"- **Modals**: Serve as the user interface for actions like wallet connection, token minting, and token editing.\n" +"- **Token Dropdown**: Displays tokens associated with a connected wallet. It retrieves these tokens using the `getTokensByOwner` function.\n" +"- **Multicall Contract Interaction**: Enables token minting and editing. This process utilizes conditional multicalls based on user preferences, especially for editing token " +"attributes." msgstr "" #: src/ch02-07-01-01-million-dollar-homepage.md:437 msgid "" -"Throughout the platform, string limitations in Cairo contracts require " -"encoding lengthy strings into arrays of `felt252`s. The OpenZeppelin Cairo " -"Contracts library significantly expedites the development of the ERC721 " -"contract for the Starknet Homepage." +"Throughout the platform, string limitations in Cairo contracts require encoding lengthy strings into arrays of `felt252`s. The OpenZeppelin Cairo Contracts library " +"significantly expedites the development of the ERC721 contract for the Starknet Homepage." msgstr "" #: src/ch02-08-starknet-react.md:1 @@ -4932,8 +4653,7 @@ msgstr "" #: src/ch02-08-starknet-react.md:139 msgid "" "const { data, isError, isLoading, status } = useStarkName({ address });\n" -" // You can track the status of the request with the status variable " -"('idle' | 'error' | 'loading' | 'success')\n" +" // You can track the status of the request with the status variable ('idle' | 'error' | 'loading' | 'success')\n" "\n" " if (isLoading) return

Loading...

\n" " return

Account: {isError ? address : data}

" @@ -4959,8 +4679,7 @@ msgstr "" #: src/ch02-08-starknet-react.md:155 msgid "" -"const { data, isLoading, isError } = useAddressFromStarkName({ name: " -"'vitalik.stark' })\n" +"const { data, isLoading, isError } = useAddressFromStarkName({ name: 'vitalik.stark' })\n" "\n" " if (isLoading) return

Loading...

\n" " if (isError) return

Something went wrong

\n" @@ -4998,8 +4717,7 @@ msgid "" " }\n" "\n" " return (\n" -"

Current block: {isFetching ? \"Loading...\" : data?.block_number}" -"

\n" +"

Current block: {isFetching ? \"Loading...\" : data?.block_number}

\n" " )" msgstr "" @@ -5316,10 +5034,8 @@ msgstr "" #: src/ch02-11-foundry-forge.md:3 msgid "" -"[Starknet Foundry](https://github.com/foundry-rs/starknet-foundry) is a tool " -"designed for testing and developing Starknet contracts. It is an adaptation " -"of the Ethereum Foundry for Starknet, aiming to expedite the development " -"process." +"[Starknet Foundry](https://github.com/foundry-rs/starknet-foundry) is a tool designed for testing and developing Starknet contracts. It is an adaptation of the Ethereum " +"Foundry for Starknet, aiming to expedite the development process." msgstr "" #: src/ch02-11-foundry-forge.md:5 @@ -5328,14 +5044,10 @@ msgstr "" #: src/ch02-11-foundry-forge.md:7 msgid "" -"- **Forge**: A testing tool specifically for Cairo contracts. This tool acts " -"as a test runner and boasts features designed to enhance your testing " -"process. Tests are written directly in Cairo, eliminating the need for other " -"programming languages. Additionally, the Forge implementation uses Rust, " -"mirroring Ethereum Foundry's choice of language.\n" -"- **Cast**: This serves as a DevOps tool for StarkNet, initially supporting " -"a series of commands to interface with StarkNet. In the future, Cast aims to " -"offer deployment scripts for contracts and other DevOps functions." +"- **Forge**: A testing tool specifically for Cairo contracts. This tool acts as a test runner and boasts features designed to enhance your testing process. Tests are written " +"directly in Cairo, eliminating the need for other programming languages. Additionally, the Forge implementation uses Rust, mirroring Ethereum Foundry's choice of language.\n" +"- **Cast**: This serves as a DevOps tool for StarkNet, initially supporting a series of commands to interface with StarkNet. In the future, Cast aims to offer deployment " +"scripts for contracts and other DevOps functions." msgstr "" #: src/ch02-11-foundry-forge.md:10 @@ -5344,17 +5056,14 @@ msgstr "" #: src/ch02-11-foundry-forge.md:12 msgid "" -"Merely deploying contracts is not the end game. Many tools have offered this " -"capability in the past. Forge sets itself apart by hosting a Cairo VM " -"instance, enabling the sequential execution of tests. It employs Scarb for " -"contract compilation." +"Merely deploying contracts is not the end game. Many tools have offered this capability in the past. Forge sets itself apart by hosting a Cairo VM instance, enabling the " +"sequential execution of tests. It employs Scarb for contract compilation." msgstr "" #: src/ch02-11-foundry-forge.md:14 msgid "" -"To utilize Forge, define test functions and label them with test attributes. " -"Users can either test standalone Cairo functions or integrate contracts, " -"dispatchers, and test contract interactions on-chain." +"To utilize Forge, define test functions and label them with test attributes. Users can either test standalone Cairo functions or integrate contracts, dispatchers, and test " +"contract interactions on-chain." msgstr "" #: src/ch02-12-foundry-cast.md:1 @@ -5363,11 +5072,8 @@ msgstr "" #: src/ch02-12-foundry-cast.md:3 msgid "" -"While Forge handles testing, Cast focuses on the Command Line Interface " -"(CLI) for StarkNet. This straightforward tool, written in Rust, leverages " -"StarkNet Rust for its operations and is also integrated with Scarb. This " -"integration permits the specification of arguments in Scarb Toml, " -"simplifying the overall process." +"While Forge handles testing, Cast focuses on the Command Line Interface (CLI) for StarkNet. This straightforward tool, written in Rust, leverages StarkNet Rust for its " +"operations and is also integrated with Scarb. This integration permits the specification of arguments in Scarb Toml, simplifying the overall process." msgstr "" #: src/ch03-00-architecture.md:1 @@ -5407,9 +5113,7 @@ msgid "" msgstr "" #: src/ch03-00-architecture.md:24 -msgid "" -"\"Starknet" +msgid "\"Starknet" msgstr "" #: src/ch03-00-architecture.md:26 @@ -5780,11 +5484,8 @@ msgstr "" #: src/ch03-01-transactions.md:3 msgid "" -"A transaction's journey in Starknet, from its inception to finality, " -"comprises a series of carefully orchestrated steps. Each stage plays a " -"crucial role in ensuring data is accurately transmitted, processed, and " -"stored within the network. In this chapter, we explore the lifecycle of a " -"Starknet transaction." +"A transaction's journey in Starknet, from its inception to finality, comprises a series of carefully orchestrated steps. Each stage plays a crucial role in ensuring data is " +"accurately transmitted, processed, and stored within the network. In this chapter, we explore the lifecycle of a Starknet transaction." msgstr "" #: src/ch03-01-transactions.md:5 @@ -5793,11 +5494,8 @@ msgstr "" #: src/ch03-01-transactions.md:7 msgid "" -"Every transaction's journey commences with its preparation. The sender " -"queries the nonce of their account, serving as a unique identifier for each " -"transaction, signs the transaction, and dispatches it to their Node. It's " -"critical to understand the sender must be online during this process to " -"access real-time data." +"Every transaction's journey commences with its preparation. The sender queries the nonce of their account, serving as a unique identifier for each transaction, signs the " +"transaction, and dispatches it to their Node. It's critical to understand the sender must be online during this process to access real-time data." msgstr "" #: src/ch03-01-transactions.md:9 @@ -5813,18 +5511,14 @@ msgstr "" #: src/ch03-01-transactions.md:17 msgid "" -"The Node, analogous to a post office, receives the transaction and " -"broadcasts it on the Starknet network, primarily to the Sequencer. As the " -"network evolves, the transaction will be broadcasted to multiple Sequencers." +"The Node, analogous to a post office, receives the transaction and broadcasts it on the Starknet network, primarily to the Sequencer. As the network evolves, the transaction " +"will be broadcasted to multiple Sequencers." msgstr "" #: src/ch03-01-transactions.md:19 msgid "" -"It is worth mentioning that before broadcasting the transaction to the " -"Sequencer, the gateways perform some validations, such as checking that the " -"max fee exceeds a minimum fee and the account's balance is greater than the " -"max fee. The transaction will be saved in the storage if the validation " -"function passes." +"It is worth mentioning that before broadcasting the transaction to the Sequencer, the gateways perform some validations, such as checking that the max fee exceeds a minimum " +"fee and the account's balance is greater than the max fee. The transaction will be saved in the storage if the validation function passes." msgstr "" #: src/ch03-01-transactions.md:21 @@ -5832,9 +5526,7 @@ msgid "## Reception and Processing: The Sequencer's Role" msgstr "" #: src/ch03-01-transactions.md:23 -msgid "" -"On receiving the transaction, the Sequencer acknowledges its receipt but " -"hasn't processed it yet—similar to Ethereum's mempool state." +msgid "On receiving the transaction, the Sequencer acknowledges its receipt but hasn't processed it yet—similar to Ethereum's mempool state." msgstr "" #: src/ch03-01-transactions.md:25 @@ -5851,11 +5543,8 @@ msgstr "" #: src/ch03-01-transactions.md:34 msgid "" -"It's crucial to remember the sequentiality of transaction processing in " -"Starknet: the nonce won't update until the Sequencer processes your " -"transaction. This aspect could become a hurdle when building backend " -"applications, as sending multiple transactions consecutively may result in " -"confusion or errors." +"It's crucial to remember the sequentiality of transaction processing in Starknet: the nonce won't update until the Sequencer processes your transaction. This aspect could " +"become a hurdle when building backend applications, as sending multiple transactions consecutively may result in confusion or errors." msgstr "" #: src/ch03-01-transactions.md:36 @@ -5864,18 +5553,15 @@ msgstr "" #: src/ch03-01-transactions.md:38 msgid "" -"When the Sequencer validates and executes a transaction, it immediately " -"updates the state without waiting for the block emission. The transaction " -"status changes from 'received' to 'accepted on L2' at this stage." +"When the Sequencer validates and executes a transaction, it immediately updates the state without waiting for the block emission. The transaction status changes from " +"'received' to 'accepted on L2' at this stage." msgstr "" #: src/ch03-01-transactions.md:40 msgid "" -"Following the state update, the transaction is included in a block. However, " -"the block isn't emitted immediately. The Sequencer decides the opportune " -"moment to emit the block, either when there are enough transactions to form " -"a block or after a certain time has passed. When the block is emitted, the " -"block becomes available for other Nodes to query." +"Following the state update, the transaction is included in a block. However, the block isn't emitted immediately. The Sequencer decides the opportune moment to emit the " +"block, either when there are enough transactions to form a block or after a certain time has passed. When the block is emitted, the block becomes available for other Nodes " +"to query." msgstr "" #: src/ch03-01-transactions.md:42 @@ -5888,18 +5574,13 @@ msgid "" msgstr "" #: src/ch03-01-transactions.md:48 -msgid "" -"If a transaction fails during execution, it will be included in the block " -"with the status 'reverted'." +msgid "If a transaction fails during execution, it will be included in the block with the status 'reverted'." msgstr "" #: src/ch03-01-transactions.md:50 msgid "" -"It's essential to remember that at this stage, no proof has been generated, " -"and the transaction relies on L2 consensus for security against censorship. " -"There remains a slim possibility of transaction reversal if all Sequencers " -"collude. Therefore, these stages should be seen as different layers of " -"transaction finality." +"It's essential to remember that at this stage, no proof has been generated, and the transaction relies on L2 consensus for security against censorship. There remains a slim " +"possibility of transaction reversal if all Sequencers collude. Therefore, these stages should be seen as different layers of transaction finality." msgstr "" #: src/ch03-01-transactions.md:52 @@ -5908,13 +5589,9 @@ msgstr "" #: src/ch03-01-transactions.md:54 msgid "" -"The final step in the transaction's lifecycle is its acceptance on Layer-1 " -"(L1). A Prover receives the block containing the transaction, re-executes " -"the block, generates a proof, and sends it to Ethereum. Specifically, the " -"proof is sent to a smart contract on Ethereum called the Verifier smart " -"contract, which checks the proof's validity. If valid, the transaction's " -"status changes to 'accepted on L1', signifying the transaction's security by " -"Ethereum consensus." +"The final step in the transaction's lifecycle is its acceptance on Layer-1 (L1). A Prover receives the block containing the transaction, re-executes the block, generates a " +"proof, and sends it to Ethereum. Specifically, the proof is sent to a smart contract on Ethereum called the Verifier smart contract, which checks the proof's validity. If " +"valid, the transaction's status changes to 'accepted on L1', signifying the transaction's security by Ethereum consensus." msgstr "" #: src/ch03-01-transactions.md:56 @@ -5932,17 +5609,12 @@ msgstr "" #: src/ch03-01-transactions.md:64 msgid "" -"Transaction finality refers to the point at which a transaction is " -"considered irreversible and is no longer susceptible to being reversed or " -"undone. It's the assurance that once a transaction is committed, it can't be " -"altered or rolled back, hence securing the integrity of the transaction and " -"the system as a whole." +"Transaction finality refers to the point at which a transaction is considered irreversible and is no longer susceptible to being reversed or undone. It's the assurance that " +"once a transaction is committed, it can't be altered or rolled back, hence securing the integrity of the transaction and the system as a whole." msgstr "" #: src/ch03-01-transactions.md:66 -msgid "" -"Let's dive into the transaction finality in both Starknet and Ethereum, and " -"how they compare." +msgid "Let's dive into the transaction finality in both Starknet and Ethereum, and how they compare." msgstr "" #: src/ch03-01-transactions.md:68 @@ -5951,19 +5623,15 @@ msgstr "" #: src/ch03-01-transactions.md:70 msgid "" -"Ethereum operates on a Proof of Stake (PoS) consensus mechanism. A " -"transaction has the finality status when it is part of a block that can't " -"change without a significant amount of ETH getting burned. The number of " -"blocks required to ensure that a transaction won't be rolled back is called " -"'blocks to finality', and the time to create those blocks is called 'time to " -"finality'." +"Ethereum operates on a Proof of Stake (PoS) consensus mechanism. A transaction has the finality status when it is part of a block that can't change without a significant " +"amount of ETH getting burned. The number of blocks required to ensure that a transaction won't be rolled back is called 'blocks to finality', and the time to create those " +"blocks is called 'time to finality'." msgstr "" #: src/ch03-01-transactions.md:72 msgid "" -"It is considered to be an average of 6 blocks to reach the finality status; " -"given that a new block is validated each 12 seconds, the average time to " -"finality for a transaction is 75 seconds." +"It is considered to be an average of 6 blocks to reach the finality status; given that a new block is validated each 12 seconds, the average time to finality for a " +"transaction is 75 seconds." msgstr "" #: src/ch03-01-transactions.md:74 @@ -5972,23 +5640,17 @@ msgstr "" #: src/ch03-01-transactions.md:76 msgid "" -"Starknet, a Layer-2 (L2) solution on Ethereum, has a two-step transaction " -"finality process. The first step is when the transaction gets accepted on " -"Layer-2 (Starknet), and the second step is when the transaction gets " -"accepted on Layer-1 (Ethereum)." +"Starknet, a Layer-2 (L2) solution on Ethereum, has a two-step transaction finality process. The first step is when the transaction gets accepted on Layer-2 (Starknet), and " +"the second step is when the transaction gets accepted on Layer-1 (Ethereum)." msgstr "" #: src/ch03-01-transactions.md:78 msgid "" -"- Accepted on L2: When a transaction is processed by the Sequencer and " -"included in a block on Starknet, it reaches L2 finality. However, this " -"finality relies on the L2 consensus and comes with a slight risk of " -"collusion among Sequencers leading to transaction reversal.\n" -"- Accepted on L1: The absolute finality comes when the block containing the " -"transaction gets a proof generated, the proof is validated by the Verifier " -"contract on Ethereum, and the state is updated on Ethereum. At this point, " -"the transaction is as secure as the Ethereum's PoW consensus can provide, " -"meaning it becomes computationally infeasible to alter or reverse." +"- Accepted on L2: When a transaction is processed by the Sequencer and included in a block on Starknet, it reaches L2 finality. However, this finality relies on the L2 " +"consensus and comes with a slight risk of collusion among Sequencers leading to transaction reversal.\n" +"- Accepted on L1: The absolute finality comes when the block containing the transaction gets a proof generated, the proof is validated by the Verifier contract on Ethereum, " +"and the state is updated on Ethereum. At this point, the transaction is as secure as the Ethereum's PoW consensus can provide, meaning it becomes computationally infeasible " +"to alter or reverse." msgstr "" #: src/ch03-01-transactions.md:81 @@ -5996,17 +5658,13 @@ msgid "### Comparison" msgstr "" #: src/ch03-01-transactions.md:83 -msgid "" -"The main difference between Ethereum and Starknet's transaction finality " -"lies in the stages of finality and their reliance on consensus mechanisms." +msgid "The main difference between Ethereum and Starknet's transaction finality lies in the stages of finality and their reliance on consensus mechanisms." msgstr "" #: src/ch03-01-transactions.md:85 msgid "" -"- Ethereum's transaction finality becomes increasingly unlikely to be " -"reversed as more blocks are added.\n" -"- Starknet's finality process is two-fold. The initial finality (L2) is " -"quicker but relies on L2 consensus" +"- Ethereum's transaction finality becomes increasingly unlikely to be reversed as more blocks are added.\n" +"- Starknet's finality process is two-fold. The initial finality (L2) is quicker but relies on L2 consensus" msgstr "" #: src/ch03-02-sequencers.md:1 @@ -6081,9 +5739,7 @@ msgid "" msgstr "" #: src/ch03-02-sequencers.md:50 -msgid "" -"\"Sequencer" +msgid "\"Sequencer" msgstr "" #: src/ch03-02-sequencers.md:52 @@ -6098,8 +5754,7 @@ msgstr "" msgid "" "Let’s delve into Sequencers by focusing on\n" "[Madara](https://github.com/keep-starknet-strange/madara) and\n" -"[Kraken](https://github.com/lambdaclass/starknet_stack/tree/main/" -"sequencer),\n" +"[Kraken](https://github.com/lambdaclass/starknet_stack/tree/main/sequencer),\n" "two high-performance Starknet Sequencers. A Sequencer must, at least, do\n" "two things: order and execute transactions." msgstr "" @@ -6151,8 +5806,7 @@ msgid "" "Madara\n" "Kraken\n" +"href=\"https://github.com/lambdaclass/starknet_stack/tree/main/sequencer\">Kraken\n" "\n" "\n" "\n" @@ -6182,8 +5836,7 @@ msgid "" "

Execution\n" "Crates

\n" "

Blockifier,\n" +"href=\"https://github.com/starkware-libs/blockifier/tree/main\">Blockifier,\n" "Starknet_in_rust

\n" "

Starknet_in_rust

\n" "\n" @@ -6217,8 +5870,7 @@ msgid "" "\n" "- [Cairo Native](https://github.com/lambdaclass/cairo_native) stands\n" " out by converting Cairo’s Sierra code to MLIR. See an example\n" -" [here](https://github.com/lambdaclass/cairo_native/blob/main/examples/" -"erc20.rs)." +" [here](https://github.com/lambdaclass/cairo_native/blob/main/examples/erc20.rs)." msgstr "" #: src/ch03-02-sequencers.md:160 @@ -6292,9 +5944,7 @@ msgid "" msgstr "" #: src/ch03-02-sequencers.md:208 -msgid "" -"\"Centralized" +msgid "\"Centralized" msgstr "" #: src/ch03-02-sequencers.md:210 @@ -6695,8 +6345,7 @@ msgid "" "operates on top of Ethereum Layer 1, creating a protocol stack that each\n" "addresses different functionalities, similar to the OSI model for\n" "internet connections. This chapter is an edit of\n" -"[drspacemn](https://medium.com/starknet-edu/the-starknet-" -"stack-7b0d70a7e1d4)'s\n" +"[drspacemn](https://medium.com/starknet-edu/the-starknet-stack-7b0d70a7e1d4)'s\n" "blog." msgstr "" @@ -6777,9 +6426,7 @@ msgid "" msgstr "" #: src/ch03-04-nodes.md:64 -msgid "" -"\"Modular" +msgid "\"Modular" msgstr "" #: src/ch03-04-nodes.md:66 @@ -6795,8 +6442,7 @@ msgid "" "There are various hardware specifications, including packaged options,\n" "that will enable you to run an Ethereum node from home. The goal here is\n" "to build the most cost-efficient Starknet stack possible ([see here more\n" -"options](https://github.com/rocket-pool/docs.rocketpool.net/blob/main/src/" -"guides/node/local/hardware.md))." +"options](https://github.com/rocket-pool/docs.rocketpool.net/blob/main/src/guides/node/local/hardware.md))." msgstr "" #: src/ch03-04-nodes.md:75 @@ -6915,8 +6561,7 @@ msgid "" " docker container logs -f $(docker ps | grep besu | awk '{print $1}')\n" "\n" " # tail lighthouse logs\n" -" docker container logs -f $(docker ps | grep lighthouse | awk '{print " -"$1}')" +" docker container logs -f $(docker ps | grep lighthouse | awk '{print $1}')" msgstr "" #: src/ch03-04-nodes.md:152 @@ -7018,8 +6663,7 @@ msgstr "" #: src/ch03-04-nodes.md:225 msgid "" -"# check goerli etherscan to make sure you have the latest block https://" -"goerli.etherscan.io\n" +"# check goerli etherscan to make sure you have the latest block https://goerli.etherscan.io\n" "\n" " curl --location --request POST 'http://localhost:8545' \\\n" " --header 'Content-Type: application/json' \\\n" @@ -7055,8 +6699,7 @@ msgid "To follow the sync:" msgstr "" #: src/ch03-04-nodes.md:249 -msgid "" -"docker container logs -f $(docker ps | grep pathfinder | awk '{print $1}')" +msgid "docker container logs -f $(docker ps | grep pathfinder | awk '{print $1}')" msgstr "" #: src/ch03-04-nodes.md:251 @@ -7119,8 +6762,7 @@ msgstr "" #: src/ch03-04-nodes.md:287 msgid "" "To start our toy\n" -"[indexer](https://github.com/starknet-edu/starknet-stack/blob/main/indexer/" -"indexer.sh)\n" +"[indexer](https://github.com/starknet-edu/starknet-stack/blob/main/indexer/indexer.sh)\n" "run:" msgstr "" @@ -7170,8 +6812,7 @@ msgid "" " \"0x7dd3a55d94a0de6f3d6c104d7e6c88ec719a82f4e2bbc12587c8c187584d3d5\",\n" " \"0x71456dded17015d1234779889d78f3e7c763ddcfd2662b19e7843c7542614f8\"\n" " ],\n" -" \"contract_address\": " -"\"0x23371b227eaecd8e8920cd429d2cd0f3fee6abaacca08d3ab82a7cdd\",\n" +" \"contract_address\": \"0x23371b227eaecd8e8920cd429d2cd0f3fee6abaacca08d3ab82a7cdd\",\n" " \"calldata\": [\n" " \"0x1\",\n" " \"0x677bb1cdc050e8d63855e8743ab6e09179138def390676cc03c484daf112ba1\",\n" @@ -7182,8 +6823,7 @@ msgid "" " \"0x2b\",\n" " \"0x0\"\n" " ],\n" -" \"entry_point_selector\": " -"\"0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad\"\n" +" \"entry_point_selector\": \"0x15d40a3d6ca2ac30f4031e42be28da9b056fef9bb7357ac5e85627ee876e5ad\"\n" " }\n" " },\n" " \"id\": 0\n" @@ -7208,9 +6848,7 @@ msgid "" msgstr "" #: src/ch03-04-nodes.md:348 -msgid "" -"\"Starkscan" +msgid "\"Starkscan" msgstr "" #: src/ch03-04-nodes.md:350 @@ -7230,13 +6868,11 @@ msgstr "" #: src/ch03-04-nodes.md:357 msgid "" "Pulled Block #: 638703\n" -" Found transaction: " -"0x2053ae75adfb4a28bf3a01009f36c38396c904012c5fc38419f4a7f3b7d75a5\n" +" Found transaction: 0x2053ae75adfb4a28bf3a01009f36c38396c904012c5fc38419f4a7f3b7d75a5\n" " Events to Index:\n" " [\n" " {\n" -" \"from_address\": " -"\"0x806778f9b06746fffd6ca567e0cfea9b3515432d9ba39928201d18c8dc9fdf\",\n" +" \"from_address\": \"0x806778f9b06746fffd6ca567e0cfea9b3515432d9ba39928201d18c8dc9fdf\",\n" " \"keys\": [\n" " \"0x1fee98324df9b8703ae8de6de3068b8a8dce40c18752c3b550c933d6ac06765\"\n" " ],\n" @@ -7245,8 +6881,7 @@ msgid "" " ]\n" " },\n" " {\n" -" \"from_address\": " -"\"0x126dd900b82c7fc95e8851f9c64d0600992e82657388a48d3c466553d4d9246\",\n" +" \"from_address\": \"0x126dd900b82c7fc95e8851f9c64d0600992e82657388a48d3c466553d4d9246\",\n" " \"keys\": [\n" " \"0x5ad857f66a5b55f1301ff1ed7e098ac6d4433148f0b72ebc4a2945ab85ad53\"\n" " ],\n" @@ -7256,8 +6891,7 @@ msgid "" " ]\n" " },\n" " {\n" -" \"from_address\": " -"\"0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7\",\n" +" \"from_address\": \"0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7\",\n" " \"keys\": [\n" " \"0x99cd8bde557814842a3121e8ddfd433a539b8c9f14bf31ebf108d12e6196e9\"\n" " ],\n" @@ -7310,15 +6944,11 @@ msgid "" msgstr "" #: src/ch03-04-nodes.md:418 -msgid "" -"\"Fractal" +msgid "\"Fractal" msgstr "" #: src/ch03-04-nodes.md:420 -msgid "" -"Fractal scaling in a modular blockchain environment" +msgid "Fractal scaling in a modular blockchain environment" msgstr "" #: src/ch03-04-nodes.md:422 @@ -7373,15 +7003,11 @@ msgid "" msgstr "" #: src/ch03-05-layer-3.md:16 -msgid "" -"\"Example" +msgid "\"Example" msgstr "" #: src/ch03-05-layer-3.md:18 -msgid "" -"Example of an environment with a Layers 3 and 4" +msgid "Example of an environment with a Layers 3 and 4" msgstr "" #: src/ch03-05-layer-3.md:20 @@ -7913,8 +7539,7 @@ msgid "" " \n" "\n" "- \\[4\\] Starkware:\n" -" \n" +" \n" "\n" "- \\[5\\] Julien Niset, 2022:\n" " \n" @@ -7945,8 +7570,7 @@ msgid "" "differentiate themselves through unique methods. A smart contract gains\n" "the status of an account contract when it implements the interface as\n" "described by SNIP-6 ([StarkNet IMprovement Proposa-6: Standar Account\n" -"Interface](https://github.com/ericnordelo/SNIPs/blob/feat/standard-account/" -"SNIPS/snip-6.md)).\n" +"Interface](https://github.com/ericnordelo/SNIPs/blob/feat/standard-account/SNIPS/snip-6.md)).\n" "This standard borrows from SRC-6 and SRC-5, which are akin to Ethereum’s\n" "ERCs, setting application-level conventions and contract standards." msgstr "" @@ -7963,8 +7587,7 @@ msgid "" "```rust\n" " trait ISRC6 {\n" " fn __validate__(calls: Array) -> felt252;\n" -" fn is_valid_signature(hash: felt252, signature: Array) -> " -"felt252;\n" +" fn is_valid_signature(hash: felt252, signature: Array) -> felt252;\n" " fn __execute__(calls: Array) -> Array>;\n" " }\n" "```" @@ -8060,8 +7683,7 @@ msgid "" "functions will be covered in the subsequent chapters." msgstr "" -#: src/ch04-01-accounts.md:91 src/ch04-02-hello-account.md:183 -#: src/ch04-03-standard-account.md:363 +#: src/ch04-01-accounts.md:91 src/ch04-02-hello-account.md:183 src/ch04-03-standard-account.md:363 msgid "## Summary" msgstr "" @@ -8104,21 +7726,16 @@ msgstr "" msgid "# Hello World Account Contract" msgstr "" -#: src/ch04-02-hello-account.md:3 src/ch04-03-standard-account.md:3 -#: src/ch04-04-01-multicaller.md:3 src/ch04-04-02-multisig.md:3 +#: src/ch04-02-hello-account.md:3 src/ch04-03-standard-account.md:3 src/ch04-04-01-multicaller.md:3 src/ch04-04-02-multisig.md:3 msgid "" "**NOTE:**\n" -"**THIS CHAPTER NEEDS TO BE UPDATED TO REFLECT THE NEW SYNTAX FOR ACCOUNT " -"CONTRACTS. PLEASE DO NOT USE THIS CHAPTER AS A REFERENCE UNTIL THIS NOTE IS " -"REMOVED.**" +"**THIS CHAPTER NEEDS TO BE UPDATED TO REFLECT THE NEW SYNTAX FOR ACCOUNT CONTRACTS. PLEASE DO NOT USE THIS CHAPTER AS A REFERENCE UNTIL THIS NOTE IS REMOVED.**" msgstr "" -#: src/ch04-02-hello-account.md:6 src/ch04-03-standard-account.md:6 -#: src/ch04-04-01-multicaller.md:6 src/ch04-04-02-multisig.md:6 +#: src/ch04-02-hello-account.md:6 src/ch04-03-standard-account.md:6 src/ch04-04-01-multicaller.md:6 src/ch04-04-02-multisig.md:6 msgid "" -"**CONTRIBUTE: This subchapter is missing an example of declaration, " -"deployment and interaction with the contract. We would love to see your " -"contribution! Please submit a PR.**" +"**CONTRIBUTE: This subchapter is missing an example of declaration, deployment and interaction with the contract. We would love to see your contribution! Please submit a PR." +"**" msgstr "" #: src/ch04-02-hello-account.md:8 @@ -8144,15 +7761,13 @@ msgid "" " // Returns starknet::VALIDATED to confirm successful validation.\n" " #[external]\n" " fn __validate_deploy__(\n" -" class_hash: felt252, contract_address_salt: felt252, " -"public_key_: felt252\n" +" class_hash: felt252, contract_address_salt: felt252, public_key_: felt252\n" " ) -> felt252 {\n" " starknet::VALIDATED\n" " }\n" "\n" " // Validate declaration of transactions using this Account.\n" -" // This function enforces that transactions now require accounts to " -"pay fees.\n" +" // This function enforces that transactions now require accounts to pay fees.\n" " // Returns starknet::VALIDATED to confirm successful validation.\n" " #[external]\n" " fn __validate_declare__(class_hash: felt252) -> felt252 {\n" @@ -8160,27 +7775,22 @@ msgid "" " }\n" "\n" " // Validate transaction before execution.\n" -" // This function is called by the account contract upon receiving a " -"transaction.\n" +" // This function is called by the account contract upon receiving a transaction.\n" " // If the validation is successful, it returns starknet::VALIDATED.\n" " #[external]\n" " fn __validate__(\n" -" contract_address: ContractAddress, entry_point_selector: " -"felt252, calldata: Array::\n" +" contract_address: ContractAddress, entry_point_selector: felt252, calldata: Array::\n" " ) -> felt252 {\n" " starknet::VALIDATED\n" " }\n" "\n" " // Execute transaction.\n" -" // If the '__validate__' function is successful, this '__execute__' " -"function will be called.\n" -" // It forwards the call to the target contract using starknet::" -"call_contract_syscall.\n" +" // If the '__validate__' function is successful, this '__execute__' function will be called.\n" +" // It forwards the call to the target contract using starknet::call_contract_syscall.\n" " #[external]\n" " #[raw_output]\n" " fn __execute__(\n" -" contract_address: ContractAddress, entry_point_selector: " -"felt252, calldata: Array::\n" +" contract_address: ContractAddress, entry_point_selector: felt252, calldata: Array::\n" " ) -> Span:: {\n" " starknet::call_contract_syscall(\n" " address: contract_address,\n" @@ -8230,8 +7840,7 @@ msgid "" "```rust\n" " #[external]\n" " fn __validate_deploy__(\n" -" class_hash: felt252, contract_address_salt: felt252, public_key_: " -"felt252\n" +" class_hash: felt252, contract_address_salt: felt252, public_key_: felt252\n" " ) -> felt252 {\n" " starknet::VALIDATED\n" " }\n" @@ -8274,8 +7883,7 @@ msgid "" "```rust\n" " #[external]\n" " fn __validate__(\n" -" contract_address: ContractAddress, entry_point_selector: felt252, " -"calldata: Array::\n" +" contract_address: ContractAddress, entry_point_selector: felt252, calldata: Array::\n" " ) -> felt252 {\n" " starknet::VALIDATED\n" " }\n" @@ -8299,8 +7907,7 @@ msgid "" " #[external]\n" " #[raw_output]\n" " fn __execute__(\n" -" contract_address: ContractAddress, entry_point_selector: felt252, " -"calldata: Array::\n" +" contract_address: ContractAddress, entry_point_selector: felt252, calldata: Array::\n" " ) -> Span:: {\n" " starknet::call_contract_syscall(\n" " address: contract_address,\n" @@ -8338,8 +7945,7 @@ msgstr "" #: src/ch04-02-hello-account.md:158 src/ch04-03-standard-account.md:307 msgid "" "export STARKNET_NETWORK=alpha-goerli\n" -" export STARKNET_WALLET=starkware.starknet.wallets.open_zeppelin." -"OpenZeppelinAccount" +" export STARKNET_WALLET=starkware.starknet.wallets.open_zeppelin.OpenZeppelinAccount" msgstr "" #: src/ch04-02-hello-account.md:161 src/ch04-03-standard-account.md:310 @@ -8350,10 +7956,7 @@ msgid "" msgstr "" #: src/ch04-02-hello-account.md:167 -msgid "" -"starknet declare --contract target/release/" -"starknetbook_chapter_7_HelloAccount.json --account my_account --max_fee " -"100000000000000000" +msgid "starknet declare --contract target/release/starknetbook_chapter_7_HelloAccount.json --account my_account --max_fee 100000000000000000" msgstr "" #: src/ch04-02-hello-account.md:169 @@ -8367,10 +7970,7 @@ msgid "- Deploy the contract:" msgstr "" #: src/ch04-02-hello-account.md:176 -msgid "" -"starknet deploy --class_hash " -"0x07e813097812d58afbb4fb015e683f2b84e4f008cbecc60fa6dece7734a2cdfe --account " -"my_account --max_fee 100000000000000000" +msgid "starknet deploy --class_hash 0x07e813097812d58afbb4fb015e683f2b84e4f008cbecc60fa6dece7734a2cdfe --account my_account --max_fee 100000000000000000" msgstr "" #: src/ch04-02-hello-account.md:178 @@ -8378,8 +7978,7 @@ msgid "" "After completing these steps, you will have successfully declared and\n" "deployed the Hello World account contract on Starknet. [Here is a\n" "deployed\n" -"version](https://testnet.starkscan.co/" -"contract/0x01e6d7698ca76788c8f9c1091ec3d6d3f7167a9effe520402d832ca9894eba4a#overview)." +"version](https://testnet.starkscan.co/contract/0x01e6d7698ca76788c8f9c1091ec3d6d3f7167a9effe520402d832ca9894eba4a#overview)." msgstr "" #: src/ch04-02-hello-account.md:185 @@ -8457,11 +8056,9 @@ msgid "" "\n" " // Internal function to validate the transaction signature\n" " fn validate_transaction() -> felt252 {\n" -" let tx_info = starknet::get_tx_info().unbox(); // Unbox " -"transaction info\n" +" let tx_info = starknet::get_tx_info().unbox(); // Unbox transaction info\n" " let signature = tx_info.signature; // Extract signature\n" -" assert(signature.len() == 2_u32, 'INVALID_SIGNATURE_LENGTH'); // " -"Check signature length\n" +" assert(signature.len() == 2_u32, 'INVALID_SIGNATURE_LENGTH'); // Check signature length\n" "\n" " // Verify ECDSA signature\n" " assert(\n" @@ -8480,8 +8077,7 @@ msgid "" " // Validate contract deployment\n" " #[external]\n" " fn __validate_deploy__(\n" -" class_hash: felt252, contract_address_salt: felt252, " -"public_key_: felt252\n" +" class_hash: felt252, contract_address_salt: felt252, public_key_: felt252\n" " ) -> felt252 {\n" " validate_transaction()\n" " }\n" @@ -8495,8 +8091,7 @@ msgid "" " // Validate contract execution\n" " #[external]\n" " fn __validate__(\n" -" contract_address: ContractAddress, entry_point_selector: " -"felt252, calldata: Array\n" +" contract_address: ContractAddress, entry_point_selector: felt252, calldata: Array\n" " ) -> felt252 {\n" " validate_transaction()\n" " }\n" @@ -8506,21 +8101,17 @@ msgid "" " #[raw_output]\n" " fn __execute__(mut calls: Array) -> Span {\n" " // Validate caller\n" -" assert(starknet::get_caller_address().is_zero(), " -"'INVALID_CALLER');\n" +" assert(starknet::get_caller_address().is_zero(), 'INVALID_CALLER');\n" "\n" -" let tx_info = starknet::get_tx_info().unbox(); // Unbox " -"transaction info\n" +" let tx_info = starknet::get_tx_info().unbox(); // Unbox transaction info\n" " assert(tx_info.version != 0, 'INVALID_TX_VERSION');\n" "\n" -" assert(calls.len() == 1_u32, 'MULTI_CALL_NOT_SUPPORTED'); // " -"Only single calls are supported\n" +" assert(calls.len() == 1_u32, 'MULTI_CALL_NOT_SUPPORTED'); // Only single calls are supported\n" " let Call{to, selector, calldata } = calls.pop_front().unwrap();\n" "\n" " // Call the target contract\n" " starknet::call_contract_syscall(\n" -" address: to, entry_point_selector: selector, calldata: " -"calldata.span()\n" +" address: to, entry_point_selector: selector, calldata: calldata.span()\n" " ).unwrap_syscall()\n" " }\n" " }\n" @@ -8681,11 +8272,9 @@ msgstr "" msgid "" "```rust\n" " fn validate_transaction() -> felt252 {\n" -" let tx_info = starknet::get_tx_info().unbox(); // Unbox " -"transaction info\n" +" let tx_info = starknet::get_tx_info().unbox(); // Unbox transaction info\n" " let signature = tx_info.signature; // Extract signature\n" -" assert(signature.len() == 2_u32, 'INVALID_SIGNATURE_LENGTH'); // " -"Check signature length\n" +" assert(signature.len() == 2_u32, 'INVALID_SIGNATURE_LENGTH'); // Check signature length\n" "\n" " // Verify ECDSA signature\n" " assert(\n" @@ -8749,21 +8338,17 @@ msgid "" " #[raw_output]\n" " fn __execute__(mut calls: Array) -> Span {\n" " // Validate caller\n" -" assert(starknet::get_caller_address().is_zero(), " -"'INVALID_CALLER');\n" +" assert(starknet::get_caller_address().is_zero(), 'INVALID_CALLER');\n" "\n" -" let tx_info = starknet::get_tx_info().unbox(); // Unbox " -"transaction info\n" +" let tx_info = starknet::get_tx_info().unbox(); // Unbox transaction info\n" " assert(tx_info.version != 0, 'INVALID_TX_VERSION');\n" "\n" -" assert(calls.len() == 1_u32, 'MULTI_CALL_NOT_SUPPORTED'); // " -"Only single calls are supported\n" +" assert(calls.len() == 1_u32, 'MULTI_CALL_NOT_SUPPORTED'); // Only single calls are supported\n" " let Call{to, selector, calldata } = calls.pop_front().unwrap();\n" "\n" " // Call the target contract\n" " starknet::call_contract_syscall(\n" -" address: to, entry_point_selector: selector, calldata: " -"calldata.span()\n" +" address: to, entry_point_selector: selector, calldata: calldata.span()\n" " ).unwrap_syscall()\n" " }\n" "```" @@ -8809,9 +8394,7 @@ msgid "TODO: add section on how to generate a private key and public key." msgstr "" #: src/ch04-03-standard-account.md:316 -msgid "" -"starknet declare --contract target/release/starknetbook_chapter_7_Account." -"json --account vote_admin --max_fee 100000000000000000" +msgid "starknet declare --contract target/release/starknetbook_chapter_7_Account.json --account vote_admin --max_fee 100000000000000000" msgstr "" #: src/ch04-03-standard-account.md:318 @@ -9005,8 +8588,7 @@ msgstr "" #: src/ch04-04-01-multicaller.md:45 msgid "" "```rust\n" -" fn _execute_calls(mut calls: Array, mut res:Array::>) -> Array::> {\n" +" fn _execute_calls(mut calls: Array, mut res:Array::>) -> Array::> {\n" " match calls.pop_front() {\n" " Option::Some(call) => {\n" " let _res = _call_contract(call);\n" @@ -9198,8 +8780,7 @@ msgid "" "\n" "\n" " //Get the public key of the owners\n" -" //TODO - Recursively add the owners into an array and return, maybe " -"wait for loops to be enabled\n" +" //TODO - Recursively add the owners into an array and return, maybe wait for loops to be enabled\n" "\n" "\n" " //EXTERNAL FUNCTIONS\n" @@ -9266,8 +8847,7 @@ msgid "" "\n" " }\n" "\n" -" //An example function to validate that there are at least two " -"signatures\n" +" //An example function to validate that there are at least two signatures\n" " fn validate_transaction(public_key: felt252) -> felt252 {\n" " let tx_info = starknet::get_tx_info().unbox();\n" " let signature: Span = tx_info.signature;\n" @@ -9289,38 +8869,32 @@ msgid "" " }\n" "\n" " //INTERNAL FUNCTION\n" -" //Function to add the public keys of the multisig in permanent " -"storage\n" +" //Function to add the public keys of the multisig in permanent storage\n" " fn _set_owners(owners_len: usize, public_keys: Array::) {\n" " if owners_len == 0_usize {\n" " }\n" "\n" -" index_to_owner::write(owners_len, *public_keys.at(owners_len - " -"1_usize));\n" -" owner_to_index::write(*public_keys.at(owners_len - 1_usize), " -"owners_len);\n" +" index_to_owner::write(owners_len, *public_keys.at(owners_len - 1_usize));\n" +" owner_to_index::write(*public_keys.at(owners_len - 1_usize), owners_len);\n" " _set_owners(owners_len - 1_u32, public_keys);\n" " }\n" "\n" "\n" " #[external]\n" " fn __validate_deploy__(\n" -" class_hash: felt252, contract_address_salt: felt252, " -"public_key_: felt252\n" +" class_hash: felt252, contract_address_salt: felt252, public_key_: felt252\n" " ) -> felt252 {\n" " validate_transaction(public_key_)\n" " }\n" "\n" " #[external]\n" -" fn __validate_declare__(class_hash: felt252, public_key_: felt252) -" -"> felt252 {\n" +" fn __validate_declare__(class_hash: felt252, public_key_: felt252) -> felt252 {\n" " validate_transaction(public_key_)\n" " }\n" "\n" " #[external]\n" " fn __validate__(\n" -" contract_address: ContractAddress, entry_point_selector: " -"felt252, calldata: Array::, public_key_: felt252\n" +" contract_address: ContractAddress, entry_point_selector: felt252, calldata: Array::, public_key_: felt252\n" " ) -> felt252 {\n" " validate_transaction(public_key_)\n" " }\n" @@ -9328,16 +8902,13 @@ msgid "" " #[external]\n" " #[raw_output]\n" " fn __execute__(\n" -" contract_address: ContractAddress, entry_point_selector: " -"felt252, calldata: Array::,\n" +" contract_address: ContractAddress, entry_point_selector: felt252, calldata: Array::,\n" " tx_index: felt252\n" " ) -> Span:: {\n" " // Validate caller.\n" -" assert(starknet::get_caller_address().is_zero(), " -"'INVALID_CALLER');\n" +" assert(starknet::get_caller_address().is_zero(), 'INVALID_CALLER');\n" "\n" -" // Check the tx version here, since version 0 transaction skip " -"the __validate__ function.\n" +" // Check the tx version here, since version 0 transaction skip the __validate__ function.\n" " let tx_info = starknet::get_tx_info().unbox();\n" " assert(tx_info.version != 0, 'INVALID_TX_VERSION');\n" "\n" @@ -9346,8 +8917,7 @@ msgid "" " let owners_len = num_owners::read();\n" " //Subtracting one for the submitter\n" " let required_confirmations = threshold::read() - 1_usize;\n" -" assert(num_confirmations >= required_confirmations, " -"'MINIMUM_50%_CONFIRMATIONS');\n" +" assert(num_confirmations >= required_confirmations, 'MINIMUM_50%_CONFIRMATIONS');\n" "\n" " tx_is_executed::write(tx_index, true);\n" "\n" @@ -9417,10 +8987,8 @@ msgid "" " if owners_len == 0_usize {\n" " }\n" "\n" -" index_to_owner::write(owners_len, *public_keys.at(owners_len - " -"1_usize));\n" -" owner_to_index::write(*public_keys.at(owners_len - 1_usize), " -"owners_len);\n" +" index_to_owner::write(owners_len, *public_keys.at(owners_len - 1_usize));\n" +" owner_to_index::write(*public_keys.at(owners_len - 1_usize), owners_len);\n" " _set_owners(owners_len - 1_u32, public_keys);\n" " }\n" "```" @@ -9538,16 +9106,13 @@ msgid "" " #[external]\n" " #[raw_output]\n" " fn __execute__(\n" -" contract_address: ContractAddress, entry_point_selector: " -"felt252, calldata: Array::,\n" +" contract_address: ContractAddress, entry_point_selector: felt252, calldata: Array::,\n" " tx_index: felt252\n" " ) -> Span:: {\n" " // Validate caller.\n" -" assert(starknet::get_caller_address().is_zero(), " -"'INVALID_CALLER');\n" +" assert(starknet::get_caller_address().is_zero(), 'INVALID_CALLER');\n" "\n" -" // Check the tx version here, since version 0 transaction skip " -"the __validate__ function.\n" +" // Check the tx version here, since version 0 transaction skip the __validate__ function.\n" " let tx_info = starknet::get_tx_info().unbox();\n" " assert(tx_info.version != 0, 'INVALID_TX_VERSION');\n" "\n" @@ -9556,8 +9121,7 @@ msgid "" " let owners_len = num_owners::read();\n" " //Subtracting one for the submitter\n" " let required_confirmations = threshold::read() - 1_usize;\n" -" assert(num_confirmations >= required_confirmations, " -"'MINIMUM_50%_CONFIRMATIONS');\n" +" assert(num_confirmations >= required_confirmations, 'MINIMUM_50%_CONFIRMATIONS');\n" "\n" " tx_is_executed::write(tx_index, true);\n" "\n" From c3da94172bed6ad6faca1fb781f8d87e92075651 Mon Sep 17 00:00:00 2001 From: Nadai2010 Date: Thu, 12 Oct 2023 23:58:35 +0100 Subject: [PATCH 2/3] Update Chapter 1-2 [i18n] in Spanish --- po/es.mo | Bin 19771 -> 255331 bytes po/es.po | 2500 +++++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 2192 insertions(+), 308 deletions(-) diff --git a/po/es.mo b/po/es.mo index f9660b1f6d21e6a4af44c91385d9ac10b3070027..3e19f2b8e08d27b76095c46b74abecb1584c102d 100644 GIT binary patch literal 255331 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�W9x|0=dYMC7no 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 Vjke4(+S=Ht*X(~=?K+0m{{s;#mH+?% delta 2507 zcmZ9M4{TM{9mmf(ujSv6mI9>}N^e`0LR-fl`Pa&y(mvZtsST|$17%)bFZkx`yY=-o z8*#~Vnc0lYZ1EyzLAFU)1QK;-HC_{nY-<#CW-{lJp)$9Ck_^Y}Ox?o#v(N9{$Fl90 z_q(5S?>YCJ-|zSR-FN=Ak`o7Y?vG_fk14DNUxHAhz~gWZJOj(& z1vnf23od}yOpWH3z%OyX9?pebung{m?OLh(U~jQf®zDN;E#b(T`&EU0Id9PlAz zE`L)Crt@$nY=knuj*D!#wZOZf95@W+z#OcE`(Y`323EmSa2`AdABP|3=W|MZpSR?| zC!lO_oQq`kBD@2hfq#Sbyxj;ZNMACJ!)u@mOP~+s{T%!ineK-R;2jlF1&4`B5;+KE z-BGxZ^VJxG`S2{1h$jj(*G31-firks110lDC>w2rvc4NihIc^;?0zT}u~0HS0{N+p zOv*mnA+aeB=A3VNNN>cr$VLv73bnvrz^$;HOlPqP@~Z0> zDOC-dpai-Veh#<8Kf$jsc?vc==zoY8uQ-&SrmzU!!~NQNr53Z`yGx=-e+DJ6m!VYP z9Vh``F3itd8da(eNW&l>K(Ylk7hW{SMLCuP5%E8B>1TqFi``<$3RqsIu{u9c&%C%7i8sU8IyWvSV07bIeby3f)%rTG! zH^b?$AMS)Z<(|k-!Y1xdH%C%TLTR?yEo1|0pai%KPO!cm_QBQbdB*dHH$;J+fKr)P zp-A{%fw?OT7Vu!+#wfDoP%_&LXTV-q0e3)Ysw|X^9)Kdj0VwZ3SC~HopW*&pNL#3V zo1#FEL8){I<^A8lMf9J#z(7hGYo&2u1(XdpK-pk>fnSHRZa;h*9*0}BQV(v9q&m|U zNp}uP0=hk_UZ%60DVRvtgV*3O{L8pB-2dB39?-z6R0{)|Ja3x|tS(R>pUZW4 zB`*4l1+D9r29LIE58mG}x2iYexr4h>o~o;J`dtQ&zuRf^(^)T_9S)w2mybSqS6q+& z_LlbrU|?P@oB9oR za46*s2bWKOD=2$oB6$C;jujoAKj>vMd-JPRhnLMJ(|er0teeSt1FF+YrTj*xHIeW~ z(%G8)qS1kOUecp~xLBowhKUt(x42n1?KV5DPPd{xILuCJU2Qka&=-RrG?&ll^X?n*(g`m!Z0|17tL#LnzRA8@q0`||wZ5do z-aGY5Z6EOT`SAHYdWQ+CKGKJa?JJ+^w&G=Lo0lyQOFz?7wROJGOLg2%bjRk{r?t6t zP22eBpzrjKcoIwN-jM+}BcdSC_~F4_BPsu?M6NU76(mXy`1W@*O>NjzZ;t73N`o0I z4$pR)CyMN3+MKnAa;Dnu_>Q^WzWK0m?4S3U)fK&&WIB-?O1fzA-)h+h5187rZ63NL z6N#jsE|kQMS<_-0erU!j`}$kAZE@nelZhnl;SH1hwb@8=G);5KQ+^JaQ>}w zd*TaS5tROZp?&o!\n" "Language-Team: Spanish \n" "Language: es\n" @@ -560,13 +560,15 @@ msgstr "" #: src/ch00-00-introduction.md:15 msgid "## Defining \"Blockchain\"" -msgstr "" +msgstr "## Definición de \"Blockchain" #: src/ch00-00-introduction.md:17 msgid "" "In the ever-evolving realm of technology, defining a term as multifaceted as \"Blockchain\" can be challenging. Based on current understandings and applications, a " "Blockchain can be characterized by the following three properties ([Eli Ben-Sasson, 2023](https://twitter.com/EliBenSasson/status/1709272086504485265)):" msgstr "" +"En el siempre cambiante ámbito de la tecnología, definir un término tan polifacético como \"Blockchain\" puede resultar complicado. Según los conocimientos y aplicaciones " +"actuales, una Blockchain puede caracterizarse por las tres propiedades siguientes ([Eli Ben-Sasson, 2023](https://twitter.com/EliBenSasson/status/1709272086504485265)):" #: src/ch00-00-introduction.md:19 msgid "" @@ -577,22 +579,33 @@ msgid "" "3. **Value Distribution:** Central to the Blockchain's operation is the way it rewards its operators. The system autonomously distributes value in a manner that is wide-" "ranging and equitable. This incentivization not only motivates participants to maintain the system's integrity but also ensures a broader societal consensus." msgstr "" +"1. **Protocolo público:** La base de una Blockchain es un protocolo que está disponible abiertamente. Esta transparencia garantiza que cualquier parte interesada pueda " +"entender su funcionamiento, fomentando la confianza y permitiendo una adopción más amplia.\n" +"2. **Red abierta P2P:** En lugar de depender de una entidad centralizada, una Blockchain funciona a través de una red entre pares (P2P). Este enfoque descentralizado " +"garantiza que las operaciones se distribuyan entre varios participantes o nodos, lo que hace que el sistema sea más resistente a los fallos y la censura.\n" +"3. **Distribución de valor:** Un aspecto central del funcionamiento de la Blockchain es la forma en que recompensa a sus operadores. El sistema distribuye valor de forma " +"autónoma, amplia y equitativa. Esta incentivación no sólo motiva a los participantes a mantener la integridad del sistema, sino que también garantiza un consenso social más " +"amplio." #: src/ch00-00-introduction.md:23 msgid "" "While these properties capture the essence of many Blockchains, the term's definition might need refinement as the technology matures and finds new applications. Engaging in " "continuous dialogue and revisiting definitions will be crucial in this dynamic landscape." msgstr "" +"Aunque estas propiedades captan la esencia de muchas Blockchains, la definición del término podría necesitar refinamiento a medida que la tecnología madura y encuentra " +"nuevas aplicaciones. En este panorama dinámico, será crucial entablar un diálogo continuo y revisar las definiciones." #: src/ch00-00-introduction.md:25 msgid "## Starknet Definition" -msgstr "" +msgstr "## Definición de Starknet" #: src/ch00-00-introduction.md:27 msgid "" "Starknet is a Layer-2 network that makes Ethereum transactions faster, cheaper, and more secure using zk-STARKs technology. Think of it as a boosted layer on top of " "Ethereum, optimized for speed and cost." msgstr "" +"Starknet es una red de capa 2 que hace que las transacciones de Ethereum sean más rápidas, baratas y seguras utilizando la tecnología de zk-STARK. Piense en ella como una " +"capa reforzada sobre Ethereum, optimizada para la velocidad y el coste." #: src/ch00-00-introduction.md:29 msgid "" @@ -600,22 +613,26 @@ msgid "" "integrity hinges on the robustness of succinct, transparent proofs of computational integrity. This method lets powerful operators enhance Starknet's capacity, ensuring " "everyone can authenticate Starknet's integrity using universally accessible tools ([Eli Ben-Sasson, Bareli, Brandt, Volokh, 2023](https://hackmd.io/@Elibensasson/ryMelVulp))." msgstr "" +"Starknet tiende un puente entre la escalabilidad y el amplio consenso. Integra un marco matemático para navegar por el equilibrio entre capacidad e inclusividad. Su " +"integridad depende de la solidez de las pruebas sucintas y transparentes de integridad computacional. Este método permite a los operadores potentes mejorar la capacidad de " +"Starknet, garantizando que todo el mundo pueda autenticar la integridad de Starknet utilizando herramientas universalmente accesibles ([Eli Ben-Sasson, Bareli, Brandt, " +"Volokh, 2023](https://hackmd.io/@Elibensasson/ryMelVulp))." #: src/ch00-00-introduction.md:31 msgid "## Starknet’s Mission" -msgstr "" +msgstr "## Misión de Starknet" #: src/ch00-00-introduction.md:33 msgid "_Starknet’s mission is to allow individuals to freely implement and use any social function they desire._" -msgstr "" +msgstr "_La misión de Starknet es permitir a los individuos implantar y utilizar libremente cualquier función social que deseen._" #: src/ch00-00-introduction.md:35 msgid "## Starknet’s Values" -msgstr "" +msgstr "## Valores de Starknet" #: src/ch00-00-introduction.md:37 msgid "Starknet's ethos is anchored in core principles ([Eli Ben-Sasson, Bareli, Brandt, Volokh, 2023](https://hackmd.io/@Elibensasson/ryMelVulp)):" -msgstr "" +msgstr "La ética de Starknet se basa en principios fundamentales ([Eli Ben-Sasson, Bareli, Brandt, Volokh, 2023](https://hackmd.io/@Elibensasson/ryMelVulp)):" #: src/ch00-00-introduction.md:39 msgid "" @@ -634,14 +651,28 @@ msgid "" "- **Individual Empowerment.** At its core, Starknet thrives on a well-informed and autonomous user base. This is achieved by fostering a culture rooted in its core mission " "and values, with a strong emphasis on education." msgstr "" +"- **Amplitud duradera.** Starknet se resiste continuamente a la consolidación de poder. Los puntos clave incluyen:\n" +"\n" +" - La amplia distribución del poder sustenta la legitimidad de Starknet y debe persistir en todas las operaciones y toma de decisiones. Si bien en ocasiones puede ser " +"necesario el funcionamiento centralizado, debería ser de corta duración.\n" +" - El protocolo y la gobernanza de Starknet siempre deben ser abiertos y transparentes.\n" +" - La gobernanza debería reforzar la inclusión, con una estructura flexible que pueda evolucionar para garantizar una inclusión duradera.\n" +"\n" +"- **Neutralidad.** Starknet se mantiene imparcial con respecto a las funciones sociales que apoya.\n" +"\n" +" - Los objetivos y el espíritu de las funciones de Starknet recaen en sus creadores.\n" +" - **Resistencia a la censura:** Starknet permanece agnóstico respecto de la naturaleza y el significado de las transacciones de los usuarios.\n" +"\n" +"- **Empoderamiento individual.** En esencia, Starknet prospera con una base de usuarios autónomos y bien informados. Esto se logra fomentando una cultura arraigada en su " +"misión y valores fundamentales, con un fuerte énfasis en la educación." #: src/ch00-00-introduction.md:52 msgid "## Key Features" -msgstr "" +msgstr "## Características Clave" #: src/ch00-00-introduction.md:54 msgid "These are some key features of Starknet:" -msgstr "" +msgstr "Estas son algunas de las características clave de Starknet:" #: src/ch00-00-introduction.md:56 msgid "" @@ -658,10 +689,22 @@ msgid "" " (CVM), that allow us to innovate beyond the Ethereum Virtual Machine\n" " (EVM) and create a new paradigm for decentralized applications." msgstr "" +"- **Bajos costos:** Las transacciones en Starknet cuestan menos que en Ethereum.\n" +" Actualizaciones futuras como Volition y EIP 4844 lo harán aún más económico.\n" +"\n" +"- **Fácil de usar para desarrolladores:** Starknet permite a los desarrolladores crear fácilmente\n" +" aplicaciones descentralizadas que utilizan su idioma nativo, El Cairo.\n" +"\n" +"- **Velocidad y eficiencia:** Los próximos lanzamientos tienen como objetivo realizar transacciones\n" +" incluso más rápido y más barato.\n" +"\n" +"- **CVM:** Gracias a Cairo, Starknet se ejecuta en su propia VM, llamada Cairo VM\n" +" (CVM), que nos permiten innovar más allá de la Máquina Virtual Ethereum\n" +" (EVM) y crear un nuevo paradigma para aplicaciones descentralizadas." #: src/ch00-00-introduction.md:69 msgid "Here some of them:" -msgstr "" +msgstr "Aquí algunas de ellas:" #: src/ch00-00-introduction.md:71 msgid "" @@ -679,10 +722,23 @@ msgid "" " **Paymaster**, to pay for their transaction. Supports gasless\n" " transactions, enhancing user accessibility." msgstr "" +"- **Abstracción de Cuenta:** Implementado a nivel de protocolo, esto\n" +" facilita diversos esquemas de firma al tiempo que garantiza la seguridad del usuario y\n" +" autocustodia de bienes.\n" +"\n" +"- **Volition:** Se implementará en testnet durante el cuarto trimestre de 2023 y permitirá\n" +" desarrolladores para regular la disponibilidad de datos en Ethereum (L1) o en\n" +" Starknet (L2). Reducir los datos en cadena L1 puede reducir radicalmente los costos.\n" +"\n" +"- **Paymaster:** Starknet permitirá a los usuarios elegir cómo pagar\n" +" tarifa de transacción, sigue las pautas establecidas en EIP 4337 y\n" +" permite que la transacción especifique un contrato específico, un\n" +" **Paymaster**, para pagar su transacción. Soporta sin gas\n" +" transacciones, mejorando la accesibilidad del usuario." #: src/ch00-00-introduction.md:85 msgid "## Cairo: The Language of Starknet" -msgstr "" +msgstr "## Cairo: El Lenguaje de Starknet" #: src/ch00-00-introduction.md:87 msgid "" @@ -692,16 +748,23 @@ msgid "" "Book](https://cairo-book.github.io/) and\n" "[Starklings](https://github.com/shramee/starklings-cairo1)." msgstr "" +"Cairo está hecho a medida para crear contratos inteligentes basados en STARK. Como\n" +"El idioma nativo de Starknet es fundamental para construir plataformas escalables y seguras.\n" +"Aplicaciones descentralizadas. Para comenzar a aprender ahora, consulte el [Cairo\n" +"Libro](https://cairo-book.github.io/) y\n" +"[Starklings](https://github.com/shramee/starklings-cairo1)." #: src/ch00-00-introduction.md:93 msgid "" "Inspired by Rust, Cairo lets you write contracts safely and\n" "conveniently." msgstr "" +"Inspirado en Rust, Cairo le permite redactar contratos de forma segura y\n" +"convenientemente." #: src/ch00-00-introduction.md:96 msgid "### Why Choose Cairo?" -msgstr "" +msgstr "### ¿Por qué elegir Cairo?" #: src/ch00-00-introduction.md:98 msgid "" @@ -709,6 +772,9 @@ msgid "" "programs prove their correctness without re-running them. Here’s why it\n" "stands out:" msgstr "" +"Cairo está diseñado para _Computación Demostrable_, un nuevo paradigma que permite\n" +"que los programas demuestran su corrección sin volver a ejecutarlos. He aquí por qué\n" +"destaca:" #: src/ch00-00-introduction.md:102 msgid "" @@ -718,16 +784,23 @@ msgid "" "\n" "- Flexibility: Uses traits for more flexibility than inheritance." msgstr "" +"- **Purpose-Built: :** Diseñado específicamente para smart contracts.\n" +"\n" +"- **Sin límites de EVM:** Va más allá de lo que puede hacer la máquina virtual Ethereum.\n" +"\n" +"- **Flexibilidad:** Utiliza rasgos para mayor flexibilidad que la herencia." #: src/ch00-00-introduction.md:108 msgid "## Governance" -msgstr "" +msgstr "## Gobernanza" #: src/ch00-00-introduction.md:110 msgid "" "The Starknet Foundation oversees Starknet’s governance. Its duties\n" "include:" msgstr "" +"La Fundación Starknet supervisa la gobernanza de Starknet. Sus deberes\n" +"incluyen:" #: src/ch00-00-introduction.md:113 msgid "" @@ -737,6 +810,11 @@ msgid "" "\n" "- Setting rules to maintain network integrity" msgstr "" +"- Gestionar el desarrollo y las operaciones de Starknet\n" +"\n" +"- Supervisar Starknet DAO, que permite la participación de la comunidad\n" +"\n" +"- Establecer reglas para mantener la integridad de la red" #: src/ch00-00-introduction.md:119 msgid "" @@ -744,6 +822,9 @@ msgid "" "While we value all perspectives, it’s often the technical insights that\n" "steer us forward." msgstr "" +"Nos centramos en los aportes técnicos y el debate para mejorar el protocolo.\n" +"Si bien valoramos todas las perspectivas, a menudo son los conocimientos técnicos los que\n" +"guíanos hacia adelante." #: src/ch00-00-introduction.md:123 msgid "" @@ -752,18 +833,22 @@ msgid "" "days to review it. A Snapshot proposal is made, and the community votes.\n" "A majority of _YES_ votes means an upgrade to the Mainnet." msgstr "" +"Los miembros pueden influir en Starknet votando sobre los cambios. Aquí está el proceso:\n" +"Se prueba una nueva versión en Goerli Testnet. Los miembros tienen entonces seis\n" +"días para revisarlo. Se hace una propuesta de instantánea y la comunidad vota.\n" +"Una mayoría de votos _SÍ_ significa una actualización a Mainnet." #: src/ch00-00-introduction.md:128 msgid "In short, governance is key to Starknet’s evolution." -msgstr "" +msgstr "En resumen, la gobernanza es clave para la evolución de Starknet." #: src/ch00-00-introduction.md:130 msgid "To propose an improvement, create a SNIP." -msgstr "" +msgstr "Para proponer una mejora, cree un SNIP." #: src/ch00-00-introduction.md:132 msgid "### SNIP: StarkNet Improvement Proposals" -msgstr "" +msgstr "### SNIP: Starknet Improvement Proposals" #: src/ch00-00-introduction.md:134 msgid "" @@ -778,10 +863,20 @@ msgid "" "the SNIPs can be found in [this\n" "repository](https://github.com/starknet-io/SNIPs)." msgstr "" +"SNIP es la abreviatura de Starknet Improvement Proposal. Es esencialmente un\n" +"plano que detalla las mejoras o cambios propuestos en el ecosistema de\n" +"Starknet. Un SNIP bien elaborado incluye tanto los aspectos técnicos\n" +"especificaciones del cambio y las razones detrás del mismo. Si estás\n" +"proponiendo un SNIP, es su trabajo conseguir el apoyo de la comunidad y documentar\n" +"cualquier objeción (más detalles\n" +"[aquí](https://community.starknet.io/t/draft-simp-1-simp-Purpose-and-guidelines/1197#what-is-a-snip-2)).\n" +"Una vez que se aprueba un SNIP, pasa a formar parte del protocolo Starknet. Todos\n" +"los SNIP se pueden encontrar en [este\n" +"repositorio](https://github.com/starknet-io/SNIPs)." #: src/ch00-00-introduction.md:145 msgid "SNIPs serve three crucial roles:" -msgstr "" +msgstr "Los SNIP cumplen tres funciones cruciales:" #: src/ch00-00-introduction.md:147 msgid "" @@ -793,6 +888,13 @@ msgid "" "3. They document the decision-making process, offering a historical\n" " view of how StarkNet has evolved." msgstr "" +"1. Son la vía principal para proponer nuevas características o cambios.\n" +"\n" +"2. Actúan como plataforma para discusiones técnicas dentro de la\n" +" comunidad.\n" +"\n" +"3. Documentan el proceso de toma de decisiones y ofrecen una visión\n" +" histórica de cómo ha evolucionado Starknet." #: src/ch00-00-introduction.md:155 msgid "" @@ -800,6 +902,9 @@ msgid "" "repository](https://github.com/starknet-io/SNIPs), you can easily track\n" "changes and understand the history of proposals." msgstr "" +"Debido a que los SNIP se almacenan como archivos de texto en un [version-controlled\n" +"repository](https://github.com/starknet-io/SNIPs), puede rastrear fácilmente los\n" +"cambios y comprender la historia de las propuestas." #: src/ch00-00-introduction.md:159 msgid "" @@ -808,14 +913,18 @@ msgid "" "a list of the SNIPs they’ve executed. This transparency helps users\n" "gauge the state of a particular implementation or software library." msgstr "" +"Para aquellos que están construyendo sobre Starknet, los SNIP no son solo\n" +"sugerencias: son una hoja de ruta. Es beneficioso para los implementadores mantener\n" +"una lista de los SNIP que han ejecutado. Esta transparencia ayuda a los usuarios\n" +"medir el estado de una implementación o biblioteca de software en particular." #: src/ch00-00-introduction.md:164 msgid "## Learning Resources" -msgstr "" +msgstr "## Recursos de aprendizaje" #: src/ch00-00-introduction.md:166 msgid "For deeper insights into Starknet and Cairo:" -msgstr "" +msgstr "Para obtener información más detallada sobre Starknet y Cairo:" #: src/ch00-00-introduction.md:168 msgid "" @@ -827,11 +936,18 @@ msgid "" "- [Starklings](https://github.com/shramee/starklings-cairo1):\n" " Practical tutorials and examples" msgstr "" +"- [El libro de Starknet](https://book.starknet.io): Para masterizar\n" +" Starknet\n" +"\n" +"- [El libro de Cairo](https://cairo-book.github.io/): Para dominar Cairo\n" +"\n" +"- [Starklings](https://github.com/shramee/starklings-cairo1):\n" +" Tutoriales prácticos y ejemplos" #: src/ch00-00-introduction.md:176 src/ch02-08-starknet-react.md:361 src/ch03-00-architecture.md:251 src/ch03-02-sequencers.md:216 src/ch03-03-provers.md:243 #: src/ch04-00-account-abstraction.md:242 msgid "## Conclusion" -msgstr "" +msgstr "## Conclusión" #: src/ch00-00-introduction.md:178 msgid "" @@ -839,10 +955,14 @@ msgid "" "the initial concepts introduced by figures such as Satoshi. Through a specific mathematical method, Starknet seeks a balance between scalability and consensus. As this " "technology progresses, Starknet adheres to principles of inclusivity, neutrality, and user empowerment. It's poised for continuous adaptation and improvement in the field." msgstr "" +"En tecnología descentralizada, Starknet ofrece una solución a los desafíos que encontraron los sistemas anteriores. Se basa en _protocolos_ y _registros_ establecidos, " +"siguiendo los conceptos iniciales introducidos por figuras como Satoshi. A través de un método matemático específico, Starknet busca el equilibrio entre escalabilidad y " +"consenso. A medida que avanza esta tecnología, Starknet se adhiere a principios de inclusión, neutralidad y empoderamiento del usuario. Está preparado para una adaptación y " +"mejora continuas en el campo." #: src/ch01-00-getting-started.md:1 msgid "# Getting Started" -msgstr "" +msgstr "# Primeros Pasos" #: src/ch01-00-getting-started.md:3 msgid "" @@ -850,10 +970,15 @@ msgid "" "the Cairo programming language, a language tailored for creating validity proofs and that Starknet uses. For seasoned developers looking to understand the core concepts and " "get hands-on experience, this guide offers step-by-step instructions and essential details." msgstr "" +"Starknet es una solución escalable de Capa 2 en Ethereum. Esta guía lo guiará a través del proceso de implementación e interacción con su primer smart contract de Starknet " +"utilizando el lenguaje de programación Cairo, un lenguaje diseñado para crear pruebas de validez y que utiliza Starknet. Para desarrolladores experimentados que buscan " +"comprender los conceptos básicos y adquirir experiencia práctica, esta guía ofrece instrucciones paso a paso y detalles esenciales." #: src/ch01-00-getting-started.md:5 msgid "We will use the Starknet Remix Plugin to compile, deploy and interact with our smart contract. It is a great tool to get started with Starknet development." msgstr "" +"Usaremos el complemento Starknet Remix para compilar, implementar e interactuar con nuestro contrato inteligente. Es una gran herramienta para comenzar con el desarrollo de " +"Starknet." #: src/ch01-00-getting-started.md:7 msgid "" @@ -861,26 +986,29 @@ msgid "" "2. Navigate to the ‘Plugins’ section in the bottom left corner.\n" "3. Enable the “Starknet” plugin." msgstr "" +"1. Visite [El Proyecto Remix](https://remix.ethereum.org/).\n" +"2. Navegue hasta la sección 'Plugin' en la esquina inferior izquierda.\n" +"3. Habilite el complemento 'Starknet'." #: src/ch01-00-getting-started.md:11 msgid "\"Activate" -msgstr "" +msgstr "\"Activate" #: src/ch01-00-getting-started.md:13 msgid "Activate the Starknet Plugin" -msgstr "" +msgstr "Activar el Plugin de Starknet" #: src/ch01-00-getting-started.md:15 msgid "4. After enabling, the Starknet logo appears on the left sidebar. Click it to interact with opened Cairo files." -msgstr "" +msgstr "4. Después de habilitarlo, el logotipo de Starknet aparece en la barra lateral izquierda. Haga clic en él para interactuar con los archivos Cairo abiertos." #: src/ch01-00-getting-started.md:17 msgid "## Introduction to Starknet Smart Contracts" -msgstr "" +msgstr "## Introducción a los Smart Contracts de Starknet" #: src/ch01-00-getting-started.md:19 msgid "The script below is a simple `Ownable` contract pattern written in Cairo for Starknet. It features:" -msgstr "" +msgstr "El siguiente script es un patrón de contrato simple `Ownable` escrito en Cairo para Starknet. Cuenta con:" #: src/ch01-00-getting-started.md:21 msgid "" @@ -889,6 +1017,10 @@ msgid "" "- A method to check the current owner.\n" "- An event notification for ownership changes." msgstr "" +"- Un sistema de propiedad.\n" +"- Un método para transferir la propiedad (ownership).\n" +"- Un método para comprobar el propietario (owner) actual.\n" +"- Una notificación de evento para cambios de propiedad." #: src/ch01-00-getting-started.md:26 msgid "" @@ -957,16 +1089,82 @@ msgid "" "}\n" "```" msgstr "" +"```rust\n" +"use starknet::ContractAddress;\n" +"\n" +"#[starknet::interface]\n" +"trait OwnableTrait {\n" +" fn transfer_ownership(ref self: T, new_owner: ContractAddress);\n" +" fn get_owner(self: @T) -> ContractAddress;\n" +"}\n" +"\n" +"#[starknet::contract]\n" +"mod Ownable {\n" +" use super::ContractAddress;\n" +" use starknet::get_caller_address;\n" +"\n" +" #[event]\n" +" #[derive(Drop, starknet::Event)]\n" +" enum Event {\n" +" OwnershipTransferred1: OwnershipTransferred1,\n" +" }\n" +"\n" +" #[derive(Drop, starknet::Event)]\n" +" struct OwnershipTransferred1 {\n" +" #[key]\n" +" prev_owner: ContractAddress,\n" +" #[key]\n" +" new_owner: ContractAddress,\n" +" }\n" +"\n" +" #[storage]\n" +" struct Storage {\n" +" owner: ContractAddress,\n" +" }\n" +"\n" +" #[constructor]\n" +" fn constructor(ref self: ContractState, init_owner: ContractAddress) {\n" +" self.owner.write(init_owner);\n" +" }\n" +"\n" +" #[external(v0)]\n" +" impl OwnableImpl of super::OwnableTrait {\n" +" fn transfer_ownership(ref self: ContractState, new_owner: ContractAddress) {\n" +" self.only_owner();\n" +" let prev_owner = self.owner.read();\n" +" self.owner.write(new_owner);\n" +" self.emit(Event::OwnershipTransferred1(OwnershipTransferred1 {\n" +" prev_owner: prev_owner,\n" +" new_owner: new_owner,\n" +" }));\n" +" }\n" +"\n" +" fn get_owner(self: @ContractState) -> ContractAddress {\n" +" self.owner.read()\n" +" }\n" +" }\n" +"\n" +" #[generate_trait]\n" +" impl PrivateMethods of PrivateMethodsTrait {\n" +" fn only_owner(self: @ContractState) {\n" +" let caller = get_caller_address();\n" +" assert(caller == self.owner.read(), 'Caller is not the owner');\n" +" }\n" +" }\n" +"}\n" +"```" #: src/ch01-00-getting-started.md:91 msgid "### Components Breakdown" -msgstr "" +msgstr "### Desglose de Componentes" #: src/ch01-00-getting-started.md:93 msgid "" "The following is a brief description of the components in the contract. We will get into more details when we get deeper into Cairo so feel free to skip this section for now " "if you are not familiar with smart contract development." msgstr "" +"La siguiente es una breve descripción de los componentes del contrato. Entraremos en más detalles cuando profundicemos en El Cairo, así que no dude en omitir esta sección " +"por ahora si no está familiarizado con el desarrollo de contratos inteligentes." #: src/ch01-00-getting-started.md:95 msgid "" @@ -984,14 +1182,27 @@ msgid "" "6. **Private Methods**:\n" " - **`only_owner`**: Validates if the caller is the current owner." msgstr "" +"1. **Dependencias e Interfaz**:\n" +" - **`starknet::ContractAddress`**: Representa una dirección de contrato de Starknet.\n" +" - **`OwnableTrait`**: Especifica funciones para transferir y obtener propiedad.\n" +"2. **Eventos**:\n" +" - **`OwnershipTransferred1`**: Indica cambio de propiedad con detalles del propietario anterior y nuevo.\n" +"3. **Storage**:\n" +" - **`Storage`**: Mantiene el estado del contrato con la dirección del propietario actual.\n" +"4. **Constructor**:\n" +" - Inicializa el contrato con un owner inicial.\n" +"5. **Funciones Externas**:\n" +" - Funciones para transferir la propiedad y recuperar los datos del owner actual.\n" +"6. **Métodos privados**:\n" +" - **`only_owner`**: Valida si la persona que llama es el owner actual." #: src/ch01-00-getting-started.md:109 msgid "## Compilation Process" -msgstr "" +msgstr "## Proceso de Compilación" #: src/ch01-00-getting-started.md:111 msgid "To compile using Remix:" -msgstr "" +msgstr "Para compilar usando Remix:" #: src/ch01-00-getting-started.md:113 msgid "" @@ -1008,26 +1219,38 @@ msgid "" "will use the Sierra file. Do not worry about this process for now; we will cover it in detail in a later chapter. For now, Remix will handle the compilation and deployment " "for us." msgstr "" +"1. **Creación de archivos**\n" +"\n" +" - Navega a la pestaña \"Explorador de archivos\" en Remix.\n" +" - Cree un nuevo archivo llamado `Ownable.cairo` e ingrese el código anterior.\n" +"\n" +"2. **Copilación**\n" +"\n" +" - Elija el archivo `Ownable.cairo`.\n" +" - En la pestaña \"Starknet\", seleccione \"Compilar Ownable.cairo\".\n" +" - Después de la compilación, aparece una carpeta de \"artifacts\" que contiene el contrato compilado en dos formatos distintos: Sierra (archivo JSON) y CASM. Para la " +"implementación de Starknet, Remix utilizará el archivo Sierra. No te preocupes por este proceso por ahora; Lo cubriremos en detalle en un capítulo posterior. Por ahora, " +"Remix se encargará de la compilación y la implementación por nosotros." #: src/ch01-00-getting-started.md:124 msgid "\"Artifacts" -msgstr "" +msgstr "\"Artifacts" #: src/ch01-00-getting-started.md:126 msgid "Artifacts folder after compilation" -msgstr "" +msgstr "Carpeta de artefactos después de la compilación." #: src/ch01-00-getting-started.md:128 msgid "## Deployment on the Development Network" -msgstr "" +msgstr "## Despliegue en la Red de Desarrollo" #: src/ch01-00-getting-started.md:130 msgid "To set your smart contract in motion, an initial owner must be defined. The Constructor function needs this information." -msgstr "" +msgstr "Para poner en marcha su contrato inteligente, se debe definir un propietario inicial. La función Constructor necesita esta información." #: src/ch01-00-getting-started.md:132 msgid "Here's a step-by-step guide to deploying your smart contract on the development network:" -msgstr "" +msgstr "Aquí hay una guía paso a paso para implementar su smart contract en la red de desarrollo:" #: src/ch01-00-getting-started.md:134 msgid "" @@ -1047,10 +1270,25 @@ msgid "" " - Input the copied address into the `init_owner` variable.\n" " - Click on \"Deploy ownable.cairo\"." msgstr "" +"1. **Seleccione la Red Adecuada**\n" +"\n" +" - Vaya a la pestaña de selección de Environment.\n" +" - Elija \"Remote Devnet\" para implementar su contrato inaugural en una red de desarrollo.\n" +"\n" +"2. **Elija una Cuenta Devnet**\n" +"\n" +" - En \"Selección de cuenta de Devnet\", se presenta una lista de cuentas específicas del devnet elegido.\n" +" - Elija cualquier cuenta y copie su dirección.\n" +"\n" +"3. **Iniciando Implementación**\n" +"\n" +" - Navega a la pestaña \"Starknet\".\n" +" - Ingrese la dirección copiada en la variable `init_owner`.\n" +" - Haga clic en \"Deploy ownable.cairo\"." #: src/ch01-00-getting-started.md:150 msgid "Post-deployment, Remix's terminal will send various logs. These logs provide crucial details, including:" -msgstr "" +msgstr "Después de la implementación, la terminal de Remix enviará varios registros. Estos registros proporcionan detalles cruciales, que incluyen:" #: src/ch01-00-getting-started.md:152 msgid "" @@ -1058,6 +1296,9 @@ msgid "" "- `contract_address`: The address of the deployed contract. Use this address to interact with your contract.\n" "- `calldata`: Contains the `init_owner` address fed to the constructor." msgstr "" +"- `transaction_hash`: El hash único de la transacción. Este hash se puede utilizar para rastrear el estado de la transacción.\n" +"- `contract_address`: La dirección del contrato implementado. Utilice esta dirección para interactuar con su contrato.\n" +"- `calldata`: Contiene la dirección `init_owner` enviada al constructor." #: src/ch01-00-getting-started.md:156 msgid "" @@ -1073,18 +1314,29 @@ msgid "" "}\n" "```" msgstr "" +"```bash\n" +"{\n" +" \"transaction_hash\": \"0x275e6d2caf9bc98b47ba09fa9034668c6697160a74de89c4655e2a70be84247\",\n" +" \"contract_address\": \"0x5eb239955ad4c4333b8ab83406a3cf5970554b60a0d8e78a531df18c59a0db9\",\n" +" ...\n" +" \"calldata\": [\n" +" \"0x4d9c8282b5633eeb1aab56393690d76f71e32f1b7be1bea03eb03e059245a28\"\n" +" ],\n" +" ...\n" +"}\n" +"```" #: src/ch01-00-getting-started.md:168 msgid "By following the above process, you successfully deploy your smart contract on the development network." -msgstr "" +msgstr "Si sigue el proceso anterior, implementará con éxito su contrato inteligente en la red de desarrollo." #: src/ch01-00-getting-started.md:170 msgid "## Interaction with the Contract" -msgstr "" +msgstr "## Interacción con el Contrato" #: src/ch01-00-getting-started.md:172 msgid "With the contract now active on the development network, interaction becomes possible. Here's a guide to effectively interact with your contract on Starknet:" -msgstr "" +msgstr "Con el contrato ahora activo en la red de desarrollo, la interacción se hace posible. Aquí hay una guía para interactuar efectivamente con su contrato en Starknet:" #: src/ch01-00-getting-started.md:174 msgid "" @@ -1100,6 +1352,17 @@ msgid "" " - Press the \"get_owner\" button. Your terminal will display the result, revealing the owner's address provided during the contract's deployment as calldata for the " "constructor:" msgstr "" +"1. **Iniciando interacción**\n" +"\n" +" - Navega a la pestaña \"Starknet\".\n" +" - Selecciona la opción \"Interactuar\".\n" +"\n" +"2. **Llamar a la función `get_owner`**\n" +"\n" +" - Elija la función `get_owner`. Como esta función no requiere argumentos, el campo calldata permanece en blanco. (Esta es una función de lectura, por lo que llamarla se " +"denomina \"call\").\n" +" - Presione el botón \"get_owner\". Su terminal mostrará el resultado, revelando la dirección del propietario proporcionada durante la implementación del contrato como " +"datos de llamada para el constructor:" #: src/ch01-00-getting-started.md:184 msgid "" @@ -1115,14 +1378,25 @@ msgid "" "}\n" "```" msgstr "" +"```bash\n" +"{\n" +" \"response\": {\n" +" \"result\": [\n" +" \"0x4d9c8282b5633eeb1aab56393690d76f71e32f1b7be1bea03eb03e059245a28\"\n" +" ]\n" +" },\n" +" \"contract\": \"ownable.cairo\",\n" +" \"function\": \"get_owner\"\n" +"}\n" +"```" #: src/ch01-00-getting-started.md:196 msgid "This call currently doesn't spend gas because the function does not change the state of the contract." -msgstr "" +msgstr "Esta llamada actualmente no gasta gasolina porque la función no cambia el estado del contrato." #: src/ch01-00-getting-started.md:198 msgid "3. **Invoking the `transfer_ownership` Function**" -msgstr "" +msgstr "3. **Invocando la función `transfer_ownership`**" #: src/ch01-00-getting-started.md:200 msgid "" @@ -1131,6 +1405,10 @@ msgid "" "- Click the \"transfer_ownership\" button. The terminal then showcases the transaction hash indicating the contract's state alteration. Since we are altering the contract's " "state this typo of interaction is called an \"invoke\" and needs to be signed by the account that is calling the function." msgstr "" +"- Ahora, para la función **`transfer_ownership`**, que requiere la dirección del nuevo propietario como entrada.\n" +"- Ingrese esta dirección en el campo de datos de llamada. (Para esto, use cualquier dirección de la \"Selección de cuenta Devnet\" que aparece en la pestaña Entorno).\n" +"- Haga clic en el botón \"transfer_ownership\". Luego, la terminal muestra el hash de la transacción que indica la alteración del estado del contrato. Dado que estamos " +"alterando el estado del contrato, este tipo de interacción se denomina \"invoke\" y debe ser firmado por la cuenta que llama a la función." #: src/ch01-00-getting-started.md:204 msgid "" @@ -1138,6 +1416,10 @@ msgid "" "accepted the transaction, pending block inclusion. However, a \"REJECTED\" status signifies the Sequencer's disapproval, and the transaction won't feature in the upcoming " "block. More often than not, this transaction gains acceptance, leading to a contract state modification. On calling the **`get_owner`** function again we get this:" msgstr "" +"Para estas transacciones, los registros de la terminal mostrarán una variable de \"status\", que indica el destino de la transacción. Si el estado es \"ACCEPTED_ON_L2\", el " +"secuenciador ha aceptado la transacción, pendiente de inclusión del bloque. Sin embargo, un estado \"REJECTED\" significa la desaprobación del secuenciador y la transacción " +"no aparecerá en el siguiente bloque. La mayoría de las veces, esta transacción obtiene aceptación, lo que lleva a una modificación del estado del contrato. Al llamar " +"nuevamente a la función **`get_owner`** obtenemos esto:" #: src/ch01-00-getting-started.md:206 msgid "" @@ -1153,46 +1435,65 @@ msgid "" "}\n" "```" msgstr "" +"```bash\n" +"{\n" +" \"response\": {\n" +" \"result\": [\n" +" \"0x20884fd341e11a00b9d31600c332f126f5c3f9ffd2aa93cb43dee9f90176d4f\"\n" +" ]\n" +" },\n" +" \"contract\": \"ownable.cairo\",\n" +" \"function\": \"get_owner\"\n" +"}\n" +"```" #: src/ch01-00-getting-started.md:218 msgid "You've now adeptly compiled, deployed, and interacted with your inaugural Starknet smart contract. Well done!" -msgstr "" +msgstr "Ahora ha compilado, implementado e interactuado hábilmente con su contrato inteligente inaugural de Starknet. ¡Bien hecho!" #: src/ch01-00-getting-started.md:220 msgid "## Deploying on Starknet Testnet" -msgstr "" +msgstr "## Implementación en Starknet Testnet" #: src/ch01-00-getting-started.md:222 msgid "" "After testing your smart contract on a development network, it's time to deploy it to the Starknet Testnet. Starknet Testnet is a public platform available for everyone, " "ideal for testing smart contracts and collaborating with fellow developers." msgstr "" +"Después de probar su contrato inteligente en una red de desarrollo, es hora de implementarlo en Starknet Testnet. Starknet Testnet es una plataforma pública disponible para " +"todos, ideal para probar contratos inteligentes y colaborar con otros desarrolladores." #: src/ch01-00-getting-started.md:224 msgid "First you need to create a Starknet account." -msgstr "" +msgstr "Primero necesitas crear una cuenta Starknet." #: src/ch01-00-getting-started.md:226 msgid "### Smart Wallet Setup" -msgstr "" +msgstr "### Configuración de Smart Wallet" #: src/ch01-00-getting-started.md:228 msgid "" "Before deploying your smart contract to Starknet, you must handle the transaction cost. While deploying to the Starknet Goerli Testnet is free, a smart wallet account is " "essential. You can set up a smart wallet using either:" msgstr "" +"Antes de implementar su smart contract en Starknet, debe manejar el costo de la transacción. Si bien la implementación en Starknet Goerli Testnet es gratuita, una cuenta de " +"billetera inteligente es esencial. Puede configurar una billetera inteligente usando:" #: src/ch01-00-getting-started.md:230 msgid "" "- [Braavos](https://braavos.app/)\n" "- [Argent](https://www.argent.xyz/argent-x/)" msgstr "" +"- [Braavos](https://braavos.app/)\n" +"- [Argent](https://www.argent.xyz/argent-x/)" #: src/ch01-00-getting-started.md:233 msgid "" "Both are reliable Starknet wallets offering enhanced security and accessibility features thanks to the possibilities that the Cairo VM brings, such as Account Abstraction " "(keep reading the Book for more on this)." msgstr "" +"Ambas son billeteras Starknet confiables que ofrecen características mejoradas de seguridad y accesibilidad gracias a las posibilidades que ofrece Cairo VM, como Account " +"Abstraction (siga leyendo el libro para obtener más información sobre esto)." #: src/ch01-00-getting-started.md:235 msgid "" @@ -1201,14 +1502,18 @@ msgid "" " 1. Use the [Starknet Faucet](https://faucet.goerli.starknet.io/) to fund your account.\n" "3. Deploy the account to the network. This usually takes around 10 seconds." msgstr "" +"1. Instale la extensión Chrome/brave recomendada para su billetera elegida.\n" +"2. Siga las instrucciones de su proveedor de billetera para implementar su cuenta.\n" +" 1. Utilice [Starknet Faucet](https://faucet.goerli.starknet.io/) para depositar fondos en su cuenta.\n" +"3. Implemente la cuenta en la red. Esto suele tardar unos 10 segundos." #: src/ch01-00-getting-started.md:240 msgid "Once set up, you're ready to deploy your smart contracts to the Starknet Testnet." -msgstr "" +msgstr "Una vez configurado, estará listo para implementar sus contratos inteligentes en Starknet Testnet." #: src/ch01-00-getting-started.md:242 msgid "### Deployment and Interaction" -msgstr "" +msgstr "### Despliegue e Interacción" #: src/ch01-00-getting-started.md:244 msgid "" @@ -1216,30 +1521,38 @@ msgid "" "2. In the 'Environment selection' tab, choose 'Wallet Selection'.\n" "3. Select your Starknet account and continue with deploying and interacting with your contract." msgstr "" +"1. Siga los pasos de implementación anteriores.\n" +"2. En la pestaña 'Environment selection', elija 'Selección de Wallet'.\n" +"3. Seleccione su cuenta Starknet y continúe con la implementación e interactuando con su contrato." #: src/ch01-00-getting-started.md:248 msgid "You can monitor transaction hashes and addresses using any Starknet block explorers like:" -msgstr "" +msgstr "Puede monitorear los hashes y las direcciones de las transacciones utilizando cualquier explorador de bloques de Starknet como:" #: src/ch01-00-getting-started.md:250 msgid "" "- [Starkscan](https://testnet.starkscan.co/)\n" "- [Voyager](https://goerli.voyager.online/)" msgstr "" +"- [Starkscan](https://testnet.starkscan.co/)\n" +"- [Voyager](https://goerli.voyager.online/)" #: src/ch01-00-getting-started.md:253 msgid "" "These tools provide a visual representation of transactions and contract state alterations. Notably, when you alter the contract ownership using the `transfer_ownership` " "function, the event emitted by the contract appears in the block explorer. It's an effective method to track contract events." msgstr "" +"Estas herramientas proporcionan una representación visual de las transacciones y las alteraciones del estado del contrato. En particular, cuando modifica la propiedad del " +"contrato utilizando la función `transfer_ownership`, el evento emitido por el contrato aparece en el explorador de bloques. Es un método eficaz para realizar un seguimiento " +"de los eventos del contrato." #: src/ch01-00-getting-started.md:255 msgid "## Your Next Steps" -msgstr "" +msgstr "## Tus Próximos Pasos" #: src/ch01-00-getting-started.md:257 msgid "Decide your direction from the following choices:" -msgstr "" +msgstr "Decide tu dirección entre las siguientes opciones:" #: src/ch01-00-getting-started.md:259 msgid "" @@ -1251,10 +1564,17 @@ msgid "" "Pattern Matching_. Conclude by navigating to the [Starknet Smart Contracts chapter](https://book.cairo-lang.org/ch99-00-starknet-smart-contracts.html), ensuring you have a " "well-rounded understanding." msgstr "" +"1. **Profundice su conocimiento de Starknet**: para obtener una comprensión amplia del funcionamiento interno de Starknet y los posibles casos de uso, profundice en el " +"Capítulo 3 del Libro de Starknet. Este capítulo detalla los matices arquitectónicos de Starknet. Entonces continúa desde allí.\n" +"\n" +"2. **Sumérgete en Cairo**: si estás más familiarizado con la codificación y deseas crear contratos de Starknet, entonces Cairo es esencial. Es el lenguaje contractual " +"central de Starknet. Comience con los capítulos 1 a 6 del [Libro de El Cairo] (https://book.cairo-lang.org/title-page.html), que van desde conceptos básicos de " +"_Introducción_ hasta aspectos más avanzados como _Enums y Pattern Matching_. Concluya navegando al [capítulo Smart Contracts de Starknet] (https://book.cairo-lang.org/" +"ch99-00-starknet-smart-contracts.html), asegurándose de tener una comprensión completa." #: src/ch02-00-starknet-tooling.md:1 msgid "# Starknet Tooling" -msgstr "" +msgstr "# Herramientas en Starknet" #: src/ch02-00-starknet-tooling.md:3 src/ch02-03-scarb.md:3 msgid "" @@ -1267,6 +1587,14 @@ msgid "" "in the same book. With this background, you’ll be well-equipped to\n" "understand the examples presented here." msgstr "" +"Para aprovechar al máximo este capítulo, se necesita una comprensión básica de la programación de Cairo.\n" +"Sugerimos leer los capítulos 1-6 del [El Libro de Cairo\n" +"](https://book.cairo-lang.org/title-page.html), que cubre temas de\n" +"_Comenzando_ a _Enums y Pattern Matching._ Siga esto\n" +"estudiando los [Smart Contract de Starknet\n" +"capítulo](https://book.cairo-lang.org/ch99-00-starknet-smart-contracts.html)\n" +"en el mismo libro. Con estos antecedentes, estará bien equipado para\n" +"entender los ejemplos presentados aquí." #: src/ch02-00-starknet-tooling.md:12 msgid "" @@ -1276,16 +1604,23 @@ msgid "" "development. Front-end developers can use Starknet.js with React, while\n" "Rust and Python work well for back-end tasks." msgstr "" +"Hoy, Starknet proporciona todas las herramientas esenciales para construir aplicaciones descentralizadas\n" +" (dApps), compatibles con múltiples idiomas como\n" +"JavaScript, Rust y Python. Puede utilizar el SDK de Starknet para\n" +"desarrollar. Los desarrolladores front-end pueden usar Starknet.js con React, mientras\n" +"Rust y Python funcionan bien para tareas de back-end." #: src/ch02-00-starknet-tooling.md:18 msgid "" "We welcome contributors to enhance existing tools or develop new\n" "solutions." msgstr "" +"Damos la bienvenida a los contribuyentes para mejorar las herramientas existentes o desarrollar nuevas\n" +"soluciones." #: src/ch02-00-starknet-tooling.md:21 msgid "In this chapter, you’ll explore:" -msgstr "" +msgstr "En este capítulo, explorará:" #: src/ch02-00-starknet-tooling.md:23 msgid "" @@ -1298,18 +1633,30 @@ msgid "" "\n" "- Testing: Understand testing methods with Protostar and the Devnet" msgstr "" +"- **Frameworks:** Construir usando Protostar o Hardhat\n" +"\n" +"- **SDK:** descubra la compatibilidad con varios idiomas a través de Starknet.js,\n" +" Starknet-rs, Starknet_py y Caigo\n" +"\n" +"- **Desarrollo front-end:** Utilice Starknet.js y React\n" +"\n" +"- **Testing:** Comprender los métodos de prueba con Protostar y Devnet" #: src/ch02-00-starknet-tooling.md:32 msgid "" "By chapter’s end, you’ll have a complete grasp of Starknet’s toolset,\n" "enabling efficient dApp development." msgstr "" +"Al final del capítulo, tendrá una comprensión completa del conjunto de herramientas de Starknet,\n" +"permitiendo el desarrollo eficiente de dApps." #: src/ch02-00-starknet-tooling.md:35 msgid "" "Here’s a quick rundown of the tools that could be used for Starknet\n" "development and that we’ll cover in this chapter:" msgstr "" +"Aquí hay un resumen rápido de las herramientas que podrían usarse para \n" +"el desarrollo de Starknet y que cubriremos en este capítulo:" #: src/ch02-00-starknet-tooling.md:38 msgid "" @@ -1326,20 +1673,34 @@ msgid "" "\n" "6. Starknet-react: Builds front-end apps using React." msgstr "" +"1. **Scarb:** Un administrador de paquetes que compila tus contratos.\n" +"\n" +"2. **Starkli:** Una herramienta CLI para interactuar con la red Starknet.\n" +"\n" +"3. **Foundry:** Para pruebas por contrato.\n" +"\n" +"4. **Katana:** Crea un nodo de prueba local.\n" +"\n" +"5. **SDK:** Interfaz starknet.js, Starknet.py y starknet.rs con\n" +" Starknet utilizando lenguajes de programación comunes.\n" +"\n" +"6. **Starknet-react:** Crea aplicaciones front-end usando React." #: src/ch02-01-basic-installation.md:1 src/ch02-03-scarb.md:34 src/ch02-07-starknet-js.md:13 msgid "# Installation" -msgstr "" +msgstr "# Instalación" #: src/ch02-01-basic-installation.md:3 msgid "" "This chapter walks you through setting up your Starknet development\n" "tools." msgstr "" +"Este capítulo lo guiará a través de la configuración de sus herramientas\n" +"de desarrollo en Starknet." #: src/ch02-01-basic-installation.md:6 msgid "Essential tools to install:" -msgstr "" +msgstr "Herramientas esenciales para instalar:" #: src/ch02-01-basic-installation.md:8 msgid "" @@ -1350,6 +1711,10 @@ msgid "" " manager that compiles code to Sierra, a mid-level language between\n" " Cairo and CASM." msgstr "" +"1. [Starkli](https://github.com/xJonathanLEI/starkli) - Una herramienta de línea de comandos (CLI) para interactuar con Starknet. Se discuten más herramientas en el Capítulo " +"2.\n" +"\n" +"2. [Scarb](https://github.com/software-mansion/scarb) - El gestor de paquetes de Cairo que compila código a Sierra, un lenguaje intermedio entre Cairo y CASM." #: src/ch02-01-basic-installation.md:15 msgid "" @@ -1357,16 +1722,21 @@ msgid "" "Issues](https://github.com/starknet-edu/starknetbook/issues) or contact\n" "espejelomar on Telegram." msgstr "" +"Para soporte o consultas, visite nuestro [GitHub\n" +"Issues](https://github.com/starknet-edu/starknetbook/issues) o póngase en contacto\n" +"espejelomar en Telegram." #: src/ch02-01-basic-installation.md:19 msgid "## Starkli Installation" -msgstr "" +msgstr "## Instalación de Starkli" #: src/ch02-01-basic-installation.md:21 msgid "" "Easily install Starkli using Starkliup, an installer invoked through the\n" "command line." msgstr "" +"Instale Starkli fácilmente usando Starkliup, un instalador que se invoca\n" +"a través de la línea de comando." #: src/ch02-01-basic-installation.md:24 msgid "" @@ -1375,10 +1745,14 @@ msgid "" "starkliup\n" "```" msgstr "" +"```bash\n" +"curl https://get.starkli.sh | sh\n" +"starkliup\n" +"```" #: src/ch02-01-basic-installation.md:29 msgid "Restart your terminal and confirm installation:" -msgstr "" +msgstr "Reinicia tu terminal y confirma la instalación:" #: src/ch02-01-basic-installation.md:31 msgid "" @@ -1386,22 +1760,25 @@ msgid "" "starkli --version\n" "```" msgstr "" +"```bash\n" +"starkli --version\n" +"```" #: src/ch02-01-basic-installation.md:35 msgid "To upgrade Starkli, simply repeat the steps." -msgstr "" +msgstr "Para actualizar Starkli, simplemente repita los pasos." #: src/ch02-01-basic-installation.md:37 msgid "## Scarb Package Manager Installation" -msgstr "" +msgstr "## Instalación del Administrador de Paquetes Scarb" #: src/ch02-01-basic-installation.md:39 msgid "We will get deeper into Scarb later in this chapter. For now, we will go over the installation process." -msgstr "" +msgstr "Profundizaremos en Scarb más adelante en este capítulo. Por ahora, repasaremos el proceso de instalación." #: src/ch02-01-basic-installation.md:41 msgid "For macOS and Linux:" -msgstr "" +msgstr "Para macOS y Linux:" #: src/ch02-01-basic-installation.md:43 msgid "" @@ -1409,16 +1786,21 @@ msgid "" " curl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/install.sh | sh\n" "```" msgstr "" +"```bash\n" +" curl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/install.sh | sh\n" +"```" #: src/ch02-01-basic-installation.md:47 msgid "" "For Windows, follow manual setup in the [Scarb\n" "documentation](https://docs.swmansion.com/scarb/download.html#windows)." msgstr "" +"Para Windows, siga la configuración manual en [Scarb\n" +"Documentation](https://docs.swmansion.com/scarb/download.html#windows)." #: src/ch02-01-basic-installation.md:50 msgid "Restart the terminal and run:" -msgstr "" +msgstr "Reinicie la terminal y ejecute:" #: src/ch02-01-basic-installation.md:52 src/ch02-02-compile-deploy-interact.md:38 msgid "" @@ -1426,30 +1808,37 @@ msgid "" " scarb --version\n" "```" msgstr "" +"```bash\n" +" scarb --version\n" +"```" #: src/ch02-01-basic-installation.md:56 msgid "To upgrade Scarb, rerun the installation command." -msgstr "" +msgstr "Para actualizar Scarb, vuelva a ejecutar el comando de instalación." #: src/ch02-01-basic-installation.md:58 msgid "You are now set to code in Cairo and deploy to Starknet." -msgstr "" +msgstr "Ahora está configurado para codificar en Cairo y realizar la implementación en Starknet." #: src/ch02-02-compile-deploy-interact.md:1 msgid "# Hello, World!" -msgstr "" +msgstr "# ¡Hola, Mundo!" #: src/ch02-02-compile-deploy-interact.md:3 msgid "" "In this chapter, you’ll learn how to compile, deploy, and interact with\n" "a Starknet smart contract written in Cairo." msgstr "" +"En este capítulo, aprenderá cómo compilar, implementar e interactuar con\n" +"un smart contract de Starknet escrito en Cairo." #: src/ch02-02-compile-deploy-interact.md:6 msgid "" "First, confirm that the following commands work on your system. If they\n" "don’t, refer to Basic Installation in this chapter." msgstr "" +"Primero, confirme que los siguientes comandos funcionan en su sistema. Si no es\n" +"así, consulte Instalación básica en este capítulo." #: src/ch02-02-compile-deploy-interact.md:9 msgid "" @@ -1458,20 +1847,26 @@ msgid "" " starkli --version # To interact with Starknet\n" "```" msgstr "" +"```bash\n" +" scarb --version # For Cairo code compilation\n" +" starkli --version # To interact with Starknet\n" +"```" #: src/ch02-02-compile-deploy-interact.md:14 msgid "## Find the compiler versions supported" -msgstr "" +msgstr "## Encuentre las versiones del compilador compatibles" #: src/ch02-02-compile-deploy-interact.md:16 msgid "" "We have to make sure that our Starkli compiler version match Scarb\n" "compiler version" msgstr "" +"Tenemos que asegurarnos de que nuestra versión del compilador Starkli\n" +"coincida con la versión del compilador Scarb" #: src/ch02-02-compile-deploy-interact.md:19 msgid "To find the compiler versions supported by Starkli, execute:" -msgstr "" +msgstr "Para encontrar las versiones del compilador compatibles con Starkli, ejecute:" #: src/ch02-02-compile-deploy-interact.md:21 msgid "" @@ -1479,12 +1874,17 @@ msgid "" " starkli declare --help\n" "```" msgstr "" +"```bash\n" +" starkli declare --help\n" +"```" #: src/ch02-02-compile-deploy-interact.md:25 msgid "" "You’ll see a list of possible compiler versions under the\n" "`--compiler-version` flag." msgstr "" +"Verá una lista de posibles versiones del compilador bajo el\n" +"indicador `--compiler-version`." #: src/ch02-02-compile-deploy-interact.md:28 msgid "" @@ -1495,16 +1895,24 @@ msgid "" " ...\n" "```" msgstr "" +"```bash\n" +" ...\n" +" --compiler-version \n" +" Statically-linked Sierra compiler version [possible values: [COMPILER VERSIONS]]]\n" +" ...\n" +"```" #: src/ch02-02-compile-deploy-interact.md:35 msgid "" "Note that the Scarb compiler version might not align with Starkli’s\n" "supported versions. To check Scarb’s version:" msgstr "" +"Tenga en cuenta que es posible que la versión del compilador Scarb no se alinee con las\n" +"versiones compatibles de Starkli. Para comprobar la versión de Scarb:" #: src/ch02-02-compile-deploy-interact.md:42 msgid "You’ll see a list that contains scarb, cairo and sierra version." -msgstr "" +msgstr "Verás una lista que contiene las versiones scarb, cairo y sierra." #: src/ch02-02-compile-deploy-interact.md:44 msgid "" @@ -1514,6 +1922,11 @@ msgid "" " sierra: \n" "```" msgstr "" +"```bash\n" +" scarb \n" +" cairo: \n" +" sierra: \n" +"```" #: src/ch02-02-compile-deploy-interact.md:50 msgid "" @@ -1523,10 +1936,13 @@ msgid "" "[Scarb](https://github.com/software-mansion/scarb/releases)'s GitHub\n" "repo." msgstr "" +"Si hay una discrepancia, se sugiere instalar la versión de Scarb que utiliza la versión del\n" +"compilador compatible con Starkli. Puede encontrar versiones anteriores en el repositorio\n" +"de GitHub de [Scarb](https://github.com/software-mansion/scarb/releases)." #: src/ch02-02-compile-deploy-interact.md:56 msgid "To install a specific version, such as `0.6.1`, run:" -msgstr "" +msgstr "Para instalar una versión específica, como `0.6.1`, ejecute:" #: src/ch02-02-compile-deploy-interact.md:58 msgid "" @@ -1534,10 +1950,13 @@ msgid "" " curl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/install.sh | sh -s -- -v 0.6.1\n" "```" msgstr "" +"```bash\n" +" curl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/install.sh | sh -s -- -v 0.6.1\n" +"```" #: src/ch02-02-compile-deploy-interact.md:62 msgid "## Smart Wallet Setup" -msgstr "" +msgstr "## Configuración de Smart Wallet" #: src/ch02-02-compile-deploy-interact.md:64 msgid "" @@ -1546,6 +1965,10 @@ msgid "" "the Account Descriptor is a JSON file detailing the wallet’s address and\n" "public key." msgstr "" +"Una billetera inteligente comprende un firmante (Signer) y un descriptor de cuenta. El Signer\n" +"es un smart contract con una clave privada para firmar transacciones, mientras que el\n" +"descriptor de cuenta es un archivo JSON que detalla la dirección y la clave pública de\n" +"la billetera." #: src/ch02-02-compile-deploy-interact.md:69 msgid "" @@ -1558,14 +1981,21 @@ msgid "" "3. Fund your wallet with ETH. Use [Starknet Goerli\n" " Faucet](https://faucet.goerli.starknet.io/) as needed." msgstr "" +"1. Utilice las extensiones de navegador Braavos o Argent X para crear\n" +" su smart wallet.\n" +"\n" +"2. Siga las instrucciones proporcionadas para la billetera elegida (Argent o Braavos).\n" +"\n" +"3. Financia tu billetera con ETH. Utilice [Starknet Goerli\n" +"Faucet](https://faucet.goerli.starknet.io/) según sea necesario." #: src/ch02-02-compile-deploy-interact.md:78 msgid "Now you’re ready to interact with Starknet smart contracts." -msgstr "" +msgstr "Ahora está listo para interactuar con los smart contracts de Starknet." #: src/ch02-02-compile-deploy-interact.md:80 msgid "### Creating a Signer" -msgstr "" +msgstr "### Creando un Signer" #: src/ch02-02-compile-deploy-interact.md:82 msgid "" @@ -1573,6 +2003,9 @@ msgid "" "transactions in Starknet. You’ll need the private key from your smart\n" "wallet to create one, from which the public key can be derived." msgstr "" +"El Signer es un contrato inteligente esencial capaz de firmar\n" +"transacciones en Starknet. Necesitará la clave privada de su smart\n" +"wallet para crear una, de la cual se puede derivar la clave pública." #: src/ch02-02-compile-deploy-interact.md:86 msgid "" @@ -1580,10 +2013,13 @@ msgid "" "file. This encrypted file can be accessed using a password and is\n" "generally stored in the default Starkli directory." msgstr "" +"Starkli permite el almacenamiento seguro de su clave privada a través de un archivo\n" +"de almacén de claves (keystore). Se puede acceder a este archivo cifrado mediante una\n" +"contraseña y generalmente se almacena en el directorio predeterminado de Starkli." #: src/ch02-02-compile-deploy-interact.md:90 msgid "First, create the default directory:" -msgstr "" +msgstr "Primero, cree el directorio predeterminado:" #: src/ch02-02-compile-deploy-interact.md:92 msgid "" @@ -1591,6 +2027,9 @@ msgid "" " mkdir ~/.starkli-wallets/deployer -p\n" "```" msgstr "" +"```bash\n" +" mkdir ~/.starkli-wallets/deployer -p\n" +"```" #: src/ch02-02-compile-deploy-interact.md:96 msgid "" @@ -1602,6 +2041,9 @@ msgid "" "likely have several wallets. In this tutorial, we will use the name\n" "`my_keystore_ 1.json`." msgstr "" +"Luego genere el archivo del keystore. El comando del signer contiene subcomandos para crear un archivo de keystore a partir de una clave privada o crear uno completamente " +"nuevo. En este tutorial, usaremos la opción de clave privada, que es el caso de uso más común. Debe proporcionar la ruta al archivo del almacén de claves que desea crear. " +"Puede darle cualquier nombre al archivo del almacén de claves; probablemente tendrá varias billeteras. En este tutorial, usaremos el nombre `my_keystore_ 1.json`." #: src/ch02-02-compile-deploy-interact.md:104 msgid "" @@ -1611,13 +2053,20 @@ msgid "" " Enter password:\n" "```" msgstr "" - -#: src/ch02-02-compile-deploy-interact.md:110 -msgid "" +"```bash\n" +" starkli signer keystore from-key ~/.starkli-wallets/deployer/my_keystore_1.json\n" +" Enter private key:\n" +" Enter password:\n" +"```" + +#: src/ch02-02-compile-deploy-interact.md:110 +msgid "" "In the private key prompt, paste the private key of your smart wallet.\n" "In the password prompt, enter a password of your choice. You will need\n" "this password to sign transactions using Starkli." msgstr "" +"En el mensaje de clave privada, pegue la clave privada de su billetera inteligente. En la solicitud de contraseña, ingrese la contraseña de su elección. Necesitará esta " +"contraseña para firmar transacciones utilizando Starkli." #: src/ch02-02-compile-deploy-interact.md:114 msgid "" @@ -1626,6 +2075,8 @@ msgid "" "\"Export Private Key\". For Braavos, you can find it in the \"Settings\"\n" "section → \"Privacy and Security\" → \"Export Private Key\"." msgstr "" +"Exporte la clave privada desde su billetera Braavos o Argent. Para Argent X, puede encontrarlo en la sección\"Settings\" section → Select your Account → \"Export Private Key" +"\". Para Braavos, puede encontrarlo en la sección \"Settings\" section → \"Privacy and Security\" → \"Export Private Key\"." #: src/ch02-02-compile-deploy-interact.md:119 msgid "" @@ -1635,20 +2086,23 @@ msgid "" "Argent X. Does it use an elliptic curve? If yes, which one? This is the\n" "reason why we need an account descriptor file." msgstr "" +"Si bien es necesario conocer la clave privada de una billetera inteligente para firmar transacciones, no es suficiente. También debemos informar a Starkli sobre el mecanismo " +"de firma empleado por nuestra billetera inteligente creada por Braavos o Argent X. ¿Utiliza una curva elíptica? ¿Si sí, cual? Ésta es la razón por la que necesitamos un " +"archivo descriptor de cuenta." #: src/ch02-02-compile-deploy-interact.md:125 msgid "#### [OPTIONAL] The Architecture of the Starknet Signer" -msgstr "" +msgstr "#### [OPCIONAL] La arquitectura del Signer en Starknet" #: src/ch02-02-compile-deploy-interact.md:127 msgid "" "The Starknet Signer plays an instrumental role in securing your\n" "transactions. Let’s demystify what goes on under the hood." -msgstr "" +msgstr "Starknet Signer desempeña un papel fundamental a la hora de proteger sus transacciones. Desmitifiquemos lo que sucede bajo el capó." #: src/ch02-02-compile-deploy-interact.md:130 msgid "Key Components:" -msgstr "" +msgstr "Componentes Clave:" #: src/ch02-02-compile-deploy-interact.md:132 msgid "" @@ -1664,10 +2118,16 @@ msgid "" " in Starknet\n" " Documentation](https://docs.starknet.io/documentation/architecture_and_concepts/Smart_Contracts/contract-address/)**." msgstr "" +"1. **Private Key**: una clave hexadecimal de 256 bits/32 bytes/64 caracteres (ignorando el prefijo _0x_) que es la piedra angular de la seguridad de su wallet.\n" +"\n" +"2. **Public Key**: Derivada de la clave privada, también es una clave hexadecimal de 256 bits/32 bytes/64 caracteres.\n" +"\n" +"3. **Dirección de la Smart Wallet**: A diferencia de Ethereum, la dirección aquí está influenciada por la publick key, el class hash y una salt. **[Obtenga más información " +"en la documentación de Starknet](https://docs.starknet.io/documentation/architecture_and_concepts/Smart_Contracts/contract-address/)**." #: src/ch02-02-compile-deploy-interact.md:144 msgid "To view the details of the previously created keystore file:" -msgstr "" +msgstr "Para ver los detalles del archivo de keystore creado anteriormente:" #: src/ch02-02-compile-deploy-interact.md:146 msgid "" @@ -1675,10 +2135,13 @@ msgid "" " cat ~/.starkli-wallets/deployer/my_keystore_1.json\n" "```" msgstr "" +"```bash\n" +" cat ~/.starkli-wallets/deployer/my_keystore_1.json\n" +"```" #: src/ch02-02-compile-deploy-interact.md:150 msgid "Anatomy of the `keystore.json` File:" -msgstr "" +msgstr "Anatomía del archivo `keystore.json`:" #: src/ch02-02-compile-deploy-interact.md:152 msgid "" @@ -1705,6 +2168,28 @@ msgid "" "}\n" "```" msgstr "" +"```json\n" +"{\n" +" \"crypto\": {\n" +" \"cipher\": \"aes-128-ctr\",\n" +" \"cipherparams\": {\n" +" \"iv\": \"dba5f9a67456b121f3f486aa18e24db7\"\n" +" },\n" +" \"ciphertext\": \"b3cda3df39563e3dd61064149d6ed8c9ab5f07fbcd6347625e081fb695ddf36c\",\n" +" \"kdf\": \"scrypt\",\n" +" \"kdfparams\": {\n" +" \"dklen\": 32,\n" +" \"n\": 8192,\n" +" \"p\": 1,\n" +" \"r\": 8,\n" +" \"salt\": \"6dd5b06b1077ba25a7bf511510ea0c608424c6657dd3ab51b93029244537dffb\"\n" +" },\n" +" \"mac\": \"55e1616d9ddd052864a1ae4207824baac58a6c88798bf28585167a5986585ce6\"\n" +" },\n" +" \"id\": \"afbb9007-8f61-4e62-bf14-e491c30fd09a\",\n" +" \"version\": 3\n" +"}\n" +"```" #: src/ch02-02-compile-deploy-interact.md:175 msgid "" @@ -1714,10 +2199,15 @@ msgid "" "\n" "- **`crypto`**: Houses all encryption details." msgstr "" +"- **`version`**: La versión de la implementación de la billetera inteligente.\n" +"\n" +"- **`id`**: Una cadena de identificación generada aleatoriamente.\n" +"\n" +"- **`crypto`**: Alberga todos los detalles de cifrado." #: src/ch02-02-compile-deploy-interact.md:181 msgid "Inside **`crypto`**:" -msgstr "" +msgstr "Dentro de **`crypto`**:" #: src/ch02-02-compile-deploy-interact.md:183 msgid "" @@ -1769,10 +2259,40 @@ msgid "" " private key in this case). It is generated using a hash of both the\n" " ciphertext and a portion of the derived key." msgstr "" +"- **`cipher`**: Especifica el algoritmo de cifrado utilizado, que en este caso es AES-128-CTR.\n" +"\n" +" - **AES (Estándar de cifrado avanzado)**: Un estándar de cifrado aceptado globalmente.\n" +"\n" +" - **128**: Hace referencia al tamaño de la clave en bits, por lo que es una clave de 128 bits.\n" +"\n" +" - **CTR (Modo Contador)**: Un modo de operación específico para el cifrado AES.\n" +"\n" +"- **`cipherparams`**: Contiene un vector de inicialización (IV), que garantiza que cifrar el mismo texto sin formato con la misma clave producirá textos cifrados " +"diferentes.\n" +"\n" +" - **`iv` (Vector de inicialización)**: Una cadena hexadecimal de 16 bytes que sirve como punto de partida aleatorio y único para cada operación de cifrado.\n" +"\n" +"- **`ciphertext`**: Esta es la clave privada después del cifrado, almacenada de forma segura para que solo la contraseña correcta pueda revelarla.\n" +"\n" +"- **`kdf` y `kdfparams`**: KDF significa Función de derivación de claves. Esto añade una capa de seguridad al requerir trabajo computacional,\n" +" haciendo que los ataques de fuerza bruta sean más difíciles.\n" +"\n" +" - **`dklen`**: La longitud (en bytes) de la clave derivada. Normalmente 32 bytes.\n" +"\n" +" - **`n`**: un factor de costo que representa el uso de CPU/memoria. Un valor más alto significa que se necesita más trabajo computacional, lo que aumenta la seguridad.\n" +"\n" +" - **`p`**: Factor de paralelización, que afecta la complejidad computacional.\n" +"\n" +" - **`r`**: Tamaño de bloque para la función hash, lo que nuevamente afecta los requisitos computacionales.\n" +"\n" +" - **`salt`**: Un valor aleatorio que se combina con la contraseña para disuadir ataques de diccionario.\n" +"\n" +"- **`mac` (Código de autenticación de mensaje)**: Este es un código criptográfico que asegura la integridad del mensaje (el mensaje cifrado\n" +" clave privada en este caso). Se genera utilizando un hash tanto del texto cifrado como de una parte de la clave derivada." #: src/ch02-02-compile-deploy-interact.md:231 msgid "### Creating an Account Descriptor" -msgstr "" +msgstr "### Creación de un Descriptor de Cuenta" #: src/ch02-02-compile-deploy-interact.md:233 msgid "" @@ -1783,6 +2303,9 @@ msgid "" "input and generates the account descriptor file. The account descriptor\n" "file is a JSON file that contains the details of your smart wallet." msgstr "" +"Un Descriptor de cuenta informa a Starkli sobre las características únicas de su billetera inteligente, como su mecanismo de firma. Puede generar este descriptor utilizando " +"el subcomando`fetch` de Starkli bajo el comando `account`. El subcomando `fetch` toma la dirección de su billetera en cadena como entrada y genera el archivo descriptor de " +"la cuenta. El archivo descriptor de cuenta es un archivo JSON que contiene los detalles de su billetera inteligente." #: src/ch02-02-compile-deploy-interact.md:240 msgid "" @@ -1790,6 +2313,9 @@ msgid "" " starkli account fetch --output ~/.starkli-wallets/deployer/my_account_1.json\n" "```" msgstr "" +"```bash\n" +" starkli account fetch --output ~/.starkli-wallets/deployer/my_account_1.json\n" +"```" #: src/ch02-02-compile-deploy-interact.md:244 msgid "" @@ -1797,6 +2323,7 @@ msgid "" "We’re using a Braavos wallet as an example, but the steps are the same\n" "for an Argent wallet." msgstr "" +"Después de ejecutar el comando, verá un mensaje como el siguiente. Estamos usando una billetera Braavos como ejemplo, pero los pasos son los mismos para una billetera Argent." #: src/ch02-02-compile-deploy-interact.md:248 msgid "" @@ -1806,10 +2333,15 @@ msgid "" " Downloaded new account config file: ~/.starkli-wallets/deployer/my_account_1.json\n" "```" msgstr "" +"```bash\n" +" Account contract type identified as: Braavos\n" +" Description: Braavos official proxy account\n" +" Downloaded new account config file: ~/.starkli-wallets/deployer/my_account_1.json\n" +"```" #: src/ch02-02-compile-deploy-interact.md:254 msgid "To see the details of your Account Descriptor, run:" -msgstr "" +msgstr "Para ver los detalles de su Descriptor de Cuenta, ejecute:" #: src/ch02-02-compile-deploy-interact.md:256 msgid "" @@ -1817,10 +2349,13 @@ msgid "" " cat ~/.starkli-wallets/deployer/my_account_1.json\n" "```" msgstr "" +"```bash\n" +" cat ~/.starkli-wallets/deployer/my_account_1.json\n" +"```" #: src/ch02-02-compile-deploy-interact.md:260 msgid "Here’s what a typical descriptor might look like:" -msgstr "" +msgstr "Así es como podría verse un descriptor típico:" #: src/ch02-02-compile-deploy-interact.md:262 msgid "" @@ -1849,14 +2384,38 @@ msgid "" "}\n" "```" msgstr "" +"```json\n" +"{\n" +" \"version\": 1,\n" +" \"variant\": {\n" +" \"type\": \"braavos\",\n" +" \"version\": 1,\n" +" \"implementation\": \"0x5dec330eebf36c8672b60db4a718d44762d3ae6d1333e553197acb47ee5a062\",\n" +" \"multisig\": {\n" +" \"status\": \"off\"\n" +" },\n" +" \"signers\": [\n" +" {\n" +" \"type\": \"stark\",\n" +" \"public_key\": \"0x49759ed6197d0d385a96f9d8e7af350848b07777e901f5570b3dc2d9744a25e\"\n" +" }\n" +" ]\n" +" },\n" +" \"deployment\": {\n" +" \"status\": \"deployed\",\n" +" \"class_hash\": \"0x3131fa018d520a037686ce3efddeab8f28895662f019ca3ca18a626650f7d1e\",\n" +" \"address\": \"0x6dcb489c1a93069f469746ef35312d6a3b9e56ccad7f21f0b69eb799d6d2821\"\n" +" }\n" +"}\n" +"```" #: src/ch02-02-compile-deploy-interact.md:287 msgid "Note: The structure will differ if you use an Argent wallet." -msgstr "" +msgstr "Note: The structure will differ if you use an Argent wallet." #: src/ch02-02-compile-deploy-interact.md:289 msgid "## Setting up Environment Variables" -msgstr "" +msgstr "## Configuración de Variables de Entorno" #: src/ch02-02-compile-deploy-interact.md:291 msgid "" @@ -1864,6 +2423,8 @@ msgid "" "variables are crucial: one for the Signer’s keystore file location and\n" "another for the Account Descriptor file." msgstr "" +"Para simplificar los comandos de Starkli, puede configurar variables de entorno. Dos variables clave son cruciales: una para la ubicación del archivo del keystore del " +"firmante y otra para el archivo del descriptor de cuenta." #: src/ch02-02-compile-deploy-interact.md:295 msgid "" @@ -1872,20 +2433,24 @@ msgid "" " export STARKNET_KEYSTORE=~/.starkli-wallets/deployer/my_keystore_1.json\n" "```" msgstr "" +"```bash\n" +" export STARKNET_ACCOUNT=~/.starkli-wallets/deployer/my_account_1.json\n" +" export STARKNET_KEYSTORE=~/.starkli-wallets/deployer/my_keystore_1.json\n" +"```" #: src/ch02-02-compile-deploy-interact.md:300 msgid "" "Setting these variables makes running Starkli commands easier and more\n" "efficient." -msgstr "" +msgstr "Configurar estas variables hace que la ejecución de comandos Starkli sea más fácil y eficiente." #: src/ch02-02-compile-deploy-interact.md:303 msgid "## Declaring Smart Contracts in Starknet" -msgstr "" +msgstr "## Declarando Smart Contracts en Starknet" #: src/ch02-02-compile-deploy-interact.md:305 msgid "Deploying a smart contract on Starknet involves two steps:" -msgstr "" +msgstr "Implementar un contrato inteligente en Starknet implica dos pasos:" #: src/ch02-02-compile-deploy-interact.md:307 msgid "" @@ -1893,6 +2458,9 @@ msgid "" "\n" "- Deploy an instance of the declared code." msgstr "" +"- Declara el código de tu contrato.\n" +"\n" +"- Implementar una instancia del código declarado." #: src/ch02-02-compile-deploy-interact.md:311 msgid "" @@ -1901,6 +2469,9 @@ msgid "" "of the Starknet Book repo. The `src/lib.cairo` file contains a basic\n" "contract to practice with." msgstr "" +"Para comenzar, navegue hasta el directorio `contracts/` en el [primer capítulo](https://github.com/starknet-edu/starknetbook/tree/main/chapters/book/modules/chapter_1/pages/" +"contracts)\n" +"del repositorio de Starknet Book. El archivo `src/lib.cairo` contiene un contrato básico para practicar." #: src/ch02-02-compile-deploy-interact.md:316 msgid "" @@ -1909,6 +2480,8 @@ msgid "" "Environment](https://book.starknet.io/chapter_1/environment_setup.html)\n" "section." msgstr "" +"Primero, compila el contrato usando el compilador Scarb. Si no ha instalado Scarb, siga la guía de instalación en la sección [Configuración de su entorno] (https://book." +"starknet.io/chapter_1/environment_setup.html)." #: src/ch02-02-compile-deploy-interact.md:321 msgid "" @@ -1916,27 +2489,30 @@ msgid "" " scarb build\n" "```" msgstr "" +"```bash\n" +" scarb build\n" +"```" #: src/ch02-02-compile-deploy-interact.md:325 msgid "" "This creates a compiled contract in `target/dev/` as\n" "\"contracts_Ownable.sierra.json\" (in Chapter 2 of the book we will learn\n" "more details about Scarb)." -msgstr "" +msgstr "Esto crea un contrato compilado en `target/dev/` como \"contracts_Ownable.sierra.json\" (en el Capítulo 2 del libro aprenderemos más detalles sobre Scarb)." #: src/ch02-02-compile-deploy-interact.md:329 msgid "" "With the smart contract compiled, we’re ready to declare it using\n" "Starkli. Before declaring your contract, decide on an RPC provider." -msgstr "" +msgstr "Con el contrato inteligente compilado, estamos listos para declararlo usando Starkli. Antes de declarar su contrato, decida cuál es un proveedor de RPC." #: src/ch02-02-compile-deploy-interact.md:332 msgid "### Choosing an RPC Provider" -msgstr "" +msgstr "### Elegir un Proveedor de RPC" #: src/ch02-02-compile-deploy-interact.md:334 msgid "There are three main options for RPC providers, sorted by ease of use:" -msgstr "" +msgstr "Hay tres opciones principales para los proveedores de RPC, ordenadas por facilidad de uso:" #: src/ch02-02-compile-deploy-interact.md:336 msgid "" @@ -1957,12 +2533,20 @@ msgid "" " Starknet Book](https://book.starknet.io/chapter_4/node.html) or\n" " [Kasar](https://www.kasar.io/) for setup guides." msgstr "" +"1. **Starknet Sequencer's Gateway**: La opción más rápida y es la predeterminada para Starkli por ahora. La puerta de enlace del secuenciador está obsoleta y StarkWare la " +"desactivará pronto. Se recomienda encarecidamente utilizar un proveedor de API JSON-RPC de terceros como Infura, Alchemy o Chainstack.\n" +"\n" +"2. **Infura o Alchemy**: Un paso adelante en complejidad. Deberá configurar una clave API y elegir un punto final. Para Infura, se vería así `https://starknet-goerli.infura." +"io/v3/`. Obtenga más información en la [documentación de Infura](https://docs.infura.io/networks/starknet/how-to/choose-a-network).\n" +"\n" +"3. **Tu propio nodo**: Para aquellos que quieren control total. Es el más complejo pero ofrece la mayor libertad. Consulte el [Capítulo 4 del libro Starknet](https://book." +"starknet.io/chapter_4/node.html) o [Kasar](https://www.kasar.io/) para obtener guías de configuración." #: src/ch02-02-compile-deploy-interact.md:353 msgid "" "In this tutorial, we will use Alchemy. We can set the STARKNET_RPC\n" "environment variable to make command invocations easier:" -msgstr "" +msgstr "En este tutorial, usaremos Alchemy. Podemos configurar la variable de entorno STARKNET_RPC para facilitar las invocaciones de comandos:" #: src/ch02-02-compile-deploy-interact.md:356 msgid "" @@ -1970,16 +2554,19 @@ msgid "" " export STARKNET_RPC=\"https://starknet-goerli.g.alchemy.com/v2/\"\n" "```" msgstr "" +"```bash\n" +" export STARKNET_RPC=\"https://starknet-goerli.g.alchemy.com/v2/\"\n" +"```" #: src/ch02-02-compile-deploy-interact.md:360 msgid "### Declaring Your Contract" -msgstr "" +msgstr "### Declarando su Contrato" #: src/ch02-02-compile-deploy-interact.md:362 msgid "" "Run this command to declare your contract using the default Starknet\n" "Sequencer’s Gateway:" -msgstr "" +msgstr "Ejecute este comando para declarar su contrato utilizando la puerta de enlace predeterminada del secuenciador Starknet:" #: src/ch02-02-compile-deploy-interact.md:365 msgid "" @@ -1987,13 +2574,16 @@ msgid "" " starkli declare target/dev/contracts_Ownable.sierra.json\n" "```" msgstr "" +"```bash\n" +" starkli declare target/dev/contracts_Ownable.sierra.json\n" +"```" #: src/ch02-02-compile-deploy-interact.md:369 msgid "" "According to the `STARKNET_RPC` url, starkli can recognize the target\n" "blockchain network, in this case \"goerli\", so it is not necessary\n" "explicitly specify it." -msgstr "" +msgstr "Según la URL `STARKNET_RPC`, starkli puede reconocer la red blockchain de destino, en este caso \"goerli\", por lo que no es necesario especificarla explícitamente." #: src/ch02-02-compile-deploy-interact.md:373 msgid "" @@ -2001,6 +2591,8 @@ msgid "" "Starkli to detect the right compiler version, you shouldn’t need to\n" "manually choose a version with `--network` and `--compiler-version`." msgstr "" +"A menos que esté trabajando con redes personalizadas donde a Starkli no le resulta factible detectar la versión correcta del compilador, no debería necesitar elegir " +"manualmente una versión con `--network` y `--compiler-version`." #: src/ch02-02-compile-deploy-interact.md:377 msgid "" @@ -2010,6 +2602,8 @@ msgid "" "versions accepted by mainnet, even if Scarb’s latest version is not yet\n" "compatible." msgstr "" +"Si encuentra un \"Error: Invalid contract class\", probablemente significa que la versión del compilador de Scarb no es compatible con Starkli. Siga los pasos anteriores " +"para alinear las versiones. Starkli generalmente admite versiones de compiladores aceptadas por la red principal, incluso si la última versión de Scarb aún no es compatible." #: src/ch02-02-compile-deploy-interact.md:383 msgid "" @@ -2017,6 +2611,8 @@ msgid "" "unique hash serves as the identifier for your contract class within\n" "Starknet. For example:" msgstr "" +"Después de ejecutar el comando, recibirá un hash de clase de contrato. Este hash único sirve como identificador de su clase de contrato (contract class) dentro de Starknet. " +"Por ejemplo:" #: src/ch02-02-compile-deploy-interact.md:387 msgid "" @@ -2024,6 +2620,9 @@ msgid "" " Class hash declared: 0x04c70a75f0246e572aa2e1e1ec4fffbe95fa196c60db8d5677a5c3a3b5b6a1a8\n" "```" msgstr "" +"```bash\n" +" Class hash declared: 0x04c70a75f0246e572aa2e1e1ec4fffbe95fa196c60db8d5677a5c3a3b5b6a1a8\n" +"```" #: src/ch02-02-compile-deploy-interact.md:391 msgid "" @@ -2032,12 +2631,14 @@ msgid "" "[StarkScan](https://testnet.starkscan.co/class/0x04c70a75f0246e572aa2e1e1ec4fffbe95fa196c60db8d5677a5c3a3b5b6a1a8)\n" "to verify this hash on the blockchain." msgstr "" +"Puede considerar este hash como la dirección de la clase de contrato. Utilice un explorador de bloques como [StarkScan](https://testnet.starkscan.co/" +"class/0x04c70a75f0246e572aa2e1e1ec4fffbe95fa196c60db8d5677a5c3a3b5b6a1a8) para verificar este hash en la cadena de bloques." #: src/ch02-02-compile-deploy-interact.md:396 msgid "" "If the contract class you’re attempting to declare already exists, it is\n" "ok we can continue. You’ll receive a message like:" -msgstr "" +msgstr "Si la contract class que intenta declarar ya existe, está bien, podemos continuar. Recibirás un mensaje como:" #: src/ch02-02-compile-deploy-interact.md:399 msgid "" @@ -2046,10 +2647,14 @@ msgid "" " 0x04c70a75f0246e572aa2e1e1ec4fffbe95fa196c60db8d5677a5c3a3b5b6a1a8\n" "```" msgstr "" +"```bash\n" +" Not declaring class as its already declared. Class hash:\n" +" 0x04c70a75f0246e572aa2e1e1ec4fffbe95fa196c60db8d5677a5c3a3b5b6a1a8\n" +"```" #: src/ch02-02-compile-deploy-interact.md:404 msgid "## Deploying Smart Contracts on Starknet" -msgstr "" +msgstr "## Implementación de Smart Contracts en Starknet" #: src/ch02-02-compile-deploy-interact.md:406 msgid "" @@ -2057,6 +2662,8 @@ msgid "" "testnet. This process involves executing a command that requires two\n" "main components:" msgstr "" +"Para implementar un contrato inteligente, deberá crear una instancia del mismo en la red de prueba de Starknet. Este proceso implica ejecutar un comando que requiere dos " +"componentes principales:" #: src/ch02-02-compile-deploy-interact.md:410 msgid "" @@ -2064,6 +2671,9 @@ msgid "" "\n" "2. Any constructor arguments that the contract expects." msgstr "" +"1. El class hash de tu contrato inteligente.\n" +"\n" +"2. Cualquier argumento del constructor que el contrato espera." #: src/ch02-02-compile-deploy-interact.md:414 msgid "" @@ -2071,10 +2681,12 @@ msgid "" "learn more about constructors in \\[Chapter 12 of The Cairo\n" "Book\\]()." msgstr "" +"En nuestro ejemplo, el constructor espera una dirección de _owner_. Puede obtener más información sobre los constructores en el \\[Capítulo 12 del Libro de Cairo\\]()." #: src/ch02-02-compile-deploy-interact.md:418 msgid "The command would look like this:" -msgstr "" +msgstr "El comando se vería así:" #: src/ch02-02-compile-deploy-interact.md:420 msgid "" @@ -2084,6 +2696,11 @@ msgid "" " \n" "```" msgstr "" +"```bash\n" +" starkli deploy \\\n" +" \\\n" +" \n" +"```" #: src/ch02-02-compile-deploy-interact.md:426 msgid "" @@ -2091,6 +2708,8 @@ msgid "" "inputs (as the owner address use the address of your smart wallet so you\n" "can invoke the transfer_ownership function later):" msgstr "" +"Aquí hay un ejemplo específico con un class hash real y entradas de constructor (como dirección del owner, use la dirección de su billetera inteligente para poder invocar la " +"función transfer_ownership más adelante):" #: src/ch02-02-compile-deploy-interact.md:430 msgid "" @@ -2100,12 +2719,17 @@ msgid "" " 0x02cdAb749380950e7a7c0deFf5ea8eDD716fEb3a2952aDd4E5659655077B8510\n" "```" msgstr "" +"```bash\n" +" starkli deploy \\\n" +" 0x04c70a75f0246e572aa2e1e1ec4fffbe95fa196c60db8d5677a5c3a3b5b6a1a8 \\\n" +" 0x02cdAb749380950e7a7c0deFf5ea8eDD716fEb3a2952aDd4E5659655077B8510\n" +"```" #: src/ch02-02-compile-deploy-interact.md:436 msgid "" "After executing the command and entering your password, you should see\n" "output like the following:" -msgstr "" +msgstr "Después de ejecutar el comando e ingresar su contraseña, debería ver un resultado como el siguiente:" #: src/ch02-02-compile-deploy-interact.md:439 msgid "" @@ -2117,6 +2741,13 @@ msgid "" " 0x02a83c32d4b417d3c22f665acbc10e9a1062033b9ab5b2c3358952541bc6c012\n" "```" msgstr "" +"```bash\n" +" Deploying class 0x04c70a75f0246e572aa2e1e1ec4fffbe95fa196c60db8d5677a5c3a3b5b6a1a8 with salt 0x065034b27a199cbb2a5b97b78a8a6a6c6edd027c7e398b18e5c0e5c0c65246b7...\n" +" The contract will be deployed at address 0x02a83c32d4b417d3c22f665acbc10e9a1062033b9ab5b2c3358952541bc6c012\n" +" Contract deployment transaction: 0x0743de1e233d38c4f3e9fb13f1794276f7d4bf44af9eac66e22944ad1fa85f14\n" +" Contract deployed:\n" +" 0x02a83c32d4b417d3c22f665acbc10e9a1062033b9ab5b2c3358952541bc6c012\n" +"```" #: src/ch02-02-compile-deploy-interact.md:447 msgid "" @@ -2126,10 +2757,12 @@ msgid "" "On the \"Read/Write Contract\" tab, you’ll see the contract’s external\n" "functions." msgstr "" +"El contrato ya está activo en la red de prueba de Starknet. Puede verificar su estado utilizando un explorador de bloques como [StarkScan](https://testnet.starkscan.co/" +"contract/0x02a83c32d4b417d3c22f665acbc10e9a1062033b9ab5b2c3358952541bc6c012). En la pestaña \"Read/Write Contract\", verá las funciones externas del contrato." #: src/ch02-02-compile-deploy-interact.md:453 msgid "## Interacting with the Starknet Contract" -msgstr "" +msgstr "## Interactuando con el Contrato Starknet" #: src/ch02-02-compile-deploy-interact.md:455 msgid "" @@ -2137,10 +2770,12 @@ msgid "" "methods: `call` for read-only functions and `invoke` for write functions\n" "that modify the state." msgstr "" +"Starkli permite la interacción con contratos inteligentes a través de dos métodos principales: `call` para funciones de solo lectura e invoke`para funciones de escritura " +"que modifican el estado." #: src/ch02-02-compile-deploy-interact.md:459 msgid "### Calling a Read Function" -msgstr "" +msgstr "### Llamar a una Función de Lectura" #: src/ch02-02-compile-deploy-interact.md:461 msgid "" @@ -2149,6 +2784,8 @@ msgid "" "owner of the contract is, you can use the `get_owner` function, which\n" "requires no arguments." msgstr "" +"El comando `call` le permite consultar una función de contrato inteligente sin enviar una transacción. Por ejemplo, para saber quién es el propietario actual del contrato, " +"puede utilizar la función `get_owner`, que no requiere argumentos." #: src/ch02-02-compile-deploy-interact.md:466 src/ch02-02-compile-deploy-interact.md:523 msgid "" @@ -2158,6 +2795,11 @@ msgid "" " get_owner\n" "```" msgstr "" +"```bash\n" +" starkli call \\\n" +" \\\n" +" get_owner\n" +"```" #: src/ch02-02-compile-deploy-interact.md:472 msgid "" @@ -2165,6 +2807,8 @@ msgid "" "command will return the owner’s address, which was initially set during\n" "the contract’s deployment:" msgstr "" +"Reemplace `` con la dirección de su contrato. El comando devolverá la dirección del owner, que se estableció inicialmente durante la implementación del " +"contrato:" #: src/ch02-02-compile-deploy-interact.md:476 msgid "" @@ -2174,17 +2818,22 @@ msgid "" " ]\n" "```" msgstr "" +"```bash\n" +" [\n" +" \"0x02cdab749380950e7a7c0deff5ea8edd716feb3a2952add4e5659655077b8510\"\n" +" ]\n" +"```" #: src/ch02-02-compile-deploy-interact.md:482 msgid "## Invoking a Write Function" -msgstr "" +msgstr "## Invocar una Función de Escritura" #: src/ch02-02-compile-deploy-interact.md:484 msgid "" "You can modify the contract’s state using the `invoke` command. For\n" "example, let’s transfer the contract’s ownership with the\n" "`transfer_ownership` function." -msgstr "" +msgstr "Puede modificar el estado del contrato utilizando el comando`invoke`. Por ejemplo, transfiramos la propiedad del contrato con la función `transfer_ownership`." #: src/ch02-02-compile-deploy-interact.md:488 msgid "" @@ -2195,6 +2844,12 @@ msgid "" " \n" "```" msgstr "" +"```bash\n" +" starkli invoke \\\n" +" \\\n" +" transfer_ownership \\\n" +" \n" +"```" #: src/ch02-02-compile-deploy-interact.md:495 msgid "" @@ -2204,6 +2859,8 @@ msgid "" "error will appear. Note that the initial owner was set when deploying\n" "the contract:" msgstr "" +"Reemplace `` con la dirección del contrato y `` con la dirección a la que desea transferir la propiedad. Si la billetera inteligente que " +"está utilizando no es la propietaria del contrato, aparecerá un error. Tenga en cuenta que el propietario inicial se estableció al implementar el contrato:" #: src/ch02-02-compile-deploy-interact.md:501 msgid "" @@ -2211,12 +2868,15 @@ msgid "" " Execution was reverted; failure reason: [0x43616c6c6572206973206e6f7420746865206f776e6572].\n" "```" msgstr "" +"```bash\n" +" Execution was reverted; failure reason: [0x43616c6c6572206973206e6f7420746865206f776e6572].\n" +"```" #: src/ch02-02-compile-deploy-interact.md:505 msgid "" "The failure reason is encoded as a felt. o decode it, use the starkli’s\n" "`parse-cairo-string` command." -msgstr "" +msgstr "El motivo del fracaso está codificado como un sentimiento. Para decodificarlo, use el comando `parse-cairo-string` de starkli." #: src/ch02-02-compile-deploy-interact.md:508 msgid "" @@ -2224,13 +2884,16 @@ msgid "" " starkli parse-cairo-string \n" "```" msgstr "" +"```bash\n" +" starkli parse-cairo-string \n" +"```" #: src/ch02-02-compile-deploy-interact.md:512 msgid "" "For example, if you see\n" "`0x43616c6c6572206973206e6f7420746865206f776e6572`, decoding it will\n" "yield \"Caller is not the owner.\"" -msgstr "" +msgstr "Por ejemplo, si ve `0x43616c6c6572206973206e6f7420746865206f776e6572`, al decodificarlo se obtendrá \"Caller is not the owner.\"" #: src/ch02-02-compile-deploy-interact.md:516 msgid "" @@ -2238,28 +2901,30 @@ msgid "" "StarkScan or Voyager to confirm the transaction status using the hash\n" "provided by the `invoke` command." msgstr "" +"Después de una transacción exitosa en L2, use un explorador de bloques como StarkScan o Voyager para confirmar el estado de la transacción usando el hash proporcionado por " +"el comando`invoke`." #: src/ch02-02-compile-deploy-interact.md:520 msgid "" "To verify that the ownership has successfully transferred, you can call\n" "the `get_owner` function again:" -msgstr "" +msgstr "Para verificar que la propiedad se haya transferido exitosamente, puedes volver a llamar a la función `get_owner`:" #: src/ch02-02-compile-deploy-interact.md:529 msgid "" "If the function returns the new owner’s address, the transfer was\n" "successful." -msgstr "" +msgstr "Si la función devuelve la dirección del nuevo propietario, la transferencia fue exitosa." #: src/ch02-02-compile-deploy-interact.md:532 msgid "" "Congratulations! You’ve successfully deployed and interacted with a\n" "Starknet contract." -msgstr "" +msgstr "¡Felicidades! Ha implementado e interactuado con éxito con un contrato Starknet." #: src/ch02-03-scarb.md:1 msgid "# Scarb: The Package Manager" -msgstr "" +msgstr "# Scarb: El Administrador de Paquetes" #: src/ch02-03-scarb.md:12 msgid "" @@ -2268,14 +2933,16 @@ msgid "" "with tools like Foundry. It is built by the same team that created\n" "Foundry for Starknet." msgstr "" +"Scarb es el administrador de paquetes de Cairo diseñado para proyectos de Cairo y Starknet. Maneja dependencias, compila proyectos y se integra con herramientas como " +"Foundry. Está construido por el mismo equipo que creó Foundry para Starknet." #: src/ch02-03-scarb.md:17 msgid "# Scarb Workflow" -msgstr "" +msgstr "# Scarb Workflow" #: src/ch02-03-scarb.md:19 msgid "Follow these steps to develop a Starknet contract using Scarb:" -msgstr "" +msgstr "Siga estos pasos para desarrollar un contrato Starknet usando Scarb:" #: src/ch02-03-scarb.md:21 msgid "" @@ -2289,12 +2956,19 @@ msgid "" "4. **Compile:** Execute `scarb build` to convert your contract into\n" " Sierra code." msgstr "" +"1. **Inicializar:** Utilice `scarb new` para configurar un nuevo proyecto, generando un archivo `Scarb.toml` y un `src/lib.cairo` inicial.\n" +"\n" +"2. **Código:** Agregue su código de Cairo en el directorio `src`.\n" +"\n" +"3. **Dependencias:** Agregue bibliotecas externas usando `scarb add`.\n" +"\n" +"4. **Compilar:** Ejecute `scarb build` para convertir su contrato en código Sierra." #: src/ch02-03-scarb.md:31 msgid "" "Scarb simplifies your development workflow, making it efficient and\n" "streamlined." -msgstr "" +msgstr "Scarb simplifica su flujo de trabajo de desarrollo, haciéndolo eficiente y optimizado." #: src/ch02-03-scarb.md:36 msgid "" @@ -2302,18 +2976,20 @@ msgid "" "installation, refer to the [Chapter 1 setup\n" "guide](https://book.starknet.io/chapter_1/environment_setup.html#the_scarb_package_manager_installation)." msgstr "" +"Scarb es multiplataforma y admite macOS, Linux y Windows. Para la instalación, consulte la [guía de configuración del Capítulo 1] (https://book.starknet.io/chapter_1/" +"environment_setup.html#the_scarb_package_manager_installation)." #: src/ch02-03-scarb.md:40 msgid "# Cairo Project Structure" -msgstr "" +msgstr "# Estructura del Proyecto de Cairo" #: src/ch02-03-scarb.md:42 msgid "Next, we’ll dive into the key components that make up a Cairo project." -msgstr "" +msgstr "A continuación, profundizaremos en los componentes clave que conforman un proyecto de Cairo." #: src/ch02-03-scarb.md:44 msgid "## Cairo Packages" -msgstr "" +msgstr "## Paquetes en Cairo" #: src/ch02-03-scarb.md:46 msgid "" @@ -2321,6 +2997,7 @@ msgid "" "building blocks of a Cairo project. Each package must follow several\n" "rules:" msgstr "" +"Los paquetes de Cairo, también denominados \"crates\" en algunos contextos, son los componentes básicos de un proyecto de Cairo. Cada paquete debe seguir varias reglas:" #: src/ch02-03-scarb.md:50 msgid "" @@ -2331,6 +3008,9 @@ msgid "" " the package tree. It allows you to define functions and declare used\n" " modules." msgstr "" +"- Un paquete debe incluir un archivo `Scarb.toml`, que es el archivo de manifiesto de Scarb. Contiene las dependencias de su paquete.\n" +"\n" +"- Un paquete debe incluir un archivo `src/lib.cairo`, que es la raíz del árbol de paquetes. Le permite definir funciones y declarar módulos usados." #: src/ch02-03-scarb.md:57 msgid "" @@ -2339,6 +3019,8 @@ msgid "" "`lib.cairo` file inside, a `snips` directory which in itself a package\n" "we can use, and a `Scarb.toml` file in the top-level directory." msgstr "" +"Las estructuras de los paquetes podrían parecerse al siguiente caso donde tenemos un paquete llamado `my_package`, que incluye un directorio `src` con el archivo `lib.cairo` " +"dentro, un directorio `snips` que en sí mismo es un paquete que podemos usar, y un archivo `Scarb.toml` en el directorio de nivel superior." #: src/ch02-03-scarb.md:62 msgid "" @@ -2353,10 +3035,20 @@ msgid "" " │ ├── Scarb.toml\n" " └── Scarb.toml" msgstr "" +"my_package/\n" +" ├── src/\n" +" │ ├── module1.cairo\n" +" │ ├── module2.cairo\n" +" │ └── lib.cairo\n" +" ├── snips/\n" +" │ ├── src/\n" +" │ │ ├── lib.cairo\n" +" │ ├── Scarb.toml\n" +" └── Scarb.toml" #: src/ch02-03-scarb.md:73 msgid "Within the `Scarb.toml` file, you might have:" -msgstr "" +msgstr "Dentro del archivo `Scarb.toml`, es posible que tengas:" #: src/ch02-03-scarb.md:75 msgid "" @@ -2368,6 +3060,13 @@ msgid "" " starknet = \">=2.0.1\"\n" " snips = { path = \"snips\" }" msgstr "" +"[package]\n" +" name = \"my_package\"\n" +" version = \"0.1.0\"\n" +"\n" +" [dependencies]\n" +" starknet = \">=2.0.1\"\n" +" snips = { path = \"snips\" }" #: src/ch02-03-scarb.md:83 msgid "" @@ -2376,20 +3075,22 @@ msgid "" "download it), while the `snips` dependency is located in the `snips`\n" "directory." msgstr "" +"Aquí starknet y snips son las dependencias del paquete. La dependencia `starknet` está alojada en el registro Scarb (no necesitamos descárgarlo), mientras que la dependencia " +"`snips` se encuentra en el directorio `snips`." #: src/ch02-03-scarb.md:88 msgid "# Setting Up a Project with Scarb" -msgstr "" +msgstr "# Configurar un Proyecto con Scarb" #: src/ch02-03-scarb.md:90 msgid "" "To create a new project using Scarb, navigate to your desired project\n" "directory and execute the following command:" -msgstr "" +msgstr "Para crear un nuevo proyecto usando Scarb, navegue hasta el directorio del proyecto que desee y ejecute el siguiente comando:" #: src/ch02-03-scarb.md:93 msgid "$ scarb new hello_scarb" -msgstr "" +msgstr "$ scarb new hello_scarb" #: src/ch02-03-scarb.md:95 msgid "" @@ -2397,6 +3098,8 @@ msgid "" "including a `Scarb.toml` file, a `src` directory with a `lib.cairo` file\n" "inside, and initialize a new Git repository with a `.gitignore` file." msgstr "" +"Este comando creará un nuevo directorio de proyecto llamado `hello_scarb`, que incluye un archivo `Scarb.toml`, un directorio `src` con un archivo `lib.cairo` dentro e " +"inicializará un nuevo repositorio Git con un archivo `.gitignore` ." #: src/ch02-03-scarb.md:99 msgid "" @@ -2405,12 +3108,16 @@ msgid "" " │ └── lib.cairo\n" " └── Scarb.toml" msgstr "" +"hello_scarb/\n" +" ├── src/\n" +" │ └── lib.cairo\n" +" └── Scarb.toml" #: src/ch02-03-scarb.md:104 msgid "" "Upon opening `Scarb.toml` in a text editor, you should see something\n" "similar to the code snippet below:" -msgstr "" +msgstr "Al abrir `Scarb.toml` en un editor de texto, debería ver algo similar al fragmento de código a continuación:" #: src/ch02-03-scarb.md:107 msgid "" @@ -2422,26 +3129,35 @@ msgid "" " [dependencies]\n" " # foo = { path = \"vendor/foo\" }" msgstr "" +"[package]\n" +" name = \"hello_scarb\"\n" +" version = \"0.1.0\"\n" +"\n" +" # See more keys and their definitions at https://docs.swmansion.com/scarb/docs/reference/manifest.html\n" +" [dependencies]\n" +" # foo = { path = \"vendor/foo\" }" #: src/ch02-03-scarb.md:115 msgid "# Building a Scarb Project" -msgstr "" +msgstr "# Construyendo un Proyecto Scarb" #: src/ch02-03-scarb.md:117 msgid "Clear all content in `src/lib.cairo` and replace with the following:" -msgstr "" +msgstr "Borre todo el contenido en `src/lib.cairo` y reemplácelo con lo siguiente:" #: src/ch02-03-scarb.md:119 msgid "" "// src/lib.cairo\n" " mod hello_scarb;" msgstr "" +"// src/lib.cairo\n" +" mod hello_scarb;" #: src/ch02-03-scarb.md:122 msgid "" "Next, create a new file titled `src/hello_scarb.cairo` and add the\n" "following:" -msgstr "" +msgstr "A continuación, cree un nuevo archivo titulado `src/hello_scarb.cairo` y agregue lo siguiente:" #: src/ch02-03-scarb.md:125 msgid "" @@ -2451,6 +3167,11 @@ msgid "" " 'Hello, Scarb!'.print();\n" " }" msgstr "" +"// src/hello_scarb.cairo\n" +" use debug::PrintTrait;\n" +" fn main() {\n" +" 'Hello, Scarb!'.print();\n" +" }" #: src/ch02-03-scarb.md:131 msgid "" @@ -2460,22 +3181,25 @@ msgid "" "file, please refer to the subchapter on [imports in Chapter\n" "2](https://book.starknet.io/chapter_2/imports.html)." msgstr "" +"En este caso, el archivo `lib.cairo` contiene una declaración de módulo que hace referencia a _hello_scarb_, que incluye la implementación del archivo _hello_scarb.cairo_. " +"Para obtener más información sobre módulos, importaciones y el archivo `lib.cairo`, consulte el subcapítulo sobre [importaciones en el Capítulo 2] (https://book.starknet.io/" +"chapter_2/imports.html)." #: src/ch02-03-scarb.md:137 msgid "" "Scarb mandates that your source files be located within the `src`\n" "directory." -msgstr "" +msgstr "Scarb exige que sus archivos fuente estén ubicados dentro del directorio `src`." #: src/ch02-03-scarb.md:140 msgid "" "To build (compile) your project from your `hello_scarb` directory, use\n" "the following command:" -msgstr "" +msgstr "Para construir (compilar) su proyecto desde su directorio `hello_scarb`, use el siguiente comando:" #: src/ch02-03-scarb.md:143 msgid "scarb build" -msgstr "" +msgstr "scarb build" #: src/ch02-03-scarb.md:145 msgid "" @@ -2485,26 +3209,29 @@ msgid "" "Assembly (CASM). To understand more about Sierra, check out this\n" "[article](https://medium.com/nethermind-eth/under-the-hood-of-cairo-1-0-exploring-sierra-7f32808421f5/)." msgstr "" +"Este comando compila su proyecto y produce el código Sierra en el archivo `target/dev/hello_scarb.sierra`. Sierra sirve como capa intermedia entre el Cairo de alto nivel y " +"los objetivos de compilación como Cairo Assembly (CASM). Para comprender más sobre Sierra, consulte este [artículo](https://medium.com/nethermind-eth/under-the-hood-of-" +"cairo-1-0-exploring-sierra-7f32808421f5/)." #: src/ch02-03-scarb.md:151 msgid "" "To remove the build artifacts and delete the target directory, use the\n" "`scarb clean` command." -msgstr "" +msgstr "Para eliminar los artefactos de compilación y eliminar el directorio de destino, use el comando `scarb clean`." #: src/ch02-03-scarb.md:154 msgid "## Adding Dependencies" -msgstr "" +msgstr "## Agregar Dependencias" #: src/ch02-03-scarb.md:156 msgid "" "Scarb facilitates the seamless management of dependencies for your Cairo\n" "packages. Here are two methods to add dependencies to your project:" -msgstr "" +msgstr "Scarb facilita la gestión perfecta de las dependencias de sus paquetes de Cairo. Aquí hay dos métodos para agregar dependencias a su proyecto:" #: src/ch02-03-scarb.md:159 msgid "- Edit Scarb.toml File" -msgstr "" +msgstr "- Editar Scarb.toml File" #: src/ch02-03-scarb.md:161 msgid "" @@ -2512,69 +3239,75 @@ msgid "" "`[dependencies]` section. If it doesn’t exist, add it. To include a\n" "dependency hosted on a Git repository, use the following format:" msgstr "" +"Abra el archivo Scarb.toml en el directorio de su proyecto y busque la sección `[dependencies]`. Si no existe, agréguelo. Para incluir una dependencia alojada en un " +"repositorio Git, utilice el siguiente formato:" #: src/ch02-03-scarb.md:165 msgid "" "[dependencies]\n" " alexandria_math = { git = \"https://github.com/keep-starknet-strange/alexandria.git\" }" msgstr "" +"[dependencies]\n" +" alexandria_math = { git = \"https://github.com/keep-starknet-strange/alexandria.git\" }" #: src/ch02-03-scarb.md:168 msgid "" "For consistency, it’s recommended to pin Git dependencies to specific\n" "commits. This can be done by adding the `rev` field with the commit\n" "hash:" -msgstr "" +msgstr "Para mantener la coherencia, se recomienda fijar las dependencias de Git a confirmaciones específicas. Esto se puede hacer agregando el campo `rev` con el commit hash:" #: src/ch02-03-scarb.md:172 msgid "" "[dependencies]\n" " alexandria_math = { git = \"https://github.com/keep-starknet-strange/alexandria.git\", rev = \"81bb93c\" }" msgstr "" +"[dependencies]\n" +" alexandria_math = { git = \"https://github.com/keep-starknet-strange/alexandria.git\", rev = \"81bb93c\" }" #: src/ch02-03-scarb.md:175 msgid "After adding the dependency, remember to save the file." -msgstr "" +msgstr "Después de agregar la dependencia, recuerde guardar el archivo." #: src/ch02-03-scarb.md:177 msgid "- Use the scarb add Command" -msgstr "" +msgstr "- Utilice el comando scarb add" #: src/ch02-03-scarb.md:179 msgid "" "Alternatively, you can use the `scarb add` command to add dependencies\n" "to your project. Open your terminal and execute the following command:" -msgstr "" +msgstr "Alternativamente, puedes usar el comando `scarb add` para agregar dependencias a tu proyecto. Abre tu terminal y ejecuta el siguiente comando:" #: src/ch02-03-scarb.md:182 msgid "$ scarb add alexandria_math --git https://github.com/keep-starknet-strange/alexandria.git" -msgstr "" +msgstr "$ scarb add alexandria_math --git https://github.com/keep-starknet-strange/alexandria.git" #: src/ch02-03-scarb.md:184 msgid "" "This command will add the alexandria_math dependency from the specified\n" "Git repository to your project." -msgstr "" +msgstr "Este comando agregará la dependencia alexandria_math del repositorio Git especificado a su proyecto." #: src/ch02-03-scarb.md:187 msgid "To remove a dependency, you can use the `scarb rm` command." -msgstr "" +msgstr "Para eliminar una dependencia, puede utilizar el comando `scarb rm`." #: src/ch02-03-scarb.md:189 msgid "" "Once a dependency is added, the Scarb.toml file will be automatically\n" "updated with the new dependency information." -msgstr "" +msgstr "Una vez que se agrega una dependencia, el archivo Scarb.toml se actualizará automáticamente con la nueva información de dependencia." #: src/ch02-03-scarb.md:192 msgid "## Using Dependencies in Your Code" -msgstr "" +msgstr "## Usando Dependencias en su Código" #: src/ch02-03-scarb.md:194 msgid "" "After dependencies are added to your project, you can start utilizing\n" "them in your Cairo code." -msgstr "" +msgstr "Después de agregar dependencias a su proyecto, puede comenzar a utilizarlas en su código de Cairo." #: src/ch02-03-scarb.md:197 msgid "" @@ -2582,6 +3315,8 @@ msgid "" "dependency. Now, you can import and utilize functions from the\n" "alexandria_math library in your `src/hello_scarb.cairo` file:" msgstr "" +"Por ejemplo, supongamos que ha agregado la dependencia alexandria_math. Ahora, puedes importar y utilizar funciones de la biblioteca alexandria_math en tu archivo `src/" +"hello_scarb.cairo`:" #: src/ch02-03-scarb.md:201 msgid "" @@ -2592,22 +3327,28 @@ msgid "" " fibonacci::fib(0, 1, 10)\n" " }" msgstr "" +"// src/hello_scarb.cairo\n" +" use alexandria_math::fibonacci;\n" +"\n" +" fn main() -> felt252 {\n" +" fibonacci::fib(0, 1, 10)\n" +" }" #: src/ch02-03-scarb.md:208 msgid "" "In the above example, we import the fibonacci function from the\n" "alexandria_math library and utilize it in the main function." -msgstr "" +msgstr "En el ejemplo anterior, importamos la función Fibonacci de la biblioteca alexandria_math y la utilizamos en la función principal." #: src/ch02-03-scarb.md:211 msgid "# Scarb Cheat Sheet" -msgstr "" +msgstr "# Scarb Cheat Sheet" #: src/ch02-03-scarb.md:213 msgid "" "Here’s a quick cheat sheet of some of the most commonly used Scarb\n" "commands:" -msgstr "" +msgstr "Aquí hay una hoja de referencia rápida de algunos de los comandos Scarb más utilizados:" #: src/ch02-03-scarb.md:216 msgid "" @@ -2624,6 +3365,15 @@ msgid "" "- `scarb run