CursosEmpresasBlogLiveConfPrecios

Transferencias de ether desde un contrato

Clase 14 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 min
  • 2
    Programación en Solidity para Contratos Inteligentes en Blockchain

    Programación en Solidity para Contratos Inteligentes en Blockchain

    03:23 min

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 min
  • 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 min
  • 5
    Estructuras y Arrays en Contratos Inteligentes

    Estructuras y Arrays en Contratos Inteligentes

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

    Estructuras de datos en Solidity: Mappings y enums

    11:53 min
  • 7
    Estructuras de control en Solidity

    Estructuras de control en Solidity

    10:48 min
  • 8
    Manejo de Eventos con Solidity

    Manejo de Eventos con Solidity

    05:29 min

Programación de Funciones en Solidity

  • 9
    Cómo implementar funciones en Solidity

    Cómo implementar funciones en Solidity

    09:13 min
  • 10
    Uso de Modificadores en Solidity

    Uso de Modificadores en Solidity

    08:41 min
  • 11
    Manejo de errores

    Manejo de errores

    07:35 min

Gestionando costos de gas y comisiones

  • 12
    Tipos de almacenamiento

    Tipos de almacenamiento

    05:17 min
  • 13
    Manejo del gas y comisiones

    Manejo del gas y comisiones

    08:37 min
  • 14
    Transferencias de ether desde un contrato

    Transferencias de ether desde un contrato

    Viendo ahora
  • 15
    Recibir ether desde un contrato

    Recibir ether desde un contrato

    11:50 min

Conceptos avanzados de Solidity

  • 16
    Manejo de dependencias y librerías

    Manejo de dependencias y librerías

    08:12 min
  • 17
    Uso de la herencia en Solidity

    Uso de la herencia en Solidity

    14:41 min
  • 18
    Polimorfismo en contratos inteligentes

    Polimorfismo en contratos inteligentes

    09:05 min
  • 19
    Tokens

    Tokens

    13:34 min
  • 20
    Application Binary Interface (ABI)

    Application Binary Interface (ABI)

    06:50 min

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 min
Tomar examen
    Ernesto García

    Ernesto García

    teacher•
    hace 4 años

    Transferencia de ether desde un contrato

    • send: Envía un monto a una dirección y retorna false si la transferencia no se realiza
    • transfer: Envía un monto y revierte si no se puede realizar
    • call: Esta es más complicada, pero básicamente realiza una llamada hacia una dirección. Incluso se pueden llamar funciones de otro contrato si se le pasa un address válido y la llamada dentro del parámetro data. No obstante, al ser un mensaje, puede llevar ether, y por eso se usa para envíos. Retorna el resultado de la función llamada (si es que fué el caso)
    Nahuel Brandan

    Nahuel Brandan

    student•
    hace 4 años

    Un wei es la unidad más pequeña de Ether.

    1 ETH == 10^18 WEI == 1,000,000,000,000,000,000 WEI

    Pepe Sosa

    Pepe Sosa

    student•
    hace 4 años

    No tengo el dato concreto (no he encontrado algo claro al respecto) pero el cast de la dirección en el método send, no creo que sea recomendable, tal vez dar de alta como payable en el argumento de la dirección sea lo más conveniente:

    function transferenciaPorSend( address payable _destino, uint _monto ) public returns (bool) { bool salida = _destino.send( _monto ); return salida; }

    Esto porque en otros lenguajes el cast corre el riesgo de perder datos, por ejemplo al castear un float a un int. Con el tipo de datos que maneja Solidity no sé si estemos corriendo el riesgo de castear esa dirección que podría ser (por ejemplo) de un contrato (porque la copiamos equivocadamente) y al enviarle el saldo lo vamos a perder. Bueno espero el profe nos dé más luz, eso es lo que pensé así de primeras y tal vez estoy diciendo un disparate.

    Pepe Sosa

    Pepe Sosa

    student•
    hace 4 años

    En caso de que no quieras usar el parámetro que da el warning, puedes dejar el parámetro vacío:

    function transferenciaPorCall( address _destino, uint _monto ) public returns (bool) { ( bool salida, ) = _destino.call{ value:_monto }(""); return salida; }

    En este caso no lo vamos a usar y es una forma válida de que Remix no nos dé el warning.

    Jorge Fidel Zubieta Choque

    Jorge Fidel Zubieta Choque

    student•
    hace 3 años
    Captura de Pantalla 2022-08-20 a la(s) 09.48.13.png
    Pepe Sosa

    Pepe Sosa

    student•
    hace 4 años

    ++call++ es una función de bajo nivel para interactuar con otros contratos. Es el método recomendado a usar cuando solo estás enviando ether vía una llamada a una función ++fallback++. Sin embargo, no es una forma recomendada de llamar a funciones existentes. Fuente: Solidity by example.

    Abidan Triguero Calle

    Abidan Triguero Calle

    student•
    hace 3 años

    RESUMEN CLASE 14: TRANSFERENCIA DE ETHER DESDE UN CONTRATO

    I.- FUNCIONES

    • Send: envía un monto de Ether a una dirección y retorna “false” si no se puede realizar la acción.

    • Transfer: envía un monto de Ether a una dirección e interrumpe la ejecución de la función si no se puede realizar la acción.

    • Call: envía un monto de Ether a una dirección y retorna el resultado de la operación.

    II.- DIFERENCIAS:

    • Send y transfer requieren que las direcciones sean de tipo payable.

    Call no lo requiere.

    • Send y transfer tienen un límite de gas fijo de 2300 de gas.

    Call no tiene límite de gas por defecto, pero se puede configurar.

    • Call permite llamar a funciones si la dirección especificada es un contrato.

    REMIX:

    CLASE 14 Imagen1TransferenciaDeEtherDesdeUnContrato.png

    Transferencia.sol

    // SPDX-License-Identifier: GLP-3.0 pragma solidity >=0.7.0 <0.9.0; contract Transferencia { constructor() payable { } function transferenciaPorSend(address destino, uint monto) public returns(bool) { bool salida = payable(destino).send(monto); return salida; } function transferenciaPorTransfer(address destino, uint monto) public { payable(destino).transfer(monto); } function transferenciaPorCall(address destino, uint monto) public returns (bool) { (bool salida, bytes memory respuesta) = destino.call{value:monto}(""); return salida; } }
    Sandro Jaramillo

    Sandro Jaramillo

    student•
    hace 4 años

    Cuando queremos enviar todo el saldo de nuestro contrato una forma puede ser accediendo a la propiedad "balance"

    function transferenciaPorSend(address _address) external onlyOwner returns (bool){ return payable(_address).send(address(this).balance); }
    Pepe Sosa

    Pepe Sosa

    student•
    hace 4 años

    Hola profe, he buscado la definición de la función "call" y no encuentro más que breves ejemplos del uso, pero no la definición, mi mayor duda es en el parámetro que se envía en call, en nuestro ejemplo va vacío ("") usted me podría ayudar con algún enlace?

    Muchas gracias de antemano! Saludos!

      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 4 años

      Hola Pepe, el parámetro vacío ("") indica que no se le envía ningún argumento y por lo tanto se convierte en una transferencia de ethers directa hacia la cuenta destino. Respecto a un enlace de ayuda, puedes consultar: https://solidity-by-example.org/call/ que te muestra cómo hacer la llamada con parámetros

    Edgar Oswaldo Vargas Jara

    Edgar Oswaldo Vargas Jara

    student•
    hace 4 años

    La direccion que colocamos al hacer el ejercicio es la que envía o recibe?

    Porque noto que su saldo va disminuyendo cada que ejecuto una transferencia en vez de aumentar

      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 4 años

      Hola Edgar, si es el ejercicio de transferir, la dirección que se ingresa es la que recibe. Debes considerar dos factores: 1 - El monto que ingresas está en unidad "wei", por lo tanto si pones 100, es 0,000000000000000100 ethers. 2 - Cuando realizas una transacción, debes pagar por el gas y la comisión. Por lo tanto, cada transacción que realices disminuirá el saldo de la cuenta que llame a la función.

      Tal vez sea alguno o ambos puntos los que hacen que lo veas disminuir

    Daniel Cueto

    Daniel Cueto

    student•
    hace 3 meses

    Un wei es la unidad más pequeña de medida en la blockchain de Ethereum, equivalente a 10^(-18) Ether. Se utiliza para realizar transacciones y calcular costos de gas de manera precisa en la red. Dado que las transacciones pueden tener costos muy bajos, el uso de wei permite manejar cifras pequeñas sin perder precisión. En comparación, un Ether se refiere a la cantidad más comúnmente utilizada en las transacciones, pero en el fondo, todo se traduce a wei.

    Hernando Villa

    Hernando Villa

    student•
    hace 3 años

    Si despues de un tiempo de desplegar el contrato, se queda sin saldo, hay alguna forma de hacer una recarga de saldo al contrato?

      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 3 años

      Hola Hernando, correcto, se puede simplemente enviandole una transferencia al contrato. Recuerda que los contratos poseen direcciones con el mismo formato que las direcciones de cuentas de usuario, por lo tanto pueden recibir transferencias normalmente

    Patricia Calisto Gutierrez

    Patricia Calisto Gutierrez

    student•
    hace 4 años

    No logro que me compile por las “” de la línea 21. Cómo se colocan?

      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 4 años

      Son dos comillas dobles consecutivas (""). Creo que en tu comentario, las comillas que tienes son las que se utilizan para citar frases y que tienen una leve inclinación. Tienen que ser de las comillas que no tienen inclinación. Puedes copiar y pegar las que acabo de utilizar en el comentario que son las correctas

    Jorge Fidel Zubieta Choque

    Jorge Fidel Zubieta Choque

    student•
    hace 3 años

    Porque me produce el revert? intente varias veces pero me sigue dando el mismo resultado?

    Captura de Pantalla 2022-08-21 a la(s) 09.12.12.png
      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 3 años

      Hola Jorge, fijate si el contrato desde el que estás llamando a esa función tiene saldo en Ether. Recuerda que no es el usuario el que está haciendo la transferencia sino el contrato, entonces antes de podes ejecutar esa operación debes de darle fondos al contrato.

      Jorge Fidel Zubieta Choque

      Jorge Fidel Zubieta Choque

      student•
      hace 3 años

      ya entendi! gracias era eso!

    Johan Muñoz

    Johan Muñoz

    student•
    hace 4 años

    Tengo una pequeña duda, en el curso de CrowdFunding, en la que una persona podía contribuir a un proyecto enviando, se utiliza esta funcion con .transfer

    function fundProyect(uint index) public payable sendFounds(index){ Proyect memory proyect=proyects[index]; // 0 is open && 1 is closed require(proyect.state == FundraisingState.Opened , "This project is already closed, you cant send founds"); require(msg.value> 0 , "You need to give a value greater than zero"); proyect.author.transfer(msg.value); proyect.founds += msg.value; proyects[index]=proyect; contributions[proyect.id].push(Contributtion(msg.sender, msg.value)); emit FundProyect(proyect.id, msg.value, proyect.founds); }

    Esta función cuando yo la ejecuto desde una cuenta distinta a la del creador de el proyecto y coloco 1 wei como valor, el .transfer me descuenta el valor de 1 wei (msg.value) directamente de la cuenta donde llame la función y no de el contrato como se explico en la clase, algo así como si el .transfer tomara el address from de la dirección que ejecuta la función y no de la dirección de el contrato. No se si esto sucederá por la distinta implementación de el payable, o por otro factor que desconozco.

      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 4 años

      Hola Johan, lo que está sucediendo es que al ser la función de tipo payable, tu contrato recibe los fondos efectivamente y luego en el transfer se lo envía a la dirección de proyect.author. Por lo tanto sirve como intermediario entre el usuario inicial y el usuario final que recibe. A fin de cuentas se le descuenta al usuario inicial para enviarselo al contrato y el contrato se lo da al usuario final, por lo que pareciera que lo hace directamente.

    Alejandra

    Alejandra

    student•
    hace 3 años

    ¿Esto se puede hacer con otras criptomonedas o es exclusivo con ether?

      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 3 años

      hola Alejandra, este código puntualmente muestra como transferir Ethers. Para las criptomonedas deberías ver cómo se transfieren los tokens (ERC-20 y compatibles)

    Rodrigo Ramos Xochiteotzin

    Rodrigo Ramos Xochiteotzin

    student•
    hace 3 años

    ¿La función que se le puede pasar como parámetro es un callback?

      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 3 años

      Hola Rodrigo, la función que se envía por parámetro no es un callback en sí, si no que le indicas cuál es la función por la que vas a estar ingresando los ethers. Esto siempre y cuando envíes value, si no envías value puedes usar call para hacer una llamada externa a esa función. Es decir:

      direccion.call{value:10}(abi.encodeWithSignature("prueba()")) => envía ethers al contrato entrando por la función "prueba" (debe ser payable)

      direccion.call(abi.encodeWithSignature("prueba()")) => realiza una llamada externa a prueba

    Leonardo Jose Jimenez Ortiz

    Leonardo Jose Jimenez Ortiz

    student•
    hace 3 años

    Entonces en resumen "transfer" es como un send con revert?, o no exactamente asi?, porque?...

      Sebastian Perez

      Sebastian Perez

      teacher•
      hace 3 años

      hola Leonardo, exactamente ! Es como dices. Transfer es una evolución del send, antes se usaba el send pero para dar más seguridad (por el hecho de revertir) se agregó la alternativa con transfer con la misma estructura del send.

    Paul Rodas

    Paul Rodas

    student•
    hace 3 años

    Estimados compañeros, en esta URL están disponibles mis apuntes: https://github.com/prodasl/solidity-learning/

    Espero que sean de ayuda!

    Pro Code

    Pro Code

    student•
    hace 3 años

    wei(10^18) en Ethereum es análogo a satoshi(10^8) en Bitcoin, son las unidades mínimas desde las cuales un usuario puede realizar una transacción.

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