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

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

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

تتر چیست؟

تتر یا 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]) را مشاهده کنید که این موضوع را وضوح نشان میدهد.

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

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

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

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

این موضوع زنگ خطر را برای کاربران ایرانی به صدا در می آورد که هر لحظه ممکن است تتر به دنبال شناسایی آدرس های کشورهای تحریم شده باشد و در صورت شک کردن به آنها ادرس والت آنها را به لیست سیاه خود اضافه کند.

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

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

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