¿Una transacción siempre requiere un contrato inteligente para ejecutarse?

Tuve una discusión con alguien que me explicó que cada vez que ocurre una transacción (por ejemplo, token ICO o ETH) en Ethereum, pasaría a través de un contrato inteligente o requeriría uno.

Me gustaría saber cuáles son sus mejores argumentos para demostrar que está equivocado.

Respuestas (2)

Creo que la mejor manera de verlo es definiendo los dos tipos de cuentas posibles en Ethereum:

  1. Cuentas de propiedad externa (EOA)
  2. Contratos inteligentes

Las transacciones solo pueden originarse en EOA, pueden dirigirse a otros EOA o contratos inteligentes y pueden contener tanto un valor (Ether) como una carga útil de datos.

De Mastering Ethereum - Transacciones :

Cuando construye una transacción de Ethereum que contiene valor, es el equivalente a un pago. Tales transacciones se comportan de manera diferente dependiendo de si la dirección de destino es un contrato o no.

Para las direcciones EOA, o más bien para cualquier dirección que no esté marcada como un contrato en la cadena de bloques, Ethereum registrará un cambio de estado y agregará el valor que envió al saldo de la dirección. Si la dirección no se ha visto antes, se agregará a la representación interna del estado del cliente y su saldo se inicializará al valor de su pago.

Entonces, en este caso, puede haber una transacción entre dos usuarios que no implique un contrato inteligente o lo requiera. Simplemente utiliza la máquina de estado definida por la EVM para actualizar los saldos de ambas cuentas.

Recomiendo que tanto usted como su amigo lean el capítulo que vinculé anteriormente.

EDITAR: Por cierto, mencionaste ICO y tokens. En este caso, SIEMPRE requerirá un contrato inteligente porque los tokens en Ethereum se representan como contratos inteligentes. La transacción sin "contrato inteligente" descrita anteriormente solo se aplica a las transacciones de Ether.

No.

La respuesta de @Shawn es muy buena. Una forma sencilla de explicar es que las transacciones tienen una cuenta receptora. Todas las cuentas pueden o no tener código. Una cuenta que tiene código es lo que se llama un contrato inteligente. Se puede enviar una transacción a una cuenta que no tiene ningún código, por lo que no se ejecuta ningún contrato inteligente.

Así que la respuesta actual es no. Sin embargo, en el futuro, puede cambiar y todas las cuentas tendrán código. Es un tema complejo que se puede buscar usando el término abstracción de cuenta .