یکی از نقاط عطف تاریخ نه چندان بلند بلاک چین، ایجاد شبکه اتریوم و پدید آوردن امکانی (نسبتا) راحت برای توسعه برنامههای غیرمتمرکز بود؛ تکههایی از کد که میتوانستند با دریافت داده، واکنشهایی قابل انتظار از خود نشان دهند. این کدها بر روی بلاک چین و در معرض دید همگان بودند که میتوانست اعتماد به آن را سادهتر از برنامههای متمرکز کند. همچنین ذات غیرقابل تغییر بلاک چین، به برنامهها قطعیت میبخشید و قدمی تازه به سوی آیندهای بود که کد، قانون باشد (Code is law). با توجه به بدل شدن ماشین مجازی اتریوم (EVM) به استاندارد این روزهای دنیای بلاکچین، تمرکز این مقاله بر روی قراردادهای هوشمند این شبکه و دیگر فورکهای آن که از ماشین مجازی مشابهی استفاده میکنند – همچون بایننس اسمارت چین، فانتوم، پالیگان و غیره – خواهد بود.
در این مقاله توضیح خواهیم داد که در مواجهه با یک قرارداد هوشمند (با اولویت توکنهای ERC-20 و NFTها) به چه چیزهایی در وهله اول توجه کنیم تا خطر مورد کلاهبرداری واقع شدن را کاهش دهیم. با ادامه این مطلب همراه میهن بلاکچین باشید.
چگونه قرارداد هوشمند را بخوانیم؟
اطلاعات در شبکه اتریوم به وسیله تراکنش ثبت میشود، حتی راهاندازی اولیه یک قرارداد هوشمند در شبکه نیز به وسیله تراکنش صورت میگیرد یا ورود اطلاعات به قرارداد هوشمندی که از پیش مستقر شده است. اطلاعات در بلاک چین به شکلی که برای کامپیوتر مناسب و برای انسان غیرقابل فهم است، ذخیره میشود بنابراین ابزارهای اسکن شبکه همچون اتر اسکن (Etherscan) – و نسخههای مشابه آن در شبکههای دیگر همچون bscscan، ftmscan و غیره – بهترین دوستهای شما هستند. این ابزار اطلاعات ثبت شده در شبکه را به شکلی قابلفهم برای انسان ثبت و ارائه میکند. شما میتوانید با داشتن هر آدرسی در شبکه (اعم از آدرس والت یا قرارداد هوشمند) به اطلاعات ذیقیمتی در خصوص آن دست یابید. به شما پیشنهاد میکنم پیش از ادامه مطلب، سه ویدیوی کوتاه آموزشی زیر در خصوص این ابزار مهم را تماشا کنید:
حال بیایید به برخی از اطلاعاتی که میتوان با داشتن آدرس قرارداد هوشمند به دست آورد، نگاهی بیاندازیم. پیش از آن، چگونه آدرس قرارداد هوشمند را به دست آوریم؟
اگر چیزی که به دنبال آن هستیم، توکن است، میتوانیم از سایتهایی همچون کوین مارکت کپ برای این منظور استفاده کرد. پس از جستجوی توکن، آدرس قرارداد هوشمند آن را میتوانیم مطابق شکل به دست آوریم:
در خصوص توکنهای NFT، بهترین راه رجوع به بازارهای فروش آن (برای مثال پلتفرم Opensea) است. با کلیک بر روی مشخصات هر اثر، میتوانید آدرس قرارداد آن را مشاهده کنید. به شکل زیر توجه کنید:
نکته حائز اهمیت دیگر در خصوص توکنهای بیهمتا، نحوه ذخیرهسازی فراداده (Metadata) آنهاست. توکنهای بیهمتا در بسیاری از مواقع چیزی جز یک اشارهگر به یک آدرس خارجی شامل فراداده نیستند، بنابراین اگر مایل هستید که از مزایای مالکیت غیرمتمرکز بهره ببرید، به غیرمتمرکز بودن محل ذخیرهسازی فراداده نیز توجه ویژهای داشته باشید. در مثال بالا (متعلق به مجموعه BAYC)، در جلوی قسمت Metadata عبارت Frozen را مشاهده میکنید که به معنی ذخیره شدن دادهها در پلتفرمی غیرمتمرکز و غیرقابل تغییر (همچون IPFS) است.
چه چیزی در مرورگر بلاک چین در انتظار ماست؟
تصویر بالا، تصویر صفحه مربوط به قرارداد هوشمند مجموعه NFT مشهور BAYC است. فلش قرمز موجودی اتر این قرارداد هوشمند و فلش بنفش رنگ، موجودی توکنهای این قرارداد را نشان میدهد (عموما توکنهایی است که به اشتباه به حساب این قرارداد واریز شدهاند). در سمت دیگر صفحه اطلاعات مهمی همچون تراکنش ایجاد این قرارداد و آدرس خالق آن را مشاهده میکنیم. همچنین فلش سبز رنگ لینک صفحه ترکر (tracker) این توکن است که خود شامل اطلاعات جذابی است. در ادامه این موارد را به شما توضیح خواهیم داد.
همچنین در ردیف پایین، چند ستون مهم را میبینیم (Contract – Transactions etc) که به آن خواهیم پرداخت. فعلا بر روی آدرس خالق قرارداد کلیک میکنیم:
پیش از هر چیز مشاهده میکنیم که خالق قرارداد، یک آدرس والت شخصی (و نه قراردادی دیگر) است. همچنین در چند تراکنش آخر آن، با متد جالبی مواجه میشویم: Update Royalty Fees که به منظور تغییر درصد سهم خالق مجموعه از فروش ثانویه NFT استفاده میشود. بر روی آن تراکنش کلیک میکنیم:
چند جزییات جالب در این تصویر وجود دارد؛ ابتدا در بالای تصویر مشخص است که این تراکنش به شکل خصوصی و از طریق باندلهای Flashbots انجام شده است؛ احتمالا به دلیل مخفی ماندن این اطلاعات و جلوگیری از فرانت ران شدن. همچنین مشاهده میشود که این تراکنش ۲۳ روز پیش و در تعامل با قرارداد هوشمند بازار NFT لوکسریر (Looksrare) انجام شده است. حال بر روی ستون Logs کلیک میکنیم:
در قسمت Name، تابع فراخوانی شده و بروز شده را مشاهده میکنید که سه آرگومان ورودی دارد؛ در قسمت Topic، ورودیهای آپدیت شده هر کدام را مشاهده میکنید و در قسمت Data در انتهای تصویر، مقدار جدید را مشاهده میکنید. ورودی اول، آدرس مجموعه (ادرس قرارداد هوشمند BAYC)، آدرس دوم، آدرس مالک فعلی قرارداد و آدرس سوم، آدرسی که حق امتیاز فروش ثانویه به آن باید واریز شود، مشخص شده است. همچنین عدد ۲۵۰ بدین معنی است که حق امتیاز جدید ۲.۵ درصد است (برای اینکه متوجه این موضوع شوید که چرا این اتفاق افتاد، باید متن قرارداد هوشمند را مطالعه کنید).
حال به صفحه قرارداد هوشمند باز میگردیم و بر روی Contract کلیک میکنیم:
اولین نکتهای که باید به آن توجه کنید، مورد تایید بودن (Verified) قرارداد هوشمند است (فلش قرمز رنگ)؛ توجه داشته باشید که این بدین معنی نیست که قرارداد نمیتواند مشکلی داشته باشد، بلکه صرفا به این معنی است که کدهای ارائه شده در پایین صفحه، پس از اجرا بایت کدهای یکسانی با آن چه در بلاک چین موجود است، ایجاد میکنند و بنابراین میتوان مطمئن بود که قرارداد هوشمند دقیقا چیزی است که در پایین صفحه مشاهده میکنید. این کار نظارت همگانی بر روی کد و پیدا کردن اشکالات احتمالی را راحتتر میکند.
بر روی لینک ترکر توکن کلیک میکنیم:
ابتدا متوجه میشویم که با NFT سر و کار داریم. همچنین در قسمت قرمز رنگ، کمترین قیمت آخرین مبادله را مشاهده میکنیم که ۹۰ اتر است. در قسمت نارنجی رنگ حداکثر تعداد عرضه را میبینیم که برای این مجموعه ۱۰۰۰۰ عدد است. همچنین تعداد کل انتقالها را با رنگ سبز میبینیم. اما قسمت جذاب دیگر (به خصوص در مورد توکنهای عادی) بخش دارندگان (Holders) است. بر روی آن کلیک میکنیم:
لیستی از ۱۰۰۰ هولدر برتر این مجموعه را میتوانید مشاهده کنید. همچنین با کلیک بر روی فلش نارنجی رنگ، میتوانید سهم آدرسهای برتر از کل موجودی را به شکل نمودار کیکی مشاهده کنید:
۲۵۰ دارنده برتر این مجموعه، مالک ۲۶.۱۹ درصد از کل عرضه هستند. این قضیه در مورد توکنهای عادی بیشتر حائز اهمیت است. اگر سهم بزرگی از عرضه یک توکن در اختیار چند آدرس باشد، میتوانند به راحتی قیمت توکن در بازار را تحت تاثیر اعمال خود قرار دهند.
در تصویر بالا وضعیت هولدرهای توکن MetaDoge V2 در شبکه BSC را مشاهده میکنید؛ چند نکته جالب توجه در خصوص وضعیت هولدرهای این توکن وجود دارد. ۳۰ درصد از کل توکنها به آدرس Null (فلش قرمز رنگ) فرستاده شدهاند. از این آدرس به شکل معمول برای سوزاندن توکنها استفاده میشود یعنی با فرستادن توکنها به این آدرس، میتوان به شکل قابل اثباتی نشان داد که مقدار مشخصی از توکنها از چرخه خارج شدهاند.
آدرس دوم (با رنگ بنفش)، آدرس سرویسی برای قفل کردن نقدینگی است. در پروژههای کم نام و نشانتر، اطمینان حاصل کردن از این موضوع که بازاری برای معامله توکنها وجود دارد بسیار حیاتی است بنابراین معمولا تیم توسعهدهنده مبلغ مشخصی از عرضه کل را به استخر نقدینگی در صرافی غیرمتمرکزی اختصاص میدهد و توکن نقدینگی آن را در سرویسی همانند Pinklock قفل می کند. چند سرویس دیگر از این دست عبارتند از: Unicrypt، Unilock، Mudra Locker و dxlocker.
ردیف سوم، میزان نقدینگی این توکن در صرافی غیرمتمرکز پنکیک سواپ است.
اما آیا صرفا یک آدرس میتواند خالق و یا مالک یک قرارداد هوشمند باشد؟ پیشتر در خصوص این موضوع صحبت کردیم که یکی از مزایا و شاید معایب قراردادهای هوشمند، تغییرناپذیری آن است. برای دور زدن این محدودیت، قراردادهایی به نام proxy به وجود آمدهاند. به شکلی ساده، قرارداد توکن مدنظر، در صورتی که به شکل پراکسی عرضه شده باشد، به راحتی قابل تغییر است. بنابراین نیاز است در صورتی که به چنین توکنهایی برخوردید، توجه و تحقیق بیشتری به خرج دهید. یک نمونه معروف از این دست، توکن USDC است. در تصویر زیر، پراکسی بودن قرارداد هوشمند این توکن را میتوانید مشاهده کنید:
از دیگر مواردی که ممکن است رخ دهد، تغییر مالکیت قرارداد هوشمند است. در تراکنشی که برای نمونه برای شما آوردهایم، سازنده قرارداد هوشمند پلتفرم Sablier، مالکیت قرارداد را به قرارداد هوشمند پراکسی منتقل کرده است. توجه داشته باشید که این موارد به خودی خود خط قرمز محسوب نمیشوند، بلکه میتوانند مورد سو استفاده قرار گیرند:
در تصویر فوق، مالکیت از آدرس شماره ۱، با فراخوانی تابع transferOwnership به آدرس ۲ منتقل شده است.
گاهی اوقات پروژهها برای اعتمادسازی، حق مالکیت خود را بر قرارداد هوشمند سلب میکنند. به این کار اصطلاحا renounce ownership گفته میشود. گاهی اوقات تابعی جداگانه برای این کار وجود دارد و گاهی اوقات با تابع انتقال و ذکر آدرس Null به عنوان مالک جدید، این کار صورت میگیرد. به عنوان نمونه مورد دوم، تصویر log چنین انتقالی را در تصویر زیر مشاهده کنید:
در نمونه بالا، مالکیت قرارداد هوشمند به آدرس Null منتقل شده است. بنابراین تیم توسعهدهنده از لحظه این انتقال به بعد، هیچ امکان کنترلی بیشتری نسبت به کاربران عادی بر روی توکن ندارند. البته دقت کنید که بسیاری از اعمال (مثل مینت یا در نظر گرفتن سهم ویژه برای خود و غیره) میتواند پیش از آن انجام شده باشد.
همه قراردادهای هوشمند یکسان نیستند و نمیتوان حکمی کلی داد، اما در هنگام مشاهده یک قرارداد هوشمند، در قسمت write، به توابعی که در اختیار مالک (onlyOwner) است توجه ویژهای داشته باشید. در بسیاری از موارد این توابع با set آغاز میشوند. توکنهایی که درصدی را در هنگام هر معامله کم میکنند (اصطلاحا با نام مالیات – tax شناخته میشود)، یکی از گزینههای چنین بررسی هستند.
در تصویر فوق، قرارداد توکن REFI را مشاهده میکنید که توکن پروژهای فعال در حوزه FaaS است. در مواردی که در همین چند خط مشخص است، اخذ ۱۰ درصد از هر فروش و موارد مصرف آن است. همچنین مشخص است که مالک میتواند برخی آدرسها را معاف از پرداخت این هزینه کند. همچنین وایت لیست و بلک لیستی وجود دارد و در صورت صلاحدید، آدرسی مشخص قادر به انتقال توکنهایش نخواهد بود. همچنین قابلیت انتقال فعال شده و حداکثر میزان انتقال نیز مشخص است.
همچنین محدودیت مینت بیشتر توکن (در صورتی که پروژه ادعا میکند که میزان عرضه ثابت خواهد بود)، مورد دیگری است که میتواند مورد توجه شما قرار گیرد. باکس زیر تکه کدی برای ایجاد عرضه ثابت ۱۰۰۰ عدد از توکن است:
با وجود موارد گفته شده، ممکن است چک کردن بسیاری از این موارد برای کسانی که آشنایی چندانی با برنامهنویسی ندارند، مشکل باشد. در بخش بعدی چند ابزار مفید برای سهولت کار شما معرفی خواهیم کرد.
معرفی چند ابزار مفید
در این قسمت دو سایت برای چک کردن برخی از موارد رایج در کلاهبرداری از طریق توکنها به شما معرفی خواهیم کرد. توجه داشته باشید که تایید شدن توسط این ابزارها به معنی تایید کلی یک پروژه نیست. چه بسا پروژهای از نظر قرارداد هوشمند مشکلی نداشته باشد، اما از حربه دیگری برای کلاهبرداری استفاده کند.
سایت tokensniffer
سایت توکن اسنیفر، سایتی برای تحلیل قراردادهای هوشمند توکنهاست. همچنین لیستی از آخرین کلاهبرداریها را میتوانید در این سایت مشاهده کنید. الگوریتم بررسی این سایت، با توجه به موارد تعیین شده، دست به نمرهدهی به قرارداد توکنهای مختلف میکند. توصیه من این است که بیش از آن که به نمره داده شده توجه کنید، از توضیحات هر بخش استفاده کنید. برای نمونه، قرارداد نسخه اول سیف مون (SAFEMOON) را برای بررسی انتخاب کردیم. عده زیادی از هموطنان، به دلیل عدم اطلاع مناسب توسط این پروژه مبنی بر افزایش مالیات انتقال این توکن به صد درصد، توکنهای خود را از دست دادند.
در قسمت بالا، نمره داده شده به این توکن را مشاهده میکنیم که عدد پایینی است. در همان خط دوم (فلش قرمز رنگ)، مشاهده میشود که به عدد tax صد درصدی این توکن اشاره شده است. در ادامه قرارداد هوشمند این توکن از لحاظ قابلیت تغییر و ریسک هانیپات بررسی میکند. همچنین در ادامه وضعیت نقدینگی این توکن را بررسی میکند و حتی میزان قفل شدن نقدینگی و سهم کیف پولهای مختلف از درصد کل عرضه را چک میکند.
سایت Honeypot Detector
سایت هانیپات دیتکتور تنها قرارداد هوشمند توکنها را از نظر خطر کلاهبرداری هانیپات بررسی میکند؛ یعنی تنها قابل انتقال بودن توکنها و میزان tax آنها چک میشود. برای نمونه، به نتیجه بررسی همان توکن در این سایت توجه کنید:
میبینید که بررسی این سایت بسیار سادهتر است و تنها دو شبکه بایننس اسمارت چین و اتریوم را در بر میگیرد. در نتیجه بررسی، در خطوط ابتدایی این سایت هشدار میدهد که اگرچه قابلیت انتقال محدود نشده و هانی پات نیست، اما عملا با میزان مالیات بالا، به یک هانی پات تبدیل شده است و راه خروجی نیست.
در پایین نتیجه بررسی هم میزان مالیات در هنگام خرید و فروش ذکر شده است.
جمعبندی
امنیت در دنیای کریپتوکارنسی از اهمیت زیادی برخوردار است. در فضایی که هنوز قوانین موثری برای نظارت و کنترل وجود ندارد، کلاهبرداران مجال مییابند که نیات شوم خود را عملی سازند. افزایش آگاهی در خصوص سازوکار رویدادهای مختلف این حوزه، اصلیترین راه پیشگیری از زیانهای مالی است. در این مقاله سعی کردیم تا با نشان دادن نمونههایی از اطلاعات عمومی و در دسترس، به برخی از نکاتی که میتواند در مرتبه اول بررسی یک قرارداد هوشمند به چشم آید، اشاره کنیم.
شما در هنگام بررسی یک قرارداد هوشمند به چه مواردی توجه میکنید؟ دیدگاههای ارزشمند خود را با ما در میان بگذارید.