वेव्स स्मार्ट एसेट्स: ब्लैक एंड व्हाइट लिस्ट्स, इंटरवल ट्रेडिंग

छवि

पिछले दो लेखों में, हमने स्मार्ट खातों के बारे में बात की थी और उनका उपयोग नीलामी करने और वफादारी कार्यक्रम बनाने के लिए कैसे किया जा सकता है, और वित्तीय साधनों की पारदर्शिता सुनिश्चित करने में भी मदद करता है

अब हम स्मार्ट एसेट्स और उनके एप्लिकेशन के कई मामलों पर विचार करेंगे, जिसमें फ्रीजिंग एसेट्स और निर्दिष्ट पतों पर लेनदेन पर प्रतिबंध लगाना शामिल है।

वेव्स स्मार्ट एसेट्स स्मार्ट खातों के साथ ही मैकेनिक्स के बाद, उपयोगकर्ताओं को संपत्ति पर स्क्रिप्ट ओवरले करने की अनुमति देते हैं। स्मार्ट एसेट का उपयोग करके बनाए गए प्रत्येक नए लेनदेन की पुष्टि पहले स्क्रिप्ट द्वारा की जाएगी, और उसके बाद ही ब्लॉकचेन द्वारा की जाएगी।

यह स्मार्ट एसेट्स और स्मार्ट अकाउंट्स के बीच निम्नलिखित अंतरों को ध्यान देने योग्य है:

  1. स्मार्ट एसेट कोड में सबूतों को सत्यापित करना असंभव है (हमने पहले लेख में उनके बारे में बात की थी)।
  2. स्मार्ट खाते के कोड में, आप ExchangeTransaction की जांच केवल तभी कर सकते हैं जब आपका खाता मैच खाता हो। अन्यथा, केवल आदेश की जाँच की जाती है। आप सीधे स्मार्ट एसेट कोड में ऑर्डर की जांच नहीं कर सकते, आप ExchangeTransaction की जांच कर सकते हैं, और यदि आवश्यक हो, तो इससे ऑर्डर निकाल सकते हैं।
  3. एक स्मार्ट संपत्ति, एक स्मार्ट खाते के विपरीत, एक राज्य नहीं है, लेकिन हमारे पास अभी भी स्क्रिप्ट से खाता राज्यों तक पहुंच है।

स्मार्ट संपत्ति अनुबंध के लेखन को बहुत सरल करती है, जिससे कई मामलों का कार्यान्वयन संक्षिप्त और सुरुचिपूर्ण हो जाता है।

एसेट फ्रीज

संपत्ति को एक निश्चित लक्ष्य ऊंचाई ऊंचाई तक स्थिर करने के लिए, आप इस मूल्य को निम्नलिखित स्मार्ट संपत्ति की स्क्रिप्ट में सेट कर सकते हैं:

let targetHeight = 1500000 height >= targetHeight height -  ,   . 

विशिष्ट मिलान स्थिति

एक विशिष्ट मिलान को वांछित के रूप में सेट करने के लिए, आप इसके पते को निम्नलिखित फॉर्म की स्मार्ट एसेट स्क्रिप्ट में प्रेषक के रूप में सेट कर सकते हैं:

 match tx { case t : ExchangeTransaction => t.sender == addressFromString("3PJaDyprvekvPXPuAtxrapacuDJopgJRaU3") case _ => true } 

प्राप्तकर्ता सफेद सूची

टोकन केवल कुछ खातों में भेजे जाने की अनुमति देने के लिए - प्राप्तकर्ताओं की "श्वेत सूची" बनाने के लिए - आप निम्नलिखित योजना के साथ एक स्मार्ट संपत्ति का उपयोग कर सकते हैं, जो यह जाँचता है कि क्या यह सूची में है:

 match tx { case t : TransferTransaction => let trustedRecipient1 = addressFromString("3P6ms9EotRX8JwSrebeTXYVnzpsGCrKWLv4") let trustedRecipient2 = addressFromString("3PLZcCJyYQnfWfzhKXRA4rteCQC9J1ewf5K") let trustedRecipient3 = addressFromString("3PHrS6VNPRtUD8MHkfkmELavL8JnGtSq5sx") t.recipient == trustedRecipient1 || t.recipient == trustedRecipient2 || t.recipient == trustedRecipient3 case _ => false } 

सुरक्षा और सिद्ध भाषा की संगति के लिए, सूची में पुनरावृत्ति कार्यान्वयन शामिल नहीं है। इसलिए, इसे विशिष्ट तत्वों के एक सेट के रूप में परिभाषित किया गया है।

ब्लैक लिस्ट प्राप्त करने वाले

उसी तरह, कुछ खातों में टोकन भेजने पर रोक लगाने के लिए, आप "ब्लैक लिस्ट" बना सकते हैं। इस स्थिति में, ठीक उसी स्मार्ट संपत्ति का उपयोग किया जाता है, लेकिन काली सूची में अनुपस्थिति के लिए जांचे गए पते के साथ:

 match tx { case t : TransferTransaction => let bannedRecipient1 = addressFromString("3P6ms9EotRX8JwSrebeTXYVnzpsGCrKWLv4") let bannedRecipient2 = addressFromString("3PLZcCJyYQnfWfzhKXRA4rteCQC9J1ewf5K") let bannedRecipient3 = addressFromString("3PHrS6VNPRtUD8MHkfkmELavL8JnGtSq5sx") t.recipient != bannedRecipient1 && t.recipient != bannedRecipient2 && t.recipient != bannedRecipient3 case _ => false } 

जारीकर्ता की अनुमति के साथ भेजा जा रहा है

स्मार्ट एसेट का उपयोग करते हुए, आप केवल जारीकर्ता (प्रतिबद्धता / डेट लेबल ) की अनुमति से स्मार्ट एसेट भेजने का विकल्प भी निर्धारित कर सकते हैं। जारीकर्ता अपने खाते की शैली में लेनदेन आईडी रखकर अपनी सहमति व्यक्त करता है:

 match tx { case t : TransferTransaction => let issuer = extract(addressFromString("3P6ms9EotRX8JwSrebeTXYVnzpsGCrKWLv4")) #,      ID   isDefined(getInteger(issuer, toBase58String(t.id))) case _ => false } 

केवल कुछ सिक्कों के बदले विनिमय करें

एक स्मार्ट संपत्ति केवल कुछ सिक्कों के लिए इसे विनिमय करने की अनुमति देती है। उदाहरण के लिए, केवल बिटकॉइन के लिए एक्सचेंज की अनुमति देने के लिए, आप निम्नलिखित कोड का उपयोग कर सकते हैं:

 let BTCId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS' match tx { case t : ExchangeTransaction => t.sellOrder.assetPair.priceAsset == BTCId || t.sellOrder.assetPair.amountAsset == BTCId case _ => true } 

ओरेकल मूल्य पर व्यापार

स्मार्ट एसेट स्क्रिप्ट में, आप केवल विश्वसनीय ओरेकल की कहानी में तय की गई कीमत पर व्यापार करने की अनुमति दे सकते हैं। ऐसी स्क्रिप्ट का एक उदाहरण इस प्रकार है:

 let oracle = Address(base58'3PLNmokt22NrSiNvCLvwMUP84LCMJqbXwAD') let assetId = toBase58String(base58'oWgJN6YGZFtZrV8BWQ1PGktZikgg7jzGmtm16Ktyvjd') match tx { #   case t: TransferTransaction | MassTransferTransaction => false case e: ExchangeTransaction => #,     ,        let correctPrice = e.price == extract(getInteger(oracle, assetId)) #,       WAVES let correctPriceAsset = !isDefined(e.sellOrder.assetPair.priceAsset) correctPrice && correctPriceAsset case _ => true } 

यहां हमें उस अप्रभावी क्षण का सामना करना पड़ता है जब उस परिसंपत्ति की आईडी की जांच करते हैं जिसके साथ व्यापार किया जाता है। तथ्य यह है कि यदि परिसंपत्ति आईडी परिभाषित नहीं है, तो हम WAVES के बारे में बात कर रहे हैं। स्क्रिप्ट में, हम यह सुनिश्चित करते हैं कि ट्रेडिंग इस तरह से WAVES के साथ जोड़ी जाती है।

निश्चित मूल्य वृद्धि

आप एक स्मार्ट परिसंपत्ति के लिए एक निश्चित मूल्य निर्धारित कर सकते हैं, जो किसी दिए गए अनुपात में वृद्धि होगी। यहाँ एक उदाहरण संपत्ति स्क्रिप्ट है, जिसकी कीमत में प्रत्येक 1000 ब्लॉक में 5% की वृद्धि होगी:

 let startPrice = 10 let startHeight = 1000 let interval = 1000 #        let raise = 5 match tx { case t: TransferTransaction | MassTransferTransaction => false case e: ExchangeTransaction => e.price == startPrice + ((height - startHeight) / interval) * (100 + raise) / 100 && !isDefined(e.sellOrder.assetPair.priceAsset) case _ => true } 

इंटरवल ट्रेडिंग

इसके अलावा, स्क्रिप्ट के लिए धन्यवाद, स्मार्ट संपत्ति का व्यापार पूर्व निर्धारित अंतराल तक सीमित हो सकता है। ऐसी स्क्रिप्ट का एक उदाहरण इस प्रकार है:

 let startHeight = 10000 let interval = 44000 let limit = 1500 match tx { case t: TransferTransaction | MassTransferTransaction | ExchangeTransaction => (height - startHeight) % interval < limit case _ => true } 

स्क्रिप्ट में, हम यह सुनिश्चित करते हैं कि ट्रेडिंग स्टार्टहाइट की शुरुआत के बाद सीमा अंतराल से अधिक कोई भी पारित नहीं हुआ है । अंतराल की लंबाई अंतराल क्षेत्र में निर्दिष्ट ब्लॉकों की संख्या के बराबर है।

Source: https://habr.com/ru/post/hi444686/


All Articles