¿Qué es calldata?

¿Qué es calldata? Aprendí que hay tres tipos de recuerdos:

  1. Almacenamiento
  2. Memoria
  3. Pila

En los documentos de Ethereum, dice que los parámetros de la función son de tipo memoria por defecto.

Sin embargo, también leí un artículo que decía que los argumentos de función se almacenan en calldata.

Ahora, no sé qué es calldata, ¿alguien puede ayudarme?

¡Gracias!

en términos más simples, los datos de llamada son los datos proporcionados dentro de la llamada realizada al contrato inteligente. como ha explicado @eth, es la firma de la función y los parámetros proporcionados.

Respuestas (3)

Aquí hay un ejemplo de ¿Qué es una ABI y por qué es necesaria para interactuar con los contratos?

contract Foo {
  function baz(uint32 x, bool y) returns (bool r) { r = x > 32 || y; }
}

Si quisiéramos llamar baz()con los parámetros 69y true, pasaríamos 68 bytes en total, que se pueden descomponer en:

0xcdcd77c0: el ID del método. Esto se deriva como los primeros 4 bytes del hash Keccak-256 de la forma ASCII de la firma baz(uint32,bool). 0x00000000000000000000000000000000000000000000000000000000000000045: el primer parámetro, un valor uint32 69 rellenado a 32 bytes. (69 es 0x45 hexadecimal.) 0x00000000000000000000000000000000000000000000000000000000000000001: el segundo parámetro - booleano verdadero, rellenado a 32 bytes

Los 68 bytes son los calldata: 0xcdcd77c000000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000000000000000000000000000000000000001.

Me gustaría dejar un comentario para aquellos que, como yo, estaban confundidos al principio: los valores de relleno podrían ajustarse debido a la resolución de su pantalla, los valores son (como se explicó), por lo tanto, la concatenación de 0xcdcd77c0, 0x00... .0045 , 0x00........01

calldataes donde se almacenan los datos de las llamadas externas a las funciones.

Las funciones se pueden llamar internamente, por ejemplo, desde dentro del contrato, o externamente. Cuando la visibilidad de una función es external, solo los contratos externos pueden llamar a esa función.

Cuando ocurre una llamada externa de este tipo, los datos de esa llamada se almacenan en calldata.

Lea también aquí: Mejores prácticas `externas` vs `públicas`

Llamadas externas de funciones! Solo sé que podemos llamar a una función, pero esta terminología no la descubro.
me puedes explicar un poco
Edité la respuesta para incluir más información.

El Calldataes un espacio direccionable por bytes de solo lectura donde se guarda el parámetro de datos de una transacción o llamada. A diferencia de Stack, para usar estos datos, debe especificar un desplazamiento de bytes exacto y la cantidad de bytes que desea leer. Los códigos de operación relacionados con Calldata proporcionados por EVM son:

• CALLDATASIZE devuelve el tamaño de los datos de transacción

• CALLDATALOAD importa 32 bytes de datos de transacciones en la pila

• CALLDATACOPY copia datos de transacciones de un cierto número de bytes a la memoria

calldatase comporta casi como memory. Es un área no modificable y temporal que se puede usar para almacenar argumentos de funciones. Dado que la copia entre la memoria y el almacenamiento puede ser bastante costosa, especificar una ubicación puede ser útil para controlar el gasto de gas en ocasiones.