توسعه قراردادهای هوشمند ارتقا پذیر با متد uups: قسمت اول

قراردادهای هوشمند پس از دیپلوی شدن در شبکه های بلاکچینی، غیرقابل تغییر اند و اصطلاحا گفته میشود که:

کد قانون است (code is law)

اما شیوه هایی وجود دارد تا بتوان قراردادهایی با قابلیت ارتقا پذیری ایجاد کرد. از جمله این روش ها registry pattern، relay pattern و proxy delegate pattern هستند.

متد UUPS که امروز با آن آشنا خواهیم شد، نوعی proxy delegate pattern تعبیه شده در قراردادهای openzeppelin است که برای سهولت کار با این روش توسعه داده شده است.

محیط مورد نیاز برای این آموزش

  • ادیتور ترجیحا vscode
  • node.js and npm or yarn
  • truffle

برای شروع با یک قرارداد معمولی کار میکنیم به نام SimpleStorage؛ که 2 متد دارد: یکی برای نوشتن مقدار یک متغیر private و دیگری برای خواندن مقدار آن. دسترسی با متد set را از طریق قراردادهای openzeppelin تنها به owner قرارداد محدود میکنیم.

مشاهده کد در bitbucket snippets
مشاهده کد در github gist

میتوانید با استفاده از truffle یک پروژه جدید ایجاد کنید و این قرارداد را در آن قرار دهید:

mkdir SimpleStorage
cd SimpleStorage

# init npm project
npm init -y

# init truffle config
truffle init

----------------------------
# if you use npm
npm i @openzeppelin/contracts
----------------------------
# if you use yarn
yarn add @openzeppelin/contracts

# create a new contract using truffle
truffle create contract SimpleStorage

حالا ما قراردادی داریم که قادر به نگهداری، آپدیت و نمایش یک مقدار uint64 است. فرض کنید که نیاز داریم متدی در قرارداد بگنجانیم که مقدار را برای ما قرینه یا negate کند. پس از تعبیه این متد باید بار دیگر قرارداد دیپلوی شود و طبعا نسخه جدید قرارداد در آدرس جدیدی نگهداری خواهد شد. شاید در یک قرارداد ساده این موضوع مشکل ساز نباشد اما وقتی بحث به dapp ها می آید، تغییر کردن آدرس قرارداد با هر دیپلوی جدید مشکل ساز است.
در روش proxy delegate pattern ما یک separation of concerns را خواهیم داشت به این معنی که بخش منطق (logic) از بخش ذخیره سازی (storage) جدا خواهد شد. یک اسمارت کانترکت مسئول نگهداری دیتا خواهد بود که Eternal storage نام میگیرد و سیستم لاجیک دیتا را از طریق این storage خوانده با مینویسد.
در واقع UUPS نوعی از همین الگوی ارتقا پذیری است که در قراردادهای خوشمند openzeppelin تعبیه شده و اجرای این pattern را بسیار اصولی و تسهیل میکند.

در قسمت بعدی این آموزش نحوه استفاده از قراردادهای هوشمند ارتقا پذیر OpenZeppelin را با هم بررسی خواهیم کرد.

(مستندات استفاده از قراردادهای هوشمند ارتقا پذیر را میتوانید از اینجا مطالعه کنید)

2 پسندیده

از چه نرم افزار برنامه نویسی استفاده میشه؟
از پایتون میشه؟

متوجه سوالتون نشدم.
پایتون یه زبان برنامه نویسی هست و در این آموزش هم استفاده ای ازش نشده. به جای فریمورک ترافل استفاده شده در این آموزش میشه از فریمورک Brownie استفاده کرد که از زبان پایتون استفاده میکنه.