Comisiones de Transacciones en Scroll
Vista General
Las comisiones de Scroll son notablemente menores a las de su capa de soporte. Para usuarios y desarrolladores, las comisiones por transacción en Scroll parecen funcionar de forma similar a las de la mainnet de Ethereum, y las herramientas, wallets y código existentes probablemente funcionarán como si lo fueran. Sin embargo, la comisión por transacción que se muestra en la billetera no es la imagen completa, a menos que el software conozca específicamente los cálculos de comisiones de Scroll.
Debido al diseño de los rollups L2, los costos de transacción dependen de los costos de la L1. Para aprovechar la seguridad de Ethereum, Scroll debe tener en cuenta el costo de los datos de las transacciones y las pruebas que deben almacenarse y verificarse en la L1.
Para lograr esto, Scroll introduce algunas nuevas dimensiones en el cálculo de la comisión de transacción que no existen en Ethereum. El costo final de una transacción se construye a partir de varias partes:
- Comisión de L2
- Calculada de la misma manera que en la L1, igual a
gas_price * gas_used
.
- Calculada de la misma manera que en la L1, igual a
- Comisión de L1
- Esta comisión adicional cubre el envío de datos a L1 para la disponibilidad de datos. Las transacciones iniciadas en el L1 no pagan esta comisión.
- Se calcula en función del tamaño de los datos de llamada de la transacción.
- El ETH se deduce automáticamente del saldo del usuario en Scroll para el pago de comisión
En un plano general, la comisión de L2 es el costo de ejecutar su transacción en el secuenciador L2, y la comisión de L1 es el costo de guardar esa transacción en L1.
En resumen, totalTxFee = l2Fee + l1Fee
, todo ello denominado en ETH, el token de gas nativo de la red Scroll.
Comisiones de L2
Las transacciones en Scroll, como en Ethereum, deben pagar el costo de ejecutar sus cálculos y almacenar los datos que producen.
Cálculo de la comisión de ejecución
La comisión de ejecución de L2 es sencilla de calcular:
l2TransactionExecutionFee = l2TransactionGasUsed * l2TransactionGasPrice
La comisión total depende de lo que haga la transacción (l2TransactionGasUsed
), así como de las condiciones actuales del mercado (l2TransactionGasPrice
). Los usuarios fijan el precio del gas, y el “gas utilizado” se evalúa llamando al endpoint estimateGas
en un nodo Scroll.
En otras palabras, la comisión de ejecución se calcula exactamente igual que antes de EIP1559 Ethereum.
Comisiones de L1
La calldata de cada transacción deben confirmarse en Ethereum, lo que conlleva una comisión adicional por transacción, denominada “comisión de L1”. De lo contrario, no se podría reconstruir Scroll a partir únicamente de datos de L1.
Las transacciones no se guardan de 1 en 1, sino en lotes de bloques (y bloques de transacciones). El costo de una transacción individual se calcula en función de los bytes ceros y no ceros de su payload.
Estimación de la Comisión de Datos de L1
Scroll tiene un L1GasPriceOracle
pre-lanzado, accesible en Scroll y Scroll Sepolia en (0x5300000000000000000000000000000000000000000000000002
). Proporciona un método getL1Fee
para estimar la comisión de datos L1 para la raw data de una transacción dada.
function getL1Fee(bytes memory _data) external view override returns (uint256);
Cálculo de la Comisión de Datos en L1 con el Gas Oracle
Como ya se ha mencionado, el L1GasPriceOracle
se utiliza para estimar la comisión en L1 dados la raw data de la transacción. Se trata de un push oracle, actualizado por un relayer ejecutado por Scroll.
La tarifa de datos se basa en múltiples factores:
- Los bytes que son
ceros
yno ceros
de una transacción codificada RLP con Firma l1BaseFee
- Comisión base actual en el L1overhead
- Sobrecarga de gas adicional de una transacción de compromiso de datosscalingFactor
- Factor de escala utilizado para tener en cuenta los picos de precios.PRECISION
- Constante utilizada para escalar la comisión final
Para calcular la comisión por datos L1 se realizan los siguientes pasos:
-
Se leen tres campos
l1BaseFee
,overhead
,scalar
del contratoL1GasPriceOracle
. Los slots para estos campos en el contrato son:Campo Slot l1BaseFee 1 overhead 2 scalar 3 -
Se cuenta el número de bytes cero y bytes no cero de la transacción.
-
Se Calcula la comisión de datos de L1, dados
TX_DATA_ZERO_GAS = 4
yTX_DATA_NON_ZERO_GAS = 16
1 yPRECISION = 1e9
:l1Gas = zeros * TX_DATA_ZERO_GAS + (nonzeros + 4) * TX_DATA_NON_ZERO_GASl1GasFee = ((l1Gas + overhead) * l1BaseFee * scalar) / PRECISIONReservamos 4 bytes adicionales en la sección de bytes no-ceros para guardar el número de bytes en la transacción codificada con RLP.
API de L1GasPriceOracle
overhead
function overhead() external view returns (uint256);
Devuelve el exceso de comisión de L1 actual
scalar
function scalar() external view returns (uint256);
Devuelve el escalar de comisión de L1 actual
l1BaseFee
function l1BaseFee() external view returns (uint256);
Devuelve la última comisión base de L1 conocida
getL1Fee
function getL1Fee(bytes memory _data) external view returns (uint256);
Calcula la parte de la comisión de L1 en función del tamaño de la transacción de entrada codificada en RLP, la comisión base L1 actual y los distintos parámetros dinámicos.
Devuelve: La comisión de L1 que debe pagarse por la transacción
Parámetro | Descripción |
---|---|
data | Transacción firmada totalmente codificada en RLP para obtener la comisión de L1. |
getL1GasUsed
function getL1GasUsed(bytes memory data) external view returns (uint256);
Calcula la cantidad de gas de L1 utilizado para una transacción. Añade el exceso que representa la sobrecarga de gas por transacción de publicar la transacción y las state roots en L1. Añade 74 bytes de relleno para tener en cuenta el hecho de que la entrada no tiene una firma.
Devuelve: Cantidad de gas de L1 utilizado para publicar la transacción.
Parámetro | Descripción |
---|---|
data | Transacción firmada totalmente codificada en RLP para obtener la comisión L1. |
Roadmap Futuro
En la actualidad, el cálculo necesario para la generación de pruebas es completado y financiado por Scroll y varios socios.
A medida que la red de probadores se descentralice, será necesario incorporar incentivos a la generación de pruebas en el protocolo para que el sistema sea sostenible y escalable.
Esperamos que el costo final del gas incluya el costo de esta generación de pruebas. Con una mayor optimización del protocolo, este costo para el usuario debería ser mínimo, ya que cada prueba cubre muchas transacciones.