投稿者:Brett McLain、エンジニアリングディレクター– Crypto、Fiat、Stakeing
暗号通貨、支払い、またはステーキングに興味があり、将来の金融システムの構築を支援したい場合は、資金調達エンジニアリングチーム@Krakenが採用しています!
KrakenがXNUMX年前にローンチしたとき、サポートされていた暗号通貨はBTC、LTC、XRPのXNUMXつだけでした。
現在、Krakenは82のブロックチェーンで33のアセットをサポートし、8つの暗号通貨のステーキングサービスをサポートしています。
クラーケンでの年間数百万の預金、引き出し、およびステーキング取引を容易にするために、暗号エンジニアリングチームは、取引所に出入りする資金の円滑な流れを確保するために数百のサービスを運用しています。 これらのサービスを支えるブロックチェーンソフトウェアは頻繁に更新されます。 よりアクティブなブロックチェーンのいくつかでは、ハードフォークとソフトフォークは本質的に毎月である可能性がありますが、イーサリアムのような他のイベントは年にXNUMX回のイベントです。 一般に、ブロックチェーンインフラストラクチャには毎週少なくともいくつかのソフトウェアアップデートがあります。
このように多数の異なるサービスをサポートおよび更新すると同時に、新しいサービスを構築するという課題は、気が遠くなる可能性があります。
過去12か月で、私たちのチームは以下のサポートを追加しました。
- 60の新しい暗号通貨:
- 39 xERC20トークン
- ポルカドット(メインネット発売時)
- 草間
- ファイルコイン(メインネットの立ち上げ時)
- フロー(メインネット起動時)
- カバ
- エネルギーWebトークン(メインネットの立ち上げ時)
- USDT(TRC20)
- 10xパラチェーンクラウドローン
- サンルーム
- 1 x SPLトークン(血清)
- ミナ
- 8つの新しいステーキング資産:
- ポルカドット(メインネット発売時)
- 草間
- イーサリアム2.0(メインネット起動時)
- フロー(メインネット起動時)
- Cardano
- コスモス
- カバ
- サンルーム
これらの成果は、既存の統合の維持とともに達成されました。 暗号化チームのエンジニアは、社内で作成されたゲートウェイソフトウェアだけでなく、ゲートウェイが依存するブロックチェーンインフラストラクチャの保守と展開にも責任を負います。 これらのプロジェクトでのブロックチェーン開発のリズムは猛烈なものになる可能性があり、重大な変更や新しい新機能が頻繁に、時にはほとんど警告なしに登場します。
では、Krakenは、ブロックチェーン開発の速いペースに対応しながら、毎年何十もの新製品をリリースする方法を教えてください。
エンドツーエンド(E2E)テスト!
E2Eテストを重視し、モックを回避する理由
Krakenの初期の頃から、E2Eテストはエンジニアが構築できる最も価値のある種類のテストであることが強調されてきました。 単体テストにはその場所がありますが、複雑な統合に不慣れな多くの開発者は、開発しているソフトウェアの全体的な品質を向上させていると信じて、構築するすべてのコードに対して単体テストを作成する傾向があります。
この道は善意に満ちていますが、多くの場合、将来的に多くの苦痛をもたらす可能性があります。 単体テストへの過度の依存は、アーキテクチャを強化する傾向があります。 これは、コードベース全体の上にエポキシの層を注ぐようなものです。 コードをテストに緊密に結合しているため、コードはより堅固で柔軟性がなく、リファクタリングに耐えることができます。 変更を加える必要がある場合は、テストに大幅な変更を加える必要があり、場合によっては、テストを完全に破棄する必要があります。 リファクタリングコードは、エンジニアリングチームがツールキットに含める重要な機能であり、リファクタリングの容易さに摩擦を加えるものはすべて、導入する前に慎重に評価する必要があります。 コードをリファクタリングする場合、適切に設計されたE2Eテストは多くの場合、多くの変更を必要とせず、アプリケーションの内部の内臓を柔軟に調整しながら、期待どおりに動作し続けることを保証します。
これは、ユニットテストを書くべきではないという意味ですか? 全くない! 単体テストが完璧なソリューションであるシナリオはたくさんありますが、複雑な統合の場合は、E2Eテストの方がうまく機能することがわかりました。 一般に、単体テストは、次の基準を満たすコードに対して記述された場合に最も効果的です。
- 多くのエッジケースでアルゴリズム的に複雑です。
- 明確に定義された要件で厳密にスコープされています。
- 単一の作業単位を完了します。
- ステートレス。
これらの小さく、スコープが厳密な複雑なコードは、多くの場合、大規模なアプリケーションの構成要素であり、リファクタリングが発生したとしても、これらの関数が変更される可能性はほとんどありません。 私たちの世界では、これは住所の導出、住所の検証、トランザクションの署名などです。
ここで重要なポイントは、小さなエンジニアリングチームとして、現在サポートしているサービスの量を維持する方法がないということです。 & エンドツーエンドのテストなしで新製品を構築します。 ユニットテストはテーブルステークスと見なす必要がありますが、単独では、この進化するスペースに追いつくには十分ではありません。 代わりに、当社のサービスが最も一般的な動作モードで正常に動作することを検証する、堅牢な統合およびE2Eテストのセットに多額の投資を行うことを選択しました。
E2Eテストの課題
E2Eテストは強力ですが、万能薬ではありません。 特定の関数または呼び出しのフローを完全にテストするには、特定のエンドポイントまたはインターフェイスをモックする必要があるため、サードパーティのサービスと統合する場合、これらの種類のテストは多くの場合、その価値を大幅に失います。 モックは、モックしているサービスを理解している場合にのみ有効であり、その結果、更新が頻繁で大規模な場合、エラーが発生しやすくなります。 独自のコードとモックを維持することは、DRYの原則(繰り返してはいけません)に違反します。これは、DavidThomasとAndrewHuntが「ThePragmaticProgrammer」で造った用語です。 彼らの本の中で、彼らは「すべての知識は、システム内で単一の、明確で、権威のある表現を持たなければならない」と述べています。 サービスのモックバージョンを作成するということは、そのサービスの潜在的に異なるコピーがXNUMXつあることを意味します。モックバージョンと実際のバージョンです。 モックされた依存関係の動作を翻訳する際のエラーは、今や考慮すべきもうXNUMXつの懸念事項です。
救助への登録
ありがたいことに、ほとんどのブロックチェーンは、継続的インテグレーション(CI)/継続的デプロイ(CD)プロセスの一部としてスピンアップできる一時的なプライベートネットを実行する機能をサポートしています。 この最も一般的な例は、ビットコインの回帰テスト(regtest)モードです。 `-regtest`オプションを使用してビットコインを開始すると、完全に制御できる新しいローカルブロックチェーン環境が作成されます。 regtestモードの主な機能は、任意の数のブロックを自由にマイニングできることです。これにより、E2Eテストで、あらゆる種類とバリエーションの入出金のラウンドトリップを完了し、数百のシナリオを数秒でシミュレートできます。 エッジケースやその他のユニークなシナリオは、マルチシグトランザクション、再編成、料金による交換(RBF)、子の親への支払い(CPFP)など、regtestモードで簡単にシミュレートできます。 これらのテストは、コードにエラーが含まれていないことを確認するだけでなく、ブロックチェーンと元帳の終了状態を検証して、すべてが期待どおりに動作していることを確認します。
Krakenに新しい暗号通貨のサポートを追加するプロセスの一環として、資金提供チームはすべての新しいリストのregtestフレームワークを構築します。 このコードは、メンテナンス体制の基盤です。新しいバージョンがリリースされるたびに、ブロックチェーンノードのバージョンを更新し、CIパイプラインを再実行して、重大な変更がないことを確認するだけです。 リリースノートを注意深く読み、コミュニティと協力することは依然として非常に必要ですが、これらのテストにより、他の方法では得られない新しいバージョンをリリースする自信が得られます。
革新的なソリューション
私たちにとって残念なことに、すべてのブロックチェーンがビットコインほど戦闘テストされているわけではありません。 新しいブロックチェーンはしばしば新しい概念を導入し、クライアントに最もエキサイティングな新しいテクノロジーへのアクセスを提供するために、Krakenはメインネットの開始にできるだけ近い新しいブロックチェーンのサポートを開始することを好みます。 ローンチ日またはその近くに新しい資産を安全にサポートするために、Krakenは、統合の信頼を得て、クライアントの資金が危険にさらされないようにするために、複雑なテストハーネスを開発する必要がある場合があります。
これの完璧な例は、2.0年3月1日にメインネットが稼働してからわずか2020日後にKrakenがEthereum 2.0のサポートを開始したときです。世界中の何千もの個人や企業が、MedallaやSpadinaなどの複数のテストネットでEthereum2.0のテストを支援しました。この統合により、regtestの概念をまったく別のレベルに引き上げることを決定しました。 イーサリアム800,000が重要な開発になることは早い段階でわかっていました。これまでに、Krakenクライアントによって賭けられたXNUMX以上のETHを含め、何百万ものETHがビーコンチェーンに賭けられたため、その信念は真実であることが証明されました。
以下に、開発者がETH2コードリポジトリのXNUMXつにコードをコミットするたびに、継続的インテグレーション(CI)パイプラインがスピンアップおよびティアダウンする一連のサービスの図を示します。
大まかに言うと、テストフローは次のとおりです。
- ETH1プライマリノードと代替ノード(それぞれがコンセンサスを得るために順番にマイニングを行います)を、テスト用のETHの初期量を含むジェネシスで開始します。
- ETH2ビーコンチェーンノードを、ジェネシスをアクティブ化するために16個のバリデーターのみが必要な特別な最小構成モードを使用してプライベートチェーンとして開始します。
- ETH2スマートコントラクトをETH1ブロックチェーンにデプロイします。
- ETHをETH2デポジット契約にデポジットします。ここで、資金が燃やされ、ETH2外部バリデーターノードでバリデーターが作成されます。 これらは、ETH2ネットワークを操作しているだけのバリデーターであり、Krakenバリデーターの外部にあるかのように扱われます。
- ETH1およびETH2ブロックエクスプローラーを起動します。
- データベースを起動します。
- ゲートウェイと署名者を起動します。
- ETH-> ETH2を賭けるクライアントリクエストを挿入します。
- ゲートウェイはクライアント要求を受け取り、ETHをETH1ブロックチェーンのデポジットコントラクトに送信し、ETH2内部バリデーターノードに対応する数のバリデーターを作成します。 バリデーターは内部と外部のバリデーターセットに分離されているため、バリデーターがダウンしたときに何が起こるかをテストし(スラッシュ、ペナルティ、報酬の喪失をテストするため)、ネットワークの残りの部分がダウンまたはオフラインになったときに何が起こるかを確認できますが、バリデーターは起きたまま。
- バリデーターがETH2チェーンでアクティブになるまで監視し、報酬、支払い、スラッシュとペナルティのテスト、失われた報酬の検出、およびクライアントへの報酬の追跡を開始します。
- すべての元帳のすべてが正しく一致するように、すべてのトランザクションで個別の財務調整プロセスを実行します。
上記は、テストフレームワーク内で行われていることの概要です。 発生する他の多くのテスト、チェック、および検証があります。 開発者が何かをデバッグしたり、いずれかのネットワークの状態を調べたりする必要がある場合は、ブロックエクスプローラーに相談して、正確に何が起こったかを一目で確認できます。 通常、CIパイプラインにブロックエクスプローラーを含めませんが、統合の複雑さを考えると、開発フェーズでチェーン上で何が起こっているかを視覚化することが役立ちました。
これによりCIパイプラインに大きな遅延が生じると思われるかもしれませんが、ありがたいことにそうではありません。 現在、Ethereum2.0リポジトリの完全なCIパイプラインの実行にはわずか14分しかかかりません。 これには、すべての依存関係の監査/構築、すべてのサービスの開始、ブロックチェーンへのさまざまなスマートコントラクトのデプロイ、ブロックのマイニング、バリデーターの作成、100以上のすべてのテストシナリオの実行が含まれます。
最終的な考え
Krakenでブロックチェーン統合ごとに包括的なE2Eテストを開発すると、大量のエンジニアリングリソースが消費されます。 私たちの最大の関心事はクライアントの資金の安全性とクライアントが私たちのプラットフォームで質の高い体験をすることを保証することであるため、それは私たちが喜んで支払う価格です。 新しい統合を構築する際のテストに費やす時間が少なければ、チームはより多くの製品をリリースできますか? 疑いもなく。 しかし、そうすることは、エンジニアリングチームだけでなく、会社全体の精神や価値観に反することになります。 これらのテストにより、ブロックチェーンソフトウェアの新しいバージョンに安全に更新し、ハード/ソフトフォーク中の信頼性を高め、変更を展開する際の開発者のストレスを軽減できることが保証されます。
Krakenのエンジニアが業界で最も尊敬されているのはなぜですか? このメッセージ Krakenのエンジニアリング担当副社長であるSteveHuntが、他のブロックチェーンエンジニアを支援するための私たちの価値観と献身について概説します。
出典:https://blog.kraken.com/post/10227/testing-crypto-payments-staking-at-kraken/
- &
- 000
- 11
- 2020
- アクセス
- アクティブ
- すべて
- 全取引
- 許可
- 申し込み
- 建築
- 周りに
- 資産
- 資産
- 戦い
- ビーコンチェーン
- Bitcoin
- ブロックチェーン
- BTC
- ビルド
- 建物
- コール
- 例
- 挑戦する
- 変化する
- 小切手
- 子
- コード
- 環境、テクノロジーを推奨
- 到来
- コマンドと
- コミュニティ
- 企業
- 会社
- 信頼
- コンセンサス
- 続ける
- 縮小することはできません。
- 契約
- 作成
- クリプト
- 暗号通貨
- cryptocurrency
- データベース
- 取引
- 遅らせる
- 検出
- 開発する
- Developer
- 開発者
- 開発
- 取締役
- 早い
- エッジ(Edge)
- 効果的な
- エンジニア
- エンジニアリング
- エンジニア
- 環境
- ERC20
- ETH
- イーサリアム
- エテリアム2.0
- エトス
- イベント
- 交換
- スピーディー
- 特徴
- 特徴
- 法定通貨
- ファイナンシャル
- 柔軟性
- フロー
- フレームワーク
- フル
- function
- 資金調達
- 資金
- 未来
- 創世記
- 良い
- 素晴らしい
- こちら
- ハイ
- お家の掃除
- 認定条件
- HTTPS
- 何百
- 含めて
- 増える
- 産業を変えます
- インフラ
- 統合
- 統合
- 分離
- IT
- 保管
- キー
- 知識
- クラーケン
- 大
- 起動する
- つながる
- レベル
- <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">アップロード履歴
- ローカル
- LTC
- 作成
- 鉱業
- ヶ月
- 一番人気
- マルチシグ
- ネットワーク
- 新しい特徴
- 新製品
- ノード
- 提供
- オペレーティング
- オプション
- 注文
- その他
- 痛み
- 支払う
- 支払い
- プラットフォーム
- 人気
- ブランド
- プライベート
- 製品
- プロジェクト(実績作品)
- 品質
- リーディング
- 減らします
- 依存
- 要件
- リソース
- REST
- 報酬
- リスク
- ラン
- ランニング
- 安全性
- 画面
- サービス
- セッションに
- 小さい
- スマート
- スマート契約
- スマート契約
- So
- ソフトウェア
- スペース
- 利害関係
- ステキング
- start
- 都道府県
- ストレス
- サポート
- サポート
- サポート
- テクノロジー
- 一時的
- test
- テスト
- テスト
- 時間
- トークン
- top
- 追跡
- トランザクション
- 取引
- アップデイト
- 更新版
- us
- 値
- ボリューム
- ウェブ
- 週間
- 以内
- 仕事
- 世界
- X
- xrp
- 年