J'aime 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 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 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, , 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 et .
Le premier pas derrière les coulisses de la blockchain Waves a été . 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 ( 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 :
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 : pour le codage en base58 (en réalité pour coder n'importe quel alphabet dans n'importe quel), pour la création et la vérification de signatures compatibles (avec des variantes ), pour le calcul d'un des hachages (qui n'était disponible qu'à partir de PHP 7.2) etc.
Ici, je dois remercier pour quelques conseils précieux qui m'ont orienté vers au lieu des fichiers include que je connaissais, mais qui sont obsolètes.
Après quelques mois , est sorti de et est maintenant prêt à fonctionner avec toutes les fonctionnalités standard de la plateforme Waves. Tout ce qui est disponible sur 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/waveskitUtilisation :
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 . Pour mieux comprendre le travail avec les transactions, vous pouvez consulter ou vous pouvez directement vous référer aux exemples clairs dans .
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 , 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 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 . 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 est entièrement construit autour de cette fonction, vous pouvez tranquillement explorer comment elle fonctionne directement .
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 à .
Source : habr.com
