संसाधन लोड हो रहा है... लोड करना...

एफएमजेड क्वांटः क्रिप्टोकरेंसी बाजार में सामान्य आवश्यकताओं के डिजाइन उदाहरणों का विश्लेषण (II)

लेखक:FMZ~Lydia, बनाया गयाः 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

अंतः

प्रदान किया जा रहा जावास्क्रिप्ट कोड क्रिप्टोक्यूरेंसी एक्सचेंजों पर हाल के परिसंपत्ति हस्तांतरण की निगरानी के लिए एक शक्तिशाली समाधान प्रदान करता है। इसकी गतिशील और वास्तविक समय की प्रकृति इसे व्यापारियों और डेवलपर्स के लिए एक मूल्यवान उपकरण बनाती है जो विभिन्न वॉलेट के बीच परिसंपत्ति आंदोलनों को समझने की मांग करते हैं। इस कोड को संशोधित और विशिष्ट जरूरतों के अनुसार अनुकूलित किया जा सकता है, जो उन लोगों के लिए एक ठोस आधार प्रदान करता है जो अपनी क्रिप्टोक्यूरेंसी ट्रेडिंग रणनीतियों को बढ़ाने या अतिरिक्त निगरानी क्षमताओं को विकसित करना चाहते हैं।

यह लेख इस विषय पर कुछ प्रकाश डालता है और एक डिजाइन विचार प्रदान करता है। आपका क्रिप्टोक्यूरेंसी कैरियर सूचनात्मक और सफल दोनों हो सकता है!


अधिक