существуют В экосистеме разработки Ethereum,Solidity Версия、Geth Версия и EVM(Ethereum Virtual Machine)Версия Между ними существует тесная связь. Понимание их взаимоотношений имеет решающее значение для разработки, развертывания и исполнения смарт-контрактов. Ниже приводится подробная информация об отношениях между версиями:
1. Версия Solidity
Solidity Это основной язык программирования смарт-контрактов на платформе Ethereum. Он используется для написания смарт-контрактов на Ethereum и в конечном итоге компилируется в EVM Байт-код. Солидность Эволюция версии напрямую влияет на возможности использования языковых функций разработчиками контрактов.、Улучшения синтаксиса и безопасности。
- Скомпилируйте и сгенерируйте байт-код EVM:Solidity Компилятор (solc) будет Solidity Исходный код скомпилирован в EVM байт-код, чтобы смарт-контракты могли выполняться на виртуальной машине Ethereum (EVM). каждый Solidity Версия будет генерировать определенный формат избайт-кода, поэтому после компиляции избайт-коди EVM Версияизсовместимостьключевой。
- Версиявозобновлятьи Изменения функций:Solidity Версияизвозобновить принесет новые возможности языка и оптимизацию производительности. bug ремонт. Например, последуют новые улучшения синтаксиса, оптимизация смарт-контрактов и исправления уязвимостей безопасности. Solidity Версияизменятьвозобновлять。
- Совместимость с ЭВМ:другой Solidity ВерсияGeneration избайт-кода может потребовать определенных EVM Функциональная поддержка, поэтому при разработке смарт-контрактов обязательно Solidity После компиляции избайт-код может существовать EVM Правильное выполнение очень важно в Версии.
2. Гетская версия
Geth (Go Ethereum) — один из наиболее широко используемых клиентов в сети Ethereum. Он отвечает за обработку операций узлов Ethereum, включая связь с другими узлами, синхронизацию блокчейна, обработку транзакций и т. д.
- Интеграция с ЭВМ:Geth по сути бежать EVM контейнер, следовательно Geth Версия сама решит, какой из них поддерживает EVM Версия。EVM да Geth Выполнить смарт-контракт из основного модуля и другого EVM Версия представит другие коды операций (опкоды) и логику выполнения.
- Поддержка обновления сети:Geth из Версии обычновозобновляют и Ethereum из обновлений сети (таких как форки или улучшения протокола). Каждый раз, когда сеть Ethereum подвергается масштабному обновлению (например, Byzantium、Constantinople или London Хардфорк), будут введены новые EVM Функция или поведение. Это означает, что если вы хотите поддерживать эти обновленные EVM Функция, Гет Должен обновиться.
- Разработка и внедрение:Будьте разработчикомсуществоватьиспользовать Solidity При составлении контракта Гет Клиент будет исполнять эти контракты избайт-кода. Поэтому перед развертыванием контракта убедитесь, что Geth Версии целевой сети из EVM Соответствие версий важно.
3. Версия ЭВМ
EVM (виртуальная машина Ethereum) — это конечный автомат, отвечающий за выполнение байт-кода смарт-контракта. Каждое обновление или изменение EVM влияет на поддерживаемые ею коды операций, поведение выполнения и совместимость со смарт-контрактами.
- Обновление кода операции EVM:Эфириумиздругой Обновление представит новыеизкод операциили Изменить существующиеизкод операции。примернравиться,Эфириумизнекоторыйхард-форк(нравиться Лондонский хардфорк)представил новыеиз EVM код операции gas Корректировка сборов. Это влияет на затраты и поведение смарт-контрактов.
- Связь с твердостью:Solidity Составить контракт байт-кодда на основе EVM установлен код операции, поэтому EVM Версиявозобновлять, новые коды операций могут появиться в будущем Solidity Поддерживается в версии. Это означает, что более новый из Solidity Версия компиляции из контракта байт-кода может зависеть от последней версии EVM Функция.
- Обратная совместимость EVM:EVM Дизайн максимально сохранен в обратном направлении, чтобы старый контракт на версию все еще мог существовать в новом EVM беги дальше. Однако, если EVM из Некоторые поведенческие коды или коды операций изменились, что может повлиять на способ выполнения конкретных смарт-контрактов, особенно при использовании новой версии. Solidity При составлении договора.
4. Краткое описание отношений между тремя
- Solidity отвечает за написание и компиляцию смарт-контрактов.,он генерируетизбайт-кодда EVM То, что можно понять и выполнить. Следовательно, Солидность из Версиядолжени EVM Версия совместима, иначе сборка избайт-кода может выполниться некорректно.
- Geth — один из основных клиентов Ethereum.,он интегрирует EVM для выполнения смарт-контрактов. гет Версияи EVM Версия тесно связана, и каждый раз, когда протокол Ethereum возобновляется (например, хард-форк), он будет приносить новые версии. EVM характеристики, и эти характеристики будут отражать существование Geth обновляется.
- EVM — основа исполнения смарт-контрактов,другой Эфириум Обновление протокола(нравиться Byzantium、Constantinople、London и т. д.) принесет новые EVM Версия. Эти версии улучшают коды операций, газ Расчет комиссий и т. д. напрямую влияют на исполнение смарт-контрактов.
5. Меры предосторожности при практическом применении
- Проверка соответствия:Разработчиксуществоватьписать Solidity При подписании договора необходимо обратить внимание на действующую сеть. EVM Поддерживает ли функция изверсии написание собственного контракта? В противном случае контракт может иметь ненормальное поведение, которое невозможно будет выполнить после развертывания.
- Обновления гетов:Geth Как обычный клиент, его Версиявозобновлять должна синхронизироваться с обновлениями основной сети Ethereum, чтобы обеспечить новейшую поддержку. EVM код операции Поведение。нравитьсяфрукты Разработчикили Операторы узлов не обновляются вовремя Geth, может вызвать проблемы несовместимости сети.
- Версиязапирание:существоватьдействительныйиз Разработка смарт-контрактови Во время развертывания,предположение Разработчикчетко указаноиспользоватьиз Solidity Версия (через
pragma
заявление) для предотвращения контракта избайт-существовать в будущем Версияиз Solidity Компилятор генерирует несовместимый байт-код.
6. Расширение 1: изменение версии evm
EVM(Ethereum Virtual Машина) в основном из версии и протокола обновления Ethereum (например, хард-форк). Каждый раз, когда Ethereum подвергается обновлению сети, EVM функции, наборы кодов операций и gas Расчеты комиссий и т. д. также изменятся. Эти обновления обычно называются в честь хард-форков; EVM Версия отмечена согласно этому хард-форку.
Ниже приводится несколько крупных исхард-форков, соответствующих из сети Ethereum EVM Версия:
- Frontier (2015): Генезисный блок Эфириума начал обретать свою первоначальную форму. EVM Версия。
- Homestead (2016):EVM Были добавлены новые функции, улучшен процесс создания контрактов и исправлены некоторые из самых ранних ошибок.
- Tangerine Whistle (2016): Верно EVM из gas Структура сборов была скорректирована с учетом DoS атаковать.
- Spurious Dragon (2016): улучшено EVM серединаизочистка статуса,продолжатькод операции gas Оптимизация затрат.
- Byzantium (2017): Представлен новый исходник. операции (например,
REVERT
、STATICCALL
и т. д.), что повышает безопасность и гибкость при выполнении смарт-контракта. - Constantinople (2019): Добавлены новые из EVM Коды операций, которые сокращают некоторые контрактные операции gas потребление.
- Petersburg (2019):Откатился назад Constantinople Исправлены некоторые функции и проблемы безопасности.
- Istanbul (2019):вернонекоторыйкод операцииз gas Вновь были скорректированы комиссии и введена поддержка новых примитивов шифрования.
- Berlin (2021): Да gas Сборы были изменены, и были введены некоторые новые. EVM характеристика.
- London (2021): Важное из достигнутого
EIP-1559
модернизированный, скорректированный gas структуру вознаграждения, одновременно вводя новые EVM код операции (например, BASEFEE
)。 - Shanghai/Capella (2023) :Шанхайское обновление (в основном улучшения, связанные с механизмом доказательства ставки Ethereum) также приносит EVM из Некоторые незначительные изменения.
другой EVM Версия представит новые коды операций, настройки gas структуру платы или исправить уязвимости безопасности, поэтому разработчикам необходимо убедиться,что их смарт-контракты совместимы с развернутой сетью. EVM Версиясовместимый。
7. Расширение 2: Как указать версию EVM, когда Geth запускает сеть блокчейна?
существовать Geth середина,По умолчанию поддерживается последняя версия EVM Версия,Это соответствует подключенной сети. Например,нравитьсяфрукты Geth Узел подключен к основной сети Geth. Автоматически адаптируется к текущей основной сети EVM Версия。Geth Он не позволяет разработчикам напрямую указывать конкретный из через строку Заказ при запуске. EVM Версия,потому что Geth Какой из них использовать, определяется в зависимости от высоты блока. EVM Версияиз。
Выбор версии EVM автоматически определяется механизмом обновления блокчейна (хард-форк)。Когда блокчейн достигнетприезжатьконкретныйизвысота блока,Автоматически переключит место проживания из версии EVM.,Это путь даEthereumхард-форкиза. Например,Byzantium
После обновления Гет Будет ли блок обновления (блок хард-форк) использоваться до того, как старый из EVM Версия,А существующий хард-вилочный блок автоматически переключается на проживание Byzantium
EVM Версия。
7.1 Как разработчики используют определенные версии EVM в частных цепочках или сетях разработки?
Если вы хотите существовать, разработайте сеть или частную цепочку и вручную укажите конкретный EVM Версия, вы обычно можете создать собственную версию с помощью Файл конфигурации блока Genesis указать. Например, в конфигурации генезиса вы можете указать, какие обновления протокола (хард-форк) будут применяться к конкретному блоку сети, тем самым косвенно указывая определенную версию. EVM。
Ниже приводится Geth Как указать хард-форк (соответствующий EVM Версия)изпример:
{
"config": {
"chainId": 1234,
"homesteadBlock": 0,
"daoForkBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"muirGlacierBlock": 0,
"berlinBlock": 0,
"londonBlock": 0
},
"alloc": {},
"difficulty": "0x20000",
"gasLimit": "0x2fefd8",
"genesis": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
В этом документе о генезисе блокчейн начинается с 0
Примените все EVM Обновление (с Homestead
приезжать London
)。Вы можете изменить их, *_Block
параметры, чтобы указать, что конкретный блок включает EVM Версия。
7.2 Используется в тестовой среде evm
Заказ
Если вы хотите работать только локально EVM специфическая Версия для тестирования, Geth обеспечивает evm
из инструмента, который может вручную запускать различные версиииз EVM Чтобы проверить выполнение смарт-контракта. Вы можете использовать следующий заказ:
evm --code "<bytecode>" run --vm <vm-version>
в <vm-version>
может быть byzantium
、constantinople
、istanbul
Ожидание назначенного EVM Версия。