Artículo del Blog
Autor
Marta Lokhava
Fecha de publicación
Envío de transacción
TL;DR
Estamos proponiendo una actualización a stellar-core para permitir 1 transacción por cuenta fuente por libro mayor. Esto significa que si un nodo Stellar está procesando actualmente una transacción de la cuenta A, cualquier nueva transacción de A será rechazada, y necesitará ser reenviada más tarde. “Procesando” se refiere al periodo de tiempo entre que una transacción entra en la cola de transacciones y se aplica al libro mayor o se descarta. Core aceptará nuevas transacciones subsiguientes tan pronto como la transacción anterior sea confirmada o descartada debido a precios por sobrecarga.
Los usuarios no deberían ver ningún impacto en la funcionalidad de aumento de tarifa. Es decir, si una transacción de aumento de tarifa llega con la misma o diferente fuente de tarifa y la transacción interna ya está presente en la cola de transacciones, la nueva transacción no será rechazada, y en su lugar reemplazará a la transacción anterior (asumiendo que el aumento de tarifa es válido, por supuesto). Además, la misma cuenta puede pagar por múltiples aumentos de tarifa por libro mayor (asumiendo que las transacciones aumentadas tienen diferentes cuentas fuente).
Los usuarios que utilizan cuentas de canal no se ven afectados, asumiendo que la misma cuenta de canal no envía múltiples transacciones por libro mayor. Además, usar cuentas de canal es nuestra solución recomendada para la escalabilidad de transacciones (más sobre esto abajo).
Este cambio introduciría algunas restricciones a la red Stellar, pero creemos que es un cambio positivo que mejorará la experiencia de interactuar con la red porque:
Varios ejemplos abajo ilustran los desafíos alrededor de escalar el rendimiento de transacciones con el mecanismo de múltiples-transacciones-por-cuenta.
Stellar-core descarta transacciones que llegan fuera de orden (con error de “número de secuencia malo”). Horizon intenta proteger contra eso reordenando las transacciones en memoria, pero hay advertencias:
*Esto no siempre es cierto, ya que a veces Horizon informa de tiempos de espera en transacciones que no son _realmente_ descartadas por la red.
El comportamiento actual hace que los resultados de envío de transacciones sean bastante impredecibles cuando la red está experimentando precios por sobrecarga* (lo que ocurre frecuentemente en la red). Específicamente, si la cuenta A envía T1..TN a la cola, mientras la red está en precios por sobrecarga, todas las nuevas transacciones estarán atascadas hasta que T1 sea incluida en el libro mayor (incluso si T2…TN tienen tarifas muy altas). Aún peor, si T1 es descartada, todas las transacciones subsiguientes tienen que ser descartadas y reenviadas. Si el usuario quiere aumentar la tarifa de algunas transacciones, necesitará aumentar la tarifa de todas las transacciones por adelantado para que los aumentos de tarifa tengan algún efecto.
*los precios por sobrecarga son un evento cuando hay más transacciones queriendo entrar en el bloque de lo que la red permite, causando que la red priorice transacciones con las tarifas más altas
Además de las razones anteriores, este cambio es necesario para apoyar de manera segura a Soroban. Las transacciones de Soroban son bastante diferentes de las transacciones actuales: son potencialmente mucho más grandes en tamaño, y usan un modelo de tarifa multidimensional. Stellar-core tiene varias características de seguridad integradas, y SDF trabaja con el ecosistema más amplio para sugerir mejoras que ayuden a asegurar que la red sea robusta y resiliente. Cambiar al límite de 1 transacción/cuenta permite propagar transacciones de Soroban de una manera que protege contra ataques de denegación de servicio.
Debido a que las mismas cuentas fuente pagan tarifas tanto para transacciones Stellar como para Soroban, y debido a limitaciones/complejidad de la implementación de stellar-core, esta solución se aplica a todas las transacciones enviadas a stellar-core.
Antes de sugerir este cambio, echamos un vistazo a datos históricos que sugieren que el número de cuentas con múltiples transacciones por libro mayor es muy bajo. Para los usuarios afectados, cuentas de canal son la solución recomendada para enviar transacciones a la red a una alta tasa porque:
El nuevo límite es necesario para que el Protocolo 20, que introduce el soporte de Soroban, funcione correctamente. Es decir, el límite necesita ser aplicado en toda la red antes de que los nodos voten para actualizar al Protocolo 20. La línea de tiempo propuesta es la siguiente:
¿Tu experiencia es diferente de lo descrito arriba? ¿Crees que este no es el cambio correcto? ¡Haznos saber! Queremos entender tu caso de uso, y ayudarte a encontrar la mejor solución.