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.
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
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.
Sí.
jesús
Sí.
Sí.
CJ42