J'aime PHP pour sa rapidité de développement et son excellente portabilité. C'est très bien quand il y a toujours un outil prêt à résoudre les problèmes dans votre poche.
C'était plutôt décevant quand, lors de la rencontre avec la blockchain domestique de la plateforme Waves , il n'y 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 des nœuds pour signer des transactions. Donc, pour gérer trois adresses, trois nœuds ont dû être lancés ... C'était un spectacle misérable, bien qu'il ait résolu certains problèmes. Jusqu'à ce que l'on comprenne que compter sur les nœuds est une impasse. D'une part, à cause de la fonctionnalité limitée de l' API , et d'autre part, à cause de la vitesse (à l'époque, les nœuds étaient très lents).
J'ai commencé deux travaux parallèles. L'une consiste à créer un navigateur de chaîne de blocs qui sera rapide et complètement indépendant des nœuds API. La seconde consiste à rassembler toutes les fonctions pour travailler avec la plate-forme Waves en un seul endroit. Il y avait donc des projets w8io et WavesKit .
La première étape dans les coulisses de la blockchain Waves a été le navigateur w8io . Ce n'était pas facile, mais il était toujours possible d'écrire un calcul indépendant de tous les soldes et même de trouver une erreur dans les calculs sur les nœuds d'origine ( le programme bug-bounty, en passant, fonctionne pour eux, ils paient pour les erreurs trouvées). Vous pouvez en savoir plus sur la fonctionnalité du navigateur w8io dans cette rubrique: 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 a pris fin logiquement et j'ai commencé à créer le SDK, les doutes ont été confirmés. Je n'ai trouvé aucune fonction nulle part, y compris la plus importante, cryptographique. J'ai ensuite commencé par créer mes propres briques pour la fondation. Ils sont donc nés: ABCode pour encoder en base58 (en fait pour encoder n'importe quel alphabet dans n'importe quel), Curve25519 pour créer et vérifier des signatures compatibles (avec des options sur les stéroïdes ), Blake2b pour calculer l'un des hachages (qui n'était disponible qu'à partir de PHP 7.2) etc.
Ici, je dois remercier Inal Kardanov pour quelques précieux conseils qui m'ont orienté vers le compositeur au lieu des fichiers d'inclusion habituels, mais obsolètes.
Après quelques mois, WavesKit a vu le jour , a quitté la version bêta et est maintenant prêt à fonctionner avec toutes les fonctionnalités standard de la plateforme Waves. Toutes les transactions disponibles sur le réseau principal 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 5.6 inclus.
Nous connectons WavesKit à notre projet:
composer require deemru/waveskit
Nous utilisons:
use deemru\WavesKit; $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 réseau de test "T". Définissez la 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 de 0,00000001 Waves de la phrase d'adresse calculée automatiquement par seed vers l'adresse d'alias "test", la transférons à la signature avec une clé privée et l'envoyons au réseau. Après cela, nous vérifions 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 une meilleure compréhension de l'utilisation des transactions, vous pouvez étudier la documentation WavesKit ou vous tourner immédiatement vers des exemples visuels dans des tests d'intégration continue .
Étant donné que WavesKit s'est développé dans des conditions réelles, il dispose déjà de fonctionnalités avancées. La première caractéristique de tueur est la fonction assurer , qui contrôle la réalisation du niveau requis de confiance que la transaction n'a pas été perdue, mais a plutôt été confirmée et a atteint le nombre requis de confirmations sur le réseau.
Un autre mécanisme à l'épreuve des balles est la façon dont WavesKit communique avec les nœuds. Dans des conditions de serre, le framework ne fonctionne qu'avec le nœud principal, en maintenant une connexion constante avec lui, mais en cas d'erreur, il peut automatiquement basculer vers les nœuds de sauvegarde. Si vous installez un tableau de nœuds de sauvegarde, vous pouvez appeler la fonction setBestNode pour déterminer le meilleur nœud comme principal par la valeur maximale de la hauteur et de la vitesse de réponse actuelles. Ajoutez maintenant à cela le cache de requête interne et sentez l'attention des utilisateurs et des propriétaires de nœuds.
L'un des derniers mécanismes avancés est la fonction txMonitor . Elle est apparue en lien avec 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 douleur, installez simplement votre fonction de rappel avec les options souhaitées et attendez de nouvelles transactions qui démarreront vos processus. Par exemple, mon autre projet VECRO est entièrement construit autour de cette fonction, vous pouvez facilement apprendre comment il fonctionne directement dans le code du projet .
J'aime l'open source, c'est l'une des plus grandes réalisations de l'humanité. Étant donné que je suis le seul développeur et que j'ai atteint le point où tous mes besoins ont été résolus, je vous invite à utiliser et à contribuer à WavesKit .