WavesKit — Framework PHP para trabajar con blockchain de Waves

Me gusta PHP por la velocidad de desarrollo y la excelente portabilidad. Es muy bueno tener siempre una herramienta lista para resolver tareas.

Fue bastante decepcionante cuando, al conocer la blockchain nacional Waves Platform no había un SDK listo en PHP en su arsenal. Bueno, tuve que escribir uno.

Al principio, tenía que usar nodos para firmar transacciones. Así que, para gestionar tres direcciones, tenía que iniciar tres nodos... Era un espectáculo lamentable, aunque resolvía algunas tareas. Hasta que llegó la comprensión de que depender de nodos es un callejón sin salida. Primero, debido a la funcionalidad limitada API, en segundo lugar, por la velocidad (en aquellos días los nodos eran muy lentos).

Comencé dos trabajos paralelos. Uno fue crear un explorador de blockchain que fuera rápido y completamente independiente de la API de nodos. El segundo fue reunir todas las funciones para trabajar con Waves Platform en un solo lugar. Así surgieron los proyectos w8io y WavesKit.

El primer paso tras bambalinas en la blockchain de Waves fue el explorador w8io. No fue fácil, pero finalmente logré escribir un cálculo independiente de todos los saldos e incluso encontrar un error en los cálculos en los nodos originales (el programa bug-bounty por cierto, funciona con ellos, se pagan por errores encontrados). Puedes estudiar más sobre la funcionalidad del explorador w8io en este tema: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

Durante mi trabajo en w8io ya tenía dudas, pero cuando el trabajo se acercó a su conclusión lógica y comencé a crear el SDK, se confirmaron mis dudas. No pude encontrar algunas funciones en ninguna parte, incluidas las más importantes, criptográficas. Entonces empecé a crear mis propios bloques para la base. Así nacieron: ABCode para codificación en base58 (en realidad, para codificar cualquier alfabeto en cualquier otro), Curve25519 para crear y verificar firmas compatibles (con variantes de esteroides), Blake2b para calcular uno de los hashes (que solo estaba disponible a partir de PHP 7.2) y así sucesivamente.

Aquí debo agradecer a Inal Kardanov por varios consejos valiosos que me orientaron hacia composer en lugar de los archivos include que solía usar, pero que ahora están obsoletos.

Después de un par de meses WavesKit vio la luz, salió de la versión beta y ahora está listo para trabajar con toda la funcionalidad estándar de la plataforma Waves. Todo lo disponible en la red principal Las transacciones pueden ser creadas, firmadas y enviadas fácilmente por un solo paquete que funciona en todas las versiones de PHP de 64 bits desde 5.6 en adelante.

Conectamos WavesKit a nuestro proyecto:

composer require deemru/waveskit

Usamos:

use deemruWavesKit;
$wk = new WavesKit( 'T' );
$wk->setSeed( 'manage manual recall harvest series desert melt police rose hollow moral pledge kitten position add' );
$tx = $wk->txBroadcast( $wk->txSign( $wk->txTransfer( 'test', 1 ) ) );
$tx = $wk->ensure( $tx );

En el ejemplo anterior, creamos un objeto WavesKit que opera en la red de prueba «T». Establecemos la frase semilla de la cual se calculan automáticamente las claves y la dirección de la cuenta basada en la clave pública. Luego, creamos una transacción de transferencia de 0.00000001 Waves desde la dirección calculada automáticamente por la frase semilla hacia la dirección del alias «test», la firmamos con la clave privada y la enviamos a la red. Después de eso, nos aseguramos de que la transacción haya sido confirmada con éxito por la red.

El trabajo con transacciones se centra en funciones que comienzan con tx. Para entender mejor el trabajo con transacciones, puedes estudiar la documentación de WavesKit o dirigirte directamente a ejemplos prácticos en las pruebas de integración continua.

Dado que WavesKit se ha desarrollado en condiciones de uso real, ya cuenta con características avanzadas. La primera función destacada es la función ensure, que controla el logro del nivel requerido de certeza, asegurando que la transacción no se haya perdido, sino que haya sido confirmada y haya alcanzado la cantidad necesaria de confirmaciones en la red.

Otro mecanismo infalible es cómo WavesKit se comunica con los nodos. En condiciones óptimas, el marco trabaja solo con el nodo principal, manteniendo una conexión constante, pero en caso de errores puede cambiar automáticamente a nodos de reserva. Si estableces un array de nodos de reserva, puedes llamar a la función setBestNode para determinar el mejor nodo como el principal según el máximo valor de altura actual y la velocidad de respuesta. Ahora añade a esto un caché interno de solicitudes y sentirás el cuidado tanto por los usuarios como por los propietarios de los nodos.

Uno de los últimos mecanismos avanzados es la función txMonitor. Apareció debido a la necesidad de responder a las transacciones entrantes en tiempo real. Esta función resuelve completamente todos los matices relacionados con el procesamiento de transacciones en la cadena de bloques. No más dolores de cabeza, simplemente establece tu función de callback con las opciones deseadas y espera nuevas transacciones que inicien tus procesos. Por ejemplo, otro de mis proyectos VECRO se construye completamente en torno a esta función, puedes estudiar cómo funciona directamente en el código del proyecto.

Me gusta el código abierto, es uno de los mayores logros de la humanidad. Dado que soy el único desarrollador y he alcanzado un estado en el que todas mis necesidades están satisfechas, te invito a utilizar y contribuir a WavesKit.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster