Av: Brett McLain, Director of Engineering - Crypto, Fiat, Staking
Om du är intresserad av kryptovalutor, betalningar eller insatser och vill hjälpa till att bygga framtidens finansiella system, anställer finansieringstekniken @ Kraken!
När Kraken lanserades för ett decennium sedan stöddes endast tre kryptovalutor: BTC, LTC och XRP.
Idag stöder Kraken 82 tillgångar på 33 blockchains och satsningstjänster för 8 kryptovalutor.
För att underlätta miljontals insättningar, uttag och insättningstransaktioner om året på Kraken, driver kryptotekniker -teamet hundratals tjänster för att säkerställa ett smidigt flöde av pengar in och ut ur börsen. Blockchain -programvaran som ligger till grund för dessa tjänster uppdateras ofta; för några av de mer aktiva blockchains kan hårda och mjuka gafflar vara månadsvis medan andra som Ethereum är två gånger årliga evenemang. I allmänhet finns det minst några programuppdateringar till vår blockchain -infrastruktur varje vecka.
Utmaningen att stödja och uppdatera ett så stort antal olika tjänster, samtidigt som man kan bygga nya kan vara skrämmande.
Under de senaste 12 månaderna har vårt team lagt till stöd för:
- 60 nya kryptovalutor:
- 39 x ERC20 -token
- Polkadot (vid lansering av mainnet)
- Kusama
- Filecoin (vid lansering av mainnet)
- Flöde (vid mainnet -lansering)
- Kava
- Energy Web Token (vid lansering av mainnet)
- USDT (TRC20)
- 10 x Parachain Crowdloans
- Solana
- 1 x SPL -token (Serum)
- Mina
- 8 nya insatser:
- Polkadot (vid lansering av mainnet)
- Kusama
- Ethereum 2.0 (vid lansering av mainnet)
- Flöde (vid mainnet -lansering)
- Cardano
- Cosmos
- Kava
- Solana
Dessa prestationer uppnåddes vid sidan av underhållet av våra befintliga integrationer. Ingenjörerna i kryptoteamet är ansvariga för inte bara gateway -programvaran som är skriven i huset, utan också för underhåll och distribution av vår blockchain -infrastruktur som våra gateways är beroende av. Kadensen för blockchain -utveckling på dessa projekt kan vara en blåsande, med brytande förändringar och nya nya funktioner som kommer ofta och ibland med liten varning.
Så, hur lyckas Kraken släppa dussintals nya produkter varje år samtidigt som de hänger med i den snabba utvecklingen av blockchain?
End to End (E2E) tester!
Varför vi värdesätter E2E -tester och undviker hån
Sedan de första dagarna på Kraken har betoningen varit att E2E -tester är den mest värdefulla typen av tester en ingenjör kan bygga. Enhetstester har sin plats, men många utvecklare som inte har erfarenhet av komplexa integrationer tenderar att skriva enhetstester för varje kod som de bygger i tron att de förbättrar den övergripande kvaliteten på programvaran de utvecklar.
Denna väg, även om den är full av goda avsikter, kan ofta leda till mycket smärta på vägen. Överberoende på enhetstester tenderar att cementera din arkitektur; det är som att hälla ett lager epoxi ovanpå hela din kodbas. Du kopplar koden tätt till dess tester, vilket gör koden mer stel, oflexibel och motståndskraftig mot att refaktoreras. Om du behöver göra en ändring kommer du sannolikt att behöva göra betydande ändringar i testerna, och i vissa fall slänga dem helt. Refactoring -kod är en viktig förmåga för ett ingenjörsteam att ha i sin verktygslåda och allt som ger friktion till enkel refactoring bör utvärderas noggrant innan det introduceras. Vid ombyggnad av kod kräver ett väl utformat E2E -test ofta inte många ändringar och ger flexibilitet när det gäller att justera en applikations interna tarm samtidigt som det säkerställer att det fortsätter att fungera som förväntat.
Betyder det att du inte ska skriva enhetstester? Inte alls! Det finns många scenarier där enhetstester är den perfekta lösningen, men vi har funnit att för komplexa integrationer fungerar E2E -test bättre. I allmänhet är enhetstester mest effektiva när de skrivs efter kod som uppfyller följande kriterier:
- Algoritmiskt komplext med många kantfall.
- Tätt omfattande med väldefinierade krav.
- Slutför en enda arbetsenhet.
- Statslös.
Dessa små, tätt omfattande bitar av komplex kod är ofta byggstenarna i en större applikation och även om en refaktor skulle inträffa är det osannolikt att dessa funktioner ändras. I vår värld skulle detta vara saker som adressderivation, adressvalidering, transaktionssignering, etc.
Den viktigaste takeaway här är att som ett litet ingenjörsteam finns det inget sätt att vi någonsin kan behålla volymen av tjänster vi för närvarande stöder, och bygga nya produkter utan änd -till -slut -test. Enhetstester bör betraktas som bordsinsatser, men isolerat sett skulle de inte vara tillräckliga för att vi ska hänga med i detta utvecklande utrymme. Istället har vi valt att investera stort i robusta uppsättningar av integration och E2E -tester som bekräftar att våra tjänster kommer att fungera framgångsrikt i sina vanligaste driftsätt.
Utmaningar med E2E -tester
Även om E2E -tester kan vara kraftfulla, är de inte ett universalmedel. När man integrerar med tjänster från tredje part förlorar denna typ av tester ofta mycket av sitt värde eftersom vissa slutpunkter eller gränssnitt måste hånas för att helt testa flödet av en specifik funktion eller ett samtal. Hånar är bara lika bra som din förståelse av tjänsten du hånar, och som ett resultat kan de vara felbenägna när uppdateringar är frekventa och stora till sin natur. Att behålla din egen kod såväl som dina hån är ett brott mot DRY -principen (upprepa inte dig själv), en term som David Thomas och Andrew Hunt myntade i "The Pragmatic Programmer." I sin bok säger de att "Varje kunskap måste ha en enda, entydig, auktoritativ representation inom ett system." Att skapa en hånad version av en tjänst innebär att det nu finns två potentiellt olika kopior av tjänsten: din hånade version och den faktiska versionen. Fel i översättningen av det hånade beroendebeteendet är nu ett annat problem att ta hänsyn till.
Återprov till räddning
Tack och lov för oss stöder de flesta blockchains möjligheten att köra tillfälliga privata nät som kan snurras upp som en del av vår process för kontinuerlig integration (CI) / kontinuerlig distribution (CD). Det mest populära exemplet på detta är Bitcoins regressionstest (regtest) -läge. När du startar bitcoind med alternativet `-regtest 'skapar det en ny lokal blockchain-miljö som du har fullständig kontroll över. Nyckelfunktionen i regtest -läget är att du kan bryta ett godtyckligt antal block efter behag, så att dina E2E -test kan genomföra rundresor för insättningar och uttag av alla typer och variationer, och simulera hundratals scenarier inom några sekunder. Edge-fall och andra unika scenarier kan enkelt simuleras i regtest-läge, som multisig-transaktioner, omorganisationer, ersätt med avgift (RBF), barn betalar för förälder (CPFP) och mer! Dessa tester säkerställer inte bara att vår kod inte innehåller några fel, den validerar också slutkoden för blockchain och våra reskontrar för att säkerställa att allt fungerar som förväntat.
Som en del av processen för att lägga till stöd för en ny kryptovaluta på Kraken bygger finansieringsteamet ut ett regtest -ramverk för alla nya listor. Den här koden är grunden för vår underhållsregim: varje gång en ny version släpps är det bara att uppdatera blockchain-nodversionen och köra om vår CI-pipeline för att säkerställa att det inte sker några brytande förändringar. Noggrann läsning av versionerna och samarbete med gemenskapen är fortfarande mycket nödvändigt, men dessa tester ger oss förtroende för att släppa nya versioner som vi annars inte skulle ha.
Kreativa lösningar
Tyvärr för oss är inte alla blockchains lika stridstestade som Bitcoin. Nya blockchains introducerar ofta nya koncept, och för att erbjuda våra kunder tillgång till den mest spännande nya tekniken föredrar Kraken att lansera stöd för nya blockchains så nära början av mainnet som möjligt. För att säkert stödja en ny tillgång på eller nära lanseringsdatumet behöver Kraken ibland utveckla komplexa testkablar för att få förtroende för integrationen och för att säkerställa att kundmedel inte är i fara.
En perfekt illustration av detta är när Kraken lanserade support för Ethereum 2.0 bara 3 dagar efter att mainnet gick live den 1 december 2020. Även om tusentals individer och företag runt om i världen hjälpte till att testa Ethereum 2.0 på flera testnät som Medalla och Spadina, så har vi fortfarande bestämde sig för att ta begreppet regtests till en helt annan nivå med denna integration. Vi visste tidigt att Ethereum 2.0 skulle vara en betydande utveckling, och den tron har visat sig vara sann eftersom miljontals ETH hittills har satsats på beacon -kedjan, inklusive mer än 800,000 XNUMX ETH som har satsats av Kraken -kunder.
Nedan kan du se ett diagram över de tjänster som vår pipeline för kontinuerlig integration (CI) snurrar upp och river ner varje gång en utvecklare förbinder kod till ett av våra ETH2 -kodlager.
På en hög nivå är testflödet:
- Starta ETH1 primära och alternativa noder (de växlar var och en för konsensus) med en genesis som innehåller en initial mängd ETH för testning.
- Starta ETH2 beacon chain node som en privat kedja med ett speciellt minimalt konfigurationsläge där endast 16 validatorer är nödvändiga för att aktivera genesis.
- Distribuera ETH2 smart kontrakt till ETH1 blockchain.
- Sätt in ETH i ETH2 -depositionskontraktet där medlen bränns och validerare skapas på ETH2: s externa valideringsnod. Dessa är validatorer som bara driver ETH2 -nätverket och behandlas som om de är externa för någon Kraken -validator.
- Starta blockutforskare för ETH1 och ETH2.
- Starta databas.
- Starta Gateway och signatörer.
- Infoga klientförfrågningar till insats ETH -> ETH2.
- Gateway hämtar klientförfrågningar och skickar ETH till insättningskontraktet på ETH1 blockchain och skapar ett motsvarande antal validerare på ETH2 intern valideringsnod. Validatorer är uppdelade i interna och externa valideringsuppsättningar så att vi kan testa vad som händer när våra validatorer går ner (för att testa nedskärningar, straff, förlorade belöningar) och för att se vad som händer när resten av nätverket går ner eller offline men våra validatorer stanna uppe.
- Övervaka tills validatorerna är aktiva i ETH2 -kedjan, börja spåra belöningar, utbetalningar, testa nedskärningar och straff, förlorade belöningsdetekteringar och betala belöningar till kunder.
- Kör vår separata ekonomiska avstämningsprocess på alla transaktioner för att säkerställa att allt i alla våra bokföringar matchar korrekt.
Ovanstående är bara en hög sammanfattning av vad som pågår inom våra testramar; det finns ett antal andra tester, kontroller och valideringar som förekommer. Om en utvecklare behöver felsöka något eller titta på tillståndet för antingen nätverket kan de konsultera blockutforskarna för att se vad som har hänt med en blick. Vi brukar inte inkludera blockutforskare i vår CI-pipeline, men med tanke på komplexiteten i integrationen var det till hjälp under utvecklingsfasen att visualisera vad som hände i kedjan.
Du kanske tror att detta tillför en enorm fördröjning till vår CI -pipeline, men det är inte fallet tack och lov. För närvarande tar hela CI -pipeline för vår Ethereum 2.0 -repo bara 14 minuter att köra. Detta inkluderar att granska/bygga alla beroenden, starta alla tjänster, distribuera olika smarta kontrakt till blockchain, gruvblock, skapa validatorer och sedan köra igenom alla 100+ testscenarier.
Avslutande tankar
Att utveckla omfattande E2E -test för varje enskild blockchain -integration på Kraken kräver en betydande mängd tekniska resurser. Det är ett pris vi gärna betalar, eftersom vår främsta angelägenhet är säkerheten för våra kunders medel och att se till att de har en kvalitetsupplevelse på vår plattform. Kan vårt team släppa fler produkter om vi lägger mindre tid på tester när vi bygger nya integrationer? Utan frågor. Att göra det skulle dock strida mot etos och värderingar för inte bara ingenjörsteamet utan företaget som helhet. Dessa tester säkerställer att vi säkert kan uppdatera till nya versioner av blockchain -programvara, öka förtroendet för hårda/mjuka gafflar och minska utvecklarens stress vid implementering av förändringar.
Varför är Krakeningenjörer några av de mest respekterade i branschen? Det här meddelandet från Steve Hunt, Krakens VD för teknik, beskriver våra värderingar och engagemang för att hjälpa andra blockchain -ingenjörer.
Källa: https://blog.kraken.com/post/10227/testing-crypto-payments-staking-at-kraken/
- &
- 000
- 11
- 2020
- tillgång
- Konto
- aktiv
- Alla
- Alla transaktioner
- tillåta
- Ansökan
- arkitektur
- runt
- tillgång
- Tillgångar
- Slaget
- fyrkedja
- Bitcoin
- blockchain
- BTC
- SLUTRESULTAT
- Byggnad
- Ring
- fall
- utmanar
- byta
- Kontroller
- barn
- koda
- samverkan
- kommande
- Gemensam
- samfundet
- Företag
- företag
- förtroende
- Konsensus
- fortsätter
- kontrakt
- kontrakt
- Skapa
- crypto
- cryptocurrencies
- kryptovaluta
- Databas
- behandla
- fördröja
- Detektering
- utveckla
- Utvecklare
- utvecklare
- Utveckling
- Direktör
- Tidig
- kant
- Effektiv
- ingenjör
- Teknik
- Ingenjörer
- Miljö
- ERC20
- ETH
- ethereum
- Ethereum 2.0
- Livssyn
- händelser
- utbyta
- SNABB
- Leverans
- Funktioner
- Fiat
- finansiella
- Flexibilitet
- flöda
- Ramverk
- full
- fungera
- finansiering
- fonder
- framtida
- Allmänt
- Genesis
- god
- stor
- här.
- Hög
- Huset
- Hur ser din drömresa ut
- HTTPS
- Hundratals
- Inklusive
- Öka
- industrin
- Infrastruktur
- integrering
- integrationer
- isolering
- IT
- hålla
- Nyckel
- kunskap
- kraken
- Large
- lansera
- leda
- Nivå
- Annonser
- lokal
- LTC
- Framställning
- Gruvdrift
- månader
- Mest populär
- multisig
- nät
- Nya funktioner
- nya produkter
- noder
- erbjudanden
- drift
- Alternativet
- beställa
- Övriga
- Smärta
- Betala
- betalningar
- plattform
- Populära
- pris
- privat
- Produkter
- projekt
- kvalitet
- Läsning
- minska
- tillit
- Krav
- Resurser
- REST
- Belöningar
- Risk
- Körning
- rinnande
- Säkerhet
- screen
- Tjänster
- in
- Small
- smarta
- smart kontrakt
- Smarta kontrakt
- So
- Mjukvara
- Utrymme
- spel
- utsättning
- starta
- Ange
- påkänning
- stödja
- Som stöds
- Stöder
- system
- Tekniken
- temporär
- testa
- Testning
- tester
- tid
- token
- topp
- Spårning
- transaktion
- Transaktioner
- Uppdatering
- Uppdateringar
- us
- värde
- volym
- webb
- vecka
- inom
- Arbete
- världen
- X
- XRP
- år