# курсы по криптовалютам Задача: Сделать API, которое будет возвращать курсы по криптовалютам Дополнительные примечания: в связи с необходимостью иметь уникальные запросы по валютам, должна быть поддержка формата запросов TRUST Wallet. **Как это работает:** 1. любой токен - это адрес типа 0x000000...000 2. В сумме длина адреса 42 символа 3. BTC по такой системе будет выглядеть так: 4. Находим его id по систме SLIPS 44: https://github.com/satoshilabs/slips/blob/master/slip-0044.md 5. Это 0 6. Кнвертируем 0 в HEX и получаем 0x0 7. Отрезаем 0x и получаем 0 8. Сериализуем адрес - 0x0000000000000000000000000000000000000000 9. Это и есть BTC 10. Для любого ERC20 токена ETH будет работать прямой запрос 11. Например DAI: 0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359 - его контракт 12. И запрос ровно такой же 0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359 Пример: method: POST url: /api/v1/prices body: ``` { "tokens": [ "0x0000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000091", "0x000000000000000000000000000000000000003C" ], "currencies": [ "USD", "EUR", "RUB" ], "change": "0", "api": "cmc" } ``` Response: ``` { "data": [ { "currency": "USD", "rates": [ { "0x0000000000000000000000000000000000000000": "237.19" }, { "0x0000000000000000000000000000000000000001": "10000" }, { "0x0000000000000000000000000000000000000091": "1.09" }, { "0x000000000000000000000000000000000000003C": "237.19" } ] }, { "currency": "EUR", "rates": [ { "0x0000000000000000000000000000000000000000": "237.19" }, { "0x0000000000000000000000000000000000000001": "10000" }, { "0x0000000000000000000000000000000000000091": "1.09" }, { "0x000000000000000000000000000000000000003C": "237.19" } ] }, { "currency": "RUB", "rates": [ { "0x0000000000000000000000000000000000000000": "237.19" }, { "0x0000000000000000000000000000000000000001": "10000" }, { "0x0000000000000000000000000000000000000091": "1.09" }, { "0x000000000000000000000000000000000000003C": "237.19" } ] } ] } ``` Еще один запрос: method: POST method: POST url: /api/v1/prices body: "change": "24" - тут 24 это количество часов, за сколько изменилось, "api": "cmc" - тут нужно говорить, какое апи использовать Нужно смотреть по каким апишкам и что меняется ``` { "tokens": [ "0x0000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000091", "0x000000000000000000000000000000000000003C" ], "currencies": [ "USD", "EUR", "RUB" ], "change": "24", "api": "cmc" } ``` Response: ``` { "data": [ { "currency": "USD", "rates": [ { "0x0000000000000000000000000000000000000000": "237.19", "percent_change": "2.06" }, { "0x0000000000000000000000000000000000000001": "10000", "percent_change": "2.06" }, { "0x0000000000000000000000000000000000000091": "1.09", "percent_change": "2.06" }, { "0x000000000000000000000000000000000000003C": "237.19", "percent_change": "2.06" } ] }, { "currency": "EUR", "rates": [ { "0x0000000000000000000000000000000000000000": "237.19", "percent_change": "2.06" }, { "0x0000000000000000000000000000000000000001": "10000", "percent_change": "2.06" }, { "0x0000000000000000000000000000000000000091": "1.09", "percent_change": "2.06" }, { "0x000000000000000000000000000000000000003C": "237.19", "percent_change": "2.06" } ] }, { "currency": "RUB", "rates": [ { "0x0000000000000000000000000000000000000000": "237.19", "percent_change": "2.06" }, { "0x0000000000000000000000000000000000000001": "10000", "percent_change": "2.06" }, { "0x0000000000000000000000000000000000000091": "1.09", "percent_change": "2.06" }, { "0x000000000000000000000000000000000000003C": "237.19", "percent_change": "2.06" } ] } ] } ``` method: GET url: /api/v1/list Возвращает апи, их поддерживаемые запросы по изменению за период в часах, а также время в unix, когда будет следующий запрос для кэширования и когда был предыдущий Response: ``` { "api": [ { "name": "cmc", "supported_changes": [ "0", "1", "24", "744" ], "time": {"start": 1567538868, "end": 1567549868} }, { "name": "сrc", "supported_changes": [ "0" ], "time": {"start": 1567538868, "end": 1567549868} } ] } ```