آخرین بهروزرسانی: ۲۳ آذر ۱۳۹۹
فهرست
فهرست مطالب وایت پیپر اتریوم
مقدمه
وقتی ساتوشی ناکاموتو در ژانویه ۲۰۰۹، برای اولین بار به معرفی بلاک چین بیت کوین پرداخت، همزمان دو مفهوم پایهای و آزمایش نشده را معرفی کرد. اولین مفهوم بیتکوین بود. بیتکوین یک ارز آنلاین همتا به همتا (فرد به فرد) غیرمتمرکز است که بدون پشتیبانی، ارزش ذاتی یا صادرکننده مرکزی ارزشش را حفظ میکند. از آن زمان، بیتکوین به عنوان یک واحد ارزی مورد توجه عموم قرار گرفت. این ارز دیجیتالی از جنبههای سیاسی نیز توجهها را به سمت خود جلب کرد.
دلایلی چون عدم وجود بانک مرکزی در این رمزارز، همچنین نوسانات افزایشی و کاهشی قیمت، باعث توجه بیشتر به بیتکوین میشوند. نکته قابل تاملی که نباید فراموش کنیم این است که مفهوم بلاکچین بر پایه اثبات انجام کار، به اندازه بیتکوین و آزمایش باشکوه ساتوشی اهمیت دارد.
بلاک چین بر پایه اثبات انجام کار، امکان ترتیب تراکنشها برای قراردادی عمومی را فراهم میکند. بیتکوین نیز به عنوان برنامهای کاربردی میتواند یک سیستم first-to-file را توصیف کند. تعریف سیستم first-to-file به این گونه است که اگر کسی ۵۰ بیتکوین داشته باشد و همزمان آن را به دو شخص A و B ارسال کند، پردازش تنها در تراکنشی که ابتدا تایید شده انجام خواهد شد. هیچ روش طبیعیای برای تعیین اینکه کدام یک از دو تراکنش ابتدا انجام میشود، وجود ندارد.
همین موضوع باعث ممانعت از توسعه ارز دیجیتالی غیرمتمرکز برای سالهای متوالی شده است. بلاکچینی که ساتوشی معرفی کرد اولین راهحل غیرمتمرکز معتبر بود ولی اکنون توجهها به بخش دیگری از تکنولوژی بیتکوین جلب شده که نشان میدهد مفهوم بلاکچین قابلیتهای متنوعی دارد. در این وایتپیپر متوجه خواهیم شد که فقط پول در بلاکچین مطرح نیست و میتوان استفادههای بیشتری از این فناوری داشت.
برنامههای رایجی که در خصوص استفاده از بلاکچین بدون توجه انحصاری به پول مطرح میشوند، متنوع هستند. این برنامهها شامل داراییهای دیجیتالی بر پایه بلاکچین، با هدف ارائه ارزهای سفارشی و ابزارهای مالی میشوند. سکههای رنگی یا ترکیبی، بخشی از ابزارهای مالی هستند. همچنین، مالکیت یک ابزار فیزیکی زیربنایی مانند داراییهای هوشمند در برنامه بلاکچین بدون توجه انحصاری به پول قرار میگیرد. داراییهای غیر مثلثی مثل نامهای دامنه یا نیمکوین نیز در این دسته جای دارند. برنامههای پیشرفتهتری نیز در این بخش قرار میگیرند که شامل صرافی غیرمتمرکز، مشتقات مالی، قمار فرد به فرد (همتا به همتا) و سیستمهای هویت و اعتبار بر پایه بلاک چین میشوند.
قراردادهای هوشمند، بخش مهم دیگری در این زمینه هستند. قراردادهای هوشمند سیستمهایی هستند که به طور اتوماتیک اموال دیجیتالی را انتقال میدهند که در گذشته، براساس قوانین دلخواهی تعیین شدهاند؛ به عنوان مثال، ممکن است شخصی قرارداد یک خزانهداری را داشته باشد که در آن فردی که به آن A میگوییم، میتواند X مقدار از یک ارز را در هر روز برداشت کند، فرد B میتواند در هر روز Y مقدار از ارز دیجیتال را برداشت کند. A و B باهم میتوانند هر مقداری از ارزی که میخواهند برداشت کنند و A توانایی مسدود کردن قدرت برداشت B را دارد. توسعه منطقی در سازماندهی فرایند غیرمتمرکزسازی (DAOs) شامل قراردادهای هوشمند بلندمدت میشود که داراییها را در اختیار دارند و آییننامه قانونی سازمان را رمزنگاری میکنند.
چیزی که اتریوم قصد فراهمآوریاش را دارد، بلاک چینی توسعهیافته با زبان برنامهنویسی تورینگ است. پیادهسازی این زبان برنامهنویسی در بلاکچین، میتواند برای ساخت قراردادها و رمزنگاری عملکردهای انتقال فازی استفاده شود. این سیستم امکان تولید هر کدام از سیستمهایی که توصیف کردیم را برای کاربران فراهم میکند. البته قراردادهای غیرمتمرکز کاربردهای زیادی دارد که ما حتی تصوری از خیلیهایشان نداریم؛ سیستمهایی که تنها چند خط از آنها منطقی به نظر میرسد. در این مقاله مواردی چون تاریخچه، بیتکوین به عنوان سیستم انتقال حالت، استخراج (ماینینگ)، درخت مرکل، برنامههای جایگزین بلاکچین، اسکریپتنویسی، اتریوم، حسابهای کاربری اتریوم، پیامها و تراکنشها، عملکرد تراکنش دولتی اتریوم، اجرای کد، بلاکچین و استخراج ارزهای دیجیتال (ماینینگ) برنامهها، سیستمهای توکن، مشتقات مالی، هویت و اعتبار سیستمها، غیرمتمرکزسازی کارت حافظه، غیرمتمرکزسازی سازمانهای خودکار، اپلیکیشنهای جانبی، مسائل و نگرانیها، اصلاح انجام GHOST، هزینهها، محاسبات و تکمیلکننده تورینگ، ارزها و صدور، استخراج متمرکز و مقیاسپذیری را بررسی میکنیم. همچنین در نهایت به بررسی مجموع این موارد که به غیرمتمرکزسازی برنامهها میانجامد، پرداخته و نتیجهگیری خواهیم کرد.
تاریخچه
دهها سال است که مفهوم غیرمتمرکزسازی در ارز دیجیتال، مانند برنامههای جایگزین و رجیسترهای اموال وجود دارد. همچنین پروتکل پول الکترونیکی نامشخص از دهههای ۱۹۸۰و ۱۹۹۰ مطرح شد. بیشتر ارزهای دیجیتال بر کریپتوگرافی اولیه متکی بودند که به چائومیان بلیندینگ «Chaumian blinding» معروف است. چائومیان بلیندینگ، تکنیکی برای انتقال تراکنشها بود به گونهای که دو طرف معامله پنهان میماندند. چائومیان بلیندینگ، ارزی را با بالاترین میزان حفاظت از حریم خصوصی فراهم میکند؛ ولی این پروتکل شکست سختی در به دست آوردن تراکنشها خورد چون در یک سیستم متمرکز قرار میگرفت.
وی دای «Wei Dai»، در سال ۱۹۹۸ ایده بی-مانی «b-money» را مطرح کرد. بی-مانی اولین ایده خلاقانه تولید پول از طریق حل پازلهای محاسباتی با اجماع غیرمتمرکز بود. بی-مانی جزییاتی را ارائه میکرد که چگونگی پیادهسازی اجماع غیرمتمرکز را نشان میداد.
در سال ۲۰۰۵، هال فینی مفهوم «اثباتهای انجام کار» را معرفی کرد. در این سیستم از ایدههای بی-مانی و پازلهای سخت محاسباتی هشکش آدام بک استفاده شده بود تا مفهوم تازهای را برای یک رمزارز خلق کند، اما یک بار دیگر به ایدهآلهای سیستم متکی بر محاسبات اعتماد نزدیک شد.
چون ارز دیجیتال یک برنامه first-to-file است، ترتیب تراکنشها اهمیت زیادی خواهد داشت. ارزهای دیجیتال به دنبال راهحلی برای غیرمتمرکزسازی هستند.
بلوک اصلی در پروتکل همه ارزهای پیش از بیتکوین همواره با یک حقیقت مواجه میشد، آن هم اینکه محققان برای مدتی طولانی به دنبال ایجاد امنیت بر روی تحمل خطای بیزانس سیستمهایی چندگانه تجمیع شده بودند. خطاهای بیزانس یکی از دشوارترین خطاهای موجود در سیستمهای بزرگ است و پژوهشگران حوزه ارزهای دیجیتال میخواهند با امنیت و تحمل خطاهای بیزانس راهحلی را فراهم کنند که تا سالهای متمادی نیمی از مشکلات در همه پروتکلهای تعریف شده را حل کند.
پروتکلهای تعریف شده در همه سیستمها شناخته شده هستند و امنیت مارجینها را فراهم میکنند. این پروتکلها از فرم مشخصی پیروی میکنند. براساس این فرم اگر N فرد شرکتکننده داشته باشیم، سیستم میتواند امنیت N/4 را تحمل کند. مشکل این فرم در این است که در تنظیمات نامشخص یا ناشناس، امنیت مارجینها در مقابل حملات سیبیل آسیبپذیر میشود. در چنین شرایطی، یک هکر (مهاجم سایبری)، هزاران گره (نود) شبیهسازی شده را بر روی یک سرور یا باتنت تولید میکند و از این نودها در یک اشتراکگذاری حداکثری به منظور امنیت یک طرفه استفاده میکند.
نوآوری که با طرح ساتوشی بر مبنای سیستم ساده پروتکل غیرمتمرکز فراهم شده، بر پایه ترکیب گرههای تراکنشها در بلوکها به وجود آمده است. هر ده دقیقه، یک بلوک در هر بلاکچین رشد میکند و اثبات انجام کار به عنوان مکانیزمی برای دریافت نودهای درست در سیستم به کار میرود. در حالی که نودها با قدرت محاسباتی بالایشان به طور متناسب تاثیرگذارند، قدرت محاسباتی در کل شبکه ترکیبشده، سختتر از محاسبه یک میلیون نود است.
مدل بلاکچین بیتکوین، با وجود ناپختگی و سادگیاش، یک مدل ثابت شده و مناسب است به همین خاطر در عرض پنج سال اساس بیش از دویست رمزارز و پروتکل در سراسر دنیا شد.
بیت کوین به عنوان سیستم انتقال حالت
از نظر فنی، دفتر کل بیتکوین میتواند به عنوان سیستم انتقال حالت در نظر گرفته شود. دفتر کل بیتکوین، جایی است که در آن یک «حالت» شامل وضعیت مالک در همه بیتکوینهای موجود و یک «تابع انتقال حالت» میشود که وضعیتی از حالت، انتقال و خروجیهای یک حالت جدید را دریافت و نتیجه را اعلام میکند.
برای مثال، در سیستم بانکداری استاندارد، حالت ترازنامه است و انتقال درخواستی است برای جابهجایی ایکس دلار از A به B، همچنین تابع انتقال حالت ارزش حساب A را ایکس دلار کاهش داده و ارزش حساب B را به اندازه ایکس دلار افزایش میدهد. اگر حساب A در ابتدا کمتر از ایکس دلار داشته باشد، تابع انتقال حالت خطا میدهد. پس میتوان این مسئله را به صورت زیر تعریف کرد:
APPLY(S,TX) >
S’ or ERROR
این موضوع در سیستم بانک اینگونه تعریف میشود:
APPLY({ Alice: $50, Bob: $50 },”send $20 from Alice to Bob”) = { Alice: $30,
Bob: $70 }
اما:
APPLY({ Alice: $50, Bob: $50 },”send $70 from Alice to Bob”) = ERROR
حالت در مجموعه تمامی کوینها، از نظر فنی «خروجی تراکنش خرج نشده» یا «UTXO» است. حالت، کوینهایی را نشان میدهد که ضرب شدهاند و هنوز خرج نشدهاند. هر کدام از UTXOها، در محدوده مشخصی قرار دارند و مالک به کسی گفته میشود که اساسا بیست بایت آدرس در یک کلید عمومی رمزنگاری داشته باشد. تولید تراکنشها به یک یا چند ورودی نیاز دارد که هر ورودی با یک خروجی UTXO و یک امضای الکترونیکی توسط کلید شخصی با آدرس مالک و یک یا چند خروجی ساخته میشود. هر خروجی حاوی یک خروجی تراکنش خرج نشده است که به حالت اضافه میشود.
حالت مشخص در هر تراکنش (APPLY(S,TX) >S’) میتواند اینگونه تعریف شود:
- برای هر ورودی TX:
اگر UTXO ، اس نباشد خطا میدهد.
اگر امضای دیجیتالی با امضای مالک UTXO یکی نباشد، خطا داده میشود. - اگر جمع دامینها در همه ورودیهای UTXO، کمتر از میزان جمع دامینها در همه خروجیهای UTXO باشد، خطا داده شود.
- بازگشت اس با همه ورودیهای UTXO حذف شده و همه خروجیهای UTXO اضافه میشود.
نیمی از تراکنشهای ابتدایی فرستنده، مربوط به کوینهای خرجشدهای میشود که وجود خارجی ندارند. نیمی دیگر از تراکنشهای فرستنده در مرحله اول کوینهای خرج شده دیگران است. در مرحله دوم، ارزشها معنا پیدا میکنند و به خاطر استفاده از آنها برای پرداخت، پروتکلها دنبال میشوند.
به عنوان مثال، اگر آلیس بخواهد 11.7 بیتکوین برای باب ارسال کند، آلیس اول باید به دنبال مجموعه UTXO در دسترسی بگردد که حداقل مالک 11.7 بیتکوینشان است. در صورتی که این موضوع را با نگاهی واقعبینانه ببینیم، آلیس قادر نخواهد بود دقیقا 11.7 بیتکوین دریافت کند. کمترین مقداری که آلیس میتواند دریافت کند 12=2+4+6 است. سپس میتواند تراکنشی را با سه ورودی و دو خروجی بسازد. اولین خروجی 11.7 بیتکوین خواهد بود و به آدرس باب به عنوان مالک ارسال میشود. دومین خروجی باقیمانده بیتکوینهای آلیس است. آلیس 0.3 بیتکوین را برای خودش نگه خواهد داشت.
استخراج(ماینینگ)
اگر به سرویس متمرکز قابل اعتمادی دسترسی داشته باشیم، این سیستم میتواند یکی از اجزای عملیاتی باشد. سیستمی که میتواند به سادگی رمزنگاری و تعریف شود. هر چند با بیتکوین سعی در ساخت سیستم ارزی غیرمتمرکز داریم باید سیستم انتقال حالت را با یک سیستم اجماع ترکیب کنیم تا مطمئن شویم همه با ترتیب تراکنشها موافق هستند. فرایند اجماع غیرمتمرکز بیتکوین شامل نودهایی در شبکه میشود که در فرایندی دنبالهدار قصد ساخت پکیجهایی از تراکنش را دارند که به آن بلوک میگویند. تمایل شبکه، ساخت یک بلوک در هر ده دقیقه است؛ هر بلوک حاوی یک برچسب زمانی، نانس (عدد منحصر به فردی که تنها یکبار مصرف میشود)، منبعی برای رمزنگاری بلوک قبلی و لیستی از همه تراکنشهایی است که از زمان بلوک قبلی جایگزین شدهاند. این فرایند، بلاکچین مقاومی را تولید میکند که رشدی طولانی دارد و با نشان دادن آخرین حالت دفترکل بیتکوین دائما بهروزرسانی میشود.
اگر یک بلوک ارزشمند باشد و الگویی که در زیر بیان میشود را دنبال کند، الگوریتم بررسی میشود.
- ۱- اگر بلوک قبلی، وجود و ارزش بلوک را ثابت کند، الگوریتم بررسی شود.
- ۲- برچسب زمانی بلوکی که بزرگتر از بلوک قبلی و کمتر از دو ساعت باشد، بررسی شود.
- ۳- اثبات انجام کار در بلوک معتبر بررسی میشود.
- ۴- به [S[0 اجازه دهید حالتی در انتهای بلوک قبلی باشد.
- ۵- TX در لیست تراکنش بلوک با n تراکنش باشد. این مقدار برای همه بلوکها i in 0…n-1, setS[i+1] =APPLY(S[i],TX[i]) است. اگر هر برنامهای یک خطا، خروج و بازگشت اشتباه داشته باشد.
- ۶- بازگشت درست و ثبت S] n] به عنوان حالتی در انتهای بلوک
اساسا هر تراکنشی در بلوک باید یک حالت تراکنش معتبر ایجاد کند. باید به یاد داشته باشیم که حالت در بلوک رمزنگاری نشده است. به بیان سادهتر، از زمان پیدایش حالت و ترتیب درخواستهای هر تراکنش در هر بلوک، ارزش نود و امنیت محاسبات را برای هر بلوک را میتوان به یاد آورد. در ادامه استخراج شامل تراکنشهای بلوک میشود. اگر دو تراکنش A و B در حالی انجام شود که B یک خروجی تراکنش خرج نشده را صرف کند و A را بسازد، سپس بلوک در حالی با ارزش خواهد بود که A قبل از B قرار بگیرد.
نکته جالب در خصوص الگوریتم ارزشگذاری بلوک، مفهوم اثبات انجام کار است. اثبات انجام کار شرایطی است که در آن SHA256 در هر بلوک، عدد 256-bit را نشان دهد. عددی که باید کمتر از هدف متوسط پویا باشد. هدفی که به شکل تقریبی ۲۱۹۰نوشته میشود.
هدف از ایجاد این بلوک تولید محاسبات سخت است. بدین وسیله از آسیب حمله هکرهای سیبیل و تولید دوباره بلاکچین جلوگیری میکند. چون SHA256 به گونهای طراحی شده که شبه تابعی کاملا غیرقابل پیشبینی باشد، تنها روشی که میتوان بلوک باارزشی را به سادگی آزمایش کرد و خطاهایش را سنجید افزونه تکراری نانس است. با این روش امکان همخوانی با هش جدید مشخص میشود.
در هدف 2192، به طور متوسط ۲۶۴ دادرسی وجود دارد. در حالت کلی، هدف با شبکه جدیدی که 2016 بلوک دارد، دوباره کالیبره میشود. با این روش، در هر ده دقیقه میتوان بلوک جدیدی را با نودهای موجود در شبکه تولید کرد. برای جبران خسارت ماینرها (استخراجکنندگان) در این محاسبات، ماینر در هر بلوک مقداری بیتکوین دریافت میکند و در یک تراکنش ۲۵ بیتکوین از ناکجاآباد به خودش میدهد. علاوه بر این، اگر هر تراکنش دامنه ورودیها بزرگتر از خروجیها باشد؛ مابهتفاوت آن به عنوان «هزینه تراکنش» به ماینر بازگردانده میشود.
این مکانیزم تنها در بیتکوین امکانپذیر است و مشمول پیدایش حالت در هیچ کوینی نمیشود.
برای آنکه هدف از استخراج را بهتر متوجه شوید، با مثالی برایتان توضیح میدهیم که چه اتفاقی برای مهاجمان ویروسی میافتد. از وقتی اصول رمزنگاری بیتکوین امن شناخته شد، مهاجمان تمام تلاششان را کردند تا سیستم بیتکوین را ناامن جلوه دهند. از نظر مهاجمان سیستم رمزارز بیتکوین با رمزنگاری مستقیم پشتیبانی نمیکند و تنها براساس ترتیب تراکنشها عمل میکند. استراتژی هکرها ساده است:
- ۱۰۰ بیتکوین را به یک مرچنت ارسال میکنند تا آن را با ارزهای دیجیتالی دیگر یا محصولات دیجیتالی با تحویل زودهنگام عوض کنند.
- برای دریافت یک محصول صبر کند.
- تراکنش دیگری را با همان ۱۰۰ بیتکوین به نام خود ایجاد کند.
- تلاش میکند شبکهای که برای خود تراکنش انجام داده را به حالت اولش بازگرداند.
گام اول قرارگیری است. برخی از ماینرها که تراکنش در بلوک هم جزیی از آن است، پس از چند دقیقه، عدد بلوک را ۲۷۰ هزار عنوان کردهاند. پس از یک ساعت، بیشتر از پنج بلوک به زنجیره بلوکی اضافه میشود. هر کدام از این بلوکها به صورت غیر مستقیم با تراکنشها در ارتباط بوده و تایید میشود. نکتهای که در اینجا وجود دارد قبول پرداختها در به عنوان محصول پرداختی نهایی شده در مرچنت است. از وقتی ما درباره محصولات دیجیتالی لاف میزنیم، دریافت سریع انجام میشود و هکر تراکنش را با ارسال ۱۰۰بیتکوین برای خودش انجام میدهد. اگر عملکرد هکر با فکر و حسابشده نباشد تراکنشها در فرایند به درستی انجام نمیشود. ماینترها تلاش میکنند فرمول APPLY(S,TX) را اجرایی کرده و TX در UTXO مصرف میشود. در این زمان UTXO دیگر یک حالت نیست. در عوض، هکر یک «انشعاب» از بلاکچین ایجاد میکند که با استخراج یک نسخه دیگر از بلوک ۲۷۰۰۰۰ شروع میشود.
این بلوک با اشاره به بلوک مشابهش ۲۶۹۹۹۹، به عنوان والد عمل میکند اما با تراکنش جدید در مکان قبلی قرار میگیرد. از آنجا که دادههای بلوکی متفاوت هستند، به انجام دوباره اثبات انجام کار نیاز است. علاوه بر این، جدیدترین نوع از بلاک ۲۷۰هزار، رمزنگاری متفاوتی دارد بنابراین به بلوکهای اصلی ۲۷۰۰۰۱ تا ۲۷۰۰۰۵ اشاره نمیکنند؛ در نتیجه زنجیره اصلی و زنجیره جدید هکر کاملاً مجزا هستند. قاعده این است که در یک انشعاب، طولانیترین زنجیره بلاکچین قابل اعتماد است که این مسئله به بیشترین مقدار در اثبات انجام کار برمیگردد. ماینرهای قانونمند بر روی زنجیره ۲۷۰۰۰۵ کار خواهند کرد در حالی که هکر فقط بر روی زنجیره ۲۷۰۰۰۰ کار میکند. برای این که هکر بزرگترین زنجیره بلاکچین را بسازد، باید قدرت محاسباتی بیشتری نسبت به بقیه ترکیبهای شبکه داشته باشد. از این رو میزان حمله هکرها، ۵۱ % است.
درخت مرکل
چپ: پیشزمینههایی برای ارائه گرههای کوچکی در یک درخت مرکل است که اثبات ارزشمندی انشعابها را تعیین میکند.
راست: هر تلاشی که به تغییر بخشی از درخت مرکل منجر شود در نهایت بخشی از زنجیره را دچار ناهماهنگی میکند.
مقیاسپذیری، ویژگی مهمی در بیتکوین است که در ساختار داده چند-سطحی ذخیره میشود. تنها هش واقعی در یک بلوک، هش سربرگ است. این هش به بخشهایی تقسیم میشود که ۲۰۰ بایتی هستند و شامل برچسب زمانی، نانس (شمارهای که فقط یک بار در یک ارتباط رمزنگاری از آن
استفاده میشود)، هش بلوک قبلی و ساختار ریشهای هش داده میشود که به آن درخت مرکل میگویند. درخت مرکل همه تراکنشهای یک بلوک را ذخیره میکند.
درخت مرکل نوعی درخت دودویی (باینری) است که با گرهها (نودها) به وجود میآید. این درخت با برگی از نودها ساخته میشود و داده اساسی را توزیع میکند. نودهای پیشرفته عملیات هش را در دو شاخه انجام میدهند و در نهایت یک نود ریشهای به دست میآید. این نود ریشهای همچنین هش کردن دو شاخه را نشان و بالاترین نقطه درخت را نمایش میدهد. هدف از درخت مرکل، دریافت بلوکی از دادههاست. یک نود میتواند سربرگ بلوکی را از یک منبع دانلود کند. بخش کوچکی از درخت مربوط به منبع دیگری میشود و هنوز هم میتواند معتبر باشد و همه دادهها صحیح باشند.
دلیل اینکه هشها توسعه مییابند این است که اگر تراکنش تقلبی به سمت انتهای درخت مرکل برود، نودها تغییر میکند.
در نهایت ریشه درخت و هش در بلوک تغییر میکند.پروتکل ثبت به طور کامل متفاوت است، تقریباً مثل اثبات انجام کار غیرمعتبر.
پروتکل درخت مرکل، اساسا در بلند مدت قابل پیشبینی است. یک نود کامل در شبکه بیتکوین یکی از فرایندهایی است که در هر بلوک وجود دارد. این عملکرد چیزی حدود ۱۵ گیگابایت در فضای دیسک شبکه بیتکوین است. شبکه بیتکوین در آوریل ۲۰۱۴ رشدی به اندازه یک گیگابایت در هر ماه داشت. به تازگی، برخی کامپیوترهای رومیزی، میتوانند این فضا را تحمل کنند. اما تلفنها هنوز به مرحلهای نرسیدهاند که این حجم را تحمل کنند. در آینده نه تنها تجارتها و هابهای تکنولوژی، تلفنها نیز میتوانند در این فرایند شرکت کنند. پروتکلی به عنوان تایید سادهشده پرداخت (SPV) برای سطح دیگری از خروج گرهها وجود دارد که به آن «لایت نود» میگویند. لایت نودهایی که سربرگ بلوک را بارگیری میکنند، اثبات انجام کار در سربرگهای بلوک را تایید و سپس انشعابهای مرتبط با تراکنش را بارگیری میکنند. این موضوع به لایت نودها اجازه میدهد تعادلی را بین تعیین وضعیت هر معامله بیتکوین و وضعیت فعلی آنها با تضمین قوی امنیت ایجاد کنند. در چنین شرایطی فقط قسمت بسیار کمی از کل بلاکچین بارگیری میشود.
برنامههای کاربردی جایگزین بلاکچین
ایده استفاده از طرح اصلی بلاکچین و ارائه مفاهیم مربوط به آن نیز سابقهای طولانی دارد. در سال ۲۰۰۵ نیک سابو (Nick Szabo)، مفهوم «عناوین مالکیت امن با اختیار مالک» را ارائه کرد. سابو با ارائه یک سند معتبر به توصیف چگونگی پیشرفتهای جدید در فناوری پایگاه داده تکرار شده پرداخت. این سند امکان ایجاد یک سیستم ذخیره ثبت املاک بر پایه بلاکچین را فراهم میکرد. سیستمی که سابو توضیح میداد یک چارچوب دقیق شامل مفاهیمی مانند مزرعهداری، مالکیت نامطلوب و مالیات در زمینهای گرجستان میشد. با این حال، این سند هیچ اثر موثری در سیستم پایگاه داده تکراری موجود در آن زمان نداشت و پروتکل در عمل هرگز اجرایی نشد.
پس از سال ۲۰۰۹، اجماع غیرمتمرکز بیتکوین تعدادی گزینه جایگزین را توسعه داد و برنامهها به سرعت شروع به ظهور کردند. این برنامهها شامل مواردی میشوند که در ادامه میخوانیم:
- نیمکوین (Namecoin) در سال ۲۰۱۰ ایجاد شد.این برنامه را میتوان به عنوان ثبت غیرمتمرکز پایگاهداده توصیف کرد. در پروتکلهای غیرمتمرکز مانند تور، بیتکوین و بیتمسیج، باید راهی برای شناسایی حسابها وجود داشته باشد، به طوری که دیگر افراد بتوانند با آنها ارتباط برقرار کنند ، اما در همه راهحلهای موجود تنها نوع شناسهای که وجود دارد یک شبه هش است. به طور مثال:
like1LW79wp5ZBqaHW1jL5TCiBCrhQYtHagUWy.
در حالت ایدهآل، شخصی تمایل دارد حسابی به نام خودش بسازد. فرض را بر این میگیریم که نام این فرد جورج است. مشکلی که در اینجا وجود دارد این است که اگر یک نفر بتواند حساب کاربری با نام جورج ایجاد کند، منحصر به فرد نیست چون فرد دیگری نیز میتواند از همان روند برای ثبت حساب کاربری «جورج» استفاده کند. در نتیجه جعل نام جورج امکانپذیر است. تنها راهحل مناسب الگویی است که در آن اولین ثبت موفق میشود و دومی شکست میخورد. این مشکل برای پروتکل اجماع بیتکوین کاملاً مناسب است. نیمکوین قدیمیترین و موفقترین برنامه اجرای ثبت اسامی در سیستم است که از ایده first-to-file استفاده میکند.
- کوینهای رنگی یا ترکیبی (Colored coins)، یکی دیگر از برنامههای کاربردی جایگزین بلاکچین است. هدف از کوینهای رنگی ارائه خدماتی به عنوان یک پروتکل مالکیت است. این پروتکل امکان ساخت ارزهای دیجیتال را برای افراد فراهم میکند. اشخاص میتوانند با یک واحد و توکنهای دیجیتال، ارزهای خود را در بلاکچین بیتکوین داشته باشند. در پروتکل سکههای رنگی ارز جدید، یک رنگ اختصاصی به بیتکوین داده میشود و پروتکل به طور بازگشتی رنگ دیگری را در UTXO تعریف میکند که مشابه ورودیهای خرج شده در تراکنش انجام شده است. برخی از قوانین اختصاصی مربوط به ورودیهایی با ترکیب رنگ میشود. این مسئله به کاربران امکان نگهداری کیف پولهایی را میدهد که فقط حاوی UTXO یک رنگ خاص هستند و آنها را مانند بیتکوینهای معمولی ارسال میکنند. با نگهداری کیفپولهای بهخصوص، پیگیری از طریق زنجیره بلوکی برای تعیین رنگ هر UTXO دریافتی امکانپذیر میشود.
- متاکوین (metacoin)، نیز یکی دیگر از برنامههای کاربردی جایگزین بلاکچین است که با هدف داشتن پروتکلی که در جایگاهی بالاتر بیتکوین قرار دارد به وجود آمد. این پروتکل با استفاده از تراکنشهای بیتکوین، معاملات متاکوین را ذخیره میکند. با این همه، عملکرد انتقال وضعیت در متاکوین متفاوت است و به شکل APPLY’ تعریف میشود زیرا پروتکل متاکوین نمیتواند از تراکنشهای نامعتبر متاکوین که در بلاکچین بیتکوین ظاهر میشوند جلوگیری کند. از طرفی وقتی این تراکنشهای نامعتبر در بلاکچین بیتکوین قرار داشته باشند قانونی را به وجود میآورند. در این قانون اگر APPLY ‘(S، TX) باشد سیستم خطا میدهد. این پروتکل به صورت پیش فرض به شکل APPLY ‘(S، TX) = S است. این مکانیسم آسان برای ایجاد پروتکل رمزارز دلخواه مناسب است. همچنین ثابت میکند پروتکل ارز رمزنگاری شده، به طور بالقوه ویژگیهای پیشرفتهای دارد که توانایی اجرایی شدن در خود بیتکوین را ندارند ولی هزینههای توسعه، پیچیدگیهای استخراج و شبکه را کاهش میدهد و در حال حاضر توسط پروتکل بیتکوین اداره میشود.
بنابراین، به طور کلی، دو رویکرد برای ساختن یک پروتکل اجماع وجود دارد: ساخت یک شبکه مستقل و ایجاد یک پروتکل برای بیتکوین. اگرچه رویکرد قبلی روش موفقیتآمیزی است اما در برنامههایی مانند نیمکوین اجرای آن دشوار خواهد بود و برای هر پیادهسازی مستقل به راهاندازی یک بلاکچین بهخصوص نیاز دارد. همچنین در هر پیادهسازی به ساخت و آزمایش تمام انتقالهای حالت و کد شبکه نیاز است.
علاوه بر این، ما پیشبینی میکنیم مجموعهای از برنامههای کاربردی برای فناوری اجماع غیرمتمرکز، توزیع قانون قدرت را دنبال خواهند کرد که اکثر برنامهها برای تضمین آنها در بلاکچین خود بسیار کوچک هستند. توجه داریم که سطوح زیادی از برنامههای غیرمتمرکز، به ویژه سازمانهای غیرمتمرکز مستقل وجود دارد که نیازمند تعامل با یکدیگر هستند.
از سوی دیگر، رویکرد مبتنی بر بیتکوین این نقص را دارد که ویژگیهای تأیید پرداخت سادهشده بیتکوین را دریافت نمیکند.SPV برای بیتکوین کار میکند زیرا میتواند از عمق بلاکچین به عنوان پروکسی برای اعتبار استفاده کند. در برخی موارد، وقتی تاریخچه تراکنش به اندازه کافی به عقب برود میتواند به بخشی از حالت مشروعیت ببخشد.(به طور قانونی بخشی از دولت باشد.) از سوی دیگر، متاپروتکلهای مبتنی بر بلاکچین نمیتوانند زنجیره بلوک را مجبور کنند. این موضوع شامل تراکنشهایی میشود که در متن پروتکلهای خودشان معتبر نیستند. به همین خاطر اجرای SPV متا پروتکل کاملاً امن است. اجرای امن SPV متا پروتکل نیاز به اسکن همهجانبه رو به عقب از آغاز بلاکچین بیتکوین دارد تا اعتبار یا عدم انجام تراکنشهای خاص را مشخص کند.
در حال حاضر، تمام لایتهایی که در متاپروتکلهای مبتنی بر بیتکوین پیادهسازی میشوند به یک سرور قابل اعتماد برای ارائه دادهها متکی هستند. مسئله قابل بحث در این زمینه این است که اتکا به یک سرور قابل اعتماد زمانی که یکی از اهداف اصلی ارز رمزنگاری شده حذف نیاز به اعتماد باشد نتیجهای کاملاً غیربهینه دارد.
اسکریپتینگ
حتی بدون هر کدام از انشعابها، پروتکل بیتکوین تسهیلکننده نسخه ضعیفی از مفهوم «قراردادهای هوشمند» است. UTXO یا همان «خروجی تراکنش خرج نشده» در بیتکوین نه تنها توسط یک کلید عمومی بلکه با استفاده از یک اسکریپت پیچیده در یک زبان برنامهنویسی برپایه ساختمان داده قابل مالکیت است.
در این پارادایم (الگو)، رمزارز در حالی خرج میشود که «خروجی تراکنش خرج نشده» دادههای متناسب با اسکریپت را ارائه دهد. در واقع، حتی مکانیزم اساسی مالکیت کلید عمومی نیز از طریق یک اسکریپت اجرا میشود: اسکریپت یک امضای منحنی را به عنوان ورودی دریافت میکند و پس از بررسی معامله و آدرس مالک UTXO آن باید تایید شود. در صورتی که امضا و اطلاعات تایید شد، اسکریپت 1 و 0 را برمیگرداند. در غیر این صورت، اسکریپتهای پیچیدهتری برای موارد استفاده اضافی مختلف وجود دارد؛ به عنوان مثال، میتوانید اسکریپتی بسازید که برای تایید اعتبار امضاهای دو خروجی به سه کلید خصوصی نیاز داشته باشد (“multisig”).
این کلیدهای خصوصی، تنظیمات مفید برای حسابهای شرکتی، حسابهای پسانداز ایمن و برخی موقعیتهای فروش تجاری هستند. اسکریپتها گزینه مناسبی برای پرداخت بونتی هستند و میتوانند برای مشکلات محاسباتی راهحلی تضمین شده باشند. حتی میتوان اسکریپتی ساخت که مفهومش این است: «اگر بتوانید یک هدف وجودی را اثبات و یک Dogecoin را از آدرسی مشخص برای من ارسال کنید، UTXO بیتکوین برای شما خواهد بود». این روش به طور قطع امکان مبادله غیر متمرکز ارزهای دیجیتالی را فراهم میکند.
با این حال، زبان اسکریپتنویسی که در بیتکوین پیادهسازی شده دارای چندین محدودیت مهم است:
- عدم وجود کامل بودن تورینگ: فقدان کامل بودن تورینگ به این معناست که یک زیرمجموعه بزرگ از محاسبات وجود دارد. زیرمجموعه محاسباتی که از زبان اسکریپت بیتکوین پشتیبانی میکند. جالب است بدانیم این زیرمجموعه محاسباتی تقریباً از هیچ چیزی پشتیبانی نمیکند. دسته اصلی که وجود ندارد حلقهها است. این کار برای جلوگیری از به وجود آمدن حلقههای بینهایت در هنگام تأیید معامله انجام میشود.
از لحاظ نظری این مانع برای برنامهنویسان اسکریپت قابل جلوگیری است، زیرا هر حلقه توانایی شبیهسازی را دارد. این روش، به سادگی با تکرار چند باره کد پایهای و با دستور if قابل اجرا و شبیهسازی است. با این حال، این روش شبیهسازی به خاطر آنکه منجر به اسکریپت میشود بسیار ناکارآمد است و نمیتوان از آن استفاده بهینه کرد. برای مثال، اجرای الگوریتم یک امضای منحنی جایگزین به احتمال زیاد به 256 تکثیر مداوم نیاز دارد که همه به صورت جداگانه در این کد گنجانده شدهاند.
- Value-blindness: هیچ راهی برای اسکریپت UTXO برای فراهمآوری و کنترل دقیق مبلغ قابل برداشت وجود ندارد.به عنوان مثال، یکی از موارد استفاده قدرتمند در قراردادی پیشگونه است که میتواند به قرارداد هجی بیانجامد. مثلا وقتی A و B، هزار دلار در بیتکوین سرمایهگذاری میکنند و پس از ۳۰ روز اسکریپت ۱۰۰۰دلار بیتکوین به A و باقیمانده را به B ارسال میکند؛ برای تعیین مقدار یک بیتکوین به پیشبینی قیمت بیتکوین در پول مرجع (فرض میکنیم دلار آمریکا)، نیاز است. در همه زمانها چیزی که اهمیت دارد اعتماد و نیاز به زیرساختهاست. این موضوع در سالهای اخیر پیشرفت چشمگیری داشته و راهحل های کاملاً متمرکزی را ارائه کرده که اکنون در دسترس هستند. با این حال ، از آنجا که UTXO همه یا هیچ چیز است، تنها راه دستیابی به این هدف از طریق هک کردن است. با هک ناکارآمد، بسیاری ازآدرسهای UTXO تغییر میکند؛ به عنوان مثال، فروش یک UTXO معادل ۲ به توان k است و به ازای هر k، این عدد ۳۰ شماره افزایش مییابد و قدرت پیشبینی مقداری که UTXO به A و B ارسال میکند را دارد.
- فقدان حالت: UTXO هم میتواند خرج شود و هم امکان دارد که هزینه نشود. هیچ شانسی برای آنکه قراردادهای چند مرحلهای یا اسکریپها از UTXO بتوانند از حالت ورودی فراتر رفته و وضعیت داخلی دیگری را حفظ کنند، وجود ندارد. به همین خاطر ایجاد قراردادهایی که در سطوح مختلف قرار دارند سخت میشود. قراردادهای چند مرحلهای، پیشنهادات مبادله غیرمتمرکز یا پروتکلهای رمزنگاری دو مرحلهای با فقدان حالت دشوار خواهد شد. لازم به ذکر است که پروتکلهای رمزنگاری دو مرحلهای برای بونتهای امن محاسباتی ضروری هستند. فقدان حالت همچنین به این معنی است که UTXO فقط برای ایجاد قراردادهای ساده، یکبار مصرف و قراردادهای پیچیدهتر یا «دولتی» مورد استفاده قرار میگیرد.
فقدان حالت انجام کار را برای سازمانهای غیرمتمرکز و متاپروتکلهای ساخته شده دشوار می کند. ترکیب حالت دودویی همراه با value-blindness به این معنی است که در یک برنامه مهم دیگر، محدودیتهای خروج غیرممکن است.
- Blockchain-blindness: خروجی تراکنش خرج نشده نسبت به دادههای بلاکچین مانند نانس و هش قبلی نابینا است. محروم کردن برنامههای کاربردی در قمار و محدودیت شدید در چندین دسته دیگر از طریق منع زبان برنامهنویسی با یک منبع تصادفی بالقوه و ارزشمند امکانپذیر است.
بنابراین، ما سه روش برای ایجاد برنامههای پیشرفته در رمزارز مشاهده میکنیم. این روشها، شامل ساخت یک بلاکچین جدید، استفاده از اسکریپتنویسی در بیتکوین، و ساخت یک متا پروتکل در بیتکوین میشود. ساخت یک بلاکچین جدید به ایجاد آزادی نامحدود در ساخت یک مجموعه ویژگی میانجامد ولی هزینههای زیادی دارد. به عنوان مثال زمان توسعه و زحمت راهاندازیاش زیاد است. استفاده از اسکریپتنویسی آسان است. به راحتی میتوان در استانداردسازی و اجرا از اسکریپتنویسی بهره گرفت با این وجود اسکریپنویسی نیز مشکلات خاص خود را دارد چون تواناییهایش بسیار محدود است. اگرچه اجرای متاپروتکلها در اسکریپتینگ آسان است ولی نقص جدی در مقیاسپذیری دارد. با اتریوم میخواهیم یک چارچوب کلی را فراهم کنیم که میتواند مزایای هر سه پارادایم را همزمان فراهم کند.
اتریوم
هدف اتریوم (Ethereum)، ادغام و بهبود مفاهیمی مثل اسکریپتنویسی، آلتکوینها و متاپروتکلهای روی زنجیره با یکدیگر است. اتریوم ایجاد برنامههای مبتنی بر اجماع دلخواه را برای توسعهدهندگان فراهم میکند. هدف اتریوم از این کار مقیاسپذیری، استانداردسازی ، تکمیل قابلیتها، سهولت توسعه و امکان تعامل برنامهها با یکدیگر است. با اتریوم پارادایمهای مختلف همه در یک زمان انجام میشوند. در واقع اتریوم اصلی نهایی را میسازد و آن چیزی نیست جز لایه بنیادی انتزاعی.
لایه بنیادی انتزاعی، بلاکچینی با یک زبان برنامهنویسی کامل تورینگ است که امکان نوشتن قراردادهای هوشمند و برنامههای غیرمتمرکز را برای هر کسی در هر جایی که باشد فراهم میکند. این قراردادها شامل قوانینی برای مالکیت، قالبهای معاملاتی و توابع انتقال حالت میشوند. نسخه اولیه و پایهای نیمکوین در دو خط کد نوشته شده و پروتکلهای دیگر مانند ارزها و سیستمهای اعتبار را در زیرلایههای خود میسازد. قراردادهای هوشمند، جعبههای رمزنگاری حاوی ارزشی هستند که تنها در صورت وجود شرایط خاص، قفلشان را باز میکنند. لایه بنیادی انتزاعی همچنین میتواند روی سیستمعامل ما ساخته شده و قدرت بیشتری نسبت به وضعیت مشابه در برنامهنویسی بیتکوین ارائه دهد. اتریوم به دلیل قدرت اضافی کامل بودن تورینگ، آگاهی از ارزش، آگاهی از بلاکچین و حالت، قابل توجه است.
حسابهای اتریوم
در اتریوم، حالت از اشیایی تشکیل شده که «حساب» نامیده میشوند و هر حساب دارای یک آدرس۲۰ بایتی است. تراکنشها با استفاده از این آدرسها به صورت انتقال مستقیم ارزش و اطلاعات بین حسابها انجام میشود.
حساب اتریوم چهار قسمت دارد. این حساب از نانس که پیشخوانی برای افزایش امنیت در تراکنشهاست و در هر معامله فقط یک بار قابل پردازش است، موجودی اتر فعلی در حساب، کد قرارداد در حساب (البته اگر وجود داشته باشد) و فضای ذخیرهسازی حساب (به طور پیش فرض خالی است) تشکیل شده است.
«اتر» منبع اصلی رمزنگاری داخلی در اتریوم است که برای پرداخت هزینههای معامله استفاده میشود. به طور کلی، دو نوع حساب وجود دارد. حسابهایی بدون کد با مالکان خارجی، که شخص میتواند از طریق آن پیام ارسال کند. همچنین حسابهای کنترل شده و قراردادی که فرد میتواند در هر زمانی پیامی کدگذاری شده را دریافت کند.
پیامها و معاملات
«پیامها» در اتریوم تا حدودی شبیه «تراکنشها» در بیتکوین هستند، اما سه تفاوت مهم بین پیامهای اتریوم و تراکنشها در بیتکوین وجود دارد. اولین تفاوت این است که یک پیام اتریوم میتواند توسط یک نهاد خارجی یا یک قرارداد ایجاد شود ، در حالی که ایجاد یک تراکنش بیتکوین فقط به صورت خارجی امکانپذیر است. دومین تفاوت پیام و تراکنش در اتریوم و بیتکوین، وجود گزینهای برای پاسخگویی به پیامهای اتریوم است. به عبارت بهتر پیامهای اتریوم مفهوم توابع را نیز در بر میگیرند.
اصطلاح «معامله» در اتریوم به بسته دادهای امضا شده مربوط میشود که پیام ارسال شده توسط مالک خارجی را ذخیره میکند. معاملات شامل رسید دریافت پیام، امضای الکترونیکی برای نشاندادن هویت فرستنده، میزان تتر و دادههای ارسال شده هستند. معاملات همچنین دو مقدار به نامهای STARTGAS و GASPRICE دارد. لازم است این مقادیر در هر تراکنش با هدف جلوگیری از انفجار نمایی و حلقههای بینهایت در کد تنظیم شود. این مقادیر محدودیت گامهای محاسباتی را در زمان اجرا نشان میدهد و پیامهای کدگذاری شده اساسی را ارسال میکنند.
«STARTGAS» این محدودیت را نشان میدهد و هر پیام اضافی که در حین اجرا ارسال میشود را مشخص میکند. «GASPRICE» نیز هزینهای است که در هر گام از محاسبه ماینر پرداخت میکند. اگر اجرای تراکنشها از گس خارج شود کل وضعیت تغییر کرده و تراکنش به استثنای پرداخت هزینهها، بازگشتی خواهد بود و اگر اجرای معامله با مقداری گس متوقف شود، آنگاه قسمت باقیمانده هزینهها به فرستنده بازگشت داده میشود. همچنین یک نوع معامله جداگانه برای ایجاد قرارداد وجود دارد که نوع پیامهایش مکاتبهای است. در این نوع معامله آدرس قرارداد بر اساس هش نانس حساب و دادههای تراکنش محاسبه میشود.
پیامد مهم سازوکار پیام، مالکیت «شهروند درجه یک» در اتریوم است. این ایده که قراردادها دارای قدرت معادل حسابهای خارجی هستند، شامل توانایی ارسال پیام و ایجاد قراردادهای دیگر میشود. این طرح امکان اجرای همزمان نقشهای مختلف را در قراردادها فراهم میکند. به عنوان مثال، در یک قرارداد شمارهای از سازمان غیرمتمرکز وجود باشد. در قرارداد دیگری یک حساب سپرده باشد. در قرارداد سوم بین یک فرد پارانویا که از امضای لامپورت ضد کوانتومی سفارشی استفاده میکند و در قرارداد چهارم یک نهاد مشترک امضا کننده وجود دارد که خود از حسابی با پنج کلید برای امنیت استفاده میکند.
قدرت پلتفرم اتریوم در این است که سازمان غیرمتمرکز و قرارداد سپردهگذاری نیازی به نگرانی در مورد نوع حساب هر یک از طرفین قرارداد ندارند.
تابع انتقال حالت Ethereum ، APPLY (S، TX) -> S ‘را میتوان به صورت زیر تعریف کرد:
۱- بررسی کنید که آیا معامله به خوبی شکل گرفته است (به طور مثال تعداد مناسبی دارد)، امضا معتبر است و نانس معامله با نانس حساب فرستنده مطابقت دارد. در غیر این صورت، خطایی را ارسال کنید.
۲- هزینه معامله را به عنوان STARTGAS * GASPRICE محاسبه کنید و آدرس ارسال را از امضا تعیین کنید. از مانده حساب فرستنده هزینه را کم و به نانس گیرنده اضافه کنید. اگر به اندازه کافی تعادل برای صرف هزینه وجود ندارد، یک خطا ارسال کنید.
۳- در فرآیند انتقال مقدار اولیه GAS = STARTGAS را وارد و مقدار مشخصی از گس را در هر بایت خارج کنید تا هزینه بایتها را در معامله پرداخت کنید.
۴- ارزش معامله را از حساب فرستنده به حساب گیرنده انتقال دهید. در صورتی که دریافت از حسابی که وجود ندارد، آن حساب را ایجاد کنید. اگر حساب دریافتکننده یک قرارداد است، حتی اگر عملیات تکمیل یا خروج گس پایانیافته باشد، کد قرارداد را اجرا کنید.
۵- اگر انتقال ارزش به دلیل نبود پول کافی برای فرستنده یا اجرای کد خروج گس انجام نشد، همه تغییر حالتها به جز پرداخت هزینهها بازگردانده و به حساب ماینر اضافه شود.
۶- هزینههای باقیمانده گس را به فرستنده بازگردانده وهزینههای پرداخت شده برای مصرف گس را به ماینر ارسال کنید
به عنوان مثال، فرض کنید کد قرارداد به شکل زیر است:
if! contract.storage [msg.data [0]]:
contract.storage [msg.data [0]] = msg.data [1]
توجه داشته باشید که در واقع کد قرارداد در کد سطح پایین EVM نوشته شده است. این مثال در سرپنت با زبان سطح بالا برای وضوح نوشته شده و میتواند به کد EVM وارد شود. فرض کنید حافظه ابتدایی قرارداد خالی باشد و معامله با مقدار ۱۰ اتر، ۲۰۰۰ گس، ۰.۰۰۱ قیمت گس اتر و دو داده: [2 ، ‘CHARLIE’] [3] ارسال شود. روند عملکرد برای این حالت به شرح زیر است:
۱- بررسی کنید که معامله معتبر و به خوبی انجام شده باشد.
۲- بررسی کنید که ارسال کننده معامله حداقل دارای ۲۰۰۰ اتر * ۰.۰۰۱= ۲ باشد. در چنین شرایطی 2 اتر از حساب فرستنده کم کنید.
۳- مقدار اولیه گس = ۲۰۰۰؛ با فرض اینکه طول معامله ۱۷۰ بایت و هزینه بایت ۵ باشد،
۸۵۰ گس کم میکنید و گسهای باقیمانده ۱۱۵۰ خواهد بود.
۴- ۱۰ اتر دیگر از حساب فرستنده کم کنید و آن را به حساب قرارداد اضافه کنید.
۵- کد را اجرا کنید. در این حالت، اینکه ذخیره سازی قرارداد در شاخص ۲ استفاده شده یا نه، مشخص شده و ذخیره را در شاخص ۲ به مقدار CHARLIE تنظیم میکند. اگر فرض را بر این بگیرید که برای اجرای کد ۱۸۷ گس مصرف میشود، بنابراین مقدار باقیمانده گس ۱۱۵۰-۱۸۷ = ۹۶۳ است
۶- ۹۶۳ * ۰.۰۰۱ = ۰.۹۶۳ اتر را به حساب فرستنده اضافه کرده و حالت نتیجه را بازگردانید.
اگر در پایان دریافت معامله قراردادی وجود نداشته باشد، کل هزینه معامله به سادگی برابر با ارائهGASPRICE تکثیر شده میشود و با طول معامله در بایت و دادههای ارسالی در کنار معامله بیربط خواهد بود. علاوه بر این، توجه داشته باشید که پیامهای آغازین قرارداد می توانند محدودیت کس را در محاسبات برنامهریزی کنند و اگر تابع محاسباتی از گس خارج شود تنها یک پیام ارسال میشود. از این جهت درست مانند معاملات، قراردادها میتوانند محدودیت منابع محاسباتی را تأمین کنند. منابع محاسباتی با تعیین محدودیتهای دقیق در محاسبات فرعی تکثیر میشوند.
اجرای کد
کد در قراردادهای اتریوم با یک زبان سطح پایین بایتکد و مبتنی بر پشته نوشته شده که به «کد ماشین مجازی اتریوم» یا «کد EVM» اشاره میکند. این کد شامل یک مجموعه بایت میشود که هر بایت قرار گرفته در آن نشاندهنده یک عملیات است. به طور کلی، اجرای کد حلقهای بینهایت از انجام تکراری عملیات در پیشخوان برنامه فعلی (که از صفر شروع می شود) و سپس پیشخوان افزایش برنامه که از یک شروع میشود، تشکیل شده است. اجرای کد حلقهای بینهایت تا زمانی که کد به اتمام برسد، خطا، دستورالعمل توقف یا شاخص بازگشت را شناسایی میکند.
عملیات در اتریوم به سه نوع فضای ذخیره اطلاعات دسترسی دارد. این فضاها پشته، حافظه و ذخیرهسازی طولانیمدت قرارداد هستند.
- پشته، قالبی است که در اولین خروجی قرار دارد و میتوان مقادیر 32 بایت را در آن فشار داد و بیرون آورد.
- حافظه، آرایه بایت بینهایت قابل توسعه است.
- ذخیره سازی طولانی مدت قرارداد، یک کلید ذخیره ارزش که در آن کلیدها و مقادیر هر دو ۳۲بایتی است. برخلاف پشته و حافظه که پس از پایان محاسبه دوباره تنظیم میشوند، فضای ذخیرهسازی برای مدت طولانی ادامه دارد.
کد همچنین به مقدار، فرستنده، دادههای پیام دریافتی و نیز دادههای هدر بلوک دسترسی دارد. کد میتواند یک آرایه بایت از داده را به عنوان یک خروجی بازگرداند. مدل اجرای رسمی کد EVM به طرز شگفتانگیزی ساده است. ماشین مجازی اتریوم نیز در زمان اجرا حالت محاسباتی کامل آن را با تاپل تعریف میکند. تاپل شامل وضعیت بلوک، معامله، پیام، کد، حافظه، پشته، کامپیوتر و گس میشود.
block_state حالتی جهانی است که شامل همه حسابها، بالانسها و ذخیرهسازیها میشود. ذخیره سازی در هر دور از اجرا،ساختار جدیدی را با گرفتن pc-th بایت کد کشف میکند و هر دستورالعمل از نظر چگونگی تأثیر بر تاپل تعریف خاص خود را دارد. به عنوان مثال ADD pops دو گزینه را در پشته خاموش میکند و با فشار میخواهد این بخش را افزایش دهد. یک مقدار از گس را کاهش میدهد و یک مقدار به کامپیوتر اضافه میکند و SSTORE به دو پشته خاموش فشار وارد میکند و موارد خارج از پشته و مورد دوم را در شاخص مشخص شده توسط مورد اول به ذخیره قرارداد میاندازد. همانطور که با کاهش گس به ۲۰۰و افزایش رایانه توسط 1ذخیرهسازی قرارداد در اولین مورد انجام میشود.روشهای زیادی برای بهینهسازی اتریوم از طریق تدوین به موقع وجود دارد، یکی از روشها ابتدایی، اجرای اتریوم در چند صد خط کد است.
بلاک چین و ماینینگ
بلاک چین اتریوم از بسیاری جهات به بلاکچین بیتکوین شباهت دارد. در واقع، بلاکچین اتریوم برخی از ویژگیهای بلاکچین بیتکوین را در خود دارد و جالب است که تفاوت اصلی اتریوم و بیتکوین نیز از نظر ساختار بلاکچین است. بلوکهای اتریوم برخلاف بیتکوین، حاوی یک کپی از لیست معاملات و آخرین حالت هستند. از طرف دیگر، دو مقدار، شماره بلوک و سختی نیز در بلوک ذخیره میشوند. بلوک الگوریتم اعتبارسنجی در اتریوم به شرح زیر است:
۱- بررسی کنید که آیا بلوک ارجاعی قبلی معتبر است یا خیر.
۲- بررسی کنید که برچسب زمانی بلوک بیشتر از بلوک قبلی و کمتر از ۱۵ دقیقه به سمت آینده باشد.
۳- بررسی کنید که شماره بلوک، دشواری، ریشه تراکنش، ریشه انشعابها و محدودیت گس(انواع مختلف مفاهیم خاص اتریوم سطح پایین) معتبر باشند.
۴- بررسی کنید که اثبات انجام کار در بلوک معتبر باشد.
۵- بگذارید S [0]، STATE_ROOT بلوک قبلی باشد.
۶- بگذارید TX با n تراکنش، لیست تراکنشهای بلوک باشد. برای همه در 0 … n-1 ، setS [i + 1] =
درخواست (S [i] ، TX [من]). اگر هر برنامهای خطایی را بازگرداند یا اگر کل گس مصرفی در بلوک موجود باشد، تا زمانی که این نقطه بیش از GASLIMIT بود، خطایی را برگردانید.
۷- اجازه دهید S_FINAL S [n] باشد، اما پاداش بلوک پرداخت شده را به حساب ماینر اضافه کنید.
۸- بررسی کنید S_FINAL همان STATE_ROOT باشد. در این صورت بلوک معتبر است وگرنه بلوک اعتباری ندارد.
ممکن است در نگاه اول این رویکرد بسیار ناکارآمد به نظر برسد، زیرا باید کل حالت را در هر کدام از بلوکها ذخیره کرد. اما در واقع کارایی باید با بیتکوین قابل مقایسه باشد. حالت به دلیل تغییر قسمت کوچکی از درخت در ساختار درخت ذخیره شده است.
به طور کلی، بین دو بلوک مجاور اکثر قریب به اتفاق درخت باید یکسان باشد، بنابراین دادهها میتوانند یک بار ذخیره شوند و با استفاده از اشارهگرها (به عنوان مثال هشهای درختان فرعی) دو بار به آنها ارجاع میشود. «درخت پاتریشیا» نوع خاصی از درخت است که برای تحقق این امر از آن استفاده میشود. درخت پاتریشیا شامل اصلاحاتی در مفهوم درخت مرکل میشود که به نودها اجازه ورود، حذف و تغییر کارآمد را میدهد. اطلاعات بخشی از آخرین بلوک هستند و نیازی به ذخیره کل تاریخ بلاکچین نیست. این استراتژی میتواند برای بیتکوین هم اعمال شود و ۵ تا ۲۰برابر ذخیره در فضا را محاسبه و آماده کند.
برنامههای کاربردی
به طور کلی، سه نوع برنامه در بالای اتریوم وجود دارد. دسته اول برنامههای مالی هستند که به ارائه روشهای قدرتمندتر برای مدیریت و عقد قرارداد با استفاده از پول به کاربران میپردازند. این دسته شامل ارزهای فرعی، مشتقات مالی، قراردادهای ریسک مالی ، کیف پول برای ذخیرهسازی، وصیتنامهها و در نهایت حتی قراردادهای کارمندی میشوند. دسته دوم، برنامههای نیمه مالی هستند. با اینکه پول نقش مهمی در برنامههای اتریوم دارد ولی برنامههای نیمه مالی نیز اهمیت زیادی در این رمزارز ایفا میکنند.
راهحلهای خودکارسازی در مشکلات محاسباتی یکی از مهمترین مثالها در برنامههای نیمه مالی است. دسته بعدی برنامههایی مانند رأیگیری و حاکمیت غیرمتمرکز آنلاین هستند که به هیچ وجه مالی نیستند.
سیستمهای توکن
سیستمهای توکن بلاکچین کاربردهای مختلفی دارند. کاربرد این سیستمها را میتوان در ارزهای فرعی یافت. توکنها داراییهایی هستند که به عنوان دلار آمریکا یا طلا به سهام شرکت اضافه میشوند. توکنها علامتهای تجاری منحصر به فرد و کوپنهای امن غیر قابل جعل هستند. سیستمهای توکن هیچ ارتباطی با مقدار متعارف ندارند و به عنوان سیستمهای نقطهای برای ایجاد انگیزه استفاده میشوند. پیادهسازی سیستمهای توکن در اتریوم بسیار آسان است. نکته کلیدی برای درک این مطلب در همه ارزها یا اساساً یک پایگاه داده با یک عمل انجام میشود: X واحد را از A کم و X واحد به B اضافه کنید. با این شرط که X قبل از معامله حداقل X واحد دارد و معامله توسط A تأیید شده باشد، تمام آنچه که برای پیاده سازی یک سیستم توکن لازم است اجرای منطق در قرارداد است.
کد اصلی برای پیادهسازی سیستم نشانه در Serpent به شرح زیر است:
from = msg.sender
to = msg.data[0]
value = msg.data[1]
if contract.storage[from] >= value:
contract.storage[from] = contract.storage[from] value
contract.storage[to] = contract.storage[to] + value
کد پیادهسازی که در بالا اجرا شد، در حقیقت یک اجرای واقعی از عملکرد انتقال وضعیت «سیستم بانکی» است. برای تهیه مرحله اولیه باید چند خط کد به فرمول بالا اضافه شود. قدم اول توزیع واحدهای ارزی و چند مورد دیگر است که در حالت ایدهآل امکان اضافه شدن کد به تابع را میدهد. در چنین شرایطی سایر قراردادها میتوانند برای موجودی یک آدرس جستجو کنند. از نظر تئوری، سیستمهای توکن مبتنی بر اتریوم به عنوان ارزهای فرعی میتوانند ویژگی مهم دیگری را نیز در اختیار داشته باشند. متاکوینهای مبتنی بر بیتکوین فاقد توانایی پرداخت هزینههای معامله به طور مستقیم با آن ارز هستند. روش اجرایی شدن این ویژگیها به حفظ تعادل اتر در قرارداد و بازپرداخت اتر کمک میکند. این روش همچنین با جمعآوری واحدهای ارزی داخلی که هزینهها را دریافت میکنند و دوباره آنها را میفروشند اجرایی میشوند. بنابراین کاربران باید حسابهای کاربری خود را با اتر فعال کنند؛ زیرا اتر موجود میتواند دوباره قابل استفاده شود و قراردادها را هر زمان که لازم بود پس دهد.
مشتقات مالی و ارزهای با ارزش پایدار
یکی از سادهترین و رایجترین کاربرد «قرارداد هوشمند» مشتقات مالی است. چالش اصلی در اجرای قراردادهای مالی این است که برای اکثر آنها باید قیمت خارجی مراجعه کنید. به عنوان مثال، برنامه ایدهآل قراردادی هوشمند است که از پوشش ریسک در برابر نوسانات قیمتی اتر (یا هر ارز رمزنگاری شده دیگری) با توجه به دلار آمریکا استفاده میکنند.این قرارداد باید از ارزش ETH / USD آگاه باشد. سادهترین راه برای ایجاد چنین قرارداد هوشمندی از طریق هزینه داده انجام میشود. قرارداد هزینه توسط یک طرف خاص (به عنوان مثال NASDAQ) نگهداری میشود. این قرارداد به گونهای طراحی شده که طرف مقابل نیز توانایی بهروزرسانیاش را در صورت لزوم داشته باشد. اگر رابطی را ارائه دهید که به سایر قراردادها امکان ارسال پیام به آن را بدهد میتوانید قرارداد را امتحان کرده و پاسخی را در خصوص تامین قیمت دریافت کنید.
با درنظر گرفتن این نکته مهم، قرارداد پوشش ریسک مانند زیر به نظر میرسد:
۱- منتظر A باشید تا هزار اتر را وارد کند.
۲- منتظر B باشید تا هزار اتر را وارد کند.
۳- ارزش هزار اتر را به دلار ثبت کنید، محاسبه را با مراجعه به قرارداد دادههای قابل بهروزرسانی انجام دهید، فرض کنیم X دلار هم به عنوان موجودی ذخیره دارید.
۴- بعد از سی روز، به یکی از طرفین، اجازه دهید قرارداد را با هدف ارسال X دلار به ارزش اتر به A و B، مورد بررسی قرار دهد. محاسبه دوباره با کنکاش در قرارداد دادههایی انجام میشود که قابلیت بهروزرسانی دارند. سپس قیمت جدید تعیین میگردد.
چنین قراردادی پتانسیل خوبی در تجارت ارزهای دیجیتالی دارد و از آنجا که یکی از مشکلات اصلی رمزارزها بی ثباتی و نوسان آنها است، نمیتوان این حقیقت را نادیده گرفت. هرچند بسیاری از کاربران و بازرگانان خواهان امنیت و راحتی معامله با داراییهای رمزنگاری شده هستند اما بسیاری از آنها نمیخواهند ۲۳ درصد از داراییهای خود را تنها در یک روز از دست بدهند.
رایجترین راهحلی که تاکنون پیشنهاد داده شده، داراییهای است که دارای حمایت صادرکننده باشند. ایده این راهحل را میتوان به این صورت توضیح داد که صادرکننده یک پول زیر مجموعه را ایجاد میکند. صادرکننده حق صدور و لغو واحدها را داشته و یک واحد پول را برای هر کسی فراهم میکند که به او یک واحد مشخص از داراییهای بنیادی مانند طلا و دلار (بهصورت آفلاین) میدهد، صادر کننده سپس متعهد میشود که یک واحد از داراییهای بنیادی را برای هر کسی که یک واحد از دارایی های رمزارز را پس میفرستد، فراهم کند. این مکانیزم امکان تعالی را برای هر دارایی که رمز ارز نباشد فراهم کرده و آن را به دارایی رمزارز تبدیل میکند. به شرط این که صادر کننده قابل اعتماد باشد.
با این همه، در عمل صادرکنندگان همیشه قابل اعتماد نیستند و در بعضی موارد زیربنای بانکی بسیار ضعیف است. در برخی موارد نیز زیربنای بانکی برای ارائه چنین سرویسهایی، خیلی محتاط عمل میکند. مشتقات مالی گزینه دیگری را ارائه میکنند و در اینجا به جای آن که یک صادرکننده برای فراهمآوری هزینهها وجود داشته باشد، از راهحلی غیرمتمرکز استفاده میشود. صادرکنندهها از دارایی پشتیبانی کرده و هزینهها را تامین میکنند. مشتقات مالی یک بازار غیرمتمرکز از دارندگان منابع مالی است که قیمت یک دارایی مرجع رمزنگاری شده را پیشبینی میکنند. به عبارت بهتر، مشتقات مالی بر روی افزایش قیمت داراییها شرط میبندند.
در این بازار غیرمتمرکز، نگهدارندهها در خصوص پرداخت به موقع معامله شکست نمیخورند. در حالی که صادرکنندهها همواره با خطر شکست در پرداختهای سر وقت مواجه هستند. دلیل اینکه نگهدارندهها در این زمینه شکست نمیخورند وجود قرارداد پوشش ریسک است. قرارداد پوشش ریسک پولهای آنها را در حساب شخص سومی نگهداری میکند. باید توجه داشت که این رویکرد به طور کامل غیرمتمرکز نیست چون هنوز هم به یک منبع مورد اعتماد برای فراهم ساختن تیکر قیمت، نیاز است.
با وجود تمام موارد گفته شده، این سیستم بهبود گستردهای در زمینه کاهش نیازمندیهای زیربنایی فراهم کرده است. به جز در مواردی که فرد صادر کننده است، در موارد دیگر صدور بهروزرسانی و تغذیه قیمت نیازمند هیچ مجوزی نیست و میتوان آن را در زمره آزادیهای بیان قرار داد و پتانسیل تقلب را کاهش میدهد.
هویت و سیستمهای اعتبار
رمزارز جایگزین پیشگام نیمکوین (Namecoin) سعی کرد از بلاکچینی شبیه به بلاکچین بیتکوین، برای فراهمآوری سیستم ثبتنام استفاده کند که در آنجا کاربران بتوانند نامهایشان را در یک پایگاهداده عمومی، همراه با دیگر دادهها ثبت کنند. همانطور که گفته شد استفاده اصلی یک سیستم DNS طرحبندی نامهای دامنه مانند bitcoin.org است. این سیستم در خصوص Namecoin و bitcoin.bit یک آدرس آیپی است. از این سیستم استفادههای دیگری مثل تایید مجوز ایمیلی و سیستمهای اعتباری پیشرفتهتر هم میکنند. در اینجا یک قرارداد اصلی برای فراهم نمودن یک سیستم ثبتنام شبیه نیمکوین در اتریوم را میبینیم:
if !contract.storage[tx.data[0 :]]
contract.storage[tx.data[0]] = tx.data[1 ]
این قرارداد بسیار ساده بوده که در پایگاه دادهای داخل شبکه اتریوم موجود است. این قرارداد میتواند به شبکه اضافه شود، اما نمیتوان آن را اصلاح یا کرد. هر کسی با مقداری هزینه میتواند نامی را ثبت کند که برای همیشه باقی میماند. قرارداد ثبتنام پیچیدهتر، یک شرط در عملکرد خواهد داشت که به قراردادهای دیگر اجازه بررسی آن را میدهد و همچنین یک مکانیزم برای مالک ( ثبتنامکننده اول) خواهد داشت که توانایی تغییر دادهها یا انتقال مالکیت را دارد. شخص حتی میتواند عملکرد اعتبار و شبکه اعتماد را در قرارداد بالا اضافه کند.
انبارش فایل غیرمرکزی
برخی از شرکتهای انبارش در چند سال گذشته، محبوبیت زیادی به دست آوردهاند. این شرکتهای استارتاپی ذخیره فایل اینترنتی به کاربران اجازه میدهند یک پشتیبان از هارد درایو را آپلود کنند و از سرویس ذخیره پشتیبان استفاده کنند. شرکتها برای ذخیره پشتیبان هارد درایو از کاربران هزینه دریافت میکنند. برجستهترین استارتاپ فایل غیرمرکزی Dropbox است.
بازار انبارش فایل به نسبت ناکارآمد است. با نگاهی سریع به راهحلهای متنوع موجود متوجه میشویم بهخصوص در حالت ناخوشایند سطح ۲۰ تا ۲۰۰ گیگ که در آن هیچ تخفیفی صورت نمیگیرد و هزینهها پایین نمیآید. قیمتهای ماهیانه برای هزینههای انبارش فایل مرسوم، به صورتی است که فرد بیش از هزینه کل هارد درایو در تنها یک ماه پرداخت میکند.
قراردادهای اتریوم قادر به توسعه یک اکوسیستم انبارش فایل غیرمتمرکز هستند، که در آنجا کاربران میتوانند با اجاره دادن هارد خود مقدار کمی پول به دست آورند و این فضای استفاده نشده میتواند برای کاهش قیمت انبارش فایل مورد استفاده قرار گیرد. بخش زیربنایی کلیدی چنین ابزاری را میتوان «قرارداد Dropbox غیرمتمرکز» نامید.
شیوه کارکرد این قرارداد در درجه اول این است که فرد دادههای مورد علاقهاش را به صورت بلوکهایی منشعب و سپس برای امنیت و حریم شخصی هر بلوک را رمزگذاری میکند. به واسطه بلوکهای منشعب شده و رمزدار درخت مرکل ساخته میشود.
پس از آن فرد قراردادی را با این قانون ایجاد میکند. هر N بلوک در این قرارداد یک شاخص تصادفی را در درخت مرکل انتخاب و از هش بلوک قبلی که از کد قرارداد قابل دسترسی است به عنوان منبع تصادفی بودن استفاده میکند. این کار مقدار X اتر را به اولین بخش از تراکنش میدهد و با یک پرداخت تسهیل شده تامین گردد که این پرداخت مدرک شبه تایید شده از مالکیت بلوک در شاخص خاصی در درخت میباشد.
وقتی کاربری میخواهد فایلها را دوباره دانلود کند، آنها میتوانند از یک پروتکل کانال ریزپرداخت برای بهبود فایل استفاده نماید. به عنوان مثال پرداخت 1 szabo برای هر ۳۲ کیلوبایت موثرترین رویکرد از لحاظ هزینه این است که پرداختکننده تراکنش را تا انتها پخش نکند بلکه به جای آن تراکنش را با یک تراکنش سودآورتر که بعد از هر ۳۲ بایت دارای همان نانس باشد، جایگزین کند یکی از ویژگی مهم این پروتکل این است که فرد در حال اعتماد به گرههای تصادفی زیادی است تا تصمیم نگیرند که فایل را به فراموشی بسپارند، اما فرد میتواند با شکافتن فایل به قطعات زیادی از طریق سهمبندی سری و نظارت بر قراردادها ببیند که آیا هر قطعه هنوز در مالکیت گره خاصی است یا نه و با این کار ریسک را تا نزدیک صفر کم کند. اگر یک قرارداد هنوز هم پول پرداخت میکند، این امر یک مدرک رمزنگاری شده را فراهم میکند، دلیلی بر وجود فردی است هنوز آنجا در حال ذخیره کردن فایل است.
سازمان های خودمختار غیرمتمرکز
مفهوم عمومی یک سازمان غیرمتمرکز، موجودیتی مجازی است با مجموعه معینی از اعضا یا سهامداران است که شاید با اکثریت، ۶۷ درصدی حق این را داشته باشد که پولهای این موجودیت را خرج کند و کد آن را اصلاح کند. اعضا به طور جمعی تصمیم میگیرند بر این که چگونه سازمان باید پولهایش را تخصیص دهد.
روشهای تخصیص وجوه یک DAO میتواند دامنهای از بخششها، حقوقها تا حتی مکانیزمهای عجیبتری مانند یک واحد پول درونی برای پاداش دادن به کارها داشته باشد. این امر در اساس تلهگذاری قانونی یک شرکت سنتی یا سازمان غیرانتفاعی را تکرار میکند ولی فقط از فناوری بلاکچین رمزنگاری شده برای اجرا استفاده میکند. اکثر گفتگوها در زمینه DAO، تاکنون حول محور مدل سرمایهگذاری یک سازمان خودمختار غیرمتمرکز (DAC) بوده است. در این گفتگوها سهامداران دریافتکننده سود و سهام قابل معامله است. گزینه دیگری نیز وجود دارد که شاید بتوان از آن به عنوان جامعه خودمختار غیرمتمرکز نام برد، در این گزینه همه اعضا سهمی مساوی در تصمیمگیری دارند و برای حذف یا افزودن عضو، موافقت 67 درصد از اعضا لازم است.
شاید این ضرورت که هر فرد باید تنها یک عضویت داشته باشد لازم است تا به طور جمعی توسط گروه اعمال شود. در ادامه طرح کلی برای بیان چگونگی کد دادن به DO را شرح میدهیم.
در واقع سادهترین طرح بخشی از یک کد خود اصلاحگر است که به شرطی که دو سوم اعضا با تغییر موافق باشند، تغییر مییابد.
هرچند این کد از لحاظ تئوری غیر قابل تغییر است اما فرد در واقع میتواند به این مقصود دست یابد و با داشتن بخشهایی از کد در قراردادهای جداگانه یک تغییرپذیری واقعی ایجاد کند و آدرس قراردادی را که در انبارش قابل اصلاح ذخیره شده، داشته باشد.
در یک پیادهسازی ساده قرارداد DAO، سه نوع تراکنش موجود خواهد بود که توسط دادههای فراهمشده در تراکنش از هم مجزا میشوند:
- [0,I,k,v] برای ثبت پیشنهادی با شاخص i آدرس را در شاخص k انبارش به ارزش v تغییر دهد.
- برای ثبت یک رای در طرفداری از پیشنهاد i .
- [2,i] برای نهایی ساختن پیشنهاد i به شرطی که آرای کافی جمع آوری شده باشد.
سپس قرارداد میتواند برای هر یک از این موارد شروطی داشته باشد. یک سابقه از همه تغییرات انبارش باز به همراه لیستی از افرادی که به آنها رای داده اند، حفظ میشود. لیستی از همه اعضا موجود خواهد بود. وقتی هر تغییر انبارش به دو سوم اعضایی که برای آن رای داده اند، برسد، یک تراکنش نهایی تغییر را اجرا میکند. یک ساختار پیچیدهتر توانایی رای دادن در داخل آن تعبیه شده و ویژگیهایی مانند ارسال تراکنش، افزودن و حذف اعضا را دارد و حتی ممکن است برای یک نیابت رایگیری به شیوه دموکراسی روان فراهم شود یعنی هرکس قادر است فردی را برای رای دادن تعیین کند و این تعیین انتقالی است، بنابراین اگر A شخص B را تعیین کند و B نیز شخص C را تعیین کند، پس C رای A را تعیین میکند.(این طراحی به DO اجازه میدهد که به طور طبیعی به عنوان یک جامعه غیر متمرکز رشد کند و به افراد اختیار میدهد که در نهایت وظیفه فیلتر این که چه فردی عضو کارشناسان است یا نه را نیابت کنند. هرچند برخلاف سیستم رایج، کارشناسان در طول زمان به این حیطه وارد میشوند و از آن خارج میگردند زیرا اعضای هر جامعه صفبندی خود را تغییر میدهند.
یک مدل جایگزین دیگر برای یک سازمان غیر متمرکز این است که هر حساب کاربری میتواند تعدادی سهم داشته باشد؛ این امکان هم وجود دارد که حساب کاربری صفر سهم داشته باشد در این موارد دو سوم سهام برای تصمیم گیری لازم است. یک ساختار کامل حاوی عملکرد مدیریت دارایی است که این عملکرد توانایی پیشنهاد دادن برای خرید یا فروش سهام و همچنین توانایی پذیرش پیشنهادها را دارد. ترجیح این سیستم پذیرش پیشنهاداتی است که یک مکانیزم مطابق با سفارش در داخل قرارداد دارند. فرآیند نیابت همچنین سبب انجام سبک دموکراسی روان میشود و مفهوم هیات مدیران را عمومی کرده و تعمیم میدهد.
ممکن است در آینده مکانیزمهای پیشرفتهتری برای مدیریت سازمانی پیادهسازی شود. در این نقطه یک سازمان غیرمتمرکز (DO) میتواند به عنوان یک سازمان خودمختار غیر متمرکز توصیف شود. (DAO) تفاوت بین این دو سازمان مبهم است، اما خط تقسیم عمومی این است که آیا مدیریت عموما از طریق یک فرآیند شبه سیاسی انجام میشود یا یک فرآیند خودکار. یکی از آزمایشهای شهودی خوب برای این موضوع، معیار «عدم وجود زبان رایج» است. آیا یک سازمان قابلیت انجام عملکردهایش را در صورتی که دو عضو آن با یک زبان صحبت نکنند، دارد؟
واضح است که در این حالت یک سازمان سنتی به سبک سهامداری با شکست مواجه میشود، اما چیزی مانند پروتکل بیتکوین احتمال بیشتری دارد که موفق شود. مدیریت رابین هنسن(Robin Hanson)،مکانیزمی برای مدیریت سازمانی از طریق بازارهای پیشبینی بوده و مثال خوبی است برای آنچه مدیریت خودمختار صحیح ممکن است به نظر برسد.
توجه کنید که نباید تصور کرد که همه DAO ها برتر از DO ها هستند، اتوماسیون در واقع الگویی است که احتمالا منفعتهای عظیمی در جاهایی خاص دارد و در جاهای دیگر هم ممکن است عملی نباشد، و بسیاری سازمانهای شبه DAO نیز موجود هستند.
برنامههای بیشتر
کیف پولهای پسانداز: فرض کنید آلیس میخواهد پولهایش را امن نگه دارد اما نگران گم کردن و یا هک شدن کلید خصوصی خود میباشد. او در یک قرارداد با باب اتر را به شکل زیر قرار میدهد:
آلیس به تنهایی میتواند حداکثر یک درصد از پولها را در یک روز برداشت کند؛ باب نیز به تنهایی میتواند حداکثر یک درصد از پولها را در هر روز برداشت کند. تفاوت آلیس و باب در این برنامه این است که آلیس میتواند با کلید خصوصی خود تراکنشی ایجاد کند و مانع از انجام تراکنشهای باب شود. در واقع، با این اقدام آلیس این توانایی باب را بلوکه میکند. آلیس و باب با هم میتوانند هر مبلغی را برداشت کنند. به طور عادی یک درصد در روز برای آلیس کافی است و اگر بخواهد بیشتر برداشت کند، میتواند از باب درخواست کمک کند. اگر کلید آلیس هک شود، او به باب میپیوندد و پولها را به قرارداد جدیدی انتقال میدهد. اگر او کلیدش را گم کند، باب در نهایت میتواند پولها را خارج کند. اگر آلیس به باب بدبین باشد و از نظرش باب بدطینت به نظر برسد، میتواند توانایی برداشت را از باب گرفته و او را مسدود کند.
بیمه محصولات کشاورزی: ایجاد یک قرارداد مشتقات مالی به راحتی امکانپذیر است، ولی تنها با استفاده از دادههایی که قابلیت بهروزرسانی به جای هر شاخص قیمت دیگری را دارند. اگر یک کشاورز در Lowa چیزی را بخرد که سود و پرداختی آن در جهت عکس بارندگی در Lowa باشد، در مواقع خشکسالی این کشاورز به طور خودکار پول دریافت میکند و اگر باران به اندازه کافی ببارد نیز خوشحال بود، چون محصولات در نهایت عملکرد خوبی خواهند داشت.
دادههای غیرمتمرکز با قابلیت بهروزرسانی: شاید در مورد قراردادهای مالی متفاوت، غیرمتمرکزسازی از طریق پروتکلی بنام SchellingCoin امکانپذیر باشد. به طور کلی پروتکل SchellingCoin به این صورت کار میکند که N طرف هر کدام بهای یک داده مشخص شده را مثلا قیمت اتریوم به دلار وارد سیستم میکنند. این قیمتها طبقهبندی شده و هر کس بین بیست و پنجمین و هفتاد و پنجمین درصد از یک توکن را به عنوان پاداش دریافت میکند. هر فرد انگیزه ارائه پاسخی را دارد که افراد دیگر فراهم خواهند کرد. تنها بهایی که تعداد زیادی از بازیگران میتوانند بر آن به طور واقعی توافق کنند همان پیش فرض شفاف حقیقت است. این یک پروتکل غیرمتمرکز را ایجاد میکند که میتواند در تئوری هر تعداد ارزشی را فراهم کند، از جمله قیمت اتریوم به دلار، دما در برلین و یا حتی نتیجه یک محاسبه مشکل خاص.
سند شخص ثالث چند امضایی هوشمند: بیتکوین اجازه قراردادهای تراکنش چند امضایی را در جایی میدهد که مثلا سه تا از پنج کلید داده شده میتوانند پولها را خرج کنند. اتریوم اجازه جداسازی و دانه دانه شدن بیشتری را میدهد، برای مثال چهار از پنج طرف با هم میتوانند هر چیزی را خرج کنند، سه طرف از پنج طرف با هم میتوانند روزانه تا ده درصد خرج کنند و دو تا از پنج تا روزانه میتوانند تا نیم درصد خرج کنند.
علاوه بر این، فرآیند چند امضایی اتریوم غیر همزمان است. دو طرف میتوانند امضاهایشان را در بلاکچین در اوقات متفاوت ثبت کنند. به طور اتوماتیک، آخرین امضا تراکنش را ارسال میکند.
محاسبه ابری: به احتمال زیاد فناوری EVM برای ایجاد یک محیط محاسبه تاییدپذیر به کار میرود و به کاربران اجازه پرسش از دیگران میدهد. کاربران میتوانند درباره محاسبات از دیگران بپرسند و سپس به طور اختیاری مدارکی را درخواست کنند. درخواست سند برای این است که کاربران مطمئن شوند محاسبات در جاهای مشخصی که به طور تصادفی تعیین شده اند، به درستی انجام شده است.
این کار همچنین اجازه ایجاد یک بازار محاسبات ابری را میدهد که در آن هر کاربری میتواند با کامپیوتر، لپتاپ و یا سرور مخصوص خود مشارکت کند. تستهایی که هر از گاهی انجام میشود همراه با سپردههای امنیتی میتوانند برای اطمینان از این که سیستم قابل اعتماد است، به کار روند یعنی گرهها نمیتوانند تقلب سودآوری داشته باشند. اگرچه چنین سیستمی ممکن است برای همه کارها مناسب نباشد، برای مثال کارهایی که نیاز به سطح بالایی از ارتباطات درون پروسه ای دارند، نمیتوانند در گرههای ابری عظیم به آسانی انجام گیرند. اما کارهای دیگری هستند که برای موازیسازی بسیار آسانتر هستند. پروژههایی مانند SETI@home ،folding@home و الگوریتمهای ژنتیکی را میتوان به آسانی در بالای چنین پلتفرمی پیاده کرد.
قمار همتا به همتا: هر تعداد از پروتکلهای قمار همتا به همتا مانند Frank Stajano و طاس سایبری Richard Clayton را میتوان بر روی بلاکچین اتریوم پیادهسازی کرد. سادهترین پروتکل قمار در واقع قرارداد متفاوتی در زمینه هش بلوک بعدی است و پروتکلهای پیشرفتهتر نیز میتوانند از آنجا ساخته شوند و سرویسهایی با هزینه نزدیک به صفر ایجاد کنند که توانایی تقلب نداشته باشند.
بازارهای پیشبینی: در صورت وجود یک پایگاه داده یا SchellingCoin، پیادهسازی بازارهای پیشبینی بسیار آسان خواهد بود و احتمالا بازارهای پیشبینی همراه با SchellingCoin اولین اپلیکیشن رایج مدیریتی است که میتوانند به عنوان یک پروتکل مدیریتی برای سازمانهای غیرمتمرکز به کار روند.
بازارهای غیرمتمرکز روی زنجیره: اساس این بازارها استفاده از سیستم هویت و اعتبار برای موارد متفرقه و نگرانیهاست.
پیاده سازی GHOST اصلاح شده
پروتکل GHOST یک پروتکل نوآورانه است که توسط Yonatan Sompolinsky و Aviv Zohar در دسامبر 2013 معرفی شد. انگیزه پشت این پروتکل این است که بلاکچینهایی با زمان تایید سریع، معمولا از پایین آمدن امنیت به دلیل نرخ stale بالا رنج میبرند زیرا مدت زمان خاصی طول میکشد تا بلوکها در شبکه منتشر شوند؛ اگر ماینر A یک بلوک را استخراج کند و سپس ماینر B بلوک دیگری را قبل از این که بلوک استخراج به B منتشر شود، استخراج کند، بلوک ماینر B به هدر میرود و در امنیت شبکه مشارکت نمیکند. علاوه بر این، یک مسئله تمرکز سازی نیز وجود دارد؛ اگر ماینر A یک استخر استخراج با 30 درصد قدرت هش داشته باشد و فرد B نیز ده درصد قدرت هش را، A ریسک ایجاد یک بلوک stale را 70 درصد اوقات خواهد داشت زیرا در 30 درصد باقی مانده A آخرین بلوک را ایجاد کرده و بنابراین فورا دادههای استخراج را دریافت میکند در حالی که B نود درصد اوقات این ریسک را خواهد داشت.
در نتیجه اگر فاصله بلوک به اندازه کافی کوتاه باشد تا درجه stale بالا رود، A در اساس با توجه به خاصیت اندازش کاراتر خواهد بود. اگر این دو تاثیر را در نظر بگیریم، بلاکچینهایی که سریعا بلوک تولید میکنند، احتمال زیادی دارد که تبدیل به یک استخر استخراج شوند که درصد عظیم مکفی از قدرت هش شبکه را برای کنترل واقعی بر فرآیند استخراج داشته باشند. آنچنان که توسط Sompolinsky و Zohar توصیف شده، GHOST مسئله اول یعنی فقدان امنیت شبکه را حل میکند و این را با شامل کردن بلوک های stale در محاسبه اینکه کدام زنجیره طولانیترین است، حل میکند. میتوان گفت که نه فقط پدر و اجداد دیگر یک بلوک بلکه همچنین بچههای stale ایجاد بلوک در زبان خاص اتریوم عموها به کار میرود به محاسبات طولانیترین بلوک اضافه میشوند که این طولانیترین بلوک، گواه کار آن را پشتیبانی میکند.
برای حل مساله دوم که همان تعصب مرکزیت است، ما به فراسوی پروتکل توصیف شده توسط دو فرد مذکور میرویم و همچنین به stale ها اجازه میدهیم که در زنجیره اصلی ثبت شوند تا پاداش بلوک دریافت کنند. یک بلوک stale 93.75 درصد از پاداش مبنا را دریافت و برادرزادهای که شامل بلوک stale است، 6.25 درصد باقی مانده را دریافت میکند، اما هزینه تراکنش به عموها داده نمیشود.
اتریوم نسخه ساده شدهای از GHOST را پیاده میکند که فقط تا پنج رده پایین میرود. به طور خاص، یک بلوک فقط میتواند مشمول یک عمو توسط نسل دوم تا پنجم بچه پدرش باشد و نه بلوک دیگر با رابطه فاصلهای بیشتر مانند بچه نسل ششم پدر یا بچه نسل سوم پدربزرگ این امر به دلایل زیادی انجام میشود. اولا GHOST نامحدود مشمول پیچیدگیهای زیادی برای محاسبه این که کدام عموها برای بلوک خاصی معتبرند، میشود. دوما GHOST نامحدود همراه با قابلیت جبران و پاداش که در اتریوم به کار میرود از ماینر سلب انگیزه میکند که در زنجیره اصلی به استخراج بپردازد و در زنجیره مهاجم عمومی استخراج نکند.
سرانجام محاسبات نشان میدهد که GHOST پنج سطحی همراه با انگیزهبخشی، بیش از 95 درصد کارایی دارد و حتی با زمان بلوک 15 ثانیهای و ماینر که قدرت هش 25 درصدی دارند، نشان دادهشده که کمتر از 3 درصد از منفعت تمرکز برخوردار خواهند بود.
هزینهها
از آنجا که هر تراکنشی که داخل بلاکچین انتشار مییابد، هزینه دانلود و تایید را به شبکه تحمیل میکند، تا حدودی به یک مکانیزم قانونگذاری نیاز دارد که به طور معمول دارای هزینههای تراکنش است. این هزینهها برای جلوگیری از سوءاستفاده اعمال میشوند. روش پیش فرضی که در بیتکوین به کار رفته، داشتن هزینههایی کاملا داوطلبانه است که متکی بر ماینر هستند. که به عنوان پاسدار عمل کنند و حداقلهای پویایی را تنظیم نمایند.
این روش، مخصوصا در جامعه بیتکوین با محبوبیت زیادی مواجه شده است زیرا رویکردی مبتنی بر بازار است و به عرضه و تقاضا بین استخراج کنندگان و ارسال کنندگان تراکنش ها مجوز میدهد و سبب تعیین قیمت میشود. مشکل این شیوه از استدلال این است که پردازش تراکنش را نمیتوان بازار نامید، اگرچه ذاتا جذاب است که پردازش تراکنش را به عنوان یک سرویسی تفسیر کرد که ماینر به ارسالکننده ارائه میدهد. در واقع هر تراکنشی که ماینر درگیرش میشود، لازم است که توسط هر گره در شبکه پردازش شود؛ بنابراین بخش عظیمی از هزینه پردازش تراکنش را طرف های ثالث تقبل میکنند، نه استخراج گری که تصمیم میگیرد که آیا درگیر آن تراکنش شود یا نه. در نتیجه احتمال زیادی وجود دارد که مشکلات مربوط به تراژدی انبازهها روی دهد.
اما چون این عیب در مکانیزم مبتنی بر بازار خودش را ظاهر کرده، وقتی فرض ساده شده غیر دقیق خاصی داده میشود، به طور اسرارآمیزی خودش را باطل میکند. فرض کنید که:
- ۱- یک تراکنش به عملکردهای K منتهی میشود و پاداش KR را به هر ماینری که درگیر آن شود، میدهد. در اینجا R توسط فرستنده تنظیم میشود و K و R به طور تقریبی از قبل برای ماینر قابل مشاهده خواهد بود.
- ۲- یک عملکرد هزینه پردازش، C را برای هر گره همراه خود دارد به این معنی که همه گرهها کارایی برابر دارند.
- ۳- تعداد N نود استخراج وجود دارد که هر کدام از آنها قدرت پردازش دقیقا مساوی دارند یعنی 1/N از کل نودها.
- ۴- هیچ گره کامل غیراستخراجگری وجود ندارد.
ماینر زمانی مشتاق به پردازش یک تراکنش خواهد بود که پاداش مورد انتظارش از هزینه بیشتر باشد. بنابراین پاداش مورد انتظار KR/N است زیرا که استخراج گر 1/N شانس پردازش بلوک بعدی را دارد و هزینه پردازش برای ماینر در واقع kC است.
بنابراین ماینر درگیر تراکنشهایی میشود که kR/N > kC, or R > NC باشد. باید توجه داشت که R هزینه قبل از عملکرد است که توسط ارسال کننده فراهم میشود و بنابراین در حد پایینتر از سودی است که فرستنده از تراکنش استخراج میکند. NC هزینه کل شبکه در پردازش عملکرد است. پس ماینرها انگیزه دارند که فقط درگیر تراکنشهایی شوند که سود عملی آن در کل بیشتر از هزینه باشد.
اما در واقعیت، انحرافات مهم زیادی از این فرضیات وجود دارد:
- ۱- ماینر هزینه بالاتری را از دیگر نودهای تایید کننده، برای پردازش تراکنش میپردازد. از آنجا که این زمان اضافی برای تایید در انتشار بلوک تاخیر ایجاد میکند، شانس این که بلوک خراب شود افزایش مییابد.
- ۲- در واقع نودهای کامل غیر استخراجگری وجود دارند.
- ۳- ممکن است توزیع قدرت استخراج در عمل بسیار غیر انسانی باشد و برای آسیب به شبکه دشمنان سیاسی و افراد بدطینتی وجود داشته باشند. این افراد و گروهها قادرند به روشهای هوشمندانهای قراردادهایی را با هزینههای بسیار پایینتر از هزینه پرداختی تنظیم کنند که هزینهاش توسط دیگر نودهای تاییدکننده باشد.
نکته ۱ در بالا، گرایشی را برای ماینر فراهم میکند که درگیر تراکنشهای کمتری شود و نکته دوم NC را افزایش میدهد. در نتیجه این دو تاثیر، حداقل به طور نسبی یکدیگر را خنثی میکنند. نکات ۳ و ۴ مسائل مهمی هستند و برای حل آنها، ما به طور ساده یک پوشش شناور ایجاد میکنیم و آن بدین صورت است که هیچ بلوکی نمیتواند عملکردهای بیشتری از BLK_LIMIT_FACTOR دفعه میانگین متحرکنمایی درازمدت داشته باشد. به طور خاص:
blk.oplimit = floor((blk.parent.oplimit * (EMAFACTOR – 1) + floor(parent.opcount * BLK_LIMIT_FACTOR))/ EMA_FACTOR)
BLK_LIMIT_FACTOR و EMA_FACTOR ثابت هستند که به مقدار 65536 و 1.5 تنظیم میشوند، البته در حال حاضر این گونه است، اما بعد از تحلیل و بررسی بیشتر احتمال دارد که تغییر کنند.
محاسبه و تورینگ کامل
یک نکته مهم این است که ماشین مجازی اتریوم دارای تورینگ کامل است، یعنی کد EVM میتواند هر محاسبهای را که اجرای آن امکانپذیر باشد، از جمله حلقههای نامحدود، رمزدار کند. کد EVM به دو شیوه اجازه حلقه زنی میدهد؛ اول با دستورالعمل JUMP که به برنامه اجازه میدهد که به نقطه قبلی در کد برگردد و یک دستورالعمل JUMPI که خیزش های مشروط را انجام میدهد و اجازه عملیاتی مانند: x < 27: x = x * 2 را میدهد.
دوم این که قراردادها میتوانند با قراردادهای دیگر تماس داشته و به طور بالقوه اجازه حلقه زنی را از طریق بازگشت داشته باشند. این به طور طبیعی منجر به مشکلی میشود و آن این که آیا کاربران بداندیش اساسا میتوانند ماینرها و گرههای کامل را به زور وارد یک حلقه نامحدود کنند؟
این موضوع به دلیل یک نوع مشکل که در علم کامپیوتر موجود است، مطرح میشود که این مشکل مکث(halting) نامیده میشود. به طور عمومی هیچ شیوه ای وجود ندارد که تعیین کنیم آیا یک مشکل پیش آمده هرگز مکث میکند یا نه.
همچنان که در بخش انتقال فازی توصیف شد، راه حل ما به شیوه ای کار میکند که یک تراکنش را ملزم کند که بیشترین تعداد مراحل محاسباتی را تا جایی که اجازه هست، تنظیم کند. اگر اجرا زمان بیشتری طول بکشد، محاسبات برگشت داده شده اما با این وجود هزینه ها باز هم پرداخت میشوند. پیام ها نیز به همین شیوه عمل میکنند. برای مشخص شدن انگیزهای که پشت راه حل ما است، به مثالهای زیر توجه کنید: مهاجمی قراردادی را ایجاد میکند که یک حلقه نامحدود را مجبور به اجرا میکند و سپس تراکنشی را برای فعال کردن حلقه استخراجگر میفرستد. استخراجگر تراکنش را پردازش خواهد کرد و حلقه نامحدود را اجرا میکند، سپس تا زمانی که گس تمام شود منتظر میماند.
حتی اگر گس در تراکنش تمام شده و نیمه کاره متوقف شود، تراکنش همچنان معتبر است و ماینر میتواند هزینه را برای هر مرحله محاسباتی از مهاجم مطالبه میکند. مهاجم، حلقه نامحدودی با طول زیاد را ایجاد میکند و هدفش فشار به ماینر برای ادامه طولانی مدت محاسبه است. چرا که زمانی که محاسبه تمام شود چند بلوک دیگر هم ظاهر میشود و در این حالت ماینر نمیتواند درگیر تراکنش شده و هزینه را دریافت کند. با این همه، وظیفه مهاجم پرداخت بهایی برای STARTGAS است تا تعداد مراحل محاسباتی محدود شود، پس ماینر از قبل میداند که محاسبه مراحل بیش از حد معمول طول خواهد کشید. مهاجم قراردادی با کدی مانند – send(A,contract.storage[A )] contract.storage[A] = 0 را دیده و تراکنشی با گس کافی برای اجرای مرحله اول ارسال میکند.(در این حالت گس کافی برای مرحله دوم وجود ندارد)
اقدام مهاجم و ارسال تراکنش به معنای برداشت است ولی کد اجازه کاهش موجودی را نمیدهد. لزومی به نگرانی نویسنده قرارداد درباره محافظت در برابر چنین حملاتی نیست چون اگر اجرا نیمهکاره متوقف شود، با اعمال تغییراتی برگشتپذیر خواهد بود.
یک قرارداد مالی با میانگینگیری از نه دسته داده با قابلیت بهروزرسانی تشکیل میشود. این دادهها به طور اختصاصی به منظور به حداقل رساندن ریسک، کار میکنند. مهاجم یک دسته از دادههایی که قابلیت بهروزرسانی دارند را در اختیار میگیرد. این دادهها به گونهای طراحی شدهاند که از طریق مکانیزم اعلان آدرس متغیر که در بخش DAO ها توصیف شدند، قابل اصلاح و تعدیل باشند. مهاجم دادهها را تغییر میدهد و باعث راهاندازی یک حلقه نامحدود میشود؛ به همین دلیل مهاجم تلاش میکند مطالبه وجه از قرارداد مالی به تمام شدن گس ختم شود. با وجود تلاشهای مهاجم، قرارداد مالی یک محدوده گس را در پیام مشخص میکند تا از این مشکل ممانعت به عمل آورد.
گزینه دیگر در رابطه با تورینگ کامل، تورینگ ناقص است که در آنجا JUMP و JUMPI موجود نیستند و فقط یک کپی از یک قرارداد، مجاز است که در دسته اعلانها در هر زمان خاصی موجود باشد. با این سیستم قادر به توصیف سیستم هزینه هستیم. شاید شک و شبهههایی که پیرامون کارایی راهحل ما وجود دارد ضروری نباشند، زیرا هزینه اجرای یک قرارداد می تواند از بالا توسط اندازهاش محدود شود. علاوه بر این، تورینگ ناقص محدودیت خیلی بزرگی هم نیست و ما در این زمینه قراردادهای زیادی را مورد بررسی قرار دادهایم؛ تاکنون فقط یکی از آنها نیازمند حلقه بوده است و حتی آن حلقه هم میتوانست با 26 تکرار یک قسمت یک خطی از کد، برداشته شود.
با وجود اشارههای جدی در رابطه با تورینگ کامل و منفعت محدود، این سوال مطرح میشود که چرا باید زبان تورینگ ناقص نباشد؟ اما در واقع زبان تورینگ ناقص از راهحلی مناسب برای این مشکل به دور است. برای اینکه این مسئله را بتوانیم به راحتی متوجه بشوید، قراردادهایی را مورد بررسی قرار دهید. قراردادها را اینطور شرح میدهیم. یک تراکنش را به A بفرستید. بنابراین در ۵۱ تراکنش، ما قراردادی داریم که تا ۵۰۲ مرحله محاسباتی ادامه مییابد. ماینرها میتوانند چنین خرابیهایی را قبل از موعد تشخیص دهند و با باقی گذاردن یک بها همراه با هر قرارداد، تعداد بیشینه مراحل محاسباتی را تعیین کنند و این را برای قراردادها محاسبه کنند تا مکرر با قراردادهای دیگر ارتباط داشته باشند.
این موضوع نیازمند این است که ماینرها قراردادهایی را که منجر به ایجاد دیگر قراردادها میشوند، ممنوع کنند. ساخت و اجرای همه ۵۰ قرارداد بالا به سادگی در داخل یک قرارداد مجزا قرار میگیرد. از طرفی نکته مسئلهساز این است که فیلد آدرس یک پیام متغیر بوده و امکان پیشبینی اینکه کدام قراردادهای دیگر مورد اعلان و ارتباط قرار میگیرند، غیرممکن باشد. اگر همه چیز را کنار هم قرار دهیم به نتیجه جالبی میرسیم؛ مدیریت تورینگ کامل خیلی ساده و تورینگ ناقص برای مدیریت خیلی مشکل است. تنها در صورتی که کنترلهای مشابه دقیقی انجام شود به پروتکل تورینگ اجازه کامل بودن میدهیم. از دیگر نکات قابل توجه در خصوص اتریوم میتوانیم به این موضوع رسیدگی کنیم که واحد پول و صدور شبکه اتریوم شامل واحد پولی میشود که در داخل خودش ساخته شده و اتر نام دارد. اتر اهداف دوگانهای را برآورد میکند، اول یک لایه نقدینگی اولیه را برای اجازه مبادله مفید بین انواع مختلف داراییهای دیجیتال فراهم میکند. و دوم اینکه مکانیزمی را برای پرداخت هزینه تراکنشها فراهم میکند. مورد دوم را میتوانیم مهمتر از مورد اول بدانیم.
برای سادگی و خودداری از بحث بیشتر، مباحث اخیر در مورد mBTC, uBTC, satoshi را در بیتکوین مورد توجه قرار دهید پولها از قبل برچسب زده شده و تعیین میشوند. این باید به عنوان یک نسخه توسعه یافته از دلار و سنت یا بیتکوین و ساتوشی در نظر گرفته شود. در آینده نزدیک انتظار داریم که اتر برای تراکنشهای معمولی، finney برای تراکنشهای خرد و szabo و wei برای بحثهای فنی در مورد هزینهها و اجرای پروتکل به کار روند.
مدل صدور به صورت زیر خواهد بود:
اتر در یک فروش واحد پول به قیمت 1337 – 2000 اتر در قبال هر بیتکوین، رها خواهد شد و هدف این مکانیزم این است که هزینههای سازمان اتریوم را تامین کند و برای توسعهای که با موفقیت توسط تعدادی از پلتفرمهای رمزنگاری دیگر به کار رفته، هزینه کند.
خریدارهای اولیه از تخفیفات بزرگتری بهرهمند میشوند. بیتکوینی که از فروش دریافت میشود کلا برای پرداخت حقوقها و بخششها به توسعهدهندگان، محققان و پروژههایی در اکوسیستم رمزارز به کار میرود ۰.۰۹۹ از کل مقدار به فروش رفته برای اولین کسانی که در توسعه قبل از دریافت و تامین هزینه از طریق بیتکوین و قبل از به قطعیت رسیدن این تامین هزینه از طریق بیتکوین، مشارکت کردند، اختصاص داده شده و یک ۰.۰۰۹۹ دیگر هم به پروژه های تحقیقاتی دراز مدت تخصیص داده میشود. ۰.۲۶ از کل مقدار فروخته شده، بعد از آن نقطه تا ابد، هر سال برای استخراج کنندگان خواهد بود.
تفکیک صدور
مدل رشد عرضه خطی دائمی، ریسک چیزی که تعدادی به عنوان تمرکز زیاد ثروت در بیتکوین میبینند، کاهش پیدا میکند و به افرادی که در زمان حال و در دورههای آینده زندگی خواهند کرد، فرصت عادلانه ای داده میشود تا واحدهای پول را کسب کنند. در این حال همزمان مشکل کاهش بهای اتر هم حل میشود زیرا نرخ رشد عرضه اگر به عنوان درصدی در نظر گرفته شود، به مرور زمان تمایل دارد که به سمت صفر سیر کند.
ما به این تئوری میرسیم که سکهها همیشه در طول زمان به دلیل بیدقتی، مرگ مالکانشان و دلایل دیگری گم میشوند و این گمشدگی سکه میتواند به صورت درصدی از کل عرضه هر سال، مدلبندی شود. کل عرضه واحد پول در گردش، در واقع سرانجام در ارزشی مساوی با صدور سالیانه تقسیم بر نرخ گمشدگی قرار خواهد گرفت مثلا در نرخ گمشدگی یک درصد، زمانی که عرضه به ۲۶x برسد، ۰.۲۶x استخراج میشود و ۰.۲۶x هر سال گم میشود و این سبب ایجاد یک موازنه میگردد. تمرکز استخراج الگوریتم استخراج بیت کوین اساسا با استخراج گرانی کار میکند که SHA256 را در نسخههایی که ظاهرا اصلاح شده بلوک پیشرو بارها و بارها محاسبه میکنند تا سرانجام یک گره به صورت نسخهای ظاهر شود که هش آن کمتر از هدف باشد. در حال حاضر حدود ۱۹۰۲ بار بلوکها محاسبه میشوند ولی این الگوریتم استخراج نسبت به دو شیوه تمرکز آسیبپذیر است. اول این که اکوسیستم استخراج توسط تراشههایی کامپیوتری که برای این کار طراحی شدهاند مغلوب ASIC ها میشود، که کاراییش بیش از هزار بار از استخراج بیتکوین بیشتر است. این بدین معنی است که استخراج بیتکوین هرگز یک پیشه غیر متمرکز و مساوات طلب نیست و نیازمند میلیونها دلار سرمایه برای مشارکت موثر است.
دوم اینکه بیشتر ماینرهای بیتکوین در واقع اعتباربخشی بلوک را به طور محلی انجام نمیدهند، در عوض آنها متکی بر استخرهای استخراج متمرکز هستند تا پیشروهای بلوک فراهم شوند. این مشکل خیلی شدید است و چنان که در زمان نوشتن این جستار، دو استخر استخراج برجسته تقریبا به طور غیرمستقیم ۵۰ درصد پردازش قدرت در شبکه بیتکوین را کنترل میکنند. این حقیقت که ماینرها اگر یک استخر یا ائتلاف اقدام به حمله ۵۱ درصد کند، میتوانند به استخرهای استخراج دیگری منتقل شوند تا حدودی مسئله را تسکین میبخشد. هدف اتریوم در حال حاضر این است که از یک الگوریتم استخراج استفاده کند که مبتنی بر تولید تصادفی یک عملکرد هش بینظیر برای هر ۱۰۰۰نانس باشد که از یک دامنه گسترده کافی از محاسبات برای از میان برداشتن منافع سختافزار خاص استفاده میکند.
این استراتژی به طور یقین تمرکز را به صفر نمیرساند و نیاز هم نیست که چنین کاری کند. باید دقت داشت که هر کاربر فردی، بر روی کامپیوتر شخصی و یا لپتاپ خصوصی خود، میتواند مقدار معینی فرآیند استخراج را تقریبا به طور رایگان انجام دهد و فقط هزینه برق را بپردازد؛ ولی بعد از اینکه به استفاده ۱۰۰درصدی از سی پی یو کامپیوتر رسید استخراج اضافی مستلزم پرداخت هزینه برای برق و سختافزار میشود.
لازم است شرکتهای استخراج ASIC ، از هش اول برای پرداخت الکتریسیته و سختافزار اقدام کنند. بنابراین اگر بتوان تمرکز را در زیر نسبت (E+H)/E نگه داشت، حتی اگر ASIC ها هم ساخته شوند، هنوز هم جا برای استخراج گران معمولی خواهد بود.
علاوه بر این با طراحی یک الگوریتم که استخراج نیازمند دسترسی به کل بلاکچین باشد، استخراجکنندگان مجبور میشوند کل بلاکچین را ذخیره کنند و قادرند حداقل هر تراکنش را تایید کنید. این مطلب نیاز به استخرهای استخراج متمرکز را از میان بر میدارد. اگرچه تعدادی از استخرهای استخراج هنوز نقش قانونی ایجاد توازن تصادفی بودن توزیع پاداش را ایفا میکنند. این عملکرد میتواند توسط استخرهای همتا به همتا بدون کنترل مرکزی انجام شود. این روش به جنگ علیه تمرکز نیز کمک میکند. همچنین این روش با افزایش تعداد گرههای کامل در شبکه انجام میشود و شبکه به طور معقولی غیرمتمرکز میماند حتی اگر تعداد زیادی از کاربران معمولی مشتریهای سبک را ترجیح دهند.
مقیاسپذیری
یکی از نگرانی رایج در مورد اتریوم مسئله مقیاس پذیری آن است. اتریوم نیز مانند بیتکوین از این نقص رنج میبرد که هر تراکنش باید توسط هر گره در شبکه پردازش شود. در مورد بیتکوین، اندازه بلاکچین رایج در حدود ۲۰GB قرار گرفته و هر ساعت حدود ۱MB رشد میکند.
اگر شبکه بیت کوین مجبور بود مانند ویزا (Visa) در هر ثانیه ۲۰۰۰ تراکنش را پردازش کند، در هر ۳ ثانیه ۱ MB رشد میکرد. در هر ساعت ۱ GB و سالی ۸TB . اتریوم احتمالا از الگوی رشد مشابهی رنج خواهد برد و این مسئله با توجه به این حقیقت که اپلیکیشنهای زیادی در بالای بلاکچین اتریوم موجود خواهد بود، این وضع وخیمتر نیز خواهد شد و مانند بیتکوین نیست. در بیتکوین فقط یک واحد پول در بالای بلاکچین آن موجود باشد اما این موضوع که گرههای کامل اتریوم لازم است فقط مرحله را ذخیره کرده و لزومی به ذخیره کل تاریخچه بلاکچین ندارد، سبب بهبود اوضاع میشود.
مشکل چنین اندازه بزرگی از بلاکچین، ریسک تمرکز است. اگر اندازه بلاکچین مثلا به اندازه ۱۰۰ TB افزایش پیدا کند، فقط تعداد کمی از کسب و کارهای بزرگ، گرههای کامل را اجرا و مدیریت میکنند، با وجود همه کاربرهای عادی که از گرههای سبک SPV استفاده میکنند.
در چنین موقعیتی، این نگرانی بالقوه مطرح میشود که گرههای کامل میتوانند با یکدیگر جمع شوند و همگی توافق کنند که به روشی سودآور تقلب کنند مثلا با تغییر پاداش بلوک به خودشان بیتکوین بدهند. گرههای سبک به هیچ وجه فوری متوجه این موضوع نمیشوند، البته حداقل یک گره کامل صادق احتمالا موجود خواهد بود و بعد از گذشت چند ساعتی، اطلاعات در مورد کلاهبرداری از طریق کانالهایی مانند Reddit به بیرون میروند و در آن هنگام خیلی دیر خواهد بود.
در این حالت بستگی به کاربران عادی دارد که تلاش کنند بلوکهای داده شده را در لیست سیاه قرار دهند. این مشکل نیازمند هماهنگی عظیم و احتمالا غیر ممکن است و در مقیاسی شبیه به حمله ۵۱درصدی موفقیتآمیز است. در مورد بیتکوین این مشکل اخیرا مورد توجه قرار گرفته است، اما یک فرایند اصلاح بلاکچین وجود دارد که توسط پتر تاد (Peter Todd) پیشنهاد شده و این مشکل را حل میکند.
اتریوم در کوتاه مدت دو استراتژی اضافی را برای دست و پنجه نرم کردن با این مشکل، به کار خواهد برد. اول اینکه به دلیل الگوریتمهای استخراج مبتنی بر بلاکچین، حداقل هر ماینری مجبور خواهد بود که یک گره کامل باشد و محدوده پایینتری را در تعداد گرههای کامل ایجاد نماید. دوم اینکه که یک ریشه درخت فازی واسطه را بعد از پردازش هر تراکنش، در بلاکچین درگیر خواهیم کرد.
حتی اگر اعتباردهی بلوک متمرکز باشد، به شرطی که گره تاییدکننده صادق موجود باشد، مشکل تمرکز میتواند از طریق یک پروتکل تایید کنار زده شود. اگر یک استخراج گر بلوک نامعتبری را منتشر کند، ان بلوک باید یا به بدی شکل گرفته باشد و یا حالت S[n] نادرست باشد.
از آنجا که S[0] به عنوان صحیح شناخته شده، باید تعدادی S[i] مرحله اول موجود باشد که نادرست هستند که در آنجا S[i-1] صحیح است. گره تاییدکننده شاخص i را فراهم میکند، همراه با «مدرک عدم اعتماد» که متشکل از زیر مجموعهای از گرههای درخت پاتریشیا است که لازم است APPLY(S[i-1],TX[i]) -> S[i] را پردازش کنند. گرهها قادر خواهند بود که از آن گرهها برای مدیریت آن بخش از محاسبه استفاده کنند و ببینند که S[i] تولید شده با S[i] فراهم شده مطابقت ندارد. حمله پیچیدهتر دیگر، شامل ماینرهای بدذاتی است که بلوکهای ناکامل را منتشر میکنند. بنابراین اطلاعات کامل حتی موجود نیست تا با توجه به آن تعیین کرد که آیا بلوکها معتبرند یا نه. راهحل این مشکل پروتکل چالش جواب است که گرههای تاییدی چالشهایی را صادر میکنند که به شکل شاخصهای تراکنش هدف میباشد و به محض این که یک گره آنها را دریافت میکند، یک گره سبک با بلوک به عنوان غیر قابل اعتماد برخورد میکند تا یک گره دیگر چه استخراجگر باشد و چه تاییدگر، زیر مجموعهای از گرههای پاتریشیا را به عنوان مدرک اعتبار فراهم کند.
کنار هم گذاشتن تمام موارد: برنامههای غیرمتمرکز
مکانیزم قراردادی که در بالا توصیف شد، به همه اجازه میدهد که چیزی را که اساسا یک اپلیکیشن رسته دستور است، بر روی ماشین مجازی مدیریت کند که توسط اجماع بین کل شبکه اجرا میشود و به آن اجازه میدهد که یک فاز قابل دسترسی جهانی را به عنوان هارد درایو خود تعدیل کند.
اما برای اکثر مردم، واسطه رسته فرمان که یک مکانیزم ارسال تراکنش است، به اندازه کافی خوشایند نیست که عدم تمرکز را به یک جایگزین رایج جذاب، تبدیل کند. برای این مقصود، یک اپلیکیشن غیر متمرکز کامل باید متشکل از هر دو اجزای سطح پایین و با منطق کسب و کاری باشد، چه به طور کامل روی اتریوم پیاده سازی شده باشند، یا از ترکیبی از اتریوم و سیستمهای دیگر استفاده کنند مانند لایه پیام رسانی همتا به همتا که اخیرا برنامه ریزی شده که برای کلاینت اتریوم فراهم گردد و یا به طور کلی سیستم های دیگری باشند و با عناصر واسطه کاربری گرافیکی سطح بالا.
طرح کلاینت اتریوم این است که به عنوان یک مرورگر شبکه خدمت کند اما eth شیء API جاوا اسکریپت را پشتیبانی کند که صفحات وب تخصصی شده ای که در کلاینت دیده میشوند، قادر خواهند بود که با بلاکچین اتریوم تعامل کنند. از منظر وب سنتی، این وب پیج ها کاملا محتوای ساکنی دارند زیرا که بلاکچین و دیگر پروتکلهای غیر متمرکز به عنوان جایگزینی کامل برای سرور و به مقصود مدیریت درخواست هایی که توسط کاربر شروع شده، خدمت میکنند. سرانجام پروتکل های غیر متمرکز، خوشبختانه خودشان به نوعی از اتریوم استفاده میکنند و ممکن است خودشان نیز برای ذخیره وب پیجها به کار روند.
نتیجهگیری
پروتکل اتریوم در ابتدا به عنوان یک نسخه پیشرفته رمزارز دیده شد که ویژگیهای مترقی مانند سند شخص ثالث روی بلاکچین، محدودههای برداشت و قرارداد های مالی، بازار قمار و چیزهایی مانند آن را از طریق یک زبان برنامه نویسی بسیار تعمیم یافته، فراهم میکند.__ پروتکل اتریوم هیچ یک از اپلیکیشن ها را به طور مستقیم پشتیبانی نمیکند اما وجود یک زبان برنامه نویسی کامل تورینگ به این معنی است که قرارداد های اختیاری میتوانند در تئوری برای هر نوع تراکنش و یا برنامهای ایجاد شوند. اما آنچه که بیشتر در مورد اتریوم جالب است این است که پروتکل اتریوم بسیار فراتر از فقط واحد پول بودن میرود.
پروتکلها و برنامههای غیرمتمرکز در مورد انبارش فایل غیرمتمرکز، محاسبات غیرمتمرکز و بازارهای پیشبینی غیر متمرکز، همراه با تعداد زیادی از مفاهیم دیگر این پتانسیل را دارند که به طور اساسی کارایی صنعت محاسبه را افزایش دهند و تقویت عظیمی برای دیگر پروتکل های همتا به همتا را فراهم کنند که این کار را با اضافه کردن یک لایه اقتصادی برای اولین بار انجام میدهند. سرانجام باید گفت که یک رسته اساسی از اپلیکیشن هایی که اصلا در زمینه پول چیزی برای انجام دادن ندارند، موجود است.
مفهوم عملکرد انتقالی فازی اختیاری آنچنان که توسط پروتکل اتریوم پیاده شده برای یک پلتفرم با پتانسیل بی نظیر فراهم میگردد و یک پروتکل بنبست و تک منظوره نیست که برای رسته خاصی از اپلیکیشن ها در انبارش داده، قمار یا امور مالی فراهم شده باشد بلکه طراحی اتریوم بیانتها است و ما معتقدیم که بسیار مناسب خدمت به عنوان یک لایه زیربنایی برای تعداد زیادی از پروتکل های هم مالی و هم غیر مالی در سال های آینده است.
یادداشتها
- ۱- یک خواننده سطح بالا ممکن است متوجه شود که در حقیقت آدرس بیتکوین هش کلید عمومی منحنی بیضوی است و خودش کلید عمومی نیست. اما در واقع یک فناوری رمزنگاری قانونی کامل برای مراجعه به هش کلید عمومی به عنوان یک کلید عمومی است. این بدین دلیل است که رمزنگاری بیت کوین میتواند به عنوان یک الگوریتم امضای دیجیتال سفارشی تلقی گردد که در آنجا کلید عمومی متشکل از هش کلید عمومی ECC میباشد.
امضا متشکل از یک کلید عمومی ECC است که با امضای ECC الحاق شده و الگوریتم تایید شامل بررسی کلید عمومی ECC در امضا در برابر هش کلید عمومی ECC است که به عنوان یک کلید عمومی فراهم شده و سپس امضای ECC را در برابر کلید عمومی ECC تایید میکند. - ۲- از لحاظ فنی میانگین یازده بلوک قبل
- ۳-به طور ذاتی 2 و CHARLIE هر دو عدد هستند که دومی ارائه ۲۵۶ بر مبنای بیگ اندیان است. عدد ها میتوانند حداقل و حداکثر 2 ^ 256 – 1 باشند.