# курсы по криптовалютам
Задача:
Сделать 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}
}
]
}
```