NXTER.ORG

Diseño Nxt 2.0

El software de referencia Nxt (NRS) recientemente ha completado con éxito un hardfork y ha sido actualizado a la versión NRS 1.7.5, lo que le ha aportado importantes y novedosas características tales como: tiempo de transacción establecido en 1 minuto, activos del tipo “Singleton”, mezclado de monedas, control de cuentas mediante transacciones condicionadas y datos en la nube. Todo funciona de manera estable y sin contratiempos, y por esto los desarrolladores del núcleo de Nxt han comenzado a hacer un brainstorming acerca de como deberá ser la futura versión NRS Nxt 2.0.

2.0 estará centrado en la escalabilidad. La idea es crear cadenas laterales dependientes de la blockchain principal.

Jean-Luc, desarrollador principal de Nxt, escribe:

Desde hace algún tiempo hemos estado haciendo brainstorming sobre el diseño de Nxt 2.0, y aquí presentamos nuestra propuesta actual. Este es un resumen general, del cual todavía desconocemos muchos detalles. Las decisiones de diseño más específicas se irán tomando conforme se avance en el desarrollo. Lo que proponemos es un cambio significativo en la plataforma, no solamente en un conjunto de nuevas características. Por tanto, nos llevará bastante tiempo para materializarlo.

– Se creará una nueva cadena principal, en la cual NXT se convertirá en un token (“forgingNXT” o “fNXT”) usado únicamente para forjar. El actual ecosistema NXT se transformará en una cadena hija (child chain), conservando todas sus características y propiedades, excepto la capacidad para forjar. En el bloque en el que se produzca el hard-fork, cada propietario de NXT verá sus NXT convertidos en ambos tokens en proporción 1:1 y todas sus propiedades se migrarán a esta “child chain” de NXT.

– Siempre será posible intercambiar NXT por fNXT, de modo que los pequeños inversores que no estén interesados en la forja pueden optar por vender sus fNxt a los grandes accionistas que ejecutan nodos de forja. Esto nos llevaría a una cierta centralización, pero también a un mayor porcentaje de poseedores de fNXT forjando, asegurando así el ecosistema completo de NXT.

– Las “child chains” usarán el mismo código que Nxt pero, en caso que así se quiera, cada una puede ser configurada para que solo disponga de una parte de las características. En la “child chain” de NXT se podrá seguir realizando cualquier tipo de transacción.

– Cada “child chain” tendrá su propio token / moneda, con la cual se realizarán las operaciones de pago, se establecerán las órdenes de compra y venta de activos, se pondrá precio a los bienes digitales, etc. Las comisiones de transacción de la “child chain” serán también en este token nativo.

– Todas las transacciones de todas las cadenas deberán ser procesadas por todos los nodos. Todos los nodos van a acarrear todas las “child chains” durante al menos los últimos 1440 bloques. Los nodos de archivos (archival nodes) pueden optar por almacenar una o más “child chains” durante un periodo más largo de tiempo, o hacerlo indefinidamente.

– Por defecto, las transacciones realizadas en las “child chains” se “podarán” completamente después de 1440 bloques, en aquellos nodos no específicamente configurados para archivarlas por más tiempo. Un nuevo nodo que inicie la descarga de la blockchain desde cero debe aceptar que si los forjadores y los nodos (que estaban ejecutando la blockchain en el momento en que todavía disponían de los datos que posteriormente iban a ser recortados) aprobaron esas transacciones con anterioridad, entonces el resultado de esas transacciones es válido, incluso aunque la información para validarlas de nuevo ya no esté disponible.

– Sin embargo, tiene que poderse validar que el balance efectivo fNXT de los forjadores era realmente el que decían tener. Esta es la razón por la cual las transacciones en la cadena de forjado que cambia el saldo fNXT no pueda podarse, y debe reducirse a un mínimo esencial de transacciones.

– Los bloques de la “child chain” se implementarán como un añadido “podable” de una única transacción (una por cada bloque y por cadena) del tipo “ChildchainBlock” en la cadena de bloques principal. Cualquiera puede crear un bloque en una “child chain”. Sin embargo, depende de los forjadores que incluyen bloques en la cadena principal decidir si esa transacción “ChildchainBlock” debe ser incluida en un bloque. Los forjadores, al igual que todos los nodos, hacen una validación completa de todas las operaciones de la “child chain” incluidas en un ChildchainBlock, siempre y cuando los datos no han sido “podados” todavía.

– Si no ha habido transacciones en una cadena, no hay necesidad de crear una transacción “childchainblock” para ella, a diferencia de lo que sucede en la cadena principal, donde seguiremos teniendo los bloques cada 60s incluso aunque estén vacíos. Podemos pensar en reducir el tiempo de generación de bloques de la cadena con el fin de permitir que algunas “child chains” tengan bloques más frecuentemente.

– Los forjadores aceptarán las comisiones solo en fNXT, con la comisión mínima requerida por el protocolo para cada tipo de transacción también expresada en fNXT.

– Cuando un forjador incluye una transacción del tipo “ChildChainBlock” en la cadena principal, su creador paga una comisión en fNXT al forjador. El importe de esta comisión depende del creador del bloque en la “child chain”, pero debe ser al menos igual al total de las comisiones mínimas calculados en fNXT para cada transacción incluida. A cambio, el creador del bloque en la “child chain” recibe la comisión en el token nativo de esa “child chain”, pagado por los emisores de esas operaciones en esa “child chain”.

– La tasa de intercambio del token/moneda de la “child chain” al token fNXT será determinado por la ley de oferta y demanda. Si nadie estuviese dispuesto a incluir una operación de la “child chain” en un bloque de esa “child chain” significaría que la tarifa ofrecida en el token nativo no se considera equivalente a la comisión mínima fNXT requerida para esta transacción en particular, y dicha transacción expiraría sin confirmarse. Si el valor de la token nativo de la “child chain” se reduce a cero, nadie estará dispuesto a crear bloques de la “child chain”, y el proceso de las transacciones en esta “child chain” se detendrá.

– Las “child chains” competirán entre sí para su inclusión en un bloque, ya que al final los forjadores observarán la relación comisión / tamaño para cada transacción y querrán maximizar sus beneficios durante el forjado, dependientes del tamaño de bloque y del límite del número de transacciones.

– Antes de la “poda” cada nodo debe comprobar no sólo que el hash de la operación del bloque de la “child chain” coincide, sino que también debe comprobar si son válidas todas las transacciones de la “child chain” que contiene, es decir, asegurarse de que no hay ningún doble gasto, así como el resto de validaciones. Por eso el nodo necesita saber los saldos actuales de todas las cuentas de esa “child chain”. Pero todavía para poder hacer la poda necesitamos una operación de captura, que tome una instantánea del estado únicamente de la “child chain” en su estado actual, sin el historial de las operaciones que la llevaron a este estado. A continuación, después de que esta transacción ha sido aceptada en la blockchain por más de 720 bloques, podemos asumir que es válida, “podar” toda el historial de la cadena antes de esa captura, y desechar la captura anterior.

– La operación de captura para cada “child chain” se crea en intervalos regulares, tales como cada 1440 bloques, y se llevan a cabo por el forjador del bloque actual. Sólo contendrá el hash de la captura, no se capturarán todos los datos.

– Los datos de la captura en sí mismos no tienen que propagarse a través de la red cuando se crea la transacción de captura. Cada nodo que se encuentre actualizado ya cuenta con el estado de la “child chain” capturada, por lo que puede generar una captura por sí mismo. Sólo se debe validar que el hash calculado para el forjador de la captura de hecho coincide con su propia captura.

– Solo nodos que descargan la cadena de bloques desde cero necesitarán descargar la última captura al completo, y esta es una razón más por la que cada nodo debe generar y mantenerse alrededor de esta captura, para poder servir a estos nuevos nodos. La descarga de la captura puede ser de una manera similar a Torrent, diferentes piezas desde múltiples nodos.

– Debido a que cada nodo actualizado necesita validar todas las transacciones actuales, aún a pesar de que reducimos significativamente el problema a largo plazo de crecimiento de la blockchain (en términos de espacio en disco utilizado, y ancho de banda para descargar el blockchain desde cero), todavía habrá un cuello de botella en términos de la CPU, para procesar los datos de todas las cadenas, y el ancho de banda, para poder recibir y procesar las transacciones actuales de todas las cadenas. Pero puesto que los nodos no necesitan validar las antiguas operaciones en la “child chain” que ya han sido “podadas”, la descarga total de la blockchain desde cero debe ser más rápida y menos intensiva para la CPU.

– La cadena de forjado, que es común a todos los nodos, garantiza la seguridad incluso para las “child chain” que no tengan muchos usuarios y que tienen transacciones sólo ocasionalmente. A cambio cada una de las “child chains” podrá ser podada. Las “child chains” ya no necesitan conservar todo el historial de transacciones remontándose hasta el bloque génesis para ser seguras, porque no forjan..

– Como primer paso, vamos a empezar solamente con la cadena principal de forja, con la cadena NXT como única “child chain” de la anterior. Y tal vez una “child chain” en modo de pruebas. Una vez que las tengamos funcionando, implementaremos las características necesarias para ser capaces de crear dinámicamente nuevas “child chain”, o modificar las propiedades de las “child chains” existentes.

Este artículo está publicado originalmente en nxtforum.org.

Author: Jean-Luc. Participa en la discusión aquí:
https://nxtforum.org/core-development-discussion/nxt-2-0-design/

o en la sección en español del foro:

https://nxtforum.org/espanol-(spanish)/diseno-nxt-2-0/

View this in: English

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.