- اتریوم، فرزند معجزهآسای بلاکچین و ماشین مجازی آن به نام Ethereum Virual Machine، نمونههای برجستهی، استفاده از بلاکچین هستند. بسیاری از ICOها تجارت خود را برای مبنای ساختار قرارداد هوشمند (Smart Contract) ساختهاند که یکی از آنها DApps یا برنامهی کاربردی غیرمتمرکز هست. حالا میخواهیم در این مورد بحث کنیم که، آیا اتریوم واقعا غیرمتمرکز است؟ آیا راههای مختلف، یا بهتری برای نوشتن برنامهها تحت بلاکچین وجود دارد؟
اتریوم، فرزند معجزهآسای بلاکچین و ماشین مجازی آن به نام Ethereum Virtual Machine، نمونههای برجستهی، استفاده از بلاکچین هستند. بسیاری از ICOها تجارت خود را برای مبنای ساختار قرارداد هوشمند (Smart Contract) ساختهاند که یکی از آنها DApps یا برنامهی کاربردی غیرمتمرکز هست. حالا میخواهیم در این مورد بحث کنیم که، آیا اتریوم واقعا غیرمتمرکز است؟ آیا راههای مختلف، یا بهتری برای نوشتن برنامهها تحت بلاکچین وجود دارد؟
با استفاده از زبان اسکریپتی پایهی بیتکوین، کاربران قادر خواهند بود برنامههایی بنویسند که برخی از وظایف را بصورت خودکار انجام دهند. این برنامهها عمدتا در سرورهای خصوصی و توسط نهادهای متمرکز اجرا و مدیریت میشوند. اینها شبیه NEM هستند، بلاکچینی کاملا جدید که از پایه نوشته شده و توابع بسیار گسترده و سادهتری برای دسترسی نسبت به بیتکوین دارد.
مهمات اصلی افرادی که به NEM (دومین پلتفرم محبوب جهت ایجاد ICO) حمله میکنند، عدم وجود قراردادهای هوشمند غیرمتمرکز است. اما آیا واقعا اتریوم همانطور که تبلیغ میکند، یک پلتفرم غیرمتمرکز است؟ آیا انجام دادن این کار ارزش این را دارد که در ازای اندکی غیرمتمرکز شدن، امنیت و استحکام اپلیکیشن خود را از دست بدهید؟
برای ساخت یک قرارداد در NEM شما نیاز دارید که یک یا چند درخواست API را به یکدیگر ارتباط دهید و سپس در قالب یک گروه در یک برنامه خارج از بلاکچین قرار دهید. از لحاظ فنی تایید این مطلب که کد متن باز اجرا شده در پلتفرم NEM دقیقا همان کدی است که در داخل سرور اجرا میشود، دشوار است. اما آیا این، به معنی پایین بودن سطح غیرمتمرکز بودنش نسبت به قراردادهای اتریوم است؟
اولین نکته مثبت در دفاع از تمرکززدایی، بهم پیوستگی و گردآوری کد سورس اتریوم است. در حال حاضر اغلب برنامههای اجرا شده در بستر EVM با زبان solidity و
تعداد محدودی نیز توسط serpent نوشته و کامپایل شدهاند. بیایید به عنوان مثال، قرارداد هوشمند سادهی Hello World را امتحان کنیم. هر زمانی که میخواهیم
یک قرارداد هوشمند را بررسی کنیم که آیا قابل اعتماد است یا خیر، باید کد آن قرارداد را دریافت کنیم و در کامپایلری که برای نوشتن آن کد استفاده شده، کامپایل کنیم و بررسی کنیم که آیا طلاعاتی که از خروجی این عملیات دریافت میکنیم با اطلاعاتی که قرداد هوشمند آپلود شده در سایت ICO به ما میدهد یکسان است یا خیر!
Bytecode: “0x6060604052341561000f57600080fd5b6101578061001e6000396000f300606060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063942ae0a714610046575b600080fd5b341561005157600080fd5b6100596100d4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561009957808201518184015260208101905061007e565b50505050905090810190601f1680156100c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6100dc610117565b6040805190810160405280600a81526020017f68656c6c6f576f726c6400000000000000000000000000000000000000000000815250905090565b6020604051908101604052806000815250905600a165627a7a72305820e417728d298add6f4e1210005cf05cb6f6f0f2bdfcf162e4e756e53e71d478660029” قرارداد solidity اتریوم در عکس بالا و قراردادی که به bytecode کامپایل شده و آمادهی آپلود بر روی EVM است در پایین عکس، قابل مشاهده هستند
با این حال کامپایل کردن کد هر قرارداد هوشمند و بررسی خروجی اطلاعات یا همان bytecode آن بزرگترین مشکل ما نیست. در حال حاضر توسعهدهندگان برای اینکه بتوانند قراردادهایی منعطفتر و قابل ارتقا تولید کنید از قراردادی استفاده میکنند که Ownable.sol نام دارد و به توسعهدهنده اجازهی تغییر در قرارداد، از بین بردن قرارداد و یا تغییر مالک قرارداد را میدهد. این قرارداد بسیار محبوب است و توسط قراردادهای اصلی اتریوم نیز استفاده میشود تا قراردادها را در عین اینکه متمرکز هستند، بسیار قابل انعطاف کند. این قرارداد به توسعهدهنده اجازهی نوشتن اطلاعات در حافظهی خارجی را بدون هر گونه تغییری در منطق قرارداد میدهد.
استفاده از این تکنیکها وقتی بخواهیم با solidity یک برنامه تحت EVM بنویسیم، تمرین خوبی است. اما آیا این تفاوت خاصی با زبان اسکریپت نویسی (نمونهی استفاده شدهی تاریخی در بیتکوین و نمونهی معرفی شده توسط NEM) که بیشتر قرارداد متمرکز است اما بسیار امنتر، دارد؟ در نهایت نیز، قراردادهای مدرن solidity فقط از نظر ذخیرهی دادههای زمان بندیشده در بلاکچین غیرمتمرکز هستند وگرنه یک قراردادی که ساختار خوبی داشته باشد، براحتی توسط مالک آن قابل ویرایش است! و اگر تفاوتی از این لحاظ که کاملا بر مبنای بلاکچین باشد، ایجاد نشده، پس چه لزومی به یادگیری یک زبان پیچیدهی جدید برای دستیابی به اطلاعات بلاکچین وجود دارد وقتی که میتوان براحتی از بلاکچین NEM بر مبنای RestfulAPI استفاده کرد؟ و به سادگی اطلاعات مورد نیاز را با دستورات مورد نظر دریافت کرد.
توضیحات خلاصهی مترجم:
با توجه به توضیحات فنی که در متن شرح داده شد، قراردادهای هوشمند فعلی اتریوم ، تنها از نظر ذخیرهی دادههای زمانبندی شده بر مبنای بلاکچین عمل میکنند و در سایر زمینه کماکان متمرکز هستند، و حتی مالک یک قرارداد در صورتی که بخواهد و به خوبی ساختار قرارداد خود را پیادهسازی کرده باشد، میتواند اطلاعات قرارداد را نیز تغییر دهد، که این نیز با اصل ماهیت بلاکچین تناقض دارد. پس با تمام این تفاسیر چه توجیحی برای استفاده از قراردادهای هوشمند و درگیر شدن با یک زبان برنامهنویسی پیچیدهی جدید وجود دارد، وقتی میتوان به سادگی از بلاکچینی نظیر NEM استفاده کرد که از قابلیت RestfulAPI برخوردار است و به سادگی میتوان با چند دستور ساده خروجی مورد نظر را دریافت کرد که هر چند غیرمتمرکز نیست، اما امنیت بالایی دارد.
نظر شما در این خصوص چیست؟ آیا درصد ناچیزی غیرمتمرکزسازی ارزش ریسک از دست دادن امنیت را دارد؟ یا نظری خلاف نظر نویسنده دارید؟