بلاکچین چه بسازیم؟

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

با تجزیه و تحلیل پروژه های بلاک چین متعدد (Bitshares، Hyperledger، Exonum، Ethereum، Bitcoin، و غیره)، متوجه شدم که از نقطه نظر فنی، همه آنها بر اساس اصول یکسان ساخته شده اند. بلاک‌چین‌ها یادآور خانه‌هایی هستند که علی‌رغم تنوع طرح‌ها، دکورها و اهداف، فونداسیون، دیوارها، سقف، پنجره‌ها، درها دارند که به روش‌های خاصی به یکدیگر متصل هستند. و اگر اصول اولیه طراحی ساختمان را درک کنید و خواص مواد مورد استفاده را بدانید، می توانید هدف مورد نظر یک خانه خاص را تعیین کنید. در حال حاضر، وضعیتی در مورد بلاک چین به وجود آمده است که همه درباره آن شنیده اند، اما تعداد کمی از مردم معماری و اصول عملکرد را درک می کنند. بنابراین، درک نادرستی از چرایی و چگونگی استفاده از فناوری‌های بلاک چین وجود دارد.

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

بنابراین، بیایید به یاد بیاوریم که بلاک چین در ابتدا چه مشکلاتی را حل کرد.

من مطمئن هستم که بسیاری در مورد یک پایگاه داده توزیع شده، غیرمتمرکز، عمومی و تغییرناپذیر خواهند گفت. اما چرا این همه لازم بود؟

من ترجیح می‌دهم مطالعه هر فناوری را با مطالعه استانداردها شروع کنم، زیرا همه مقالات و کتاب‌های مربوط به موضوع مورد مطالعه بر اساس آنها هستند. اما در حال حاضر هیچ استانداردی برای بلاک چین وجود ندارد، ISO فقط ایجاد کرده است کمیته ها برای توسعه آنها در حال حاضر، هر پروژه بلاک چین عمومی سند کاغذ سفید خود را دارد که اساساً یک مشخصات فنی است. اولین پروژه بلاک چین شناخته شده عمومی، شبکه بیت کوین است. به وب سایت رسمی شبکه بروید و نگاه کن جایی که همه چیز شروع شد

چالش بلاک چین

بنابراین، وظیفه ای که بلاک چین در شبکه پیشگام بیت کوین حل کرد، انجام یک انتقال مطمئن مالکیت دارایی های دیجیتال (دارایی) در یک محیط غیر قابل اعتماد بدون واسطه است. به عنوان مثال، در شبکه بیت کوین، یک دارایی دیجیتال، سکه های دیجیتال بیت کوین است. و تمام راه حل های فنی بیت کوین و سایر بلاک چین ها به حل این مشکل برمی گردد.

مشکلاتی که بلاک چین حل می کند

فرض کنید یک سازمان مالی خاص می گوید که شبکه ای در سراسر جهان ایجاد کرده است که با کمک آن می توان پول را به هر شخصی منتقل کرد. آیا او را باور خواهید کرد؟ اگر این سازمان Visa یا MasterCard باشد، به احتمال زیاد شما آن را باور خواهید کرد، اما اگر، به طور نسبی، AnonymousWorldMoney، احتمالاً باور نمی کنید. چرا؟ اما از آنجا که ما به خوبی می دانیم که سیستم های توزیع شده توسط شرکت های خصوصی چگونه ساخته می شوند، برای چه اهدافی و این می تواند منجر به چه چیزی شود. بیایید نگاهی دقیق‌تر به مشکلات این گونه سیستم‌ها و نحوه حل آنها با استفاده از فناوری‌های بلاک چین بیندازیم.

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

بلاکچین چه بسازیم؟

در دنیای ایده آل، این طرح عالی عمل می کند، اما در دنیای ما مشکلات زیر به وجود می آید:

  1. مشکل شناسایی شرکت کنندگان از یک سو و نیاز به ناشناس بودن تراکنش ها از سوی دیگر. آن ها شما باید پول را به یک گیرنده خاص و به گونه ای انتقال دهید که هیچ کس به جز شرکت کنندگان در معامله از این تراکنش مطلع نباشد. بانک ها دارای شماره حساب و کارت های بانکی مرتبط با یک شخص حقیقی یا حقوقی خاص هستند و رازداری بانکی از اطلاعات تراکنش محافظت می کند. و چه کسی تضمین می کند که AnonymousWorldMoney مشروط از داده های شخصی و اطلاعات تراکنش برای اهداف خود استفاده نمی کند؟
  2. چگونه مطمئن شویم که گیرنده دقیقاً مبلغی را که به او واریز شده است دریافت کرده است؟ به طور نسبی، فرستنده 100 دلار انتقال داد و گیرنده 10 دلار دریافت کرد. فرستنده با رسید خود به دفتر AnonymousWorldMoney می آید و منشی نسخه خود را نشان می دهد که در آن نوشته شده است که فرستنده فقط 10 دلار انتقال داده است.
  3. مشکل یک محیط غیرقابل اعتماد، به عنوان مثال، کلاهبرداری به نام دوبار خرج کردن. یک شرکت‌کننده بی‌وجدان می‌تواند چندین بار موجودی خود را خرج کند تا زمانی که پرداخت به همه سرورها تکرار شود. قضیه CAPالبته هیچ کس لغو نشد و در نهایت توافق حاصل خواهد شد، اما کسی برای خدمات یا کالاهای ارائه شده پولی دریافت نخواهد کرد. بنابراین، اگر اعتماد کاملی به سازمان پرداخت یا مشارکت کنندگان در تراکنش ها وجود نداشته باشد، لازم است شبکه ای نه بر اساس اعتماد، بلکه بر اساس رمزنگاری ایجاد شود.
  4. AnonymousWorldMoney مشروط دارای تعداد محدودی سرور است که ممکن است ناخواسته یا به دلیل نیت مخرب در دسترس نباشند.
  5. AnonymousWorldMoney کمیسیون ملموس خود را می گیرد.
  6. امکان کنترل. در حین کار بیت کوین، مشخص شد که مردم نه تنها می خواهند سکه ها را به یکدیگر منتقل کنند، بلکه می خواهند شرایط مختلف تراکنش را نیز بررسی کنند، سناریوهای کاری را برنامه ریزی کنند، بسته به شرایط به طور خودکار اقدامات را انجام دهند و غیره.

چگونه بلاک چین این مشکلات را حل می کند

  1. شناسایی شرکت کنندگان با استفاده از یک جفت کلید انجام می شود: خصوصی و عمومی، و الگوریتم امضای دیجیتال به طور منحصر به فرد فرستنده و گیرنده را شناسایی می کند و هویت آنها را ناشناس می گذارد.
  2. تراکنش ها در بلوک ها جمع آوری می شوند، هش بلوک محاسبه شده و در بلوک بعدی نوشته می شود. این توالی ثبت هش در بلوک ها نام خود را به فناوری بلاک چین می دهد و همچنین تغییر/حذف نامحسوس بلوک ها یا تراکنش های فردی از بلوک ها را غیرممکن می کند. بنابراین، اگر یک تراکنش در بلاک چین گنجانده شود، می توانید مطمئن باشید که داده های آن بدون تغییر باقی می مانند.
  3. با دستیابی به اجماع شبکه ای در مورد اینکه کدام داده ها معتبر در نظر گرفته شوند و کدام ها باید کنار گذاشته شوند، از تقلب در هزینه های مضاعف جلوگیری می شود. در شبکه بیت کوین، اجماع با اثبات کار (PoW) به دست می آید.
  4. قابلیت اطمینان شبکه با این واقعیت حاصل می شود که بلاک چین عمومی است، جایی که هر شرکت کننده می تواند گره خود را اجرا کند، یک نسخه کامل از بلاک چین را دریافت کند و علاوه بر این، به طور مستقل شروع به بررسی صحت تراکنش ها کند. لازم به ذکر است که بلاک چین های مدرن ساخت نه تنها بلاک چین های عمومی (باز) بلکه خصوصی (بسته) و همچنین استفاده از طرح های ترکیبی را ممکن می سازد.
  5. بلاک چین به طور کامل از شر کمیسیون خلاص نمی شود، زیرا ... باید به افرادی که از شبکه پشتیبانی می کنند پول پرداخت کنید، اما در بلاک چین نیاز به کمیسیون به قدری قانع کننده ثابت شده است که در ضرورت آن شکی وجود ندارد.
  6. بلاک چین های مدرن قابلیت پیاده سازی منطق تجاری را دارند که در بلاک چین به آن قراردادهای هوشمند می گویند. منطق قراردادهای هوشمند در زبان های مختلف سطح بالا پیاده سازی می شود.

در ادامه این راه حل ها را با جزئیات بیشتری بررسی خواهیم کرد.

معماری بلاک چین

اجزای بلاک چین

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

بلاکچین چه بسازیم؟

چرخه عمر معامله

بیایید به چرخه عمر تراکنش نگاه کنیم و آن را تکه تکه تجزیه کنیم:

بلاکچین چه بسازیم؟

فناوری های بلاک چین

اجازه دهید با جزئیات بیشتری در مورد راه حل های فنی و ارتباطات آنها با یکدیگر صحبت کنیم.

شناسایی

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

Private key: 0a78194a8a893b8baac7c09b6a4a4b4b161b2f80a126cbb79bde231a4567420f
Public key: 0579b478952214d7cddac32ac9dc522c821a4489bc10aac3a81b9d1cd7a92e57ba
Address: 0x3814JnJpGnt5tB2GD1qfKP709W3KbRdfb27V

برای ایجاد امضای دیجیتال در بلاک چین، از الگوریتمی بر اساس منحنی های بیضوی استفاده می شود: الگوریتم امضای دیجیتال منحنی بیضی (ECDSA). برای کارکرد آن، کلید خصوصی (عدد 256 بیتی) معمولاً به صورت تصادفی گرفته می شود. تعداد گزینه های کلید 2 به توان 256 است، بنابراین می توان در مورد عدم امکان عملی تطبیق مقادیر کلیدهای خصوصی صحبت کرد.

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

مقالات زیادی با جزئیات در مورد رمزنگاری مورد استفاده در بلاک چین وجود دارد، به عنوان مثال: بیت کوین به طور خلاصه – رمزنگاری

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

بلاکچین چه بسازیم؟

یا می توانید از روش های قابل اطمینان تری استفاده کنید، به عنوان مثال، مهر کردن مقدار کلید خصوصی بر روی توکن ها:

بلاکچین چه بسازیم؟

معاملات

جزئیات بیشتر در مورد ساختار تراکنش را می توان در مقاله یافت بیت کوین به طور خلاصه – تراکنش. برای ما مهم است که بدانیم هر تراکنش حداقل دارای داده های زیر است:

From: 0x48C89c341C5960Ca2Bf3732D6D8a0F4f89Cc4368 - цифровой адрес отправителя
To: 0x367adb7894334678b90аfe7882a5b06f7fbc783a - цифровой адрес получателя
Value: 0.0001 - сумма транзакции
Transaction Hash: 0x617ede331e8a99f46a363b32b239542bb4006e4fa9a2727a6636ffe3eb095cef - хэш транзакции

سپس، تراکنش با یک کلید خصوصی امضا شده و ارسال می شود (به جزئیات عملکرد پروتکل مراجعه کنید بیت کوین در یک پروتکل خلاصه) به تمام گره های بلاک چین که تراکنش ها را از نظر اعتبار بررسی می کنند. الگوریتم تأیید تراکنش غیر پیش پا افتاده است و شامل دو ده قدم.

بلوک های تراکنش

پس از بررسی اعتبار تراکنش ها، گره ها بلوک هایی از آنها تشکیل می دهند. علاوه بر تراکنش ها، هش بلوک قبلی و یک عدد (Nonce counter) در بلوک نوشته می شود و هش بلاک فعلی با استفاده از الگوریتم SHA-256 محاسبه می شود. هش باید شرایط پیچیدگی را ایجاد کرده باشد. به عنوان مثال، در شبکه بیت کوین، سختی هش به طور خودکار هر 2 هفته بسته به قدرت شبکه تغییر می کند به طوری که تقریباً هر 10 دقیقه یک بار یک بلوک ایجاد می شود. پیچیدگی با شرط زیر تعیین می شود: هش یافت شده باید کمتر از یک عدد از پیش تعیین شده باشد. اگر این شرط برآورده نشد، 1 به Nonce اضافه می شود و کار محاسبه هش تکرار می شود. برای انتخاب هش، از فیلد Nonce استفاده می شود، زیرا این تنها داده موجود در بلوک است که می توان آن را تغییر داد؛ بقیه باید بدون تغییر باقی بمانند. یک هش معتبر باید تعداد معینی از صفرهای ابتدایی داشته باشد، مانند یکی از هش های واقعی:

000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91

یافتن موفقیت آمیز هش اثبات کار انجام شده (Proof-of-Work، PoW) برای شبکه های بیت کوین یا اتریوم است. فرآیند یافتن هش ها را ماینینگ می نامند، مشابه استخراج طلا. نام کاملاً ماهیت فرآیند را مشخص می کند، زیرا یک جستجوی ساده از گزینه ها وجود دارد، و اگر کسی یک هش مناسب پیدا کند، این واقعا شانس است. این مانند یافتن یک قطعه طلای واقعی در هزاران سنگ زباله است. پاداش بلاک اکنون 12.5 بیت کوین است و اگر آن را در نرخ فعلی بیت کوین 3900 دلار ضرب کنید، بیش از یک کیلوگرم طلای خالص دریافت خواهید کرد. چیزی برای مبارزه وجود دارد!

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

بلاکچین چه بسازیم؟

بلاک چین با بلوکی شروع می شود که هنوز هش بلوک قبلی را ندارد. تنها یک بلوک از این دست در بلاک چین وجود دارد و نام خود را بلوک جنسیس دارد. بلاک های باقیمانده ساختار یکسانی دارند و فقط در تعداد تراکنش ها با هم تفاوت دارند. تراکنش ها و بلوک های واقعی که در حال حاضر در بیت کوین یا اتریوم ایجاد می شوند را می توان در آن مشاهده کرد Block Explorer.

حجم بلاک ها در بیت کوین به 1 مگابایت محدود می شود و با حداقل اطلاعات در یک تراکنش حدود 200 بایت، حداکثر تعداد تراکنش ها در یک بلوک می تواند حدود 6000 باشد. اتفاقاً از اینجا عملکرد بیت کوین دنبال می شود که همه به آن می خندند: یک بلاک تقریباً هر 10 دقیقه یک بار ایجاد می شود * 60 ثانیه = 600 ثانیه، که عملکرد رسمی حدود 10 TPS را ارائه می دهد. اگرچه در واقع، این بهره وری نیست، بلکه یک الگوریتم کار به طور عمدی است. در اتریوم، برای رقابت، آنها به سادگی زمان تولید بلاک را 15 ثانیه کردند. و بهره وری به طور رسمی افزایش یافت. بنابراین، در بلاک چین هایی که از PoW به عنوان اجماع استفاده می کنند، اصلاً مقایسه عملکرد منطقی نیست، زیرا این به طور مستقیم به پیچیدگی محاسبه کش بستگی دارد که می تواند به هر مقداری نسبت داده شود.

چنگال

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

بلاکچین چه بسازیم؟

بعد چه اتفاقی می افتد؟ در مرحله بعد، بخشی از شبکه روی بلوک N+2 از یک زنجیره و بخشی از زنجیره دیگر شروع به کار می کند:

بلاکچین چه بسازیم؟

یکی از این بلوک‌ها زودتر پیدا می‌شود و به بلاک چین ارسال می‌شود، و سپس، طبق قوانین، بلاک چین باید به زنجیره طولانی‌تری سوئیچ کند و همه تراکنش‌ها را از بلاک جایگزین لغو کند:

بلاکچین چه بسازیم؟

در همان زمان، ممکن است شرایطی ایجاد شود که تراکنش یک شرکت‌کننده فقط در یکی از بلوک‌های فورک باشد که لغو شده است. بنابراین، برای اطمینان از ثبت تراکنش مورد نظر در بلاک چین، یک توصیه کلی وجود دارد - قبل از اعتماد به تراکنش، باید منتظر بمانید تا چند بلوک بعدی به بلاک چین اضافه شود. توصیه‌ها برای اینکه چند بلاک برای بلاک چین‌های مختلف منتظر بمانید متفاوت است. به عنوان مثال، برای شبکه بیت کوین حداقل 2 بلوک، حداکثر 6 بلوک است.

همان تصویر با فورک های بلوک در طول حمله به اصطلاح 51٪ مشاهده می شود - این زمانی است که گروهی از ماینرها سعی می کنند یک زنجیره بلاک جایگزین ایجاد کنند و به دنبال لغو زنجیره با تراکنش های جعلی خود هستند. اگرچه در حال حاضر، به جای تقلب، سود بیشتری دارد که قدرت خود را صرف استخراج صادقانه کنید.

اجماع، وفاق

برای ثبت یک بلوک در بلاک چین، شبکه باید به یک اجماع برسد. بیایید وظیفه دستیابی به اجماع در شبکه های ارتباطی رایانه ای را به یاد بیاوریم. مشکل به عنوان وظیفه ژنرال های بیزانسی BFT فرموله شده است (تحمل گسل بیزانس). با حذف توصیف زیبا از مشکلات ارتش بیزانس، مشکل را می توان به صورت زیر فرموله کرد: چگونه گره های شبکه می توانند به یک نتیجه مشترک برسند اگر برخی از گره های شبکه بتوانند عمدا آنها را تحریف کنند. الگوریتم های موجود برای حل مشکل BFT نشان می دهد که اگر کمتر از 1/3 کلاهبردار وجود داشته باشد، شبکه می تواند به درستی کار کند. چرا اجماع BFT برای شبکه بیت کوین اعمال نشده است؟ چرا استفاده از PoW ضروری بود؟ چند دلیل وجود دارد:

  • BFT با مجموعه کوچک ثابتی از گره ها به خوبی کار می کند، اما در یک بلاک چین عمومی تعداد گره ها غیرقابل پیش بینی است و علاوه بر این، گره ها را می توان به صورت تصادفی روشن و خاموش کرد.
  • ایجاد انگیزه در افراد برای راه اندازی گره های بلاک چین ضروری است. برای این کار باید به مردم پاداش داد. در BFT به طور رسمی چیزی برای دریافت جایزه وجود ندارد، اما پاداش در PoW برای همه در سطح بصری مشخص است: برای برق مصرف شده توسط پردازنده در فرآیند یافتن هش بلاک.

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

  • PoS (Proof-of-Stake) - در بلاک چین Hyperledger
  • DPoS (Delegated Proof-of-Stake) - در بلاک چین BitShares
  • تغییرات BFT: SBFT (BFT ساده شده) و PBFT (BFT عملی)، به عنوان مثال در بلاک چین اگزونوم

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

اجماع PoS مبتنی بر انتخاب گره‌ای است که می‌تواند بسته به میزان وجوه موجود در حساب، یا بهتر بگوییم نه در حساب، بلکه در وثیقه، یک بلوک با تراکنش‌ها در بلاک چین بنویسد. هر چه وجوه بیشتری به عنوان وثیقه داشته باشید، احتمال بیشتری وجود دارد که شبکه گره شما را برای نوشتن یک بلوک انتخاب کند. در صورت نامعتبر بودن بلوک، وجه سپرده برگردانده نمی شود. این محافظت در برابر تقلب را فراهم می کند. تغییرات زیر از PoS وجود دارد:

  • اجماع Delegated PoS (DPoS) شرکت کنندگان را به «رای دهندگان» و «اعتبارکنندگان» تقسیم می کند. دارندگان سکه (شرکت کنندگان در رای گیری) قدرت خود را برای تأیید و ثبت تراکنش های روی بلاک چین به سایر شرکت کنندگان واگذار می کنند. بنابراین، اعتبارسنجی‌ها تمام کارهای محاسباتی را انجام می‌دهند و برای آن پاداش دریافت می‌کنند و حضور شرکت‌کنندگان در رای‌گیری، صداقت اعتبارسنجی‌کنندگان را تضمین می‌کند، زیرا آنها را می توان در هر زمان تغییر داد.
  • اجماع LPoS (اجاره اثبات سهام) به شما امکان می دهد وجوه خود را به گره های دیگر اجاره دهید تا شانس بیشتری برای اعتبارسنجی بلوک ها داشته باشند. که شما می توانید بدون شرکت در تایید واقعی تراکنش و استخراج بلوک، کمیسیون تراکنش ها را دریافت کنید.

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

  • PoET (اثبات زمان سپری شده)
  • PoC (اثبات ظرفیت)
  • PoB (اثبات سوختگی)
  • PoWeight (اثبات وزن)
  • PoA (اثبات فعالیت) – PoW + PoS
  • PoI (Proof-of-Importans)

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

بلاک چین عمومی

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

بلاک چین خصوصی

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

کنسرسیوم بلاک چین

آنجا کنسرسیوم یا بلاک چین با مجوز عمومی. اینها بلاک چین هایی هستند که هر کسی می تواند برای مشاهده به آنها متصل شود، اما یک شرکت کننده می تواند اطلاعات اضافه کند یا گره خود را فقط با اجازه سایر شرکت کنندگان متصل کند. چنین بلاک چین هایی توسط سازمان ها ساخته می شوند تا اعتماد مشتریان یا مصرف کنندگان محصولات یا جامعه را به طور کلی افزایش دهند. در اینجا، قابلیت اطمینان نیز با وجود اعتماد بین شرکت‌کنندگان و الگوریتم‌های اجماع PoS و BFT به دست می‌آید.

قراردادهای هوشمند

بلاک چین‌هایی که پس از بیت‌کوین پیاده‌سازی می‌شوند، تا حدی توانایی اجرای قراردادهای هوشمند را اضافه کرده‌اند. در اصل، قرارداد هوشمند تراکنشی است که در آن کد برنامه برای اجرا قرار می گیرد. قراردادهای هوشمند در شبکه اتریوم در EVM (ماشین مجازی اتریوم) اجرا می شود. برای شروع اجرای یک قرارداد هوشمند، باید صراحتاً توسط تراکنش دیگری راه اندازی شود یا پیش شرط های اجرا باید برآورده شود. نتایج اجرای قرارداد هوشمند نیز در بلاک چین ثبت خواهد شد. دریافت داده از خارج از بلاک چین ممکن است، اما بسیار محدود است.

چه منطق تجاری را می توان با استفاده از یک قرارداد هوشمند پیاده سازی کرد؟ در واقع، چیز زیادی وجود ندارد، به عنوان مثال، بررسی شرایط با استفاده از داده های بلاک چین، تغییر صاحبان دارایی های دیجیتال بسته به این شرایط، ثبت داده ها در یک ذخیره سازی دائمی در بلاک چین. منطق در یک Solidity زبان سطح بالا پیاده سازی شده است.

یک مثال کلاسیک از عملکرد که با استفاده از قراردادهای هوشمند پیاده سازی می شود، صدور توکن برای ICOها است. به عنوان مثال، من یک قرارداد هوشمند برای صدور یک الکس توکن 500 کوچک اجرا کردم. توسط پیوند در Etherscan است

کد منبع قرارداد هوشمند به زبان Solidity

pragma solidity ^0.4.23;
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
**/
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
if (a == 0) {
return 0;
}
c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
**/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
// uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return a / b;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
**/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
**/
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
assert(c >= a);
return c;
}
}
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
**/
contract Ownable {
address public owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender account.
**/
constructor() public {
owner = msg.sender;
}
/**
* @dev Throws if called by any account other than the owner.
**/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
**/
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0));
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
}
/**
* @title ERC20Basic interface
* @dev Basic ERC20 interface
**/
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
/**
* @title ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/20
**/
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender) public view returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @title Basic token
* @dev Basic version of StandardToken, with no allowances.
**/
contract BasicToken is ERC20Basic {
using SafeMath for uint256;
mapping(address => uint256) balances;
uint256 totalSupply_;
/**
* @dev total number of tokens in existence
**/
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
/**
* @dev transfer token for a specified address
* @param _to The address to transfer to.
* @param _value The amount to be transferred.
**/
function transfer(address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[msg.sender]);
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
return true;
}
/**
* @dev Gets the balance of the specified address.
* @param _owner The address to query the the balance of.
* @return An uint256 representing the amount owned by the passed address.
**/
function balanceOf(address _owner) public view returns (uint256) {
return balances[_owner];
}
}
contract StandardToken is ERC20, BasicToken {
mapping (address => mapping (address => uint256)) internal allowed;
/**
* @dev Transfer tokens from one address to another
* @param _from address The address which you want to send tokens from
* @param _to address The address which you want to transfer to
* @param _value uint256 the amount of tokens to be transferred
**/
function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
emit Transfer(_from, _to, _value);
return true;
}
/**
* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
*
* Beware that changing an allowance with this method brings the risk that someone may use both the old
* and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
* race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
* @param _spender The address which will spend the funds.
* @param _value The amount of tokens to be spent.
**/
function approve(address _spender, uint256 _value) public returns (bool) {
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
/**
* @dev Function to check the amount of tokens that an owner allowed to a spender.
* @param _owner address The address which owns the funds.
* @param _spender address The address which will spend the funds.
* @return A uint256 specifying the amount of tokens still available for the spender.
**/
function allowance(address _owner, address _spender) public view returns (uint256) {
return allowed[_owner][_spender];
}
/**
* @dev Increase the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To increment
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _addedValue The amount of tokens to increase the allowance by.
**/
function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
/**
* @dev Decrease the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To decrement
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _subtractedValue The amount of tokens to decrease the allowance by.
**/
function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
uint oldValue = allowed[msg.sender][_spender];
if (_subtractedValue > oldValue) {
allowed[msg.sender][_spender] = 0;
} else {
allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
}
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
}
/**
* @title Configurable
* @dev Configurable varriables of the contract
**/
contract Configurable {
uint256 public constant cap = 1000000000*10**18;
uint256 public constant basePrice = 100*10**18; // tokens per 1 ether
uint256 public tokensSold = 0;
uint256 public constant tokenReserve = 500000000*10**18;
uint256 public remainingTokens = 0;
}
/**
* @title CrowdsaleToken 
* @dev Contract to preform crowd sale with token
**/
contract CrowdsaleToken is StandardToken, Configurable, Ownable {
/**
* @dev enum of current crowd sale state
**/
enum Stages {
none,
icoStart, 
icoEnd
}
Stages currentStage;
/**
* @dev constructor of CrowdsaleToken
**/
constructor() public {
currentStage = Stages.none;
balances[owner] = balances[owner].add(tokenReserve);
totalSupply_ = totalSupply_.add(tokenReserve);
remainingTokens = cap;
emit Transfer(address(this), owner, tokenReserve);
}
/**
* @dev fallback function to send ether to for Crowd sale
**/
function () public payable {
require(currentStage == Stages.icoStart);
require(msg.value > 0);
require(remainingTokens > 0);
uint256 weiAmount = msg.value; // Calculate tokens to sell
uint256 tokens = weiAmount.mul(basePrice).div(1 ether);
uint256 returnWei = 0;
if(tokensSold.add(tokens) > cap){
uint256 newTokens = cap.sub(tokensSold);
uint256 newWei = newTokens.div(basePrice).mul(1 ether);
returnWei = weiAmount.sub(newWei);
weiAmount = newWei;
tokens = newTokens;
}
tokensSold = tokensSold.add(tokens); // Increment raised amount
remainingTokens = cap.sub(tokensSold);
if(returnWei > 0){
msg.sender.transfer(returnWei);
emit Transfer(address(this), msg.sender, returnWei);
}
balances[msg.sender] = balances[msg.sender].add(tokens);
emit Transfer(address(this), msg.sender, tokens);
totalSupply_ = totalSupply_.add(tokens);
owner.transfer(weiAmount);// Send money to owner
}
/**
* @dev startIco starts the public ICO
**/
function startIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
currentStage = Stages.icoStart;
}
/**
* @dev endIco closes down the ICO 
**/
function endIco() internal {
currentStage = Stages.icoEnd;
// Transfer any remaining tokens
if(remainingTokens > 0)
balances[owner] = balances[owner].add(remainingTokens);
// transfer any remaining ETH balance in the contract to the owner
owner.transfer(address(this).balance); 
}
/**
* @dev finalizeIco closes down the ICO and sets needed varriables
**/
function finalizeIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
endIco();
}
}
/**
* @title LavevelToken 
* @dev Contract to create the Lavevel Token
**/
contract AlexToken is CrowdsaleToken {
string public constant name = "AlexToken";
string public constant symbol = "ALT";
uint32 public constant decimals = 18;
}

و نمایش باینری همانطور که شبکه آن را می بیند

60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029

جزئیات بیشتر در مورد قراردادهای هوشمند را می توانید در مقاله بیابید: قراردادهای هوشمند در اتریوم چیست؟.

نتیجه

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

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

آینده بلاک چین چیست؟ اکنون تنها می‌توانیم در مورد راه‌های احتمالی توسعه فناوری‌های بلاک چین حدس بزنیم:

  • بلاک چین به همان فناوری پایگاه داده رایج مانند SQL یا NoSQL برای حل طیف خاصی از مشکلات تبدیل خواهد شد.
  • بلاک چین به یک پروتکل گسترده تبدیل خواهد شد، مانند HTTP برای اینترنت.
  • بلاک چین پایه ای برای یک سیستم مالی و سیاسی جدید در کره زمین خواهد شد!

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

این تازه شروع کار است!

منبع: www.habr.com

اضافه کردن نظر