باتبلاکچینبلاکچینتحلیل بلاکچینکوین ایرانمطالب آموزشیمقالات تحلیلی

درک شبکه لایتنینگ، قسمت اول: ساخت کانال پرداخت دوطرفه بیتکوین

انتظار می رود که شبکه لایتنینگ (Lightning Network)، یکی از نوآوری های فناوری محوری باشد که بر روی بیتکوین اجرا شود. لایه پرداخت، تقریبا یک سال پیش توسط Joseph Poon و Tadge Dryja معرفی شد. این لایه پرداخت تضمین کرده که از بی نهایت تراکنش خارج از زنجیره یا همان off-chain که بین کاربران انجام می شود پشتیبانی کند؛ همچنین اطمینان داده در حالی که از امنیت ارائه شده توسط شبکه بیتکوین چیزی کم نشود، این تراکنش ها تقریبا بدون هزینه باشند.

    درک شبکه لایتنینگ ، قسمت اول

Lightning network e1501005401930 درک شبکه لایتنینگ، قسمت اول: ساخت کانال پرداخت دوطرفه بیتکوین

در حال حاضر حداقل سه شرکت در حال کار بر روی پیاده سازی شبکه لایتنینگ هستند؛ شرکت هایی نظیر Lightning (متعلق به Poon  و Dryja)، Blockstream و Blockchain. اما غیر از این خط مقدم کوچک، تعداد کمی هستند که درک کرده اند چگونه “آینده ی پرداخت های خرد” می تواند قابلیت های بیتکوین را افزایش دهد.

در این مقاله چند قسمتی که توسط Bitcoin Magazine ارائه شده، به توضیح مسائل پایه ای شبکه لایتنینگ و چگونگی هماهنگی اجزای آن با یکدیگر جهت درک پروتکلی که در آینده اجرا خواهد شد، می پردازیم. بخش اول این مقاله به توضیح اجزای اصلی سازنده و چگونگی ترکیب آن ها برای ساختن “قراردادهای هوشمند” می پردازد که می توان گفت اولین نیاز برای درک شبکه لایتنینگ یعنی “کانال پرداخت دو طرفه” است.

lightningnetwork2 360x220 درک شبکه لایتنینگ، قسمت اول: ساخت کانال پرداخت دوطرفه بیتکوین

 بخش سازنده شماره1: تراکنش های تایید نشده

پروتکل بیتکوین در واقع شامل تراکنش هایی می شود که با تراکنش های قبلی و بصورت بالقوه با تراکنش های بعدی در ارتباط (یا متصل) هستند. هر تراکنش شامل ورودی ها و خروجی ها می شود. ورودی ها همان آدرس هایی ست که بیتکوین ها از آن ارسال شده اند، و خروجی ها آدرس هایی ست که بیتکوین ها به آن ها فرستاده شده اند. علاوه بر این، ورودی ها باید شامل اجزایی باشند که لازمه ارسال بیتکوین است؛ اجزایی مثل امضاها، که “مالکیت” مربوط به آدرس های ورودی را اثبات می کند. خروجی ها نیز الزامات جدیدی را ایجاد می کنند که باید در ورودی تراکنش بعدی قرار بگیرند.

یکی از ویژگی های کلیدی شبکه لایتنینگ این است که تقریبا از روی تراکنش های معمولی بیتکوین ساخته شده است. نکته متمایز کننده اینجاست که تراکنش های انجام شده در این شبکه، در واقع در کل شبکه بیتکوین منتشر نمی شود. به جای منتشر شدن تراکنش ها در شبکه بیتکوین، آن ها بصورت محلی در نودهای کاربران ذخیره می شوند، اما در هر لحظه که کاربر اراده کند، امکان انتشار آن ها بر روی شبکه وجود دارد.

در این سری مقالات، رنگ تراکنش های تایید نشده مشکی است. تراکنش های آبی رنگ بدان معناست که امکان انتشار آن توسط Alice وجود دارد، ولی تنها اگر تراکنش قبلیِ آن تایید شده باشد. تراکنش های قرمز رنگ هم بدان معناست که امکان انتشار آن توسط Bob وجود دارد، ولی تنها اگر تراکنش قبلیِ آن تایید شده باشد.

 در مثال زیر، Alice می تواند تراکنش تایید نشده خودش (اولین تراکنش از سمت چپ) را در هر زمان که بخواهد بر روی شبکه منتشر کند و دو بیتکوین برای Bob بفرستد. برای اینکه Bob بتواند به Carol یک بیتکوین بفرستد (و یکی هم بعنوان بقیه پول برای خودش بفرستد)، Alice باید تراکنش خودش را امضا و منتشر کرده باشد.

1 390x160 درک شبکه لایتنینگ، قسمت اول: ساخت کانال پرداخت دوطرفه بیتکوین

بخش سازنده شماره 2: حفاظت در برابر دوبار خرج شدن

دومین بخش سازنده مورد نیاز برای شبکه لایتنینگ نیاز به توضیح زیادی ندارد چرا که جز جدا نشدنی بیتکوین به حساب می آید و آن “حفاظت در برابر دوبار خرج شدن” یا “double-spend protection” است. اگر دو تراکنش (یا ورودی) به یک خروجی یکسان وابستگی داشته باشد، تنها یکی از آن ها می تواند تایید شود.

موضوع مهمی که اینجا باید در نظر گرفت این است که حتی با اینکه تراکنش های تایید نشده می تواند گیج کننده باشد، اما بدان معناست که تنها و تنها یکی از آن ها می تواند تایید شود.

دوبار خرج کردن: در مثال زیر، Alice باید تصمیم بگیرد که کدام تراکنش را امضا و منتشر کند؛ او نمی تواند هر دو را امضا و منتشر کند (اگر این کار را کند، تنها یکی از آن ها تایید می شود).

2 1 351x220 درک شبکه لایتنینگ، قسمت اول: ساخت کانال پرداخت دوطرفه بیتکوین

بخش سازنده شماره 3: چندامضایی

سومین بخش سازنده شبکه لایتنینگ نیز موضوع پیچیده ای نیست: آدرس های چندامضایی یا multisig addresses که به آن آدرس های P2SH هم می گویند.

آدرس های چندامضایی، آدرس هایی بیتکوینی هستند که برای خرج کردن بیتکوین های آن ها، به چندین کلید خصوصی نیاز است. آدرس های چندامضایی را میتوان به هر شکل مورد نظر تنظیم کرد. مثلا طوری تنظیم کرد که برای خرج کردن از یک آدرس، به دو کلید از سه کلید نیازمند باشد و یا به پانزده کلید از پانزده کلید نیاز داشته باشد، یا هر شرایط دیگری.

شبکه لایتنینگ معمولا از حالت چندامضایی “دو از دو” استفاده می کند. برای استفاده از بیتکوین های مربوط به آدرس های چندامضاییِ “دو از دو”، دو امضا مورد نیاز است.

چند امضایی: در این مثال، Alice و Bob یک آدرس چندامضایی ساخته اند که هر کدام از آن ها یک کلید از این آدرس را دارند. اگر Alice بخواهد از این آدرس بیتکوینی برداشت کند، تا زمانی که امضای Bob هم موجود نباشد، نمی تواند این کار را انجام دهد.

این نکته را نیز باید در نظر داشت که زمانی که امضایی به تراکنشی اضافه می شود، دیگر نمی توان محتوای آن تراکنش را تغییر داد.

3 1 390x137 درک شبکه لایتنینگ، قسمت اول: ساخت کانال پرداخت دوطرفه بیتکوین

بخش سازنده شماره 4: قفل های زمانی

چهارمین بخش سازنده، قفل زمانی است. قفل های زمانی می توانند بیتکوین ها را در یک خروجی قفل کنند تا تنها در زمانی مشخص در آینده قابل خرج کردن باشند.

دو نوع قفل زمانی وجود دارد: نوع مطلق که با نام CheckLockTimeVerify (بصورت مخفف: CLTV) از آن یاد می شود، و نوع نسبی که با نام CheckSequenceVerify (بصورت مخفف: CSV) شناخته می شود.

نوع CLTV، بیتکوین ها را تا زمان و تاریخ مشخصی در آینده، یا تا ارتفاع مشخصی از یک بلاک  (مثلا بلاک شماره 496889( قفل نگه می دارد. در عوض CSV از زمان نسبی استفاده می کند؛ هنگامی که یک خروجی CVS در بلاکچین ثبت شود، بعد از تعداد مشخص شده ای از بلاک ها، تازه می توان آن بیتکوین ها را دوباره خرج کرد.

قفل زمانی: در مثال زیر نمونه ای از یک قفل زمانی CSV را مشاهده می کنید.

4 390x144 درک شبکه لایتنینگ، قسمت اول: ساخت کانال پرداخت دوطرفه بیتکوین

بخش سازنده شماره 5: هش ها و ارزش ها در شبکه لایتنینگ

پنجمین و آخرین بخش سازنده، یکی از بنیادی ترین بخش های سازنده خود بیتکوین است. بطور خلاصه، یک “ارزش” یا “رمز” یک رشته طولانی و منحصر به فرد از اعداد است که حدس زدن آن حتی برای یک کامپیوتر، غیرممکن است. این “ارزش” (یا رمز) از طریق محاسباتی خاص، می تواند به رشته دیگری از اعداد تبدیل شود که به آن “هش” می گویند. نکته مهم اینجاست: هر فردی که آن “ارزش” را بداند، می تواند هش را نیز بسازد؛ اما این برعکس این کار امکان پذیر نیست. در واقع یک مسیر یکطرفه است.

این روش در بیتکوین نیز برای قفل کردن بیتکوین ها قابل استفاده است.  برای مثال، یک هش می تواند در یک خروجی گنجانده شود، و برای خرج کردن دوباره ی آن، نیاز باشد که ورودی بعدی شامل مقدار “ارزش” متناظر باشد.

ارزش یا رمز: در این سری از مقالات، “ارزش” یا “رمز” با یک کلید رنگی شماره دار نمایش داده می شود (در شکل زیر با نام SECRET/Value مشخص شده) و هش مربوط به آن مقدار، از طریق یک قفل شماره دار با همان رنگ نشان داده می شود (در شکل زیر با نام HASH مشخص شده است)

5 390x140 درک شبکه لایتنینگ، قسمت اول: ساخت کانال پرداخت دوطرفه بیتکوین

اولین چالش: کانال های پرداخت دو طرفه

مفهوم کانال های پرداخت، مدتی پیش از معرفی شبکه لایتنینگ نیز وجود داشته است. کانال های پرداخت معمول کاربردهای مختلفی دارند، اما یک محدودیت بزرگ هم دارند: یکطرفه هستند. آلیس می تواند تراکنش های خارج از زنجیره متعددی برای باب ارسال کند، اما باب نمی تواند از طریق “همان کانال” برای آلیس تراکنشی ارسال کند.

Poon و Dryja بعنوان ویژگی کلیدی شبکه لایتنینگ، کانال های پرداخت دوطرفه را پیشنهاد کردند.

باز کردن کانال در شبکه های لایتنینگ

برای راه اندازی یک کانال پرداخت دو طرفه، هر دو طرف باید بر روی یک تراکنش اولیه توافق کنند. این تراکنش اولیه (یا تراکنش گشاینده)، مشخص می کند که هر کدام از دو طرف، چه تعدادی بیتکوین در کانال سپرده می کنند.

فرض کنیم آلیس می خواهد برای باب یک بیتکوین بفرستد. از آنجایی که باب و آلیس می دانند که تراکنش های زیادی با یکدیگر خواهند داشت، یک کانال دو طرفه ساخته اند. (ارسال یک بیتکوین کامل ممکن است برای یک کانال پرداخت سنگین باشد، چرا که مورد مصرف آن بیشتر برای پرداخت های خرد است، اما این کار کاملا امکان پذیر است)

برای باز کردن این کانال، آلیس و باب هر کدام تعداد 5بیتکوین به یک آدرس چندامضاییِ دو-از-دو فرستاده اند (آدرسی که برای خرج کردن بیتکوین های آن، هر دو امضا مورد نیاز است). این امر، تراکنش اولیه یا “تراکنش گشاینده” است. همانطور که گفته شد، بیتکوین ها تنها زمانی قابل استفاده هستند که هم آلیس و هم باب یک تراکنش را امضا کنند.

علاوه بر این، هر دوی این افراد یک “ارزش” یا “رمز” (رشته ای از اعداد) می سازند و مقدار هش شده آن را با یکدیگر جابجا می کنند.

حال آلیس تراکنش بعدیِ تراکنش گشاینده را می سازد. به این تراکنش می گویند “تراکنش تعهد”. با این تراکنش تعهد، آلیس 4بیتکوین به خودش و 6بیتکوین به یک آدرس چندامضایی دیگر می فرستد. این آدرس چندامضایی دوم کمی محدودیت دارد؛ تنها زمانی باب می تواند به تنهایی از آن استفاده کند (یا به عبارت دیگر، فقط از طریق امضای خود، قفل آن را باز کند) که بعد از قرار گرفتن این تراکنش در بلاکچین، 1000بلاک دیگر استخراج شده باشد؛ در واقع در این آدرس از قفل CSV استفاده شده است. از طرف دیگر آیا آلیس می تواند به تنهایی و از طریق امضای خود قفل مورد نظر را باز کند؟ او تنها زمانی می تواند این کار را انجام دهد که “رمز” یا “ارزش” مربوط به باب را در اختیار داشته باشد. همان “رمزی” که باب مقدار هش شده ی آن را برای آلیس فرستاد، اما از آنجایی که از طریق مقدار هش شده ی یک “رمز” نمی توان به خود آن “رمز” دست پیدا کرد، پس آلیس امکان باز کردن قفل را ندارد.

آلیس تراکنش تعهد را در سمت خودش امضا می کند اما آن را در شبکه منتشر نمی کند، در عوض آن را به باب می دهد.

در این میان، باب هم تقریبا کاری مشابه انجام می دهد. او نیز یک “تراکنش تعهد” می سازد که طی آن 6بیتکوین برای خودش می فرستد و 4بیتکوین هم به یک آدرس چند امضایی جدید می فرستد. آلیس می تواند این قفل این آدرس را پس از گذر 1000 بلاک دیگر باز کند و یا باب می تواند با استفاده از “رمز” آلیس آن را باز کند.

حال باب این تراکنش تعهد را در سمت خود امضا می کند و آن را به آلیس می دهد.

بعد از تمام جابجایی های “نیمه معتبر” تراکنش های تعهد و هش های “رمز”ها، آلیس و باب “تراکنش گشاینده” را امضا و در شبکه منتشر می کنند تا مطمئن شوند که در بلاکچین ثبت شده. حال بطور رسمی کانال افتتاح شده است.

در این مرحله، باب و آلیس هر کدام می توانند تراکنش تعهد “نیمه معتبر” را که از طرف مقابل خود گرفته اند، امضا و منتشر کنند. اگر آلیس چنین کاری کند، باب فورا 6بیتکوین می گیرد و اگر باب چنین کاری کند، آلیس فورا 4بیتکوین دریافت می کند. اما هرکدام از آن ها که تراکنش تعهد را امضا و منتشر کنند، باید به اندازه 1000بلاک صبر کنند تا آدرس چند امضایی را بتوانند باز کنند و باقی بیتکوین ها را دریافت کنند. این نکته کلیدی کانال پرداخت است: هیچ کدام نیمه تراکنش خود را امضا و منتشر نکنند.

66 217x220 درک شبکه لایتنینگ، قسمت اول: ساخت کانال پرداخت دوطرفه بیتکوین

بروزرسانی کانال

حال بعد از مدتی باب می خواهد یک بیتکوین را به آلیس پس بدهد و به حالتی برگردند که هر کدام 5بیتکوین داشتند. برای اجرایی شدن چنین موضوعی آن ها باید دو کار را انجام دهند.

اول: هر دو باید مراحل توضیح داده شده ی بالا را تکرار کنند (به غیر از تراکنش گشاینده که دیگر ساخته و در بلاکچین ثبت شده است). ایندفعه باب و آلیس برای خود مقدار 5بیتکوین را تعیین می کنند و هر دوی آن ها 5بیتکوین به آدرس چند امضایی می فرستند. شرایط این آدرس های چند امضایی نیز مشابه قبل است؛ فقط اینکه این بار “رمز”های متفاوتی می خواهند، آلیس و باب به یکدیگر هش های جدیدی می دهند. هر دو، نیمه تراکنش تعهد خود را امضا کرده و برای دیگری می فرستند.

77 184x220 درک شبکه لایتنینگ، قسمت اول: ساخت کانال پرداخت دوطرفه بیتکوین

دوم: آلیس و باب اولین “رمز” خود را برای یکدیگر می فرستند.

در این مرحله، دوباره آلیس و باب می توانند تراکنش تعهد “نیمه معتبر” خود را که به تازگی دریافت کرده اند امضا و منتشر کنند. طرف مقابلشان به سرعت 5بیتکوین دریافت می کند و فرد منتشر کننده باید به اندازه 1000بلاک منتظر بماند. بدین ترتیب کانال آن ها بروزرسانی شد.

اما چه چیزی مانع باب برای انتشار تراکنش تعهد قبلی می شود؟ آن تراکنش تعهد باعث شد که او 6بیتکوین به جای 5بیتکوین دریافت کند.
چیزی که مانع وی می شود، اولین “رمز” یا “ارزش” اوست که حالا آن را به آلیس داده است.

باب دیگر نمی تواند به راحتی تراکنش تعهد قبلی را امضا و منتشر کند، چرا که حالا آلیس اولین “رمز” باب را داد. اگر باب چنین کاری کند، او سریعا 4بیتکوین برای آلیس فرستاده است و باید 1000بلاک منتظر بمانده تا 6بیتکوین خود را بگیرد. مشکل اینجاست که حالا که آلیس “رمز” باب را می داند، ایندفعه می تواند به باب نارو بزند و 6بیتکوین دیگر را نیز برای خود بردارد. از آنجایی که باب نیز “رمز” آلیس را دارد، همین اتفاقات و همین مراحل برای آلیس نیز صادق است.

این ها بدان معناست که هر دو طرف در یک کانال پرداخت، انگیزه کافی برای درست رفتار کردن را دارند؛ و البته تنها آخرین وضعیت کانال را امضا و منتشر خواهند کرد.

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

ادامه دارد…

 

نمایش بیشتر

نوشته های مشابه

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید

بستن
بستن