WavesKit - PHP-framework voor het werken met de Waves-blockchain

Ik vind het leuk PHP voor snelheid van ontwikkeling en uitstekende draagbaarheid. Het is heel goed als je altijd een tool bij de hand hebt om problemen op te lossen.

Het was best jammer toen, bij het kennismaken met de binnenlandse blockchain Golven Platform hij had geen kant-en-klare PHP SDK in zijn arsenaal. Nou, ik moest het schrijven.

Eerst moest ik gebruiken knooppunten transacties te ondertekenen. Dus om drie adressen te beheren, moest je drie knooppunten gebruiken ... Het was een zielig gezicht, hoewel het enkele problemen oploste. Totdat het besef kwam dat vertrouwen op nodes een doodlopende weg is. Ten eerste vanwege de beperkte functionaliteit API, ten tweede vanwege de snelheid (knooppunten waren in die tijd erg traag).

Ik begon met twee parallelle banen. Een daarvan is om een ​​blockchain-verkenner te maken die snel en volledig onafhankelijk is van de knooppunt-API. De tweede is om alle functies voor het werken met het Waves Platform op één plek te verzamelen. Zo zijn de projecten ontstaan. w8io и GolvenKit.

De eerste stap achter de schermen van de Waves-blockchain was w8io-browser. Het was niet gemakkelijk, maar slaagde er toch in om een ​​onafhankelijke berekening van alle saldi te schrijven en zelfs een fout te vinden in de berekeningen op de originele knooppunten (bug bounty-programma Overigens werkt het voor hen, zij betalen voor de gevonden fouten). U kunt meer leren over de functionaliteit van de w8io-browser in deze thread: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

Tijdens het werken aan w8io had ik al twijfels, maar toen het werk tot een logisch einde kwam en ik begon met het maken van de SDK, werden mijn twijfels bevestigd. Ik kon sommige functies nergens vinden, inclusief de belangrijkste cryptografische. Daarna ben ik begonnen met het maken van mijn funderingsstenen. Zo zijn ze geboren: ABC-code om te coderen in base58 (eigenlijk om elk alfabet naar elk alfabet te coderen), Curve 25519 om compatibele handtekeningen te maken en te verifiëren (met options op steroïden), Blake2b om een ​​van de hashes te berekenen (die pas beschikbaar is sinds PHP 7.2), enz.

Hier moet ik bedanken Inala Kardanova voor wat waardevol advies dat me naar stuurde componist in plaats van de voor mij gebruikelijke, maar verouderde, bestanden opnemen.

Na een paar maanden WavesKit zag het levenslicht, kwam uit beta versies en is nu klaar om te werken met alle standaardfunctionaliteit van het Waves-platform. Allemaal binnen verkrijgbaar hoofd netwerk transacties kunnen eenvoudig worden aangemaakt, ondertekend en verzonden met slechts één pakket dat draait op alle 64-bit versies van PHP vanaf 5.6.

We verbinden WavesKit met ons project:

composer require deemru/waveskit

We gebruiken:

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 bovenstaande voorbeeld maken we een WavesKit-object dat draait op testnet "T". We stellen de seed-zin in, van waaruit de sleutels en het adres van het account automatisch worden berekend op basis van de openbare sleutel. Vervolgens maken we een overdrachtstransactie 0.00000001 Waves van het adres dat automatisch wordt berekend op basis van de seed-zin naar het adres van de "test" -alias, dragen het over voor ondertekening met de privésleutel en sturen het naar het netwerk. Daarna zorgen we ervoor dat de transactie succesvol wordt bevestigd door het netwerk.

Transacties staan ​​centraal functies die beginnen met tx. Voor een beter begrip van het werken met transacties kun je studeren WavesKit-documentatie of ga direct naar de illustratieve voorbeelden in continue integratietesten.

Omdat WavesKit in de praktijk is ontwikkeld, heeft het al geavanceerde functies. De eerste killer-functie is functie verzekeren, die het bereiken van het vereiste niveau van vertrouwen regelt dat de transactie niet verloren is gegaan, maar integendeel is bevestigd en het vereiste aantal bevestigingen in het netwerk heeft bereikt.

Een ander kogelvrij mechanisme is hoe WavesKit communiceert met knooppunten. In kasomstandigheden werkt het framework alleen met het hoofdknooppunt, waardoor er een constante verbinding mee wordt onderhouden, maar in geval van fouten kan het automatisch overschakelen naar back-up. Als u een reeks stand-byknooppunten instelt, kunt u de functie aanroepen setBestNode om het beste knooppunt als hoofdknooppunt te bepalen door de maximale waarde van de huidige hoogte en reactiesnelheid. Voeg hier nu een interne querycache aan toe en voel de zorg van zowel gebruikers als node-eigenaren.

Een van de nieuwste geavanceerde mechanismen is de functie txMonitor. Het verscheen in verband met de noodzaak om in real time te reageren op inkomende transacties. Deze functie lost alle nuances die verband houden met de verwerking van transacties in de blockchain volledig op. Geen pijn meer, stel gewoon uw callback-functie in met de opties die u wilt en wacht op nieuwe transacties om uw processen te starten. Bijvoorbeeld weer een van mijn projecten VECRO volledig gebouwd rond deze functie, kunt u gemakkelijk leren hoe het goed werkt in de projectcode.

Ik hou van open source, het is een van de grootste prestaties van de mensheid. Aangezien ik de enige ontwikkelaar ben en de staat heb bereikt dat al mijn behoeften zijn opgelost, nodig ik je uit om te gebruiken en eraan bij te dragen GolvenKit.

Bron: www.habr.com

Voeg een reactie