شاید تا به حال برای شما هم پیش آمده باشد که در تراکنشهای شبکه تون آدرسی که برایش تراکنش ارسال کردید با آدرس گیرنده یکی نباشد و این موضوع نگرانیهایی را برای شما ایجاد کرده باشد. آدرس زیر را مشاهده کنید:
EQADtLHVdN-K9PdP…2MbtqIbVOBzCy6agP9DoU
اگر همین آدرس را در تون ویوئر یا تون اسکن وارد کنید، آن را به شکل زیر مشاهده خواهید کرد:
UQADtLHVdN-K9PdP…2MbtqIbVOBzCy6agP9GfR
هر دو آدرس یکی هستند، اما چرا؟ چرا شبکه تون در یکی از بهروزرسانیهایش اعلام کرد که تصمیم دارد تا برخی از آدرسهایی که با EQ شروع میشوند را به UQ تغییر دهد؟
مشاهده در یوتیوب
بیایید این موضوع را کمی عمیق بررسی کنیم:
اساس کار شبکه تون بر قراردادهای هوشمند استوار است
در بلاکچین شبکه TON، همه چیز یک قرارداد هوشمند است! قراردادهای هوشمند با استفاده از مدل بازیگر (Actor) ساخته میشوند و بازیگران در TON از نظر فنی به عنوان قراردادهای هوشمند شناخته میشوند. این بدان معناست که حتی کیف پول شما هم بازیگری ساده (و یک قرارداد هوشمند) قلمداد میشود. به طور کلی، بازیگران در شبکه تون پیامهای ورودی را پردازش میکنند، وضعیت داخلی خود را تغییر میدهند و به عنوان نتیجه، پیامهای خروجی تولید میکنند. به همین دلیل، هر بازیگر (یعنی قرارداد هوشمند) در بلاکچین TON باید آدرسی داشته باشد تا بتواند پیامها را از دیگر بازیگران دریافت کند.
تفاوت آدرسهای شبکه تون با آدرسهای EVM در همین موضوع است: در ماشین مجازی اتریوم، آدرسهای کیف پولها به طور کامل از قراردادهای هوشمند جدا هستند.
در شبکه تون، اصطلاحاتی مانند قرارداد هوشمند، حساب و بازیگر، همه بهطور متناوب برای توصیف یک نهاد استفاده میشوند. این نهاد (قرارداد هوشمند) در شبکه TON دارای ویژگیهایی مانند آدرس، کد، داده و موجودی است و میتواند بر اساس پیامهای ورودی، واکنشهای متفاوت نشان دهد. این نهاد پس از اجرای کد، تغییر کرده و پیامهای جدیدی تولید میکند که شامل مراحل زیر است:
- پیام ورودی دریافت میشود.
- قرارداد هوشمند کد خود را اجرا میکند.
- خواص قرارداد هوشمند تغییر میکند.
- پیامهای جدیدی ارسال میشود.
- قرارداد به حالت انتظار میرود تا رویداد جدیدی اتفاق بیفتد.
این توالی عملیات به عنوان «تراکنش» شناخته میشود که به ترتیب مشخص و بدون تداخل اجرا میشوند. در ادامه برخی مفاهیمی که در شبکه تون تعرفی میشوند را معرفی میکنیم:
زنجیره حساب (Account Chain)
هر حساب یا قرارداد هوشمند دارای زنجیره تراکنش است که به عنوان AccountChain شناخته میشود. تراکنشها به صورت پیدرپی اجرا میشوند و در هر تراکنش، اطلاعاتی مربوط به تراکنش قبلی و بعدی هم وجود دارد. این تراکنشها به دستههایی (Batch) تقسیم میشوند که در هر دسته، تراکنشها و پیامهای ورودی و خروجی ذخیره میشود.
زنجیره شاردها (Shard Chains)
وقتی چندین حساب مختلف وجود دارند، زنجیرههای آنها با هم ترکیب میشوند و ShardChain را تشکیل میدهند. هر شارد از چندین زنجیره حساب تشکیل شده و به قسمتهای کوچکتری به نام ShardBlocks تقسیم میشود. بلاکچین در شبکه تون شامل مجموعهای از تمامی شاردهایی است که حسابها را در خود جای داده و قوانین یکسانی برای تمامی حسابها دارد. اگر تعداد تراکنشها در شاردی زیاد شود، آن شارد به دو شارد کوچکتر تقسیم میشود. به همین ترتیب، اگر تراکنشهای شاردی کم باشد، میتوان آن شارد را با شارد دیگری ادغام کرد. هر شارد شامل یک یا چند حساب است و میتواند به کوچکترین حد یعنی یک حساب واحد برسد.
در شبکه TON، ممکن است چندین بلاکچین با قوانین مختلف وجود داشته باشند که به طور همزمان فعالیت میکنند و با ارسال پیامها به یکدیگر ارتباط برقرار میکنند. اگر بخواهید قوانین شاردچینها را سفارشیسازی کنید، میتوانید یک ورکچین (Workchain) ایجاد کنید. برای مثال، یک ورکچین میتواند برای اجرای قراردادهای هوشمند مبتنی بر EVM (ماشین مجازی اتریوم) طراحی شود. ایجاد ورکچین فرآیندی پیچیده و گران است و نیاز به تایید از سوی نودهای شبکه دارد.
در شبکه TON، تا ۲^۳۲ ورکچین و ۲^۶۰ شارد میتواند وجود داشته باشد. اما در حال حاضر تنها دو ورکچین اصلی به نامهای MasterChain و BaseChain در این شبکه وجود دارند.
مسترچین (MasterChain)
مسترچین بلاکچین ویژهای است که نقش هماهنگی و همگامسازی شبکه را ایفا میکند. بلاکهای مسترچین شامل اطلاعاتی در مورد آخرین وضعیت تمامی شاردچینها هستند. با این اطلاعات، هر ناظر میتواند وضعیت کلی شبکه را در یک نقطه خاص بررسی کند و به توافقی در مورد وضعیت چندزنجیرهای (Multichain) برسد.
پس در شبکه تون، زنجیرههای حساب، شاردچینها، ورکچینها و مسترچین، شبکه بلاکچینی مقیاسپذیر و پویایی را ایجاد میکنند که میتواند تعداد زیادی از تراکنشها و حسابها را مدیریت کند. در حال حاضر، تنها Masterchain (شناسه Workchain = -1) و گاهی اوقات Workchain پایه (شناسه Workchain = 0) در بلاکچین TON اجرا میشوند. هر دوی این Workchainها دارای آدرسهای ۲۵۶ بیتی هستند، بنابراین فرض میشود که شناسه Workchain یا 0 یا -1 و آدرس درون Workchain هم دقیقاً ۲۵۶ بیت باشد.
ارتباط حسابها و مسیریابی پیامها
حسابها میتوانند با ارسال پیام به یکدیگر تعامل داشته باشند. در بلاکچین تون مکانیسم ویژهای برای مسیریابی پیامها وجود دارد که تضمین میکند تمامی پیامها به ترتیب صحیح به مقصد برسند.
شناسه حساب (Account ID)
تمام شناسههای حساب در بلاکچین TON از آدرسهای ۲۵۶ بیتی در Masterchain و Basechain (یا Workchain پایه) استفاده میکنند. در واقع، شناسه حسابها (account_id) بهعنوان تابع هش برای قراردادهای هوشمند تعریف میشوند (بهویژه از الگوریتم SHA-256). هر قرارداد هوشمند که در بلاکچین TON اجرا میشود، دو مؤلفه اصلی را ذخیره میکند:
- کد کامپایل شده: منطق قرارداد هوشمند که به شکل بایتکد کامپایل شده است.
- وضعیت اولیه: مقادیر قرارداد در لحظه استقرار آن در بلاکچین.
در نهایت، برای استخراج دقیق آدرس قرارداد، لازم است هش مربوط به جفت (کد اولیه، وضعیت اولیه) محاسبه شود. در این مرحله، وارد جزئیات نحوه عملکرد TVM (ماشین مجازی TON) نخواهیم شد، اما مهم است که بدانید شناسه حسابها در TON با استفاده از این فرمول تعیین میشوند:
account_id = hash (initial code, initial state)
وضعیت آدرسها
هر آدرس در شبکه TON میتواند در یکی از وضعیتهای زیر قرار بگیرد:
- nonexist (وجود ندارد): آدرسی که هیچ تراکنشی نداشته و دادهای برای آن ذخیره نشده است. همچنین ممکن است قرارداد هوشمند مرتبط با آن پاک شده باشد. در ابتدای کار، همه آدرسها در این وضعیت هستند.
- uninit (غیر فعال یا اولیه): آدرسی که دادههایی مانند موجودی و اطلاعات متا دارد، اما هنوز قرارداد هوشمندی در آن ذخیره نشده است. به عنوان مثال، این حالت وقتی پیش میآید که یک آدرس قبلاً وجود نداشته و توکنهایی به آن ارسال شده است.
- active (فعال): آدرسی که دارای کد قرارداد هوشمند، دادههای دائمی و موجودی است. در این وضعیت، آدرس میتواند در زمان تراکنش عملیاتی را انجام داده و دادههای دائمی خود را تغییر دهد. یک آدرس زمانی به این حالت وارد میشود که در حالت uninit بوده و یک پیام ورودی با پارامتر state_init دریافت کرده باشد.
- frozen (فریز شده): آدرسی که نمیتواند عملیاتی انجام دهد و فقط شامل دو هش از وضعیت قبلی (کد و دادههای ذخیره شده) است. وقتی هزینههای نگهداری آدرس بیشتر از موجودی آن میشود، به این وضعیت میرود. برای خروج از این حالت، باید مقداری TON به همراه کد مناسب به آن ارسال کرد. (چنانچه آدرس فریزشدهای داشتید، میتوانید آن را طریق این لینک از فریز دربیاورید!)
آدرسهای قابل بازگشت (bounceable) و غیرقابلبازگشت (non-bounceable)
اگر آدرس گیرنده نتواند تراکنش را بپذیرد (برای مثلاً اگر قرارداد هوشمند وجود نداشته باشد یا مشکلی پیش بیاید)، در آدرسهای bounceable، تراکنش به فرسنتده برگشت داده میشود، البته با کسر هزینههای انتقال و گس! آدرس bounceable معمولاً برای قراردادهای هوشمند سفارشی استفاده میشود که چنانچه تراکنش نتوانست ارسال شود، پول به حساب کاربر برگردد. اگر آدرس bounceable نباشد (non-bounceable)، حتی اگر تراکنش انجام نشود هم پولی برگشت داده نمیشود و به آدرس گیرنده اضافه میشود.
پس در شبکه تون، زمانی که میخواهید داراییها یا اطلاعاتی را به آدرسی ارسال کنید که ممکن است هنوز فعال نباشد یا قرارداد هوشمند در آن نصب نشده باشد. دو نوع آدرس تعریف شده است:
- Bounceable Address: آدرسی است که اگر گیرنده (مثلاً قرارداد هوشمند یا کیف پول) وجود نداشته باشد یا در دسترس نباشد، تراکنش برگشت میخورد (bounce میشود) و داراییها یا اطلاعات از دست نمیروند. این ویژگی باعث میشود داراییها گم نشوند.
- Non-Bounceable Address: در این نوع آدرس، تراکنش حتی اگر گیرنده موجود نباشد یا آدرس فعال نباشد، ممکن است برگشت داده نشود و در نتیجه داراییها از دست بروند.
آدرسهای bounceable، در یکی از بهروزرسانی شبکه تون برای قراردادهای هوشمند، معرفی شدند تا اگر مشکلی در قرارداد یا آدرس وجود داشت، تراکنش برگردد و داراییها گم نشوند، اما برای کیف پولها، آدرسهای non-bounceable معرفی شدند تا مشکلاتی مانند بازگشت تراکنش غیرضروری پیش نیاید. برای محافظت از داراییها در شبکه تون، استفاده از آدرسهای درست در شرایط مختلف ضروری است. آدرسهای bounceable برای قراردادهای هوشمند و آدرسهای non-bounceable برای کیف پولها استفاده خواهند شد.
تغییر آدرسهای شبکه تون از EQ به UQ
حال که دیدگاهی کلی درباره آدرسها در شبکه تون پیدا کردید، میرسیم به همان سوال اصلی! آدرسهایی در شبکه تون که قبلا با فرمت EQ نمایش داده میشدند، پس از بهروزرسانی شبکه تون به QU تغییر پیدا کردند. آدرسهای جدید با UQ به جای EQ شروع خواهند شد و چهار حرف آخر نیز تغییر خواهند کرد. آدرسهای قدیمی همچنان کار خواهند کرد و به همان کیف پولها اشاره خواهند داشت. این تغییر به هیچ وجه بر امنیت وجوه موجود در کیف پول شما تأثیری نخواهد گذاشت.
آدرس قدیمی:
EQCcBxQZCco…dDLBRv9VYE6Nl
آدرس جدید:
UQCcBxQZCco…dDLBRv9VYE_6g
فرمت EQ برای قراردادهای هوشمندی که وجوه دریافتی را پردازش میکنند، مناسبتر است. اگر قرارداد هوشمند هنوز منتشر نشده باشد – یعنی کد آن در بلاکچین نیست – در این صورت TONهای ارسالشده به آن آدرس به فرستنده بازگردانده میشوند. این ویژگی امنیتی است: اگر خطایی وجود داشته باشد، TONها بازگردانده میشوند.
فرمت UQ برای کیف پولها بهتر است و در این آدرسها دیگر هیچ کوینی بازگردانده نمیشوند، چرا که کیف پولها برای ذخیره وجوه طراحی شدهاند. هر کیف پول به عنوان آدرسی ساده بدون کد در بلاکچین شروع میشود. بنابراین، هیچ دلیلی برای بازگرداندن کوینها از آنها وجود ندارد. پس از این تغییر، اگر همچنان وجوهی را به آدرس EQ قدیمی که فردی آن را در اختیار شما گذاشته، ارسال کنید، دو حالت پیش میآید:
- به احتمال زیاد کیف پول مقصد در حال استفاده فعال است و هیچ تفاوتی را متوجه نخواهید شد.
- احتمال کمتر این است که کیف پول هرگز برای پرداختها استفاده نشده باشد. کیف پول تونکیپر، کوینی به آن آدرس ارسال نخواهد کرد و باید از گیرنده بخواهید آدرس جدید UQ را به شما بدهد.
جمعبندی
با بهروزرسانی جدید شبکه تون، فرمت آدرسهای این شبکه از EQ به UQ تغییر کرده است. این تغییر در راستای بهبود امنیت و کارایی کیف پولها و قراردادهای هوشمند انجام شده است. در فرمت EQ، که برای قراردادهای هوشمند مناسبتر است، اگر قرارداد هوشمند هنوز فعال نشده باشد، تراکنشها به فرستنده بازگردانده میشوند، اما در فرمت UQ که برای کیف پولها طراحی شده، دیگر هیچ کوینی بازگردانده نمیشود. این تغییرات تأثیری بر امنیت وجوه کاربران ندارد و آدرسهای قدیمی همچنان معتبر خواهند بود.
بهطور کلی، این تغییرات در راستای بهینهسازی تعاملات در شبکه بلاکچینی TON انجام شده و باید دقت داشته باشید که برای ارسال داراییها از آدرسهای مناسب استفاده کنید تا درگیر مشکلات احتمالی نشوید.