DAML یک اکوسیستم متن باز برای ساخت قرارداد هوشمند فول استک براساس اپلیکیشن های توزیع شده است. زبان برنامه نویسی مرکزی آن یک زبان سفارشی خاص برای توصیف جریان کار بیزینسی است. هدف آن تمرکز روی منطق اپلیکیشن بدون نگرانی در مورد اصول زیرساخت است. قبل از آن اجازه دهید به بررسی پیشنیازها بپردازیم.
لجر سری زماندار از داده های ثبت شده است. بلاک چین شناخته شده ترین آنها است که توسط واحد مرکزی کنترل نمی شود. در بلاک چین، ورودی های لجر به صورت دنباله ای از بلاک ها پکیج می شوند و هر بلاک ایمن است و توسط هش رمزنگاری به بلاک های قبلی وصل است. سه ویژگی بلاک چین:
تکنولوژی بلاک چین با ظهور بیت کوین گسترش یافت. این اختراع به قدری انقلابی بود که مردم به این فکر افتادند که آیا یک تکنولوژی گسترده تری وجود دارد که بدون وجود اطمینان اقدام به انتقال ارزش کرد.
اتریوم سپس مفهوم قرارداد هوشمند را مطرح کرد، که انعطاف پذیر بود و امکان نوشتن dApp های پشتیبانی شده توسط یک بلاک چین بر روی آن وجود داشت.
قراداد یک توافق بین دو طرف است. یک قرارداد هوشمند مشابه قرارداد است، به جز اصلاحات game-changing (قوانینی که توسط قرارداد تعریف می شوند و با ماشین قابل خواندن هستند و هیچ یک از طرفین نمی تواند آن را تغییر دهد).
یک قرارداد هوشمند یک توافق دیجیتالی برای تسهیل، تأیید یا اجرای یک قرارداد است. این کار از طریق چندین طرف و ارتباط مستقیم آنها با یکدیگر، بدون واسطه صورت می گیرد.
واژه قرارداد هوشمند توسط Nick Szabo در دهه 90 ابداع شد. برای درک فلسفه آن به مثال زیر توجه کنید.
کارکرد دستگاه خرید:
طی معامله باید دو نکته را در نظر داشته باشید:
با داشتن این ابداع ساده، اتریوم می توانست یک پروتکل ایجاد کند که در آن کاربران مستقیم و بی واسطه با dApp ها در ارتباط باشند. زبان برنامه نویسی اتریوم سالیدیتی است. اگرچه اتریوم بلاک چین عمومی است و دارای شبکه باز است و هر کسی می تواند ملحق شود.
سازمان ها براحتی نمی توانند از بلاک چین های عمومی استفاده کنند، آنها نیاز به بلاک چین خاصی دارند تا محرمانگی خود را حفظ کنند.
بلاک چین های شرکتی:
این بلاک چین ها برای عموم باز نیستند. برای ورود نیاز به اجازه دارند. ویژگی های آنها شامل:
علاوه بر محیط مناسب برای سازمان ها، نیاز است که قراردادهای هوشمند خاصی داشته باشند. قرارداد هوشمند عمومی اتریوم روی سالیدیتی اجرا می شوند اما در زبان برنامه نویسی بلاک چین شرکت ها باید فیچرهای خاصی وجود داشته باشد.
ویژگی های زبان برنامه نویسی قراردادهای هوشمند شرکتی:
نکته منفی سایر زبان های برنامه نویسی این است که آنها با الگوبرداری از زبان های سیستم های سنتی ارائه شده اند. آنها سطح پایین هستند و بشدت بر زیرساخت های اجرا وابسته اند که منجر به سختی و کندی آن می شود. توسعه کنندگان به طور مرتب قراردادهای دارای باگ می سازند، که برای اکوسیستم ضررهایی در پی دارد. در سال 2016، جامعه اتریوم اولین بار به قابلیت کد قرارداد هوشمند پی بردد. DAO قرار بود مهم ترین قرارداد هوشمند اتریوم شود. اما یک باگ در آن باعث شد یک هکر بتواند معادل 150 میلیون دلار اتر به سرقت ببرد. این هک باعث تقسیم اتریوم به اتریوم و اتریوم کلاسیک شد.
این یعنی وقتی با زبانی مثل سادیتی کد می کنید باید یک سری نکات هم در نظر داشته باشید:
یعنی نمی توانید یک زبان انتخاب کرده و قرارداد را بنویسید. باید عواقب انتخاب خود را بدانید. دارایی های دیجیتالی سال ها زمان صرف کرده اند تا ویژگی های اساسی مورد نیاز زبان قرار داد هوشمند شرکت ها را بیابند:
DAML یک زبان قرارداد هوشمند است که برای لجرهای توزیع شده ساخته شده و امن است، گیج کننده نیست و امکان تمرکز بیزینس ها روی منطق بیزینسی را می دهد. موارد اساسی در مورد آن شامل:
برخلاف زبان های دستوری، DAML یک زبان تابعی است.
زبان C++، جاوا و سالیدیتی دستوری هستند. یعنی تمام مراحل باید کد شوند. مثلا در زبان C++ فرض کنید بخواهیم اعداد 1 تا 100 را پرینت کنیم:
int i = 0; next: i++; printf(“%i”, i); if(i < 100) goto next; int a = 5; int b = 3; int c; c= a + b;
همانطور که می بینید، فرآیندهای تکراری چندین بار انجام می شود و هر دستور به طور مرتب وضعیت برنامه را تغییر می دهد زیرا به صورت تکی انجام می شود.
فرآیند اضافی شامل 4 دستور به شرح زیر است:
در این برنامه توابع به جای دستورها فعال هستند. به جای نوشتن دستورها یا اجرای الگوریتم ها، تعریف مراحل به صورت توابع ریاضی و دادن ورودی به توابع و دریافت خروجی است.
برنامه نویسی تابعی برای قرارداد هوشمند مناسب است، زیرا ساختار تابع شبیه به قرارداد است. مثلاً در قرارداد “اگر آلیس به باب 100 دلار بدهد، باب به آلیس یک تیکت می دهد” مثل یک تابع است که 100 دلار را به تیکت مرتبط می کند. اگر دومین قرارداد بگوید آلیس به باب تیکت داد، باب به آلیس اجازه ورود می دهد، این تابع دوم تیکت را به دسترسی ربط می دهد. مثل توابع، این قراردادها به طور طبیعی و وقتی “اگر آلیس برای باب 100 دلار بفرستد، باب به آلیس اجازه دسترسی می دهد” انجام می شوند.
این رفتار ورودی-خروجی که آن را نسبت به وضعیت مستقل می کند منجر می شود که رویکرد تابعی از نظر منطق ریاضی ساده تر باشد: با داشتن این توابع که با دادن ورودی خروجی ناشی می شود، توسعه دهندگان می توانند روی درستی تک تک توابع و نوع سیستمی که آنها را به طور امن فعال کند و در کنار هم قابل پیش بینی باشند تمرکز کنند. به همین دلیل نسبت به زبان دستوری ارجعیت دارند. DAML یک زبان تابعی است و به توسعه دهندگان اجازه تمرکز روی منطق بیزینسی در توابع ریاضی strongly-typed را می دهد. strongly-typed یعنی هر کاری که تابع انجام می دهد را می توان با ابزارهای DAML و رانتایم بررسی کرد. این باعث می شود توسعه دهندگان بدانند چطور اجزای یک برنامه روی وضعیت لجر تأثیر می گذارد.
برای شروع به کار با DAML می توانید:
template Token with owner : Party where signatory owner
چیزی که در بالا می بینید یک تمپلیت DAML است. تمپلیت نوع قرارداد و افراد مجاز انجام آن را نشان می دهد. قراردادها نمونه هایی از تمپلیت هستند. در این مثال نام تمپلیت Token است. داده های داخل قرارداد به نام arguments هستند. اجازه دهید به آرگومان های این قرارداد نگاهی بیاندازیم.
یک کد معمولی در DAML دارای 4 جزء است:
نمونه کد کامل DAML:
template Cash with issuer : Party owner : Party amount : Decimal where signatory issuer controller owner can Transfer : ContractId Cash with newOwner: Party do create this with owner = newOwner template TicketAgreement with organizer : Party owner : Party where signatory organizer, owner template TicketOffer with organizer : Party buyer : Party price : Decimal where signatory organizer observer buyer controller buyer can Accept : ContractId TicketAgreement with cashId : ContractId Cash do cash <- fetch cashId assert (cash.amount == price) exercise cashId Transfer with newOwner = organizer create TicketAgreement with organizer; owner = buyer validateTicketPurchase = scenario do issuer <- getParty “Issuer” organizer <- getParty “Organizer” buyer <- getParty “Buyer” cash <- submit issuer do create Cash with issuer; owner = buyer; amount = 20.0 offer <- submit organizer do create TicketOffer with organizer; buyer; price = 20.0 submit buyer do exercise offer Accept with cashId = cash
سری از تمپلیت ها در اینجا وجود دارند که در کنار هم کار می کنند تا یک کاربر یک تیکت از سازمان بخرد. بنابراین، بر اساس رنگ 4 نوع بلاک داریم:
Data Model-قرمز
همانطور که گفتیم تمپلیت دارای فیلد داده است که باید تعیین و اجرا شود. اجازه دهید نگاهی به تمپلیت TicketOffer بیاندازیم:
template TicketOffer with organizer : Party buyer : Party price : Decimal
این تمپلیت 3 فیلد دارد:
Fine-grained Permissions-سبز
where signatory organizer observer buyer controller buyer can Accept : ContractId TicketAgreement
این بخش مجوزهای هر بخش را نشان می دهد. organizer حق امضا دارد و قدرت ساخت و آرشیو قرارداد را دارد.
Buyer مشاهده کننده و کنترل کننده است. یعنی مراحل و وضعیت ها را می تواند ببیند. همچنین او می تواند قرارداد تیکت را قبول کند، که منجر به آرشیو آن و ایجاد یک قرارداد TicketAgreement جدید می شود.
Business Logic-صورتی
do cash <- fetch cashId assert (cash.amount == price) exercise cashId Transfer with newOwner = organizer create TicketAgreement with organizer; owner = buyer
بنابراین، فیلد تعیین شد و مشاهده آن تخصیص داده شد. حال، زمان منطق بیزینسی و جریان کار تمپلیت رسیده است. قرارداد چک می کند که آیا پول دریافتی از خریدار مساوی قیمت تیکت است یا نه. اگر چنین باشد مالکیت به خریدار منتقل می شود و پول به organizer می رسد.
Scenario-based Testing-آبی
validateTicketPurchase = scenario do issuer <- getParty “Issuer” organizer <- getParty “Organizer” buyer <- getParty “Buyer” cash <- submit issuer do create Cash with issuer; owner = buyer; amount = 20.0 offer <- submit organizer do create TicketOffer with organizer; buyer; price = 20.0 submit buyer do exercise offer Accept with cashId = cash
درنهایت، در این بخش می توانید جریان کار و منطق بیزینسی را بررسی کنید که برای توسعه دهندگان کمک کننده است. می توان با تعامل با لجر با استفاده از چندین طرف و تأثیر معامله را به سرعت تأیید کرد. نتایج سناریو مثال بالا به شکل زیر خواهد بود:
کاربردهای واقعی-Replacing ASX’s CHESS:
یکی از کاربردهای DAML در یک صرافی مالی در استرالیا است (ASX). از نظر ارزش جز 10 صرافی برتر و از نظر بالاترین نرخ بهره مشتقات در آسیا اول است. همواره در 5 صرافی برتر بوده است.
امروزه، CHESS سیستم مرکزی است که در فرآیند کلیرینگ، تسویه، ثبت نام دارایی و سایر سرویس ها ضروری است. در دسترسی این سرویس در 5 سال اخیر 99.99 درصد بوده است. با این حال، ASX تصمیم گرفته است که آن را با distributed ledger technology (DLT) تعویض کند که مزایای بیشتری دارد. دلایل این جایگزینی در وب سایت ASX به شرح زیر اعلام شده است:
نتیجه گیری:
Shaul Kfir، یکی از مؤسسان و رئیس بخش تکنولوژی Digital Asset، اشاره کرد که ظهور بلاک چین و تکنولوژی لجر توزیع شده امروزه شبیه به ظهور اینترنت در سال 1990 دارد. اینترنت یک پلتفرم انقلابی بود که با استفاده از سیستم های سنتی نمی توانست پتانسیل خود را بروز دهد. تنها پس از طراحی معماری های جدید مثل REST بود که توسعه یافت. این همان کاری است که DAML می تواند در پلتفرم های سازمان های بلاک چینی انجام دهد.
در حال حاضر، دارای چندین زبان برای قراردادهای هوشمند است. این کار باعث می شود قراردادهای هوشمند قابلیت همکاری، گسترش و مقیاس پذیری داشته باشند. DAML دارای ویژگی مورد نیاز برای سازمان ها است تا آن را به عنوان زبان اصلی بپذیرند درحالیکه پلتفرم خاص خود را می سازند. Digital Asset اعلام کرد که DAML با چندین لجر توزیع شده و پلتفرم های دیتابیس سنتی شاملVMWare Blockchain، Hyperledger Sawtooth and Fabric، Corda and Amazon’s QLDB و Aurora databases همخوانی دارد.