
وقتی شما از کیف پولتان مقداری بیت کوین منتقل میکنید، در واقع کیف پولتان یک تراکنش ایجاد میکند و آن را در شبکه بیت کوین منتشر میکند تا یک ماینر آن را درون بلاکچین ثبت کند. در واقع بلاکچین یک نوع دیتابیس از تمام تراکنشهایی است که تا کنون انجام شدهاند. اما تراکنش های بیت کوین دقیقا شامل چه اطلاعاتی هستند و چه شکلی هستند؟ آیا این اطلاعات حساس هستند و نباید به دست کسی بیفتد؟ چگونه یک گره کامل (Full Node) شبکه میتواند درستی یک تراکنش را تایید کند؟
در این مقاله قصد داریم به این سئوالات پاسخ دهیم و نگاهی دقیقتر به تراکنشهای بیت کوین بیندازیم.
تراکنشهای بیت کوین مانند آنچه در تصویر زیر میبینید در اصل یک پیام متنی کوتاه هستند (البته بسته به نوع تراکنش میتوانند بسیار طولانیتر هم باشند)
یک تراکنش شامل تمام اطلاعاتی است که یک فول نود شبکه یا یک ماینر برای تایید صحت مالکیت مقدار بیت کوینی که شخص، قصد انتقال آن را دارد، به آن نیازمند است. هرکس این تکه پیام را بعد از تایید بر روی بلاکچین ثبت کند (این کار را ماینرها انجام میدهند)، دقیقا درخواست شخص انتقال دهنده انجام میشود، یعنی آن مقدار بیت کوینی که شخص قصد انتقال آن را داشته به همان آدرسی که او مشخص کرده منتقل میشود. اما نکته جالبی که در مورد تراکنشهای بیت کوین وجود دارد این است که اولا با استفاده از رمزنگاری های صورت گرفته، هیچ گونه اطلاعات حساسی مانند کلید خصوصی (Private Key) انتقال دهنده در این پیام وجود ندارد بنابراین یک تراکنش میتواند بدون هیچ خطری در یک شبکه عمومی منتشر شود. اما از سوی دیگر هر کسی می تواند با دیدن این تراکنش به سرعت تایید کند که آیا این تراکنش توسط شخصی که به کلید خصوصی بیت کوین خرج شده دسترسی داشته انجام شده یا خیر. نکته جالب دوم این است که هیچ کس جز دارنده کلید خصوصی نمیتواند اطلاعات موجود در این پیام (تراکنش) را (مثلا آدرس گیرنده یا مقدار بیت کوین انتقالی) را تغییر دهد، چون در این صورت دیگر این پیام به عنوان یک تراکنش صحیح، تایید نمیشود، و این معجزه رمزنگاریست. برای آنکه متوجه شوید چه طور چنین چیزی امکان پذیر میشود با ما همراه باشید.
تراکنشهای بیت کوین بیشتر شبیه تراکنشهای فیزیکی است تا تراکنشهای دیجیتالی!
در شبکه بانکی وقتی یک نفر یک تراکنش مثلا ۳۰۰۰ تومنی انجام میدهد، ۳۰۰۰ تومان از حساب انتقال دهنده کم میشود و به حساب گیرنده همان مقدار اضافه میشود. حالا فرض کنید این تراکنش قرار است به صورت فیزیکی و با پول نقد انجام شود، به این صورت که در نظر بگیرید شما در کیف پولتان یک اسکناس ۵۰۰۰ تومانی دارید که قبلا آن را از شخص دیگری گرفته اید و میخواهید ۳۰۰۰ تومن آن را به یک نفر بدهید، برای انجام این کار شما اسکناس ۵۰۰۰ تومانی را میدهید و یک اسکناس ۲۰۰۰ تومانی را به عنوان مابقی پولتان پس میگیرید.
در مورد بیت کوین هم، تراکنش ها از این جهت بیشتر از اینکه شبیه تراکنش های بانکی باشند، شبیه تراکنش هایی است که با پول نقد صورت میگیرد، هرچند آنچیزی که در ظاهر در کیف پول بیت کوینتان می بینید این است که هر مقدار که بیت کوین انتقال میدهید از کیف پولتان کم می شود و به کیف پول گیرنده اضافه میشود، اما در اصل دقیقا همان بیت کوینی که انتقال داده اید به گیرنده میرسد و مانند تراکنشهای بانکی فقط مقدار موجودیها کم و زیاد نمیشوند. از این جهت تراکنشهای بیت کوین بیشتر شبیه تراکنشهای فیزیکی است تا تراکنشهای دیجیتالی!
همانطور که در تصویر مشخص است هر تراکنش از دو بخش اصلی تشکیل شده است. ورودی (Input) و خروجی (Output). اگر بخواهیم مثال پول نقدی که زدیم را به تراکنش های بیت کوین تشبیه کنیم، آن اسکناس ۵۰۰۰ تومانی که شما در کیف پولتان داشتید وقبلا آن را از شخص دیگری گرفته بودید Input تراکنش شماست و آن ۳۰۰۰ تومانی که به گیرنده دادید و ۲۰۰۰ تومانی که به عنوان مابقی پولتان گرفتید، Output تراکنش شماست. مثلا فرض کنید شما در کیف پولتان ۵ بیت کوین دارید که قبلا طی یک تراکنش آن را از شخص دیگری گرفته اید و میخواهید ۳ بیت کوین آن را به دیگری انتقال دهید. در طی این تراکنش ۵ بیت کوین شما به عنوان ورودی تراکنش میشود و خروجی تراکنش شامل دو قسمت میشود، یک قسمت ۳ بیت کوینی که قصد انتقال آن را دارید و یک قسمت هم ۲ بیت کوینی است که به یک آدرس دیگر کیف پول شما (Change Address) بازگردانده می شود.
ورودی های تراکنش (Input)
در بخش Input قسمتی به نام ScriptSig وجود دارد که در اصل مدرکی است بر مالکیت Input که شما به عنوان انجام دهنده تراکنش قصد خرج کردن آن را داردید. ScriptSig که یک رشته از اعداد و حروف به نظر میرسد در اصل همان کلید عمومی (Public Key) و امضای دیجیتال (Digital Signature) شما هستند که به دنبال هم آورده شدهاند. بخش دیگر Input هم که Previous Tx نام دارد شناسه تراکنشی (Transaction ID) است که طی آن قبلا ۵ بیت کوین به شما انتقال یافته. اگر ساده تر بخواهیم بگوییم شما در قسمت Input ابتدا نشانی تراکنشی که طی آن قبلا ۵ بیت کوین را دریافت کرده آید را میدهید و بعد ثابت میکنید که اکنون شما مالک آن هستید.
در این بین آن چیزی که هم ثابت میکند شما کلید خصوصی این Input را در دست دارید و مالک آن به شمار میروید و هم مانع تغییر جزئیات تراکنش توسط شخص سوم میشود، امضای دیجیتال است. امضای دیجیتال بر اساس کلید خصوصی و کلیه اطلاعات موجود در تراکنش بوسیله کیف پول شما بوجود میآید. بنابراین اگر هر کدام از اطلاعات موجود در تراکنش تغییر کنند، دیگر با امضای دیجیتال شما همخوانی نخواهند داشت. بنابراین تراکنش های بیت کوین همانند یک چک رمزدار است که مبلغ آن به شماره حسابی که شما خواستهاید رمز شده است و کسی نمی تواند آن را تغییر دهد.
خروجی های تراکنش (Output)
قسمت Output هم شامل Value یا مقدار خروجی (به ساتوشی) و ScriptPubKey است. ScriptPubKey از یک سری کدهای دستوری Script بیت کوین (کدهایی که با OP شروع میشوند) و هرکدام یک عملی را انجام میدهند و همچنین یک رشته از اعداد و حروف تشکیل شده است، این اعداد و حروف در واقع همان هش کلید عمومی (public Key) گیرنده است که از آدرس گیرندهای که شما وارد کرده اید بدست آمده. بازهم اگر به زبان ساده تر بخواهیم بگوییم ،شما در این قسمت مشخص می کنید گیرنده تراکنش چه کسی است. بعد از آنکه این تراکنش انجام شود، گیرنده میتواند این مقدار ۳ بیت کوینی که شما به او منتقل کرده اید را در یک Input به کار ببرد و با امضای دیجیتال و کلید عمومی خودش ثابت کند مالک آن است، این در حالی است که شما دیگر بر این ۳ بیت کوین کنترلی ندارید چون مالکیت آن را طی یک تراکنش انتقال داده اید.
تراکنش های بیت کوین در ساده ترین حالت ممکن، حداقل یک Input و یک Output باید داشته باشند (همانند تراکنش تصویر اول). اما تراکنشی که برایتان مثال زدیم یک Input و دو Output داشت (تصویر بالا). نکته مهم این است که در یک تراکنش بدون توجه به تعداد ورودیها و خروجی ها، مجموع مقدار خروجی ها باید از مجموع مقدار ورودیها کمتر باشد. جالب است بدانید که کارمزد تراکنشها که به ماینرها میرسد، همان اختلاف بین Input ها و Output های یک تراکنش است. در واقع هر چه شما قصد پرداخت کامزد (fee) بیشتری داشته باشید مقدار کمتری به عنوان ما بقی پولتان به شما بازگردانده خواهد شد.
سفر تراکنش از کیفپول تا بلاکچین
تمام پروسه ای که در این مقاله توضیح داده شد در اصل توسط کیف پول بیت کوین شما انجام می گردد. شما در کیف پولتان فقط مشخص میکنید چه مقداری را میخواهید به چه آدرسی منتقل کنید (در بعضی از کیف پولها شما مقدار کارمزد تراکنش را هم خودتان میتوانید تعیین کنید)، بعد کیف پولتان یک تراکنش همانند آن چیزی که دیدید درست میکند و با استفاده از کلید خصوصیتان که توسط کیف پول نگهداری میشود آن را امضا میکند، بعد کیف پولتان که خود یک گره بر روی شبکه بیت کوین دارد این تراکنش را در شبکه بیت کوین منتشر میکند. هر گرهای از شبکه که تراکنش شما به آن میرسد، ابتدا تراکنش شما را با استفاده از امضای دیجیتال، کلیدعمومی شما و هش کلید عمومی گیرنده تایید میکند و مجدد آن را در شبکه پخش میکند. این تراکنش در محلی به نام MemPool به انتظار ماین شدن توسط ماینرها میمانند تا اینکه یک ماینر تراکنش شما را در بلوک خود قرار دهد و بتواند آن بلوک را ماین کند و به بلاکچین اضافه کند، زمانی که بلوک حاوی تراکنش شما به بلاکچین اضافه شد آن تراکنش، انجام شده تلقی میشود (یا اصطلاحا Confirm میشود)، هرچه تعداد بلوک بیشتری بعد از این بلوک، ماین شود و به بلاکچین اضافه شود تعداد Confirm های تراکنش شما بیشتر میشود و تراکنش امن تر میشود. در اینفوگرافی فوق کل فرایندی که تراکنش های بیت کوین از ابتدا تا انتها طی می کنند، نشان داده شده است.
جمع بندی
تراکنش های بیت کوین؛ بعد از انجام شدن و گرفتن تاییدیه نهایی روی مرورگر بلاکچین آن قابل رویت هستند. شاید با دیدن آنها آنچه که حقیقتا پشت پرده اتفاق افتاده قابل درک نباشد. اما با خواندن این مقاله متوجه شدید؛ دنیای جذابی ورای آنچه دیده می شود در پروسه یک تراکنش بیت کوین وجود دارد.