Temas en tendencia
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
El EIP-8032 (y el EIP-2926, para el caso) vienen con un proceso de conversión. Me he dado cuenta de que este proceso está mal entendido, incluso por los desarrolladores principales. Antes del próximo ACDE, estoy escribiendo una breve explicación.
En esencia, no es más que un simple iterador, repasando cuentas y contando hojas. Cuando se han contado todas las hojas, ese recuento se añade como un campo a la cuenta. En cada bloque, el iterador avanza por N posiciones. La conversión se detiene cuando se alcanza la última posición.
Aquí, "posición" significa una cuenta o un espacio, donde el iterador pudiera "detenerse". Debido a la cantidad de datos, es importante que la iteración se detenga en un punto "seguro" y continúe en el siguiente bloque.
Veamos el siguiente ejemplo simplificado. Hay muchos menos datos en el estado que en la vida real, y el árbol es binario, pero el ejemplo es por lo demás acertado. El símbolo ∅ significa una cuenta sin almacenamiento. Si falta, entonces la cuenta tiene un árbol de almacenamiento.

Inicialmente, el iterador se establece en 0, es decir,
- posición hash de cuenta = 0
- posición hash de ranura = 0
Está representado con una flecha roja.

En este ejemplo, tomamos la zancada iteradora N = 2 (en la práctica, N > 10_000). En el bloque de horquilla, el iterador se mueve dos posiciones.
La primera posición es una cuenta sin almacenamiento, así que no se hace nada.

Aún en el bloque de bifurcación, el iterador se mueve a la segunda posición, que es una ranura (es decir, el iterador se detiene en el almacenamiento de una cuenta antes de detenerse en la cuenta propiamente dicha).
El contador de ranuras está configurado en 1, y como el iterador ha recorrido toda su zancada hacia el bloque de horquilla, se detiene.

En el siguiente bloque, el iterador vuelve a cubrir dos posiciones:
- El primero es el segundo espacio de la segunda cuenta, para el cual el contador se incrementó
- La segunda es la segunda cuenta en sí. El valor del contador se añade como un campo de cuenta, y el contador se reinicia.

En el siguiente bloque (bifurcación + 2), el iterador recorre las dos ranuras de la tercera cuenta, pero su paso se alcanza antes de que la cuenta en sí (siguiente posición) se actualice con el contador (que es 2).

En el último bloque de la conversión, a la tercera cuenta se le asigna un contador, y luego se comprueba la última cuenta por estado (que no tiene, así que no se justifica ninguna actualización).

Como no hay más cuentas, el iterador termina y la conversión se completa.

¿Qué pasa si se añade almacenamiento a la cuenta A después de que el iterador haya pasado la cuenta A?
El contador dentro de la A simplemente se aumenta.
¿Y si el almacenamiento se añade a la cuenta que se está convirtiendo?
- delante del iterador: no hay nada que hacer ya que el iterador lo contará cuando llegue
- tras el fallecimiento del iterador: almacenarlo en la cuenta, añadirlo al contador de iteradores tras finalizar la enumeración de ranuras
¿Cuándo se aplican los costes de la gasolina?
Cuando la cuenta ha sido convertida.
¿Cuánto durará la conversión?
Dependiendo de la zancada, hasta un mes. El valor se elige de modo que el cálculo añadido sea despreciable en comparación con la operación regular por bloques. 10_000 se hereda de Verkle y tardaría un mes. Los indicadores de referencia sin duda encontrarían un valor más rápido
Y eso es todo, gracias por leer hasta el final 🫶
305
Populares
Ranking
Favoritas
