¿Por qué un mensaje vacío sigue invocando el código del contrato?

Un mensaje vacío aún invoca el código del contrato y es el mecanismo que permite a Solidity implementar una característica de una función alternativa por contrato.

Pero cuando msg.dataestá vacío, ¿por qué el código del contrato todavía necesita ejecutarse?

Si una persona que llama deja msg.datavacío, lo que significa que no quiere pasar ningún dato o llamar a ninguna función en absoluto en un contrato, ¿por qué el código del contrato todavía necesita ejecutarse?

Respuestas (2)

Para mantener el protocolo central de Ethereum simple y genérico , el protocolo tiene la regla de que un mensaje siempre ejecuta el código de una cuenta. Simple y genérico permite que el protocolo de consenso crítico sea más pequeño y disminuya el riesgo de errores de consenso.

Esto significa que no es necesario definir un detalle, como el contrato ABI de Ethereum, en el protocolo central de Ethereum. La ABI es una abstracción y las mejoras o alternativas a la ABI no tienen efecto en el protocolo Ethereum o la Máquina Virtual Ethereum, EVM. Sin la regla de que "el código de cuenta siempre se ejecuta", el propio protocolo necesitaría definir qué desencadena la ejecución del código de cuenta, o partes del código de cuenta: el protocolo se convertiría en lo opuesto a simple y genérico.

El código se ejecuta como respuesta a una transacción. Esto siempre sucede cuando hay código en la cuenta. msg.data está vacío no significa que no se deba llamar a ningún código, no existe tal "regla", solo significa que no hay entrada.