Tipos de transacciones en TON Blockchain
Una transacción en TON es un proceso que implica enviar un mensaje entrante para activar un contrato inteligente, realizar las acciones correspondientes dentro del contrato, así como enviar mensajes salientes a otros participantes de la red, si así lo estipula el contrato.
Componentes Generales de una Transacción
Cada transacción contiene o hace referencia indirecta a los siguientes datos:
- La cuenta a la que pertenece la transacción.
- El tiempo lógico de la transacción.
- Uno o ningún mensaje entrante procesado por la transacción.
- La cantidad de mensajes salientes generados.
- Los mensajes salientes.
- El estado inicial de la cuenta (incluyendo su saldo).
- El estado final de la cuenta (incluyendo su saldo).
- Las comisiones totales recolectadas por los validadores.
- Una descripción detallada de la transacción, que contiene todos o algunos de los datos necesarios para validarla, incluyendo el tipo de transacción y algunos de los pasos intermedios realizados.
El tiempo lógico en la blockchain de TON se utiliza para ordenar con precisión los eventos dentro del sistema, lo cual es especialmente importante en el funcionamiento asincrónico de los contratos inteligentes. Este tiempo se asigna a cada mensaje saliente y evento creado en la transacción, lo que permite tratar la creación de cada mensaje saliente como un evento atómico, dependiente de mensajes y transacciones previas en la misma cuenta. Esto garantiza que el tiempo lógico de los mensajes creados por el mismo contrato inteligente sea estrictamente creciente, ayudando a los validadores a ordenar y procesar las transacciones de manera eficiente.
El esquema ilustra el proceso de transacción en la blockchain de TON, mostrando la interacción del contrato inteligente con los mensajes. El mensaje entrante (in msg) llega al contrato inteligente (representado por un círculo etiquetado como «A»). Al recibir el mensaje, el contrato inteligente puede realizar ciertas acciones y, dependiendo de sus resultados, generar uno o varios mensajes salientes (out msg 1 y out msg 2), que se envían a otros participantes de la red. El número «0» representa el código de salida, indicando que el contrato inteligente ha finalizado su ejecución de manera exitosa y sin errores.
En el diagrama, las transacciones son las flechas que indican la transferencia de datos desde el mensaje entrante hacia el contrato inteligente y, posteriormente, hacia los mensajes salientes.
Tipos de Transacciones
- Transacciones ordinarias
- Transacciones de almacenamiento
- Transacciones Tick
- Transacciones Tock
- Transacciones de división
- Transacciones de fusión
Transacciones Ordinarias
Pertenecen a una cuenta. Procesan un mensaje entrante con una dirección de destino, calculan el nuevo estado de la cuenta y generan varios mensajes salientes desde la fuente de la cuenta.
Fases de una Transacción Ordinaria
Una transacción regular se lleva a cabo en varias fases, que pueden considerarse como «subtransacciones» estrechamente relacionadas:
- Fase de Almacenamiento: Recolecta los pagos necesarios para almacenar el estado de la cuenta en el momento actual.
- Fase de Crédito: Se acredita a la cuenta el monto del mensaje entrante.
- Fase de Cómputo: El código del contrato inteligente se ejecuta dentro de la instancia de TVM y finaliza con un código de salida, nuevos datos persistentes y una lista de acciones.
- Fase de Acción: Si el contrato inteligente se completa con éxito, se ejecutan las acciones de la lista.
- Fase de Rebote: Si la transacción fue interrumpida y el mensaje entrante tiene activada la bandera de rebote (bounce flag), este «rebota» de vuelta a su remitente original.
Transacciones de Almacenamiento
Estas transacciones pueden ser insertadas por los validadores bajo ciertas condiciones de la red, por ejemplo, cuando una cuenta no ha sido utilizada durante mucho tiempo o su saldo es insuficiente para pagar el almacenamiento. No procesan mensajes entrantes ni invocan ningún código. Su único propósito es recolectar pagos por el almacenamiento de la cuenta, lo que afecta las estadísticas de almacenamiento y el saldo de la misma.
Si el saldo resultante de Toncoin en la cuenta cae por debajo de un cierto límite, la cuenta puede ser congelada, y su código y datos reemplazados por un hash combinado. Las transacciones de almacenamiento son muy similares a una fase de almacenamiento separada de una transacción ordinaria.
Transacciones Tick y Tock
Las transacciones tick y tock están reservadas para contratos inteligentes especiales del sistema que deben ser llamados automáticamente en cada bloque. Las transacciones tick se ejecutan al inicio de cada bloque de la masterchain, mientras que las transacciones tock se ejecutan al final.
Transacciones de División (Split)
Las transacciones de división en realidad constan de dos transacciones. Si una cuenta ξ necesita dividirse en dos cuentas, ξ y ξ' (por ejemplo, para optimizar el sharding, la escalabilidad de la red o la distribución de datos y carga):
- Primero, se ejecuta una transacción de preparación para la división, similar a una transacción tock para la cuenta ξ. Esta debe ser la última transacción de ξ en el bloque de la shardchain.
- Luego, se añade una transacción de configuración para la división en la cuenta ξ' con una referencia a la transacción de preparación correspondiente.
Transacciones de Fusión (Merge)
Las transacciones de fusión también constan de dos acciones. Si la cuenta ξ' necesita fusionarse con la cuenta ξ (por ejemplo, para optimizar el sharding, reducir la carga de la red o combinar datos de diferentes shardchains):
- Primero, se ejecuta una transacción de preparación para la fusión en la cuenta ξ', que convierte todo su estado permanente y saldo en un mensaje constructor especial con la dirección de destino ξ.
- Luego, se realiza una transacción de configuración para la fusión en la cuenta ξ, que hace referencia a la transacción de preparación correspondiente y procesa este mensaje constructor.