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