WavesKit - Estrutura de Blockchain do PHP Waves

Eu gosto do PHP por sua velocidade de desenvolvimento e excelente portabilidade. Isso é muito bom quando há sempre uma ferramenta pronta para resolver problemas no seu bolso.


Foi bastante decepcionante quando, ao se reunir com o blockchain doméstico da Waves Platform , não havia PHP SDK pronto em seu arsenal. Bem, eu tive que escrever.


No começo, eu tive que usar nós para assinar transações. Então, para gerenciar três endereços, três nós tiveram que ser lançados ... Era uma visão miserável, embora resolvesse alguns problemas. Até que se chegue a um entendimento de que confiar em nós é um beco sem saída. Primeiro, devido à funcionalidade limitada da API e, segundo, devido à velocidade (naqueles dias, os nós eram muito lentos).


Comecei dois trabalhos paralelos. Uma é criar um navegador blockchain que seja rápido e completamente independente dos nós da API. O segundo é coletar todas as funções para trabalhar com a Plataforma Waves em um só lugar. Então havia projetos w8io e WavesKit .


O primeiro passo nos bastidores do blockchain Waves foi o navegador w8io . Não foi fácil, mas ainda era possível escrever um cálculo independente de todos os saldos e até encontrar um erro nos cálculos nos nós originais ( o programa de recompensa de bugs, aliás, funciona para eles, eles pagam pelos erros encontrados). Você pode aprender mais sobre a funcionalidade do navegador w8io neste tópico: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite


No processo de trabalhar no w8io, eu já tinha dúvidas, mas quando o trabalho chegou ao fim lógico e comecei a criar o SDK, as dúvidas foram confirmadas. Não consegui encontrar algumas funções em nenhum lugar, incluindo as mais importantes, criptográficas. Então comecei criando meus próprios tijolos para a fundação. Então eles nasceram: ABCode para codificar na base58 (na verdade, para codificar qualquer alfabeto em qualquer um), Curve25519 para criar e verificar assinaturas compatíveis (com opções em esteróides ), Blake2b para calcular um dos hashes (disponível apenas a partir do PHP 7.2) etc.


Aqui, tenho que agradecer a Inal Kardanov por algumas dicas valiosas que me direcionaram ao compositor, em vez dos habituais, mas desatualizados, arquivos incluídos.


Após alguns meses, o WavesKit viu a luz , saiu da versão beta e agora está pronto para trabalhar com todas as funcionalidades padrão da plataforma Waves. Todas as transações disponíveis na rede principal podem ser facilmente criadas, assinadas e enviadas usando apenas um pacote em execução em todas as versões de PHP de 64 bits da versão 5.6 inclusive.


Conectamos o WavesKit ao nosso projeto:


composer require deemru/waveskit 

Nós usamos:


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

No exemplo acima, criamos um objeto WavesKit que é executado na rede de teste "T". Defina a frase inicial a partir da qual as chaves e o endereço da conta são calculados automaticamente com base na chave pública. Em seguida, criamos uma transação de transferência de 0.00000001 Waves a partir da frase de endereço calculada automaticamente por semente para o endereço "teste", transferimos para a assinatura com uma chave privada e os enviamos para a rede. Depois disso, verificamos que a transação foi confirmada com sucesso pela rede.


O trabalho com transações está concentrado em funções começando com tx . Para uma melhor compreensão do trabalho com transações, você pode estudar a documentação do WavesKit ou recorrer imediatamente a exemplos visuais em testes de integração contínuos .


Como o WavesKit se desenvolveu sob condições reais, ele já possui recursos avançados. O primeiro recurso matador é a função de garantia , que controla a obtenção do nível de confiança exigido de que a transação não foi perdida, mas foi confirmada e alcançou o número necessário de confirmações na rede.


Outro mecanismo à prova de balas é como o WavesKit se comunica com os nós. Em condições de estufa, a estrutura funciona apenas com o nó principal, mantendo uma conexão constante com ele, mas, no caso de erros, pode alternar automaticamente para os nós de backup. Se você instalar uma matriz de nós de backup, poderá chamar a função setBestNode para determinar o melhor nó como o principal pelo valor máximo da altura atual e velocidade de resposta. Agora adicione a isso o cache interno da consulta e sinta o cuidado dos usuários e dos proprietários dos nós.


Um dos mecanismos avançados mais recentes é a função txMonitor . Ela apareceu em conexão com a necessidade de responder às transações recebidas em tempo real. Essa função resolve completamente todas as nuances associadas ao processamento de transações na blockchain. Chega de problemas, basta instalar sua função de retorno de chamada com as opções desejadas e aguardar novas transações que iniciarão seus processos. Por exemplo, meu outro projeto VECRO é completamente construído em torno dessa função, você pode aprender facilmente como ele funciona diretamente no código do projeto .


Eu gosto de código aberto, esta é uma das maiores realizações da humanidade. Como sou o único desenvolvedor e atingi o ponto em que todas as minhas necessidades foram resolvidas, convido você a usar e contribuir com o WavesKit .

Source: https://habr.com/ru/post/pt446110/


All Articles