---
title: "¿Qué es la función call de Solidity?"
description: "Aprende cómo funcionan las funciones call de Solidity"
---

# ¿Qué es la función call de Solidity?

El lenguaje de programación [Solidity](https://www.alchemy.com/overviews/solidity) se utiliza principalmente para crear smart contracts en la blockchain de Ethereum. Este artículo cubrirá todos los detalles que necesitas saber sobre qué es la función call de Solidity.

## **¿Qué es la función call de Solidity?**

La función `call`** en Solidity es una función de bajo nivel que los desarrolladores usan para interactuar con otros contratos.**

Al construir un [smart contract en Solidity](https://www.alchemy.com/overviews/solidity-smart-contract), el método `call` debe usarse cada vez que quieras [interactuar con otro contrato](https://www.alchemy.com/overviews/solidity-call-another-contract) desde tu propio contrato.

Los calls también se pueden usar para ejecutar otras funciones en el smart contract receptor, usando Ether proporcionado por quien llama para pagar la transacción. La función `call` también tiene la ventaja de devolver el estado de la transacción como un booleano, con el valor de retorno enviado como una variable.

### **¿Qué es calldata?**

`Calldata` es un tipo de almacenamiento temporal que contiene los datos especificados en los argumentos de una función. La diferencia entre este y memory, otro tipo de almacenamiento temporal, es la inmutabilidad de _calldata_: lo que se almacena dentro de `calldata` no se puede cambiar.

## **¿Cómo funciona la función call de Solidity?**

La función call de Solidity funciona tomando `calldata`, que puede ser cero en el caso de una transferencia nativa de ETH, y ejecutando ese `calldata` en el destinatario indicado, basándose en el [opcode CALL de la EVM](https://ethereum.org/en/developers/docs/evm/opcodes/) de bajo nivel.

Cuando se proporcionan los data (es decir, la función que se va a llamar en el smart contract receptor) y el gas, el método `call` puede usar estos dos elementos para ejecutar funciones dentro de smart contracts.

### **¿Cómo se usa el método call para enviar ether?**

Como una de tus [funciones de Solidity](https://www.alchemy.com/overviews/solidity-functions), puedes usar el siguiente código en tu [IDE de Solidity](https://www.alchemy.com/overviews/solidity-ide) preferido y reemplazar `address payable _to` con la dirección del destinatario.

A continuación se muestra el código que crea un contrato capaz de recibir Ether de calls.

### ¿Cuál es la diferencia entre call y delegatecall?

La diferencia entre `call` y `delegatecall` es que `delegatecall` ejecutará la función llamada como si su código formara parte por completo del smart contract que hace la llamada. En cambio, el método `call` llamará a la función tal cual es, como parte de otro smart contract. En la práctica, esto significa que la función llamada usará el storage, `msg.sender` y `msg.value` de quien hace la llamada.

### ¿Cuál es la diferencia entre call y transfer?

Los transfers tienen un límite de gas fijo y se cancelan en caso de falla. Los calls tienen un límite de gas personalizable usando `someAddress.call.value(ethAmount).gas(gasAmount)()` en lugar del call habitual, y devolverán false si la transacción falla.

El método `transfer` ya no se recomienda usar. Sin embargo, históricamente se prefería `transfer` porque usa un límite incorporado de gas, lo cual ayudaba a [prevenir exploits de reentrancy](https://www.alchemy.com/overviews/reentrancy-attack-solidity). El límite de gas inmutable del método transfer también lo hacía una mejor opción para cálculos en los que se quería establecer un límite superior de 2300 gas.

## **Cómo aprender más sobre el método call de Solidity**

Para [seguir aprendiendo sobre los calls de Solidity](https://www.alchemy.com/overviews/learn-solidity), asegura tu lugar en el curso intensivo gratuito y en línea de desarrollo en Solidity de Alchemy University. Este bootcamp asíncrono de Ethereum, de [7 semanas](https://university.alchemy.com/?a=5f566a8c97), fue rediseñado después de la adquisición por parte de Alchemy de ChainShot, la empresa líder en educación sobre Ethereum.

Si los desarrolladores son nuevos en el desarrollo en general, el [**curso intensivo de JavaScript de 3 semanas**](https://www.alchemy.com/university/courses/js) de Alchemy University es un excelente prerrequisito antes de comenzar un bootcamp de Ethereum.
