شاید این اصطلاح را شنیده باشید که «اگر کلید [خصوصی] متعلق به شما نیست، کوینها نیز به شما تعلق ندارد». این عبارت معمولا در ذم روشهای نگهداری حضانتی (Custodial) – همچون نگهداری ارزهای دیجیتال در حساب صرافیها – بیان میشود. اگرچه این عبارت کاملا صحیح است و ما نیز در میهن بلاکچین بارها به این نکته اشاره کردهایم، اما از لحاظ تکنیکی میتوان والتی بدون کلمات بازیابی (Seed Phrase) و در عین حال ایمن داشت. این کیف پولها که حساب زیرین آنها یک قرارداد هوشمند است، به نام «کیف پول قرارداد هوشمند» یا Smart Contract Wallet شناخته میشوند. در ادامه این مطلب اشاره خواهیم کرد که کیف پول قرارداد هوشمند چیست و چه مزایایی دارد. علاوه بر این چگونگی ایجاد یک حساب Smart Wallet را توضیح خواهیم داد.
با انواع حسابها در اتریوم آشنا شوید
پیش از هر چیز باید اشاره کنیم که این مفهوم در شبکه اتریوم و دیگر شبکههای منطبق بر ماشین مجازی اتریوم (EVM) معنیدار است. شبکه اتریوم از سیستم «حساب محور – Account Based» برای نگهداری موجودی و اطلاعات هر آدرس استفاده میکند؛ بر خلاف مدل «خروجی تراکنش خرجنشده – UTxO» بیت کوین. هر حساب اتریوم دارای موجودی اتر (ETH) است که میتواند تراکنش بفرستد (یا دریافت کند). در شبکه اتریوم دو نوع حساب وجود دارد:
- حساب با مالکیت خارجی (Externally Owned Account یا EOA)
- حساب قرارداد (Contract Account یا CA)
حساب با مالکیت خارجی (EOA)، همان حسابهایی است که به آن عادت داریم؛ حسابهایی که به وسیله امضاکننده (Signer) – که با جفت کلید (Keypair) یا کلید خصوصی و عمومی نیز شناخته میشوند – کنترل میشود. با ایجاد یک حساب در عموم والتهای در دسترس (همچون متامسک، تراست والت و غیره)، برای شما یک عدد ۶۴ رقمی تصادفی هگزادسیمال ایجاد میشود. این رشته به نام کلید خصوصی شناخته میشود و کلید دسترسی شما به حساب اتریومیتان است. از روی کلید خصوصی و به کمک الگوریتم امضای دیجیتال منحنی بیضوی (ECDSA)، کلید عمومی شما ساخته میشود. آدرس شما نیز ۲۰ بایت آخر هش این کلید عمومی با تابع Keccak-256 است (به همراه افزودن شناسه 0x).
به کمک کلید خصوصی، تراکنشهای صادر شده از حسابتان را امضا میکنید. به کمک کلید عمومی و رمزنگاری کلید عمومی، فرستنده میتواند به راحتی اثبات کند که او فرستنده و تنها مالک آن حساب است؛ طبیعتا مادامی که کلید خصوصی او افشا نشده باشد. از این رو، مالکیت کلید خصوصی معادل حساب (و موجودی آن) تلقی میشود.
اما حساب قرارداد، مربوط به قرارداد هوشمندی است که در بلاک چین راهاندازی شده است و به وسیله کد (و نه کلید خصوصی) کنترل میشود. این پایه و اساس والتهای قرارداد هوشمند است.
تفاوت و تشابه حسابهای مختلف اتریوم چیست؟
هر دو نوع حساب ذکر شده قادرند که اتر و دیگر توکنها را دریافت، ارسال و نگهداری کنند. همچنین میتوانند با قراردادهای هوشمند دیگر تعامل کنند.
مهمترین تفاوتهای بین این دو عبارتست از:
حسابهای EOA
- بدون هزینه میتوان این حسابها را ایجاد کرد.
- میتوانند تراکنشها را آغاز کنند.
- دو حساب با مالکیت خارجی تنها میتوانند تراکنشهایی حاوی اتر/توکن با یکدیگر داشته باشند.
در سوی دیگر
حسابهای CA
- ایجاد حساب قرارداد نیازمند صرف هزینه است چرا که بخشی از فضای حافظه شبکه را اشغال میکنید.
- تنها به عنوان پاسخی به تراکنشی دریافتی میتوانند تراکنشی ارسال کنند.
- تراکنش ارسالی از طرف یک اکانت با مالکیت خارجی میتواند باعث اجرای کد قرارداد شده که به تبع آن قادر خواهد بود اعمال مختلف و متفاوتی را انجام دهد.
برای آشنایی بیشتر با مشخصات اکانتها در شبکه اتریوم میتوانید سند بنیاد اتریوم در این خصوص را مطالعه کنید.
والت قرارداد هوشمند چیست؟
حال که با انواع حسابها در اتریوم آشنا شدید، به موضوع اصلی بازگردیم: کیف پول قرارداد هوشمند چیست؟ کیف پول قرارداد هوشمند یا Defi Smart Wallet، حساب قراردادی است که توسط حساب اصلی کاربر (=EOA) کنترل میشود. اما چرا باید این کار را کرد؟
یکی از مهمترین دلایل این کار امنیت است. در حال حاضر گزینههای امنتر برای جایگزینی کیف پولهای گرم به کیف پولهای سرد (سختافزاری) و چند امضایی (برای مثال گنوسیس سیف Gnosis Safe) خلاصه میشوند. اگر چه هر دو این گزینهها امنیت قابل قبولی به همراه میآورند اما همچنان دارای ایراداتی همچون داشتن یک نقطه آسیبپذیر و عدم سهولت هستند.
ویتالیک بوترین در مطلبی که در ابتدای سال ۲۰۲۱ نوشت، کیف پولهای دارای بازیابی اجتماعی (Social Recovery) را پیشنهاد میدهد. این والتها در واقع نوعی از کیف پولهای قرارداد هوشمند هستند. در این کیف پولها یک کلید خصوصی برای امضا وجود دارد (مربوط به اکانت EOAای که با آن حساب CA را ساختهایم) که به وسیله آن میتوان تراکنشها را تایید کرد. علاوه بر آن تعداد نگهبان (Guardian) میتوان تعیین کرد که اکثریت آنها میتوانند با همکاری همدیگر کلید امضاکننده را تغییر دهند.
حسابهایی با مالکیت خارجی قادر به تعامل با یک قرارداد هوشمند به ازای هر تراکنش هستند. از سوی دیگر قراردادهای هوشمند خود نمیتوانند آغازکننده تراکنش باشند. تغییر این روند که به انتزاع حساب (Account Abstraction) مشهور است در نقشه راه اتریوم دیده شده است. در حال حاضر طرح EIP-4337 برای این منظور از حمایت بیشتری در جامعه توسعهدهندگان اتریوم برخوردار است.
مزایای استفاده از کیف پول هوشمند چیست؟
کیف پولهای هوشمند از مفهوم پراکسی بهره میبرند. به کمک پراکسیها، میتوان منطق دلخواه خود را نوشت و تعبیه کرد. ارائهدهندگان خدمات کیف پول یا حتی خود فرد میتواند منطق مدنظر خود را نوشته و اجرا کند. گستره اعمال بسیار متنوع است اما برخی از پراستفادهترین آنها در موارد تجاری عبارتند از:
- امنیت چندامضایی: میتوانید چندین نگهبان برای حساب خود مشخص کنید. هر آدرس اتریومی میتواند نگهبان حساب شما باشد؛ خواه حساب دیگر شما در دستگاهی دیگر یا خانواده و افراد نزدیک شما. سرویسهای تجاری همچون کیف پول آرجنت (Argent)، با تایید هویت شما به واسطه ایمیل و تلفن همراه، میتوانند به عنوان یکی از نگهبانان شما به شمار روند.
- محدودیت انتقال: کاربران میتوانند با گذاشتن حد انتقال، حتی در صورت هک شدن نیز از داراییهای خود محافظت کنند.
- تایید آدرسها: به کمک کیف پول قرارداد هوشمند، میتوانید وایت لیستی از آدرسهای مجاز تهیه کنید. برای مثال تنها اگر مقصد تراکنش تبادل توکن در صرافی غیرمتمرکز حساب خود شما باشد، این انتقال/تبادل انجام میشود. در غیر این صورت ناموفق خواهد بود.
- تجمیع تراکنشها: میتوان در هنگام استفاده از dAppهایی که استفاده از آنها نیازمند چندین مرحله/تراکنش است، تمامی آنها را طی تراکنشی واحد ارسال کرد و در هزینه گس صرفهجویی کرد. برای مثال فرض کنید میخواهید با استفاده از پروتکل آوه وام دریافت کنید. این کار نیازمند تایید خرج کردن توکن وثیقه، واریز آن و دریافت وام است. میتوان تمامی این کارها را به وسیله والتهای هوشمندی همچون Instadapp ،DefiSaver و یا Oasis طی یک گام انجام داد.
- مسدود کردن حساب: در هنگام سرقت تلفن همراه یا حوادث دیگر، میتوانید به کمک نگهبانان، حساب خود را قفل کنید و از سرقت آن جلوگیری نمایید.
به عنوان نمونههایی از این کیف پولها، میتوان به کیف پولهای آرجنت (Argent) و لوپرینگ (Loopring) اشاره کرد. همچنین بسیاری از dAppهایی که به شما امکان مدیریت هوشمند موقعیتهای وام/صندوقهای سرمایهگذاری را میدهند، در عمل از چنین امکانی استفاده میکنند. برای مثال میتوانید به نمونههای اشاره شده در بالا رجوع کنید.
چگونه یک کیف پول قرارداد هوشمند بسازیم؟
علاوه بر استفاده از راهکارهای تجاری ذکر شده در بالا، میتوانید شخصا با استفاده از یک نمونه قرارداد هوشمند آماده به نام DSProxy اقدام به ساخت کیف پول هوشمند خود کنید. در صورتی که سرویس مدنظر شما از proxy registry این قرارداد برای استقرار و راهاندازی کیف پول خود استفاده کرده باشد، شما احتیاجی به ساخت مجدد (=پرداخت هزینه دوباره) نخواهید داشت و قرارداد شما بهروز خواهد شد قرارداد هوشمند سازنده (factory) این رجستری توسط میکر دائو توسعه یافته است. قرارداد هوشمند DSProxy توسط dapphub ایجاد شده است و میتوانید کد آن را از اینجا مشاهده کنید. تاکنون بیش از ۲۰۰ هزار عدد DSProxy در شبکه اصلی اتریوم راهاندازی شده است.
پس از ایجاد قرارداد هوشمند، آدرس فرستنده تراکنش ساخت در قرارداد DSProxy Registry با آدرس قرارداد متناظر شده و ثبت میشود. از این لحظه به بعد، میتوانید تمامی اعمال مدنظر خود را با فراخوانی تابع execute اجرا نمایید. این تابع دو آرگومان target و calldata دارد. در بخش هدف (target)، آدرس قرارداد هوشمندی که مایل به تعامل با آن هستید ثبت میشود (برای مثال قرارداد هوشمند وامدهی پروتکل آوه). از آرگومان calldata برای مشخص کردن تابعی که در قرارداد هوشمند هدف اجرا خواهیم کرد، استفاده میشود.
پس از فرستادن این تراکنش به کیف پول قرارداد هوشمند، پراکسی ما به کمک دستور delegatecall()، با قرارداد هوشمند ارتباط برقرار میکند. این گونه فرستنده تراکنش از نظر پروتکل مقصد، اکانت EOA کاربر خواهد بود.
اما چگونه یک کیف پول قرارداد هوشمند ایجاد کنیم؟ سادهترین راه این کار، استفاده از دپ DefiSaver است. با کلیک بر روی لینک و پس از وصل کردن حساب EOA خود، بر روی دکمه Create در قسمت ایجاد اسمارت والت بزنید:
در مواقعی که هزینه انتقال در شبکه پایین باشد (در تصویر زیر هزینه گس ۳۰ جیوی است)، ایجاد چنین کیف پولی حدود ۶۰ دلار تمام میشود.
کاری که DefiSaver انجام میدهد در واقع ایجاد رابطی کاربری برای فراخوانی تابع build() قرارداد هوشمند Proxy Registry است. میتوانید شخصا و به کمک اتراسکن به آدرس این قرارداد مراجعه کنید و با اتصال کیف پول خود، در قسمت Write Contract تابع build را فراخوانی کنید. آدرسی که از آن برای این کار استفاده میکنید، آدرسی خواهد بود که به این کیف پول دسترسی خواهد داشت.
سوالات متداول (FAQ)
کیف پول قرارداد هوشمند یا Smart Contract Wallet، حسابی است که توسط یک حساب اصلی کاربر (EOA) کنترل میشود و از حسابهای مالکیت خارجی میتواند درخواست تراکنش کند.
در این نوع از کیف پولها با استفاده از قراردادهای هوشمند میتوان منطق دلخواهی را تعبیه کرد و از مزایایی مانند امنیت چندامضایی، محدودیت انتقال، تایید آدرسها، تجمیع تراکنشها و مسدود کردن حساب برخوردار باشند.
اگر بخواهیم مثالق از کیف پولهای قرارداد هوشمند بزنیم، میتوانیم به کیف پولهای آرجنت (Argent) و لوپرینگ (Loopring) اشاره کنیم.
جمعبندی
در مطلب که خواندید، با کیف پولهای سوشال ریکاوری که به نامهای مختلفی همچون اسمارت والت و کیف پول قرارداد هوشمند نیز شناخته میشوند، آشنا شدید. به کمک این نوع از والتها میتوان امنیت و امکانات بیشتری همچون تراکنشهای چندامضایی، تجمیع تراکنشها و صرفهجویی در هزینه گس را به دست آورد. این نوع از والتها به گفته ویتالیک بوترین، آینده کیف پولها را رقم خواهند زد. برای ساخت چنین حسابی، احتیاج به پرداخت هزینه تراکنش دارید؛ بنابراین به شما توصیه میکنم در اولین فرصتی که هزینه گس در شبکه اتریوم پایین آمد، به کمک روش ذکر شده در این مطلب یا از طریق ساخت اکانت در کیف پول آرجنت، اقدام به ساخت این کیف پول کنید.
نظر شما در خصوص کیف پولهای هوشمند چیست؟ آیا تاکنون از آنها استفاده کردهاید؟ اگر تجربه استفاده از آنها را دارید، تجربیات ارزشمند خود را با ما در میان بگذارید.