
Menanggapi komentar pembaca di artikel sebelumnya, diperlukan contoh program untuk memantau transfer akun kontrak. Dalam edisi ini, kami akan menggunakan Binance Exchange sebagai objek uji untuk mencapai persyaratan ini dan mempelajari cara mendesainnya.
Bursa mata uang kripto memproses sejumlah besar transaksi setiap hari, termasuk transfer aset antar dompet yang berbeda. Pemantauan transfer ini secara real-time sangat penting bagi para pedagang dan pengembang. Artikel ini akan membahas sepotong kode JavaScript yang dirancang untuk memantau transfer aset terkini di bursa mata uang kripto dan membahas komponen utamanya.
Setelah berkonsultasi dengan dokumentasi Binance Exchange, saya menemukan bahwa ada antarmuka riwayat transfer yang dapat menanyakan semua informasi transfer. Karena kami hanya memantau kemungkinan catatan transfer, kami tidak perlu memperoleh semua riwayat transfer. Kita hanya perlu memeriksa catatan transfer terkini dalam rentang tertentu dan frekuensi tertentu. Jika ada catatan transfer baru yang ditemukan, catatan tersebut akan diperbarui dan diberitahukan.
Gunakan antarmuka ini:
// GET /sapi/v1/asset/transfer type, size : 100
Jadi bagaimana Anda memeriksa catatan transfer yang baru ditambahkan? Setelah membaca dokumentasi Binance, saya menemukan bahwa data yang dikembalikan oleh antarmuka ini berisi stempel waktu. Sangat mudah untuk menggunakan stempel waktu untuk menilai. Selama ada catatan dengan stempel waktu yang lebih besar dari catatan saat ini, itu berarti transfer baru telah terjadi. . Gunakan ini untuk memicunya.
/sapi/v1/asset/transferAntarmuka meminta maksimal 100 data setiap kali. Deteksi ini tidak akan menimbulkan masalah untuk transfer frekuensi rendah kecuali akun tersebut memiliki lebih dari 100 operasi transfer antara akhir satu deteksi dan awal deteksi berikutnya. Pada saat ini, beberapa catatan operasi baru mungkin terlewat, yang cukup untuk skenario permintaan umum (umumnya tidak akan ada strategi untuk mentransfer dana secara gila-gilaan…).
Tentu saja, ada banyak detail dalam desain yang sebenarnya. Misalnya, saat memeriksa dokumen, kami menemukan bahwa ada banyak arah rotasi, jadi kami perlu memantau setiap arah rotasi. Kode tersebut mendefinisikanvar dicType = {...}Untuk mengelola semua arah transfer.
Untuk menampilkan konten dengan lebih baik, kami menggunakan tabel bilah status untuk menampilkan lima informasi transfer terakhir dalam antarmuka strategi, jadi kami membuat tabel yang disebut:monitorObjek yang digunakan untuk merekam data. Tentu saja Anda tidak dapat menyimpan informasi transfer tanpa batas waktu, jadi kami hanya menyimpan 100 catatan untuk setiap arah transfer. Jika ada lebih dari 100 catatan, catatan yang belum waktunya akan dihapus.
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, "查询失败", ret)
}
return rows
}
var monitor = {}
function monitorTransfers() {
var dicType = {
"MAIN_UMFUTURE": "现货钱包 --> U本位合约钱包",
"MAIN_CMFUTURE": "现货钱包 --> 币本位合约钱包",
"UMFUTURE_MAIN": "U本位合约钱包 --> 现货钱包",
"UMFUTURE_MARGIN": "U本位合约钱包 --> 杠杆全仓钱包",
"CMFUTURE_MAIN": "币本位合约钱包 --> 现货钱包",
"MARGIN_UMFUTURE": "杠杆全仓钱包 --> U本位合约钱包",
"MARGIN_CMFUTURE": "杠杆全仓钱包 --> 币本位合约钱包",
"CMFUTURE_MARGIN": "币本位合约钱包 --> 杠杆全仓钱包",
"FUNDING_UMFUTURE": "资金钱包 --> U本位合约钱包",
"UMFUTURE_FUNDING": "U本位合约钱包 --> 资金钱包",
"FUNDING_CMFUTURE": "资金钱包 --> 币本位合约钱包",
"CMFUTURE_FUNDING": "币本位合约钱包 --> 资金钱包",
"UMFUTURE_OPTION": "U本位合约钱包 --> 期权钱包",
"OPTION_UMFUTURE": "期权钱包 --> U本位合约钱包",
// 统一账户
"MAIN_PORTFOLIO_MARGIN": "现货钱包 --> 统一账户钱包",
"PORTFOLIO_MARGIN_MAIN": "统一账户钱包 --> 现货钱包"
}
Log("开始检测")
_.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("检测到新增划转记录", 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("开始结束")
}
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)
}
}
Kode JavaScript yang disediakan mencakup beberapa fungsi yang bersama-sama membangun sistem untuk memantau transfer aset terkini. Mari kita uraikan komponen utamanya:
Tujuan: Mendapatkan riwayat transfer aset terkini dari API bursa sesuai dengan parameter yang ditentukan. Parameter: TransType (tipe transfer), typeDesc (deskripsi tipe). Titik akhir API: /sapi/v1/asset/transfer.
Tujuan: Mengulangi jenis transfer yang telah ditetapkan sebelumnya, mengambil riwayat transfer terkini, dan mencatat setiap transfer baru. Gunakan kamus (dicType) untuk memetakan jenis transfer ke deskripsi yang dapat dibaca manusia. Perbarui objek monitor untuk melacak transfer terkini setiap jenis.
Tujuan: Menjalankan loop tak terbatas yang terus memantau transfer dan menampilkan data terkini. Gunakan fungsi monitorTransfers secara berkala. Buat tabel untuk setiap jenis transfer, termasuk kolom seperti aset, jumlah, status, ID transaksi, dan stempel waktu.
Kode tersebut menggunakan kamus (dicType) untuk memetakan jenis transfer ke nama deskriptif, memberikan deskripsi yang jelas tentang sifat setiap transfer.
Sistem terus memeriksa transfer baru, memperbarui objek monitor, dan mencatat setiap perubahan yang terdeteksi.
Gunakan tabel untuk menyajikan setiap jenis data transfer, termasuk rincian relevan seperti aset, jumlah, status, ID transaksi, dan stempel waktu.
Pertahankan daftar gulir transfer terkini untuk setiap jenis, yang memastikan tampilan yang ringkas dan tepat waktu.
Transfer dilakukan secara manual dan program mendeteksi operasi transfer.


Kode JavaScript yang disediakan memberikan solusi ampuh untuk memantau transfer aset terkini di bursa mata uang kripto. Sifatnya yang dinamis dan real-time menjadikannya alat yang berharga bagi para pedagang dan pengembang yang ingin memahami pergerakan aset antara dompet yang berbeda. Kode ini dapat dimodifikasi dan disesuaikan dengan kebutuhan spesifik, menyediakan landasan yang kuat bagi mereka yang ingin meningkatkan strategi perdagangan mata uang kripto mereka atau mengembangkan kemampuan pemantauan tambahan.
Artikel ini hanyalah titik awal untuk memberikan ide desain. Saya harap bisnis mata uang kripto Anda akan informatif dan sukses!