¿Cómo seleccionan las transacciones los mineros?

El despliegue de ejecuciones de transacciones está limitado por el block gas limitcambio dinámico. Si un bloque se ajusta solo a una transacción, entonces el límite de gas por transacción es, en teoría, el mismo que el límite de gas del bloque. A partir de 2020, este límite ronda los 10 millones. También hay un costo base mínimo para cada transacción de 21,000 de gas.


ingrese la descripción de la imagen aquí


De la respuesta a esta pregunta ¿Cómo se almacenan las transacciones en un bloque? @Richard Horrocks:

Sin embargo, los mineros pueden ordenar transacciones como quieran, siempre que la orden equivalga a un conjunto de transiciones de estado válidas.

[P] Por lo tanto, el orden de las transacciones se decide en función de los mineros, pero ¿cómo se deciden las transacciones que se incluirán en los bloques?

Como sé, los mineros seleccionan las transacciones más rentables en función de gasPrice * gasLimit. ¿El uso de un límite de gas muy alto de alguna manera hace que sus transacciones se ejecuten más lentamente? @iamdefinitelyahuman:

El razonamiento: los mineros buscan maximizar sus ganancias dentro de cada bloque. Las llamadas a eth_estimateGaspueden ser computacionalmente pesadas, por lo que los mineros generalmente no determinan el gas real que consumirá cada tx. En cambio, calculan gasPrice * gasLimitpara cada transacción dada y, a partir de eso, determinan el conjunto de transacciones más rentable para la minería.


=> Por ejemplo, envío una transacción con un valor muy alto gasPriceque tiene 10 000 000 gasLimit. Se selecciona y se agrega a un bloque. Dado que consume todo el contenido gasLimitde un bloque, no se incluye ninguna otra transacción.

Posteriormente, durante la ejecución, mi transacción solo consumió 21,000 de gas y la parte restante se me reembolsa. Aún quedan 9.979.000 de gas por consumir en el bloque. ¿ Puede el minero agregar dinámicamente más transacciones después de que se completen las ejecuciones de transacciones seleccionadas?

o todas las transacciones se deciden de forma estática y no se pueden actualizar una vez completadas sus ejecuciones. Si es el caso, los mineros tienden a priorizar muchos tx más pequeños sobre uno grande y los más grandes nunca se implementan.

=> ¿ Existe un algoritmo común para que los mineros decidan qué transacciones se incluirán en un bloque? Digamos, ¿se generan todas las combinaciones de transacciones pendientes para seleccionar la más rentable usando fuerza bruta o algoritmo codicioso? Dado que el tiempo es muy importante para resolver el rompecabezas primero, decidir las transacciones que se incluirán en el bloque puede consumir tiempo adicional.

Respuestas (1)

¿Cómo se deciden las transacciones que se incluirán en los bloques?

Respuesta corta

De la forma que quieran.

No es determinista y no está limitado por el protocolo.

una transacción con un gasPrice muy alto que tiene 10,000,000 gasLimit.

Trabajar solo con gasLimit sería un minero muy ineficiente debido al ejemplo que diste. Al momento de la ejecución, la transacción usó solo una cantidad muy pequeña de gas, por lo tanto, pagó solo una tarifa muy pequeña.

Desde la perspectiva del minero, no hay diferencia entre el costo "real" y el costo estimado. Esto se debe a que, de hecho, el minero determina el orden canónico de la transacción. En caso de que sea un poco críptico:

  1. Las transacciones pueden tener un costo algo impredecible debido a condiciones previas desconocidas (cuando se extraen) y lógica condicional (por ejemplo, dar vueltas más veces == más gas). Por lo tanto, los remitentes a menudo rellenan gasLimit con suficiente gasolina para cubrir el peor de los casos, sabiendo que recibirán un reembolso de todos modos.
  2. El minero está empaquetando las transacciones pendientes en un bloque propuesto en un orden determinado para que puedan ensayar la transacción y averiguar exactamente cuánto costará en ese contexto, por lo que el gas quemado es el mejor número y probablemente deberían usarlo .

¿Puede el minero agregar dinámicamente más transacciones después de que se completen las ejecuciones de transacciones seleccionadas?

Sí. Eso es lo que hacen. Están jugando Tetris con transacciones pendientes y tratando de optimizar el precio del gas * empaquetado en bloques. Todo lo que hacen es hipotético. Pueden ensayar las transacciones (costo real del gas) y empacar el bloque, pero no se finaliza nada hasta que encuentran el elusivo nonce y transmiten su bloque. No hay restricciones para reorganizar la configuración a medida que llegan nuevas transacciones y surgen nuevas oportunidades.

intuitivamente

Para ver realmente las optimizaciones y los algoritmos, considere profundizar en el código fuente de los mineros populares. No estoy seguro de que lo hagan así porque "de la forma que quieran" cubre muchas de mis preocupaciones. Una vez dicho esto ...

Si estuviera abordando ese problema, creo que seguiría un algoritmo como empacar un contenedor de envío donde quiero la máxima masa posible en un espacio finito.

Una forma posiblemente ingenua de hacerlo, pero simple, sería ordenar las cajas/transacciones por densidad/precio del gas y rellenarlas, en ese orden (descendente). Eso dejaría algunas caries.

Un bloque es un espacio unidimensional, por lo que no tenemos que preocuparnos por la forma del espacio adicional. Por lo tanto, siga metiendo el precio de gas más alto (cualquier tamaño/cualquier consumo de gas) en todo el espacio disponible y continúe hasta que no quede gasLimit para utilizar.

Habrá oportunidades para que las transacciones pequeñas y de bajo precio de gas encajen cerca del final, ya que el algoritmo buscará cualquier cosa lo suficientemente pequeña como para llenar el último espacio restante. Favorecería la transacción con el precio de gas más alto que realmente se ajuste.

Creo que la realidad es un poco más matizada ya que un minero también tiene que optimizar la búsqueda del nonce y posiblemente no debería dedicar demasiado tiempo a la reorganización a medida que llegan nuevas transacciones. A menudo me he preguntado con qué frecuencia vuelven a evaluar. De hecho, puede ser más eficiente en general centrarse principalmente en la búsqueda de la recompensa del bloque en lugar de hacer una pausa para optimizar completamente las tarifas de transacción. Además, la posibilidad de que los mineros utilicen diferentes enfoques tiene el efecto de equilibrar la forma en que la red lo hace en general. Por ejemplo, si algunos mineros ignoran transacciones grandes o pequeñas, ese sesgo se equilibra con otros algoritmos que lo abordan con otros métodos.

Como desarrollador o usuario de dApp, por lo general es suficiente comprender que gasPrice prioriza aproximadamente las transacciones, que las transacciones grandes pueden demorar algún tiempo debido a la gran parte del bloque que necesitan, y que los mineros pueden hacer lo que quieran dentro de las restricciones del protocolo. , principalmente bloque gasLimit.

Espero eso ayude.

Espero eso ayude.

Entonces, según tengo entendido, si se selecciona una transacción con un valor muy alto gasPriceque tiene 10,000,000 , que solo consume 21K de gas, más adelante se agregarán nuevas transacciones de las transacciones pendientes al monto restante del límite de gas. Y esto continúa recursivamente (desde que ocurrió el proceso de reembolso) gasLimittambién para transacciones recién seleccionadas) hasta que la cantidad de gas consumido de las transacciones ajustadas sea cercana a 10,000,000 (actual gasLimit).
Planteas un buen punto sobre una sutileza. Las tarifas que se pagan son sobre el consumo/uso, por lo que se incentiva al minero en función de lo que se quemará. Si no me equivoco, el bloque gasLimit parece gas suministrado. La mayoría de las billeteras advertirán contra el suministro de gasolina por encima del límite porque no será aceptado. Se necesitaría algo de experimentación para confirmar que realmente está prohibido en el caso de que el txn pueda funcionar por debajo del límite. mmm
Si el suministro de gas restringe el empaque como creo que es el caso, eso implica un desincentivo para procesar una transacción que consume mucho "espacio" con el suministro de gas excedente. El minero evaluaría cuánto gas se quema realmente mientras trata de empacar tanto precio de quemado * en un bloque. Su transacción de gas de 10M que no quema mucho llenaría un bloque con gas inútil mientras paga una tarifa baja.
"Considere profundizar en el código fuente de los mineros populares" ¿Son de código abierto? ¿Sabes de alguno?
Geth es. Otros harían una buena pregunta nueva ;-)