WavesKit — un cadru PHP pentru lucrul cu blockchain-ul Waves

Îmi place PHP pentru rapiditatea dezvoltării și portabilitatea excelentă. Este foarte bine când ai întotdeauna la îndemână un instrument gata să rezolve problemele.

A fost destul de dezamăgitor când, în timpul întâlnirii cu blockchain-ul autohton Waves Platform nu am găsit un SDK gata pe PHP. Ei bine, a trebuit să-l scriu eu.

La început, a trebuit să folosesc (nodes). Configurația pentru noduri este scrisă pentru semnarea tranzacțiilor. Astfel, pentru a gestiona trei adrese, a trebuit să pornesc trei noduri... A fost o imagine jalnică, deși rezolva unele probleme. Până când am realizat că a te baza pe noduri este un impas. În primul rând, din cauza funcționalității limitate, API, în al doilea rând, din cauza vitezei (în acele zile nodurile erau foarte lente).

Am început două lucrări paralele. Una – să fac un explorator de blockchain care să fie rapid și complet independent de API-urile nodurilor. Cealaltă – să adun toate funcțiile pentru a lucra cu Waves Platform într-un singur loc. Așa au apărut proiectele w8io și WavesKit.

Primul pas în culisele blockchain-ului Waves a fost exploratorul w8io. Nu a fost simplu, dar totuși am reușit să scriu un calcul independent al tuturor soldurilor și chiar am găsit o eroare în calculele pe nodurile originale (programa bug-bounty de altfel, funcționează la ei, plătesc pentru erorile găsite). Puteți studia în detaliu funcționalitatea exploratorului w8io în această temă: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

În procesul de lucru asupra lui w8io aveam deja îndoieli, dar când munca a ajuns la final logic și am început să creez SDK-ul, îndoielile s-au confirmat. Nu am reușit să găsesc nicaieri unele funcții, inclusiv cele mai importante, criptografice. Atunci am început să creez cărămizile mele pentru fundație. Așa au luat naștere: ABCode pentru codificarea în base58 (de fapt pentru codificarea oricărui alfabet în oricare), Curve25519 pentru crearea și verificarea semnăturilor compatibile (cu variantele pe steroizi), Blake2b pentru calcularea unuia dintre hash-uri (care a fost disponibil doar începând cu PHP 7.2) etc.

Aici trebuie să îi mulțumesc Inal Kardanov pentru câteva sfaturi valoroase care m-au îndrumat în direcția composer în loc de fișierele include pe care le cunoșteam, dar care erau învechite.

După câteva luni WavesKit a văzut lumina zilei, a ieșit din versiunea beta și acum este pregătit să lucreze cu toate funcționalitățile standard ale platformei Waves. Tot ce este disponibil în rețeaua principală Tranzacțiile pot fi ușor create, semnate și trimise de un singur pachet care funcționează pe toate versiunile PHP pe 64 de biți, începând cu 5.6 inclusiv.

Conectăm WavesKit în proiectul nostru:

composer require deemru/waveskit

Folosim:

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

În exemplul de mai sus, creăm un obiect WavesKit care funcționează în rețeaua de testare „T”. Setăm fraza seed din care se calculează automat cheile și adresa contului pe baza cheii publice. Apoi, creăm o tranzacție de transfer de 0.00000001 Waves de la adresa calculată automat pe baza frazei seed către adresa alias „test”, o semnăm cu cheia privată și o trimitem în rețea. După aceasta, ne asigurăm că tranzacția a fost confirmată cu succes de rețea.

Lucrul cu tranzacțiile se concentrează în funcțiile care încep cu tx. Pentru o mai bună înțelegere a funcționării tranzacțiilor, puteți studia documentația WavesKit sau puteți să consultați direct exemplele vizuale din teste de integrare continuă..

Deoarece WavesKit a fost dezvoltat în condiții de utilizare reală, acesta are deja caracteristici avansate. Prima caracteristică killer este funcția ensure, care controlează atingerea nivelului necesar de încredere că tranzacția nu s-a pierdut, ci, dimpotrivă, a fost confirmată și a atins numărul necesar de confirmări în rețea.

Un alt mecanism infailibil este modul în care WavesKit comunică cu nodurile. În condiții ideale, cadrul lucrează numai cu nodul principal, menținând o conexiune constantă cu acesta, dar în cazul erorilor se poate comuta automat pe noduri de rezervă. Dacă stabiliți un set de noduri de rezervă, puteți apela funcția setBestNode pentru a determina cel mai bun nod ca principal pe baza valorii maxime a înălțimii curente și a vitezei de răspuns. Acum adăugați la aceasta un cache intern de cereri și veți simți grijă atât pentru utilizatori, cât și pentru proprietarii nodurilor.

Unul dintre cele mai recente mecanisme avansate este funcția txMonitor. A apărut din necesitatea de a reacționa la tranzacțiile incoming în timp real. Această funcție rezolvă complet toate aspectele legate de procesarea tranzacțiilor în blockchain. Niciun disconfort, doar setați funcția dvs. callback cu opțiunile dorite și așteptați tranzacțiile noi care vor iniția procesele dvs. De exemplu, un alt proiect al meu VECRO este construit complet în jurul acestei funcții, puteți explora cu ușurință cum funcționează chiar în codul proiectului.

Îmi place open source, este una dintre cele mai mari realizări ale umanității. Fiind singurul dezvoltator și atingând starea în care toate nevoile mele sunt împlinite, vă invit să folosiți și să contribuiți la WavesKit.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster