ایف ایم زیڈ کوانٹ: کریپٹوکرنسی مارکیٹ میں مشترکہ تقاضوں کے ڈیزائن مثالوں کا تجزیہ (II)

مصنف:لیدیہ, تخلیق: 2023-12-25 16:40:50, تازہ کاری: 2024-01-02 21:21:39

img

پچھلے مضمون میں قارئین کے تبصروں کے جواب میں ، انہوں نے معاہدہ اکاؤنٹ کی منتقلی کی نگرانی کے لئے ایک پروگرام کی مثال کی درخواست کی۔ اس مضمون میں ، ہم ضرورت کو نافذ کرنے کے لئے بائننس ایکسچینج کو ٹیسٹ آبجیکٹ کے طور پر استعمال کریں گے اور سیکھیں گے کہ اسے ایک ساتھ کیسے ڈیزائن کیا جائے۔

کریپٹوکرنسی تبادلے ہر روز بڑی تعداد میں لین دین کو سنبھالتے ہیں ، جس میں مختلف بٹوے کے مابین اثاثوں کی منتقلی بھی شامل ہے۔ تاجروں اور ڈویلپرز کے لئے حقیقی وقت میں ان منتقلیوں کی نگرانی کرنا انتہائی ضروری ہے۔ اس مضمون میں ، ہم ایک جاوا اسکرپٹ کوڈ کا ایک ٹکڑا دریافت کریں گے جس میں کریپٹوکرنسی ایکسچینج پر حالیہ اثاثوں کی منتقلی کی نگرانی کے لئے ڈیزائن کیا گیا ہے اور اس کے اہم اجزاء پر تبادلہ خیال کیا جائے گا۔

ضروریات کا تجزیہ کریں

میں نے بائننس ایکسچینج کی دستاویزات کی جانچ پڑتال کی اور پایا کہ ایک ٹرانسفر ہسٹری انٹرفیس ہے جو تمام ٹرانسفر کی معلومات سے استفسار کرسکتا ہے۔ چونکہ ہم صرف ٹرانسفر ریکارڈ کی نگرانی کر رہے ہیں جو ہوسکتے ہیں ، لہذا ہمیں تمام ٹرانسفر ہسٹری حاصل کرنے کی ضرورت نہیں ہے۔ ہمیں صرف ایک خاص تعدد کی بنیاد پر ایک خاص حد کے اندر حالیہ ٹرانسفر ریکارڈ کی جانچ پڑتال کرنے کی ضرورت ہے۔ اگر نئی ٹرانسفر ریکارڈ ملتی ہیں تو ، انہیں اپ ڈیٹ اور مطلع کیا جائے گا۔

انٹرفیس استعمال کریں:

// GET /sapi/v1/asset/transfer type, size : 100

تو نئے شامل کردہ ٹرانسفر ریکارڈ کی جانچ کیسے کریں؟ بائننس کی دستاویزات کو پڑھنے کے بعد ، میں نے پایا کہ اس انٹرفیس کے ذریعہ واپس آنے والے ڈیٹا میں ٹائم اسٹیمپ ہے۔ ٹائم اسٹیمپ سے فیصلہ کرنا بہت آسان ہے۔ جب تک کہ زیادہ سے زیادہ ٹائم اسٹیمپ سے زیادہ ریکارڈ موجود ہے ، اس کا مطلب یہ ہے کہ ایک نیا ٹرانسفر ایکشن ہوا ہے۔ اسے ٹرگر کرنے کے لئے صرف اس کا استعمال کریں۔

کے/sapi/v1/asset/transferانٹرفیس ایک وقت میں 100 تک ڈیٹا کے ٹکڑوں کی درخواست کرسکتا ہے۔ پتہ لگانے سے کم تعدد کی منتقلی کے لئے کوئی پریشانی نہیں ہوگی ، جب تک کہ اکاؤنٹ میں ایک پتہ لگانے کے اختتام اور اگلے پتہ لگانے کے آغاز کے درمیان 100 سے زیادہ ٹرانسفر آپریشن نہ ہوں۔ اس وقت ، کچھ نئے آپریشن ریکارڈز کو یاد کیا جاسکتا ہے ، جو عام طلب کے منظرناموں کے لئے کافی ہے (عام طور پر ، پیسوں کو پاگل پن سے منتقل کرنے کی کوئی حکمت عملی نہیں ہوگی...) ۔

یقینا، اصل ڈیزائن میں بہت سی تفصیلات ہیں. مثال کے طور پر، دستاویزات کی جانچ پڑتال، ہم نے پایا کہ بہت سے منتقلی کی سمت ہیں، لہذا ہم ہر منتقلی کی سمت کی نگرانی کرنے کی ضرورت ہے. کوڈ کی وضاحت کی ہےvar dicType = {...}تمام منتقلی کی سمتوں کو منظم کرنے کے لئے.

مواد کو بہتر ظاہر کرنے کے لئے، ہم حکمت عملی انٹرفیس میں آخری 5 منتقلی کی معلومات کو آؤٹ پٹ کرنے کے لئے ایک حیثیت بار ٹیبل کا استعمال کرتے ہیں، تو ہم نام سے ایک اعتراض تعمیرmonitorاعداد و شمار کو ریکارڈ کرنے کے لئے. یقینا، آپ کو لامحدود طور پر منتقلی کی معلومات ریکارڈ نہیں کر سکتے ہیں، لہذا ہم صرف ہر منتقلی کی سمت کے لئے 100 ریکارڈ برقرار رکھنے. اگر تعداد 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)
    }
}

کوڈ کا جائزہ:

فراہم کردہ جاوا اسکرپٹ کوڈ میں متعدد افعال شامل ہیں جو حالیہ اثاثوں کی منتقلی کی نگرانی کے لئے ایک نظام کو ایک ساتھ بناتے ہیں۔ آئیے ان کے اہم اجزاء کا تجزیہ کرتے ہیں:

  • 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.
    

بوٹ ٹیسٹ

ایک منتقلی دستی طور پر کی گئی تھی اور پروگرام نے منتقلی کے عمل کا پتہ لگایا۔

img

img

اختتام:

فراہم کردہ جاوا اسکرپٹ کوڈ کریپٹوکرنسی تبادلے پر حالیہ اثاثوں کی منتقلی کی نگرانی کے لئے ایک طاقتور حل فراہم کرتا ہے۔ اس کی متحرک اور حقیقی وقت کی نوعیت اسے تاجروں اور ڈویلپرز کے لئے ایک قیمتی ٹول بناتی ہے جو مختلف بٹوے کے مابین اثاثوں کی نقل و حرکت کو سمجھنا چاہتے ہیں۔ اس کوڈ کو مخصوص ضروریات کے مطابق تبدیل اور اپنی مرضی کے مطابق بنایا جاسکتا ہے ، جو ان لوگوں کے لئے ایک ٹھوس بنیاد فراہم کرتا ہے جو اپنی کریپٹوکرنسی ٹریڈنگ کی حکمت عملی کو بڑھانا چاہتے ہیں یا اضافی نگرانی کی صلاحیتوں کو تیار کرنا چاہتے ہیں۔

یہ مضمون اس موضوع پر کچھ روشنی ڈالتا ہے اور ڈیزائن کا آئیڈیا فراہم کرتا ہے۔ آپ کا کریپٹوکرنسی کیریئر معلوماتی اور کامیاب دونوں ہو!


مزید