ماشین های مجازی KLYNTAR. بخش 0: KLY-EVM – EVM قابل تجزیه، مدیریت شده سطح پایین، قابل تغییر و بهبود یافته با WASM.

مقدمه
سلام، ما دوباره در تماس هستیم! با این داستان، چرخه جدیدی از مقالات در مورد KLY را شروع می کنیم. در اینجا ما ماشین های مجازی موجود در KLYNTAR را مورد بحث قرار خواهیم داد. شما می توانید اطلاعات بسیار جالبی در مورد مدیریت سطح پایین، گردش کار اجرای VMs، تعامل متقابل vm و غیره پیدا کنید! همچنین، مجموعهای از مقالات را در مورد موارد استفاده مختلف از نحوه نوشتن قراردادها، و نحوه استفاده از ویژگیهای KLY موجود برای ماشینهای مجازی مختلف (EVM و WASM و دیگران) منتشر خواهیم کرد – قراردادهای از پیش مستقر شده، گزارشهای ویژه، اصل WORA، جهشها، و خیلی بیشتر!
KLY-EVM
قطعا محبوب ترین ماشین مجازی در صنعت بلاک چین، EVM است. پروژههای با سازگاری EVM مجموعهای از ابزارهای شناخته شده را برای توسعهدهندگان برای شروع سریع اکوسیستم خود پیشنهاد میکنند. شما حتی نباید زبان های جدید یاد بگیرید یا با اسناد کار کنید – فقط از اسناد solidity، کتابخانه web3 استفاده کنید، و زندگی خوب است!
همه پروژه ها ویژگی های جدیدی را برای پورت EVM خود پیشنهاد نمی کنند. اما در مورد KLYNTAR اینطور نیست.
اشتراک گذاری چند سطحی – پیاده سازی در سطح EVM🔥🔥🔥
احتمالاً داغ ترین بخش این مقاله است. همانطور که از مقاله های قبلی در وبلاگ خود به یاد دارید، ما در مورد اجرای اشتراک گذاری چند سطحی در KLY بحث کرده ایم. اینجاست
در مقاله در مورد اصول، می توانید اطلاعاتی در مورد سطح اول شاردینگ به دست آورید – کل اکوسیستم از مجموعه ای از زنجیره های مستقل به نام سیمبیوت تشکیل شده است. همچنین، ما در حال کار بر روی مقاله بعدی در این چرخه هستیم که در آن خواهید فهمید که چگونه شاردینگ در یک سطح سیمبیوت منفرد کار می کند، چگونه اصل Pool-per-chain کار می کند و غیره!
در این مقاله (هنوز منتشر نشده😅) می توانید توضیح شاردینگ در داخل یک سیمبیوت را بیابید و این تصویر می تواند به شما کمک کند.
از آنجایی که همه زیر زنجیرهها در اینجا به یک سیمبیوت واحد مرتبط هستند – همه آنها بخشی از یک سیستم واحد از حسابها هستند. همچنین، هر سیمبیوت مختص به خود را خواهد داشت شناسه زنجیره ای (شماره برای رجیستری EVM و هش 256/512 بیتی BLAKE3 برای اکوسیستم KLY).
به عنوان مثال، سیمبیوت اولیه ما kNULL (که توسط تیم KLYNTAR راه اندازی خواهد شد) 7331 را به عنوان شناسه زنجیره ای برای EVM خواهد داشت. شما می توانید آن را در اینجا ببینید
KLYNTAR – پروژه Nextgen، “ابر از همه چیز” که بر تمرکززدایی و امنیت و TPS همه بلاک چین ها در صنعت متکی است، دارای اشتراک گذاری چندسطحی، چند وظیفه ای، سازگاری EVM و WASM و Docker، رمزنگاری پس کوانتومی، قراردادهای هوشمند بدون کد RWX است. ، و غیره.
بنابراین، دقیقاً در سطح زیر زنجیرهها، ما باید شاردینگ را برای EVM پیادهسازی کنیم. اما، برای ایجاد اتصال ایمن حساب ها به زیر زنجیره (شارد) مناسب، باید عمیقاً در بایت کدها، گردش کار اجرای EVM (از طریق اشکال زدایی) و غیره غوطه ور شویم. باید جالب باشه!
ایده کلی
بازگشت به تصویر ما با زنجیره های فرعی
> ایده ساده اشتراک گذاری در KLY این است که حسابها (پیشفرض و حسابهای قراردادهای هوشمند) را به یک زنجیره فرعی متصل کنیم و همه تلاشها برای تغییر حالت از txs از زیر زنجیرههای دیگر را رد کنیم. این تصویر می تواند به شما در درک موارد زیر کمک کند:
در اینجا می بینید که اگر حساب خود را به یک زنجیره فرعی A متصل کنید، این یک سیگنال برای همه است که وضعیت قرارداد یا حساب پیش فرض شما را می توان تنها از طریق تراکنش ها از طریق همان زنجیره فرعی تغییر داد. چرا باحاله؟!
چون حالا میتوانیم کار را جدا کنیم و هر سیمبیوت را بهطور مستقل بررسی کنیم. به عبارت ساده – می توانید نرم افزار ویژه را از بسته Bumblebee اجرا کنید که پشتوانه کاوشگران و کیف پول ها خواهد بود و زنجیره فرعی را برای ردیابی تغییرات تنظیم کنید.
از آنجایی که زمان بلوک کوتاه است و TTF (زمان تا پایان) فوری است – به راحتی می توانید به روز رسانی های وضعیت را از هر سیمبیوت به صورت موازی دریافت کنید.
خوب به نظر می رسد و به نظر می رسد ما می توانیم آن را اجرا کنیم. برای KLY-VM (بر اساس WASM) آسان است زیرا تمام حالت ها از طریق سطح هسته KLYNTAR تغییر می کند و این عملیات برای ما شفاف است. حتی منطق پیشرفته مانند تماس های قرارداد متقابل را می توان ردیابی کرد، زیرا این عملکرد به عنوان یک وابستگی تزریق شده از زمینه JS به ماژول wam منتقل می شود. به عنوان مثال، در اینجا نمونه ای از تست های KLY-VM آورده شده است:
در اینجا مثال است
به همین ترتیب، یک قرارداد وضعیت خود و وضعیت سایر حساب ها/قراردادها را تغییر می دهد.
اما در مورد EVM چطور؟ بیایید از مهارت های مهندسی معکوس استفاده کنیم و سعی کنیم اشکال زدایی کنیم.
کنترل سطح پایین
برای معکوس کردن گردش کار EVM در سطح عمیق – ما نمودار گردش کار را ساخته ایم. این به ما کمک می کند تا در سطح اجرای بایت کد شیرجه بزنیم، تا تغییرات پشته و مقادیر جعبه سیاه EVM را در داخل ببینیم. این نمودار به این صورت است:
> هدف ما این است که اجازه تغییرات قرارداد X را فقط از تراکنشهای زیر زنجیره A بدهیم. برای این کار، ما باید تمام حسابهایی که وضعیت آنها تغییر میکند را ردیابی کنیم و در صورتی که تراکنش سعی در تغییر وضعیت حساب محدود شده داشته باشد، اجرا را برگردانیم و متوقف کنیم. به زیر زنجیره B
لحظه خطرناک اینجا این است که ما باید چیزهای بسیار پیشرفته ای مانند تماس های قراردادی متقابل، هیئت ها و غیره را به خاطر بسپاریم! ما ازش خبر داریم😅
هنگامی که EVM می خواهد وضعیت برخی از حساب ها را تغییر دهد، آدرس آن به ویژگی داخلی _touched اضافه می شود – این مجموعه ای از حساب هایی است که وضعیت آنها در tx معینی تغییر می کند.
برای نمایش، ما یک مخزن با نمونه ای از فراخوانی قراردادهای متقابل و نتایج فرآیند اشکال زدایی داریم. می توانید آن را در اینجا پیدا و امتحان کنید
در اینجا ما سعی می کنیم 2 قرارداد را مستقر کنیم –تماس گیرنده و گیرنده. داخل قرارداد Caller.sol تابعی برای اجرای قراردادهای متقابل وجود دارد که تابعی را در قرارداد Receiver.sol فراخوانی می کند. ما با استفاده از حساب خود مستقر می شویم 0xbe862ad9abfe6f22bcb087716c7d89a26051f74c
پس از استقرار، می توانیم این لاگ ها را ببینیم
و اگر به صورت دستی منطق اشکال زدایی را در کد منبع EVM لغو کنیم و تابع را فراخوانی کنیم crossContractCallFromCallerToReceiver()
ما می توانیم این را ببینیم:
همانطور که مشاهده می کنید – این مجموعه شامل تمام آدرس هایی است که در حین کار تغییر خواهند کرد.
این دقیقاً همان چیزی است که ما نیاز داریم زیرا اکنون می توانیم منطق تابعی را که آدرس را به این مجموعه اضافه می کند، لغو کنیم. پس از تشخیص اتصال به زیر زنجیره دیگر، باید اجرا را متوقف کنیم.
این تابع است touchAccount() داخل ماژول vmState.js از @ethereumjs/vm/eei بسته بندی تابع اصلاح شده به شکل زیر است:
به عبارت ساده، یک استثنا پرتاب می شود و vm برگردانده می شود. منطق اضافی همچنین شامل کار با mempool میشود تا به سرور JSON-RPC اجازه دهد تراکنشها را بپذیرد، و آنها را در sandbox با زمینه دلخواه (مفید برای متعادلکنندههای بار، کاوشگرها و غیره) قبل از افزودن به mempool (برخی تمرینهای فیلتر کردن) آزمایش کند.
> بنابراین، به زبان ساده و با استفاده از مثالها، اثبات مفهوم (PoC) KLY-EVM آینده را به شما نشان دادیم.
اصل جهش
اگر از این هم فراتر نمی رفتیم، خودمان نبودیم. در طول کار تحقیقاتی، ما متوجه لحظات جالب EVM شدیم و قصد داریم آنها را به KLY-EVM اضافه کنیم.
از آنجایی که KLYNTAR یک پروژه قابل تغییر است، شما می توانید جهش را برای گردش های کاری EVM اضافه کنید.
به عنوان مثال، ردیابی پشته به صورت زیر است:
را interpreter.js دارای کد زیر است:
… و لیست کدهای عملیاتی به صورت زیر است:
> چه چیزی به ما می دهد؟ چرا جالب است و چه کاری می توانیم با آن انجام دهیم؟
ما با این کنترل سطح پایین میتوانیم جهشهای سفارشی مختلف EVM ایجاد کنیم – با قیمتهای گاز متفاوت برای کدهای عملیاتی، کدهای عملیاتی سفارشی، منطق داخلی سفارشی، تغییر زمینه اجرای قراردادها و آدرسهای مختلف، استفاده از عملکرد خارج از زنجیره، و خیلی بیشتر! مثل این است که یک دیباگر فوق العاده قدرتمند داشته باشید و هر کاری را که می خواهید انجام دهید.
ما به شما قول دادیم که KLY-EVM یک گیگاچاد است. امیدوارم، ما آن را ثابت کردیم)
WORA – قابلیت نوشتن برای EVM با WASM
این موضوع یکی از مقالات بعدی خواهد بود، اما از آنجایی که ما یک VM سازگار با WASM روی برد داریم، باید توانایی استفاده از ماژول های WASM برای EVM را به شما یادآوری کنیم.
به طور خلاصه، ما فرض میکنیم که به عنوان یک مکانیسم برگشتی کار میکند که در آن اجرای EVM را متوقف میکنید، ماژول WASM را فراخوانی میکنید و با مقادیر جدید/اضافی به اجرای EVM باز میگردید.
اما منتظر مقاله باشید)
خلاصه
لعنتی، این مقاله خیلی داغ به نظر می رسد! جزئیات، ساده، با مثال – عالی! ما در تلاش هستیم تا KLY را به پروژه پیشرو تبدیل کنیم. نه تنها در صنعت کریپتو. اما همینطور.
با KLY-EVM چرخه دیگری از مقالات را در وبلاگ خود شروع کردیم. امیدوارم برای شما جالب باشد. ما سعی می کنیم چنین مقالاتی را اغلب منتشر کنیم تا توضیحات مفصلی در مورد تمام اجزای اکوسیستم KLY به شما ارائه دهیم.
فقط تصور کنید اولین باری که گره KLY را راه اندازی می کنید
پیوندها
- http://klyntar.org
- https://t.me/KLYN74R
- https://github.com/KLYN74R
- https://mastering.klyntar.org
- https://ru.mastering.klyntar.org
- https://www.reddit.com/r/KLYN74R/
- https://discord.com/invite/f7e7fCp97r
- https://github.com/KLYN74R/KlyntarEVM