De: Brett McLain, Director de Inginerie – Crypto, Fiat, Staking
Dacă sunteți interesat de criptomonede, plăți sau staking și doriți să ajutați la construirea sistemului financiar al viitorului, echipa de inginerie de finanțare @ Kraken angajează!
Când Kraken a fost lansat în urmă cu un deceniu, erau acceptate doar trei criptomonede: BTC, LTC și XRP.
Astăzi, Kraken acceptă 82 de active pe 33 de blockchain și servicii de staking pentru 8 criptomonede.
Pentru a facilita milioanele de depozite, retrageri și tranzacții de miza pe an la Kraken, echipa de inginerie cripto operează sute de servicii pentru a asigura fluxul fluid al fondurilor în și din bursă. Software-ul blockchain care sta la baza acestor servicii este actualizat frecvent; pentru unele dintre cele mai active blockchain-uri, furcile dure și moi pot fi lunare, în timp ce altele precum Ethereum sunt evenimente de două ori anuale. În general, există cel puțin câteva actualizări de software pentru infrastructura noastră blockchain în fiecare săptămână.
Provocarea de a susține și actualiza un număr atât de mare de servicii diferite, în același timp, construirea altora noi poate fi descurajantă.
În ultimele 12 luni, echipa noastră a adăugat suport pentru:
- 60 de criptomonede noi:
- 39 x jetoane ERC20
- Polkadot (la lansarea rețelei principale)
- Kusama
- Filecoin (la lansarea rețelei principale)
- Flux (la lansarea rețelei principale)
- Kava
- Energy Web Token (la lansarea rețelei principale)
- USDT (TRC20)
- 10 x Parachain Crowdloans
- suntrap
- 1 x token SPL (ser)
- Mina
- 8 noi active de miză:
- Polkadot (la lansarea rețelei principale)
- Kusama
- Ethereum 2.0 (la lansarea rețelei principale)
- Flux (la lansarea rețelei principale)
- Cardano
- Cosmos
- Kava
- suntrap
Aceste realizări au fost realizate împreună cu menținerea integrărilor noastre existente. Inginerii echipei cripto sunt responsabili nu numai pentru software-ul gateway-ului scris în casă, ci și pentru întreținerea și implementarea infrastructurii noastre blockchain pe care se bazează gateway-urile noastre. Cadența dezvoltării blockchain pe aceste proiecte poate fi una fulgerătoare, cu schimbări de ultimă oră și noi funcții noi care apar frecvent și uneori cu puține avertismente.
Deci, cum reușește Kraken să lanseze zeci de produse noi în fiecare an, ținând pasul cu ritmul rapid al dezvoltării blockchain?
Teste End to End (E2E)!
De ce prețuim testele E2E și evităm batjocuri
Încă din primele zile la Kraken, accentul a fost că testele E2E sunt cele mai valoroase tipuri de teste pe care un inginer le poate construi. Testele unitare au locul lor, dar mulți dezvoltatori fără experiență în integrări complexe tind să scrie teste unitare pentru fiecare bucată de cod pe care o construiesc, cu convingerea că îmbunătățesc calitatea generală a software-ului pe care îl dezvoltă.
Această cale, deși plină de bune intenții, poate duce adesea la multă durere pe drum. Încrederea excesivă pe testele unitare tinde să-ți cimenteze arhitectura; este ca și cum ai turna un strat de epoxid peste întreaga bază de cod. Cuplați strâns codul cu testele sale, făcând codul mai rigid, mai inflexibil și mai rezistent la refactorizare. Dacă trebuie să faceți o schimbare, probabil că va trebui să faceți modificări semnificative testelor și, în unele cazuri, să le eliminați complet. Codul de refactorizare este o capacitate cheie pe care o echipă de inginerie o are în setul de instrumente și orice adaugă frecare la ușurința refactorizării ar trebui evaluat cu atenție înainte de a fi introdus. Când se refactorizează codul, un test E2E bine conceput adesea nu necesită multe modificări și oferă flexibilitate în ajustarea curbei interne a unei aplicații, asigurând în același timp că aceasta continuă să funcționeze conform așteptărilor.
Înseamnă asta că nu ar trebui să scrii teste unitare? Deloc! Există multe scenarii în care testele unitare sunt soluția perfectă, totuși am descoperit că pentru integrările complexe, testele E2E funcționează mai bine. În general, testele unitare sunt cele mai eficiente atunci când sunt scrise pentru cod care îndeplinește următoarele criterii:
- Complex algoritmic cu multe cazuri marginale.
- Strâns acoperit cu cerințe bine definite.
- Finalizează o singură unitate de lucru.
- Fara stare.
Aceste bucăți mici, strânse de cod complex sunt adesea elementele de bază ale unei aplicații mai mari și chiar dacă ar avea loc o refactorare, este puțin probabil ca aceste funcții să se schimbe. În lumea noastră, acestea ar fi lucruri precum derivarea adresei, validarea adresei, semnarea tranzacțiilor etc.
Principala concluzie aici este că, în calitate de echipă mică de inginerie, nu avem cum să menținem vreodată volumul de servicii pe care le sprijinim în prezent, și construiți produse noi fără teste end to end. Testele unitare ar trebui considerate mize de masă, dar izolat, ele nu ar fi suficiente pentru ca noi să ținem pasul în acest spațiu în evoluție. În schimb, am ales să investim masiv în seturi robuste de integrare și teste E2E care validează că serviciile noastre vor funcționa cu succes în cele mai comune moduri de operare.
Provocările testelor E2E
Deși testele E2E pot fi puternice, nu sunt un panaceu. Atunci când se integrează cu servicii terțe, aceste tipuri de teste își pierd adesea o mare parte din valoare, deoarece anumite puncte finale sau interfețe trebuie să fie batjocorite pentru a testa pe deplin fluxul unei anumite funcții sau apeluri. Mock-urile sunt la fel de bune pe măsura înțelegerii dvs. a serviciului pe care îl batjocorești și, în consecință, pot fi predispuse la erori atunci când actualizările sunt frecvente și mari în natură. Menținerea propriului cod, precum și a batjocurilor tale este o încălcare a principiului DRY (nu te repeta), un termen inventat de David Thomas și Andrew Hunt în „The Pragmatic Programmer”. În cartea lor, ei afirmă că „Fiecare cunoaștere trebuie să aibă o reprezentare unică, fără ambiguitate, cu autoritate în cadrul unui sistem”. Crearea unei versiuni batjocoritoare a oricărui serviciu înseamnă că acum există două copii potențial divergente ale serviciului menționat: versiunea batjocorită și versiunea reală. Erorile în traducerea comportamentului dependenței batjocorite sunt acum o altă preocupare de care trebuie să ținem cont.
Regtests pentru salvare
Din fericire pentru noi, majoritatea blockchain-urilor acceptă capacitatea de a rula rețele private temporare care pot fi dezvoltate ca parte a procesului nostru de integrare continuă (CI) / implementare continuă (CD). Cel mai popular exemplu în acest sens este modul de testare de regresie (regtest) al Bitcoin. Când porniți bitcoind cu opțiunea `-regtest`, acesta creează un nou mediu blockchain local asupra căruia aveți control complet. Caracteristica cheie a modului regtest este că puteți extrage un număr arbitrar de blocuri la voință, permițând testelor dvs. E2E să completeze călătorii dus-întors pentru depuneri și retrageri de toate tipurile și variații, simulând sute de scenarii în câteva secunde. Cazurile marginale și alte scenarii unice pot fi simulate cu ușurință în modul regtest, cum ar fi tranzacții multisig, re-organizări, înlocuire cu taxă (RBF), copilul plătește pentru părinte (CPFP) și multe altele! Aceste teste nu numai că asigură că codul nostru nu conține erori, dar validează și starea finală a blockchain-ului și registrele noastre pentru a ne asigura că totul funcționează conform așteptărilor.
Ca parte a procesului de adăugare a suportului pentru o nouă criptomonedă pe Kraken, echipa de finanțare elaborează un cadru de regtest pentru toate listele noi. Acest cod este fundamentul regimului nostru de întreținere: de fiecare dată când este lansată o nouă versiune, este pur și simplu o chestiune de a actualiza versiunea nodului blockchain și de a rula din nou conducta noastră CI pentru a ne asigura că nu există modificări rupturi. Citirea atentă a notelor de lansare și colaborarea cu comunitatea este încă foarte necesară, dar aceste teste ne dau încredere în lansarea de noi versiuni pe care altfel nu le-am avea.
Soluții creative
Din păcate pentru noi, nu toate blockchain-urile sunt la fel de testate ca Bitcoin. Noile blockchain-uri introduc adesea concepte noi și, pentru a oferi clienților noștri acces la cele mai interesante tehnologii noi, Kraken preferă să lanseze suport pentru noile blockchain cât mai aproape de începutul rețelei principale. Pentru a sprijini în siguranță un nou activ la sau aproape de data lansării, Kraken trebuie uneori să dezvolte hamuri de testare complexe pentru a câștiga încredere în integrare și pentru a se asigura că fondurile clienților nu sunt în pericol.
O ilustrare perfectă a acestui lucru este atunci când Kraken a lansat suport pentru Ethereum 2.0 la numai 3 zile după ce rețeaua principală a intrat în funcțiune la 1 decembrie 2020. Deși mii de persoane și companii din întreaga lume au ajutat la testarea Ethereum 2.0 pe mai multe rețele de testare precum Medalla și Spadina, totuși a decis să ducă conceptul de regtesturi la un cu totul alt nivel cu această integrare. Am știut de la început că Ethereum 2.0 va fi o dezvoltare semnificativă și că această credință s-a dovedit adevărată, deoarece milioane de ETH au fost pariați până acum în lanțul de semnalizare, inclusiv peste 800,000 de ETH care au fost pariați de clienții Kraken.
Mai jos puteți vedea o diagramă a setului de servicii pe care conducta noastră de integrare continuă (CI) le învârte și le distruge de fiecare dată când un dezvoltator trimite cod într-unul dintre depozitele noastre de coduri ETH2.
La un nivel înalt, fluxul de testare este:
- Începeți nodurile primare și alternative ETH1 (fiecare exploatează pe rând pentru consens) cu o geneză care conține o cantitate inițială de ETH pentru testare.
- Porniți nodul lanțului de baliză ETH2 ca un lanț privat folosind un mod special de configurare minimă în care sunt necesari doar 16 validatori pentru a activa geneza.
- Implementați un contract inteligent ETH2 în blockchain-ul ETH1.
- Depuneți ETH în contractul de depozit ETH2, unde fondurile sunt arse și validatorii sunt creați pe nodul de validare extern ETH2. Aceștia sunt validatori care doar operează rețeaua ETH2 și sunt tratați ca și cum ar fi externi oricărui validator Kraken.
- Porniți exploratorii de blocuri ETH1 și ETH2.
- Porniți baza de date.
- Porniți Gateway și semnatari.
- Introduceți cererile clientului de a miza ETH -> ETH2.
- Gateway preia cererile clienților și trimite ETH la contractul de depozit pe blockchain-ul ETH1 și creează un număr corespunzător de validatori pe nodul de validare intern ETH2. Validatorii sunt separați în seturi de validatori interni și externi, astfel încât să putem testa ce se întâmplă atunci când validatorii noștri se defectează (pentru a testa reducerile, penalizările, recompensele pierdute) și pentru a vedea ce se întâmplă când restul rețelei se defectează sau offline, dar validatorii noștri ramane sus.
- Monitorizați până când validatorii sunt activi în lanțul ETH2, începeți să urmăriți recompensele, plățile, testele reduse și penalitățile, detectarea recompenselor pierdute și plătiți recompense clienților.
- Rulați procesul nostru separat de reconciliere financiară pentru toate tranzacțiile pentru a vă asigura că totul din toate registrele noastre se potrivește corect.
Cele de mai sus sunt doar un rezumat la nivel înalt a ceea ce se întâmplă în cadrul nostru de testare; există o serie de alte teste, verificări și validări care au loc. Dacă un dezvoltator trebuie să depaneze ceva sau să se uite la starea fiecărei rețele, poate consulta exploratorii de blocuri pentru a vedea ce s-a întâmplat exact dintr-o privire. De obicei, nu includem exploratori de blocuri în pipeline-ul nostru CI, dar având în vedere complexitatea integrării, a fost util în timpul fazei de dezvoltare să vizualizăm ceea ce se întâmplă în lanț.
S-ar putea să credeți că acest lucru adaugă o întârziere enormă conductei noastre CI, dar, din fericire, nu este cazul. În prezent, întreaga conductă CI pentru repo-ul nostru Ethereum 2.0 durează doar 14 minute. Aceasta include auditarea/construirea tuturor dependențelor, pornirea tuturor serviciilor, implementarea diferitelor contracte inteligente în blockchain, exploatarea blocurilor, crearea validatorilor și apoi rularea tuturor celor peste 100 de scenarii de testare.
Gânduri finale
Dezvoltarea de teste E2E cuprinzătoare pentru fiecare integrare blockchain la Kraken consumă o cantitate semnificativă de resurse de inginerie. Este un preț pe care îl plătim cu plăcere, deoarece preocuparea noastră principală este siguranța fondurilor clienților noștri și să ne asigurăm că aceștia au o experiență de calitate pe platforma noastră. Ar putea echipa noastră să lanseze mai multe produse dacă am petrecut mai puțin timp pe teste atunci când construim noi integrări? Fara intrebare. Cu toate acestea, acest lucru ar fi împotriva etosului și valorilor nu numai ale echipei de inginerie, ci și ale companiei în ansamblu. Aceste teste ne asigură că putem actualiza în siguranță versiuni noi de software blockchain, creștem încrederea în timpul hard/soft forks și reducem stresul dezvoltatorului atunci când implementăm modificări.
De ce sunt inginerii Kraken unii dintre cei mai respectați din industrie? Acest mesaj de la Steve Hunt, vicepreședintele ingineriei Kraken, subliniază valorile și dedicarea noastră pentru a ajuta alți ingineri blockchain.
Sursa: https://blog.kraken.com/post/10227/testing-crypto-payments-staking-at-kraken/
- &
- 000
- 11
- 2020
- acces
- Cont
- activ
- TOATE
- Toate tranzacțiile
- Permiterea
- aplicație
- arhitectură
- în jurul
- activ
- Bunuri
- Luptă
- lanț de baliză
- Bitcoin
- blockchain
- BTC
- construi
- Clădire
- apel
- cazuri
- contesta
- Schimbare
- Verificări
- copil
- cod
- colaborare
- venire
- Comun
- comunitate
- Companii
- companie
- încredere
- Consens
- continuă
- contract
- contracte
- Crearea
- cripto
- cryptocurrencies
- cryptocurrency
- Baza de date
- afacere
- întârziere
- Detectare
- dezvolta
- Dezvoltator
- Dezvoltatorii
- Dezvoltare
- Director
- Devreme
- Margine
- Eficace
- inginer
- Inginerie
- inginerii
- Mediu inconjurator
- ERC20
- ETH
- ethereum
- Ethereum 2.0
- Ethos
- evenimente
- schimb
- FAST
- Caracteristică
- DESCRIERE
- Decret
- financiar
- Flexibilitate
- debit
- Cadru
- Complet
- funcţie
- de finanțare
- Fondurile
- viitor
- General
- Geneză
- bine
- mare
- aici
- Înalt
- casă
- Cum
- HTTPS
- sute
- Inclusiv
- Crește
- industrie
- Infrastructură
- integrare
- integrările
- izolare
- IT
- păstrare
- Cheie
- cunoştinţe
- Kraken
- mare
- lansa
- conduce
- Nivel
- înregistrări
- local
- LTC
- Efectuarea
- Minerit
- luni
- Cel mai popular
- multisemn
- reţea
- Funcții noi
- produse noi
- noduri
- oferi
- de operare
- Opțiune
- comandă
- Altele
- Durere
- Plătește
- plăți
- platformă
- Popular
- preţ
- privat
- Produse
- Proiecte
- calitate
- Citind
- reduce
- încredere
- Cerinţe
- Resurse
- REST
- Recompense
- Risc
- Alerga
- funcţionare
- Siguranţă
- Ecran
- Servicii
- set
- mic
- inteligent
- contract inteligent
- Contracte inteligente
- So
- Software
- Spaţiu
- miză
- Staking
- Începe
- Stat
- stres
- a sustine
- Suportat
- Sprijină
- sistem
- Tehnologii
- temporar
- test
- Testarea
- teste
- timp
- semn
- top
- Urmărire
- tranzacție
- Tranzacții
- Actualizează
- actualizări
- us
- valoare
- volum
- web
- săptămână
- în
- Apartamente
- lume
- X
- XRP
- an