در ۱۳ اکتبر، تیم TON Core توصیه‌هایی را برای اکوسیستم در مورد کیف پول تلگرام منتشر کرد. به برنامه‌های کیف پول مستقل پیشنهاد شده است که همچنان کیف پول‌های جدید را بر روی قرارداد W5 (wallet-v5r1) ایجاد کنند، زیرا قرارداد کیف پول تلگرام، WalletTg، برای خود تلگرام ساخته شده است. اما باید یاد بگیرند که کیف پول‌های تلگرام موجود را با استفاده از عبارت بازیابی آن‌ها باز کنند. این موضوع شامل همه کسانی می‌شود که می‌خواهند کیف پول تلگرام خود را در یک برنامه جداگانه نیز داشته باشند: My Wallet و Gram Wallet از هم‌اکنون از این قابلیت وارد کردن پشتیبانی می‌کنند و کد مربوط به آن در نسخه 26.10.0 در ۶ اکتبر منتشر شد.

The post on Telegram — @toncore
توصیه‌های TON Core برای برنامه‌ها، کاوشگرها و کیف پول‌ها

چگونه کیف پول تلگرام را در برنامه دیگری باز کنیم

  1. آدرس کیف پول را از تلگرام یادداشت کنید. با استفاده از آن می‌توانید بعداً بررسی کنید که آیا کیف پول صحیح باز شده است یا خیر.
  2. عبارت بازیابی فعلی را بردارید. طبق مستندات، در Telegram Desktop این عبارت در منوی کیف پول قرار دارد: Keys & Backup → Show Recovery Phrase. اگر کلید را تغییر نداده‌اید، عبارت ۱۲ کلمه است. پس از تغییر کلید، عبارت ۲۴ کلمه می‌شود و باید هر ۲۴ کلمه را وارد کنید. نحوه نگهداری عبارت بازیابی به طور جداگانه توضیح داده شده است.
  3. عبارت بازیابی را وارد کنید در My Wallet یا Gram Wallet: Import Existing Wallet → Secret Words. هر دو برنامه از یک کد منبع باز ساخته شده‌اند و در App Store و wallet.ton.org در حال حاضر نسخه 26.10.4 موجود است که از این قابلیت پشتیبانی می‌کند.
  4. آدرس را بررسی کنید. اگر با آدرس تلگرام مطابقت داشت، کیف پول به طور کامل با موجودی و تاریخچه باز شده است. اگر مطابقت نداشت، برنامه کیف پول دیگری را با همان کلید باز کرده است و دلیل آن معمولاً یکی از سه مورد زیر است.

هنوز چیزی از کیف پول ارسال نشده است. قرارداد در TON با اولین تراکنش خروجی در آدرس ظاهر می‌شود: قبل از آن ممکن است سکه‌ها در آدرس باشند، اما کدی وجود ندارد. برنامه آدرس را به عنوان کیف پول تلگرام شناسایی می‌کند تنها در صورتی که قراردادی با کد تلگرام و کلید صحیح در آن آدرس فعال باشد. برای کیف پول‌های مستقر نشده، ۱۲ کلمه یک کیف پول خالی W5 را باز می‌کنند، و ۲۴ کلمه با خطا مواجه می‌شوند: برنامه اطلاع می‌دهد که قرارداد کیف پول تلگرام در این آدرس وجود ندارد. طبق منطق کد، راه حل این است که ابتدا حداقل یک انتقال از تلگرام انجام دهید و سپس وارد کردن را تکرار کنید.

کلید تغییر کرده است، اما ۱۲ کلمه اول وارد شده‌اند. پس از تغییر کلید، نیمه اول عبارت همچنان آدرس را تعیین می‌کند، اما دیگر نمی‌تواند امضا کند. برنامه می‌بیند که کلید در قرارداد متفاوت است و به جای کیف پول شما، یک کیف پول خالی W5 را نشان می‌دهد. تمام ۲۴ کلمه عبارت فعلی مورد نیاز است.

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

برنامه‌ای که از کیف پول تلگرام پشتیبانی نمی‌کند، اغلب ۱۲ کلمه را به عنوان یک عبارت استاندارد BIP-39 می‌پذیرد و یک کیف پول با آدرس متفاوت و موجودی صفر نشان می‌دهد، و ممکن است ۲۴ کلمه از دو نیمه را اصلاً نپذیرد. در این صورت، سکه‌ها در آدرس تلگرام باقی می‌مانند: برنامه به سادگی نمی‌تواند این آدرس را از عبارت محاسبه کند و انتقال‌ها را در قالب WalletTg امضا کند.

پس از وارد کردن، کلید در دو مکان قرار می‌گیرد. تلگرام به طور پیش‌فرض یک کپی رمزگذاری شده از کلید را که به سه قسمت در مراکز داده در سه قاره تقسیم شده است، نگهداری می‌کند، و اکنون کلید در برنامه نیز قرار دارد. اگر هدف انتقال به خودحفاظتی (self-custody) باشد، مستندات راه حل را توضیح می‌دهند: Keys & Backup → Disable Backup با علامت Update Secret Phrase. تلگرام کلید امضا را تغییر می‌دهد، عبارت جدید ۲۴ کلمه‌ای را نشان می‌دهد و کپی ابری را تنها پس از انجام تغییر در شبکه غیرفعال می‌کند. برای تغییر کلید، کارمزدی به صورت Gram دریافت می‌شود. آدرس ثابت می‌ماند، عبارت قدیمی دیگر نمی‌تواند انتقال‌ها را امضا کند، و پس از آن باید ۲۴ کلمه جدید را دوباره در برنامه وارد کنید.

یک عبارت، سه آدرس

آدرس کیف پول در TON نه از کلید، بلکه از هش حالت اولیه قرارداد: کد و داده‌های اولیه محاسبه می‌شود. کلید در این داده‌ها گنجانده شده است، اما کد هر نوع کیف پول متفاوت است. بنابراین، یک کلید یکسان به تعداد انواع قراردادهای موجود، آدرس تولید می‌کند و در هر یک از آن‌ها ممکن است چیز متفاوتی قرار داشته باشد.

کلید از عبارت بازیابی کیف پول تلگرام طبق استاندارد عمومی BIP-39 با مسیر m/44'/607'/0' استخراج می‌شود، همان مسیری که My Wallet کلید را از عبارت ۱۲ کلمه‌ای خود استخراج می‌کند. در ادامه مسیرها از هم جدا می‌شوند. در حالت اولیه کیف پول تلگرام، کد ترامپولین و چهار فیلد قرار دارد: شماره بازبینی ذخیره‌سازی، شمارنده seqno، شماره زیرکیف پول 0x7FFF7F11 و کلید عمومی. W5 کد متفاوتی و شناسه کیف پول خاص خود را دارد.

اینکه در عمل چگونه به نظر می‌رسد، بر روی یک عبارت ۱۲ کلمه‌ای یک‌بار مصرف که برای این مقاله تولید شده است، بررسی شده است: طبق الگوریتم مستندات، یک کلید و از آن سه آدرس به دست آمده است.

قراردادآدرس از یک عبارت
WalletTg، کیف پول تلگرامUQAgG-WT…P_gXad
W5 (wallet-v5r1)UQA7s7tH…boDdkIc
v4R2UQBVSR_U…djLee01

اینکه کدام یک از آدرس‌ها توسط برنامه نمایش داده شود، به کد آن بستگی دارد. My Wallet و Gram Wallet برای عبارت ۱۲ کلمه‌ای، تمام نسخه‌های قرارداد شناخته شده خود را، از قدیمی‌ترین تا W5 و telegram، در دو شاخص اول مسیر بررسی می‌کنند. کیف پول تلگرام تنها در صورتی در این لیست قرار می‌گیرد که قراردادی با ترامپولین در آدرس فعال باشد، شماره زیرکیف پول برابر با 0x7FFF7F11 باشد و کلید از متد get_public_key با کلید از عبارت مطابقت داشته باشد. از بین موارد یافت شده، W5 انتخاب می‌شود اگر تاریخچه‌ای داشته باشد؛ در غیر این صورت، آدرس با بیشترین موجودی؛ در غیر این صورت، آدرس با آخرین تراکنش؛ اگر همه جا خالی باشد، W5. از این رو، W5 خالی در دام‌های بالا: وقتی کیف پول تلگرام از بررسی عبور نکرد، به سادگی در میان نامزدها نیست.

عبارت ۲۴ کلمه‌ای مسیر جداگانه‌ای را طی می‌کند. اگر هر نیمه ۱۲ کلمه‌ای از بررسی BIP-39 عبور کند، نیمه اول کلید-لنگر (anchor key) و از آن آدرس را می‌دهد، و نیمه دوم کلید امضا را که با کلید در قرارداد بررسی می‌شود. این مسیر به این دلیل لازم است که ۲۴ کلمه در کیف پول‌های قدیمی TON نیز وجود دارد که طبق قوانین خاص شبکه استخراج شده‌اند. مستندات در موارد مشکوک توصیه می‌کند که هر دو نامزد به کاربر نشان داده شوند و به طور خودکار انتخاب نشود؛ My Wallet ابتدا مسیر تلگرام را امتحان می‌کند و اگر قرارداد تلگرام در آدرس وجود نداشته باشد و عبارت به عنوان یک عبارت عادی مناسب باشد، آن را به عنوان یک عبارت عادی وارد می‌کند.

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

چرا کیف پول‌های جدید بر روی W5 باقی می‌مانند

توجیه در توصیه TON Core یک چیز است: WalletTg به طور خاص برای تلگرام ساخته شده است. ساختار قرارداد نشان می‌دهد که چه چیزی پشت این موضوع قرار دارد.

کد کیف پول عمومی است و با رای‌گیری تغییر می‌کند. در هر آدرس کیف پول تلگرام یک ترامپولین تغییرناپذیر قرار دارد که کنترل را به کدی از پارامتر −123 پیکربندی شبکه منتقل می‌کند. نسخه جدید این کد توسط اعتبارسنج‌ها تأیید می‌شود، طبق مستندات به بیش از ۷۵٪ از وزن کل آن‌ها نیاز است، و بلافاصله به تمام کیف پول‌های تلگرام می‌رسد. صاحب کیف پول نمی‌تواند نسخه‌ای را ثابت کند یا از به‌روزرسانی خودداری کند. کد W5 در هر حساب به صورت جداگانه قرار دارد و تغییر نمی‌کند.

هیچ افزونه‌ای وجود ندارد. W5 از افزونه‌ها پشتیبانی می‌کند: قراردادهای جداگانه‌ای که کیف پول به آن‌ها اجازه می‌دهد از طرف آن عمل کنند و اشتراک‌ها و تأییدهای اضافی بر اساس آن‌ها ساخته می‌شوند. احراز هویت دو مرحله‌ای در My Wallet دقیقاً به عنوان یک افزونه کیف پول W5 جستجو می‌شود. در WalletTg هیچ افزونه‌ای وجود ندارد؛ طبق طرح نویسندگان، احراز هویت دو مرحله‌ای و اشتراک‌ها به عنوان قابلیت‌های داخلی در آن ظاهر خواهند شد.

فرمت درخواست‌ها منحصر به فرد است. امضا در WalletTg قبل از بدنه درخواست قرار می‌گیرد، ارسال یک پیام فرمت کوتاه جداگانه‌ای دارد، و برای پرداخت کارمزد کاربر، درخواست از طریق یک واسطه منتقل می‌شود که Gram را برای اجرا ضمیمه می‌کند. برنامه‌ای که می‌خواهد نه تنها موجودی کیف پول Telegram را نمایش دهد، بلکه از آن ارسال نیز انجام دهد، باید این فرمت را جدا از W5 پیاده‌سازی کند.

دلیل اصلی که WalletTg ساختار متفاوتی دارد، چرخش کلید (key rotation) بدون تغییر آدرس است. در توضیحات قرارداد به صراحت آمده است: Telegram کیف پول را ایجاد می‌کند، اما امکان انتقال به خود-حفاظتی (self-custody) را فراهم می‌آورد. وارد کردن به برنامه‌های شخص ثالث، نیمه دوم این انتقال است.

توصیه‌هایی برای دیگران

TON Core به برنامه‌هایی که از طریق کیف پول وارد می‌شوند، توصیه می‌کند TON Connect را به‌روزرسانی کرده و امضای ton_proof را همان‌طور که مشخصات ایجاب می‌کند، بررسی کنند: کلید کیف پول Telegram از شبکه گرفته می‌شود، نه از وضعیت اولیه. این بخش در مقاله‌ای درباره TON Connect 5.0 توضیح داده شده است.

به تحلیلگران بلاکچین پیشنهاد شده است که کیف پول‌های Telegram را شناسایی کنند، چرخش کلید را نمایش دهند و تراکنش‌هایی را که کارمزد آن‌ها توسط مالک پرداخت نشده است، علامت‌گذاری کنند. API Toncenter یاد گرفته است که قرارداد کیف پول Telegram را تشخیص دهد و چرخش کلید را به عنوان یک عمل جداگانه با کلید جدید و کلید قدیمی رمزگذاری شده ارائه دهد، و tonscan.org نیز بر اساس این داده‌ها، کیف پول‌های Telegram و تراکنش‌ها را با برچسب «Fee paid by Telegram» علامت‌گذاری می‌کند.