Par : Brett McLain, directeur de l'ingénierie – Crypto, Fiat, Staking
Si vous êtes intéressé par les crypto-monnaies, les paiements ou le staking et que vous souhaitez contribuer à construire le système financier du futur, l'équipe d'ingénierie de financement @ Kraken recrute !
Lorsque Kraken a été lancé il y a dix ans, seules trois crypto-monnaies étaient prises en charge : BTC, LTC et XRP.
Aujourd'hui, Kraken prend en charge 82 actifs sur 33 blockchains et des services de jalonnement pour 8 crypto-monnaies.
Pour faciliter les millions de dépôts, de retraits et de transactions de jalonnement chaque année chez Kraken, l'équipe d'ingénierie crypto exploite des centaines de services pour assurer la fluidité des flux de fonds entrant et sortant de l'échange. Le logiciel blockchain qui sous-tend ces services est fréquemment mis à jour ; pour certaines des blockchains les plus actives, les hard forks et les soft forks peuvent être de nature mensuelle tandis que d'autres, comme Ethereum, sont des événements semestriels. En général, il y a au moins quelques mises à jour logicielles de notre infrastructure blockchain chaque semaine.
Le défi consistant à prendre en charge et à mettre à jour un si grand nombre de services différents, tout en en créant de nouveaux, peut être intimidant.
Au cours des 12 derniers mois, notre équipe a ajouté la prise en charge de :
- 60 nouvelles cryptomonnaies :
- 39 x jetons ERC20
- Polkadot (au lancement du réseau principal)
- Kusama
- Filecoin (au lancement du réseau principal)
- Flow (au lancement du réseau principal)
- Kava
- Energy Web Token (au lancement du réseau principal)
- USDT (TRC20)
- 10 x prêts participatifs Parachain
- Solana
- 1 x jeton SPL (sérum)
- Mina
- 8 nouveaux actifs de staking :
- Polkadot (au lancement du réseau principal)
- Kusama
- Ethereum 2.0 (au lancement du réseau principal)
- Flow (au lancement du réseau principal)
- Cardano
- Cosmos
- Kava
- Solana
Ces réalisations ont été accomplies parallèlement à la maintenance de nos intégrations existantes. Les ingénieurs de l'équipe crypto sont responsables non seulement du logiciel de passerelle écrit en interne, mais également de la maintenance et du déploiement de notre infrastructure blockchain sur laquelle s'appuient nos passerelles. La cadence de développement de la blockchain sur ces projets peut être fulgurante, avec des changements radicaux et de nouvelles fonctionnalités arrivant fréquemment et parfois avec peu d'avertissement.
Alors, comment Kraken parvient-il à lancer des dizaines de nouveaux produits chaque année tout en suivant le rythme rapide du développement de la blockchain ?
Tests de bout en bout (E2E) !
Pourquoi nous valorisons les tests E2E et évitons les simulations
Depuis les débuts de Kraken, l’accent a été mis sur le fait que les tests E2E constituent le type de tests le plus précieux qu’un ingénieur puisse créer. Les tests unitaires ont leur place, mais de nombreux développeurs inexpérimentés dans les intégrations complexes ont tendance à écrire des tests unitaires pour chaque morceau de code qu'ils créent, convaincus qu'ils améliorent la qualité globale du logiciel qu'ils développent.
Ce chemin, bien que plein de bonnes intentions, peut souvent entraîner beaucoup de souffrances sur la route. Une dépendance excessive aux tests unitaires a tendance à cimenter votre architecture ; c'est comme verser une couche d'époxy sur l'ensemble de votre base de code. Vous associez étroitement le code à ses tests, ce qui rend le code plus rigide, inflexible et résistant à la refactorisation. Si vous devez apporter un changement, vous devrez probablement apporter des modifications importantes aux tests et, dans certains cas, les supprimer complètement. La refactorisation du code est une fonctionnalité clé qu'une équipe d'ingénierie doit avoir dans sa boîte à outils et tout ce qui ajoute de la friction à la facilité de la refactorisation doit être soigneusement évalué avant d'être introduit. Lors de la refactorisation du code, un test E2E bien conçu ne nécessite souvent pas beaucoup de modifications et offre une flexibilité dans l'ajustement des entrailles internes d'une application tout en garantissant qu'elle continue de fonctionner comme prévu.
Cela signifie-t-il que vous ne devriez pas écrire de tests unitaires ? Pas du tout! Il existe de nombreux scénarios dans lesquels les tests unitaires constituent la solution parfaite, mais nous avons constaté que pour les intégrations complexes, les tests E2E fonctionnent mieux. En général, les tests unitaires sont plus efficaces lorsqu'ils sont écrits pour du code qui répond aux critères suivants :
- Algorithmiquement complexe avec de nombreux cas extrêmes.
- Une portée étroite avec des exigences bien définies.
- Complète une seule unité de travail.
- Apatride.
Ces petits morceaux de code complexe, de portée étroite, sont souvent les éléments constitutifs d'une application plus vaste et même si une refactorisation devait se produire, il est peu probable que ces fonctions changent. Dans notre monde, il s'agirait de choses comme la dérivation d'adresse, la validation d'adresse, la signature de transaction, etc.
Ce qu’il faut retenir ici, c’est qu’en tant que petite équipe d’ingénierie, nous ne pourrons jamais maintenir le volume de services que nous prenons actuellement en charge. ainsi que construire de nouveaux produits sans tests de bout en bout. Les tests unitaires doivent être considérés comme des enjeux de table, mais isolés, ils ne suffiraient pas pour nous permettre de suivre le rythme dans cet espace en évolution. Au lieu de cela, nous avons choisi d'investir massivement dans des ensembles robustes d'intégration et de tests E2E qui valident que nos services fonctionneront avec succès dans leurs modes de fonctionnement les plus courants.
Les défis des tests E2E
Même si les tests E2E peuvent être puissants, ils ne constituent pas une panacée. Lors de l'intégration avec des services tiers, ces types de tests perdent souvent une grande partie de leur valeur puisque certains points de terminaison ou interfaces doivent être simulés afin de tester pleinement le flux d'une fonction ou d'un appel spécifique. Les simulations ne valent que par votre compréhension du service dont vous vous moquez et, par conséquent, elles peuvent être sujettes à des erreurs lorsque les mises à jour sont fréquentes et volumineuses. Conserver votre propre code ainsi que vos simulations est une violation du principe DRY (ne vous répétez pas), un terme inventé par David Thomas et Andrew Hunt dans « The Pragmatic Programmer ». Dans leur livre, ils déclarent que « chaque élément de connaissance doit avoir une représentation unique, sans ambiguïté et faisant autorité au sein d'un système ». Créer une version simulée de n'importe quel service signifie qu'il existe désormais deux copies potentiellement divergentes dudit service : votre version simulée et la version réelle. Les erreurs dans la traduction du comportement de la dépendance simulée constituent désormais une autre préoccupation à prendre en compte.
Regtests à la rescousse
Heureusement pour nous, la plupart des blockchains prennent en charge la possibilité d'exécuter des réseaux privés temporaires qui peuvent être lancés dans le cadre de notre processus d'intégration continue (CI)/déploiement continu (CD). L’exemple le plus populaire est le mode de test de régression (regtest) de Bitcoin. Lorsque vous démarrez Bitcoind avec l'option « -regtest », cela crée un nouvel environnement blockchain local sur lequel vous avez un contrôle total. La principale caractéristique du mode regtest est que vous pouvez extraire un nombre arbitraire de blocs à volonté, permettant à vos tests E2E d'effectuer des allers-retours pour les dépôts et retraits de tous types et variations, simulant des centaines de scénarios en quelques secondes. Les cas extrêmes et d'autres scénarios uniques peuvent facilement être simulés en mode regtest, comme les transactions multisig, les réorganisations, le remplacement par des frais (RBF), l'enfant paie pour le parent (CPFP), et plus encore ! Non seulement ces tests garantissent que notre code ne contient aucune erreur, mais ils valident également l'état final de la blockchain et de nos registres pour garantir que tout fonctionne comme prévu.
Dans le cadre du processus d'ajout de la prise en charge d'une nouvelle crypto-monnaie sur Kraken, l'équipe de financement construit un cadre de test de registre pour toutes les nouvelles inscriptions. Ce code est le fondement de notre régime de maintenance : chaque fois qu'une nouvelle version est publiée, il s'agit simplement de mettre à jour la version du nœud blockchain et de réexécuter notre pipeline CI pour s'assurer qu'il n'y a pas de modifications majeures. Une lecture attentive des notes de version et une collaboration avec la communauté sont toujours très nécessaires, mais ces tests nous donnent la confiance nécessaire pour publier de nouvelles versions que nous n'aurions pas autrement.
Creative Solutions
Malheureusement pour nous, toutes les blockchains ne sont pas aussi éprouvées que Bitcoin. Les nouvelles blockchains introduisent souvent de nouveaux concepts, et afin d'offrir à nos clients l'accès aux nouvelles technologies les plus intéressantes, Kraken préfère lancer la prise en charge des nouvelles blockchains aussi près que possible du démarrage du réseau principal. Pour prendre en charge en toute sécurité un nouvel actif à la date de lancement ou à proximité, Kraken doit parfois développer des harnais de tests complexes pour gagner en confiance dans l'intégration et s'assurer que les fonds des clients ne sont pas menacés.
Une illustration parfaite de cela est lorsque Kraken a lancé le support d'Ethereum 2.0 seulement 3 jours après la mise en ligne du réseau principal le 1er décembre 2020. Bien que des milliers de particuliers et d'entreprises à travers le monde aient aidé à tester Ethereum 2.0 sur plusieurs réseaux de test comme Medalla et Spadina, nous avons toujours a décidé de porter le concept de regtests à un tout autre niveau avec cette intégration. Nous savions très tôt qu'Ethereum 2.0 constituerait un développement important, et cette conviction s'est avérée vraie puisque des millions d'ETH ont jusqu'à présent été mis en jeu sur la chaîne de balises, dont plus de 800,000 XNUMX ETH ont été mis en jeu par les clients de Kraken.
Ci-dessous, vous pouvez voir un diagramme de l'ensemble des services que notre pipeline d'intégration continue (CI) lance et détruit à chaque fois qu'un développeur valide du code dans l'un de nos référentiels de code ETH2.
À un niveau élevé, le flux de test est :
- Démarrez les nœuds primaires et alternatifs ETH1 (ils extraient chacun à tour de rôle pour obtenir un consensus) avec une genèse qui contient une quantité initiale d'ETH à tester.
- Démarrez le nœud de chaîne de balises ETH2 en tant que chaîne privée en utilisant un mode de configuration minimal spécial où seuls 16 validateurs sont nécessaires pour activer Genesis.
- Déployez le contrat intelligent ETH2 sur la blockchain ETH1.
- Déposez l'ETH dans le contrat de dépôt ETH2 où les fonds sont brûlés et les validateurs sont créés sur le nœud de validation externe ETH2. Ce sont des validateurs qui exploitent simplement le réseau ETH2 et sont traités comme s’ils étaient externes à tout validateur Kraken.
- Démarrez les explorateurs de blocs ETH1 et ETH2.
- Démarrez la base de données.
- Démarrez la passerelle et les signataires.
- Insérez les demandes des clients pour mettre en jeu ETH -> ETH2.
- Gateway récupère les demandes des clients et envoie l'ETH au contrat de dépôt sur la blockchain ETH1 et crée un nombre correspondant de validateurs sur le nœud de validation interne ETH2. Les validateurs sont séparés en ensembles de validateurs internes et externes afin que nous puissions tester ce qui se passe lorsque nos validateurs tombent en panne (pour tester les réductions, les pénalités, les récompenses perdues) et pour voir ce qui se passe lorsque le reste du réseau tombe en panne ou hors ligne mais que nos validateurs reste debout.
- Surveillez jusqu'à ce que les validateurs soient actifs sur la chaîne ETH2, commencez à suivre les récompenses, les paiements, testez les réductions et les pénalités, la détection des récompenses perdues et payez les récompenses aux clients.
- Exécutez notre processus de rapprochement financier distinct sur toutes les transactions pour vous assurer que tout dans tous nos grands livres correspond correctement.
Ce qui précède n'est qu'un résumé de haut niveau de ce qui se passe dans notre cadre de test ; un certain nombre d'autres tests, contrôles et validations sont effectués. Si un développeur a besoin de déboguer quelque chose ou d'examiner l'état de l'un ou l'autre réseau, il peut consulter les explorateurs de blocs pour voir en un coup d'œil ce qui s'est exactement passé. Nous n'incluons généralement pas d'explorateurs de blocs dans notre pipeline CI, mais étant donné la complexité de l'intégration, il a été utile pendant la phase de développement de visualiser ce qui se passait en chaîne.
Vous pourriez penser que cela ajoute un énorme retard à notre pipeline CI, mais ce n’est heureusement pas le cas. Actuellement, l’exécution du pipeline CI complet pour notre dépôt Ethereum 2.0 ne prend que 14 minutes. Cela comprend l'audit/la création de toutes les dépendances, le démarrage de tous les services, le déploiement de divers contrats intelligents sur la blockchain, l'extraction de blocs, la création de validateurs, puis l'exécution de plus de 100 scénarios de test.
Réflexions finales
Le développement de tests E2E complets pour chaque intégration de blockchain chez Kraken consomme une quantité importante de ressources d'ingénierie. C’est un prix que nous payons volontiers, car notre principale préoccupation est la sécurité des fonds de nos clients et leur garantir une expérience de qualité sur notre plateforme. Notre équipe pourrait-elle publier plus de produits si nous consacrions moins de temps aux tests lors de la création de nouvelles intégrations ? Sans question. Cependant, cela irait à l’encontre de la philosophie et des valeurs non seulement de l’équipe d’ingénierie, mais aussi de l’entreprise dans son ensemble. Ces tests garantissent que nous pouvons mettre à jour en toute sécurité vers les nouvelles versions du logiciel blockchain, accroître la confiance lors des hard/soft forks et réduire le stress des développeurs lors du déploiement des modifications.
Pourquoi les ingénieurs Kraken sont-ils parmi les plus respectés de l’industrie ? Ce message de Steve Hunt, vice-président de l'ingénierie de Kraken, décrit nos valeurs et notre engagement à aider d'autres ingénieurs blockchain.
Source : https://blog.kraken.com/post/10227/testing-crypto-payments-staking-at-kraken/
- &
- 000
- 11
- 2020
- accès
- Compte
- infection
- Tous
- toutes transactions
- Permettre
- Application
- architecture
- autour
- atout
- Outils
- Bataille
- chaîne de balises
- Bitcoin
- blockchain
- BTC
- construire
- Développement
- Appelez-nous
- cas
- challenge
- Change
- Contrôles
- enfant
- code
- collaboration
- Venir
- Commun
- Communautés
- Sociétés
- Société
- confiance
- Consensus
- continue
- contrat
- contrats
- La création
- Crypto
- cryptocurrencies
- crypto-monnaie
- Base de données
- affaire
- retarder
- Détection
- développer
- Développeur
- mobiles
- Développement
- Directeur
- "Early Bird"
- Edge
- Efficace
- ingénieur
- ENGINEERING
- Les ingénieurs
- Environment
- ERC20
- ETH
- Ethereum
- Ethereum 2.0
- Ethos
- événements
- échange
- RAPIDE
- Fonctionnalité
- Fonctionnalités:
- Fiat
- la traduction de documents financiers
- Flexibilité
- flux
- Framework
- plein
- fonction
- financement
- fonds
- avenir
- Général
- Genèse
- Bien
- l'
- ici
- Haute
- Villa
- Comment
- HTTPS
- Des centaines
- Y compris
- Améliore
- industrie
- Infrastructure
- l'intégration
- intégrations
- seul
- IT
- en gardant
- ACTIVITES
- spécialisées
- Kraken
- gros
- lancer
- conduire
- Niveau
- Annonces
- locales
- LTC
- Fabrication
- Mines
- mois
- Le Plus Populaire
- Multisig
- réseau et
- Nouvelles fonctionnalités
- produits nouveaux
- nœuds
- code
- d'exploitation
- Option
- de commander
- Autre
- Pain
- Payer
- Paiements
- plateforme
- Populaire
- prix
- Privé
- Produits
- projets
- qualité
- en cours
- réduire
- dépendance
- Exigences
- Ressources
- REST
- Programme de fidélité
- Analyse
- Courir
- pour le running
- Sécurité
- pour écran
- Services
- set
- petit
- smart
- contrat intelligent
- Contrats intelligents
- So
- Logiciels
- Space
- pieu
- Staking
- Commencer
- Région
- stress
- Support
- Appareils
- Les soutiens
- combustion propre
- Les technologies
- temporaire
- tester
- Essais
- tests
- fiable
- jeton
- top
- Tracking
- transaction
- Transactions
- Mises à jour
- Actualités
- us
- Plus-value
- le volume
- web
- semaine
- dans les
- Activités principales
- world
- X
- xrp
- an