وقتی یک کیف پول بیتکوین برای دریافت دارایی یک رشته طولانی از حروف و اعداد نشان میدهد، آن رشته فقط یک «شماره حساب» نیست. آدرس، یک نمایش قابلاستفاده برای انسان از شرایطی است که یک خروجی تراکنش باید برای خرجشدن در آینده برآورده کند.
به همین دلیل، همه آدرسهای بیتکوین یک شکل ندارند. بعضی با 1، بعضی با 3 و بسیاری از آدرسهای جدید با bc1 شروع میشوند. این تفاوت فقط ظاهری نیست؛ نوع آدرس به ساختار خروجی، روش اسکریپتگذاری، سازگاری کیف پولها و در بعضی شرایط به اندازه و هزینه تراکنش مربوط است.
در این مقاله، مهمترین قالبهایی را که کاربر بیتکوین با آنها روبهرو میشود بررسی میکنیم؛ بدون اینکه وارد جزئیات کامل Bitcoin Script شویم.
آدرس بیتکوین دقیقاً چیست؟
آدرس یک شناسه پرداخت است که به فرستنده میگوید خروجی تراکنش را با چه ساختاری بسازد. خود آدرس محل نگهداری بیتکوین نیست و بهتنهایی «حساب» یا موجودی مستقل ایجاد نمیکند.
همانطور که در مقاله UTXO چیست؟ دیدیم، دارایی بیتکوین در قالب خروجیهای خرجنشده یا UTXO مدل میشود. آدرس بیشتر یک قالب قابلخواندن برای بیان مقصد و شرایط خرجکردن یک خروجی است.
همچنین آدرس با کلید خصوصی یکی نیست. کلید خصوصی محرمانه است و برای ایجاد امضای معتبر به کار میرود؛ آدرس را میتوان برای دریافت بیتکوین در اختیار دیگران قرار داد.
چرا آدرسهای بیتکوین شکلهای مختلفی دارند؟
قالبهای آدرس در طول تکامل بیتکوین تغییر کردهاند. هر نسل از قالبها تلاش کرده است یک مسئله فنی یا کاربردی را بهتر حل کند؛ برای مثال:
- سازگاری با نرمافزارهای قدیمی
- کاهش اندازه داده مورد نیاز برای پرداختهای رایج
- استفاده از SegWit
- پشتیبانی از Taproot
- تشخیص خطا در هنگام کپی یا واردکردن آدرس
- فراهمکردن مسیر استاندارد برای قابلیتهای جدیدتر اسکریپت
بنابراین «جدیدتر» لزوماً به این معنی نیست که همه آدرسهای قدیمی بیاعتبار یا ناامن هستند. قالبهای قدیمی همچنان بخشی از پروتکل بیتکویناند و تفاوت اصلی در نوع خروجی و ویژگیهای فنی آنهاست.
۱. Legacy یا P2PKH — آدرسهایی که معمولاً با 1 شروع میشوند
یکی از قالبهای قدیمی و شناختهشده بیتکوین، P2PKH یا Pay-to-Public-Key-Hash است.
این آدرسها در شبکه اصلی معمولاً با 1 شروع میشوند؛ برای مثال، یک آدرس فرضی ممکن است شکلی مانند 1Example... داشته باشد. نمونه واقعی را نباید برای ارسال وجه از متن آموزشی کپی کرد.
در این مدل، خروجی تراکنش به هش کلید عمومی مرتبط میشود و برای خرجکردن، صاحب کلید باید شرایط مربوط به آن خروجی را برآورده کند.
مزیت مهم Legacy، سازگاری بسیار گسترده تاریخی آن است. نقطه ضعف آن برای بسیاری از پرداختهای معمول، سربار بیشتر نسبت به قالبهای جدیدتر است؛ بنابراین اندازه تراکنش و در نتیجه کارمزد میتواند بیشتر باشد.
۲. P2SH — آدرسهایی که معمولاً با 3 شروع میشوند
P2SH مخفف Pay-to-Script-Hash است. آدرسهای P2SH در شبکه اصلی معمولاً با 3 شروع میشوند.
در P2SH، خروجی به هش یک اسکریپت بازخرید یا redeem script مربوط میشود. این قالب امکان استفاده از ساختارهای پرداخت پیچیدهتر را فراهم کرد و بعدها یکی از مسیرهای مهم برای سازگاری با انواع خاصی از پرداختهای SegWit نیز شد.
نکته مهم این است که شروعشدن آدرس با 3 بهتنهایی نمیگوید دقیقاً چه ساختار داخلیای پشت آن قرار دارد. P2SH یک قالب خروجی است و جزئیات اسکریپتی آن میتواند متفاوت باشد.
۳. Native SegWit یا Bech32 — آدرسهایی که معمولاً با bc1q شروع میشوند
با معرفی Segregated Witness (SegWit)، قالبهای جدیدی برای خروجیهای SegWit ایجاد شدند. قالب استاندارد Bech32 برای آدرسهای native SegWit در BIP173 تعریف شد. citeturn0search5
برای آدرسهای شبکه اصلی، این قالب معمولاً با bc1 شروع میشود. در SegWit version 0، آدرسهای رایج P2WPKH معمولاً با bc1q دیده میشوند.
Bech32 فقط یک ظاهر جدید نیست. قالب آن از مجموعه کاراکتر و checksum مشخصی استفاده میکند که برای انتقال و واردکردن آدرس طراحی شده است. BIP173 نیز Bech32 را بهعنوان قالب Base32 دارای checksum برای native SegWit معرفی میکند. citeturn0search5
یکی از نتایج عملی SegWit این است که برای بسیاری از تراکنشهای رایج، داده مرتبط با امضا به شکل کارآمدتری در تراکنش قرار میگیرد و اندازه مؤثر تراکنش میتواند کاهش یابد. این موضوع با مدل کارمزد بر اساس vsize که در مقاله کارمزد بیتکوین چگونه تعیین میشود؟ توضیح دادیم ارتباط دارد.
۴. P2SH-wrapped SegWit — پلی برای سازگاری
قبل از اینکه همه نرمافزارها native SegWit را بهطور کامل پشتیبانی کنند، میشد برخی خروجیهای SegWit را داخل P2SH قرار داد. نتیجه، آدرسی بود که از نظر ظاهری شبیه آدرسهای P2SH و معمولاً با 3 شروع میشد، اما ساختار پرداخت آن از SegWit استفاده میکرد.
این نکته مهم است چون نشان میدهد نمیتوان نوع دقیق یک خروجی را همیشه فقط از اولین کاراکتر آدرس تشخیص داد. 3... معمولاً P2SH را نشان میدهد، اما برای فهم ساختار واقعی باید به نوع scriptPubKey و داده مربوط به خروجی نگاه کرد.
۵. Taproot — آدرسهایی که معمولاً با bc1p شروع میشوند
Taproot با فعالشدن SegWit version 1، نوع جدیدی از خروجی را معرفی کرد. طبق BIP341، خروجی Taproot یک native SegWit output با witness version برابر 1 و witness program برابر 32 بایت است. citeturn0search1
آدرسهای Taproot در شبکه اصلی معمولاً با bc1p شروع میشوند.
Taproot فقط یک قالب آدرس جدید نیست. پشت آن مجموعهای از تغییرات در نحوه ساخت و خرجکردن خروجیها قرار دارد، از جمله مسیر key-path و امکان استفاده از script-path. در حالت معمول key-path، ساختار خروجی از یک کلید عمومی Taproot استفاده میکند. BIP341 این قواعد را بهعنوان بخشی از SegWit version 1 تعریف کرده است. citeturn0search1
برای کاربر عادی، مهمترین نکته این است که bc1p... معمولاً به خروجی Taproot اشاره میکند و این خروجی با قالبهای قدیمی 1... یا 3... یکی نیست.
Bech32 و Bech32m چه تفاوتی دارند؟
یکی از نقاطی که باعث سردرگمی میشود این است که همه آدرسهای bc1 از یک checksum یکسان استفاده نمیکنند.
Bech32 برای witness version 0 و Bech32m برای witness versionهای جدیدتر مانند version 1 به کار میرود. BIP350 قالب Bech32m را برای آدرسهای witness version 1 به بعد تعریف کرد و آن را جایگزین روش قبلی برای این نسخهها کرد. citeturn0search13
بنابراین در عمل میتوان بهصورت ساده گفت:
bc1q...معمولاً یک native SegWit version 0 است و از Bech32 استفاده میکند.bc1p...معمولاً یک Taproot / SegWit version 1 است و از Bech32m استفاده میکند.
این تفاوت در checksum است؛ اما پشت آن یک تفاوت مهمتر در witness version و قواعد خروجی قرار دارد.
آیا نوع آدرس روی کارمزد اثر دارد؟
میتواند اثر داشته باشد، اما نباید گفت «هر آدرس جدید همیشه کارمزد کمتری دارد».
کارمزد یک تراکنش به fee rate و اندازه مجازی یا vsize آن وابسته است. نوع خروجی و نوع ورودیهایی که کیف پول هنگام خرجکردن انتخاب میکند میتواند روی اندازه تراکنش اثر بگذارد.
برای مثال، استفاده از خروجیهای SegWit میتواند در بسیاری از سناریوها نسبت به ساختارهای قدیمی فضای کمتری مصرف کند. اما کارمزد نهایی فقط به نوع آدرس گیرنده وابسته نیست؛ تعداد و نوع ورودیها، خروجیها، change و fee rate انتخابشده نیز مهماند.
به همین دلیل، مقایسه «این آدرس ارزانتر است» بدون مشخصکردن ساختار کامل تراکنش، دقیق نیست.
آیا همه کیف پولها از همه آدرسها پشتیبانی میکنند؟
خیر. پشتیبانی از قالبهای آدرس به نرمافزار، نسخه کیف پول و شرایط سرویس بستگی دارد.
یک کیف پول مدرن ممکن است بتواند Legacy، SegWit و Taproot را مدیریت کند، اما یک سرویس یا کیف پول قدیمی ممکن است با نوع جدیدتری سازگار نباشد.
در نتیجه، هنگام دریافت بیتکوین از یک سرویس ناشناس یا قدیمی، بهتر است قبل از ارسال مبلغ اصلی، سازگاری نوع آدرس را بررسی کنید. اگر سرویس مقصد نوع آدرس مشخصی را پشتیبانی نمیکند، استفاده از قالبی که آن سرویس میشناسد میتواند از خطای پرداخت جلوگیری کند.
آیا ارسال بیتکوین به آدرس اشتباه قابل برگشت است؟
نوع آدرس با «درست یا غلط بودن مقصد» یکی نیست. اگر آدرس معتبر باشد و تراکنش مطابق قواعد شبکه ساخته و تأیید شود، بیتکوین معمولاً سازوکاری برای لغو خودکار پرداخت ندارد.
به همین دلیل باید آدرس مقصد را با دقت بررسی کرد و ترجیحاً از قابلیتهای تشخیص و نمایش آدرس در کیف پول استفاده کرد. برای مبالغ مهم، یک پرداخت آزمایشی کوچک نیز میتواند ریسک عملیاتی را کاهش دهد؛ البته این روش جایگزین بررسی مقصد و سازگاری کیف پول نیست.
یک جدول سریع برای تشخیص قالبها
| قالب | شروع معمول در Mainnet | فناوری اصلی | نکته مهم |
|---|---|---|---|
| P2PKH / Legacy | 1... |
قالب قدیمی | سازگاری تاریخی گسترده |
| P2SH | 3... |
Script Hash | میتواند ساختارهای مختلفی را دربرگیرد |
| Native SegWit v0 | bc1q... |
Bech32 | خروجی بومی SegWit |
| Taproot / SegWit v1 | bc1p... |
Bech32m | خروجی native Taproot |
این جدول برای تشخیص اولیه مفید است، اما جای بررسی ساختار واقعی تراکنش و scriptPubKey را نمیگیرد.
ارتباط آدرس با UTXO و کیف پول چیست؟
میتوان این رابطه را به شکل ساده چنین دید:
کلیدها، سپس آدرس و ساختار پرداخت، سپس خروجی تراکنش (UTXO) و در نهایت خرجکردن آن با تراکنش بعدی
البته در سطح پروتکل، آدرس خودش بخشی از UTXO نیست. UTXO شامل مقدار و scriptPubKey است و آدرس یک نمایش سطح بالاتر از شرایط پرداخت است.
این تفاوت زمانی مهم میشود که بخواهیم از سطح کاربر عادی به Bitcoin Script برویم. در آنجا دیگر سؤال فقط «این آدرس چیست؟» نیست؛ سؤال این است که نود دقیقاً چه scriptPubKeyای را در خروجی میبیند و برای خرجکردن آن چه witness یا دادهای لازم است؟
این موضوع را در مقاله مستقل Bitcoin Script با جزئیات متناسب با مخاطب عمومی بررسی خواهیم کرد.
چند نکته مهم برای کاربر عادی
- آدرس عمومی است؛ کلید خصوصی و عبارت بازیابی محرمانهاند.
1...معمولاً نشاندهنده P2PKH / Legacy است.3...معمولاً P2SH است و ممکن است ساختارهای مختلفی پشت آن باشد.bc1q...معمولاً native SegWit version 0 است.bc1p...معمولاً Taproot / SegWit version 1 است.- Bech32 و Bech32m دو قالب checksum متفاوت برای نسلهای مختلف witness هستند.
- نوع آدرس بهتنهایی هزینه نهایی تراکنش را تعیین نمیکند.
- قبل از ارسال، سازگاری کیف پول یا سرویس مقصد را بررسی کنید.
جمعبندی
آدرسهای بیتکوین نسلهای مختلفی دارند و تفاوت آنها فقط در شکل ظاهری رشته نیست. Legacy، P2SH، native SegWit و Taproot هرکدام به ساختار متفاوتی از خروجی و قواعد خرجکردن مربوط میشوند.
برای کاربر امروزی، مهمترین الگو این است که 1... معمولاً Legacy، 3... معمولاً P2SH، bc1q... معمولاً SegWit version 0 و bc1p... معمولاً Taproot را نشان میدهد. پشت این تفاوت ظاهری، مفاهیمی مانند UTXO، scriptPubKey، witness و قواعد اعتبارسنجی قرار دارند.
اگر بخواهیم قدم بعدی را برداریم، طبیعیترین سؤال این است: Bitcoin Script دقیقاً چیست و نود چگونه تشخیص میدهد یک UTXO قابل خرجشدن است؟
منابع و مطالعه بیشتر
- BIP 13 — Address Format for pay-to-script-hash
- BIP 141 — Segregated Witness
- BIP 173 — Base32 address format for native v0-16 witness outputs
- BIP 341 — Taproot: SegWit version 1 spending rules
- BIP 350 — Bech32m format for v1+ witness addresses
- Bitcoin Core — BIP support
این مطلب با هدف آموزش و تحلیل تهیه شده است و نباید بهعنوان توصیه قطعی برای خرید، فروش یا شرطبندی تلقی شود.