WavesKit - Framework PHP pour travailler avec la blockchain Waves

Мне нравится PHP pour une rapidité de développement et une excellente portabilité. C'est très bien quand on a toujours un outil dans sa poche, prêt à résoudre les problèmes.

C'était vraiment dommage quand, en se familiarisant avec la blockchain nationale Plateforme des vagues il n'avait pas de SDK PHP prêt à l'emploi dans son arsenal. Eh bien, je devais l'écrire.

Au début, j'ai dû utiliser nœuds pour signer des transactions. Ainsi, pour gérer trois adresses, il fallait lancer trois nœuds... C'était un spectacle pitoyable, même si cela résolvait certains problèmes. Jusqu’à ce que l’on comprenne que s’appuyer sur des nœuds était une impasse. Premièrement, en raison de fonctionnalités limitées API, deuxièmement, à cause de la vitesse (les nœuds étaient très lents à l’époque).

J'ai commencé deux emplois parallèles. La première consiste à créer un explorateur de blockchain qui sera rapide et totalement indépendant de l'API du nœud. La seconde consiste à rassembler toutes les fonctions permettant de travailler avec la plateforme Waves en un seul endroit. C'est ainsi que les projets sont apparus w8io и Kit Vagues.

La première étape dans les coulisses de la blockchain Waves a été navigateur w8io. Cela n'a pas été facile, mais nous avons quand même 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 (programme de prime aux bogues D'ailleurs, ça marche pour eux, ils paient pour les erreurs trouvées). Vous pouvez en savoir plus sur les fonctionnalités du navigateur w8io dans cette rubrique : https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

En travaillant sur w8io, j'avais déjà des doutes, mais lorsque le travail a atteint sa fin logique et que j'ai commencé à créer le SDK, mes doutes se sont confirmés. Je n'ai trouvé nulle part certaines fonctions, y compris les plus importantes, les cryptographiques. Ensuite, j'ai commencé par fabriquer mes propres briques pour les fondations. Voici comment ils sont nés : ABCode pour encoder en base58 (en fait pour encoder n'importe quel alphabet en n'importe lequel), Curve25519 pour créer et vérifier des signatures compatibles (avec options sous stéroïdes), Blake2b pour calculer un des hachages (qui n'était disponible que depuis PHP 7.2), etc.

C'est là que je dois remercier Inala Kardanova pour quelques conseils précieux qui m'ont orienté dans la direction compositeur au lieu des fichiers d'inclusion qui me sont familiers, mais obsolètes.

Après quelques mois WavesKit est sorti, sortit de versions bêta et est désormais prêt à fonctionner avec toutes les fonctionnalités standard de la plateforme Waves. Tous disponibles dans réseau principal les transactions peuvent être facilement créées, signées et envoyées à l'aide d'un seul package, fonctionnant sur toutes les versions 64 bits de PHP à partir de la version 5.6 incluse.

Nous connectons WavesKit à notre projet :

composer require deemru/waveskit

Nous utilisons:

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 s'exécute sur le testnet « T ». Nous installons une phrase de départ à partir de laquelle les clés et l'adresse du compte sont automatiquement calculées en fonction de la clé publique. Ensuite, nous créons une transaction de transfert 0.00000001 Waves de l'adresse calculée automatiquement à l'aide de la phrase de départ vers l'adresse alias « test », la transférons pour qu'elle soit signée avec une clé privée et l'envoyons au réseau. Après cela, nous nous assurons que la transaction est confirmée avec succès par le réseau.

Le travail avec les transactions est concentré dans fonctions commençant par tx. Pour une meilleure compréhension du travail avec les transactions, vous pouvez étudier Documentation WavesKit ou se tourner immédiatement vers des exemples illustratifs dans tests d'intégration continue.

Étant donné que WavesKit a été développé dans le monde réel, il possède déjà des fonctionnalités avancées. La première fonctionnalité qui tue est assurer la fonction, qui contrôle l'atteinte du niveau de confiance requis que la transaction n'a pas été perdue, mais, au contraire, a été confirmée et a atteint le nombre requis de confirmations dans le réseau.

Un autre mécanisme à toute épreuve est la manière dont WavesKit communique avec les nœuds. Dans des conditions de serre, le framework fonctionne uniquement avec le nœud principal, en maintenant une connexion constante avec lui, mais en cas d'erreurs, il peut automatiquement passer aux nœuds de sauvegarde. Si vous configurez un tableau de nœuds de sauvegarde, vous pouvez appeler la fonction setMeilleurNoeud pour déterminer le meilleur nœud comme principal en fonction de la valeur maximale de la hauteur actuelle et de la vitesse de réponse. Ajoutez maintenant à cela un cache de requêtes interne et sentez-vous pris en charge à la fois par les utilisateurs et les propriétaires de nœuds.

L'un des derniers mécanismes avancés est la fonction txMoniteur. Cela est apparu en raison de la nécessité de répondre aux transactions entrantes en temps réel. Cette fonction résout complètement toutes les nuances associées au traitement des transactions dans la blockchain. Plus de soucis, configurez simplement votre fonction de rappel avec les options souhaitées et attendez de nouvelles transactions pour démarrer vos processus. Par exemple, un autre de mes projets VÉCRO entièrement construit autour de cette fonction, vous pouvez facilement étudier directement son fonctionnement dans le code du projet.

J'adore l'open source, c'est l'une des plus grandes réalisations de l'humanité. Puisque je suis le seul développeur et que j'ai atteint un état où tous mes besoins sont résolus, je vous invite à utiliser et à contribuer à Kit Vagues.

Source: habr.com

Ajouter un commentaire