WavesKit: framework PHP para trabajar con la cadena de bloques de Waves

Me gusta PHP por su velocidad de desarrollo y excelente portabilidad. Es muy bueno tener siempre una herramienta en el bolsillo, lista para resolver problemas.

Fue una lástima que, al familiarizarse con la cadena de bloques nacional Plataforma de olas no tenía un SDK PHP listo para usar en su arsenal. Bueno, tuve que escribirlo.

Al principio tuve que usar nodos para firmar transacciones. Entonces, para gestionar tres direcciones era necesario lanzar tres nodos... Fue un espectáculo lamentable, aunque resolvió algunos problemas. Hasta que llegó el entendimiento de que depender de nodos era un callejón sin salida. En primer lugar, debido a la funcionalidad limitada. API, en segundo lugar, por la velocidad (los nodos eran muy lentos en aquellos días).

Empecé dos trabajos paralelos. Una es crear un explorador de blockchain que sea rápido y completamente independiente de la API del nodo. El segundo es recopilar todas las funciones para trabajar con Waves Platform en un solo lugar. Así aparecieron los proyectos w8io и OlasKit.

El primer paso detrás de escena de la cadena de bloques Waves fue navegador w8io. No fue fácil, pero aun así logramos escribir un cálculo independiente de todos los saldos e incluso encontrar un error en los cálculos en los nodos originales (programa de recompensas por errores Por cierto, les funciona, pagan por los errores encontrados). Puede obtener más información sobre la funcionalidad del navegador w8io en este tema: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

Mientras trabajaba en w8io ya tenía dudas, pero cuando el trabajo llegó a su final lógico y comencé a crear el SDK, mis dudas se confirmaron. No pude encontrar algunas funciones por ningún lado, incluidas las más importantes, las criptográficas. Luego comencé a hacer mis propios ladrillos para los cimientos. Así nacieron: Código ABC codificar en base58 (en realidad, codificar cualquier alfabeto en cualquiera), Curve25519 para crear y verificar firmas compatibles (con opciones con esteroides), blake2b para calcular uno de los hashes (que solo estaba disponible desde PHP 7.2), etc.

Aquí es donde tengo que agradecer Inala Kardanova por algunos valiosos consejos que me indicaron la dirección compositor en lugar de los archivos de inclusión que me resultan familiares, pero desactualizados.

Después de un par de meses WavesKit fue lanzado, salió versiones beta y ahora está listo para trabajar con todas las funciones estándar de la plataforma Waves. Todo disponible en red principal Las transacciones se pueden crear, firmar y enviar fácilmente usando un solo paquete, ejecutándose en todas las versiones de PHP de 64 bits desde 5.6 inclusive.

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 se ejecuta en la red de prueba "T". Instalamos una frase inicial a partir de la cual las claves y la dirección de la cuenta se calculan automáticamente en función de la clave pública. A continuación, creamos una transacción de transferencia 0.00000001 Waves desde la dirección calculada automáticamente usando la frase inicial a la dirección de alias "prueba", la transferimos para firmarla con una clave privada y la enviamos a la red. Después de esto, nos aseguramos de que la red confirme exitosamente la transacción.

El trabajo con transacciones se concentra en funciones que comienzan con tx. Para comprender mejor cómo trabajar con transacciones, puede estudiar Documentación de WavesKit o recurrir inmediatamente a ejemplos ilustrativos en pruebas de integración continua.

Dado que WavesKit se desarrolló para uso en el mundo real, ya cuenta con funciones avanzadas. La primera característica asesina es asegurar la función, que controla el logro del nivel requerido de confianza de que la transacción no se perdió, sino que, por el contrario, fue confirmada y alcanzó el número requerido de confirmaciones en la red.

Otro mecanismo a prueba de balas es cómo WavesKit se comunica con los nodos. En condiciones de invernadero, el marco funciona solo con el nodo principal, manteniendo una conexión constante con él, pero en caso de errores puede cambiar automáticamente a los de respaldo. Si configura una serie de nodos de respaldo, puede llamar a la función establecerMejorNodo para determinar el mejor nodo como principal en función del valor máximo de la altura actual y la velocidad de respuesta. Ahora agregue a esto un caché de consultas interno y siéntase atendido tanto por los usuarios como por los propietarios de nodos.

Uno de los últimos mecanismos avanzados es la función. txMonitor. Surgió debido a la necesidad de responder a las transacciones entrantes en tiempo real. Esta función resuelve por completo todos los matices asociados con el procesamiento de transacciones en blockchain. No más problemas, simplemente configure su función de devolución de llamada con las opciones deseadas y espere a que nuevas transacciones inicien sus procesos. Por ejemplo, otro proyecto mío. VECRO completamente construido alrededor de esta función, puedes estudiar fácilmente cómo funciona directamente en el código del proyecto.

Me encanta el código abierto, es uno de los mayores logros de la humanidad. Como soy el único desarrollador y he llegado a un estado en el que todas mis necesidades están resueltas, te invito a utilizar y contribuir a OlasKit.

Fuente: habr.com

Añadir un comentario