EVM — це рівень абстракції між кодом і хостом, який служить гарантією підтримки безперебійної роботи Ethereum. Зрештою, що таке EVM? Які принципи та типові випадки використання EVM? Давайте зануримося в це глибше.
Будучи найпопулярнішим блокчейном на даний момент, Ethereum надає користувачам різноманітні децентралізовані програми. Це термін, який найчастіше згадується, коли люди згадують DeFi, NFT тощо. І EVM, як основна частина Ethereum, також привертає величезну увагу людей. Тоді який зв’язок між EVM та Ethereum?
EVM означає віртуальну машину Ethereum. Згідно з визначенням Ethereum, EVM — це середовище виконання, в якому всі облікові записи та смарт-контракти Ethereum знаходяться в ланцюжку Ethereum.
EVM існує як одна сутність, яка підтримується всіма підключеними комп’ютерами, на яких запущено клієнт Ethereum. Це те, що визначає правила для обчислення нового дійсного стану від блоку до блоку.
Замість розподіленої книги, як у Bitcoin, Ethereum є розподіленою кінцевою машиною. Перехід від блоку до блоку означає оновлення стану всіх рахунків і балансів на Ethereum. Оновлення розраховується на основі коду договору EVM.
Малюнок: https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf
EVM — це стекова віртуальна машина, яка виконує всі свої операції безпосередньо в стеку. Коли смарт-контракт скомпільовано в байт-код, EVM виконуватиме операції на основі байт-коду, включаючи отримання змінних із пам’яті та додавання до стеку, обчислення змінних у стеку та збереження змінних у пам’яті тощо.
У EVM є два основних типи зберігання даних: пам’ять і сховище. Змінні в сховищі зберігатимуться в Ethereum постійно після виконання контракту, тоді як змінні в пам’яті існують тимчасово, поки код виконується на EVM.
Візьмемо для прикладу договір про виклик. Ми написали контракт із Solidity, зібрали метадані через компілятор і опублікували їх на Ethereum. Коли нам потрібно оновити стан контракту, нам потрібно викликати контракт. Однак ні ОС, ні Windows не можуть безпосередньо запускати смарт-контракти. EVM необхідний для забезпечення робочого середовища для смарт-контрактів. Конкретні кроки такі: спочатку EVM знаходить код контракту, що зберігається в Ethereum, через адресу контракту; потім створюється середовище виконання; нарешті вміст контракту перетворюється на байт-код і подається в EVM для роботи. Результат, отриманий від операції, буде збережено як останній стан у наступному блоці, таким чином завершуючи процес оновлення стану.
Малюнок: https://cnodejs.org/topic/5aeecba802591040485bab2a
Впровадження EVM
Наразі всі клієнти Ethereum містять реалізацію EVM. Ethereum запустив вихідний код кількох мов програмування, включаючи Python, C++, js, Go тощо, для реалізації функцій EVM. Це допомагає користувачам зрозуміти принцип EVM більш зручним способом.
Py-EVM - Python: https://github.com/ethereum/py-evm
evmone – C++: https://github.com/ethereum/evmone
Ethereumjs - vm - JavaScript: https://github.com/ethereumjs/ ethereumjs-monorepo
eEVM – C++: https://github.com/microsoft/eevm
Hyperledger Burrow - Go: https://github.com/hyperledger/burrow
Розумні контракти — це код, який працює виключно на EVM. Їх неможливо змінити після розгортання. Ethereum визначає, змінює та зберігає стан за допомогою смарт-контрактів для створення різних децентралізованих програм. EVM діє як середовище, де можуть працювати смарт-контракти, що схоже на відносини між шосе та автомобілем.
Для виконання смарт-контрактів на EVM потрібна значна обчислювальна потужність, яка споживає певну кількість газу. Щоб краще зрозуміти, подумайте про транспортні засоби, які повинні платити за проїзд платними дорогами.
Комісії за газ допомагають стимулювати майнерів з усього світу брати участь і надавати обчислювальну потужність, як спосіб зробити Ethereum більш децентралізованою. Він також запобігає надсиланню користувачами випадкових запитів на операції, які можуть призвести до перевантаження основної мережі Ethereum, або захищає Ethereum від збою, запобігаючи зловмисним атакам.
Смарт-контракти Ethereum написані в Solidity та компілюються в байт-код перед виконанням на EVM. Байт-код містить коди операцій або коди операцій. EVM має 144 коди операції, кожен з яких має певну функціональність, що робить EVM Turing-повним. Він може вирішити будь-який тип обчислювальної задачі. Solidity та Opcodes дозволяють нам писати складні смарт-контракти та впроваджувати широкий спектр функцій на EVM, таким чином надаючи користувачам різноманітні dApps.
Для одного і того ж фрагмента коду результат буде однаковим після виконання на різних EVM, оскільки це не має нічого спільного з середовищем виконання та кількістю виконань. Впевненість EVM забезпечує надійність коду та дозволяє уникнути несподіваних наслідків. Ця функція допомагає захистити інтереси користувачів, особливо коли вони здійснюють великі транзакції в Ethereum.
EVM — це ізольована пісочниця, де виконується код. Запущений процес не завдасть шкоди програмному/апаратному забезпеченню комп’ютера та не вплине на базовий протокол Ethereum. Ізоляція EVM запобігає атакам хакерів на машину, на якій працює EVM, а також захищає базовий протокол Ethereum від несанкціонованого доступу. Він служить гарантією безпеки Ethereum.
Процес виконання коду EVM може бути перервано. Якщо користувач запускає неправильний код, наприклад, нескінченний цикл, газовий механізм може бути розгорнутий для припинення процесу виконання, щоб запобігти нескінченному використанню обчислювальної потужності таким кодом. Перед виконанням коду на EVM слід заздалегідь встановити верхню межу газу. Коли газ буде вичерпано, код припинить роботу, а стан буде відкочено без оновлення в ланцюжку.
Зі збільшенням кількості користувачів Ethereum Mainnet стикається з багатьма проблемами, такими як перевантажені мережі та високі збори за газ. Обмежуючись дизайном Ethereum, ці проблеми неможливо вирішити радикально.
Останніми роками з’явилося багато нових публічних ланцюгів, які мають нижчу плату за газ і швидші мережі, а також ланцюги рівня 2, розроблені для масштабування Ethereum. Усі ці ланцюжки є ланцюжками розумних контрактів, які, як кажуть, мають кращий базовий дизайн і можуть використовуватися для створення різноманітних dApps.
Ці ланцюжки задовольняють надлишкові потреби екосистеми Ethereum і кидають виклик домінуючому статусу Ethereum. Чи обов’язково, щоб аналоги Ethereum були сумісні з EVM? Що стосується цієї розбіжності, ці ланцюги поділяються на дві категорії: EVM-сумісні ланцюги та не-EVM-ланцюги.
Останнім часом публічні мережі рівня 1 з’являються одна за одною. Хоча перебудова екосистеми в ланцюжку, яка працює паралельно з Ethereum, могла б подолати наявні недоліки Ethereum, вона потребує значних людських ресурсів для створення повної екосистеми та розробки dApp з нуля. Відсутність кваліфікованих програмістів заважає зростанню нових екосистем публічних мереж. Для публічного ланцюга з нерозвиненою екосистемою було б важко залучити користувача з Ethereum за короткий проміжок часу.
Враховуючи це, деякі публічні ланцюги розроблені таким чином, щоб бути сумісними з EVM. DApps, які спочатку працюють на Ethereum, можна повністю перевести на EVM-сумісні загальнодоступні ланцюжки лише з незначними змінами вихідного коду. Він може не тільки максимізувати використання ресурсів розробки, але й надає користувачам кращий досвід у процесі переходу з Ethereum на новий ланцюжок.
Однак сумісність з EVM неминуче пов’язана з певними проблемами. Обмежуючись правилами EVM, багато EVM-сумісних мереж стикаються з проблемою щодо того, як досягти інновацій без гомогенізації. Однак ланцюги, які не належать до EVM, можуть порушити ці правила та розробити новий набір правил з нуля, досягнувши таким чином фундаментальних інновацій.
На даний момент понад 70% основних публічних мереж сумісні з EVM, наприклад BSC, Avalanche, Fantom, Tron, Celo тощо. Для розробників не складе труднощів розробити dApps або розгорнути програми Ethereum у цих ланцюжках для підвищення продуктивності та зниження плати за газ, а отже, покращення взаємодії з користувачем.
Деякі інші громадські мережі не належать до EVM, але розробили власні віртуальні машини, наприклад Sol, Terra тощо. Незважаючи на те, що вони несумісні з EVM, ці мережі залучили групу лояльних користувачів та установ своїм інноваційним дизайном і відмінною продуктивністю в мережі. Наприклад, дві блокчейн-ігри, Step N і Let me speak, які нещодавно стали популярними в усьому світі, засновані на мережі Sol і залучили захоплених шанувальників з усього світу до участі.
Примітно, що EVM-сумісні ланцюжки можуть співіснувати з не-EVM-ланцюжками. Деякі ланцюги, що не належать до EVM, також стають сумісними з EVM. Процес досягнення цього був би складним, оскільки потребує значних зусиль для модифікації коду. Прикладом цього є Сол, який запустив Neon, який дозволяє розробникам створювати dApps на EVM.
Малюнок: EVM-сумісність публічних ланцюжків
Як рішення для масштабування Ethereum, рівень 2 доповнює Ethereum замість свого конкурента. Усі ланцюги рівня 2 сумісні з EVM, із вищим рівнем сумісності, ніж рівень 1. Щоб рівень 2 був сумісним із EVM, у нас є два рішення: сумісність із EVM та еквівалентність EVM.
Ранні ланцюги рівня 2 сумісні з EVM, що подібно до сумісності EVM ланцюгів рівня 1. Розумні контракти на рівні 1 Ethereum можна розгорнути на рівні 2, внісши деякі зміни. Наприклад, Unipig, запущений Optimism, є повністю реконструкцією коду Uniswap. Це вважається Uniswap на рівні 2.
Існують деякі обмеження щодо сумісності з EVM. Під час розробки смарт-контрактів у ланцюжку, сумісному з EVM, деякі інструменти та фреймворки на основі EVM можуть бути недоступні. Крім того, для смарт-контрактів, спочатку організованих на Рівні 1, розробникам все ще потрібно внести деякі коригування, щоб смарт-контракти могли безперебійно працювати на EVM-сумісному блокчейні.
Еквівалентність EVM має на меті надати розробникам той самий досвід під час розробки смарт-контрактів на рівні 2 і на рівні 1 Ethereum. Це принесло значну користь розробникам Layer2, ще більше підвищило ефективність розробки та заощадило витрати на розробку та підтримку коду на основі сумісності з EVM.
Наразі основні рішення рівня 2, такі як Artbitrum, Optimism і Metis, досягли еквівалентності EVM. Еквівалентність EVM може краще перенести функції Ethereum на рівень 2 з метою мінімізації витрат на розробку та міграцію, спричинених масштабуванням. Очікується, що в майбутньому еквівалентність EVM стане основним стандартом рівня 2, і багато рішень рівня 2 будуть вести запеклу гонку навколо еквівалентності EVM.
EVM — це ядро, яке забезпечує роботу Ethereum. Зі встановленням домінування Ethereum основні публічні ланцюги та ланцюги рівня 2 дотримувалися або сумісні з основною концепцією дизайну EVM. Таким чином, EVM, безумовно, мав глибокий вплив на весь блокчейн. Сама EVM має багато проблем, що ускладнює сумісність нових ланцюгів з EVM. Незважаючи на це, розробники наполегливо працювали над покращеннями, що значно сприяло появі багатьох інших публічних мереж.
EVM — це рівень абстракції між кодом і хостом, який служить гарантією підтримки безперебійної роботи Ethereum. Зрештою, що таке EVM? Які принципи та типові випадки використання EVM? Давайте зануримося в це глибше.
Будучи найпопулярнішим блокчейном на даний момент, Ethereum надає користувачам різноманітні децентралізовані програми. Це термін, який найчастіше згадується, коли люди згадують DeFi, NFT тощо. І EVM, як основна частина Ethereum, також привертає величезну увагу людей. Тоді який зв’язок між EVM та Ethereum?
EVM означає віртуальну машину Ethereum. Згідно з визначенням Ethereum, EVM — це середовище виконання, в якому всі облікові записи та смарт-контракти Ethereum знаходяться в ланцюжку Ethereum.
EVM існує як одна сутність, яка підтримується всіма підключеними комп’ютерами, на яких запущено клієнт Ethereum. Це те, що визначає правила для обчислення нового дійсного стану від блоку до блоку.
Замість розподіленої книги, як у Bitcoin, Ethereum є розподіленою кінцевою машиною. Перехід від блоку до блоку означає оновлення стану всіх рахунків і балансів на Ethereum. Оновлення розраховується на основі коду договору EVM.
Малюнок: https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf
EVM — це стекова віртуальна машина, яка виконує всі свої операції безпосередньо в стеку. Коли смарт-контракт скомпільовано в байт-код, EVM виконуватиме операції на основі байт-коду, включаючи отримання змінних із пам’яті та додавання до стеку, обчислення змінних у стеку та збереження змінних у пам’яті тощо.
У EVM є два основних типи зберігання даних: пам’ять і сховище. Змінні в сховищі зберігатимуться в Ethereum постійно після виконання контракту, тоді як змінні в пам’яті існують тимчасово, поки код виконується на EVM.
Візьмемо для прикладу договір про виклик. Ми написали контракт із Solidity, зібрали метадані через компілятор і опублікували їх на Ethereum. Коли нам потрібно оновити стан контракту, нам потрібно викликати контракт. Однак ні ОС, ні Windows не можуть безпосередньо запускати смарт-контракти. EVM необхідний для забезпечення робочого середовища для смарт-контрактів. Конкретні кроки такі: спочатку EVM знаходить код контракту, що зберігається в Ethereum, через адресу контракту; потім створюється середовище виконання; нарешті вміст контракту перетворюється на байт-код і подається в EVM для роботи. Результат, отриманий від операції, буде збережено як останній стан у наступному блоці, таким чином завершуючи процес оновлення стану.
Малюнок: https://cnodejs.org/topic/5aeecba802591040485bab2a
Впровадження EVM
Наразі всі клієнти Ethereum містять реалізацію EVM. Ethereum запустив вихідний код кількох мов програмування, включаючи Python, C++, js, Go тощо, для реалізації функцій EVM. Це допомагає користувачам зрозуміти принцип EVM більш зручним способом.
Py-EVM - Python: https://github.com/ethereum/py-evm
evmone – C++: https://github.com/ethereum/evmone
Ethereumjs - vm - JavaScript: https://github.com/ethereumjs/ ethereumjs-monorepo
eEVM – C++: https://github.com/microsoft/eevm
Hyperledger Burrow - Go: https://github.com/hyperledger/burrow
Розумні контракти — це код, який працює виключно на EVM. Їх неможливо змінити після розгортання. Ethereum визначає, змінює та зберігає стан за допомогою смарт-контрактів для створення різних децентралізованих програм. EVM діє як середовище, де можуть працювати смарт-контракти, що схоже на відносини між шосе та автомобілем.
Для виконання смарт-контрактів на EVM потрібна значна обчислювальна потужність, яка споживає певну кількість газу. Щоб краще зрозуміти, подумайте про транспортні засоби, які повинні платити за проїзд платними дорогами.
Комісії за газ допомагають стимулювати майнерів з усього світу брати участь і надавати обчислювальну потужність, як спосіб зробити Ethereum більш децентралізованою. Він також запобігає надсиланню користувачами випадкових запитів на операції, які можуть призвести до перевантаження основної мережі Ethereum, або захищає Ethereum від збою, запобігаючи зловмисним атакам.
Смарт-контракти Ethereum написані в Solidity та компілюються в байт-код перед виконанням на EVM. Байт-код містить коди операцій або коди операцій. EVM має 144 коди операції, кожен з яких має певну функціональність, що робить EVM Turing-повним. Він може вирішити будь-який тип обчислювальної задачі. Solidity та Opcodes дозволяють нам писати складні смарт-контракти та впроваджувати широкий спектр функцій на EVM, таким чином надаючи користувачам різноманітні dApps.
Для одного і того ж фрагмента коду результат буде однаковим після виконання на різних EVM, оскільки це не має нічого спільного з середовищем виконання та кількістю виконань. Впевненість EVM забезпечує надійність коду та дозволяє уникнути несподіваних наслідків. Ця функція допомагає захистити інтереси користувачів, особливо коли вони здійснюють великі транзакції в Ethereum.
EVM — це ізольована пісочниця, де виконується код. Запущений процес не завдасть шкоди програмному/апаратному забезпеченню комп’ютера та не вплине на базовий протокол Ethereum. Ізоляція EVM запобігає атакам хакерів на машину, на якій працює EVM, а також захищає базовий протокол Ethereum від несанкціонованого доступу. Він служить гарантією безпеки Ethereum.
Процес виконання коду EVM може бути перервано. Якщо користувач запускає неправильний код, наприклад, нескінченний цикл, газовий механізм може бути розгорнутий для припинення процесу виконання, щоб запобігти нескінченному використанню обчислювальної потужності таким кодом. Перед виконанням коду на EVM слід заздалегідь встановити верхню межу газу. Коли газ буде вичерпано, код припинить роботу, а стан буде відкочено без оновлення в ланцюжку.
Зі збільшенням кількості користувачів Ethereum Mainnet стикається з багатьма проблемами, такими як перевантажені мережі та високі збори за газ. Обмежуючись дизайном Ethereum, ці проблеми неможливо вирішити радикально.
Останніми роками з’явилося багато нових публічних ланцюгів, які мають нижчу плату за газ і швидші мережі, а також ланцюги рівня 2, розроблені для масштабування Ethereum. Усі ці ланцюжки є ланцюжками розумних контрактів, які, як кажуть, мають кращий базовий дизайн і можуть використовуватися для створення різноманітних dApps.
Ці ланцюжки задовольняють надлишкові потреби екосистеми Ethereum і кидають виклик домінуючому статусу Ethereum. Чи обов’язково, щоб аналоги Ethereum були сумісні з EVM? Що стосується цієї розбіжності, ці ланцюги поділяються на дві категорії: EVM-сумісні ланцюги та не-EVM-ланцюги.
Останнім часом публічні мережі рівня 1 з’являються одна за одною. Хоча перебудова екосистеми в ланцюжку, яка працює паралельно з Ethereum, могла б подолати наявні недоліки Ethereum, вона потребує значних людських ресурсів для створення повної екосистеми та розробки dApp з нуля. Відсутність кваліфікованих програмістів заважає зростанню нових екосистем публічних мереж. Для публічного ланцюга з нерозвиненою екосистемою було б важко залучити користувача з Ethereum за короткий проміжок часу.
Враховуючи це, деякі публічні ланцюги розроблені таким чином, щоб бути сумісними з EVM. DApps, які спочатку працюють на Ethereum, можна повністю перевести на EVM-сумісні загальнодоступні ланцюжки лише з незначними змінами вихідного коду. Він може не тільки максимізувати використання ресурсів розробки, але й надає користувачам кращий досвід у процесі переходу з Ethereum на новий ланцюжок.
Однак сумісність з EVM неминуче пов’язана з певними проблемами. Обмежуючись правилами EVM, багато EVM-сумісних мереж стикаються з проблемою щодо того, як досягти інновацій без гомогенізації. Однак ланцюги, які не належать до EVM, можуть порушити ці правила та розробити новий набір правил з нуля, досягнувши таким чином фундаментальних інновацій.
На даний момент понад 70% основних публічних мереж сумісні з EVM, наприклад BSC, Avalanche, Fantom, Tron, Celo тощо. Для розробників не складе труднощів розробити dApps або розгорнути програми Ethereum у цих ланцюжках для підвищення продуктивності та зниження плати за газ, а отже, покращення взаємодії з користувачем.
Деякі інші громадські мережі не належать до EVM, але розробили власні віртуальні машини, наприклад Sol, Terra тощо. Незважаючи на те, що вони несумісні з EVM, ці мережі залучили групу лояльних користувачів та установ своїм інноваційним дизайном і відмінною продуктивністю в мережі. Наприклад, дві блокчейн-ігри, Step N і Let me speak, які нещодавно стали популярними в усьому світі, засновані на мережі Sol і залучили захоплених шанувальників з усього світу до участі.
Примітно, що EVM-сумісні ланцюжки можуть співіснувати з не-EVM-ланцюжками. Деякі ланцюги, що не належать до EVM, також стають сумісними з EVM. Процес досягнення цього був би складним, оскільки потребує значних зусиль для модифікації коду. Прикладом цього є Сол, який запустив Neon, який дозволяє розробникам створювати dApps на EVM.
Малюнок: EVM-сумісність публічних ланцюжків
Як рішення для масштабування Ethereum, рівень 2 доповнює Ethereum замість свого конкурента. Усі ланцюги рівня 2 сумісні з EVM, із вищим рівнем сумісності, ніж рівень 1. Щоб рівень 2 був сумісним із EVM, у нас є два рішення: сумісність із EVM та еквівалентність EVM.
Ранні ланцюги рівня 2 сумісні з EVM, що подібно до сумісності EVM ланцюгів рівня 1. Розумні контракти на рівні 1 Ethereum можна розгорнути на рівні 2, внісши деякі зміни. Наприклад, Unipig, запущений Optimism, є повністю реконструкцією коду Uniswap. Це вважається Uniswap на рівні 2.
Існують деякі обмеження щодо сумісності з EVM. Під час розробки смарт-контрактів у ланцюжку, сумісному з EVM, деякі інструменти та фреймворки на основі EVM можуть бути недоступні. Крім того, для смарт-контрактів, спочатку організованих на Рівні 1, розробникам все ще потрібно внести деякі коригування, щоб смарт-контракти могли безперебійно працювати на EVM-сумісному блокчейні.
Еквівалентність EVM має на меті надати розробникам той самий досвід під час розробки смарт-контрактів на рівні 2 і на рівні 1 Ethereum. Це принесло значну користь розробникам Layer2, ще більше підвищило ефективність розробки та заощадило витрати на розробку та підтримку коду на основі сумісності з EVM.
Наразі основні рішення рівня 2, такі як Artbitrum, Optimism і Metis, досягли еквівалентності EVM. Еквівалентність EVM може краще перенести функції Ethereum на рівень 2 з метою мінімізації витрат на розробку та міграцію, спричинених масштабуванням. Очікується, що в майбутньому еквівалентність EVM стане основним стандартом рівня 2, і багато рішень рівня 2 будуть вести запеклу гонку навколо еквівалентності EVM.
EVM — це ядро, яке забезпечує роботу Ethereum. Зі встановленням домінування Ethereum основні публічні ланцюги та ланцюги рівня 2 дотримувалися або сумісні з основною концепцією дизайну EVM. Таким чином, EVM, безумовно, мав глибокий вплив на весь блокчейн. Сама EVM має багато проблем, що ускладнює сумісність нових ланцюгів з EVM. Незважаючи на це, розробники наполегливо працювали над покращеннями, що значно сприяло появі багатьох інших публічних мереж.