Af: Brett McLain, Director of Engineering – Crypto, Fiat, Staking
Hvis du er interesseret i kryptovalutaer, betalinger eller indsatser og ønsker at hjælpe med at opbygge fremtidens finansielle system, ansætter finansieringsingeniørteamet @ Kraken!
Da Kraken blev lanceret for et årti siden, blev kun tre kryptovalutaer understøttet: BTC, LTC og XRP.
I dag understøtter Kraken 82 aktiver på 33 blockchains og indsatstjenester for 8 kryptovalutaer.
For at lette de millioner af indskud, udbetalinger og indsatstransaktioner om året hos Kraken, driver kryptoingeniørteamet hundredvis af tjenester for at sikre en jævn strøm af midler ind og ud af børsen. Blockchain-softwaren, der understøtter disse tjenester, opdateres ofte; for nogle af de mere aktive blockchains kan hårde og bløde gafler være månedlige, mens andre som Ethereum er to gange årlige begivenheder. Generelt er der mindst et par softwareopdateringer til vores blockchain-infrastruktur hver uge.
Udfordringen med at understøtte og opdatere så mange forskellige tjenester, samtidig med at man bygger nye, kan være skræmmende.
I de sidste 12 måneder har vores team tilføjet support til:
- 60 nye kryptovalutaer:
- 39 x ERC20 tokens
- Polkadot (ved mainnet-lancering)
- Kusama
- Filecoin (ved mainnet-lancering)
- Flow (ved mainnet-lancering)
- Kava
- Energy Web Token (ved mainnet-lancering)
- USDT (TRC20)
- 10 x Parachain Crowdloans
- Solana
- 1 x SPL token (serum)
- Mina
- 8 nye indsatsaktiver:
- Polkadot (ved mainnet-lancering)
- Kusama
- Ethereum 2.0 (ved mainnet-lancering)
- Flow (ved mainnet-lancering)
- Cardano
- kosmos
- Kava
- Solana
Disse resultater blev opnået sammen med vedligeholdelsen af vores eksisterende integrationer. Ingeniørerne i kryptoteamet er ansvarlige for ikke kun gateway-softwaren, der er skrevet i huset, men også for vedligeholdelsen og udrulningen af vores blockchain-infrastruktur, som vores gateways er afhængige af. Kadencen af blockchain-udvikling på disse projekter kan være en blændende en, med brydende ændringer og nye nye funktioner, der kommer ofte og nogle gange med lidt advarsel.
Så hvordan formår Kraken at frigive snesevis af nye produkter hvert år, mens han holder trit med blockchain-udviklingens hurtige tempo?
End to End (E2E) tests!
Hvorfor vi værdsætter E2E-tests og undgår hån
Siden de tidlige dage i Kraken har der været lagt vægt på, at E2E-tests er den mest værdifulde form for test, en ingeniør kan bygge. Enhedstests har deres plads, men mange udviklere, der er uerfarne med komplekse integrationer, har en tendens til at skrive enhedstests for hvert stykke kode, de bygger i den tro, at de forbedrer den overordnede kvalitet af den software, de udvikler.
Selvom denne vej er fuld af gode intentioner, kan den ofte føre til en masse smerte hen ad vejen. Over afhængighed af enhedstests har en tendens til at cementere din arkitektur; det er som at hælde et lag epoxy oven på hele din kodebase. Du kobler koden tæt til dens tests, hvilket gør koden mere stiv, ufleksibel og modstandsdygtig over for at blive refaktoreret. Hvis du har brug for at foretage en ændring, bliver du sandsynligvis nødt til at foretage væsentlige ændringer i testene og i nogle tilfælde smide dem helt ud. Refactoring-kode er en nøglefunktion, som et ingeniørteam kan have i deres værktøjskasse, og alt, der tilføjer friktion til den nemmere refactoring, bør evalueres omhyggeligt, før det introduceres. Ved refactoring af kode kræver en veldesignet E2E-test ofte ikke mange ændringer, og den giver fleksibilitet til at justere en applikations indre indvolde, samtidig med at den sikrer, at den fortsætter med at fungere som forventet.
Betyder det, at du ikke skal skrive enhedstests? Slet ikke! Der er mange scenarier, hvor enhedstests er den perfekte løsning, men vi har fundet ud af, at for komplekse integrationer fungerer E2E-tests bedre. Generelt er enhedstests mest effektive, når de er skrevet til kode, der opfylder følgende kriterier:
- Algoritmisk kompleks med mange kantsager.
- Tæt afgrænset med veldefinerede krav.
- Udfører en enkelt arbejdsenhed.
- Statsløs.
Disse små, stramt afgrænsede stykker af kompleks kode er ofte byggestenene i en større applikation, og selv hvis en refaktor skulle opstå, ville disse funktioner sandsynligvis ikke ændre sig. I vores verden ville dette være ting som adresseafledning, adressevalidering, transaktionssignering osv.
Det vigtigste her er, at som et lille ingeniørteam er der ingen måde, vi nogensinde kunne opretholde den mængde af tjenester, vi i øjeblikket understøtter, , bygge nye produkter uden ende til ende test. Enhedstest bør betragtes som bordindsatser, men isoleret set ville de ikke være tilstrækkelige til, at vi kan følge med i dette udviklende rum. I stedet har vi valgt at investere massivt i robuste sæt af integration og E2E-tests, der validerer, at vores tjenester vil fungere med succes i deres mest almindelige driftsformer.
Udfordringer ved E2E-tests
Selvom E2E-test kan være kraftfulde, er de ikke et vidundermiddel. Når man integrerer med tredjepartstjenester, mister disse typer tests ofte en stor del af deres værdi, da visse endepunkter eller grænseflader skal hånes for fuldt ud at teste flowet af en specifik funktion eller opkald. Håner er kun så gode som din forståelse af den service, du håner, og som et resultat kan de være tilbøjelige til at fejle, når opdateringer er hyppige og store. At vedligeholde din egen kode såvel som dine hån er en krænkelse af DRY-princippet (gentag ikke dig selv), et udtryk opfundet af David Thomas og Andrew Hunt i "The Pragmatic Programmer." I deres bog siger de, at "Hvert stykke viden skal have en enkelt, utvetydig, autoritativ repræsentation i et system." Oprettelse af en hånet version af enhver tjeneste betyder, at der nu er to potentielt divergerende kopier af den nævnte tjeneste: din hånede version og den faktiske version. Fejl i oversættelsen af den hånede afhængigheds adfærd er nu en anden bekymring at tage højde for.
Regtests til undsætning
Heldigvis for os understøtter de fleste blockchains evnen til at køre midlertidige private net, der kan opbygges som en del af vores kontinuerlige integration (CI) / kontinuerlige implementeringsproces (CD). Det mest populære eksempel på dette er Bitcoins regressionstest (regtest) mode. Når du starter bitcoind med '-regtest' muligheden, skaber det et nyt lokalt blockchain miljø, som du har fuldstændig kontrol over. Nøglefunktionen i regtest mode er, at du kan udvinde et vilkårligt antal blokke efter behag, hvilket giver dine E2E-tests mulighed for at gennemføre rundrejser for ind- og udbetalinger af alle typer og variationer, og simulerer hundredvis af scenarier inden for få sekunder. Kantsager og andre unikke scenarier kan nemt simuleres i rigtigest-tilstand, såsom multisig-transaktioner, omorganiseringer, erstatning med gebyr (RBF), barnet betaler for forældre (CPFP) og meget mere! Disse test sikrer ikke kun, at vores kode ikke indeholder fejl, den validerer også sluttilstanden for blockchain og vores hovedbøger for at sikre, at alt fungerer som forventet.
Som en del af processen med at tilføje støtte til en ny kryptovaluta på Kraken, bygger finansieringsteamet en rigtigeste ramme for alle nye noteringer. Denne kode er grundlaget for vores vedligeholdelsesregime: hver gang en ny version frigives, er det simpelthen et spørgsmål om at opdatere blockchain-nodeversionen og køre vores CI-pipeline igen for at sikre, at der ikke er nogen brudændringer. Omhyggelig læsning af udgivelsesbemærkningerne og samarbejde med fællesskabet er stadig meget nødvendigt, men disse test giver os tillid til at frigive nye versioner, som vi ellers ikke ville have.
Creative Solutions
Desværre for os er ikke alle blockchains så kamptestede som Bitcoin. Nye blockchains introducerer ofte nye koncepter, og for at tilbyde vores kunder adgang til de mest spændende nye teknologier, foretrækker Kraken at lancere support til nye blockchains så tæt på starten af mainnet som muligt. For sikkert at understøtte et nyt aktiv på eller tæt på lanceringsdatoen, er Kraken nogle gange nødt til at udvikle komplekse testseler for at opnå tillid til integrationen og for at sikre, at klientmidler ikke er i fare.
En perfekt illustration af dette er, da Kraken lancerede support til Ethereum 2.0 kun 3 dage efter, at mainnettet gik live den 1. december 2020. Selvom tusindvis af enkeltpersoner og virksomheder rundt om i verden hjalp med at teste Ethereum 2.0 på flere testnet såsom Medalla og Spadina, er vi stadig besluttede at tage begrebet rigtigests til et helt andet niveau med denne integration. Vi vidste tidligt, at Ethereum 2.0 ville være en væsentlig udvikling, og den tro har vist sig sand, da millioner af ETH indtil videre er blevet satset på beacon-kæden, inklusive mere end 800,000 ETH, der er blevet satset af Kraken-klienter.
Nedenfor kan du se et diagram over det sæt af tjenester, som vores kontinuerlige integration (CI) pipeline spinner op og river ned hver eneste gang en udvikler forpligter kode til et af vores ETH2-kodelagre.
På et højt niveau er testflowet:
- Start ETH1 primære og alternative noder (de skiftes til at mine for konsensus) med en genese, der indeholder en indledende mængde ETH til test.
- Start ETH2 beacon chain node som en privat kæde ved hjælp af en speciel minimal config mode, hvor kun 16 validatorer er nødvendige for at aktivere genesis.
- Implementer ETH2 smart kontrakt til ETH1 blockchain.
- Indsæt ETH i ETH2-indbetalingskontrakten, hvor midlerne brændes og validatorer oprettes på ETH2's eksterne validatorknude. Disse er validatorer, der kun driver ETH2-netværket og behandles, som om de er eksterne i forhold til Kraken-validatorer.
- Start ETH1 & ETH2 blokudforskere.
- Start database.
- Start Gateway og underskrivere.
- Indsæt klientanmodninger for at satse ETH -> ETH2.
- Gateway opfanger klientanmodninger og sender ETH til depositumkontrakten på ETH1 blockchain og opretter et tilsvarende antal validatorer på ETH2 interne validator node. Validatorer er adskilt i interne og eksterne validatorsæt, så vi kan teste, hvad der sker, når vores validatorer går ned (for at teste slashing, straf, mistede belønninger), og for at se, hvad der sker, når resten af netværket går ned eller offline, men vores validatorer forblive oppe.
- Overvåg, indtil validatorerne er aktive på ETH2-kæden, begynd at spore belønninger, udbetalinger, testskæring og straf, mistet belønningsdetektion og betal belønninger til kunder.
- Kør vores separate økonomiske afstemningsproces på alle transaktioner for at sikre, at alt i alle vores finanser matcher korrekt.
Ovenstående er kun en opsummering på højt niveau af, hvad der foregår inden for vores testramme; der forekommer en række andre tests, kontroller og valideringer. Hvis en udvikler har brug for at fejlfinde noget eller se på tilstanden af et af netværkene, kan de konsultere blokudforskerne for at se, hvad der præcist er sket med et øjeblik. Vi inkluderer normalt ikke blokudforskere i vores CI-pipeline, men i betragtning af integrationens kompleksitet var det nyttigt under udviklingsfasen at visualisere, hvad der skete på kæden.
Du tror måske, at dette tilføjer en enorm forsinkelse til vores CI-pipeline, men det er heldigvis ikke tilfældet. I øjeblikket tager den fulde CI-pipeline for vores Ethereum 2.0-repo kun 14 minutter at køre. Dette inkluderer revision/opbygning af alle afhængigheder, start af alle tjenester, implementering af forskellige smarte kontrakter til blockchain, minedrift af blokke, oprettelse af validatorer og derefter gennemgang af alle de 100+ testscenarier.
Afsluttende tanker
Udvikling af omfattende E2E-tests for hver enkelt blockchain-integration hos Kraken bruger en betydelig mængde ingeniørressourcer. Det er en pris, vi gerne betaler, da vores største bekymring er sikkerheden for vores kunders midler og at sikre, at de får en kvalitetsoplevelse på vores platform. Kunne vores team frigive flere produkter, hvis vi brugte mindre tid på test, når vi bygger nye integrationer? Uden spørgsmål. Men at gøre det ville stride imod etos og værdier for ikke kun ingeniørteamet, men virksomheden som helhed. Disse tests sikrer, at vi sikkert kan opdatere til nye versioner af blockchain-software, øge tilliden under hårde/bløde gafler og reducere udviklerstress ved implementering af ændringer.
Hvorfor er Krakens ingeniører nogle af de mest respekterede i branchen? Denne meddelelse fra Steve Hunt, Krakens VP of Engineering, skitserer vores værdier og dedikation til at hjælpe andre blockchain-ingeniører.
Kilde: https://blog.kraken.com/post/10227/testing-crypto-payments-staking-at-kraken/
- &
- 000
- 11
- 2020
- adgang
- Konto
- aktiv
- Alle
- Alle transaktioner
- tillade
- Anvendelse
- arkitektur
- omkring
- aktiv
- Aktiver
- Battle
- fyrkæde
- Bitcoin
- blockchain
- BTC
- bygge
- Bygning
- ringe
- tilfælde
- udfordre
- lave om
- Kontrol
- barn
- kode
- samarbejde
- kommer
- Fælles
- samfund
- Virksomheder
- selskab
- tillid
- Konsensus
- fortsætter
- kontrakt
- kontrakter
- Oprettelse af
- krypto
- cryptocurrencies
- cryptocurrency
- Database
- deal
- forsinkelse
- Detektion
- udvikle
- Udvikler
- udviklere
- Udvikling
- Direktør
- Tidligt
- Edge
- Effektiv
- ingeniør
- Engineering
- Ingeniører
- Miljø
- ERC20
- ETH
- ethereum
- Ethereum 2.0
- Ethos
- begivenheder
- udveksling
- FAST
- Feature
- Funktionalitet
- Fiat
- finansielle
- Fleksibilitet
- flow
- Framework
- fuld
- funktion
- finansiering
- fonde
- fremtiden
- Generelt
- Genesis
- godt
- stor
- link.
- Høj
- hus
- Hvordan
- HTTPS
- Hundreder
- Herunder
- Forøg
- industrien
- Infrastruktur
- integration
- integrationer
- isolation
- IT
- holde
- Nøgle
- viden
- Kraken
- stor
- lancere
- føre
- Niveau
- Listings
- lokale
- LTC
- Making
- Mining
- måned
- Mest Populære
- multitegn
- netværk
- Nye funktioner
- nye produkter
- noder
- tilbyde
- drift
- Option
- ordrer
- Andet
- Smerte
- Betal
- betalinger
- perron
- Populær
- pris
- private
- Produkter
- projekter
- kvalitet
- Læsning
- reducere
- afhængighed
- Krav
- Ressourcer
- REST
- Belønninger
- Risiko
- Kør
- kører
- Sikkerhed
- Skærm
- Tjenester
- sæt
- lille
- Smart
- smart kontrakt
- Smarte kontrakter
- So
- Software
- Space
- spil
- Afsætning
- starte
- Tilstand
- stress
- support
- Understøttet
- Understøtter
- systemet
- Teknologier
- midlertidig
- prøve
- Test
- tests
- tid
- token
- top
- Sporing
- transaktion
- Transaktioner
- Opdatering
- opdateringer
- us
- værdi
- bind
- web
- uge
- inden for
- Arbejde
- world
- X
- XRP
- år