Ethereum es una plataforma descentralizada que sirve como base para contratos inteligentes: aplicaciones que funcionan exactamente de acuerdo con su código de programa, sin la menor probabilidad de tiempo de inactividad, censura, interferencia de estafadores o agentes de terceros.
- Ethereum.org
A los desarrolladores nos encanta creer en un nivel de consenso que se compromete a resolver todos los problemas complejos de los sistemas distribuidos, lo que nos permite escribir aplicaciones. Los mineros viven en un nivel de consenso, haciendo sus asuntos mineros. Los desarrolladores se sientan a nivel de aplicación y escriben contratos inteligentes, programas que funcionan dentro de la máquina virtual Ethereum (EVM). Nuestras aplicaciones descentralizadas interactúan con la computadora, confiando en su integridad y seguridad.
Sabemos que EVM funciona por consenso, y no necesitamos pensar en este mecanismo mientras funcione. No pensamos en los mineros, porque al final, no hay necesidad de comprender el principio de funcionamiento de los semiconductores o las características de diseño de los microchips de las computadoras modernas. Pero, por desgracia, esta separación conveniente y predecible entre niveles no es más que una ilusión. La ilusión a nivel de consenso que nos ayuda a olvidar que los mineros no son nuestros amigos.
En la práctica, la transición de los contratos al consenso es un fenómeno mucho menos suave y no tan sencillo como se cree comúnmente. La creación de bloques afecta el estado de EVM, que a su vez afecta los desafíos de los contratos inteligentes y, como resultado, afecta el funcionamiento de las aplicaciones descentralizadas y sus usuarios. Cuanto más lentos sean los bloques, más lentas serán las aplicaciones descentralizadas. Cuanto más rápido sean los bloques, más rápidas serán las aplicaciones. Los bloques vacíos hacen que las aplicaciones dejen de funcionar.
De vez en cuando, un nivel de consenso interfiere inadvertidamente con aplicaciones descentralizadas. Pero puede haber casos en los que representantes de este nivel puedan intervenir intencionalmente. Los mineros controlan el nivel de consenso. Trabajan por dinero y, por lo tanto, mantendrán el nivel de aplicación solo mientras les genere ganancias. Si pueden ganar más dinero al interferir en el nivel de la aplicación, eventualmente comenzarán a hacerlo.
Caminadora de mineros
Los mineros no son tus amigos. Sin embargo, no enemigos. No quieren hacerte daño, simplemente no pueden evitarlo. Estos son los requisitos de la Prueba de trabajo. Los mineros tienen que participar en una competencia feroz por el derecho a recibir un margen muy pequeño. Están atrapados en la cinta de los mineros, donde los corredores más rápidos marcan el ritmo.

Cada vez que logran inventar otra forma de acelerar o reducir el costo de calcular hash, la complejidad aumenta. Con su crecimiento, cada hash individual se vuelve cada vez más importante para mí. Su tasa de hash puede permanecer sin cambios, pero gradualmente comienza a recibir cada vez menos. En este sentido, la Prueba de trabajo obliga a los mineros a reinvertir constantemente las ganancias. Solo obtienen ganancias a través del gasto constante, la optimización y el mantenimiento de la competitividad. Aquellos de ellos que no pueden competir
salen de la carrera .

Si su margen es del 1%, una disminución del 1% en los ingresos le roba beneficios. Si el hashrate del minero se vuelve al menos un poco menor que la norma actual, va a la zaga del resto de sus colegas. Por otro lado, un aumento del 1% en los ingresos conduce a una duplicación de las ganancias. Incluso un pequeño margen de eficiencia le permite al minero obtener mucho más dinero para reinvertir en equipo. Y la separación de dichos participantes aumenta cada vez más, como resultado de lo cual los competidores menos exitosos ya no pueden oponerse a ellos. La prueba de trabajo provoca que los mineros busquen pequeños beneficios, mejoren todos los aspectos del proceso y lo usen para sacar a los competidores de la cinta.
Hay dos formas de mejorar la rentabilidad de la minería: aumentar la rentabilidad o reducir los costos. La ganancia se compone de recompensas por bloques aprobados y comisiones por transacciones incluidas en ellos. Los costos surgen de la necesidad de pagar la electricidad, el equipo, los salarios de los empleados, el alquiler de oficinas y similares.

Los mineros actualmente están compitiendo debido a mejoras importantes muy obvias, como encontrar tarifas de electricidad más bajas o mejorar el equipo. Desafortunadamente, este enfoque conduce a una disminución cada vez mayor de las ganancias en el futuro. Cada vez es más difícil para las empresas encontrar electricidad más barata. La minería con la ayuda de tarjetas gráficas se basa en la limitación del ancho de banda de la memoria, y los ASIC, a su vez, están limitados por el tamaño físico mínimo de los transistores utilizados en sus microcircuitos. Ahora, todas estas rutas de desarrollo siguen siendo relevantes, pero en un momento su potencial se agotará y los mineros se verán obligados a buscar opciones de optimización
menos obvias y
más sofisticadas .
Hay algunas formas muy efectivas y no obvias. Desafortunadamente, son perjudiciales para otros usuarios del sistema. Me gustaría centrarme en las formas en que los mineros pueden aumentar las ganancias y reducir los costos al tomar dinero de personas y sistemas que dependen del trabajo de las cadenas de bloques. Mientras lee este material, trate de no olvidar que los mineros no quieren tomar su dinero, tienen que hacerlo. La prueba de trabajo requiere que aumenten la competitividad.
Cómo pueden intervenir los mineros
Los mineros tienen muchas formas de interferir con el funcionamiento de EVM y las aplicaciones que se ejecutan en él. Dado que cada minero tiene la capacidad de controlar los bloques que genera, también puede controlar los cambios de estado en este bloque. Repasemos algunos de los métodos más simples sin profundizar demasiado en los detalles. Para cada uno de ellos, intentaremos determinar una estrategia de intervención, quién sufrirá y cómo los mineros pueden ganar dinero con ella.
Reordenar transaccionesLas transacciones se procesan en bloques. Cada bloque tiene un orden canónico de procesamiento de cambios en el estado de la transacción. Los mineros aplican cada transacción al estado EVM en orden y determinan el hash raíz del estado final ubicado en el encabezado del bloque. El minero que genera el bloque tiene control sobre el orden de las transacciones en los bloques. La capacidad de controlar el orden de las transacciones en un bloque en realidad le permite controlar el orden de los cambios de estado.

Supongamos que quiero enviar pagos a un amigo. Crearé un contrato simple con tres funciones:
deposit
,
unlock
y
retrieve
. La llamada de
deposit
transfiere fondos al almacenamiento. Cada vez que quiero enviarle dinero,
unlock 5
éteres. Mi amigo llama a la función de
retrieve
, que le envía todos los fondos que no están bloqueados con
deposit
. Si el minero ve
unlock
y
retrieve
transacciones en un bloque, puede intercambiarlas y
retrieve
se llamará antes. Llamar a
retrieve
le permitirá obtener todos los fondos gratuitos, no en fondos de almacenamiento. Después de eso, se llamará
unlock
. Como resultado, mi amigo se verá obligado a enviar la transacción de
retrieve
nuevamente, habiendo pagado la comisión nuevamente.

Al cambiar el orden de los contratos de exportación, los mineros pueden influir en los resultados de la ejecución de los contratos. Esto significa que pueden, dentro de ciertos límites, monitorear el estado del EVM. La situación se ve especialmente exacerbada por los grandes contratos públicos que rigen las interacciones entre un gran número de usuarios. Cuanto más amplio es el conjunto de transacciones disponibles para el minero, más control tiene sobre el estado final.
Los desarrolladores de contratos deben prever tales intentos de cambiar arbitrariamente el orden de las transacciones en bloques. De lo contrario, los mineros pueden provocar el pago de comisiones adicionales o causar otros daños no deseados a los usuarios de la aplicación.
Inserción de la transacción
Al formar el orden de las transacciones en un bloque, los mineros no se limitan solo a la capacidad de manipular las transacciones de otras personas. Pueden crear sus propias transacciones. Tienen un ETH. Y como todos nosotros, pueden jugar con él en el casino blockchain y comprarlo o venderlo en los mercados blockchain. Sin embargo, la capacidad de determinar el orden de procesamiento de las transacciones en algunos casos puede permitir que se conviertan en los primeros en la cola de procesamiento.
Vamos a llegar a otro contrato inteligente simple. Esta vez, Alice quiere jugar un juego de adivinanzas. Ella pone 5 éteres en un contrato. Esta cantidad se envía a la persona que nombra el número más cercano al número adivinado. Alice llama a
commit
con un hash del número, garantizando así su inmutabilidad. Todos pueden
guess
y participar en adivinanzas. Después de 2 bloqueos, Alice llama a
reveal
para que todos sepan qué número fue inventado.

Alice no puede hacer trampa, ya que esto está previsto por el contrato. Pero el minero tiene esa oportunidad. Puede esperar y llamar a su número después de ver la llamada revelada. ¡Sabrá el resultado incluso antes de la formación del bloque! Incluso si David también llama al 4, el minero puede cambiar el orden, golpeándolo así.
Cuando un usuario normal crea una transacción, la envía a los mineros para su inclusión en el bloque. El usuario debe dar su consentimiento irreversible a la transacción antes de ver el resultado de su ejecución. Los mineros, por el contrario, pueden esperar en el proceso de creación de un bloque y solo entonces decidir si deben incluir una transacción en particular. Esto significa que tienen acceso a más información que los usuarios comunes, así como el poder de cambiar el orden de las transacciones. Esto les da una gran ventaja en cualquier sistema basado en blockchain.
Siempre que los usuarios y los mineros interactúen en la cadena de bloques a través de un contrato inteligente, existe el riesgo de que los mineros inserten transacciones y cambien su orden para su propio beneficio. Como regla, esto significa que recibirán dinero, que de lo contrario debería haber ido al bolsillo de un usuario común. Los desarrolladores de contratos inteligentes deben diseñar sus sistemas para abordar esta desigualdad.
Errores forzadosLos mineros pueden aprovechar el reordenamiento y las inserciones para intervenir en los desafíos de los contratos inteligentes. A veces incluso pueden interrumpir por completo el desafío. Llamamos a estos casos errores forzados. Ocurren cuando los mineros cambian el estado a algún tipo de llamada inesperada, como resultado de lo cual falla. Pueden hacerlo insertando una transacción que afectará al estado.
Creemos un contrato inteligente simple para el mercado. Exporto
sell
para poner algunas fichas a la venta a un precio determinado. Cualquiera puede llamar a
buy
para comprar algunos de mis tokens.

En esta situación, el minero puede verificar la llamada entrante de Bob para
buy
y considerar la opción de compra de su token. Puede comprar exactamente lo que sea necesario para que Bob complete la transacción con un error. Si Bob quiere comprar 2.5 GNT, el minero puede lograr esta escasez. La transacción de Bob terminará en error, pero el minero recibirá una comisión por ello. Por lo tanto, Bob, en contra de su voluntad, pagará la compra de tokens GNT por parte del minero, sin recibir nada a cambio.
Este ataque es especialmente peligroso en versiones anteriores de Solidity. Las versiones antiguas de las palabras clave de
assert
y
throw
transferirán todo el gas adjunto al minero, lo que los llevará a recibir comisiones muy altas por la falta de trabajo. Las palabras clave más nuevas
require
y
revert
el uso de gas en función del trabajo real realizado.
Los errores forzados permiten a los mineros recibir comisiones por negarse a realizar el trabajo. Si la transacción termina con errores, el estado vuelve a su estado original. Si el minero encuentra una manera confiable de provocar llamadas erróneas, ni siquiera necesitará procesar los cambios de estado. El bloqueo ideal según la versión del minero es aquel que está bloqueado por una falla en transacciones y pagos erróneos con una transferencia de la comisión para su procesamiento, sin ningún otro cambio de estado.
Los desarrolladores de contratos inteligentes pueden prevenir parcialmente este comportamiento examinando cuidadosamente su
revert
y
require
expresiones. Si los mineros logran encontrar la forma correcta de conducir el contrato por error, podrán cobrar comisiones adicionales a sus usuarios. Regla número uno en tales casos: si una llamada se basa en un estado que puede ser cambiado por otro usuario, entonces es vulnerable a errores forzados.
CensuraAl decidir el orden de las transacciones en un bloque, los mineros también pueden ignorar selectivamente ciertas transacciones. Pueden hacer esto por razones políticas o financieras. Los usuarios generalmente no tienen garantías de que los mineros alguna vez incluyan una transacción particular en un bloque.
Digamos que Alice quiere hacer una alcancía para ella. Ella puede lanzar un contrato simple, permitiéndole retirar dinero no antes de 10 mil bloques. Alice es una buena persona y, por lo tanto, quiere asegurarse de que, en caso de muerte súbita, el dinero se envíe al menos a otra persona. Por lo tanto, se asegura de que el contrato permita a los mineros retirar dinero después de 50 mil bloques.

Cada minero individual tiene una fuerte motivación para no incluir su transacción de retiro en sus bloques. No tienen nada que perder: si ella nunca puede tomar el dinero, pueden probar suerte y obtenerla en el futuro. Además, podrá retirar dinero solo si los mineros le permiten hacerlo. Incluso si no conspiran e ignoran sus transacciones, o realizan un ataque del 51%, aún pueden negarse a aceptar colectivamente su transacción para su procesamiento.
¡Esto significa que simplemente no hay contratos para garantizar el 100% de entrega oportuna de una transacción! Tendrá que diseñar aplicaciones en vista de la posible censura impredecible de los mineros. Y dado que el contrato no puede prever su deseo de intervenir, debe prever posibles retrasos arbitrarios.
Escalada de problemas
Mientras más dinero ingrese al sistema, es más probable que los mineros quieran interferir de una forma u otra con su trabajo. A medida que crecen los intercambios, los casinos se vuelven más complejos y aumenta el valor de blockchain, también lo hace la motivación de los mineros para intervenir.
El consenso no es solo el nivel en el que se llevan a cabo nuestras aplicaciones descentralizadas. De hecho, están estrechamente entrelazados con la capa de aplicación. Cuando escribimos programas, no pensamos en las propiedades físicas del silicio, porque sabemos que no intentará tomar nuestro dinero activamente. Desafortunadamente, entre EVM y silicio hay una capa en forma de mineros, y si no se puede confiar en ellos, entonces no se puede confiar en EVM.
Los desarrolladores de Solidity deben programar una computadora que funcione en su contra. EVM como tal es un "sistema bizantino". Cualquier parte de ella que sea propensa a un resultado fallido llegará en el peor momento. Hoy, todavía estamos en una etapa muy temprana para comprender las criptomonedas, la minería y los contratos inteligentes. Ahora, los mineros no muestran un deseo activo de optimizar sus actividades a expensas de los usuarios, pero esto es solo por ahora. Ethereum crecerá y algún día, aún recordaremos esta vez como la edad de oro de las aplicaciones descentralizadas.
Los mineros no son amigos ni enemigos. Son una especie de desastre natural incontrolable que opera en nuestros sistemas de consenso. Aquellos que no aprendan a manejar este elemento finalmente se convertirán en víctimas de mineros avanzados.
