في مقالتين سابقتين ، تحدثنا عن الحسابات الذكية وكيف يمكن استخدامها لإجراء مزادات وإنشاء برامج ولاء ، وكذلك المساعدة في ضمان شفافية الأدوات المالية .
سننظر الآن في الأصول الذكية والعديد من حالات تطبيقها ، بما في ذلك تجميد الأصول وإنشاء قيود على المعاملات في عناوين محددة.تتيح موجات Smart Wets للمستخدمين تراكب النصوص على الأصول ، باتباع نفس الآليات مثل الحسابات الذكية. سيتم تأكيد كل معاملة جديدة تم إنشاؤها باستخدام الأصل الذكي أولاً بواسطة البرنامج النصي ، وبعد ذلك فقط من خلال blockchain.
تجدر الإشارة إلى الاختلافات التالية بين الأصول الذكية والحسابات الذكية:
- من المستحيل التحقق من الأدلة في رمز الأصول الذكية (تحدثنا عنها في المقالة الأولى ).
- في رمز الحساب الذكي ، يمكنك التحقق من ExchangeTransaction فقط إذا كان حسابك حساب مطابقة. خلاف ذلك ، يتم التحقق فقط من النظام. لا يمكنك التحقق من الطلب مباشرة في رمز الأصول الذكية ، ويمكنك التحقق من ExchangeTransaction ، وإذا لزم الأمر ، يمكنك استخراج الطلب منه.
- ليس لدى الأصل الذكي ، على عكس الحساب الذكي ، حالة ، ولكن لا يزال بإمكاننا الوصول إلى حالات الحساب من البرنامج النصي.
تعمل الأصول الذكية على تبسيط كتابة العقود بشكل كبير ، مما يجعل تنفيذ العديد من الحالات موجزة وأنيقة.
تجميد الأصوللتجميد الأصول إلى ارتفاع معين لكتلة
الارتفاع ، يمكنك ببساطة تعيين هذه القيمة في البرنامج النصي للأصول الذكية التالية:
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 }
في البرنامج النصي ، نتأكد من أنه لم يتم تجاوز أكثر من فترات زمنية محددة منذ بداية بدء التداول. طول الفاصل يساوي عدد الكتل المحددة في مجال
الفاصل .