WavesKit - framework PHP para traballar coa cadea de bloques Waves

Gústame PHP por velocidade de desenvolvemento e excelente portabilidade. É moi bo cando sempre tes unha ferramenta no peto, lista para resolver problemas.

Foi unha vergoña cando, ao familiarizarse coa cadea de bloques doméstica Plataforma Waves non tiña un SDK PHP preparado no seu arsenal. Pois tiven que escribilo.

Ao principio tiven que usar nós para asinar transaccións. Entón, para xestionar tres enderezos foi necesario lanzar tres nodos... Era unha vista lamentable, aínda que resolveu algúns problemas. Ata que chegou o entendemento de que depender dos nodos era unha vía sen saída. En primeiro lugar, debido a unha funcionalidade limitada API, en segundo lugar, pola velocidade (os nodos eran moi lentos naqueles tempos).

Comecei dous traballos paralelos. Unha delas é facer un explorador de cadeas de bloques que sexa rápido e completamente independente da API do nodo. O segundo consiste en recoller nun só lugar todas as funcións para traballar coa Plataforma Waves. Así apareceron os proxectos w8io и WavesKit.

O primeiro paso entre bastidores da cadea de bloques Waves foi navegador w8io. Non foi doado, pero aínda así conseguimos escribir un cálculo independente de todos os saldos e mesmo atopar un erro nos cálculos dos nodos orixinais (programa bug-bounty Por certo, lles funciona, eles pagan polos erros atopados). Podes obter máis información sobre a funcionalidade do navegador w8io neste tema: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

Mentres traballaba en w8io, xa tiña dúbidas, pero cando o traballo chegou ao seu final lóxico e comecei a crear o SDK, as miñas dúbidas confirmáronse. Non puiden atopar algunhas funcións por ningures, incluídas as máis importantes, as criptográficas. Despois comecei facendo os meus propios ladrillos para a fundación. Así naceron: ABCode para codificar en base58 (en realidade, para codificar calquera alfabeto en calquera), Curva25519 para crear e verificar sinaturas compatibles (con opcións en esteroides), Blake2b para calcular un dos hash (que só estaba dispoñible desde PHP 7.2), etc.

Aquí é onde teño que agradecer Inala Kardanova por algúns consellos valiosos que me apuntaron na dirección compositor en lugar dos ficheiros de inclusión que me son familiares, pero desactualizados.

Despois dun par de meses WavesKit foi lanzado, saíu versións beta e agora está listo para traballar con todas as funcionalidades estándar da plataforma Waves. Todo dispoñible en rede principal As transaccións pódense crear, asinar e enviar facilmente usando un só paquete, que se executa en todas as versións de 64 bits de PHP a partir da 5.6 inclusive.

Conectamos WavesKit ao noso proxecto:

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 );

No exemplo anterior, creamos un obxecto WavesKit que se executa na rede de proba "T". Instalamos unha frase semente a partir da cal as claves e o enderezo da conta se calculan automaticamente en función da clave pública. A continuación, creamos unha transacción de transferencia 0.00000001 Waves desde o enderezo calculado automaticamente usando a frase semente ata o enderezo de alias "test", transfórmao para asinalo cunha clave privada e enviámolo á rede. Despois diso, asegurámonos de que a transacción sexa confirmada con éxito pola rede.

O traballo con transaccións concéntrase en funcións que comezan por tx. Para unha mellor comprensión de traballar con transaccións, podes estudar Documentación de WavesKit ou recorre inmediatamente a exemplos ilustrativos en probas de integración continua.

Dado que WavesKit foi desenvolvido no mundo real, xa ten funcións avanzadas. A primeira característica asasina é garantir a función, que controla a consecución do nivel de confianza requirido en que a transacción non se perdeu, senón que, pola contra, confirmouse e alcanzou o número de confirmacións necesarios na rede.

Outro mecanismo a proba de balas é como WavesKit se comunica cos nodos. En condicións de invernadoiro, o marco funciona só co nodo principal, mantendo unha conexión constante con el, pero en caso de erros pode cambiar automaticamente a outros de copia de seguridade. Se configura unha matriz de nós de copia de seguridade, pode chamar a función setBestNode para determinar o mellor nodo como o principal en función do valor máximo da altura actual e da velocidade de resposta. Agora engade a isto unha caché de consulta interna e séntese coidado tanto polos usuarios como polos propietarios dos nodos.

Un dos últimos mecanismos avanzados é a función txMonitor. Apareceu debido á necesidade de responder ás transaccións entrantes en tempo real. Esta función resolve completamente todos os matices asociados ao procesamento de transaccións na cadea de bloques. Non máis dor, só tes que configurar a túa función de devolución de chamada coas opcións desexadas e agarda a que as novas transaccións inicien os teus procesos. Por exemplo, outro proxecto meu VECRO completamente construído arredor desta función, pode estudar facilmente como funciona directamente no código do proxecto.

Encántame o código aberto, é un dos maiores logros da humanidade. Dado que son o único programador e cheguei a un estado no que se solucionan todas as miñas necesidades, convídote a que uses e contribúas a WavesKit.

Fonte: www.habr.com

Engadir un comentario