Di: Brett McLain, Direttore dell'Ingegneria – Crypto, Fiat, Staking
Se sei interessato alle criptovalute, ai pagamenti o allo staking e vuoi aiutare a costruire il sistema finanziario del futuro, il team di ingegneria dei finanziamenti @ Kraken sta assumendo!
Quando Kraken è stato lanciato dieci anni fa, erano supportate solo tre criptovalute: BTC, LTC e XRP.
Oggi Kraken supporta 82 asset su 33 blockchain e servizi di staking per 8 criptovalute.
Per facilitare i milioni di depositi, prelievi e transazioni di staking all'anno su Kraken, il team di ingegneri crittografici gestisce centinaia di servizi per garantire il flusso regolare di fondi in entrata e in uscita dall'exchange. Il software blockchain alla base di questi servizi viene aggiornato frequentemente; per alcuni dei blockchain più attivi, hard e soft fork possono essere di natura mensile mentre altri come Ethereum sono eventi biennali. In generale, ci sono almeno alcuni aggiornamenti software alla nostra infrastruttura blockchain ogni settimana.
La sfida di supportare e aggiornare un numero così elevato di servizi diversi, mentre allo stesso tempo costruirne di nuovi, può essere scoraggiante.
Negli ultimi 12 mesi il nostro team ha aggiunto il supporto per:
- 60 nuove criptovalute:
- 39 gettoni ERC20
- Polkadot (al lancio sulla rete principale)
- Kusama
- Filecoin (al lancio sulla rete principale)
- Flusso (all'avvio della rete principale)
- Kava
- Energy Web Token (al lancio della rete principale)
- EURT (TRC20)
- 10 prestiti di paracatena
- solario
- 1 gettone SPL (siero)
- Mina
- 8 nuove attività di staking:
- Polkadot (al lancio sulla rete principale)
- Kusama
- Ethereum 2.0 (al lancio sulla rete principale)
- Flusso (all'avvio della rete principale)
- Cardano
- cosmo
- Kava
- solario
Questi risultati sono stati raggiunti insieme al mantenimento delle nostre integrazioni esistenti. Gli ingegneri del team di crittografia sono responsabili non solo del software gateway scritto internamente, ma anche della manutenzione e dell'implementazione della nostra infrastruttura blockchain su cui si basano i nostri gateway. La cadenza dello sviluppo della blockchain su questi progetti può essere vertiginosa, con modifiche sostanziali e nuove funzionalità che arrivano frequentemente e talvolta con poco preavviso.
Quindi, come fa Kraken a rilasciare dozzine di nuovi prodotti ogni anno, tenendo il passo con il ritmo veloce dello sviluppo della blockchain?
Test End to End (E2E)!
Perché apprezziamo i test E2E ed evitiamo le prese in giro
Sin dai primi giorni in Kraken, l'enfasi è stata che i test E2E sono il tipo di test più prezioso che un ingegnere possa costruire. Gli unit test hanno il loro posto, ma molti sviluppatori inesperti con integrazioni complesse tendono a scrivere unit test per ogni pezzo di codice che costruiscono nella convinzione di migliorare la qualità complessiva del software che stanno sviluppando.
Questo percorso, sebbene pieno di buone intenzioni, può spesso portare a molto dolore lungo la strada. L'eccessivo affidamento agli unit test tende a cementare la tua architettura; è come versare uno strato di resina epossidica sopra l'intera base di codice. Stai accoppiando strettamente il codice ai suoi test, rendendo il codice più rigido, inflessibile e resistente al refactoring. Se devi apportare una modifica, probabilmente dovrai apportare modifiche significative ai test e, in alcuni casi, eliminarli del tutto. Il codice di refactoring è una funzionalità chiave che un team di ingegneri può avere nel proprio toolkit e tutto ciò che aggiunge attrito alla facilità del refactoring deve essere valutato attentamente prima di essere introdotto. Quando si esegue il refactoring del codice, un test E2E ben progettato spesso non richiede molte modifiche e offre flessibilità nella regolazione delle viscere interne di un'applicazione assicurando che continui a funzionare come previsto.
Questo significa che non dovresti scrivere unit test? Affatto! Esistono molti scenari in cui gli unit test sono la soluzione perfetta, tuttavia abbiamo scoperto che per integrazioni complesse, i test E2E funzionano meglio. In generale, gli unit test sono più efficaci se scritti per codice che soddisfa i seguenti criteri:
- Algoritmicamente complesso con molti casi limite.
- Stretto ambito con requisiti ben definiti.
- Completa una singola unità di lavoro.
- Apolide.
Questi piccoli pezzi di codice complesso con ambito limitato sono spesso gli elementi costitutivi di un'applicazione più ampia e anche se si verificasse un refactoring, è improbabile che queste funzioni cambino. Nel nostro mondo si tratterebbe di cose come la derivazione dell'indirizzo, la convalida dell'indirizzo, la firma della transazione, ecc.
Il punto chiave qui è che, come piccolo team di ingegneri, non potremmo mai mantenere il volume di servizi che attualmente supportiamo, ed costruire nuovi prodotti senza test end-to-end. I test unitari dovrebbero essere considerati una posta in gioco da tavolo, ma da soli non sarebbero sufficienti per tenere il passo in questo spazio in evoluzione. Invece, abbiamo scelto di investire molto in solidi set di integrazione e test E2E che convalidano che i nostri servizi funzioneranno con successo nelle loro modalità operative più comuni.
Sfide dei test E2E
Sebbene i test E2E possano essere potenti, non sono una panacea. Quando si integrano con servizi di terze parti, questi tipi di test spesso perdono molto del loro valore poiché alcuni endpoint o interfacce devono essere presi in giro per testare completamente il flusso di una specifica funzione o chiamata. I mock sono validi solo quanto la tua comprensione del servizio che stai prendendo in giro e, di conseguenza, possono essere soggetti a errori quando gli aggiornamenti sono frequenti e di natura ampia. Mantenere il proprio codice così come le proprie prese in giro è una violazione del principio DRY (non ripetere te stesso), un termine coniato da David Thomas e Andrew Hunt in "The Pragmatic Programmer". Nel loro libro affermano che "Ogni pezzo di conoscenza deve avere una rappresentazione unica, inequivocabile e autorevole all'interno di un sistema". La creazione di una versione simulata di qualsiasi servizio significa che ora ci sono due copie potenzialmente divergenti di detto servizio: la tua versione simulata e la versione effettiva. Gli errori nella traduzione del comportamento della dipendenza derisa sono ora un'altra preoccupazione di cui tenere conto.
Registi in soccorso
Fortunatamente per noi, la maggior parte delle blockchain supporta la possibilità di eseguire reti private temporanee che possono essere avviate come parte del nostro processo di integrazione continua (CI)/distribuzione continua (CD). L'esempio più popolare di questo è la modalità di test di regressione (regtest) di Bitcoin. Quando avvii bitcoind con l'opzione `-regtest`, crea un nuovo ambiente blockchain locale su cui hai il controllo completo. La caratteristica fondamentale della modalità regtest è che puoi estrarre un numero arbitrario di blocchi a piacimento, consentendo ai tuoi test E2E di completare round trip per depositi e prelievi di tutti i tipi e variazioni, simulando centinaia di scenari in pochi secondi. I casi limite e altri scenari unici possono essere facilmente simulati in modalità regtest, come transazioni multisig, riorganizzazioni, sostituzione a pagamento (RBF), figlio paga per genitore (CPFP) e altro ancora! Questi test non solo assicurano che il nostro codice non contenga errori, ma convalidano anche lo stato finale della blockchain e dei nostri libri mastri per garantire che tutto funzioni come previsto.
Come parte del processo per aggiungere il supporto per una nuova criptovaluta su Kraken, il team di finanziamento crea un framework di regtest per tutti i nuovi elenchi. Questo codice è la base del nostro regime di manutenzione: ogni volta che viene rilasciata una nuova versione, si tratta semplicemente di aggiornare la versione del nodo blockchain e di rieseguire la nostra pipeline CI per garantire che non ci siano modifiche sostanziali. La lettura attenta delle note di rilascio e la collaborazione con la community sono ancora molto necessarie, ma questi test ci danno fiducia nel rilasciare nuove versioni che altrimenti non avremmo.
Soluzioni creative
Sfortunatamente per noi, non tutte le blockchain sono testate come Bitcoin. Le nuove blockchain spesso introducono nuovi concetti e, per offrire ai nostri clienti l'accesso alle nuove tecnologie più interessanti, Kraken preferisce lanciare il supporto per le nuove blockchain il più vicino possibile all'inizio della rete principale. Per supportare in sicurezza una nuova risorsa alla data di lancio o in prossimità della data di lancio, Kraken a volte ha bisogno di sviluppare complessi test harness per acquisire fiducia nell'integrazione e garantire che i fondi dei clienti non siano a rischio.
Un perfetto esempio di ciò è quando Kraken ha lanciato il supporto per Ethereum 2.0 solo 3 giorni dopo l'attivazione della mainnet il 1° dicembre 2020. Sebbene migliaia di individui e aziende in tutto il mondo abbiano aiutato a testare Ethereum 2.0 su più testnet come Medalla e Spadina, continuiamo a ha deciso di portare il concetto di regtest a un livello completamente diverso con questa integrazione. Sapevamo fin dall'inizio che Ethereum 2.0 sarebbe stato uno sviluppo significativo e questa convinzione si è rivelata vera poiché finora milioni di ETH sono stati puntati sulla catena di beacon, inclusi oltre 800,000 ETH che sono stati puntati dai clienti Kraken.
Di seguito puoi vedere un diagramma dell'insieme di servizi che la nostra pipeline di integrazione continua (CI) avvia e distrugge ogni volta che uno sviluppatore esegue il commit del codice in uno dei nostri repository di codice ETH2.
Ad alto livello, il flusso di prova è:
- Avvia i nodi primari e alternativi di ETH1 (ciascuno si alternano nel mining per ottenere il consenso) con una genesi che contiene una quantità iniziale di ETH per il test.
- Avvia il nodo della catena di beacon ETH2 come catena privata utilizzando una speciale modalità di configurazione minima in cui sono necessari solo 16 validatori per attivare la genesi.
- Distribuisci lo smart contract ETH2 sulla blockchain ETH1.
- Deposita ETH nel contratto di deposito ETH2 in cui i fondi vengono bruciati e i validatori vengono creati sul nodo del validatore esterno ETH2. Questi sono validatori che stanno solo facendo funzionare la rete ETH2 e sono trattati come se fossero esterni a qualsiasi validatore Kraken.
- Avvia esploratori di blocchi ETH1 ed ETH2.
- Avvia database.
- Avvia gateway e firmatari.
- Inserisci le richieste dei clienti per lo staking di ETH -> ETH2.
- Il gateway raccoglie le richieste dei clienti e invia ETH al contratto di deposito sulla blockchain ETH1 e crea un numero corrispondente di validatori sul nodo di validazione interno ETH2. I validatori sono segregati in set di validatori interni ed esterni in modo che possiamo testare cosa succede quando i nostri validatori scendono (per testare tagli, penalità, ricompense perse) e per vedere cosa succede quando il resto della rete va inattivo o offline ma i nostri validatori rimanere in piedi.
- Monitora fino a quando i validatori non sono attivi sulla catena ETH2, inizia a monitorare i premi, i pagamenti, i tagli ai test e le penalità, il rilevamento dei premi persi e paga i premi ai clienti.
- Esegui il nostro processo di riconciliazione finanziaria separato su tutte le transazioni per assicurarti che tutto in tutti i nostri libri mastri corrisponda correttamente.
Quanto sopra è solo un riepilogo di alto livello di ciò che sta accadendo all'interno del nostro framework di test; ci sono una serie di altri test, controlli e convalide che si verificano. Se uno sviluppatore ha bisogno di eseguire il debug di qualcosa o guardare lo stato di una delle reti, può consultare i block explorer per vedere cosa è successo esattamente a colpo d'occhio. Di solito non includiamo block explorer nella nostra pipeline CI, ma data la complessità dell'integrazione, durante la fase di sviluppo è stato utile visualizzare cosa stava succedendo sulla catena.
Potresti pensare che questo aggiunga un enorme ritardo alla nostra pipeline di CI, ma per fortuna non è così. Attualmente, l'esecuzione della pipeline CI completa per il nostro repository Ethereum 2.0 richiede solo 14 minuti. Ciò include l'auditing/costruzione di tutte le dipendenze, l'avvio di tutti i servizi, l'implementazione di vari contratti intelligenti sulla blockchain, il mining di blocchi, la creazione di validatori e quindi l'esecuzione di tutti gli oltre 100 scenari di test.
Considerazioni finali
Lo sviluppo di test E2E completi per ogni singola integrazione blockchain in Kraken consuma una quantità significativa di risorse ingegneristiche. È un prezzo che paghiamo volentieri, poiché la nostra principale preoccupazione è la sicurezza dei fondi dei nostri clienti e garantire che abbiano un'esperienza di qualità sulla nostra piattaforma. Il nostro team potrebbe rilasciare più prodotti se dedicassimo meno tempo ai test durante la creazione di nuove integrazioni? Senza domande. Tuttavia, ciò andrebbe contro l'etica e i valori non solo del team di ingegneri, ma dell'azienda nel suo insieme. Questi test assicurano che possiamo aggiornare in sicurezza alle nuove versioni del software blockchain, aumentare la fiducia durante i fork hard/soft e ridurre lo stress degli sviluppatori durante l'implementazione delle modifiche.
Perché gli ingegneri Kraken sono tra i più rispettati del settore? Questo messaggio di Steve Hunt, VP of Engineering di Kraken, delinea i nostri valori e la nostra dedizione nell'aiutare altri ingegneri blockchain.
Fonte: https://blog.kraken.com/post/10227/testing-crypto-payments-staking-at-kraken/
- &
- 000
- 11
- 2020
- accesso
- Il mio account
- attivo
- Tutti
- Tutte le transazioni
- Consentire
- Applicazioni
- architettura
- in giro
- attività
- Attività
- Battaglia
- catena di faro
- Bitcoin
- blockchain
- BTC
- costruire
- Costruzione
- chiamata
- casi
- Challenge
- il cambiamento
- Controlli
- bambino
- codice
- collaborazione
- arrivo
- Uncommon
- comunità
- Aziende
- azienda
- fiducia
- Consenso
- continua
- contratto
- contratti
- Creazione
- crypto
- cryptocurrencies
- criptovaluta
- Banca Dati
- affare
- ritardo
- rivelazione
- sviluppare
- Costruttori
- sviluppatori
- Mercato
- Direttore
- Presto
- bordo
- Efficace
- ingegnere
- Ingegneria
- Ingegneri
- Ambiente
- ERC20
- ETH
- Ethereum
- Ethereum 2.0
- ethos
- eventi
- exchange
- FAST
- caratteristica
- Caratteristiche
- Fiat
- finanziario
- Flessibilità
- flusso
- Contesto
- pieno
- function
- finanziamento
- fondi
- futuro
- Generale
- Genesis
- buono
- grande
- qui
- Alta
- Casa
- Come
- HTTPS
- centinaia
- Compreso
- Aumento
- industria
- Infrastruttura
- integrazione
- integrazioni
- da solo
- IT
- conservazione
- Le
- conoscenze
- Kraken
- grandi
- lanciare
- portare
- Livello
- Annunci
- locale
- LTC
- Fare
- Siti di estrazione mineraria
- mese
- Più popolare
- Multisig
- Rete
- Nuove funzionalità
- prodotti nuovi
- nodi
- offrire
- operativo
- Opzione
- minimo
- Altro
- Dolore
- Paga le
- pagamenti
- piattaforma
- Popolare
- prezzo
- un bagno
- Prodotti
- progetti
- qualità
- Lettura
- ridurre
- fiducia
- Requisiti
- Risorse
- REST
- Rewards
- Rischio
- Correre
- running
- Sicurezza
- allo
- Servizi
- set
- piccole
- smart
- smart contract
- Smart Contract
- So
- Software
- lo spazio
- palo
- Staking
- inizia a
- Regione / Stato
- stress
- supporto
- supportato
- supporti
- sistema
- Tecnologie
- temporaneo
- test
- Testing
- test
- tempo
- token
- top
- Tracking
- delle transazioni
- Le transazioni
- Aggiornanento
- Aggiornamenti
- us
- APPREZZIAMO
- volume
- sito web
- settimana
- entro
- Lavora
- mondo
- X
- XRP
- anno