Anunciamos la nueva billetera MultiChain PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.

Anunciando la nueva billetera MultiChain

Un importante paso adelante para el rendimiento y la escalabilidad

Después de dos meses de intensos desarrollos y pruebas, estamos orgullosos de lanzar la última versión alfa de MultiChain, con una billetera en el nodo completamente reescrita. Esta nueva billetera transforma el rendimiento y la escalabilidad de la creación, recepción y almacenamiento de transacciones en MultiChain.

Antes de entrar en detalles, permítanme proporcionar un contexto. Cuando comenzamos a desarrollar MultiChain, tomamos la decisión de usar Bitcoin Core, el nodo estándar para la red pública de bitcoin, como punto de partida. En términos de programación, esto significa que MultiChain es una "bifurcación" del software bitcoin. Nuestro razonamiento principal fue que Bitcoin era (y sigue siendo) el ecosistema de criptomonedas más valioso y más probado en batalla, de alguna manera.

En el lado positivo, esta decisión nos ayudó a llegar al mercado rápidamente, en comparación con la codificación de un nodo blockchain desde cero. A pesar de las muchas diferencias entre las cadenas de bloques públicas y privadas, comparten una gran cantidad de puntos en común técnicos, que incluyen el protocolo de igual a igual, la estructura de transacciones y bloques, la creación y verificación de firmas digitales, las reglas de consenso, la gestión de claves y la necesidad de una API de nodo La bifurcación de Bitcoin Core nos permitió aprovechar su madurez y centrarnos en lo que MultiChain agrega a blockchains: configurabilidad, permisos y soporte de activos nativos. Como resultado, pudimos lanzar el primer alfa en junio de 2015, solo 6 meses después de comenzar el desarrollo.

Sin embargo, junto con estos beneficios, también tuvimos que aceptar el hecho de que algunos aspectos de Bitcoin Core están mal diseñados. Si bien funcionan bien a pequeñas escalas, su rendimiento se degrada drásticamente a medida que aumenta el uso. Con la red pública de bitcoin todavía restringida a unas pocas transacciones por segundo, esto no será un problema para la mayoría de los usuarios de Bitcoin Core durante mucho tiempo. Pero con las cadenas de bloques privadas destinadas a cientos o miles de transacciones por segundo, sabíamos que, tarde o temprano, estos cuellos de botella tendrían que eliminarse.

La billetera de Bitcoin Core

La "billetera" dentro de Bitcoin Core siempre fue el más crucial de estos puntos débiles. Su trabajo es almacenar las transacciones que son de particular relevancia para el nodo, porque involucran una dirección de cadena de bloques que posee o un "solo reloj"Dirección cuya actividad está rastreando. Por ejemplo, cada transacción que envía fondos hacia o desde un nodo debe almacenarse en la billetera de ese nodo. Y cada vez que un nodo crea una transacción, debe buscar una o más "salidas no gastadas" de transacciones de billetera anteriores que la nueva transacción gastará.

Entonces, ¿qué hay de malo con la billetera que heredamos de Bitcoin Core? En realidad, tres cosas:

  • Todas las transacciones de billetera se guardan en la memoria. Esto provoca tiempos de inicio lentos y un rápido aumento del uso de memoria.
  • Muchas operaciones realizan un "escaneo completo" ineficiente de cada transacción en la billetera, ya sea vieja o nueva.
  • Cada transacción en la billetera se almacena en su totalidad, incluidos los "metadatos" arbitrarios que no tienen significado desde la perspectiva del nodo y ya están almacenados en la cadena de bloques en el disco. Esto es muy derrochador.

La consecuencia es que, con alrededor de 20,000 transacciones almacenadas, la billetera de Bitcoin Core se ralentiza significativamente. Después de 200,000 más o menos, prácticamente se detiene. Peor aún, dado que una cadena de bloques MultiChain permite hasta 8 MB de metadatos por transacción (en comparación con los 80 bytes de bitcoin), los requisitos de memoria de la billetera pueden aumentar rápidamente incluso con un pequeño número de transacciones.

Es importante aclarar que estas deficiencias se aplican solo a Bitcoin Core billeteras, en lugar de su capacidad general de procesamiento de transacciones. En otras palabras, puede procesar y almacenar cómodamente millones (o incluso miles de millones) de transacciones que no se relacionan con sus propias direcciones, ya que estas se guardan en el disco en lugar de en la memoria. Por ejemplo, muchos intercambios y billeteras de bitcoin populares usan Bitcoin Core tal cual, pero almacenan sus propias transacciones externamente en lugar de dentro del nodo.

Nueva billetera de MultiChain

Podríamos haber hecho la misma demanda a los usuarios de MultiChain, para almacenar sus propias transacciones fuera del nodo. Sin embargo, esto no parecía la solución correcta porque complicaría en gran medida la configuración y el mantenimiento de cada uno de los participantes de la cadena. Entonces, en cambio, mordimos la bala y reescribimos la billetera desde cero.

¿Cómo difiere la nueva billetera? Si tiene alguna experiencia con bases de datos, las respuestas pueden ser obvias:

  • En lugar de mantener las transacciones de billetera en la memoria, se almacenan en el disco en un formato adecuado, con transacciones de interés recuperadas cuando es necesario.
  • En lugar de realizar escaneos completos de billetera, las transacciones se "indexan" de varias maneras para permitir que aquellas que cumplen con criterios particulares sean localizadas rápidamente.
  • Cualquier pieza de metadatos de transacción que sea mayor a 256 bytes no se almacena en la billetera. En cambio, la billetera contiene un puntero a la posición de esos metadatos en la propia cadena de bloques.

En otras palabras, hemos reconstruido la billetera en el nodo para que se maneje correctamente en la base de datos (usando NivelDB), en lugar de depender de una estructura ingenua en memoria que no se puede buscar de manera eficiente. Como era de esperar, la diferencia (medida en un Intel Core i3.4 de 7 GHz) es bastante dramática:

Rendimiento de transacciones de billetera MultiChain

Uso de la memoria

Los gráficos muestran que, una vez que la billetera antigua contiene 250,000 transacciones, su tasa de envío cae a 3 tx / seg y agrega 600 MB al uso de memoria del nodo. Por el contrario, la nueva billetera soporta más de 100 tx / seg y solo agrega 90 MB. Dejamos de probar la billetera antigua en este punto, pero incluso con 6-8 millones de transacciones almacenadas, la nueva billetera continúa enviando más de 100 tx / seg, y alcanza un máximo de alrededor de 250 MB de RAM utilizada (debido al almacenamiento en caché de la base de datos).

Estas pruebas se realizaron en condiciones realistas, con múltiples direcciones y activos (y, por lo tanto, muchas salidas de transacciones no gastadas) en la billetera del nodo. En un escenario idealizado (una dirección, un activo, pocos UTXO), la tasa de envío sostenida fue superior a 400 tx / s. De cualquier manera, como parte de esta reescritura, también hemos abstraído adecuadamente toda la funcionalidad de la billetera detrás de una interfaz interna limpia. Esto facilitará el soporte de otros motores de bases de datos en el futuro, para una mayor robustez y velocidad.

Para reiterar, todos estos números se refieren a la velocidad a la que un nodo puede crear, enviar y almacenar transacciones en su billetera local, en lugar de su rendimiento en términos de procesamiento de transacciones creadas por otros. Para el rendimiento general de la red, MultiChain actualmente puede procesar de 200 a 800 tx / seg, dependiendo del hardware en el que se esté ejecutando. (Sea escéptico respecto de cualquier número prometedor de software de blockchain como 100,000 tx / seg en el hardware normal, porque el cuello de botella es la verificación de firma digital, lo que lleva tiempo real. límites, por lo que no es mejor que una base de datos distribuida regular).

Para finalizar, me gustaría mencionar la próxima característica importante que llega a MultiChain, que requirió la reescritura de esta billetera. Esta característica, llamada secuencias, proporciona una abstracción de alto nivel y API para el almacenamiento de datos de uso general en una cadena de bloques. Puede pensar en una transmisión como una serie de tiempo o una base de datos de valores clave, con los beneficios adicionales relacionados con la cadena de bloques de la descentralización, las firmas digitales, la marca de tiempo y la inmutabilidad. Conocemos muchos casos de uso de blockchain que podrían usar esta funcionalidad, y ya estamos trabajando arduamente para construirla. Mira este espacio.

Por favor publique cualquier comentario en Linkedin.

Anexo técnico

A partir de MultiChain alpha 22, puede verificar qué versión de la billetera se está ejecutando actualmente examinando el walletdbversion del objeto getinfo or getwalletinfo Llamadas API. Un valor de 1 significa la billetera original de Bitcoin Core, y 2 significa la nueva billetera MultiChain.

Si ejecuta la nueva versión de MultiChain en una cadena existente, no cambiará inmediatamente a la nueva billetera. Puede actualizar la billetera deteniendo el nodo y luego volviendo a ejecutar multichaind con los parámetros -walletdbversion=2 –rescan. Puede degradar de manera similar usando –walletdbversion=1 –rescan.

De manera predeterminada, cuando inicia un nodo en una nueva cadena, usará automáticamente la nueva billetera. Puedes cambiar esto ejecutando multichaind por primera vez con el parámetro –walletdbversion=1.

Con la nueva billetera, todos API MultiChain funcionan exactamente de la misma manera que antes, con la excepción de las API de consulta de transacciones anteriores getreceivedbyaddress, listreceivedbyaddress y listtransactions (utilizar listwallettransactions or listaddresstransactions en lugar). Además, la nueva billetera no admite llamadas API y parámetros relacionados con el mecanismo de "cuentas" poco implementado y pronto en desuso de Bitcoin Core, que nunca fue respaldado adecuadamente por MultiChain. Estas llamadas se deshabilitan de forma segura con un mensaje de error.

Fuente: https://www.multichain.com/blog/2016/07/announcing-the-new-multichain-wallet/

Sello de tiempo:

Mas de Multicain