Blockchain یک پایگاه داده عمومی است که سوابق دائمی معاملات دیجیتالی را در خود نگه می دارد. این سیستم به عنوان یک سیستم معاملاتی بی اعتماد عمل می کند ، چارچوبی که در آن افراد می توانند بدون نیاز به اعتماد به شخص ثالث یا دیگری به معاملات نظیر به نظیر بپردازند.

بیایید ببینیم که چگونه می توان قراردادهای هوشمند را در Ethereum با Solidity ایجاد کرد:

 

 اتریوم

Ethereum بستری است که به مردم امکان می دهد با استفاده از فناوری بلاکچین به طور کارآمد برنامه های غیرمتمرکز بنویسند.

یک برنامه غیرمتمرکز (Dapp) ابزاری برای افراد و سازمان های مختلف در تعامل است که بدون هیچ واسطه متمرکز در کنار هم قرار می گیرند. نمونه های اولیه Dapps شامل BitTorrent (اشتراک فایل) و Bitcoin (واحد پول) است.

ما می توانیم Ethereum را به عنوان یک بلاکچین با زبان برنامه نویسی داخلی توصیف کنیم.

 

Ethereum ماشین مجازی (EVM)

 

از نقطه نظر عملی ، EVM می تواند به عنوان یک سیستم بزرگ و غیرمتمرکز شامل میلیون ها شی به نام حساب در نظر گرفته شود ، که می تواند یک پایگاه داده داخلی را نگه داری کند ، کد را اجرا کند و با یکدیگر صحبت کند.

اولین نوع حساب ممکن است برای کاربر معمولی که از شبکه استفاده می کند آشنا ترین باشد. نام آن EOA (حساب متعلق به خارج از کشور) است. برای انتقال مقدار (مانند اتر) استفاده می شود و توسط یک کلید خصوصی کنترل می شود.

از طرف دیگر ، نوع دیگری از حساب نیز وجود دارد که همان قرارداد است. بیایید جلو برویم و ببینیم این در مورد چیست:

 

قرارداد هوشمند یا Smart Contract چیست؟

 

قرارداد هوشمند یک اسکریپت مستقل است که معمولاً با Solidity نوشته و در قالب باینری یا JSON کامپایل شده و در یک آدرس خاص در بلاکچین مستقر می شود. به همان روشی که می توان یکendpoint URL خاص از RESTful API فراخوانی کرد تا منطقی را از طریق HttpRequest انجام دهد ، می توانیم قرارداد هوشمند مستقر شده را با ارسال داده های صحیح همراه با Ethereum لازم برای فراخوانی، در یک آدرس خاص اجرا کنیم تا Solidity function کامپایل و مستقر شود.

از دیدگاه کسب و کار ، این بدان معناست که توابع قرارداد هوشمند می توانند ذاتاً درآمدزایی کنند (مشابه عملکرد AWS Lambda که به کاربران امکان می دهد در هر چرخه محاسبه به جای نمونه پرداخت کنند). نکته مهم ، عملکردهای قرارداد هوشمند برای اجرای آن نیازی به هزینه اتریوم ندارند.

به زبان ساده ، ما می توانیم یک قرارداد هوشمند را به عنوان مجموعه ای از کدهای ذخیره شده در شبکه بلاکچین ببینیم که شرایطی را تعریف می کند که همه طرف های قرارداد بر آن توافق می کنند.

این توسعه دهندگان را قادر می سازد چیزهایی را که هنوز اختراع نشده اند ، ایجاد کنند. یک لحظه به آن فکر کنید – نیازی به واسطه نیست و همچنین خطر طرف مقابل وجود ندارد. ما می توانیم بازارهای جدیدی ایجاد کنیم ، رجیستری از بدهی ها یا وعده ها را ذخیره کنیم و مطمئن باشیم که اجاره نامه شبکه ای را که معاملات را تأیید می کند ، داریم.

هر کسی می تواند با پرداخت هزینه متناسب با اندازه فضای کد ، یک قرارداد هوشمند در پایگاه داده غیرمتمرکز مستقر کند. node هایی که مایل به استفاده از قرارداد هوشمند هستند باید به نوعی نتیجه مشارکت خود را به بقیه شبکه نشان دهند.

 

Solidity

اصلی ترین زبان مورد استفاده در Ethereum ، جامدادی است – که یک زبان  مشابه Javascript است که به طور خاص برای نوشتن قراردادهای هوشمند ساخته شده است. جامدادی بصورت ثابت تایپ می شود ، از ویژگی های ارثی ، کتابخانه ها و انواع پیچیده تعریف شده توسط کاربر پشتیبانی می کند.

کامپایلر solidity کد را به bytecode EVM تبدیل می کند ، سپس می تواند به عنوان یک تراکنش استقرار به شبکه Ethereum ارسال شود. چنین تراکنشی نسبت به تعاملات قرارداد هوشمند هزینه های معامله قابل توجه تری دارد و باید توسط مالک قرارداد پرداخت شود.

 

ایجاد یک قرارداد هوشمند با solidity

خط اول در یک قرارداد solidity نسخه کد منبع را تنظیم می کند. این امر برای اطمینان از این است که قرارداد به طور ناگهانی با نسخه کامپایلر جدید رفتار متفاوتی ندارد.

 

pragma solidity ^0.4.0;

 

برای مثال ، نام قرارداد Greeting است و همانطور که می بینیم ایجاد آن مشابه کلاس در جاوا یا زبان برنامه نویسی شی گرا است:

 

contract Greeting {

address creator;

string message;

// functions that interact with state variables
}

 

 

در این مثال ، ما متغیرهای دو حالت را تعریف کردیم: creator و message. در Solidity ، ما از نوع داده با نام آدرس برای ذخیره آدرس حساب ها استفاده می کنیم.

بعد ، ما باید هر دو متغیر را در سازنده مقداردهی اولیه کنیم.

Constructor

ما یک constructor را با استفاده از کلمه کلیدی function و به دنبال آن نام قرارداد (دقیقاً مانند جاوا) تعریف می کنیم.

constructor یک function ویژه است که وقتی یک قرارداد برای اولین بار در بلاک چین Ethereum مستقر می شود ، فقط یک بار فراخوانی می شود. ما فقط می توانیم یک function را برای یک قرارداد تعریف کنیم:

 

function Greeting(string _message) {
message = _message;
creator = msg.sender;
}

 

 

ما همچنین رشته _message را به عنوان یک پارامتر به سازنده تزریق می کنیم و آن را روی حالت متغیر پیام قرار می دهیم.

در خط دوم سازنده ، متغیر Creator را در مقداری به نام msg.sender مقداردهی اولیه می کنیم. دلیل اینکه نیازی به تزریق msg به سازنده نیست ، به این دلیل است که msg یک متغیر global است که اطلاعات خاصی را در مورد پیام مانند آدرس حساب ارسال کننده آن ارائه می دهد.

ما به طور بالقوه می توانیم از این اطلاعات برای اجرای کنترل دسترسی برای توابع خاص استفاده کنیم.

 

تعامل با یک قرارداد هوشمند

برای تعامل با یک قرارداد هوشمند در شبکه غیرمتمرکز (بلاکچین) لازم است که به یکی از مشتریان دسترسی داشته باشیم.

برای انجام این کار دو روش وجود دارد:

  • خودمان client را اجرا کنیم
  • با استفاده از سرویسی مانند Infura به یک node از راه دور متصل شویم.
    Infura ساده ترین گزینه است ، بنابراین ما یک رمز دسترسی رایگان درخواست خواهیم کرد. پس از ثبت نام ، باید URL Rinkeby test network را انتخاب کنیم: “https://rinkeby.infura.io/ <token>”.

برای اینکه بتوانیم با قرارداد هوشمند از جاوا معامله کنیم ، باید از کتابخانه ای به نام Web3j استفاده کنیم. در اینجا dependecy Maven وجود دارد:

 

<dependency>
    <groupId>org.web3j</groupId>
    <artifactId>core</artifactId>
    <version>3.3.1</version>
</dependency>

 

ایجاد کیف پول یا Wallet

Web3j به ما اجازه می دهد تا از برخی از قابلیت های آن از خط فرمان استفاده کنیم:

  • ایجاد کیف پول
  • مدیریت رمز عبور کیف پول
  • انتقال وجوه از یک کیف پول به کیف پول دیگر
  • بسته بندی عملکرد قرارداد هوشمند Solidid ایجاد کنید

ابزارهای خط فرمان را می توان به عنوان یک فایل zip / tarball از صفحه انتشارات repository پروژه ، در بخش Downloads  یا برای کاربران OS X از طریق homebrew تهیه کرد.

 

brew tap web3j/web3j
brew install web3j

 

برای تولید یک کیف پول جدید Ethereum ، دستور زیر را در خط فرمان تایپ می کنیم:

 

$ web3j wallet create

 

از ما گذرواژه و آدرسی  را می خواهد که بتوانیم کیف پول خود را ذخیره کنیم. این پرونده در قالب Json است و اصلی ترین چیزی که باید بخاطر بسپارید آدرس Ethereum است.

 

منبع: baeldung.com

Blockchain Ethereum Smart Contracts Solidity اتریوم بلاکچین قرارداد هوشمند