Отношения между Solidity, Geth и EVM
Отношения между Solidity, Geth и EVM

существуют В экосистеме разработки 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 подвергается масштабному обновлению (например, ByzantiumConstantinople или 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. Меры предосторожности при практическом применении

  1. Проверка соответствия:Разработчиксуществоватьписать Solidity При подписании договора необходимо обратить внимание на действующую сеть. EVM Поддерживает ли функция изверсии написание собственного контракта? В противном случае контракт может иметь ненормальное поведение, которое невозможно будет выполнить после развертывания.
  2. Обновления гетов:Geth Как обычный клиент, его Версиявозобновлять должна синхронизироваться с обновлениями основной сети Ethereum, чтобы обеспечить новейшую поддержку. EVM код операции Поведение。нравитьсяфрукты Разработчикили Операторы узлов не обновляются вовремя Geth, может вызвать проблемы несовместимости сети.
  3. Версиязапирание:существоватьдействительныйиз Разработка смарт-контрактови Во время развертывания,предположение Разработчикчетко указаноиспользоватьиз Solidity Версия (через pragma заявление) для предотвращения контракта избайт-существовать в будущем Версияиз Solidity Компилятор генерирует несовместимый байт-код.

6. Расширение 1: изменение версии evm

EVM(Ethereum Virtual Машина) в основном из версии и протокола обновления Ethereum (например, хард-форк). Каждый раз, когда Ethereum подвергается обновлению сети, EVM функции, наборы кодов операций и gas Расчеты комиссий и т. д. также изменятся. Эти обновления обычно называются в честь хард-форков; EVM Версия отмечена согласно этому хард-форку.

Ниже приводится несколько крупных исхард-форков, соответствующих из сети Ethereum EVM Версия:

  1. Frontier (2015): Генезисный блок Эфириума начал обретать свою первоначальную форму. EVM Версия。
  2. Homestead (2016):EVM Были добавлены новые функции, улучшен процесс создания контрактов и исправлены некоторые из самых ранних ошибок.
  3. Tangerine Whistle (2016): Верно EVM из gas Структура сборов была скорректирована с учетом DoS атаковать.
  4. Spurious Dragon (2016): улучшено EVM серединаизочистка статуса,продолжатькод операции gas Оптимизация затрат.
  5. Byzantium (2017): Представлен новый исходник. операции (например, REVERTSTATICCALL и т. д.), что повышает безопасность и гибкость при выполнении смарт-контракта.
  6. Constantinople (2019): Добавлены новые из EVM Коды операций, которые сокращают некоторые контрактные операции gas потребление.
  7. Petersburg (2019):Откатился назад Constantinople Исправлены некоторые функции и проблемы безопасности.
  8. Istanbul (2019):вернонекоторыйкод операцииз gas Вновь были скорректированы комиссии и введена поддержка новых примитивов шифрования.
  9. Berlin (2021): Да gas Сборы были изменены, и были введены некоторые новые. EVM характеристика.
  10. London (2021): Важное из достигнутого EIP-1559 модернизированный, скорректированный gas структуру вознаграждения, одновременно вводя новые EVM код операции (например, BASEFEE)。
  11. 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 Версия)изпример:

Язык кода:json
копировать
{
  "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 Чтобы проверить выполнение смарт-контракта. Вы можете использовать следующий заказ:

Язык кода:bash
копировать
evm --code "<bytecode>" run --vm <vm-version>

в <vm-version> может быть byzantiumconstantinopleistanbul Ожидание назначенного EVM Версия。

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose