Me gusta 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 no había un SDK listo en PHP en su arsenal. Bueno, tuve que escribir uno.
Al principio, tenía que usar 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 , 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 y .
El primer paso tras bambalinas en la blockchain de Waves fue . 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 ( por cierto, funciona con ellos, se pagan por errores encontrados). Puedes estudiar más sobre la funcionalidad del explorador w8io en este tema:
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: para codificación en base58 (en realidad, para codificar cualquier alfabeto en cualquier otro), para crear y verificar firmas compatibles (con variantes de ), para calcular uno de los hashes (que solo estaba disponible a partir de PHP 7.2) y así sucesivamente.
Aquí debo agradecer a por varios consejos valiosos que me orientaron hacia en lugar de los archivos include que solía usar, pero que ahora están obsoletos.
Después de un par de meses , salió de y ahora está listo para trabajar con toda la funcionalidad estándar de la plataforma Waves. Todo lo disponible en 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/waveskitUsamos:
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 . Para entender mejor el trabajo con transacciones, puedes estudiar o dirigirte directamente a ejemplos prácticos en .
Dado que WavesKit se ha desarrollado en condiciones de uso real, ya cuenta con características avanzadas. La primera función destacada es , 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 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 . 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 se construye completamente en torno a esta función, puedes estudiar cómo funciona directamente .
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 .
Fuente: habr.com
