Von: Brett McLain, Director of Engineering – Crypto, Fiat, Staking
Wenn Sie sich für Kryptowährungen, Zahlungen oder Staking interessieren und beim Aufbau des Finanzsystems der Zukunft mithelfen möchten, stellt das Funding Engineering Team @ Kraken ein!
Als Kraken vor einem Jahrzehnt auf den Markt kam, wurden nur drei Kryptowährungen unterstützt: BTC, LTC und XRP.
Heute unterstützt Kraken 82 Assets auf 33 Blockchains und Staking-Dienste für 8 Kryptowährungen.
Um die Millionen von Einzahlungen, Auszahlungen und Staking-Transaktionen pro Jahr bei Kraken zu erleichtern, betreibt das Krypto-Engineering-Team Hunderte von Dienstleistungen, um einen reibungslosen Geldfluss in und aus der Börse zu gewährleisten. Die Blockchain-Software, die diesen Diensten zugrunde liegt, wird häufig aktualisiert. Für einige der aktiveren Blockchains können Hard- und Soft Forks monatlicher Natur sein, während andere wie Ethereum zweimal jährlich stattfinden. Im Allgemeinen gibt es jede Woche mindestens ein paar Software-Updates für unsere Blockchain-Infrastruktur.
Die Herausforderung, eine so große Anzahl unterschiedlicher Dienste zu unterstützen und zu aktualisieren und gleichzeitig neue zu erstellen, kann entmutigend sein.
In den letzten 12 Monaten hat unser Team Unterstützung hinzugefügt für:
- 60 neue Kryptowährungen:
- 39 x ERC20-Token
- Polkadot (beim Mainnet-Start)
- Kusama
- Filecoin (beim Mainnet-Start)
- Flow (beim Mainnet-Start)
- Kava
- Energy Web Token (beim Mainnet-Start)
- USDT (TRC20)
- 10 x Parachain-Massenkredite
- Solana
- 1 x SPL-Token (Serum)
- Mina
- 8 neue Staking-Assets:
- Polkadot (beim Mainnet-Start)
- Kusama
- Ethereum 2.0 (beim Mainnet-Start)
- Flow (beim Mainnet-Start)
- Cardano
- Kosmos
- Kava
- Solana
Diese Errungenschaften wurden zusammen mit der Wartung unserer bestehenden Integrationen erreicht. Die Ingenieure des Krypto-Teams sind nicht nur für die im Haus geschriebene Gateway-Software verantwortlich, sondern auch für die Wartung und Bereitstellung unserer Blockchain-Infrastruktur, auf die unsere Gateways angewiesen sind. Die Kadenz der Blockchain-Entwicklung bei diesen Projekten kann rasend schnell sein, mit bahnbrechenden Änderungen und neuartigen neuen Funktionen, die häufig und manchmal ohne Vorwarnung kommen.
Wie schafft es Kraken also, jedes Jahr Dutzende neuer Produkte auf den Markt zu bringen und gleichzeitig mit dem schnellen Tempo der Blockchain-Entwicklung Schritt zu halten?
End-to-End (E2E) Tests!
Warum wir E2E-Tests schätzen und Mocks vermeiden
Seit den Anfängen bei Kraken liegt der Schwerpunkt darauf, dass E2E-Tests die wertvollste Art von Tests sind, die ein Ingenieur erstellen kann. Unit-Tests haben ihren Platz, aber viele Entwickler, die mit komplexen Integrationen unerfahren sind, neigen dazu, für jeden Code, den sie erstellen, Unit-Tests zu schreiben, in der Überzeugung, dass sie die Gesamtqualität der von ihnen entwickelten Software verbessern.
Dieser Weg, der voller guter Absichten ist, kann auf dem Weg oft zu viel Schmerz führen. Wenn Sie sich zu sehr auf Unit-Tests verlassen, wird Ihre Architektur tendenziell zementiert. Es ist, als würde man eine Schicht Epoxid über Ihre gesamte Codebasis gießen. Sie koppeln den Code eng an seine Tests, wodurch der Code starrer, unflexibler und resistenter gegen Refactoring wird. Wenn Sie eine Änderung vornehmen müssen, müssen Sie wahrscheinlich erhebliche Änderungen an den Tests vornehmen und sie in einigen Fällen ganz verwerfen. Das Refactoring von Code ist eine Schlüsselfunktion, die ein Engineering-Team in seinem Toolkit haben sollte, und alles, was die Leichtigkeit des Refactorings erschwert, sollte vor der Einführung sorgfältig geprüft werden. Beim Refactoring von Code erfordert ein gut gestalteter E2E-Test oft nicht viele Änderungen und bietet Flexibilität bei der Anpassung der inneren Eingeweide einer Anwendung, während gleichzeitig sichergestellt wird, dass sie weiterhin wie erwartet funktioniert.
Bedeutet das, dass Sie keine Unit-Tests schreiben sollten? Gar nicht! Es gibt viele Szenarien, in denen Unit-Tests die perfekte Lösung sind. Wir haben jedoch festgestellt, dass E2E-Tests für komplexe Integrationen besser funktionieren. Im Allgemeinen sind Komponententests am effektivsten, wenn sie für Code geschrieben wurden, der die folgenden Kriterien erfüllt:
- Algorithmisch komplex mit vielen Randfällen.
- Eng umrissen mit klar definierten Anforderungen.
- Vervollständigt eine einzelne Arbeitseinheit.
- Staatenlos.
Diese kleinen, eng begrenzten Teile von komplexem Code sind oft die Bausteine einer größeren Anwendung, und selbst wenn eine Umgestaltung erfolgen sollte, würden sich diese Funktionen wahrscheinlich nicht ändern. In unserer Welt wären dies Dinge wie Adressableitung, Adressvalidierung, Transaktionssignierung usw.
Die wichtigste Erkenntnis dabei ist, dass wir als kleines Engineering-Team niemals das Volumen der von uns derzeit unterstützten Dienstleistungen aufrechterhalten können. und bauen neue Produkte ohne End-to-End-Tests. Unit-Tests sollten als Table Stakes betrachtet werden, aber isoliert würden sie für uns nicht ausreichen, um in diesem sich entwickelnden Bereich mitzuhalten. Stattdessen haben wir uns entschieden, stark in robuste Integrations- und E2E-Tests zu investieren, die bestätigen, dass unsere Dienste in ihren gängigsten Betriebsmodi erfolgreich funktionieren.
Herausforderungen von E2E-Tests
Obwohl E2E-Tests mächtig sein können, sind sie kein Allheilmittel. Bei der Integration mit Diensten von Drittanbietern verlieren diese Arten von Tests oft einen großen Teil ihres Wertes, da bestimmte Endpunkte oder Schnittstellen gemockt werden müssen, um den Fluss einer bestimmten Funktion oder eines Aufrufs vollständig zu testen. Mocks sind nur so gut wie Ihr Verständnis des Dienstes, den Sie verspotten, und können daher bei häufigen und umfangreichen Updates fehleranfällig sein. Die Pflege Ihres eigenen Codes sowie Ihrer Mocks ist ein Verstoß gegen das DRY-Prinzip (wiederholen Sie sich nicht), ein Begriff, der von David Thomas und Andrew Hunt in „The Pragmatic Programmer“ geprägt wurde. In ihrem Buch stellen sie fest, dass „jedes Wissen innerhalb eines Systems eine einzige, eindeutige, maßgebliche Repräsentation haben muss“. Das Erstellen einer simulierten Version eines beliebigen Dienstes bedeutet, dass es nun zwei potenziell abweichende Kopien dieses Dienstes gibt: Ihre simulierte Version und die tatsächliche Version. Fehler bei der Übersetzung des Verhaltens der vorgetäuschten Abhängigkeit sind jetzt ein weiteres Problem, das berücksichtigt werden muss.
Regtests zur Rettung
Zum Glück unterstützen die meisten Blockchains die Möglichkeit, temporäre private Netze zu betreiben, die als Teil unseres Continuous Integration (CI) / Continuous Deployment (CD)-Prozesses hochgefahren werden können. Das bekannteste Beispiel dafür ist der Regressionstest (Regtest)-Modus von Bitcoin. Wenn Sie Bitcoind mit der Option `-regtest` starten, erstellt es eine neue lokale Blockchain-Umgebung, über die Sie die vollständige Kontrolle haben. Das Hauptmerkmal des Regtest-Modus ist, dass Sie eine beliebige Anzahl von Blöcken nach Belieben abbauen können, sodass Ihre E2E-Tests Roundtrips für Ein- und Auszahlungen aller Art und Variationen durchführen und Hunderte von Szenarien innerhalb von Sekunden simulieren können. Randfälle und andere einzigartige Szenarien können im Regtest-Modus einfach simuliert werden, wie Multisig-Transaktionen, Re-Orgs, Ersetzen durch Gebühr (RBF), Kind zahlt für Eltern (CPFP) und mehr! Diese Tests stellen nicht nur sicher, dass unser Code keine Fehler enthält, sondern validieren auch den Endzustand der Blockchain und unserer Ledger, um sicherzustellen, dass alles wie erwartet funktioniert.
Als Teil des Prozesses zur Unterstützung einer neuen Kryptowährung auf Kraken erstellt das Finanzierungsteam ein Regtest-Framework für alle neuen Listings. Dieser Code ist die Grundlage unseres Wartungsregimes: Jedes Mal, wenn eine neue Version veröffentlicht wird, müssen Sie einfach die Blockchain-Knotenversion aktualisieren und unsere CI-Pipeline erneut ausführen, um sicherzustellen, dass keine bahnbrechenden Änderungen auftreten. Das sorgfältige Lesen der Versionshinweise und die Zusammenarbeit mit der Community sind immer noch sehr wichtig, aber diese Tests geben uns die Zuversicht, neue Versionen zu veröffentlichen, die wir sonst nicht hätten.
Kreative Lösungen
Leider sind nicht alle Blockchains so kampferprobt wie Bitcoin. Neue Blockchains führen oft neue Konzepte ein, und um unseren Kunden Zugang zu den aufregendsten neuen Technologien zu bieten, zieht es Kraken vor, die Unterstützung für neue Blockchains so nah wie möglich am Start des Mainnets zu starten. Um ein neues Asset am oder kurz vor dem Startdatum sicher zu unterstützen, muss Kraken manchmal komplexe Testsysteme entwickeln, um Vertrauen in die Integration zu gewinnen und sicherzustellen, dass Kundengelder nicht gefährdet sind.
Ein perfektes Beispiel dafür ist, als Kraken die Unterstützung für Ethereum 2.0 nur 3 Tage nach dem Live-Schalten des Mainnets am 1. Dezember 2020 einführte. Obwohl Tausende von Einzelpersonen und Unternehmen auf der ganzen Welt geholfen haben, Ethereum 2.0 auf mehreren Testnetzen wie Medalla und Spadina zu testen, haben wir immer noch beschlossen, das Konzept der Regtests mit dieser Integration auf eine ganz andere Ebene zu heben. Wir wussten schon früh, dass Ethereum 2.0 eine bedeutende Entwicklung sein würde, und dieser Glaube hat sich bestätigt, da bisher Millionen von ETH an der Beacon-Kette abgesteckt wurden, darunter mehr als 800,000 ETH, die von Kraken-Kunden abgesteckt wurden.
Unten sehen Sie ein Diagramm der Reihe von Diensten, die unsere Continuous Integration (CI)-Pipeline jedes Mal auf- und abbaut, wenn ein Entwickler Code an eines unserer ETH2-Code-Repositorys festlegt.
Auf einem hohen Niveau ist der Testablauf:
- Starten Sie die primären und alternativen Knoten von ETH1 (sie wechseln sich jeweils ab, um einen Konsens zu erzielen) mit einer Genesis, die eine anfängliche Menge an ETH zum Testen enthält.
- Starten Sie den ETH2-Beacon-Chain-Knoten als private Kette mit einem speziellen minimalen Konfigurationsmodus, in dem nur 16 Validatoren erforderlich sind, um Genesis zu aktivieren.
- Stellen Sie den ETH2-Smart-Vertrag in der ETH1-Blockchain bereit.
- Hinterlegen Sie ETH in den ETH2-Einzahlungsvertrag, wo die Gelder verbrannt und Validatoren auf dem externen ETH2-Validatorknoten erstellt werden. Dies sind Validatoren, die nur das ETH2-Netzwerk betreiben und so behandelt werden, als wären sie außerhalb von Kraken-Validatoren.
- Starten Sie die Block-Explorer ETH1 und ETH2.
- Datenbank starten.
- Starten Sie Gateway und Unterzeichner.
- Fügen Sie Kundenanfragen zum Abstecken von ETH -> ETH2 ein.
- Gateway nimmt Kundenanfragen auf und sendet ETH an den Depotvertrag auf der ETH1-Blockchain und erstellt eine entsprechende Anzahl von Validatoren auf dem ETH2-internen Validator-Knoten. Validatoren sind in interne und externe Validator-Sets unterteilt, damit wir testen können, was passiert, wenn unsere Validatoren ausfallen (um Schnitte, Strafen, verlorene Belohnungen zu testen) und zu sehen, was passiert, wenn der Rest des Netzwerks ausfällt oder offline geht, aber unsere Validatoren aufbleiben.
- Überwachen Sie, bis die Validatoren in der ETH2-Kette aktiv sind, beginnen Sie mit der Verfolgung von Belohnungen, Auszahlungen, Testkürzungen und Strafen, Erkennung verlorener Belohnungen und zahlen Sie Belohnungen an Kunden aus.
- Führen Sie unseren separaten Finanzabstimmungsprozess für alle Transaktionen durch, um sicherzustellen, dass alles in allen unseren Ledgern korrekt übereinstimmt.
Das oben Gesagte ist nur eine grobe Zusammenfassung dessen, was in unserem Test-Framework vor sich geht; Es gibt eine Reihe weiterer Tests, Prüfungen und Validierungen, die durchgeführt werden. Wenn ein Entwickler etwas debuggen oder sich den Status eines der beiden Netzwerke ansehen muss, kann er die Block-Explorer konsultieren, um auf einen Blick zu sehen, was genau passiert ist. Normalerweise nehmen wir Block-Explorer nicht in unsere CI-Pipeline auf, aber angesichts der Komplexität der Integration war es während der Entwicklungsphase hilfreich, zu visualisieren, was in der Kette passiert.
Sie könnten denken, dass dies unsere CI-Pipeline enorm verzögert, aber das ist zum Glück nicht der Fall. Derzeit dauert die Ausführung der vollständigen CI-Pipeline für unser Ethereum 2.0-Repo nur 14 Minuten. Dazu gehören die Prüfung/Erstellung aller Abhängigkeiten, das Starten aller Dienste, das Bereitstellen verschiedener Smart Contracts in der Blockchain, das Mining von Blöcken, das Erstellen von Validatoren und das anschließende Durchlaufen aller über 100 Testszenarien.
Abschließende Überlegungen
Die Entwicklung umfassender E2E-Tests für jede einzelne Blockchain-Integration bei Kraken verbraucht eine erhebliche Menge an Engineering-Ressourcen. Dies ist ein Preis, den wir gerne zahlen, denn unser wichtigstes Anliegen ist die Sicherheit der Gelder unserer Kunden und die Gewährleistung einer qualitativ hochwertigen Erfahrung auf unserer Plattform. Könnte unser Team mehr Produkte veröffentlichen, wenn wir beim Erstellen neuer Integrationen weniger Zeit mit Tests verbringen würden? Ohne Frage. Dies würde jedoch nicht nur dem Ethos und den Werten des Ingenieurteams, sondern des gesamten Unternehmens widersprechen. Diese Tests stellen sicher, dass wir sicher auf neue Versionen der Blockchain-Software aktualisieren, das Vertrauen bei Hard-/Soft-Forks erhöhen und den Stress der Entwickler bei der Bereitstellung von Änderungen reduzieren können.
Warum gehören die Ingenieure von Kraken zu den angesehensten der Branche? Diese Nachricht von Steve Hunt, VP of Engineering bei Kraken, umreißt unsere Werte und unser Engagement, anderen Blockchain-Ingenieuren zu helfen.
Quelle: https://blog.kraken.com/post/10227/testing-crypto-payments-staking-at-kraken/
- &
- 000
- 11
- 2020
- Zugang
- Konto
- aktiv
- Alle
- Alle Transaktionen
- Zulassen
- Anwendung
- Architektur
- um
- Vermögenswert
- Details
- Schlacht
- Leuchtfeuerkette
- Bitcoin
- Blockchain
- BTC
- bauen
- Building
- rufen Sie uns an!
- Fälle
- challenges
- Übernehmen
- Schecks
- der
- Code
- Zusammenarbeit
- Kommen
- gemeinsam
- community
- Unternehmen
- Unternehmen
- Vertrauen
- Konsens
- weiter
- Vertrag
- Verträge
- Erstellen
- Krypto
- Kryptowährungen
- kryptowährung
- Datenbase
- Deal
- verzögern
- Entdeckung
- entwickeln
- Entwickler:in / Unternehmen
- Entwickler
- Entwicklung
- Direktor
- Früh
- Edge
- Effektiv
- Ingenieur
- Entwicklung
- Ingenieure
- Arbeitsumfeld
- ERC20
- ETH
- Astraleum
- Ethereum 2.0
- Ethos
- Veranstaltungen
- Austausch-
- FAST
- Merkmal
- Eigenschaften
- Fiat
- Revolution
- Flexibilität
- Fluss
- Unser Ansatz
- voller
- Funktion
- Finanzierung
- Mittel
- Zukunft
- Allgemeines
- Genese
- gut
- groß
- hier
- High
- Häuser
- Ultraschall
- HTTPS
- hunderte
- Einschließlich
- Erhöhung
- Energiegewinnung
- Infrastruktur
- Integration
- Integrationen
- Isolierung
- IT
- Aufbewahrung
- Wesentliche
- Wissen
- Kraken
- grosse
- starten
- führen
- Niveau
- Liste
- aus einer regionalen
- LTC
- Making
- Bergbau
- Monat
- Am beliebtesten
- Multisig
- Netzwerk
- Neue Funktionen
- neue Produkte
- Fiber Node
- bieten
- die
- Option
- Auftrag
- Andere
- Schmerzen
- AUFMERKSAMKEIT
- Zahlungen
- Plattform
- Beliebt
- Preis
- privat
- Produkte
- Projekte
- Qualität
- Lesebrillen
- Veteran
- Vertrauen
- Voraussetzungen:
- Downloads
- REST
- Belohnung
- Risiko
- Führen Sie
- Laufen
- Sicherheit
- Bildschirm
- Leistungen
- kompensieren
- klein
- smart
- Smart-Vertrag
- Smart Contracts
- So
- Software
- Raumfahrt
- Scheiterhaufen
- Staking
- Anfang
- Bundesstaat
- Der Stress
- Support
- Unterstützte
- Unterstützt
- System
- Technologies
- vorübergehend
- Test
- Testen
- Tests
- Zeit
- Zeichen
- Top
- Tracking
- Transaktion
- Transaktionen
- Aktualisierung
- Updates
- us
- Wert
- Volumen
- Netz
- Woche
- .
- Arbeiten
- weltweit wie ausgehandelt und gekauft ausgeführt wird.
- X
- xrp
- Jahr