موجات الأصول الذكية: قوائم الأسود والأبيض ، تجارة الفاصل

صورة

في مقالتين سابقتين ، تحدثنا عن الحسابات الذكية وكيف يمكن استخدامها لإجراء مزادات وإنشاء برامج ولاء ، وكذلك المساعدة في ضمان شفافية الأدوات المالية .

سننظر الآن في الأصول الذكية والعديد من حالات تطبيقها ، بما في ذلك تجميد الأصول وإنشاء قيود على المعاملات في عناوين محددة.

تتيح موجات Smart Wets للمستخدمين تراكب النصوص على الأصول ، باتباع نفس الآليات مثل الحسابات الذكية. سيتم تأكيد كل معاملة جديدة تم إنشاؤها باستخدام الأصل الذكي أولاً بواسطة البرنامج النصي ، وبعد ذلك فقط من خلال blockchain.

تجدر الإشارة إلى الاختلافات التالية بين الأصول الذكية والحسابات الذكية:

  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 ، بهذه الطريقة.

زيادة الأسعار الثابتة

يمكنك تحديد سعر ثابت للأصل الذكي ، والذي سيزيد تدريجياً في نسبة معينة. في ما يلي مثال لبرنامج نصي للأصول ، حيث سيزداد سعره بنسبة 5٪ لكل 1000 قطعة:

 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/ar444686/


All Articles