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

مصنف:چھوٹا سا خواب, تخلیق: 2023-12-24 22:24:58, تازہ کاری: 2023-12-25 17:10:56

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, "查询失败", 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)
    }
}

کوڈ کا جائزہ:

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

  • getRecentTransferHistory فنکشن:

    مقصد: مخصوص پیرامیٹرز کے مطابق ایکسچینج API سے حالیہ اثاثوں کی منتقلی کی تاریخ حاصل کریں۔ پیرامیٹرز: ٹرانس ٹائپ (تجاویز کی قسم) ، typeDesc (تجاویز کی قسم) ؛ API اختتامیہ: /sapi/v1/asset/transfer۔

  • monitorTransfers فنکشن:

    مقصد: پہلے سے طے شدہ تقسیم کی اقسام میں گھومنا، حالیہ تقسیم کی تاریخ تلاش کرنا اور کسی بھی نئی تقسیم کو ریکارڈ کرنا۔ ڈیک ٹائپ کا استعمال کرتے ہوئے کسی قسم کے نقشے کو آسانی سے پڑھنے کے قابل بیان میں تبدیل کریں۔ اپ ڈیٹ کریں مانیٹر اشیاء ہر قسم کے تازہ ترین کراسنگ کو ٹریک کرنے کے لئے.

  • اہم فنکشن:

    مقصد: ایک لامحدود سائیکل چلانے کے لئے، مسلسل نگرانی کی باری باری اور تازہ ترین اعداد و شمار کو ظاہر کرنے کے لئے. monitorTransfers فنکشن کا باقاعدگی سے استعمال کریں۔ ہر قسم کے ٹرانزیکشن کے لئے ایک ٹیبل تیار کریں جس میں اثاثہ جات، رقم، حالت، ٹرانزیکشن ID اور ٹائم فریم جیسے کالم شامل ہیں۔

اہم خصوصیات:

  • متحرک نقشہ جات کی قسم:

    کوڈ کا استعمال کرتے ہوئے ایک لغت (dicType) ، ہر قسم کی نقل کی خصوصیات کے لئے ایک واضح وضاحت فراہم کرنے کے لئے، وضاحت ناموں کے لئے نقل کی اقسام کا نقشہ.

  • ریئل ٹائم نگرانی:

    یہ نظام مسلسل نئی باریوں کی جانچ پڑتال کرتا ہے، مانیٹر آبجیکٹ کو اپ ڈیٹ کرتا ہے اور کسی بھی تبدیلی کا پتہ لگاتا ہے.

  • اعداد و شمار:

    ٹیبلز کا استعمال ہر قسم کے اعداد و شمار کو ظاہر کرنے کے لئے کیا جاتا ہے، بشمول متعلقہ تفصیلات جیسے اثاثے، رقم، حالت، ٹرانزیکشن آئی ڈی اور ٹائم لائنز۔

  • اس کے علاوہ، اس کے بارے میں مزید معلومات حاصل کریں:

    ہر قسم کے لئے تازہ ترین کراس ریکارڈ کی ایک رولنگ لسٹ رکھی جاتی ہے تاکہ مختصر اور بروقت نمائش کو یقینی بنایا جاسکے۔

ریئل ڈسک ٹیسٹ

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

img

img

اختتام:

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

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


مزید

98K-بگنڈ ٹریکنگ_ لانگچھوٹا خواب استاد ہے حقیقت کا ورژن ڈولی اے خواب چھوٹا خواب استاد سب سے زیادہ پیار کرتا ہوں