Подробное объяснение методов обновления смарт-контрактов на Rust
Смарт-контракты как одна из форм программ неизбежно могут содержать недостатки и уязвимости. Даже после обширного тестирования и аудита могут возникнуть проблемы. Если уязвимости будут использованы злоумышленниками, это может привести к серьезным последствиям, таким как потеря активов пользователей. Поэтому возможность обновления контрактов крайне важна, в этой статье будет рассмотрен способ обновления контрактов на Rust.
Способы обновления контрактов Ethereum
Смарт-контракты на Ethereum обладают неизменяемостью, и после развертывания их нельзя напрямую изменять. Обычно для обновления используются следующие методы:
Развертывание нового контракта, изменение адреса контракта в DApp. Недостаток в том, что необходимо мигрировать состояние данных старого контракта.
Архитектура разделения данных и логики. Данные хранятся в состоянии смарт-контрактов, логика реализована в другом контракте. При обновлении необходимо только обновить логический контракт.
Используйте прокси-контракты. Прокси-контракты хранят данные и вызывают логические контракты через deleGatecall, при обновлении необходимо просто обновить адрес логического контракта.
!
Метод обновления контрактов NEAR
На примере проекта StatusMessage рассматривается метод обновления контрактов NEAR:
1. Структура данных смарт-контрактов не изменена
Если изменить только логику контракта, не затрагивая изменения в структуре данных, можно напрямую использовать команду near deploy для повторного развертывания нового кода. Существующие данные будут сохранены.
2. Структура данных смарт-контракта была изменена
Если изменить структуру данных, то прямое повторное развертывание приведет к несоответствию между новыми и старыми структурами данных, что сделает невозможным нормальное чтение данных.
3. Используйте метод Migrate для обновления
NEAR предоставляет метод Migrate для помощи в обновлении:
Добавить метод migrate в новый контракт
Во время развертывания вызывайте метод migrate для миграции данных
После завершения миграции можно нормально использовать функции нового контракта.
!
Безопасные аспекты обновления смарт-контрактов
Контроль доступа - Функция обновления должна быть функцией только для владельца
Рекомендуется установить владельцем DAO, чтобы избежать рисков централизации
Используйте #[init(ignore_state)], чтобы убедиться, что состояние не загружается перед выполнением миграции.
Удалите функцию миграции после миграции, чтобы избежать повторных вызовов
Новая структура данных инициализируется во время миграции.
Путем разумного проектирования плана обновления можно обеспечить возможность обновления контрактов, гарантируя безопасность, что повысит долгосрочную поддерживаемость проекта.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
12 Лайков
Награда
12
6
Поделиться
комментарий
0/400
FlatlineTrader
· 2ч назад
Уязвимость это Кошелек...
Посмотреть ОригиналОтветить0
Deconstructionist
· 9ч назад
Рекомендуется добавить горячую перезагрузку
Посмотреть ОригиналОтветить0
rekt_but_not_broke
· 9ч назад
Смарт-контракты на самом деле такие обманчивые.
Посмотреть ОригиналОтветить0
LiquidityWizard
· 9ч назад
теоретически говоря, прокси-шаблоны это всего лишь сахарные состояния мутаций с 73.4% дополнительными Газ-расходами... смх
Посмотреть ОригиналОтветить0
SchrödingersNode
· 9ч назад
Снова старая операция по изменению адреса контракта
Подробное руководство по обновлению смарт-контрактов на Rust: лучшие практики от Ethereum до NEAR
Подробное объяснение методов обновления смарт-контрактов на Rust
Смарт-контракты как одна из форм программ неизбежно могут содержать недостатки и уязвимости. Даже после обширного тестирования и аудита могут возникнуть проблемы. Если уязвимости будут использованы злоумышленниками, это может привести к серьезным последствиям, таким как потеря активов пользователей. Поэтому возможность обновления контрактов крайне важна, в этой статье будет рассмотрен способ обновления контрактов на Rust.
Способы обновления контрактов Ethereum
Смарт-контракты на Ethereum обладают неизменяемостью, и после развертывания их нельзя напрямую изменять. Обычно для обновления используются следующие методы:
Развертывание нового контракта, изменение адреса контракта в DApp. Недостаток в том, что необходимо мигрировать состояние данных старого контракта.
Архитектура разделения данных и логики. Данные хранятся в состоянии смарт-контрактов, логика реализована в другом контракте. При обновлении необходимо только обновить логический контракт.
Используйте прокси-контракты. Прокси-контракты хранят данные и вызывают логические контракты через deleGatecall, при обновлении необходимо просто обновить адрес логического контракта.
!
Метод обновления контрактов NEAR
На примере проекта StatusMessage рассматривается метод обновления контрактов NEAR:
1. Структура данных смарт-контрактов не изменена
Если изменить только логику контракта, не затрагивая изменения в структуре данных, можно напрямую использовать команду near deploy для повторного развертывания нового кода. Существующие данные будут сохранены.
2. Структура данных смарт-контракта была изменена
Если изменить структуру данных, то прямое повторное развертывание приведет к несоответствию между новыми и старыми структурами данных, что сделает невозможным нормальное чтение данных.
3. Используйте метод Migrate для обновления
NEAR предоставляет метод Migrate для помощи в обновлении:
!
Безопасные аспекты обновления смарт-контрактов
Путем разумного проектирования плана обновления можно обеспечить возможность обновления контрактов, гарантируя безопасность, что повысит долгосрочную поддерживаемость проекта.
!