Me gusta PHP por su velocidad de desarrollo y excelente portabilidad. Esto es muy bueno cuando siempre hay una herramienta lista para resolver problemas en su bolsillo.
Fue bastante decepcionante cuando, al reunirse con la cadena de bloques doméstica Waves Platform , no había PHP SDK listo en su arsenal. Bueno, tuve que escribirlo.
Al principio, tuve que usar nodos para firmar transacciones. Por lo tanto, para administrar tres direcciones, se tuvieron que iniciar tres nodos ... Fue una visión miserable, aunque resolvió algunos problemas. Hasta que se llegue a un entendimiento de que confiar en los nodos es un callejón sin salida. En primer lugar, debido a la funcionalidad limitada de la API , y en segundo lugar, debido a la velocidad (en aquellos días, los nodos eran muy lentos).
Comencé dos trabajos paralelos. Una es hacer un navegador blockchain que sea rápido y completamente independiente de los nodos API. El segundo es recopilar todas las funciones para trabajar con la plataforma Waves en un solo lugar. Así que hubo proyectos de w8io y WavesKit .
El primer paso detrás de escena de la cadena de bloques Waves fue el navegador w8io . No fue fácil, pero aún era posible escribir un cálculo independiente de todos los saldos e incluso encontrar un error en los cálculos en los nodos originales ( el programa de recompensas de errores, por cierto, funciona para ellos, 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
En el proceso de trabajar en w8io, ya tenía dudas, pero cuando el trabajo llegó a un final lógico y comencé a crear el SDK, las dudas se confirmaron. No pude encontrar algunas funciones en ninguna parte, incluida la más importante, la criptográfica. Luego comencé creando mis propios ladrillos para la fundación. Así nacieron: ABCode para codificar en base58 (en realidad para codificar cualquier alfabeto en cualquiera), Curve25519 para crear y verificar firmas compatibles (con opciones en esteroides ), Blake2b para calcular uno de los hashes (que solo estaba disponible a partir de PHP 7.2) etc.
Aquí tengo que agradecer a Inal Kardanov por algunos valiosos consejos que me dirigieron hacia el compositor en lugar de los archivos de inclusión habituales, pero obsoletos.
Después de un par de meses, WavesKit vio la luz , dejó la versión beta y ahora está listo para trabajar con toda la funcionalidad estándar de la plataforma Waves. Todas las transacciones disponibles en la red principal se pueden crear, firmar y enviar fácilmente utilizando un solo paquete que se ejecuta en todas las versiones de PHP de 64 bits desde 5.6 inclusive.
Conectamos WavesKit a nuestro proyecto:
composer require deemru/waveskit
Utilizamos:
use deemru\WavesKit; $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". Establezca la frase inicial a partir de la cual las claves y la dirección de la cuenta se calculan automáticamente según la clave pública. A continuación, creamos la transacción de transferencia 0.00000001 Ondas a partir de la frase de dirección calculada automáticamente utilizando la frase inicial a la "prueba" de la dirección de alias, la transferimos para su firma con la clave privada y la enviamos a la red. Después de esto, verificamos que la transacción haya sido confirmada con éxito por la red.
El trabajo con transacciones se concentra en funciones que comienzan con tx . Para una mejor comprensión del trabajo con transacciones, puede estudiar la documentación de WavesKit o recurrir inmediatamente a ejemplos visuales en pruebas de integración continua .
Dado que WavesKit se ha desarrollado en condiciones reales, ya cuenta con funciones avanzadas. La primera característica asesina es la función de asegurar , que controla el logro del nivel de confianza requerido de que la transacción no se perdió, sino que se confirmó 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 solo funciona con el nodo principal, manteniendo una conexión constante con él, pero en caso de errores puede cambiar automáticamente a nodos de respaldo. Si instala una matriz de nodos de respaldo, puede llamar a la función setBestNode para determinar el mejor nodo como el principal por el valor máximo de la altura actual y la velocidad de respuesta. Ahora agregue a esto el caché interno de consultas y sienta el cuidado de los usuarios y los propietarios de los nodos.
Uno de los últimos mecanismos avanzados es la función txMonitor . Ella apareció en relación con la necesidad de responder a las transacciones entrantes en tiempo real. Esta función resuelve completamente todos los matices asociados con el procesamiento de transacciones en la cadena de bloques. No más molestias, solo instala tu función de devolución de llamada con las opciones deseadas y espera nuevas transacciones que comenzarán tus procesos. Por ejemplo, mi otro proyecto VECRO está completamente basado en esta función, puede aprender fácilmente cómo funciona directamente en el código del proyecto .
Me gusta el código abierto, este es uno de los mayores logros de la humanidad. Como soy el único desarrollador y he llegado al punto de que todas mis necesidades se han resuelto, lo invito a usar y contribuir con WavesKit .