cryptofoundry

cryptofoundry へのお問い合わせ

構築または自動化したい内容をお聞かせください。

記事

Currencyinfo 4.2.0:暗号資産および法定通貨向けのセルフホスト型参照レートサービス

ADAMANT Messenger鋳造所から ↗
Currencyinfo 4.2.0:暗号資産および法定通貨向けのセルフホスト型参照レートサービス

ウォレット、エクスプローラー、決済サービス、会計ツール、ポートフォリオアプリなど、あらゆるサービスが最終的に直面する問いがあります。それは「このアセットの現在の価値はいくらか?」というものです。難しいのは単一のAPI呼び出しを行うことではありません。どのソースを信頼するか、異なる市場データを正規化するか、クォータ制限や停止に対処するか、不正なデータを排除するか、履歴を保持するか、そしてなぜその数値が変化したのかを説明することです。Currencyinfoは、まさにその作業を自動化するために設計されました。バージョン4.2.0からは、ADAMANT内部のコンポーネントという枠を超え、暗号資産や法定通貨のデータを扱うすべての人に向けた、汎用的かつオープンソースのセルフホスト型参照レートサービスとして提供されます。

参照レートとは、単一のプロバイダーから借りてきた謎の数値であってはなりません。それは、運用者が制御するルールによって導き出される、観測可能な結果であるべきです。

マルチソース集約

単一ソースによる価格取得は、そのソースがリクエストを制限したり、市場の取り扱いを終了したり、フォーマットを変更したり、特定の地域で利用不可になったり、異常値を報告したりするまでは便利です。Currencyinfo 4.2.0は、最大10の独立したプロバイダーを相互検証し、それらの見積もりを1つの設定可能な参照レートに変換します。

今回のリリースでは、APIキー不要のコネクタとしてCoinPaprika、CoinLore、Binance、ExchangeRate-APIの4つが追加されました。デフォルト設定では、既存のCurrency APIと合わせて、API認証情報なしで動作する5つのソースが利用可能です。CoinGeckoは引き続きデモキーで利用でき、CoinMarketCapとExchangeRate.hostは認証済み設定をサポートしています。MOEXは特殊なオプションとして提供されます。CryptoCompareは互換性のために保持されていますが、新規アクセスにサブスクリプションが必要となったため、非推奨となりデフォルトでは無効化されています。

プロバイダーによって、アセットのカバー範囲、更新頻度、地域の可用性、クォータ、市場の前提条件は異なります。Currencyinfoはこれらの違いを明確にした上で、最終的なレートにどのように反映させるかを運用者が制御できるようにしています。

見積もりから信頼できるレートへ

データパイプラインは5つのステージで構成されます。ソースはそれぞれのスケジュールでポーリングされます。検証プロセスではペアを正規化し、ゼロや非有限のクロスレートを排除します。集約プロセスでは乖離を検出し、グループや重みを適用し、minSourcesを使用してペアを公開するのに十分なサポートがあるかを判断します。履歴は運用者自身のMongoDBにスナップショットとして保存されます。最後に、REST APIが焦点の絞られたエンドポイントを通じて現在および過去のレートを提供します。

Currencyinfo 4.2.0: 信頼できる参照レート、すべての人へ

この短い説明の裏には、いくつかの有用な制御機能が隠されています。信頼できるソースグループをフォールバックグループから分離したり、重み付けやマージ戦略によってプロバイダーの組み合わせ方を指定したりできます。直接の見積もりが利用できない場合でも、決定論的なベースコインの三角測量によってペアを導出可能です。rateLifetimeによる鮮度管理により、古い観測値が最新のものとして誤認されることを防ぎます。

最も重要な点として、minSourcesが鮮度を考慮するようになりました。設定されているプロバイダーが使用可能なデータの提供を停止した場合、単に設定ファイルに存在するという理由だけでカウントされることはありません。十分な「現在」の証拠がある場合にのみサービスが公開され、そうでない場合は予測可能な形で劣化します。レジリエンスとは、すべてのプロバイダーが常に健全であると仮定することではなく、どの証拠が最新で、どれが欠落しており、システムが次に何をすべきかを把握することです。

運用者向けの改善

Currencyinfo 4.2.0では、エンドポイントの背後にある基盤も強化されました。日付順の3つのティッカーインデックスにより、大規模な履歴クエリがより実用的になりました。約2億3800万ドキュメントのリリース検証データセットにおいて、代表的なペアと範囲のクエリは22.8秒から8ミリ秒へと改善されました。実際のパフォーマンスはハードウェア、データの分布、キャッシュ状態、クエリの形状に依存しますが、蓄積された履歴を運用面で活用することが格段に容易になったことは明らかです。

サービスはNode.js 22.12以降に移行し、NestJS 12、Mongoose 9、Zod 4、TypeScript 6、Jest 30にプラットフォームを更新しました。テストスイートは28のスイートと266のテストを網羅しています。

コンテナ配布はファーストクラスのリリース対象となりました。イメージはlinux/amd64およびlinux/arm64向けに公開され、OCIメタデータ、SBOM、ビルドの来歴が含まれています。ランタイムは非rootで実行され、本番イメージからパッケージマネージャーは削除され、ログには制限付き権限が使用され、シークレット値は秘匿化され、CIパイプラインには脆弱性スキャンが含まれています。

新規デプロイメントにおいて最も手軽な方法は、公開イメージを使用することです。

docker pull ghcr.io/adamant-im/currencyinfo:4.2.0

Currencyinfo 4.2.0: 信頼できる参照レート、すべての人へ

明確な境界線

Currencyinfoは参照レートを生成するサービスです。これは取引所の実行フィードや、高頻度市場データターミナル、あるいはSLAが保証されたホスト型APIではありません。セルフホストすることで、設定、履歴、プライバシー、可用性を制御できる反面、デプロイメントの監視や、各アップストリームプロバイダーの利用規約、制限、再配布ルールを遵守する責任は運用者に帰属します。

4.1.2からのアップグレードには計画が必要です。古い設定では認証情報を必要とするプロバイダーが有効になっている可能性があるため、4.2.0を開始する前に、それらのソースを無効にするか、キーを追加するか、新しいキーレスのデフォルト設定を採用してください。既存の巨大な履歴データベースがある場合は、3つの新しいインデックスをオフラインで構築する必要があります。リリース時の測定では、NVMeストレージで約17分、SATAで約50分を要しました。保存されたドキュメント形式には互換性があるため、ロールバックは容易です。

注意すべき動作の修正として、履歴フィルターはドキュメント化されたBASE/QUOTEペア順を使用するようになりました。以前にペアを逆転させることで補正していたクライアントは、その回避策を削除してください。不明なクエリパラメータは、黙って無視されるのではなく、HTTP 400エラーで拒否されるようになります。

ADAMANTはCurrencyinfoを本番環境で使用し、その開発を主導し続けているため、今後も密接に関わっていきます。しかし、このプロジェクトはADAMANTに限定されるものではありません。独立したウォレット、ブロックエクスプローラー、決済バックエンド、会計システム、あるいは検査・設定・ローカル実行が可能なレートサービスを求めるインフラ運用者にとって、同様に価値のあるものです。