¿Es "transferir" una transacción o una llamada/mensaje?

Me preguntaba si la función "transferir ()" es una llamada o una transacción.

Sabemos que los contratos solo envían mensajes, no transacciones.

Si un contrato similar a DAO tiene una variable y un umbral, cuando la variable alcanza el umbral, el contrato transfiere automáticamente algo de Ether a una cuenta.

Pregunta : ¿Esta transferencia de Ether (realizada mediante transferencia()) es un mensaje o una transacción?

En general, me gustaría saber cómo se describe la transferencia de Ether desde una cuenta de contrato a alguien en términos de transacción/mensaje.

Respuestas (2)

Las transacciones de Ethereum también son mensajes. La diferencia es que las transacciones son mensajes firmados, porque fueron firmados por un humano con una clave privada.

Los contratos de Ethereum crean 'mensajes sin firmar' y los humanos crean 'mensajes firmados'.

Cuando un contrato llama .send()o .transfer(), puede transferir cierta cantidad de Ether. Este es un mensaje sin firmar, pero también se denomina "transacción interna". Un ejemplo:

https://etherscan.io/tx/0x3f50e8b755fdefceb2dad2854424211c3c1f8a8b085160c5be5c46d57c2ec183#interno

En esta transacción, el propietario humano de 0xc459...llamó a una función en contrato 0xe70b...creando un mensaje firmado. Luego, el contrato requería .send()crear un mensaje sin firmar para transferir algo de Ether a 0xc459....

Los mensajes firmados se almacenan físicamente en la cadena de bloques, en los discos duros de los nodos de Ethereum. Los mensajes sin firmar no se almacenan necesariamente, están implícitos en el flujo de ejecución de una llamada de función de contrato.

En conclusión:

Los mensajes firmados son 'transacciones' y son creados por humanos.

Los mensajes sin firmar son "transacciones internas" y se crean mediante contratos mediante una llamada de función

Gracias por la respuesta, pero plantea otra pregunta: en mi ejemplo, si las transacciones internas no están incluidas en la cadena de bloques, ¿cómo se reducirá el saldo de Ether del contrato y aumentará el saldo de Ether del destinatario?
@AdrianAd, cada nodo de Ethereum que sigue la cadena de bloques desde el principio, seguirá el flujo de ejecución de cada llamada de función de contrato. Todos llegarán a la misma conclusión: que se debe realizar una transacción interna, que se debe reducir el saldo del contrato y aumentar el saldo del destinatario. Una vez actualizados los saldos, no es necesario recordar cómo se actualizaron.
¡Si gracias! Sería genial agregar algún lugar a su respuesta para otros que la lean. ¡Salud!
Me preguntaba si la transacción interna puede cambiar el estado de un contrato.
@Jesbus Si un contrato envía ether a otro contrato (u otro usuario), ¿cuál sería el campo de carga de datos? ¿Vacío?

Sí, una transacción interna (llamada de mensaje) definitivamente puede cambiar un estado de contrato. también puede especificar el límite de gas agregando .gas() después del nombre de la función.