WavesKit — um framework PHP para trabalhar com blockchain Waves

Eu gosto PHP pela velocidade de desenvolvimento e excelente portabilidade. É muito bom ter sempre uma ferramenta pronta para resolver problemas.

Foi bastante decepcionante quando, ao conhecer a blockchain nacional, a Waves Platform não tinha um SDK pronto em PHP. Bem, tive que escrevê-lo.

No começo, tive que usar nós para assinar transações. Assim, para gerenciar três endereços, precisei executar três nós... Foi uma cena triste, embora resolvesse algumas questões. Até perceber que confiar em nós era um beco sem saída. Primeiro, por causa das funcionalidades limitadas API, segundo, pela velocidade (naqueles dias, os nós eram muito lentos).

Comecei dois trabalhos paralelos. Um foi criar um explorador de blockchain, que seria rápido e totalmente independente da API dos nós. O segundo foi reunir todas as funções para trabalhar com a Waves Platform em um só lugar. Assim nasceram os projetos w8io e WavesKit.

O primeiro passo por trás das cortinas da blockchain Waves foi o explorador w8io. Não foi fácil, mas consegui escrever um cálculo independente de todos os saldos e até encontrar um erro nos cálculos nos nós originais (o programa bug-bounty que, a propósito, eles operam, paga-se por erros encontrados). Você pode estudar mais sobre a funcionalidade do explorador w8io neste tópico: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

Durante o trabalho no w8io já tinha minhas dúvidas, mas quando o trabalho chegou ao fim lógico e comecei a criar o SDK, as dúvidas se confirmaram. Não consegui encontrar certas funções em lugar nenhum, incluindo as mais importantes, as criptográficas. Então comecei a criar meus próprios blocos de construção. Assim nasceram: ABCode para codificação em base58 (na verdade, para codificar qualquer alfabeto em qualquer), Curve25519 para criar e verificar assinaturas compatíveis (com variantes de esteroides), Blake2b para calcular um dos hashes (que estava disponível apenas a partir do PHP 7.2) etc.

Aqui devo agradecer Inal Kardanov por alguns conselhos valiosos que me direcionaram para composer em vez dos arquivos include que eu costumava usar, mas que estão desatualizados.

Após alguns meses o WavesKit viu a luz, saiu da versão beta e agora está pronto para funcionar com toda a funcionalidade padrão da plataforma Waves. Todos disponíveis na rede principal Transações podem ser facilmente criadas, assinadas e enviadas usando apenas um pacote que funciona em todas as versões de 64 bits do PHP a partir da 5.6.

Integrando WavesKit ao seu projeto:

composer require deemru/waveskit

Usando:

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 acima, criamos um objeto WavesKit que opera na rede de teste "T". Definimos uma seed phrase, da qual as chaves e o endereço da conta são automaticamente calculados com base na chave pública. Em seguida, criamos uma transação de transferência de 0.00000001 Waves a partir do endereço calculado pela seed phrase para o endereço do alias "test", a assinamos com a chave privada e enviamos para a rede. Posteriormente, garantimos que a transação foi confirmada com sucesso pela rede.

O trabalho com transações está concentrado em funções que começam com tx. Para uma melhor compreensão do trabalho com transações, você pode consultar a documentação do WavesKit ou imediatamente consultar exemplos práticos em testes de integração contínua.

Como o WavesKit se desenvolveu em condições de uso real, já possui recursos avançados. O primeiro recurso chave é a função ensure, que controla a obtenção do nível desejado de certeza de que a transação não foi perdida, mas, ao contrário, foi confirmada e atingiu o número necessário de confirmações na rede.

Outro mecanismo à prova de falhas é como o WavesKit se comunica com os nós. Em condições controladas, o framework trabalha apenas com um nó principal, mantendo uma conexão constante com ele, mas em caso de falhas, pode automaticamente mudar para reservas. Se você configurar um array de nós reservas, pode chamar a função setBestNode para determinar o melhor nó como principal com base no maior valor de altura atual e tempo de resposta. Agora adicione a isso um cache interno de requisições e sinta a preocupação com os usuários e os donos dos nós.

Um dos mecanismos avançados mais recentes é a função txMonitor. Ela surgiu da necessidade de responder a transações recebidas em tempo real. Essa funcionalidade resolve totalmente todas as nuances relacionadas ao processamento de transações na blockchain. Chega de complicações, basta definir sua função de callback com as opções desejadas e aguardar novas transações que ativarão seus processos. Por exemplo, mais um de meus projetos VECRO é totalmente construído em torno dessa função, você pode explorar como ela funciona diretamente no código do projeto.

Gosto de open source, é uma das maiores conquistas da humanidade. Como sou o único desenvolvedor e alcancei um estado em que todas as minhas necessidades estão resolvidas, convido você a utilizar e contribuir para WavesKit.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster