WavesKit - estrutura PHP para trabalhar com o blockchain Waves

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

Foi uma pena quando, ao conhecer o blockchain nacional Plataforma de Ondas ele não tinha um PHP SDK pronto em seu arsenal. Bem, eu tive que escrever.

No começo eu tive que usar nós para assinar transações. Assim, para gerenciar três endereços foi necessário lançar três nós... Foi uma visão lamentável, embora tenha resolvido alguns problemas. Até que chegou o entendimento de que confiar em nós era um beco sem saída. Em primeiro lugar, devido à funcionalidade limitada API, em segundo lugar, por causa da velocidade (os nós eram muito lentos naquela época).

Comecei dois trabalhos paralelos. Uma delas é criar um explorador de blockchain que seja rápido e completamente independente da API do nó. A segunda é reunir todas as funções para trabalhar com a Plataforma Waves em um só lugar. Foi assim que surgiram os projetos w8io и Kit Ondas.

O primeiro passo nos bastidores do blockchain Waves foi navegador w8io. Não foi fácil, mas ainda conseguimos escrever um cálculo independente de todos os saldos e até encontrar um erro nos cálculos dos nós originais (programa de recompensas por 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

Enquanto trabalhava no w8io já tinha dúvidas, mas quando o trabalho chegou ao fim lógico e comecei a criar o SDK, minhas dúvidas se confirmaram. Não encontrei algumas funções em lugar nenhum, inclusive as mais importantes, as criptográficas. Então comecei fazendo meus próprios tijolos para a fundação. Foi assim que eles nasceram: Código ABC para codificar para base58 (na verdade, para codificar qualquer alfabeto para qualquer), Curve25519 para criar e verificar assinaturas compatíveis (com opções com esteróides), Blake2b para calcular um dos hashes (que só estava disponível desde o PHP 7.2), etc.

É aqui que tenho que agradecer Inala Kardanova por alguns conselhos valiosos que me apontaram na direção compor em vez dos arquivos de inclusão que me são familiares, mas desatualizados.

Depois de alguns meses WavesKit foi lançado, saiu versões beta e agora está pronto para funcionar com todas as funcionalidades padrão da plataforma Waves. Todos disponíveis em rede principal as transações podem ser facilmente criadas, assinadas e enviadas usando apenas um pacote, rodando em todas as versões de 64 bits do PHP a partir de 5.6 inclusive.

Conectamos WavesKit ao nosso projeto:

composer require deemru/waveskit

Nós 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 acima, criamos um objeto WavesKit que roda na testnet “T”. Instalamos uma frase inicial a partir da qual as chaves e o endereço da conta são calculados automaticamente com base na chave pública. A seguir, criamos uma transação de transferência 0.00000001 Waves do endereço calculado automaticamente usando a frase-semente para o endereço alternativo “teste”, transferimos para ser assinado com uma chave privada e enviamos para a rede. Depois disso, garantimos 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 de como trabalhar com transações, você pode estudar Documentação do WavesKit ou recorrer imediatamente a exemplos ilustrativos em testes de integração contínua.

Como o WavesKit foi desenvolvido para uso no mundo real, ele já possui recursos avançados. O primeiro recurso matador é garantir a função, que controla o alcance do nível de confiança exigido de que a transação não foi perdida, mas, pelo contrário, foi confirmada e atingiu 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 casa de vegetação, o framework funciona apenas com o nó principal, mantendo uma conexão constante com ele, mas em caso de erros pode mudar automaticamente para os de backup. Se você configurar uma matriz de nós de backup, poderá chamar a função setBestNode determinar o melhor nó como o principal com base no valor máximo da altura atual e na velocidade de resposta. Agora adicione a isso um cache de consulta interno e sinta-se cuidado tanto pelos usuários quanto pelos proprietários dos nós.

Um dos mais recentes mecanismos avançados é a função txMonitor. Surgiu devido à necessidade de responder às transações recebidas em tempo real. Esta função resolve completamente todas as nuances associadas ao processamento de transações no blockchain. Chega de dor, basta configurar sua função de callback com as opções desejadas e aguardar novas transações para iniciar seus processos. Por exemplo, outro projeto meu VECRO completamente construído em torno desta função, você pode facilmente estudar como ela funciona diretamente no código do projeto.

Adoro código aberto, é uma das maiores conquistas da humanidade. Como sou o único desenvolvedor e cheguei a um estado onde todas as minhas necessidades foram atendidas, convido você a usar e contribuir para Kit Ondas.

Fonte: habr.com

Adicionar um comentário