WavesKit — Framework PHP pour travailler avec la blockchain Waves

J'aime PHP pour la rapiditĂ© de dĂ©veloppement et une excellente portabilitĂ©. C'est trĂšs bien d'avoir toujours dans sa poche un outil prĂȘt Ă  rĂ©soudre des problĂšmes.

C'Ă©tait assez dĂ©cevant, lors de ma dĂ©couverte de la blockchain nationale Waves Platform qu'il n'y avait pas de SDK PHP prĂȘt Ă  l'emploi dans son arsenal. Eh bien, j'ai dĂ» l'Ă©crire.

Au dĂ©but, j'avais besoin d'utiliser les nƓuds pour signer des transactions. Ainsi, pour gĂ©rer trois adresses, je devais exĂ©cuter trois nƓuds
 C'Ă©tait un spectacle pitoyable, bien que cela rĂ©solvait certains problĂšmes. Jusqu'Ă  ce que je comprenne qu'il ne fallait pas compter sur les nƓuds — c'est une impasse. PremiĂšrement, Ă  cause de la fonctionnalitĂ© limitĂ©e, API, deuxiĂšmement, Ă  cause de la vitesse (Ă  l'Ă©poque, les nƓuds Ă©taient trĂšs lents).

J'ai commencĂ© deux travaux parallĂšles. L'un Ă©tait de crĂ©er un explorateur de blockchain, qui serait rapide et totalement indĂ©pendant des API des nƓuds. Le second Ă©tait de rassembler toutes les fonctions pour travailler avec Waves Platform au mĂȘme endroit. C'est ainsi que des projets comme w8io et WavesKit.

Le premier pas derriĂšre les coulisses de la blockchain Waves a Ă©tĂ© l'explorateur w8io. Ce n'Ă©tait pas simple, mais j'ai nĂ©anmoins rĂ©ussi Ă  Ă©crire un calcul indĂ©pendant de tous les soldes et mĂȘme Ă  trouver une erreur dans les calculs sur les nƓuds d'origine (le programme bug-bounty au fait, chez eux, ça fonctionne, ils paient pour les erreurs trouvĂ©es). Vous pouvez explorer les fonctionnalitĂ©s de l'explorateur w8io en dĂ©tail dans ce sujet : https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

Dans le processus de travail sur w8io, j'avais déjà des doutes, mais lorsque le travail est arrivé à une fin logique et que j'ai commencé à créer le SDK, les doutes se sont confirmés. Je n'ai pu trouver nulle part certaines fonctions, y compris les plus importantes, celles de cryptographie. Alors j'ai commencé à créer mes propres briques pour le fondement. Ainsi sont nés : ABCode pour le codage en base58 (en réalité pour coder n'importe quel alphabet dans n'importe quel), Curve25519 pour la création et la vérification de signatures compatibles (avec des variantes sur des stéroïdes), Blake2b pour le calcul d'un des hachages (qui n'était disponible qu'à partir de PHP 7.2) etc.

Ici, je dois remercier Inal Kardanov pour quelques conseils précieux qui m'ont orienté vers composer au lieu des fichiers include que je connaissais, mais qui sont obsolÚtes.

AprĂšs quelques mois WavesKit a vu le jour, est sorti de version bĂȘta et est maintenant prĂȘt Ă  fonctionner avec toutes les fonctionnalitĂ©s standard de la plateforme Waves. Tout ce qui est disponible sur le rĂ©seau principal Les transactions peuvent ĂȘtre facilement créées, signĂ©es et envoyĂ©es par un seul package, fonctionnant sur toutes les versions 64 bits de PHP Ă  partir de 5.6 inclusivement.

Connectez WavesKit Ă  votre projet :

composer require deemru/waveskit

Utilisation :

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

Dans l'exemple ci-dessus, nous créons un objet WavesKit qui fonctionne sur le réseau de test « T ». Nous définissons la phrase de départ, à partir de laquelle les clés et l'adresse du compte sont automatiquement calculées sur la base de la clé publique. Ensuite, nous créons une transaction de transfert de 0.00000001 Waves depuis l'adresse automatiquement calculée selon la phrase de départ vers l'adresse alias « test », la faisons signer par la clé privée et l'envoyons dans le réseau. AprÚs cela, nous nous assurons que la transaction a été confirmée avec succÚs par le réseau.

Le travail avec les transactions est concentré dans les fonctions commençant par tx. Pour mieux comprendre le travail avec les transactions, vous pouvez consulter la documentation WavesKit ou vous pouvez directement vous référer aux exemples clairs dans les tests d'intégration continue.

Comme WavesKit a évolué dans des conditions d'utilisation réelles, il a déjà incorporé des fonctionnalités avancées. La premiÚre fonctionnalité phare est la fonction ensure, qui contrÎle l'atteinte du niveau de confiance requis, assurant que la transaction n'est pas perdue, mais a été confirmée et a atteint le nombre nécessaire de confirmations dans le réseau.

Un autre mĂ©canisme infaillible est la maniĂšre dont WavesKit communique avec les nƓuds. Dans des conditions idĂ©ales, le framework fonctionne uniquement avec le nƓud principal, maintenant une connexion constante avec celui-ci, mais en cas d'erreurs, il peut automatiquement basculer vers des nƓuds de secours. Si vous configurez un tableau de nƓuds de secours, vous pouvez appeler la fonction setBestNode pour dĂ©terminer le meilleur nƓud principal basĂ© sur la valeur maximale de la hauteur actuelle et de la vitesse de rĂ©ponse. Maintenant, ajoutez Ă  cela le cache interne des requĂȘtes et prenez soin des utilisateurs ainsi que des propriĂ©taires de nƓuds.

Un des derniers mécanismes avancés est la fonction txMonitor. Cela est né de la nécessité de réagir aux transactions entrantes en temps réel. Cette fonctionnalité résout entiÚrement tous les enjeux liés au traitement des transactions sur la blockchain. Plus de douleur, il vous suffit de définir votre fonction de rappel avec les options souhaitées et d'attendre les nouvelles transactions qui déclencheront vos processus. Par exemple, un autre de mes projets VECRO est entiÚrement construit autour de cette fonction, vous pouvez tranquillement explorer comment elle fonctionne directement dans le code du projet.

J'aime l'open source, c'est l'une des plus grandes rĂ©alisations de l'humanitĂ©. Comme je suis le seul dĂ©veloppeur et que j'ai atteint un Ă©tat oĂč tous mes besoins sont satisfaits, je vous invite Ă  utiliser et Ă  contribuer Ă  WavesKit.

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster