چرا تتر امن نیست, بررسی قرارداد هوشمند تتر + معرفی جایگزین

امنیت تتر برای ایرانی ها

اخیرا ممکن است شنیده باشید که تتر امن نیست و نباید تتر نگه داریم یا صحبت هایی در مورد تحریم تتر برای ایرانیان یا بهتر است بگوییم کشورهایی که در لیست تحریم آمریکا قراد دارند شنیده باشید، اما با وجود اینکه تتر را در والت خود نگه میداریم و میدانیم که والت ها بر روی بلاکچین هستند و کسی به آنها دسترسی ندارد پس این همه نگرانی از کجا ناشی میشود؟ در تیم روز ارز امروز به بررسی اختصاصی قرارداد هوشمند تتر پرداختیم و در این مقاله ریسک هایی که با نگه داری تتر گریبان گیر شما خواهد بود را بررسی میکنیم، با ما در ادامه این مقاله همراه باشید

تتر چیست؟

تتر یا USDT یک استیبل کوین (Stable Coin) است که پشتیوانه آن دلار آمریکا است، این به این معناست که ارزش تتر همیشه یک دلار است و کمپانی تتر مرتبا اسنادی را در سایت خود ارائه میکند که نشان می دهد به ازای هر تتری که ارائه میکند در خزانه خود دلار آمریکا دارد و این امر را میتوانید با مراجعه به سایت tether.to که سایت رسمی تتر است از بخش Proof Of Funds (اثبات دارایی ها) مشاهده کنید.

امنیت تتر برای ایرانی ها

نحوه عملکرد تتر؟

تتر بلاکچین اختصاصی مخصوص خود ندارد و بر روی بلاکچین های مختلف از جمله اتریوم، ترون، Binance Smart Chain, آوالانچ، سولانا و … به صورت یک توکن به نام USDT عرضه می شود و در اکوسیستم همه این بلاکچین ها بعنوان بزرگترین استیبل کوین از نظر حجم معاملات مورد استفاده قرار میگیرد، اگر نمیدانید که توکن ها بر روی بلاکچین های مختلف چگونه عمل میکنند باید به صورت خلاصه خدمت شما عرض کنم که هر توکن یک قرارداد هوشمند است که کد آن بر روی یک بلاکچین (مثلا اتریوم) استقرار یافته است، در این مقاله فرصت کافی برای توضیح نحوه عملکرد یک قرارداد هوشمند نیست اما در ادامه خلاصه ای را از نحوه عملکرد قرارداد های هوشمند اترویم  را به شما توضیح می دهم، البته دقت کنید که همه بلاکچین های دیگری که تتر بر روی انها قرار گرفته عملکرد یکسانی دارند و در بسیاری از آنها حتی کد قرارداد هوشمند نیز همان کدی است که بر روی بلاکچین اتریوم قرار گرفته و توضیحی که در ادامه عرض میکنم برای بقیه بلاکچین ها نیز صادق است.

قرارداد هوشمند یا Smart Contract یک توکن بر روی اتریوم چگونه عمل میکند؟

به طور کلی یک قرارداد هوشمند بر روی شبکه اتریوم یک کد است که به زبان Solidity نوشته شده و توسط ماشین مجازی EVM یا همان Ethereum virtual machine اجرا میشود و یک سری متغیر و فانکشن (تابع) در دل خود دارند که کارهای مختلفی را میتوانند انجام دهند. یک قرارداد هوشمند زمانی که بر روی شبکه اتریوم قرار میگیرد دیگر قابلیت تغییر ندارد و هیچ کس نمیتواند آن را حذف یا ویرایش کند و همین موضوع باعث ایجاد تفکری میان دوستان شده است که استفاده از تتر به این دلیل امن است به این دلیل که حتی صاحبان پروژه تتر نیز امکان دسترسی به دارایهای آنها را ندارند، اما این موضوع لزوما درست نیست.

قراردادهای هوشمند استفاده های بسیار گسترده ای دارند و بسیار انعطاف پذیر بوده و برای هر موضوعی میتوانند مورد استفاده قرارگیرند که یکی از این استفاده ها منتشر کردن یک ارز (Curreny) است. برای درک بهتر این موضوع باید بدانید که ارزهایی که در قالب یک توکن بر روی شبکه اتریوم منتشر می شوند در واقع یک قرارداد هوشمند با یک استاندارد تعریف شده از سوی بنیاد اتریوم به نام ERC20 است که برای اینکه یک قرارداد هوشمند یک ارز تلقی شود باید از این استاندارد پیروی کند و حداقل فانکشن هایی که در این استاندارد وجود دارد را دارا باشد (دوستان برنامه نویس ممکن است این موضوع را خیلی بهتر درک کنند) این فانکشن ها عبارت اند از:

function name() public view returns (string)
function symbol() public view returns (string)
function decimals() public view returns (uint8)
function totalSupply() public view returns (uint256)
function balanceOf(address _owner) public view returns (uint256 balance)
function transfer(address _to, uint256 _value) public returns (bool success)
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
function approve(address _spender, uint256 _value) public returns (bool success)
function allowance(address _owner, address _spender) public view returns (uint256 remaining)

ممکن است درک کدهای بالا برای دوستانی که با برنامه نویسی آشنایی ندارند سخت باشد اما کلیت داستان از این قرار است که قرارداد هوشمند هر ارز باید فانکشن هایی برای نام و نماد ارز، حداکثر تعداد توکن، تعداد اعشار، ذخیره و نمایش موجودی دارندگان، انتقال ارز به سایر والت ها و … را در کد خود داشته باشد و هر کدی که از این استاندارد پیروی کند میتواند به عنوان یک توکن ERC20 تلقی شود.

مشکل امن نبودن نگه داری تتر در والت از کجا می آید؟

این موضوع کاملا درست است که کدی که در شبکه منتشر می شود قابل تغییر نیست و قرارداد هوشمند تتر نیز از این قاعده مستثنا نیست اما این موضوع فقط در مورد کد صدق میکند، کد یک قرارداد هوشمند قابل تغییر، ویرایش و حذف نیست و این موضوع کاملا درست است اما اینکه کد قرارداد هوشمند چگونه نوشته شده و چه قابلیت هایی در آن وجود دارد و چه کارهایی میتواند انجام دهد موضوع دیگری است، بعنوان مثال ممکن است در فانکشن transfer که مربوط به انتقال ارز ( به والت دیگر) است کدی نوشته شود که از انتقال ارز شما به والت دیگر جلوگیری کند و مشکل تتر دقیقا از اینجاست که در ادامه به صورت تخصصی تر به آن میپردازیم.

بررسی کد قرارداد هوشمند تتر – چرا تتر امن نیست؟

با بررسی کد قرارداد هوشمند تتر متوجه موضوع جالبی می شویم، در خط ۲۶۸ قرارداد هوشمند تتر کدهای زیر را مشاهده میکنید:

contract BlackList is Ownable, BasicToken {

    /////// Getters to allow the same blacklist to be used also by other contracts (including upgraded Tether) ///////
    function getBlackListStatus(address _maker) external constant returns (bool) {
        return isBlackListed[_maker];
    }

    function getOwner() external constant returns (address) {
        return owner;
    }

    mapping (address => bool) public isBlackListed;
    
    function addBlackList (address _evilUser) public onlyOwner {
        isBlackListed[_evilUser] = true;
        AddedBlackList(_evilUser);
    }

    function removeBlackList (address _clearedUser) public onlyOwner {
        isBlackListed[_clearedUser] = false;
        RemovedBlackList(_clearedUser);
    }

    function destroyBlackFunds (address _blackListedUser) public onlyOwner {
        require(isBlackListed[_blackListedUser]);
        uint dirtyFunds = balanceOf(_blackListedUser);
        balances[_blackListedUser] = 0;
        _totalSupply -= dirtyFunds;
        DestroyedBlackFunds(_blackListedUser, dirtyFunds);
    }

    event DestroyedBlackFunds(address _blackListedUser, uint _balance);

    event AddedBlackList(address _user);

    event RemovedBlackList(address _user);

}

کدهای بالا به کمپانی تتر که صاحب این قرارداد هوشمند است این اجازه را میدهد که یک لیست سیاه (black list) از والت ها را داشته باشد که والت های افرادی که در این لیست قرار میگیرند امکان انتقال ارزهای خود را ندارند و ممکن است ارزهای خود را از دست بدهند.

منتشر کننده یا owner این قرارداد هوشمند که همان کمپانی تتر است میتواند با فانکشن addBlackList یک آدرس خاص را به لیست سیاه اضافه کند یا با فانکشن removeBlackList آدرس مورد نظر را از لیست سیاه خارج کند و حتی مساله از این جدی تر میشود که با فانکشن destroyBlackFunds امکان نابودی دارایی های یک آدرس والت نیز وجود دارد.

برای اثبات این موضوع قرارداد هوشمند تتر را بیشتر بررسی کردیم و در فانکشن transfer که مربوط به انتقال ارز است دقیقا این موضوع را به وضوح میتوانید مشاهده کنید که فقط افرادی میتوانند این فانکشن را اجرا کنند (ارز خود را انتقال دهند) که در لیست سیاه قرار نگرفته باشند.

    function transfer(address _to, uint _value) public whenNotPaused {
        require(!isBlackListed[msg.sender]);
        if (deprecated) {
            return UpgradedStandardToken(upgradedAddress).transferByLegacy(msg.sender, _to, _value);
        } else {
            return super.transfer(_to, _value);
        }
    }

خط اول این فانکشن require(!isBlackListed[msg.sender]) را مشاهده کنید که این موضوع را وضوح نشان میدهد.

بررسی دیگر استیبل کوین ها BUSD, PAX, USDC

با بررسی قراردادهای هوشمند بقیه استیبل کوین ها نظیر usdc, pax, busd دریافتیم که هر سه آنها دقیقا امکاناتی مشابه را دارند که امکان فریز کردن یا بلوکه کردن دارایی های کاربرانشان را میدهد.

آیا استفاده از استیبل کوین ها خطرناک است؟

جواب این سوال کاملا بستگی به خود شما دارد، همانطور که میدانید ارزش همه این استیبل کوین ها معادل 1 دلار آمریکا است، پس قاعدتا برای اینکه این استیبل کوین ها اجازه فعالیت داشته باشند باید قوانین کنترل مالی نظیر SEC, FATF و دیگر نهادهای کنترلی را رعایت کنند. این نهاد های مالی تنها به گزارشات شفافی که شرکت های پشت استیبل کوین ها ارائه میکنند بسنده نمیکنند، همه این استیبل کوین ها باید امکان بلوکه کردن دارایی های افراد و سازمان های تحت تحریم این نهاد های کنترلی را داشته باشند.

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

امنیت تتر برای کاربران ایرانی

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

در خصوص تتر باید خدمت شما عرض کنم که قابلیت لیست سیاه (Black list) ارز تتر تا کنون چندین بار استفاده شده به عنوان مثال در این خبر که در سایت کوین تلگراف منتشر شده میخوانیم که تتر ۳۹ آدرس اتریوم را که بیش از ۴۶ میلیون دلار تتر نگه داری میکردند را به لیست سیاه اضافه کرده است اما قطعا این ۴۶ میلیون دلار بر اساس یک دلیل و احتمالا حکم یک دادگاه مسدود شده است.

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

هرچند این موضوع ممکن است کمی سخت و بعید به نظر برسد اما با خواندن این مقاله و بررسی کدهای قرارداد هوشمند به وضوح دیدید که این موضوع از لحاظ فنی کاملا امکان پذیر است.

استیبل کوین های الگوریتمی

در حال حاضر تلاشهای زیادی از سوی توسعه دهندگان در حال انجام است تا بتوانند یک استیبل کوین ایجاد کنند تا بدون نیاز به هیچ پشتیوانه ارزش آن همیشه ۱ دلار باشد (به طور صحیح تر نزدیک ۱ دلار باشد) به این صورت که به صورت خودکار و الگوریتمی قیمت به ۱ دلار برسد. تقریبا اکثر این تلاشها تا کنون به سطح استفاده همگانی نرسیده است و هنوز شاهد پروژه موفقی نبوده ایم که در سطح کلان مورد استفاده قرار بگیرد اما در آینده ممکن است این رویه تغییر کند و قیمت استیبل کوین ها دیگر نیاز به پشتیوانه دلاری در حساب های بانکی نداشته باشد و به صورت الگوریتمی با کم و زیاد کردن عرضه یا پشتیوانه کریپتوکارنسی یا راه های دیگر ثابت بماند.

برای نمونه استیبل کوین های الگوریتمی ای که شکست خورده اند میتوان از Dynamic Set Dollar (DSD) و Empty Set Dollar (ESD) نام برد و پروژ هایی که تقریبا در این زمینه موفق بوده اند Magic Internet Money(MIM) از abracadabra (آبرا-کادابرا) و AMPL  را میتوان نام برد. اما توجه کنید که هنوز برای اعتماد کامل به این استیبل کوین ها و نگه داری آنها با خیال راحت زود است.

نتیجه گیری و معرفی استیبل کوین های جایگزین تتر

تصمیم گیری استفاده یا عدم استفاده از تتر با خود شماست در حال حاضر تنها ارز معتبری که این مشکل در کدهای قراداد هوشمند آن وجود ندارد ارز DAI است، همچنین ارز BUSD به دلیل اینکه کمپانی مادر آن یعنی بایننس آمریکایی نیست ممکن است گزینه خوبی باشد، بهترین ارزهای جایگزین تتر محسوب می شوند.