CursosEmpresasBlogLiveConfPrecios

Manejo de dependencias y librerías

Clase 16 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
    Luis Dotto

    Luis Dotto

    student•
    hace 4 años

    Fijate que para importar lo que hace es traer el directorio de Github, usuario/carpetas/archivo.

    "@openzeppelin/contracts/utils/math/SafeMath.sol"

      Adolfo Sebastián Jara Gavilanes

      Adolfo Sebastián Jara Gavilanes

      student•
      hace 4 años

      Excelente aclaración

      Carlos Rodríguez

      Carlos Rodríguez

      student•
      hace 3 años

      Tu aporte es genial, gracias por compartir ese punto de vista.

    Luis von Rickenbach

    Luis von Rickenbach

    student•
    hace 4 años

    Muy bueno, no sabia que se podía trabajar con librerías importándolas directamente desde el contrato en Solidity 👌

    Edgar Oswaldo Vargas Jara

    Edgar Oswaldo Vargas Jara

    student•
    hace 4 años

    Tener en cuenta el uso de Mayusculas

    Traté de escribir @OpenZeppelin (O y Z en Mayuscula) y al querer compilar me lanzó error

      Carlos Rodríguez

      Carlos Rodríguez

      student•
      hace 3 años

      Buen aporte, nos has evitado muchos errores.

    Felix Anibal Garcia Ramirez

    Felix Anibal Garcia Ramirez

    student•
    hace 4 años

    Manejo de dependencias y librerías

    Importar una dependencia

    • Con la sentencia "import" podemos hacer referencia a un contrato que esté definido en el mismo ámbito en el que estemos trabajando.
    • También podemos importar contratos que se encuentren en un repositorio o en un paquete como npm.
    • Además de contratos podemos importar librerías que son similares a los contratos, pero no contienen estado y solo brindan utilidad.
    // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; contract Importacion { function sumarNumeros(uint numero1, uint numero2) public pure returns (uint) { return SafeMath.add(numero1,numero2); } }

    En el el caso de estar desarrollado tendríamos que tener instalado openzeppelin por medio de npm.

    En el caso de estar desarrollando en remix ya tenemos acceso a openzeppelin y podemos importarlo directamente sin mayor problema.

    En remix, cuidado al momento de hacer deploy y las referencias, el deploy siempre buscara lo primero que encuentre en las referencias, para hacer deploy de nuestro contrato debemos seleccionarlo

    Adán Díaz González Mondragón

    Adán Díaz González Mondragón

    student•
    hace 4 años

    ¿Se puede correr el riesgo de alguna libreria que maliciosamente este programada para robar Ether?

      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 4 años

      Hola Adán, la posibilidad existe, por eso hay que ser precavidos con el código que se incluye. Por eso recomiendo que utilicen librerías de código abierto, de manera que puedan chequear previamente el código para ver que no haya nada peligroso y sospechoso.

    Kevin Fiorentino

    Kevin Fiorentino

    student•
    hace 4 años

    Importar librerías, lógicamente, aumentará el Gas que nuestro contrato necesita. Hay que cerciorarse de lo que las funciones desarrolladas por terceros hacen realmente para evaluar utilizarlas o no.

      Carlos Rodríguez

      Carlos Rodríguez

      student•
      hace 3 años

      Totalmente cierto, gracias por dejarlo claro @Kevin :hand:

    Jimmy Buriticá Londoño

    Jimmy Buriticá Londoño

    student•
    hace 4 años
    // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; contract Importacion { function sumarNumeros(uint numero1, uint numero2) public pure returns (uint) { return SafeMath.add(numero1,numero2); } }
    Andrés Muñoz

    Andrés Muñoz

    student•
    hace 4 años

    No es recomendable que un contracto o librería importado juegue con el estado, pero me pregunto si es posible si importo un contracto este puede estar modificando el estado de mi contrato derivado ?

      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 4 años

      No sería lo más aconsejable pero se puede. Es posible cometer errores y modificar variables del almacenamiento sin querer, por eso no se recomienda. Puedes profundizar en este tema con este enlace: https://ethereum.stackexchange.com/questions/92497/how-can-library-change-state

    RENNY DE JESÚS PETIT JAIMES

    RENNY DE JESÚS PETIT JAIMES

    student•
    hace 3 años

    Hola, normalmente en npm nos crea una carpeta node_modules y lo trabajamos por versión. Sin embargo, aquí observo que se trae directamente de repositorio mi pregunta es: ¿Si la dependencia cambia o se actualiza dañará mi contrato?, ¿si borran el repositorio que pasará con mi contrato?

      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 3 años

      Hola Renny, en Remix trae la última versión desde npm, sin embargo cuando lo trabajas en local con truffle o hardhat ahí sí puedes fijarle la versión al paquete y estar seguro de estar usando una versión sin problemas

    Leonardo Jose Jimenez Ortiz

    Leonardo Jose Jimenez Ortiz

    student•
    hace 3 años

    que es npm ?, a que se refiere el profe con nmp ???

      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 3 años

      Hola Leonardo, npm es "node package manager", es el administrador de paquetes (librerias) de node.js

      Te dejo el link para que lo veas en profundidad: https://www.npmjs.com/

    William De la Cruz

    William De la Cruz

    student•
    hace 4 años

    Como podemos hacer un import de una librería local?

      Nilson Diaz

      Nilson Diaz

      student•
      hace 4 años

      Hey ! De la misma manera , solo que ahora pues la sintaxis sera la de directorios con el punto y el slash, por ejemplo

      //Esta en el mismo directorio import "./MyLibrary.sol"; //En otro directorio dentro de este import "./OtroDirectorio/MyLibrary.sol"; //Un directorio afuera import "../MyLibrary.sol";
      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 4 años

      Excelente aporte Nilson !

    Juan Ignacio Rios

    Juan Ignacio Rios

    student•
    hace 4 años

    Buenas Sebastian. Una pregunta. El uso de librerias, genera un aumento de GAS por cierto procesamiento de computo en nuestro contrato? Si bien aca utilizamos solo una funcion de la libreria, que pasa si nuestro contrato es mas complejo y tenemos varios imports con llamadas a ciertas funciones? La logica me dice que se sumaran los gastos de cada funcion utilizada.

      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 4 años

      Hola Juan Ignacio, utilizar código de una librería sería como tener el mismo código escrito en tu contrato, con la diferencia claramente que no tienes que invertir tiempo en pensar y escribir esa solución y que además ya está optimizada. Dicho esto, el GAS va a depender de lo complejas que sean las operaciones que ejecuten las librerías, pero también piensa que si no utilizas la librería y quieres resolver el mismo problema con tu propio código probablemente termines gastando más.

    Alejandro Chavez

    Alejandro Chavez

    student•
    hace 3 años

    Excelente contenido Prof. Sebastian. Mi pregunta sería ¿para hacer transacciones a través del Smart Contract es necesario que la persona A transfiera al contrato y desde el contrato a la persona B? Es lo que entiendo. ¿Hay alguna manera de hacerlo directo de la persona A a la persona B?

      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 3 años

      Hola Alejandro, lo que dices es correcto siempre y cuando utilices a un contrato como "intermediario" para el pago. El usuario A le da los fondos al contrato y luego el contrato le hace el pago a B. La otra manera es que A le transfiera directamente a B sin un contrato inteligente mediante una transferencia. En ese caso lo que deberías plantear es si necesitas o no un contrato, por ejemplo si hay reglas para que el pago se ejecute

    Leonardo Jose Jimenez Ortiz

    Leonardo Jose Jimenez Ortiz

    student•
    hace 3 años

    la referencia SafeMath.add( ) que agregaste en el return, veo que dentro de los paterentesis le quitaste el signo mas + y pusiste una coma para que fueran dos parametros, mi pregunta es, la libreria "SafeMath.add( )" aparte de solucionar el overflow tambien suma las cantidades que se le pasen por parametro?, otra pregunta, porque se le puso ".add " si en la libreria veo que tiene es la function tryAdd, no deberia ser "SafeMath.tryAdd( )" ?

      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 3 años

      Hola Leonardo, es correcto, la función calcula la suma además de controlar el overflow/underflow. Respecto a qué función utilizar, "tryAdd" devuelve un booleano si hay overflow, y "add" revierte, esa es la diferencia.

    Victor Del Carpio

    Victor Del Carpio

    company_admin•
    hace 4 años

    Como se identifica si una libreria es de codigo abierto y la puedo usar en mis contratos?

      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 4 años

      Hola Victor, mi recomendación es que primero busques la librería en un repositorio de código abierto como Github, y recién ahí la agregues a tu código. En caso de utilizar paquetes de npm el contrato se descarga en tu entorno local y puedes chequear el código para corroborar que sea el mismo que está almacenado en el repositorio.

    Andres Omar Carreon Diaz

    Andres Omar Carreon Diaz

    student•
    hace 4 años

    Yo estoy usando la IERC721Receiver.sol para el manejo de NFTs, alguien sabe alguna forma para obtener el address del contrato que creó un NFT?

      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 4 años

      Hola Andrés, es posible saberlo si encuentras la transacción donde se creó el mismo. Por ejemplo en Etherscan, si entras a ver el detalle de un ERC721 te dice quien es el "creator". Por ejemplo: https://etherscan.io/address/0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85

      En caso de querer saberlo desde dentro del contrato, deberías almacenar la dirección del creador en el constructor.

    Juan David Verano Valencia

    Juan David Verano Valencia

    student•
    hace 2 años

    En el curso de prework para desarrollo de aplicaciones en blockchain podemos encontrar una clase referente a OpenZeppelin: https://platzi.com/clases/6438-prework-ethereum/59462-openzeppelin-contracts/

    Carlos Rodríguez

    Carlos Rodríguez

    student•
    hace 3 años

    OpenZeppelin es una empresa sumamente confiable que se mantiene en constante auditoría, los invito a investigar más acerca de ella para que conozcan sus grandiosos aportes a la industria.

    Abidan Triguero Calle

    Abidan Triguero Calle

    student•
    hace 3 años

    RESUMEN CLASE 16: MANEJO DE DEPENDENCIAS Y LIBRERIAS

    I.- IMPORTAR UNA DEPENDENCIA

    • Con la sentencia “import” podemos hacer referencia a un contrato que esté definido en el mismo ámbito en el que estemos trabajando.

    • También podemos importar contratos que se encuentren en un repositorio o en un paquete como npm.

    • Además de contratos podemos importar librerías que son similares a los contratos, pero no contienen estado y solo brindan utilidad.

    REMIX:

    Clase 16 Imagen1 ManejoDependenciasLibrerias.png

    Importacion.sol

    // SPDX-License-Identifier: GLP-3.0 pragma solidity >=0.7.0 <0.9.0; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; contract Importacion { function sumarNumeros(uint numero1, uint numero2) public pure returns (uint) { return SafeMath.add(numero1,numero2); } }
    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;

    import "@openzeppelin/contracts/utils/math/SafeMath.sol"; // hacemos referencia a un contrato SafeMath.sol! // esta ruta es el equivalente de que instaelmos el opezeppelin desde npm // y desde remix no necesitamos istalar nada adicional

    // llamamos a la libreria de openzeppelin con el import // para evitar el overflow -> problema : maximo reinicia bajand de 0 aumenta!

    contract Importacion {

    function sumarNumeros(uint numero1, uint numero2) public pure returns (uint) { // funcion de suma que no hace ningunavalidacion de overflow (al maximo posible se reinicia el contador) // return numero1 + numero2 return SafeMath.add(numero1,numero2); // utilizamos la referencia "SafeMath" de la libreria para evitar el overflow // utilizmos la funcion ".add" y definimos los parametros sumar (parametro A, parmetro B) }

    }

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