রিসোর্স লোড হচ্ছে... লোডিং...

FMZ Quant: ক্রিপ্টোকারেন্সি মার্কেটে সাধারণ প্রয়োজনীয়তা ডিজাইন উদাহরণগুলির বিশ্লেষণ (II)

লেখক:এফএমজেড-লিডিয়া, সৃষ্টিঃ ২০২৩-১২-২৫ ১৬ঃ৪০ঃ৫০, আপডেটঃ ২০২৪-০১-০২ ২১ঃ২১ঃ৩৯

FMZ Quant: An Analysis of Common Requirements Design Examples in the Cryptocurrency Market (II)

পূর্ববর্তী নিবন্ধে পাঠকদের মন্তব্যের প্রতিক্রিয়া হিসাবে, তারা চুক্তি অ্যাকাউন্ট স্থানান্তর পর্যবেক্ষণের জন্য একটি প্রোগ্রাম উদাহরণ অনুরোধ। এই নিবন্ধে, আমরা প্রয়োজনীয়তা বাস্তবায়ন এবং এটি একসাথে ডিজাইন কিভাবে শিখতে পরীক্ষার বস্তু হিসাবে Binance বিনিময় ব্যবহার করবে।

ক্রিপ্টোকারেন্সি এক্সচেঞ্জগুলি প্রতিদিন বিপুল সংখ্যক লেনদেন পরিচালনা করে, বিভিন্ন ওয়ালেটের মধ্যে সম্পদ স্থানান্তর সহ। ব্যবসায়ী এবং বিকাশকারীদের জন্য রিয়েল টাইমে এই স্থানান্তরগুলি পর্যবেক্ষণ করা অত্যন্ত গুরুত্বপূর্ণ। এই নিবন্ধে, আমরা একটি ক্রিপ্টোকারেন্সি এক্সচেঞ্জে সাম্প্রতিক সম্পদ স্থানান্তরগুলি পর্যবেক্ষণ করতে এবং এর মূল উপাদানগুলি নিয়ে আলোচনা করার জন্য ডিজাইন করা জাভাস্ক্রিপ্ট কোডের একটি টুকরো অন্বেষণ করব।

প্রয়োজনীয়তা বিশ্লেষণ করুন

আমি বিন্যান্স এক্সচেঞ্জের ডকুমেন্টেশন পরীক্ষা করেছি এবং দেখেছি যে একটি স্থানান্তর ইতিহাস ইন্টারফেস রয়েছে যা সমস্ত স্থানান্তর তথ্য অনুসন্ধান করতে পারে। যেহেতু আমরা কেবলমাত্র স্থানান্তর রেকর্ডগুলি পর্যবেক্ষণ করছি যা ঘটতে পারে, তাই আমাদের সমস্ত স্থানান্তর ইতিহাস পাওয়ার দরকার নেই। আমাদের কেবলমাত্র একটি নির্দিষ্ট ফ্রিকোয়েন্সির উপর ভিত্তি করে একটি নির্দিষ্ট পরিসরের মধ্যে সাম্প্রতিক স্থানান্তর রেকর্ডগুলি পরীক্ষা করতে হবে। যদি নতুন স্থানান্তর রেকর্ড পাওয়া যায় তবে সেগুলি আপডেট করা হবে এবং বিজ্ঞপ্তি দেওয়া হবে।

ইন্টারফেস ব্যবহার করুনঃ

// 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 ফাংশনঃ

    উদ্দেশ্যঃ নির্দিষ্ট পরামিতি অনুযায়ী এক্সচেঞ্জ এপিআই থেকে সাম্প্রতিক সম্পদ স্থানান্তর ইতিহাস পেতে। প্যারামিটারঃ TransType (ট্রান্সফার টাইপ), typeDesc (টাইপ বর্ণনা) । এপিআই এন্ডপয়েন্টঃ /sapi/v1/asset/transfer।

  • মনিটর ট্রান্সফার ফাংশনঃ

    উদ্দেশ্যঃ পূর্বনির্ধারিত স্থানান্তর প্রকারের উপর পুনরাবৃত্তি করুন, সাম্প্রতিক স্থানান্তর ইতিহাস পুনরুদ্ধার করুন এবং কোনও নতুন স্থানান্তর রেকর্ড করুন। ট্রান্সফার টাইপগুলিকে মানব-পঠনযোগ্য বিবরণে ম্যাপ করতে একটি অভিধান (dicType) ব্যবহার করুন। প্রতিটি প্রকারের সর্বশেষ স্থানান্তরগুলি ট্র্যাক করতে মনিটর অবজেক্ট আপডেট করুন।

  • প্রধান কাজ:

    উদ্দেশ্যঃ একটি অসীম লুপ চালান যা ট্রান্সফারগুলি ক্রমাগত পর্যবেক্ষণ করে এবং সর্বশেষতম ডেটা প্রদর্শন করে। MonitorTransfers ফাংশনটি নিয়মিত ব্যবহার করুন। সম্পদ, পরিমাণ, অবস্থা, লেনদেনের আইডি এবং টাইমস্ট্যাম্পের মতো কলাম সহ প্রতিটি স্থানান্তর প্রকারের জন্য একটি টেবিল তৈরি করুন।

মূল বৈশিষ্ট্য:

  • ডায়নামিক ট্রান্সফার টাইপ ম্যাপিংঃ

    কোডটি একটি অভিধান (dicType) ব্যবহার করে স্থানান্তর প্রকারগুলিকে বর্ণনামূলক নামগুলিতে ম্যাপ করতে, প্রতিটি স্থানান্তরের প্রকৃতির একটি স্পষ্ট ব্যাখ্যা সরবরাহ করে।

  • রিয়েল-টাইম মনিটরিংঃ

    সিস্টেমটি নতুন স্থানান্তরগুলির জন্য ক্রমাগত পরীক্ষা করে, মনিটর অবজেক্ট আপডেট করে এবং সনাক্ত করা কোনও পরিবর্তন রেকর্ড করে।

  • তথ্য উপস্থাপনাঃ

    প্রতিটি ধরণের স্থানান্তর তথ্য উপস্থাপনের জন্য টেবিল ব্যবহার করুন, যার মধ্যে সম্পদ, পরিমাণ, অবস্থা, লেনদেনের আইডি এবং টাইমস্ট্যাম্পের মতো প্রাসঙ্গিক বিবরণ অন্তর্ভুক্ত রয়েছে।

  • সাম্প্রতিক ট্রান্সফার ইতিহাস পরিচালনাঃ

    প্রতিটি প্রকারের জন্য সাম্প্রতিক স্থানান্তর রেকর্ডগুলির একটি স্ক্রোলিং তালিকা বজায় রাখুন, যাতে একটি সংক্ষিপ্ত এবং সময়মত প্রদর্শন নিশ্চিত করা যায়।

বট পরীক্ষা

একটি স্থানান্তর ম্যানুয়ালি করা হয়েছিল এবং প্রোগ্রাম স্থানান্তর অপারেশন সনাক্ত।

FMZ Quant: An Analysis of Common Requirements Design Examples in the Cryptocurrency Market (II)

FMZ Quant: An Analysis of Common Requirements Design Examples in the Cryptocurrency Market (II)

END:

সরবরাহিত জাভাস্ক্রিপ্ট কোডটি ক্রিপ্টোকারেন্সি এক্সচেঞ্জগুলিতে সাম্প্রতিক সম্পদ স্থানান্তর পর্যবেক্ষণের জন্য একটি শক্তিশালী সমাধান সরবরাহ করে। এর গতিশীল এবং রিয়েল-টাইম প্রকৃতি এটিকে ব্যবসায়ী এবং বিকাশকারীদের জন্য একটি মূল্যবান সরঞ্জাম করে তোলে যারা বিভিন্ন ওয়ালেটের মধ্যে সম্পদ চলাচল বুঝতে চায়। এই কোডটি নির্দিষ্ট প্রয়োজনের জন্য সংশোধন এবং কাস্টমাইজ করা যেতে পারে, যারা তাদের ক্রিপ্টোকারেন্সি ট্রেডিং কৌশলগুলি উন্নত করতে বা অতিরিক্ত পর্যবেক্ষণ ক্ষমতা বিকাশ করতে চান তাদের জন্য একটি শক্ত ভিত্তি সরবরাহ করে।

এই নিবন্ধটি বিষয়টির উপর কিছু আলো ফেলে এবং একটি নকশা ধারণা প্রদান করে। আপনার ক্রিপ্টোকারেন্সি ক্যারিয়ার উভয় তথ্যপূর্ণ এবং সফল হতে পারে!


আরও দেখুন