WavesKit - cadru PHP pentru lucrul cu blockchain-ul Waves

Imi place PHP pentru viteza de dezvoltare și portabilitate excelentă. Este foarte bine când ai mereu o unealtă în buzunar, gata să rezolve probleme.

A fost destul de păcat când, când ne-am familiarizat cu blockchain-ul autohton Platforma Waves nu avea un SDK PHP gata făcut în arsenalul său. Ei bine, a trebuit să scriu.

La început a trebuit să folosesc noduri pentru a semna tranzacții. Deci, pentru a gestiona trei adrese a fost nevoie de lansarea a trei noduri... A fost o priveliște jalnică, deși a rezolvat unele probleme. Până când s-a ajuns la înțelegerea că bazarea pe noduri era o fundătură. În primul rând, datorită funcționalității limitate API, în al doilea rând, din cauza vitezei (nodurile erau foarte lente în acele vremuri).

Am început două joburi paralele. Una este să faci un explorator blockchain care va fi rapid și complet independent de API-ul nodului. Al doilea este de a colecta toate funcțiile pentru lucrul cu Platforma Waves într-un singur loc. Așa au apărut proiectele w8io и WavesKit.

Primul pas din culisele blockchain-ului Waves a fost browser w8io. Nu a fost ușor, dar am reușit totuși să scriem un calcul independent al tuturor soldurilor și chiar să găsim o eroare în calculele de pe nodurile originale (program bug-bounty Apropo, le merge, ei plătesc pentru erorile găsite). Puteți afla mai multe despre funcționalitatea browserului w8io în acest subiect: https://forum.wavesplatform.com/t/w8io-waves-explorer-based-on-php-sqlite

În timp ce lucram pe w8io, aveam deja îndoieli, dar când lucrarea a ajuns la finalul logic și am început să creez SDK-ul, îndoielile mi-au fost confirmate. Nu am găsit nicăieri unele funcții, inclusiv cele mai importante, cele criptografice. Apoi am început prin a-mi face propriile cărămizi pentru fundație. Asa s-au nascut: ABCode pentru a codifica în base58 (de fapt, pentru a codifica orice alfabet în oricare), Curve25519 pentru a crea și verifica semnături compatibile (cu opțiuni pe steroizi), Blake2b pentru a calcula unul dintre hash-uri (care a fost disponibil numai începând cu PHP 7.2), etc.

Aici trebuie să mulțumesc Inala Kardanova pentru niște sfaturi valoroase care m-au îndreptat în direcția compozitor în loc de fișierele include care îmi sunt familiare, dar depășite.

După câteva luni WavesKit a fost lansat, a iesit versiuni beta și este acum gata să lucreze cu toate funcționalitățile standard ale platformei Waves. Toate disponibile în rețeaua principală tranzacțiile pot fi create, semnate și trimise cu ușurință folosind un singur pachet, care rulează pe toate versiunile PHP pe 64 de biți de la 5.6 inclusiv.

Conectăm WavesKit la 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 rulează pe rețeaua de test „T”. Instalăm o frază de bază din care cheile și adresa contului sunt calculate automat pe baza cheii publice. În continuare, creăm o tranzacție de transfer 0.00000001 Waves de la adresa calculată automat folosind fraza de bază la adresa alias „test”, o transferăm pentru a fi semnată cu o cheie privată și o trimitem în rețea. După aceasta, ne asigurăm că tranzacția este confirmată cu succes de rețea.

Lucrul cu tranzacțiile este concentrat în funcții care încep cu tx. Pentru o mai bună înțelegere a modului de lucru cu tranzacții, puteți studia Documentația WavesKit sau apelează imediat la exemple ilustrative în teste de integrare continuă.

Deoarece WavesKit a fost dezvoltat în lumea reală, are deja funcții avansate. Prima caracteristică ucigașă este asigura functionarea, care controlează atingerea nivelului necesar de încredere că tranzacția nu a fost pierdută, ci, dimpotrivă, a fost confirmată și a atins numărul necesar de confirmări în rețea.

Un alt mecanism antiglonț este modul în care WavesKit comunică cu nodurile. În condiții de seră, cadrul funcționează doar cu nodul principal, menținând o conexiune constantă cu acesta, dar în caz de erori poate trece automat la cele de rezervă. Dacă configurați o serie 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 interogări și simțiți-vă îngrijiți atât de utilizatori, cât și de proprietarii nodurilor.

Unul dintre cele mai recente mecanisme avansate este funcția txMonitor. A apărut din cauza necesității de a răspunde la tranzacțiile primite în timp real. Această funcție rezolvă complet toate nuanțele asociate cu procesarea tranzacțiilor în blockchain. Gata cu durerea, doar configurați funcția de apel invers cu opțiunile dorite și așteptați ca noi tranzacții să înceapă procesele. De exemplu, un alt proiect de-al meu VECRO complet construit în jurul acestei funcții, puteți studia cu ușurință cum funcționează direct în codul proiectului.

Iubesc open source, este una dintre cele mai mari realizări ale umanității. Întrucât sunt singurul dezvoltator și am ajuns într-o stare în care toate nevoile mele sunt rezolvate, vă invit să utilizați și să contribui la WavesKit.

Sursa: www.habr.com

Adauga un comentariu