Мы захотели
надежности, и
сделали интегратор курсов валют• Экономика » Финансы » Платежные средства » Валютный рынок » Валютный курс
• Экономика » Макроэкономика » Валютный курс ADAMANT Currencyinfo
Мы захотели надежности, и сделали интегратор курсов валют• Экономика » Финансы » Платежные средства » Валютный рынок » Валютный курс
• Экономика » Макроэкономика » Валютный курс ADAMANT Currencyinfo
Уровень сложности
Простой
Время на прочтение
3 мин
Количество просмотров
30
Криптовалюты• Экономика » Финансы » Платежные средства » Платежные системы интернета » Криптовалюта Облачные сервисы * TypeScript * Финансы в IT API *
Туториал
Вы знаете множество сервисов, которые предоставляют курсы фиатных и крипто-
валют. В разной степени им свойственны недостатки:
Единственный источник данных
Предоставляются как SaaS на их хостинге
Завышенная стоимость подписки
Сложный API
Ключевой мотив создания ADAMANT Currencyinfo — надежность. Вот недавний и
очередной пример фейла Coinmarketcap:
x.com
x.com
По курьей причине API Coinmarketcap отдавал курсы некоторых криптовалют• Экономика » Финансы » Платежные средства » Платежные системы интернета » Криптовалюта с
дефектом ~98%. Если у вас свой обменник, я уверен, что вы бы не хотели отдать
1000 INJ за 370 USD при реальной стоимости 20k USD.
Аналогичные проблемы мы наблюдаем и у других провайдеров курсов с частотой 1–2
раза в год.
Резюме
Мы сделали сервис, который собирает данные курсов валют• Экономика » Финансы » Платежные средства » Валютный рынок » Валютный курс
• Экономика » Макроэкономика » Валютный курс от нескольких
источников и анализирует их корректность, и хостится на собственном сервере.
Currencyinfo полностью бесплатен и с открытым кодом:
https://github.com/Adamant-im/currencyinfo
Написали на TypeScript, для установки на ваш сервер/VPS можно использовать
Docker или собрать из репозитория. Требования к VPS минимальны, а для
подключения источников данных достаточно их бесплатных аккаунтов. Уведомляет о
сомнительных курсах в Slack, Discord или ADAMANT Messenger.
Как проверяем курсы
Currencyinfo получает данные из источников, которые вы указали в конфиге и
анализирует валидность курса каждой валюты:
Считает ненадежными курс валюты• Экономика » Финансы » Платежные средства » Валютный рынок » Валютный курс
• Экономика » Макроэкономика » Валютный курс, если получили данные менее, чем от minSources
источников
Группирует курсы валюты• Экономика » Финансы » Платежные средства » Валютный рынок » Валютный курс
• Экономика » Макроэкономика » Валютный курс по rateDifferencePercentThreshold
Выбирает самую надежную группу по groupPercentage или весам надежности weight
Считает финальный курс как средний/мин/макс, выбирает по приоритету источников
priorities, или по весу надежности weight.
Вот пример для вычисления курса ADM/USD, когда получили разные курсы от трех
источников — Coinmarketcap, Coingecko и Cryptocompare:
Детальное описание алгоритма — в GitHub Wiki .
Источники данных
Currencyinfo умеет работать с данными:
MOEX — Московская биржа• Объект организация » Организации по алфавиту » Организации на Мо » Московская биржа. Увы, USD и EUR• Экономика » Экономика Евросоюза » Евро
• Физико-географические регионы » Европа » Европейские валюты » Евро они не торгуют, но данные по RUB и CNY
актуальны.
Currency API — Обновляет данные раз в день, поэтому имеет смысл только для
фиата
ExchangeRate.Host — Предоставляет актуальные курсы фиата, драгоценных металлов
и биткоина• Экономика » Финансы » Платежные средства » Платежные системы интернета » Криптовалюта » Bitcoin
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-провайдера
Настроили заббикс, который проверяет состояние VPS в целом и дату последнего
обновления курсов "last_updated": 1726827222510
Настроили уведомления от Currencyinfo
Запустили не один сервис Currencyinfo, а два, и в приложениях (Мессенджер• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями
АДАМАНТ, бот• Коммуникации » Интернет-коммуникации » Программы мгновенного обмена сообщениями » Бот (в чатах)-обменник, виджеты) делаем их Health check