šŸ„‡Hoe maak je een SDN — acht tools met open source | ProHoster

Ik hou ervan PHP voor ontwikkelsnelheid en uitstekende draagbaarheid. Het is heel fijn om een altijd klaar instrument achter de hand te hebben voor het oplossen van problemen.

Het was behoorlijk teleurstellend toen ik kennismaakte met de binnenlandse blockchain Waves Platform en ontdekte dat er geen kant-en-klare SDK voor PHP beschikbaar was. Nou, ik moest het zelf schrijven.

In het begin moest ik nodes gebruiken om transacties te ondertekenen. Zo moest ik voor het beheren van drie adressen drie nodes opstarten… Het was een treurig schouwspel, hoewel het enkele taken oploste. Totdat het besef kwam dat het vertrouwen op nodes een doodlopende weg was. Ten eerste vanwege de beperkte functionaliteit, API, en ten tweede vanwege de snelheid (in die dagen waren nodes zeer traag).

Ik begon twee parallelle projecten. EƩn was het maken van een blockchain-explorer die snel was en volledig onafhankelijk van de API van nodes. De tweede was het samenbrengen van alle functies voor het werken met de Waves Platform op ƩƩn plek. Zo ontstonden de projecten w8io en WavesKit.

De eerste stap achter de schermen van de Waves blockchain was de explorer w8io. Het was geen gemakkelijke taak, maar ik slaagde erin een onafhankelijke berekening van alle saldo's te schrijven en zelfs een fout in de berekeningen op de originele nodes te vinden (de bug-bounty programma werkt trouwens voor hen, ze betalen voor gevonden fouten). U kunt de functies van de w8io-explorer in dit onderwerp verder verkennen: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

Tijdens het werken aan w8io had ik al twijfels, maar toen ik op het punt stond om de SDK te ontwikkelen, bevestigden mijn twijfels zich. Ik kon nergens bepaalde functies vinden, inclusief de belangrijkste cryptografische. Toen begon ik met het maken van mijn eigen bouwstenen voor de fundering. Zo ontstonden: ABCode voor codering in base58 (eigenlijk voor codering van elk alfabet in elk), Curve25519 voor het maken en verifiëren van compatibele handtekeningen (met varianten op steroïden), Blake2b voor het berekenen van een van de hashes (die alleen beschikbaar was vanaf PHP 7.2) enzovoort.

Hier wil ik bedanken Inal Kardano voor enkele waardevolle aanwijzingen die mij op weg hebben geholpen naar composer in plaats van de vertrouwde, maar verouderde, include-bestanden.

Na een paar maanden zag WavesKit het licht, kwam uit de bèta-versie en is nu klaar voor gebruik met alle standaard functionaliteit van het Waves-platform. Alles beschikbaar in het hoofdnet transacties kunnen eenvoudig worden gecreëerd, ondertekend en verzonden door de krachten van één enkel pakket, dat op alle 64-bits versies van PHP vanaf 5.6 werkt.

Voeg WavesKit toe aan uw project:

composer require deemru/waveskit

Gebruik:

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

In het voorbeeld hierboven creƫren we een WavesKit-object dat werkt in het testnet 'T'. We stellen de seedphrase in, waarvan automatisch de sleutels en het rekeningadres op basis van de openbare sleutel worden berekend. Vervolgens creƫren we een transfertransactie van 0.00000001 Waves van het automatisch berekende adres op basis van de seedphrase naar het aliasadres 'test', ondertekenen het met de privƩsleutel en verzenden het naar het netwerk. Daarna zorgen we ervoor dat de transactie met succes door het netwerk is bevestigd.

Het werken met transacties is gefocust op functies die beginnen met tx. Voor een beter begrip van het werken met transacties kunt u de documentatie van WavesKit bestuderen of meteen naar praktische voorbeelden in de continue integratietests.

Omdat WavesKit zich in een realistische gebruiksomgeving heeft ontwikkeld, heeft het al geavanceerde functies gekregen. De eerste killerfunctie is de functie ensure, die ervoor zorgt dat het vereiste vertrouwensniveau is bereikt, zodat de transactie niet verloren gaat, maar in tegendeel bevestigd is en het vereiste aantal bevestigingen in het netwerk heeft bereikt.

Een ander kogelvrij mechanisme is hoe WavesKit communiceert met knooppunten. In ideale omstandigheden werkt het framework alleen met het hoofdknoppunt en onderhoudt het een constante verbinding, maar kan het bij fouten automatisch overschakelen naar back-upknooppunten. Als u een array van back-upknooppunten instelt, kunt u de functie setBestNode aanroepen om het beste knooppunt te bepalen als hoofd op basis van de maximale waarde van de huidige hoogte en reactietijd. Voeg nu hieraan de interne cache voor verzoeken toe en voel de zorg voor zowel gebruikers als knooppunteigenaren.

Een van de nieuwste geavanceerde mechanismen is de functie txMonitorHet is ontstaan uit de noodzaak om in realtime op inkomende transacties te reageren. Deze functie lost alle details op die verband houden met de verwerking van transacties op de blockchain volledig op. Geen gedoe meer, je stelt gewoon je callbackfunctie in met de gewenste opties en wacht op nieuwe transacties die je processen zullen activeren. Bijvoorbeeld, nog een van mijn projecten VECRO is volledig gebaseerd op deze functie, je kunt rustig bestuderen hoe het werkt rechtstreeks in de code van het project.

Ik hou van open source, het is een van de grootste prestaties van de mensheid. Aangezien ik de enige ontwikkelaar ben en in de situatie ben gekomen dat al mijn behoeften zijn vervuld, nodig ik je uit om te gebruiken en bij te dragen aan WavesKit.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster