El despliegue de ejecuciones de transacciones está limitado por el block gas limit
cambio 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.
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_estimateGas
pueden ser computacionalmente pesadas, por lo que los mineros generalmente no determinan el gas real que consumirá cada tx. En cambio, calculangasPrice * gasLimit
para 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 gasPrice
que tiene 10 000 000 gasLimit
. Se selecciona y se agrega a un bloque. Dado que consume todo el contenido gasLimit
de 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.
¿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:
¿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.
alper
gasPrice
que 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)gasLimit
también para transacciones recién seleccionadas) hasta que la cantidad de gas consumido de las transacciones ajustadas sea cercana a 10,000,000 (actualgasLimit
).Rob Hitchens
Rob Hitchens
daniel coffman
Rob Hitchens