В ответ на комментарии читателей в предыдущей статье, они запросили пример программы для мониторинга контрактных переводов счетов.
Биржа криптовалют обрабатывает большое количество транзакций каждый день, включая передачу активов между различными кошельками. Мониторинг этих переводов в режиме реального времени имеет решающее значение для трейдеров и разработчиков. В этой статье мы рассмотрим кусок кода JavaScript, предназначенный для мониторинга недавних переводов активов на бирже криптовалют и обсудим его ключевые компоненты.
Я проверил документацию биржи Binance и обнаружил, что есть интерфейс истории переводов, который может запросить всю информацию о переводе. Поскольку мы только отслеживаем записи о переводах, которые могут произойти, нам не нужно получать всю историю переводов. Нам нужно только проверять последние записи о переводах в пределах определенного диапазона на основе определенной частоты. Если будут найдены новые записи о переводе, они будут обновлены и уведомлены.
Используйте интерфейс:
// GET /sapi/v1/asset/transfer type, size : 100
Итак, как проверить недавно добавленную запись передачи? Прочитав документацию Binance
В/sapi/v1/asset/transfer
В этом случае некоторые новые записи операций могут быть пропущены, что достаточно для сценариев общего спроса (обычно не будет стратегии для безумного перевода средств...).
Конечно, есть много деталей в фактическом дизайне. Например, проверяя документацию, мы обнаружили, что есть много направлений передачи, поэтому мы должны контролировать каждое направление передачи.var dicType = {...}
для управления всеми направлениями передачи.
Для того, чтобы отобразить контент лучше, мы используем таблицу строки состояния для вывода последние 5 передачи информации в интерфейсе стратегии, так что мы построили объект под названиемmonitor
Конечно, вы не можете записывать информацию о передаче неограниченно, поэтому мы храним только 100 записей для каждого направления передачи.
function getRecentTransferHistory(TransType, typeDesc) {
// GET /sapi/v1/asset/transfer type, size : 100
var rows = null
var ret = exchange.IO("api", "GET", "/sapi/v1/asset/transfer", `type=${TransType}&size=100`)
Log("/sapi/v1/asset/transfer" + `type=${TransType}&size=100`)
if (ret && typeof(ret.rows) != "undefined" && Array.isArray(ret.rows)) {
rows = ret.rows
} else if (ret && typeof(ret.total) != "undefined" && ret.total == 0) {
rows = []
} else {
Log(TransType, typeDesc, "inquiry failure", ret)
}
return rows
}
var monitor = {}
function monitorTransfers() {
var dicType = {
"MAIN_UMFUTURE": "Spot wallet --> U-based contract wallet",
"MAIN_CMFUTURE": "Spot wallet --> Currency-based contract wallet",
"UMFUTURE_MAIN": "U-based contract wallet --> Spot wallet",
"UMFUTURE_MARGIN": "U-based contract wallet --> Leveraged full position wallet",
"CMFUTURE_MAIN": "Currency-based contract wallet --> Spot wallet",
"MARGIN_UMFUTURE": "Leveraged full position wallet --> U-based contract wallet",
"MARGIN_CMFUTURE": "Leveraged full position wallet --> Currency-based contract wallet",
"CMFUTURE_MARGIN": "Currency-based contract wallet --> Leveraged full position wallet",
"FUNDING_UMFUTURE": "Funds wallet --> U-based contract wallet",
"UMFUTURE_FUNDING": "U-based contract wallet --> Funds wallet",
"FUNDING_CMFUTURE": "Funds wallet --> Currency-based contract wallet",
"CMFUTURE_FUNDING": "Currency-based contract wallet --> Funds wallet",
"UMFUTURE_OPTION": "U-based contract wallet --> Options wallet",
"OPTION_UMFUTURE": "Options wallet --> U-based contract wallet",
// integrated account
"MAIN_PORTFOLIO_MARGIN": "Spot wallet --> Unified accounts wallet",
"PORTFOLIO_MARGIN_MAIN": "Unified accounts wallet --> Spot wallet"
}
Log("start testing")
_.each(dicType, function(v, k) {
var rows = getRecentTransferHistory(k, v)
var maxTS = 0
_.each(rows, function(row) {
if (typeof(monitor[k]) == "undefined") {
monitor[k] = {"transType": k, "typeDesc": v, "recentRecords": [], "lastTS": 0}
}
if (row["timestamp"] > monitor[k]["lastTS"]) {
monitor[k]["recentRecords"].push(row)
if (monitor[k]["lastTS"] != 0) {
Log("New transfer records detected", k, v, row, "#FF0000")
}
}
maxTS = Math.max(maxTS, row["timestamp"])
})
if (rows && rows.length == 0) {
return
}
monitor[k]["lastTS"] = maxTS
var sortedArrayAscending = monitor[k]["recentRecords"].slice().sort((a, b) => a.timestamp - b.timestamp)
monitor[k]["recentRecords"] = sortedArrayAscending
if (monitor[k]["recentRecords"].length > 100) {
monitor[k]["recentRecords"].shift()
}
Sleep(1000)
})
Log("commencement and termination")
}
function main() {
LogReset()
while (true) {
monitorTransfers()
var tbls = []
_.each(monitor, function(v, k) {
var tbl = {
"type": "table",
"title": v["typeDesc"],
"cols": ["asset", "amount", "status", "tranId", "time"],
"rows": []
}
var arr = v["recentRecords"].slice().sort((a, b) => b.timestamp - a.timestamp)
for (var i = 0; i < arr.length; i++) {
if (i < 5) {
tbl["rows"].push([arr[i]["asset"], arr[i]["amount"], arr[i]["status"], arr[i]["tranId"], _D(arr[i]["timestamp"])])
}
}
tbls.push(tbl)
})
LogStatus(_D(), "\n", "`" + JSON.stringify(tbls) + "`")
Sleep(1000 * 30)
}
}
Предоставленный код JavaScript включает в себя несколько функций, которые создают систему для мониторинга недавних переводов активов.
функция getRecentTransferHistory:
Purpose: Obtain the recent asset transfer history from the exchange API according to the specified parameters.
Parameters: TransType (transfer type), typeDesc (type description).
API endpoint: /sapi/v1/asset/transfer.
МониторФункция передачи:
Purpose: Iterate over predefined transfer types, retrieve recent transfer history, and record any new transfers.
Use a dictionary (dicType) to map transfer types to human-readable descriptions.
Update the monitor object to track the latest transfers of each type.
Основная функция:
Purpose: Run an infinite loop that monitors transfers continuously and displays the latest data.
Use the monitorTransfers function regularly.
Generate a table for each transfer type, including columns such as asset, amount, status, transaction ID, and timestamp.
Динамическое отображение типа передачи:
The code uses a dictionary (dicType) to map transfer types to descriptive names, providing a clear explanation of the nature of each transfer.
Мониторинг в реальном времени:
The system checks for new transfers continuously, updates the monitor object and records any detected changes.
Представление данных:
Use tables to present each type of transfer data, including relevant details such as assets, amounts, status, transaction IDs, and timestamps.
Управление последней историей трансфертов:
Maintain a scrolling list of recent transfer records for each type, ensuring a concise and timely display.
Передача была сделана вручную, и программа обнаружила операцию передачи.
Предоставленный код JavaScript обеспечивает мощное решение для мониторинга недавних переводов активов на криптовалютных биржах. Его динамичный и в режиме реального времени характер делает его ценным инструментом для трейдеров и разработчиков, стремящихся понять движение активов между различными кошельками. Этот код может быть изменен и настроен на конкретные потребности, обеспечивая прочную основу для тех, кто хочет улучшить свои стратегии торговли криптовалютами или разработать дополнительные возможности мониторинга.
Пусть ваша криптовалютная карьера будет как полезной, так и успешной!