CursosEmpresasBlogLiveConfPrecios

Manejo de errores

Clase 11 de 21 • Curso de Introducción a Solidity

Clase anteriorSiguiente clase

Contenido del curso

Por qué debes aprender Solidity
  • 1
    Curso de Solidity: Fundamentos y Desarrollo en Blockchain

    Curso de Solidity: Fundamentos y Desarrollo en Blockchain

    01:24
  • 2
    Programación en Solidity para Contratos Inteligentes en Blockchain

    Programación en Solidity para Contratos Inteligentes en Blockchain

    03:23
Introducción a la programación con Solidity
  • 3
    Estructura Básica de Contratos en Solidity

    Estructura Básica de Contratos en Solidity

    10:29
  • 4
    Tipos de datos y variables en Solidity: enteros, booleanos y direcciones

    Tipos de datos y variables en Solidity: enteros, booleanos y direcciones

    12:38
  • 5
    Estructuras y Arrays en Contratos Inteligentes

    Estructuras y Arrays en Contratos Inteligentes

    09:20
  • 6
    Estructuras de datos en Solidity: Mappings y enums

    Estructuras de datos en Solidity: Mappings y enums

    11:53
  • 7
    Estructuras de control en Solidity

    Estructuras de control en Solidity

    10:48
  • 8
    Manejo de Eventos con Solidity

    Manejo de Eventos con Solidity

    05:29
Programación de Funciones en Solidity
  • 9
    Cómo implementar funciones en Solidity

    Cómo implementar funciones en Solidity

    09:13
  • 10
    Uso de Modificadores en Solidity

    Uso de Modificadores en Solidity

    08:41
  • 11
    Manejo de errores

    Manejo de errores

    07:35
Gestionando costos de gas y comisiones
  • 12
    Tipos de almacenamiento

    Tipos de almacenamiento

    05:17
  • 13
    Manejo del gas y comisiones

    Manejo del gas y comisiones

    08:37
  • 14
    Transferencias de ether desde un contrato

    Transferencias de ether desde un contrato

    09:47
  • 15
    Recibir ether desde un contrato

    Recibir ether desde un contrato

    11:50
Conceptos avanzados de Solidity
  • 16
    Manejo de dependencias y librerías

    Manejo de dependencias y librerías

    08:12
  • 17
    Uso de la herencia en Solidity

    Uso de la herencia en Solidity

    14:41
  • 18
    Polimorfismo en contratos inteligentes

    Polimorfismo en contratos inteligentes

    09:05
  • 19
    Tokens

    Tokens

    13:34
  • 20
    Application Binary Interface (ABI)

    Application Binary Interface (ABI)

    06:50
Cómo continuar mi camino desarrollando en Blockchain
  • 21
    Cómo continuar mi camino con Solidity

    Cómo continuar mi camino con Solidity

    01:58
    Ernesto García

    Ernesto García

    teacher•
    hace 4 años

    Manejo de errores

    • assert: Se utiliza para pruebas, compara dos valores
    • revert: Es un error que regresa todas las modificaciones de estado realizadas durante la ejecución de la función. Recibe por parámetro un mensaje de error
    • require: Es una variación del revert que recibe por parámetro una expresión booleana y revierte si esta expresión es falsa.

    Cabe destacar que cualquier consumo de gas ejecutado hasta el momento de un revert se debe pagar, porque el cómputo fué utilizado

      Carlos Rodríguez

      Carlos Rodríguez

      student•
      hace 3 años

      Gran aporte como siempre @Ernesto.

    Jimmy Buriticá Londoño

    Jimmy Buriticá Londoño

    student•
    hace 4 años

    Modificadores

    Usando un if

    modifier IsOwner() { if (msg.sender != owner) revert(); _; }

    Usando require()

    modifier IsOwner() { require(msg.sender == owner, "El usuario no es el creador del contrato"); _; }
      Luis Alejandro Vera Hernandez

      Luis Alejandro Vera Hernandez

      student•
      hace 4 años

      Se aprecia mejor la diferencia

    Luis Alejandro Vera Hernandez

    Luis Alejandro Vera Hernandez

    student•
    hace 4 años

    En este blog explica con ejemplos y descripciones el uso para cada uno de estos tipos de manejo de errores. Aqui una pequena parte traducida:

    Utilice require ():

    • Validar las entradas del usuario, es decir. require (entrada <20);
    • Validar la respuesta de un contrato externo, es decir. require (external.send (cantidad));
    • Validar las condiciones estatales antes de la ejecución, es decir. require (block.number> SOME_BLOCK_NUMBER) o require (balance [msg.sender]> = amount)
    • Generalmente, debe usar require con mayor frecuencia
    • Generalmente, se utilizará hacia** el comienzo** de una función.

    Utilice revert ()

    • Maneja el mismo tipo de situaciones que require (), pero con una lógica más compleja.
    • Si tiene algún flujo lógico anidado complejo if / else, puede encontrar que tiene sentido usar revert () en lugar de require ().

    Utilice assert ()

    • Compruebe si hay desbordamiento / subdesbordamiento, es decir. c = a + b; assert(c> b)
    • Compruebe invariantes, es decir. assert (este.balance> = totalSupply);
    • Validar el estado después de realizar cambios
    • Prevenir condiciones que nunca deberían ser posibles.
    • Por lo general, probablemente usará assert con menos frecuencia.
    • Generalmente, se utilizará hacia el final de una función.
    Salvatore Josue Trimarchi Pinto

    Salvatore Josue Trimarchi Pinto

    student•
    hace 4 años

    Este curso está bien estructurado, felicitaciones.

    Dedison Stiven Peña Soto

    Dedison Stiven Peña Soto

    student•
    hace 4 años

    Hola! el curso está excelente. ¿En solidity existe algo similar al try-catch? para que en caso de que exista un error se pueda definir una serie de acciones y no solo mostrar un mensaje.

      Nilson Diaz

      Nilson Diaz

      student•
      hace 4 años

      Hey ! , Si existe el bloque try-catch , y su uso esta mas enfocado a cuando intancias un contrato o haces una llamada a una funcion de un contrato externo.

      Te dejo dos links donde puedes ver su implementacion a detalle :

      • https://solidity-by-example.org/try-catch/
      • https://ethereum.stackexchange.com/questions/78562/is-it-possible-to-perform-a-try-catch-in-solidity
      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 4 años

      Como bien dice Nilson, existe y están muy buenos los enlaces compartidos, no voy a agregar mucho más que tener en cuenta que no funcionan como los usamos en los lenguajes convencionales ya que van a detectar excepciones en llamadas externas y no en código interno.

    JAVIER SANTIAGO SALGADO

    JAVIER SANTIAGO SALGADO

    student•
    hace 4 años

    En esta clase tuve un problema, Remix me dejo de guardar los archivos, ¿Le ha pasado a alguien?¿Como lo solucionaron?

      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 4 años

      Hola Javier, a veces Remix puede tener problemas con la sesión y la solución lamentablemente es borrar las cookies para el sitio y ahí se soluciona. La buena noticia es que puedes descargar tus contratos desde la portada de remix (Hay una opción de Download) y luego de descargarlos puedes borrar las cookies y así no perder tu espacio de trabajo.

    Abidan Triguero Calle

    Abidan Triguero Calle

    student•
    hace 3 años

    RESUMEN CLASE 11: MANEJO DE ERRORES

    • Assert: permite evaluar un valor. Es utilizado principalmente para las pruebas de contratos.

    • Revert: interrumpe la ejecución de una función y revierte todos los cambios realizados hasta el momento.

    • Require: evalúa una condición y en caso de no cumplirla ejecuta un revert. Puede mostrar un mensaje.

    REMIX:

    CLASE 11 Imagen1ManejoErrores.png

    Errores.sol

    // SPDX-License-Identifier: GLP-3.0 pragma solidity >=0.7.0 <0.9.0; contract Errores { address private owner; constructor() { owner = msg.sender; } function Suma(uint numero1, uint numero2) public view esOwner() returns (uint) { return numero1 + numero2; } modifier esOwner() { require(msg.sender == owner, "El usuario no es el creador del contrato"); _; } }
      Carlos Rodríguez

      Carlos Rodríguez

      student•
      hace 3 años

      Buen resumen @Abidan.

    alejandro navarro dimas

    alejandro navarro dimas

    student•
    hace 4 años

    Hola! tengo la siguiente pregunta: require acepta condicionales con varios operadores logicos ? ej: require(condicion1 AND condicion2)

      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 4 años

      Hola Alejandro, sí, es correcto. Require admite como parámetro una condición booleana pero la misma puede ser combinación de dos o más como bien mencionas. Recuerda utilizar el operador && en vez de la palabra AND.

    Jorge Fidel Zubieta Choque

    Jorge Fidel Zubieta Choque

    student•
    hace 3 años

    // SPDX-License-Identifier: GPL-3.0

    pragma solidity >=0.7.0 <0.9.0;

    contract Errores { address private owner;

    constructor() { owner = msg.sender; } function Suma(uint numero1, uint numero2) public view EsOwner() returns (uint) { return numero1 + numero2; } modifier EsOwner() { // REQUIRE -> es lo que requerimos que s cumpla -> que el sender sea el mismo == que el owner! require(msg.sender == owner, "El usuario no es el creador del contrato"); _; }

    }

      Carlos Rodríguez

      Carlos Rodríguez

      student•
      hace 3 años

      Buena esa @Jorge.

    LUIS FERNANDO ESPINOSA HERRERA

    LUIS FERNANDO ESPINOSA HERRERA

    student•
    hace 4 años

    Profesor Sebastián Leonardo Perez tengo un lio con REMIX IDE no me funcionan los triggers o el autocompletado no se como se llama realmente y eh tratado todo cookies borrar el navegador y volver a instalarlo.

    Visual Studio Code funciona https://ibb.co/9gc2thb

    REMIX IDE no funciona https://ibb.co/ZX7xfFT

    sabes a que se deba o alguno de la comunidad

      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 4 años

      Hola Luis, lamentablemente Remix no tiene un buen soporte para el autocompletado. Va "aprendiendo" en base a los contratos que ya tengas, pero no tiene una ayuda contextual completa como lo tiene Visual Studio

    David Isaac Orué Bazán

    David Isaac Orué Bazán

    student•
    hace 4 años

    Hola! Estoy realizando este contrato a modo de práctica pero el "require" no me estaría funcionando igual que al profe, porque al momento de realizar la suma con otra "account" realiza la suma y no me salta el mensaje "El usuario no es el creador del contrato". Al ser nuevo en esto tampoco veo mi error o el error facilmente. Agradezco su tiempo!

    // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; contract Errores { address private owner; constructor() { owner = msg.sender; } function Suma(uint numero1, uint numero2) public view EsOwner() returns (uint) { return numero1 + numero2; } modifier EsOwner() { require(msg.sender == owner, "El usuario no es el creador del contrato"); _; } }

    Este es el código que escribí basándome en la clase. Espero su ayuda!

      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 4 años

      El codigo está correcto, chequea que estés efectivamente utilizando una cuenta distinta a la que hizo el deploy del contrato

      David Isaac Orué Bazán

      David Isaac Orué Bazán

      student•
      hace 4 años

      Genial Profe Sebas! El error que me marcás es el que estaba teniendo! Muchas gracias por tu tiempo! Genial las clases!

    Charl Barrera

    Charl Barrera

    student•
    hace 4 años

    El constructor solo se inicializa cuando se hace el deploy? Quiere decir que los contract solo se instancian 1 vez? y cada vez que un usuario utiliza el programa realmente esta utilizando esa misma instancia? si NO es así, como esta funcionando la validación del modifier? "msg.sender == owner"

      Omar Francisco Herrera Ortiz

      Omar Francisco Herrera Ortiz

      student•
      hace 4 años

      Así es como funciona, el valor del owner se guarda una única vez

    Paleo Paleo

    Paleo Paleo

    student•
    hace 4 años

    HOLA COMO ESTAS QUISIERA SABER A QUE TE REFERIS CUANDO DECIS QUE VA A TENER UN COSTO, LO REPETISTE EN MODULOSN ANTERIORES TMB. GRACIAS HASTA LUEGO

      David Santiago Puerta Betancur

      David Santiago Puerta Betancur

      student•
      hace 4 años

      Tal vez se pude referir a que al publicar o realizar acciones de los smart contracts, estos requieren un coste para poderse integrar a la red de etherium.

      Agostina Yakoby Moris

      Agostina Yakoby Moris

      student•
      hace 4 años

      Como va, es como dice David. Cada operación que hagamos sobre la red real de ethereum tiene un costo. Ese costo es el GAS. Y el gas se paga con WEI (que es una fracción de ethers. Es decir, sale dinero real).

    Jesus M Cocaño Diaz

    Jesus M Cocaño Diaz

    student•
    hace 4 años

    Por lo que eh entendido, el require es mejor que el revert pero ¿Hay algunos usos en especifico donde sea mejor revert?

      Nilson Diaz

      Nilson Diaz

      student•
      hace 4 años

      Hey ! pues la verdad no le veo muchas ocasiones mas que cuando tengas muchas validaciones con if/else anidados (unos dentro de otros) ahi pues revert podria resultar conveniente

      Te comparto un articulo donde se explica bien cada uno --> Revert, Assert, and Require in Solidity

      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 4 años

      Sería muy raro utilizar un revert a secas salvo cuando se quiere interrumpir intencionadamente el flujo de una función. El require es siempre una mejor opción ya que podemos evaluar una condición antes de revertir

    Carlos Rodríguez

    Carlos Rodríguez

    student•
    hace 3 años

    Esta clase fue super importante, de verdad, el manejo de errores es esencial en los contratos inteligentes. Tomen nota, apliquen las recomendaciones del teacher y sean MUY descriptivos.

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads