آشنایی با اصطلاحات تراکنش، بلوک، استخراج و زنجیره بلوکی در بیت کوین:
سیستم بیت کوین برخلاف سیستم پرداخت سنتی بانکها براساس تامین اعتبار و اعتماد غیر متمرکز شکل گرفته است. در سیستم بیت کوین بجای سیستم واحد مستقل مرکزی، اعتبار تراکنش ها براساس کنش متقابل بین طرفهای معامله یا شرکاء شکل میگیرد.
در این نوشتار، به بررسی یک تراکنش درون سیستم بیت کوین نگاهی می اندازیم پس از آن به درک مفهوم اعتماد (Trust) که بر اساس اجماع سراسری شکل میگیرد پی خواهیم برد و در انتها به تشریح نحوه ثبت این تراکنشها در دل زنجیره بلوکی یا همان دفتر کل توزیع شده (Distributed Ledger)خواهیم پرداخت.
هر مثال براساس یک تراکنش واقعی که در داخل سیستم بیت کوین اتفاق افتاده است شکل گرفته است تا خواننده بتواند درک کاملی از نحوه عملکرد المانهای این سیستم داشته باشد. برای درک بهتر خواننده تمامی نقل و انتقالات مالی از کیف الکتریکی کاربران با نامهای "جو، آلیس و باب" صورت میگیرد.
شایان ذکر است در زمان رصد و تعقیب تراکنشها در داخل شبکه بیت کوین و زنجیره بلوکی از موتورهای جستجو بلاکچینی جهت تصویر سازی هر مرحله استفاده خواهیم نمود.
خالی از لطف نیست به این مسئله اشاره کرد که موتورهای جستجو زنجیره بلوکی امکان جستجوی آدرس ها، تراکنش ها، بلاک ها و کشف رابطه فیمابین را به کاربر میدهد.
معروفترین این جستجوگرها عبارتند از:
بررسی اجمالی بیت کوین
همانطور که در اینفوگراف زیر مشاهد مینمایید المانهای سیستم بیت کوین عبارتند از تعدادی کاربر با کیف پول الکتریکی همچنین تعدادی تراکنش که در محدوده این شبکه اتفاق می افتد به همراه معدنچیانی که وظیفه انجام پردازش سنگین تولید اجماع بلاکچینی (Consensus blockchain) یا همان تخصیص اعتبار به تراکنشها، تشکیل یافته است.
در این نوشتار با تعقیب و ردیابی یک تراکنش واقعی سعی در رمز گشایی و تحلیل ارتباطات موجود بین این المانها از منظر کلی خواهیم نمود.
خرید یک فنجان قهوه با بیت کوین
همانطور که در بالا اشاره کردیم "آلیس" بعنوان یکی از کاربران، اولین بیت کوین خود را از طریق "جو" بدست آورده است. "جو" مقدار 0.10 BTC برای آلیس ارسال نموده و این مقدار بیت کوین در کیف الکتریکی "آلیس" موجود میباشد.
"آلیس" قصد دارد با خرید یک فنجان قهوه در کافی شاپ "باب" اولین تراکنش خود را انجام دهد. کافی شاپ "باب" اخیرا مجهز به سیستم پرداخت از طریق بیت کوین شده است و کاربران ثبت شده امکان پرداخت از طریق دلار و هم بیت کوین را دارند.
"آلیس" سفارش یک فنجان قهوه را به باب می دهد و باب سفارش را در سیستم پرداخت خود ثبت می نماید در این لحظه سیستم پرداخت مقدار دلاری یک فنجان قهوه را به واحد بیت کوین براساس نرخ لحظه ای بازار تبدیل می نماید و هر دو قیمت را بعلاوه کد QR که حاوی درخواست پرداخت است را بر روی نمایشگر نشان می دهد. رجوع گردد به شکل ۲.
Total:
$1.50 USD
0.015 BTC
آدرس QR کد شده درخواست پرداخت، حاوی آدرس مقصد، مبلغ و توضیحاتی در خصوص دریافت کننده میباشد که در این مثال کافی شاپ "باب" میباشد. این اطلاعات این امکان را به برنامه کیف الکتریکی می دهد که کاربر در زمان پرداخت یا دریافت قادر به داشتن تمامی اطلاعات باشد.
کد رمز شده QR براساس مدل BIP0021:
bitcoin:1GdK9UzpHBzqzX2A9JFP3Di4weBwqgmoQA?
amount=0.015&
label=Bob%27s%20Cafe&
message=Purchase%20at%20Bob%27s%20Cafe
Components of the URL
A bitcoin address:
"1GdK9UzpHBzqzX2A9JFP3Di4weBwqgmoQA"
The payment amount: "0.015"
A label for the recipient address: "Bob's Cafe"
A description for the payment: "Purchase at Bob's
Cafe"
"آلیس" پس از مشاهده قیمت، با بارکد خوان گوشی هوشمند خود کد QR را اسکن نموده و کلید ارسال را در برنامه کیف الکتریکی خود فشار می دهد ظرف چند ثانیه "باب" متوجه میگردد تراکنش با موفقیت انجام شده و مبلغ مذکور را در کیف الکتریکی خود میبیند.
در ادامه به بررسی تراکنش انجام شده میپردازیم تا دریابیم کیف الکتریکی "آلیس" چگونه موفق به انجام تراکنش شده است و نهایتا "باب" چگونه میتواند بیت کوین بدست آورده را دوباره خرج نماید.
لازم به توضیح است در شبکه بیتکوین میتوان با کسری از واحدهای کوچک دادوستد نمود. برای نمونه از یک میلی بیت کوین که معادل ۱ هزارم بیت کوین است تا ۱ صد میلیونیم که به ساتوشی معروف شده است.
تراکنش در بیت کوین
به بیان ساده تر، منظور از تراکنش در شبکه بیت کوین عبارت است از اینکه مالک مقدار مشخصی از بیت کوین اجازه دارد آن را به آدرس دیگری انتقال دهد. مالک جدید نیز مجددا میتواند مقدار مشخصی را به آدرس دیگری انتقال داده و زنجیره مالکیت به همین شکل ادامه پیدا کند.
تراکنشها همانند ارقام در ثبت دوطرفه دفتر حسابداری میباشند. به عبارتی، هر تراکنش حاوی یک یا چند ورودی است که در ستون بدهکاران حساب بیت کوین قرار میگیرد و در طرف دیگر یک یا چند خروجی وجود دارد که در ستون بستانکاران حساب بیت کوین نوشته میشود.
در سیستم بیت کوین لازم نیست مقدار این دوستون با یکدیگر مساوی باشند در عوض مقدار ستون بستانکاران همواره از ستون بدهکاران کمتر بوده و این مغایرات ناشی از کارمزد تراکنش میباشد که توسط معدنچیان جهت نگهداری حسابها در دفتر کل یا همان زنجیره بلوکی کسر میگردد. رجوع گردد به شکل ۳.
هر تراکنش حاوی اثبات مالکیت مقدار ارسال شده آن در قالب امضاء دیجیتال از طرف مالک آن است که بطور مستقل قابل ردیابی و اعتبار سنجی است.
تراکنشها ارزش دارایی دیجیتال را از ورودی یک حساب به خروجی حساب دیگر منتقل مینمایند در تراکنش خروجی، به مالک جدید کلید اختصاص داده میشود که به این کلید اصطلاحا "کلید گرو" گفته میشود و وظیفه آزادسازی یا از گرو درآوردن مبلغ انتقال داده شده را دارد.
بنابراین با این مکانیزم امکان انتقال وجه از یک حساب به حساب دیگر و خلق زنجیره مالکیت امکانپذیر میباشد. رجوع گردد به شکل ۴.
شکل ۳. تراکنش براساس سیستم ثبت دوطرفه حسابداری
شکل ۴. خروجی تراکنش قبلی، ورودی تراکنش بعدی است
انواع مختلف تراکنش
رایجترین نوع تراکنش ارسال وجه از طریق یک آدرس به آدرس دیگر است در این تراکنش باقیمانده وجه پس از کسر مبلغ ارسالی و کارمزد به صاحب اصلی آن عودت داده میشود. این نوع از تراکنش همانند شکل زیر یک ورودی و دو خروجی دارد.
شکل ۵. رایجترین نوع تراکنش در شبکه بیتکوین
نمونه دیگری از تراکنش در این شبکه عبارت است از جمعآوری تعدادی ورودی در دل یک خروجی. نمونه دنیای واقعی این نوع تراکنش زمانی است که شما مقدار زیادی پول خرد را با یک اسکناس به همان میزان معاوضه مینمایید. شکل ۶.
تراکنشهای از این دست معمولا بصورت اتوماتیک توسط برنامه کیف الکتریکی، جهت پاکسازی و مرتبسازی کیف پول انجام میگیرد به شکلی که وجوه خرده باقیمانده از تراکنشها با رقمی به همان میزان معاوضه میگردد.
شکل ۶. تراکنشهای یکی شده
و نهایتا نمونه آخر تراکنش عبارت است از; توزیع یک ورودی به چند خروجی یا دریافت کننده. شکل ۷.
این مدل از ترکنش توسط نهادهای تجاری جهت توزیع وجوه بصورت یکجا و در یک زمان صورت میپذیرد. مانند پرداخت حقوق به کارمندان یک شرکت.
شکل ۷. توزیع یکجا
ساخت یک تراکنش
برنامه کیف الکتریکی "آلیس"، برای ساخت یک تراکنش، حاوی استدلال و منطق کافی جهت انتخاب مناسب ورودیها و خروجیها میباشد. برای انجام یک تراکنش "آلیس" تنها نیازمند داشتن آدرس گیرنده میباشد، باقی جزئیات به دور از دیدگان "آلیس" در پشت صحنه اتفاق میافتد. برنامه کیف الکتریکی حتی زمانی که آفلاین است قادر به ایجاد تراکنش میباشد، درست همانند زمانی که ما چکی را در وجه شخصی نوشته و امضاء میکنیم از اینرو یک تراکنش جهت ایجاد نیازمند ارتباط با شبکه بیت کوین نمیباشد بلکه تنها جهت اجراء به آن نیاز دارد.
دریافت ورودی مناسب
برنامه کیف "آلیس" در اولین قدم مجبور است به دنبال ورودی قابل پرداخت به "باب" بگردد. بیشتر این برنامهها از دیتابیس کوچکی به نام "تراکنش خروجی مصرف نشده" نگهداری میکنند که با کلید خود کیف، قفل میگردد. بنابراین کیف "آلیس" یک کپی از خروجی تراکنش با "جو" را در اختیار دارد، در واقع کیف بیت کوین حاوی یک کپی از تمام تراکنشهای خروجی مصرف نشده در شبکه بلاک چین میباشد این قابلیت این امکان را به برنامه میدهد که به سرعت یک تراکنش ورودی ایجاد یا بتواند صحت و سقم یک تراکنش را تایید نماید.
با این حال داشتن کپی از تمامی تراکنشهای خروجی مصرف نشده نیازمند فضای دیسک بر روی سیستم کاربر میباشد به همین خاطر بیشتر برنامهها تنها خروجی مصرف نشده کاربر خود را رصد مینمایند. اگر برنامه کیف الکتریکی احتیاج به دریافت کپی از تراکنشهای مصرف نشده خروجی داشته باشد میتواند با کمک API های موجود نظیر JSON RPC API میتواند از شبکه بیتکوین درخواست دریافت اطلاعات نماید. مثال ۲ درخواست RESTful API را نشان میدهد که با فرمان HTTP GET به URL "آلیس" ارسال میگردد. آدرس URL در جواب، تراکنش خروجی مصرف نشده را بر میگرداند.
مثال ۲: جستجو جهت یافتن خروجی مصرف نشده برای آدرس بیت کوینی "آلیس":
$ curl https://blockchain.info/unspent?active=1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK
برگشت جواب جستجو:
{
"unspent_outputs":[
{
"tx_hash":"186f9f998a5...2836dd734d2804fe65fa35779",
"tx_index":104810202,
"tx_output_n": 0,
"script":"76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
"value": 10000000,
"value_hex": "00989680",
"confirmations":0
}
]
}
همانطور که در مثال ۲ مشاهده نمودید در جواب جستجوی انجام شده مقدار خروجی مصرف نشده که متعلق به آدرس "آلیس" یعنی: 1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK میباشد مشخص میگردد این مقدار معادل ۰.۱۰ بیت کوین میباشد با اطلاعات دریافتی برنامه کیف الکتریکی قادر به ایجاد و انتقال تراکنش جدید خواهد بود.
ایجاد خروجی
دارایی کل "آلیس" معادل 0.10 BTC میباشد که بسیار بالاتر از قیمت یک فنجان قهوه معادل 0.015 BTC میباشد. برنامه کیف "آلیس" مجبور به ارسال دو خروجی میباشد یکی برای "باب" و دیگری باقیمانده مبلغ جهت استفاده در آینده.
در انتها جهت پردازش تراکنش توسط شبکه در زمان مناسب، برنامه کارمزد کوچکی که قابل روئیت نیست را به تراکنش اضافه میکند به جای دریافت 0.085 BTC بعنوان باقیمانده برنامه "آلیس" تنها 0.0845 BTC را به عنوان دومین خروجی بر میدارد و معادل 0.0005 BTC یا نصف میلی بیتکوین را باقی میگذارد.
این باقیمانده به عنوان کارمزد تراکنش توسط معدنچیان جهت اضافه نمودن تراکنش در بلاک مربوطه و دفتر کل زنجیره بلوکی مورد استفاده قرار میگیرد.
شکل ۸. مشاهده نتیجه تراکنش توسط برنامه جستجوگر بلاکچین
شکل ۸. تراکنش "آلیس" در کافی شاپ "باب"
اضافه نمودن تراکنش به دفتر کل یا همان بلاکچین
تراکنش انجام شده توسط برنامه "آلیس" دارای ۲۵۶ بایت طول و دارای تمامی مشخصات لازم جهت ارسال به دیگری میباشد. در این لحظه تراکنش میبایست به شبکه بیت کوین ارسال و جزئی از دفتر کل غیرمتمرکز یا همان بلاکچین گردد در ادامه مشاهده میکنیم که یک تراکنش چگونه جزئی از یک بلوک میگردد و این بلوک چگونه توسط معدنچیان استخراج یا "Mined" میگردد و در انتها شاهد آن خواهیم بود که بلوک جدید پس از اضافه شدن به زنجیره بلوکی چگونه مورد تایید شبکه قرار میگیرد.
انتقال تراکنش
با توجه به اینکه تراکنش حاوی تمامی اطلاعات مورد نیاز جهت پردازش میباشد از اینرو چگونگی و نحوه انتقال آن بههیچ وجه مهم نمیباشد. شبکه بیتکوین یک شبکه نظیر به نظیر "Peer-to-Peer" بوده که در آن هر کاربر با تعداد زیادی از کاربران ارتباط نظیر به نظیر دارد، هدف اصلی ایجاد شبکه بیت کوین انتشار و توزیع تراکنشها و بلاکها به تمامی شرکت کنندهها است.
نحوه انتشار تراکنشها
هر کاربری که از طریق اینترنت به شبکه بیت کوین متصل باشد توانایی ارسال تراکنش جدید را دارد، از اینرو برنامه کیف "آلیس" احتیاجی به ارتباط مستقیم با کیف "باب" ندارد، هر گره یا "Node" در این شبکه وظیفه دارد پس از دریافت تراکنشی که قبلا آنرا مشاهده نکرده به سرعت آنرا به باقی گرهها ارسال نماید بنابراین، با این مکانیزم تراکنشها در عرض چند ثانیه در شبکه نظیر به نظیر بیت کوین پخش میگردند.
تصور غلطی که همگان راجع به تراکنشهای بیت کوین دارند این است که باید حداقل ۱۰ دقیقه برای دریافت تاییدیه بلوک جدید و یا حداکثر ۶۰ دقیقه جهت دریافت تاییدیه شش گانه صبر کرد. تاخیر به این اندازه برای تراکنشهای کوچک نظیر خرید یک فنجان قهوه لازم نیست و همگان بدون دریافت تاییدیه این تراکنش را قبول میکنند.
استخراج بیت کوین
با توجه به انتشار تراکنش در شبکه، تا زمانی که از طریق فرایند استخراج این تراکنش داخل یک بلوک ننشیند جزئی از دفتر کل مشترک یا بلاک چین نخواهد بود.
اعتماد و اعتبارسنجی در سیستم بیتکوین براساس محاسبه شکل گرفته است، تراکنشهای داخل یک بلوک نیازمند حجم عظیمی از قدرت پردازش جهت اثبات دارند. فرایند استخراج در سیستم بیتکوین دو وظیفه اصلی دارد که عبارت است از:
- استخراج همانند بانک مرکزی عمل میکند یعنی وظیفه خلق و چاپ پول را بر عهده دارد. مجموع تعداد بیت کوینها براساس بلوکها ثابت بوده و در گذر زمان تقلیل مییابند.
- استخراج خالق اعتبار و اعتماد میباشد، بدان معنی که تراکنش زمانی مورد تایید قرار میگیرد که به اندازه کافی قدرت محاسباتی صرف بلوک در برگیرنده آن شده است. تعداد بیشتر بلوک یعنی محاسبه بیشتر و نتیجتا اعتماد بیشتر.
بهترین راه جهت توصیف فرآیند استخراج را میتوان به بازی سودوکو تشبیه نمود که پس از آنکه یک نفر راهحل را کشف نمود بازی از ابتدا شروع میشود. این بازی بطور اتوماتیک طوری تنظیم شده که بیش از ۱۰ دقیقه بطول نیانجامد. تصور کنید بازی سودوکو عظیمی با ابعاد هزاران سطر و ستون داریم، اگر بازی تمام شده را به شما نشان دهیم شما سریعا قادر به تایید آن خواهید بود اما اگر تعداد از خانههای آن خالی باشد شما زمان بسیاری را جهت حل آن نیاز خواهید داشت. سختی بازی سودوکو با تغییر سایز آن تغییر میکند. معمای موجود در بیت کوین براساس "هش" رمز شده میباشد و مشخصه آن در این است که برای حل کردن بسیار مشکل و جهت تایید بسیار آسان، همچنین سختی بازی قابل تنظیم میباشد.
"جینگ" بعنوان دانشجوی رشته کامپیوتر در شانگهای بعنوان معدنچی در این رقابت شرکت میکند و در هر ۱۰ دقیقه "جینگ" و هزاران معدنچی سعی و در یافتن جواب و تصاحب جایزه دارند. پیدا کردن جواب یا همان "Proof of Work" نیازمند توان محساباتی معادل کادریلیون (عدد ۱ با ۱۵ صفر به توان ۲) در هر ثانیه میباشد.
الگوریتم اثبات کار مکررا با "هش" کردن "هدر" یک بلوک و شماره رندم برگرفته از SHA 256 تکرار میگردد، تا اینکه راهحل با الگوی از پیش تعیین شده یکی گردد. اولین معدنچی که موفق به پیدا کردن راهحل گردد، مجاز به ثبت بلوک در بلاک چین خواهد شد.
"جینگ" کار خود را در سال ۲۰۱۰ با یک سیستم دسکتاپ پیشرفته آغاز نمود ولی طولی نکشید که با پیوستن معدنچیان بیشتر به رقابت، دشواری حل مسئله بیشتر و بیشتر گردید. خیلی زود معدنچیان و از جمله "جینگ" شروع به بروزرسانی کامپیوترهای خود به تجهیزات مخصوص اینکار مانند: آخرین سری از کارتهای GPU مورد استفاده در بازیهای کامپیوتری شدند. در زمان نگارش این متن عملیات استخراج تنها با چیپهای ASIC سودآور و امکانپذیر میباشد، علاوه بر این "جینگ" به استخر استخراج نیز ملحق شده که بسیار شبیه سیستم قرعهکشی بوده و شرکت کنندگان جایزه را به نسبت تلاش صرف شده بین خود تقسیم میکنند.
"جینگ" در حال حاضر با دو دستگاه ASIC یو اس پی، بطور شبانهروزی مشغول استخراج میباشد و با فروش بیت کوین قادر به پرداخت هزینه بهای برق مصرفی خود و همچنین کسب درآمد و سود میباشد.
استخراج تراکنش در بلوک
تا زمانی که تراکنش ارسال شده به شبکه مورد تایید قرار نگیرد جزئی از بلاک چین یا دفتر کل توزیع شده نخواهد شد، بطور متوسط معدنچیان بیتکوین در هر ۱۰ دقیقه یک بلوک جدید که حاوی تمامی تراکنشها در این بازه زمانی میباشد تولید مینمایند. تراکنشهای جدید تایید نشده در محل موقتی که اصطلاحا استخر استخراج نامیده میشوند نگهداری میگردند تا اینکه معدنچیان بلوک جدیدی ساخته و این تراکنشها را به بلوک اضافه نمایند، پس از آن معدنچیان تلاش به حل مشکل پیچیده یا همان اثبات کار "Proof of Work" جهت تایید اعتبار بلوک جدید مینمایند.
الویت بندی تراکنشها در بلوک جدید براساس بالاترین مبلغ میباشد هر معدنچی پس از دریافت آخرین بلوک از شبکه و آگاه شدن از این که در رقابت قبلی تولید بلوک شکست خورده سریعا شروع به ساخت بلوک جدید مینماید و تمامی تراکنشهای جدید را به همراه اثر انگشت بلوک قبلی داخل آن میریزد و شروع به محاسبه "اثبات کار" مینماید. جایزه معدنچیان در صورت پیروزی در رقابت در حال حاضر 12.5 BTC به ازاء هر بلوک میباشد که این بلوک پس از پیروزی به عنوان بلوک تایید شده به زنجیره بلوکی اضافه میگردد.
"جینگ" بعنوان یکی از معدنچیان در رقابت استخراج شرکت نموده و تراکنش "آلیس" توسط شبکه در استخر استخراج به عنوان تراکنش تایید نشده قرار میگیرد، پس از آن به بلوکی که "جینگ" تولید نموده اضافه میگردد تقریبا پس از ۵ دقیقه از تراکنش "آلیس"، "جینگ" موفق به کشف راهحل مسئله میگردد و بلوکی با شماره 277316# با ۴۱۹ تراکنش را در بلاکچین منتشر میکند.
مشاهده بلوکی که تراکنش"آلیس" در آن موجود است.
چند دقیقه بعد معدنچی دیگری بلوک جدیدی را با شماره 227317# استخراج میکند با توجه به اینکه بلوک جدید براساس بلوک قبلی شکل گرفته است بر همین اساس تراکنش "آلیس" رسما مورد تایید شبکه قرار میگیرد.
اصلی که به آن میتوان اشاره کرد عبارت است ازاینکه: هر چه بلوک های بیشتری بر روی یکدیگر قرار بگیرند اعتبار تراکنشهای موجود بیشتر و بیشتر میگردد.
شکل ۹ حاوی بلوکی است که تراکنش "آلیس" در آن موجود میباشد تمامی بلوکها از بلوک 227316# تا بلوک 0# یا همان اولین بلوک به یکدیگر متصل بوده و قابل ردیابی و رصد.
با گذشت زمان طول بلوکها افزایش یافته و این مسئله باعث سختر شدن "اثبات کار" برای معدنچیان خواهد گردید. براساس قرارداد در سیستم بیت کوین پس از تولید ۶ بلوک امکان فسخ بلوک و تراکنشهای آن غیر قابل فسخ خواهد بود.
شکل ۹. تراکنش "آلیس"