Îmi place 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 nu am găsit un SDK gata pe PHP. Ei bine, a trebuit să-l scriu eu.
La început, a trebuit să folosesc 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, , î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 și .
Primul pas în culisele blockchain-ului Waves a fost . 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 ( de altfel, funcționează la ei, plătesc pentru erorile găsite). Puteți studia în detaliu funcționalitatea exploratorului w8io în această temă:
Î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: pentru codificarea în base58 (de fapt pentru codificarea oricărui alfabet în oricare), pentru crearea și verificarea semnăturilor compatibile (cu variantele ), pentru calcularea unuia dintre hash-uri (care a fost disponibil doar începând cu PHP 7.2) etc.
Aici trebuie să îi mulțumesc pentru câteva sfaturi valoroase care m-au îndrumat în direcția în loc de fișierele include pe care le cunoșteam, dar care erau învechite.
După câteva luni , a ieșit din și acum este pregătit să lucreze cu toate funcționalitățile standard ale platformei Waves. Tot ce este disponibil în 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/waveskitFolosim:
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 . Pentru o mai bună înțelegere a funcționării tranzacțiilor, puteți studia sau puteți să consultați direct exemplele vizuale din .
Deoarece WavesKit a fost dezvoltat în condiții de utilizare reală, acesta are deja caracteristici avansate. Prima caracteristică killer este , 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 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 . 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 este construit complet în jurul acestei funcții, puteți explora cu ușurință cum funcționează chiar .
Î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 .
Sursa: habr.com
