- PVSM.RU - https://www.pvsm.ru -
Вы знаете множество сервисов, которые предоставляют курсы фиатных и крипто- валют. В разной степени им свойственны недостатки:
Единственный источник данных
Предоставляются как SaaS на их
Завышенная стоимость подписки
Сложный API
Ключевой мотив создания ADAMANT Currencyinfo — надежность. Вот недавний и очередной пример фейла Coinmarketcap:
По курьей причине API Coinmarketcap отдавал курсы некоторых криптовалют с дефектом ~98%. Если у вас свой обменник, я уверен, что вы бы не хотели отдать 1000 INJ за 370 USD при реальной стоимости 20k USD.
Аналогичные проблемы мы наблюдаем и у других провайдеров курсов с частотой 1–2 раза в год.
Мы сделали сервис, который собирает данные курсов валют от нескольких источников и анализирует их корректность, и
Currencyinfo полностью бесплатен и с открытым кодом: https://github.com/Adamant-im/currencyinfo [3]
Написали на TypeScript, для установки на ваш сервер/VPS можно использовать Docker или собрать из репозитория. Требования к
Currencyinfo получает данные из источников, которые вы указали в конфиге и анализирует валидность курса каждой валюты:
Считает ненадежными курс валюты, если получили данные менее, чем от minSources источников
Группирует курсы валюты по rateDifferencePercentThreshold
Выбирает самую надежную группу по groupPercentage или весам надежности weight
Считает финальный курс как средний/мин/макс, выбирает по приоритету источников priorities, или по весу надежности weight.
Вот пример для вычисления курса ADM/USD, когда получили разные курсы от трех источников — Coinmarketcap, Coingecko и Cryptocompare:
Детальное описание алгоритма — в GitHub Wiki [4].
Currencyinfo умеет работать с данными:
MOEX — Московская биржа. Увы, USD и EUR они не торгуют, но данные по RUB и CNY актуальны.
Currency API — Обновляет данные раз в день, поэтому имеет смысл только для фиата
ExchangeRate.Host — Предоставляет актуальные курсы фиата, драгоценных металлов и биткоина
CoinMarketCap — Курсы криптовалют с ежеминутными обновлениями
CryptoCompare — Курсы фиата криптовалют с частыми обновлениями
CoinGecko — Курсы криптовалют с ежеминутными обновлениями
С какими источниками данных работать вы укажете в конфиге. Некоторые из них требуют API-ключи, но для Currencyinfo с обновлением refreshInterval в 10 минут достаточно бесплатных аккаунтов. Если хотите получать курсы чаще — смотрите тарифы соответствующих источников данных.
Текущий курс:
GET http://localhost:36661/get?coin=ADM
{
"success": true,
"date": 1726827454221,
"result": {
"ADM/USD": 0.029495299897,
"ADM/RUB": 2.738651632396,
"ADM/EUR": 0.026429853379,
"ADM/CNY": 0.208056836954,
"ADM/JPY": 4.243900904361,
"ADM/BTC": 4.64113e-7,
"ADM/ETH": 0.000011601089,
"ADM/KRW": 39.384183204721
},
"last_updated": 1726827222510,
"version": "4.1.0"
}
Курс в момент времени:
GET http://localhost:36661/getHistory?coin=ADM×tamp=1725185959
{
"success": true,
"date": 1726827656521,
"result": [
{
"_id": "66d43eb65a01993b593fed57",
"date": 1725185716605,
"tickers": {
"ADM/KRW": 39.986732414654,
"ADM/ETH": 0.000012060532,
"ADM/BTC": 5.14865e-7,
"ADM/JPY": 4.370208962216,
"ADM/CNY": 0.212048693004,
"ADM/EUR": 0.027028233555,
"ADM/RUB": 2.73320760724,
"ADM/USD": 0.029895049192
}
}
],
"last_updated": 1726827222510,
"version": "4.1.0"
}
Помимо верификации самих курсов валют, нам важно контролировать и доступность API сервиса. Вот как мы это делаем:
Запустили сервис у надежного VPS-провайдера
Настроили заббикс, который проверяет состояние
Настроили уведомления от Currencyinfo
Запустили не один сервис Currencyinfo, а два, и в приложениях (Мессенджер АДАМАНТ, бот-обменник, виджеты) делаем их Health check
Автор: JustDeveloper
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/api/397155
Ссылки в тексте:
[1] хостинге: https://www.reg.ru/?rlink=reflink-717
[2] x.com: https://x.com/adamant_im/status/1830887060477235429
[3] https://github.com/Adamant-im/currencyinfo: https://github.com/Adamant-im/currencyinfo
[4] GitHub Wiki: https://github.com/Adamant-im/currencyinfo/wiki/Dealing-with-Rate-Differences-from-Multiple-Sources
[5] Источник: https://habr.com/ru/articles/844858/?utm_campaign=844858&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.