ЗадачаСобрать криптообменник и начать
косить бабло зарабатывать. Сразу хочу оговориться, что задача стояла еще на хайпе крипты, в декабре 2017 года. То, что творится с рынком сейчас, немного печалит.
Как и все, мы искали легкие пути и, пролистав половину рунета, поняли, что нет легких способов создать криптообменник. Ну как, они есть, но нужно выложить от 5000$ за готовое решение, которое при этом страшнее монстров из DOOM, либо нанять команду китайских программистов и делать все с нуля. С китайцами мы не договорились
Тo есть, возможно, и договорились, но мы не поняли ответа.
Тогда мы поискали (и нашли) спецов в родном регионе. Из плюсов понимают по-русски, из минусов не знал, что русские специалисты так дорого стоят. Горд за отечественный рынок труда.
Еще, на первых же этапах разработки мы определили второстепенную задачу создать свое API, чтобы раздать его бесплатно, принести криптокультуру в массы и почистить карму перед китайцами. Вот о нем и расскажу.
Меньше шуток больше делаI ЭтапСразу оговорюсь код чисто примерный и для описания возможностей, сильно не ругайте.
Для получения курса криптовалют делаем запрос Get rate из API Quickex.
Описание метода можно найти в документации к API
https://quickex.io/docs/apigetCourseButton.addEventListener("click", function () {
// объявляем переменные
var selectSend = doc.querySelector(".js-select-send"),
selectGet = doc.querySelector(".js-select-get"),
selectSendValue = selectSend.value,//сумма отправляемой валюты
selectGetValue = selectGet.value;//сумма получаемой валюты
//Настройки запроса
var settings = {
"url": "https://api.quickex.io/rate/" + selectSendValue + "_" + selectGetValue,
"method": "GET"
};
$.ajax(settings).done(function (response) {
var rate = response.rate;//Получаем результат
var sendField = doc.querySelector(".js-send"),//сумма отправляемой валюты
getField = doc.querySelector(".js-get");//поле обмена2 - сумма получаемой валюты
getField.value = (sendField.value * rate * 10 / 10).toFixed(10);// результат какая то магическая магия
});
В этом скрипте можно было бы просто привязаться к id элементов (это уже на вкус и цвет), а настройки типа хоста - вынести в конфигурационный файл.
Привязываем к фронту
Оцениваем результат, понимаем что нужен дизайнер, тихо всхлипываем. Но продолжаем работать
Этап IIДля инициации обмена берем из API метод CREATE FIXED TRANSACTION
var data = JSON.stringify({
"amount": 0.03101415, //кол-во валюты для обмена - я бы сделал акцент, что можно передавать как сумму депозита (depositAmount), так и сумму вывода (amount). В данном случае указана сумма вывода (то, что получит клиент). И да, название параметра неудачное amount, но так было...
"withdrawal": "12v4rjzyXnRF7dwNb4ukxTpYrugBTy6nct", //адрес, на который клиент получит деньги в получаемой валюте
"pair": "eth_btc", //пара обмена
"returnAddress": "0xd68CcC74C32BAB4c4c6F289b3b1754f46a8311FE" //это адрес для сдачи (в том случае, если клиент перевёл сумму > нашего максимума)
});
var create = new XMLHttpRequest();//создаем обмен - и что тут создает обмен? :-)
create.addEventListener("readystatechange", function () {
if (this.readyState === 4) {
console.log(this.responseText);
}
});
create.open("POST", "https://api.quickex.io/sendamount"); //хост в конфиг
Этап IIIИ для получения ответа об успешном переводе делаем запрос EXCHANGE REQUEST INFO
где в качестве параметра передаем deposit полученный в ответе запроса CREATE FIXED TRANSACTION - это пинги, по которым можно получить текущую информацию по обмену, ничто не мешает также мониторить блокчейн самому клиенту. В качестве параметра здесь depositAddress, который мы сгенерили для данного клиента
function getInfo() {
var txStat = new XMLHttpRequest();
txStat.open("GET", "https://api.quickex.io/txStat/0x90BBB223fE52a56449e2E0dcAB568123E31185E6"); // хост в конфиги, в качестве параметра используется депозит адрес, который был сгенерирован нами для клиента
txStat.onload = function () {
console.log(this.responseText);
};
txStat.send();
}
setInterval(getInfo, 5000);//олучаем информацию по обмену каждые 5 секунд
В принципе на этом этапе при успешном пополнении произойдет обмен. Финиш - после того, как мы увидим депозит от клиента и дожидаемся определённого количества подтверждений - мы переводим деньги клиенту в той валюте, которую захотел получить клиент
Запуская API мы не сделали крипто-обменники доступными каждому, но существенно удешевили разработку.