احتمالاً شما هم متوجه شده اید که گاهی اوقات وقتی به حسابی بیتکوین واریز میکنید مقداری از بیتکوینهای شما به یک آدرس ناشناس منتقل میشوند. واقعیت این است که این مبالغ به آدرس change خود شما منتقل میشود که این ویژگی یکی از ویژگیهای امنیتی خاص بیتکوین است.
این اتفاق برای والت QT، والت الکتروم یا هر والت بیتکوین دیگری رخ میدهد. هر زمان شخصی مقداری کوین از والت خود ارسال میکند، مقداری از کوینها به آدرس بیتکوین گیرنده واریز شده و مبلغ باقیمانده به آدرسهای بیتکوین ارسال کننده واریز میشود. البته نه به همان آدرس بلکه به آدرس Change یا آدرس باقیمانده پول که به والت بیتکوین واریز کننده مربوط است.
بیشتر کاربران به این مبلغ باقیمانده توجه ندارند تا اینکه آدرس خودشان را در یک بلاک اکسپلورر بررسی میکنند. برای افراد مبتدی هم این مفاهیم کمی مبهم است چون موجودی آدرس بیتکوین آنها دقیق نخواهد بود و با مبلغ کل موجودی نمایش داده شده توسط والتشان همخوانی ندارد؛ در واقع موجودی کل نمایش داده شده توسط والت معادل با موجودی تمام آدرسهای آنها است که شامل آدرسهای دریافت و همچنین آدرسهای مربوط به باقیمانده تراکنش است.
در ادامه به این سوالات میپردازیم که آدرس Change یا خروجی Change چیست و چطور کار میکنند. چرا مبلغ باقیمانده تراکنش به آدرس متفاوتی واریز میشود و چرا از آدرس اصلی فرستنده برای این کار استفاده نمیشود.
توضیح آدرس Change و خروجی Change
در سیستم بیتکوین، خروجی Change مبلغ باقیمانده یا ساتوشیهای اضافهای است که فرستنده در یک تراکنش استفاده کرده اما بعد به حساب خود او برمی گردد. این مبلغ به این دلیل برگشت میخورد که قرار نیست کاربران مبلغی جز مبلغ مشخص شده را پرداخت کنند. آدرسی که خروجی Change به آن واریز میشود، آدرس Change نام دارد. معمولاً آدرس Change یک آدرس بیتکوین جدید است که کلاینت (والت بیتکوین) برای ارسال کننده وجه تولید میکند تا مبلغ باقیمانده به حساب او برگردد.
اما چرا از همان ابتدا مبلغ درست پرداخت نمیشود تا نیازی به برگشت خوردن باقیمانده وجود نداشته باشد؟
برای درک این مفاهیم، ابتدا به توضیح اصول و پایههای کلی تراکنشهای بیتکوین میپردازیم.
تراکنشهای بیتکوین
هر تراکنش بیتکوین از سه قسمت تشکیل شده: ورودی تراکنش، خروجی تراکنش و مبلغ استفاده شده. ورودی تراکنش آدرسی است که بیتکوینها از آن آدرس ارسال شده اند. خروجی تراکنش آدرسی است که قرار است بیتکوینها به آن واریز شوند.
بلاکچین، یک رکورد عظیم از دادهها است که تمام تراکنشهای بیتکوین را از همان ابتدا تا به امروز رهگیری میکند. بنابراین اگر شما هم مقداری بیتکوین داشته باشید، بلاکچین منبع و مرجع همه تراکنشهای قبلی که به حساب شما واریز شده را در خود جای داده است.
برای اینکه شما بتوانید به حساب شخص دیگری بیتکوین واریز کنید، ابتدا خود شما باید از شخص دیگری بیتکوین دریافت کنید. آدرسی که بیتکوین به حساب شما واریز کرده، ورودی تراکنش و آدرسی که بیتکوین را دریافت کرده (آدرس BTC شما) خروجی تراکنش است.
حالا اگر شما بخواهید بیتکوین را به حساب شخص دیگری واریز کنید، آدرسی که شما بیتکوین را از طریق آن ارسال میکنید، ورودی تراکنش خواهد بود. آدرس BTC شخص مقابل که بیتکوین را از شما دریافت میکند، خروجی تراکنش است. بنابراین بسته به اینکه مبلغ به کدام حساب واریز یا از آن برداشت میشود، ورودی و خروجی تراکنش متفاوت خواهد بود.
اگر خروجیها بخشی از یک تراکنش دیگر نباشند (خرج نشده باشند)، به چنین کوینهایی خروجی خرج نشده تراکنش (UTXO) گفته میشود.
حالا که با مفاهیم ورودی، خروجی و UTXO آشنا شدید، به موضوع مورد بحث یعنی Change برمیگردیم و اینکه خروجیهای Change دقیقاً به چه صورت ایجاد میشوند؟
خروجی Change بیتکوین
در سیستم بیتکوین و بسیاری از ارزهای دیجیتال دیگر، UTXO قابل مشاهده نیست. در این حالت خروجی تراکنش قبلی، ورودی یک تراکنش دیگر میشود و باید کل آن مبلغ خرج شود. طبق قانون بیت کوین امکان تقسیم کردن این کوینها وجود ندارد و کل UTXO باید به صورت کامل خرج شود. این کار به دلایل امنیتی و بهره وری انجام میشود.
بنابراین اگر خروجی بیشتر از مبلغی باشد که کاربر قصد پرداختن آن در یک تراکنش را داشته، یک خروجی Change (یا باقیمانده) ایجاد شده و تبدیل به UXTO جدید میشود. همچنین اگر خروجی کوچکتر از مبلغی باشد که کاربر قصد پرداخت آن را داشته، کلاینت والت چند مورد از خروجیهای خرج نشده کاربر را برای جبران مابه التفاوت استفاده میکند.
هر خروجی یک یا چند ورودی دارد و هر ورودی هم یک یا چند خروجی دارد. بنابراین در یک تراکنش میتوان بیتکوین را از چند آدرس دریافت و یا به چند آدرس ارسال کرد.
برای درک بهتر این توضیحات در ادامه به یک مثال میپردازیم.
مثالی از Change بیتکوین
مثال زیر را در نظر بگیرید که در آن باب و آلیس یک تراکنش را اجرا میکنند.
باب 50 بیتکوین در حساب خود دارد که از یک اکسچینج خریداری کرده و به صورت یک خروجی واحد دریافت کرده است. حالا باب به دلایلی قصد دارد 0.5 بیتکوین برای آلیس ارسال کند اما فقط یک ورودی 50 بیتکوینی دارد.
از آنجایی که مبالغ UTXO قابل مشاهده نیستند، باب نمیتواند فقط 0.5 بیت کوین ارسال کند. در عوض او باید کل ورودی خود را ارسال کند. اینجاست که او کل 50 بیت کوین را در یک تراکنش خرج میکند و دو UTXO ایجاد میکند. یک خروجی 0.5 بیتکوینی به آدرس مقصد (آدرس آلیس) ارسال میشود و یک 49.5 بیتکوینی به آدرس Change متعلق به باب برمیگردد.
مثالهای از چندین ورودی:
در ادامه یک مثال دیگر مشاهده میکنید که در آن آلیس چند خروجی خرج نشده از افراد مختلف دارد. حالا والت آلیس حاوی سه خروجی خرج نشده با قیمتهای 0.5، 0.1 و 0.2 بیتکوین است.
حالا این بار او قصد دارد 0.8 بیتکوین برای نانسی واریز کند. اما 0.8 بیتکوین در یک آدرس خروجی خرج نشده ندارد در نتیجه از چندین خروجی استفاده میکند تا به مبلغ مورد نظر برسد.
درک مفهوم Change در بیتکوین
در ادامه نگاهی به یک مثال دیگر خواهیم داشت که در زندگی روزمره ما صورت میگیرد.
بیتکوین هم مثل پول نقد معمولی کار میکند. فرض کنیم که شما یک اسکناس 100 دلاری دارید. شما به کافی شاپ میروید و مبلغ فاکتور شما 25 دلار است. حالا مسلماً کل اسکناس صد دلاری را به صندوقدار تحویل نخواهید داد.
شما اسکناس صد دلاری را به صندوقدار میدهید؛ او 25 دلار هزینه قهوه را کسر میکند و 75 دلار باقیمانده را به شما برمیگرداند. حالا با توجه به مبالغ اسکناسها و سکههای دلار، تراکنش شما میتواند به این صورت باشد:
ورودیها:
- 100 دلار (که شما به صندوقدار تحویل میدهید)
خروجیها:
- 25 دلار به صندوقدار
- برگرداندن 20 دلار باقیمانده به شما
- برگرداندن 20 دلار باقیمانده به شما
- برگرداندن 20 دلار باقیمانده به شما
- برگرداندن 10 دلار باقیمانده به شما
- برگرداندن 5 دلار باقیمانده به شما
تراکنشی به ارزش 100 دلار اجرا شد که در آن 25 دلار به شخص مقابل پرداخت شد و 75 دلار به عنوان باقیمانده به شما برگردانده شد.
حتماً حالا توجه کردید که مبلغ باقیمانده که صندوقدار میپردازد به کیف پول شما برمی گردد. درست مثل بیتکوین حالا تا وقتی که تراکنش تایید نشده باشد، خروجی باقیمانده در اختیار شما قرار نمیگیرد.
مبلغ باقیمانده بیتکوین هم به همین صورت کار میکند. با این تفاوت که در بیتکوین به آن خروجی خرج نشده تراکنش (UTXO) گفته میشود. همچنین برخلاف تراکنشهای نقدی، تراکنشهای بیتکوین یک کارمزد دارند.
در ادامه یک نمونه تراکنش واقعی را مشاهده میکنید که شامل کارمزد هم میشود.
هش تراکنش: 791f5aeb156c8a0e9b235a26a4dd319e1ba3e5b7dbc513f8ec4cf206bb5716c4
در تراکنش بالا، اتفاقی که رخ داده به این صورت است: آدرس 1GBXjHxe74s7HPR97PvdxPYdghsphcLAZG مبلغ 0.00157800 بیتکوین به آدرس 1GBfXw6BaHdo2nggNedFhKJGBi2Yhurmoc ارسال میکند.
اما کل ورودی 0.03961452 بیتکوین است. پس از پرداخت کارمزد 0.00000582 و مبلغ 0.00157800 بیت کوین، باقیمانده تراکنش که 0.0380307 بیت کوین است، برای گیرنده برمی گردد.
همانطور که مشاهده میکنید، مبلغ Change به جای آدرس مورد استفاده فرستنده، به آدرس Change ارسال میشود. در هر صورت این آدرس متعلق به واریز کننده وجه است. اما آدرس Change چگونه ایجاد میشود؟
آدرسهای Change چگونه ایجاد میشوند؟
در ابتدا از کاربران خواسته شده بود هر زمان که تراکنش آنها خروجی باقیمانده دارد، آدرس Change را به صورت دستی وارد کنند. همانطور که احتمالاً حدس میزنید این شرایط منجر به ابهامات زیادی شده و در نتیجه بیتکوین کاربران از دست میرفت. بسیاری از کاربران مبلغ Change را اشتباهاً به آدرسی ارسال میکردند که تحت کنترل خود آنها نبود.
اما حالا والتهای مدرن و جدید خودشان آدرسهای Change را ایجاد و مدیریت میکنند. پیش از شروع یک تراکنش، والت شما آدرس را ایجاد کرده و آن را به باقیمانده تراکنش نسبت میدهد.
این کارها به صورت خودکار در پس زمینه انجام میشوند و از آنجایی که آدرس Change توسط والت شما ایجاد میشود، والت حاوی کلید خصوصی آن آدرس خواهد بود. به این ترتیب میتوان کوینهای باقیمانده از آدرس Change را دوباره خرج کرد. اما همانطور که قبلاً گفته شد، فقط باید برای تایید تراکنش منتظر بمانید.
بیتکوین کور، الکتروم و بسیاری از والتهای دیگر طوری طراحی شده اند که این فرایند را بخوبی مدیریت کنند و معمولاً آدرس Change را میتوانید در تب آدرس مشاهده کنید.
حالا به آخرین میپردازیم، چرا مبلغ باقیمانده به همان آدرس اصلی واریز نمیشود؟
دریافت مبلغ Change به همان آدرس قبلی منجر به تضعیف حریم خصوصی میشود
میتوانید خروجی Change را به همان آدرس اصلی واریز کنید. هر چند این کار باعث ساده تر شدن فرایندهای حسابداری میشود اما از طرفی حریم خصوصی را تضعیف میکند. همانطور که قبلاً در این مقاله اشاره شد، آدرسهای Change نقش مهمی در تقویت حریم خصوصی دارند.
تراکنشهای بیتکوین به صورت دائم در بلاکچین ذخیره میشوند. این سیستم کاملاً شفاف و برای همه قابل مشاهده است. همه میتوانند تراکنشها را هر زمانی رهگیری و بررسی کرده و به راحتی متوجه شوند که مبالغ به کجا و برای چه کسی ارسال شده اند. با مشخص کردن هویت اشخاص میتوان به راحتی درباره تاریخچه تراکنشهای شخصی آنها نتیجه گیری کرد که این شرایط موردپسند نیست و نگران کننده است.
بنابراین برای حفظ ناشناسی و سخت تر کردن رهگیری تراکنشها، خروجیهای Change معمولاً به آدرسهایی واریز میشوند که همان موقع ایجاد میشوند.
امیدواریم که حالا این مفاهیم را بخوبی درک کرده باشید. این بار اگر قصد ارسال بیتکوین برای شخص دیگری را داشتید و متوجه شدید که مبلغ زیادی از بیتکوینهای شما به آدرس دیگری منتقل شدند نگران نباشید. در واقع این مبالغ متعلق به شما هستند و آدرسی که مشاهده میکنید آدرس Change است که تحت کنترل خود شما قرار دارد.