DelegateCall
Clase 7 de 15 • Curso de Introducción a Seguridad de Smart Contracts
Contenido del curso
Clase 7 de 15 • Curso de Introducción a Seguridad de Smart Contracts
Contenido del curso
López Agustín
Adolfo Sebastián Jara Gavilanes
Jorge Guzman Suir
Leandro Vitale
Sebastian Perez
Guillermo Leonardo Rossi
Jader Moncayo
Sergio Bryan Madrid Nuñez
Cristian Marchese
DelegateCall:
Tenemos la posibildad de llamar a contratos externos desde nuestro contrato, hacer llamadas externas por medio de la funcion call, call va a permitir realizar un parametro que a traves de la firma que tiene, va a poder localizar una funcion que esta localizada en otro contrato y ejecutarla asi como si estuviera en nuestro contrato, esto se llama llamada externa, tambien podemos enviar saldo, mintear el gas, etc.
¿Que pasa cuando hacemos este tipo de llamdas? Todo el codigo que esta alojado en el codigo externo, se aloja en un contexto separado del nuestro, es decir, va a tener sus propias variables, su propia ejecucion que no va a estar ligada al nuestro, es lo esperable si hacemos una llamada externa, queremos que se ejecute en su propio contexto y que despues nos devuelva el resultado deseado.
Existe una llamada similar a call, en sentido de estructura, por ejemplo delegatecall no permite enviar transacciones, pero si permite llamar a funciones que esta en otro contrato, y la diferencia esta llamada que hacemos al otro contrato por medio de delegatecall trabajan en el contexto del contrato original, es decir si modificamos una variable o si llamamos a una funcion, vamos a estar haciendolo sobre el contrato original, asi que tenemos que muchisimo cuidado al usar delegatecall.
Muchas gracias por el resumen!!
Genial!. Muchas gracias por la informacion.
Creo que la pregunta del examen sobre esta clase, no se aclara en la clase..
Hola Leandro, puedes mencionar qué tema es ? (sin decir la pregunta puntualmente así no adelantamos). De paso, si tienes dudas en este tema con gusto puedo ayudar :)
hace referencia a una característica de delegatecall
Delegatecall
Contexto de delegateCall Las llamadas externas con DelegateCall se ejecutan en el contexto del contrato llamado Si llamamos una función vamos a estar haciéndolo sobre el contrato original ¿Qué pasa cuando hacemos este tipo de llamadas? Todo el código del contrato externo se aloja en un contexto separado con propias variables y ejecución.
Las llamadas externas Call se ejecutan en el contexto del contrato receptor Remplazo de delegateCall es Call
Uso de delegateCall y Call
Cuando estamos usando Proxies, ¿los contratos de Open Zeppelin internamente hacen uso de esta función? ¿Tendríamos que tener ciertas consideraciones al usar este patrón o arquitectura?
Sí, los proxies de openzeppelin hacen uso de esta función pero el delegate call que ellos usan es a bajo nivel, lo usan a nivel assembly. Igual creo que este video no es del todo claro, call y delegate call, ambas son funciones validas para usar pero su funcionamiento es diferente. Solo tienes que saber cuando usar una o la otra. y ambas teniendo cuidado con la lógica asociada ya que con una pueden atacarte al contrato que llama y con el otro al contrato que es llamado. Openzeppelin en su implementación estas cosas las tienen bien pensadas y por eso se mantienen seguros.