میثم رضایی | 1397.01.19

لایتنینگ چیست؟

اگر تا الان با بیت کوین و دیگر رمزارز ها کار کرده باشید، احتمالا با کلمات جدیدی از جمله Segwit، لایتنینگ، انشعاب سخت (Hard Fork)، انشعاب نرم (Soft Fork) و … آشنا شده اید که اغلب این کلمات در اصل به عنوان راه حل های مستقیم و غیر مستقیم برای رفع مشکلات بیت کوین مطرح شده اند. در این مقاله در مورد لایتنینگ که محتمل ترین راه حل از دید بسیاری از کاربران و تیم توسعه بیت کوین هسته (bitcoin core) است صحبت خواهیم نمود.

لایتنینگ (Lightning) چیست و چه مشکلی از شبکه بیت کوین را حل می کند؟

لایتنینگ (Lightning و یا LN) چیست؟

Lightning در اصل یک روش انجام تراکنش بین کاربران (به وسیله بهره گیری از قرارداد های هوشمند) است که بیشتر تراکنش ها را به صورت Off-Chain (خارج از زنجیره اصلی) انجام خواهد داد که این تراکنش ها بین دو و یا چند کاربر انجام خواهد پذیرفت. برای درک بهتر، یک سناریو را با هم پیش خواهیم برد:

ارسال مقداری بیت کوین به یک آدرس چند امضایی

فرض کنید که Alice می خواهد هر روز صبح یک فنجان قهوه از یک کافی شاپ تهیه کند؛ اگر Alice بخواهد برای هر بار خرید، یک تراکنش در زنجیره بلاک اصلی BTC (Bitcoin Core) ایجاد کند مبلغ کارمزدی که می پردازد به مراتب از خود مبلغ یک فنجان قهوه بیشتر خواهد شد، اما با استفاده از تکنولوژی لایتنینگ او در ابتدا یک مبلغی را به صورت پیش فرض به یک آدرس چند امضایی (Multi Signature Address) ارسال می کند  که در نقش یک گاوصندوق عمل می نماید ( یک کلید خصوصی این آدرس در اختیار آلیس و دیگری در اختیار کافی شاپ است) و این تراکنش را در شبکه اصلی BTC به عنوان تراکنش On-Chain پخش می کند (از این طریق آلیس یک کانال پرداخت با کافی شاپ ایجاد نموده است).

ایجاد تراکنش

سپس آلیس با همکاری کافی شاپ تراکنشی ایجاد می کند (چون به امضای هر دو طرف نیاز است و امکان انتقال تنها در صورتی وجود دارد که هر دو طرف بر روی یک تراکنش توافق داشته باشند) که کل مبلغ ارسال شده را به آدرس خود آلیس برگرداند (اما این تراکنش را در شبکه اصلی BTC پخش نمی کنند و به صورت Off-Chain نگه می دارند، در اصل این تراکنش وضعیت موجودی هر طرف را نشان می دهد).

به طور مثال آلیس 0.5 BTC به آدرس مشترک ارسال کرده (به صورت On-Chain) و بلافاصله تراکنشی از آدرس مشترک به آدرس Alice با همان مبلغ 0.5 BTC ایجاد می کنند (به صورت Off-Chain) که هر دو طرف (آلیس و کافی شاپ( آن را با کلید های خصوصی خود امضا می کنند.

لایتنینگ (Lightning) چیست و چه مشکلی از شبکه بیت کوین را حل می کند؟

Copyrighted by CoinIran

حال آلیس یک قهوه به مبلغ 0.005 BTC خریداری میکند. در اینجا مجددا آلیس و کافی شاپ تراکنش جدیدی ایجاد می کنند که مبلغ 0.495 BTC به آدرس آلیس، و مبلغ 0.005 BTC به آدرس کافی شاپ ارسال می کند (این تراکنش هم به صورت Off-Chain خواهد بود) و تراکنش (های) Off-Chain قبلی را غیر معتبر می کند و وضعیت و موجودی هر دو طرف (که هر دو بر سر آن توافق کرده اند) را تغییر می دهد.

این پروسه می تواند تا جایی ادامه پیدا کند که مقدار سرمایه گذاری شده اولیه تمام شود و یا این که هر کدام از دو طرف دیگر علاقه ای به باز نگه داشتن کانال نداشته باشند. در این صورت هر کدام از طرفین می تواند کانال را بسته و آخرین تراکنشی که هر دو طرف بر سر آن توافق داشته اند را به شبکه اصلی BTC ارسال کند (On-Chain).

لایتنینگ (Lightning) چیست و چه مشکلی از شبکه بیت کوین را حل می کند؟

Copyrighted by CoinIran

سوال

شاید این سوال برایتان پیش بیاید که آیا آلیس نیاز دارد که به تمامی افرادی که به آنها می خواهد BTC ارسال کند یک کانال بزند و مقداری پول را در آنجا نگهداری کند؟ برای پاسخ به این سوال به سناریوی دوم توجه کنید:

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

  1. در هنگام انجام تراکنش توسط Bob، آلیس می بایست آنلاین باشد، در غیر این صورت استفاده از کانال آلیس برای Bob غیر ممکن است
  2. Alice مقدار بیت کوینی که Bob می خواهد انتقال دهد را باید در کانال ارتباطی خود با کافی شاپ داشته باشد.
لایتنینگ (Lightning) چیست و چه مشکلی از شبکه بیت کوین را حل می کند؟

Copyrighted by CoinIran

در نهایت آلیس برای خدمتی که به باب کرده است از او کارمزدی دریافت می کند. حال بیایم موارد فوق را به ترتیب بررسی کنیم و ببینیم که چه معایبی هر کدام می توانند داشته باشند:

  1. آنلاین بودن واسطه ها

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

  1. توانایی مالی واسطه ها

فرض کنید که Bob می خواهد 1 عدد بیت کوین را به شخصی بفرستد. برای این منظور او دو راه دارد:

  1. یک تراکنش به صورت On-Chain ایجاد نماید و بیت کوین را مستقیما به فرد بفرستد (اما نکته اینجاست که شاید Bob بیت کوین اضافی نداشته باشد و تمامی بیت کوین های او در کانال های ایجاد شده در سیستم لایتنینگ قفل شده باشند، به همین دلیل او مجبور است از کانال های قبلی خود که باز هستند استفاده کند و راه حل دوم را پیش بگیرد.
  2. او می بایست مسیر یابی کند و افرادی را پیدا کند که هم آنلاین باشند و هم یک بیت کوین در کانال های خود داشته باشند.

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

نوشته مرتبط: صرافی های متمرکز چه خطراتی برای کاربران دارند

لایتنینگ (Lightning) چیست و چه مشکلی از شبکه بیت کوین را حل می کند؟

Copyrighted by CoinIran

مسیر یابی (Routing)

مشکل اساسی دیگری که در هنگام مسیر یابی وجود دارد، وضعیت دارایی نود ها است، برای درک بهتر به مثال زیر توجه کنید:

فرض کنید در یک شبکه لایتنینگ میلیون ها Node وجود دارد که این Node ها به همدیگر به صورت مستقیم و غیر مستقیم متصل هستند. در هنگام شروع یک تراکنش وقتی شما مسیر یابی می کنید هم ارتباطات بین کاربران اهمیت دارد و هم مقدار دارایی هر کاربر واسط. حال سوال اصلی این است:

در شبکه ای که قرار است هزاران تراکنش در ثانیه انجام شود و هر تراکنش وضعیت دارایی کاربران را تغییر می دهد، شما چگونه می توانید از آخرین وضعیت هر کاربر مطلع شوید؛ به زبان دیگر این کاربران باید دائما حجم اطلاعات بسار بالایی را به هم انتقال دهند، زیرا این اطلاعات در هر ثانیه و در تمامی شبکه بیت کوین در حال تغییر هستند. ایا اصلا چنین امکانی در یک سطح جهانی و به بزرگی شبکه بیت کوین وجود دارد؟

برای کانال های ارتباطی هر کاربر هم دقیقا همین سناریو صدق می کند و باید همین اطلاعات نیز در کسری از ثانیه بین تمامی کاربران مبادله شود (از باز و بسته شدن کانال های همدیگر مطلع باشند). این امر در اصل شبیه روش routing در روتر های شبکه ای و پروتکل TCPIP است، با این تفاوت که در روتر ها پروتکل های روتینگ بسیار قوی وظیفه انجام چنین کاری را بر عهده دارند و همچنین مفهومی به نام “دارایی کاربر در لحظه” وجود ندارد.

کارمزد واسطه ها

کارمزد مسئله جدیدی نیست و می توان با آن کنار آمد، اما اگر نود های واسط (Nodes) برای رسیدن به یک مقصد زیاد شوند، این مسئله خود می تواند مشکل ساز شود.

صرف نظر از این موضوع که آیا لایتنینگ جواب خواهد داد، این راه حل یکی از خصوصیات اصلی تکنولوژی زنجیره بلاک ها را تحت الشعاع قرار می دهد، و آن قانون “مطلع بودن تمامی نود ها از تمامی تراکنش ها ” است، به این معنی که تنها نود های به کار گرفته شده در هر تراکنش از آن مطلع می شوند. به زبان دیگر باید گفت که لایتنینگ بیشتر یک شبکه مش (Mesh) است که از تکنیک روتینگ استفاده می کند که این مسئله به شدت با اصل تکنولوژی زنجیره بلاک ها  در تضاد می باشد.

(این مقاله تلاش بر تایید و یا رد تکنولوژی لایتنینگ ندارد، و صرفا از لحاظ فنی آن را مورد بررسی قرار داده است)

نوشته مرتبط: حریم خصوصی در Lightning