Смарт-контракты по своей сути являются программами и неизбежно могут содержать дефекты. Даже после обширного тестирования и аудита могут оставаться уязвимости. Если они будут использованы злоумышленниками, это может привести к потерям активов пользователей с серьезными последствиями. Поэтому возможность обновления контрактов крайне необходима, в данной статье будет представлен способ обновления контрактов на Rust.
1. Необходимость обновления смарт-контрактов
Смарт-контракты как программы неизбежно содержат недостатки. Исправление уязвимостей и добавление новых функций требуют обновления контракта.
2. Способы обновления смарт-контрактов Solidity
Эфирные смарт-контракты обладают неизменяемостью, после развертывания их нельзя изменить. Решением является развертывание нового контракта, но это сопряжено с проблемами, такими как изменение адреса и миграция состояния. Обычно используется архитектура прокси-контрактов, которая отделяет данные и логику, позволяя обновлять только логический контракт без беспокойства о миграции состояния.
!
3. Метод обновления контракта NEAR
Пример проекта StatusMessage для объяснения методов обновления контрактов NEAR:
3.1 Структура данных смарт-контрактов не изменена
Если изменить только логику контракта и не затрагивать изменения структуры данных, можно напрямую использовать near deploy для повторного развертывания нового кода. Существующие данные по-прежнему могут быть нормально прочитаны.
3.2 Структура данных смарт-контрактов была изменена
Если изменить структуру данных, то прямое повторное развертывание приведет к несовпадению новой и старой структуры данных, что сделает невозможным чтение существующих данных.
!
3.3 Использование метода Migrate для обновления
NEAR предоставляет метод Migrate для помощи в обновлении контрактов. В новом контракте добавьте метод migrate:
Для завершения миграции данных просто вызовите метод migrate при развертывании.
4. Безопасные аспекты обновления смарт-контрактов
Обновление контроля доступа, обычно может осуществляться только разработчиками или DAO.
Рекомендуется установить владельцем контракта DAO, управляя через предложения и голосование.
Добавить #[init(ignore_state)] перед функцией миграции
Удалите функцию миграции после завершения миграции
Новая структура данных инициализируется во время миграции
Обновление смарт-контрактов является важным средством обеспечения безопасности и итерации функций контрактов, что требует тщательного проектирования и реализации.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
14 Лайков
Награда
14
7
Поделиться
комментарий
0/400
FarmHopper
· 07-25 03:37
Почини быстро, старик, всё время паникуешь из-за уязвимостей.
Посмотреть ОригиналОтветить0
WenMoon
· 07-24 22:42
Все здесь занимаются обновлениями, это немного опасно?
Посмотреть ОригиналОтветить0
LightningLady
· 07-24 20:23
Снова устанавливаю обновление, эх.
Посмотреть ОригиналОтветить0
SandwichTrader
· 07-22 05:36
Продолжать списывать домашку? Снова сменили контракт и начали играть.
Посмотреть ОригиналОтветить0
BoredRiceBall
· 07-22 05:34
Надежно, сначала протестировать, потом использовать
Обновление смарт-контрактов Rust: обеспечение безопасности и масштабируемости
Rust смарт-контракты养成日记(9): 合约升级
Смарт-контракты по своей сути являются программами и неизбежно могут содержать дефекты. Даже после обширного тестирования и аудита могут оставаться уязвимости. Если они будут использованы злоумышленниками, это может привести к потерям активов пользователей с серьезными последствиями. Поэтому возможность обновления контрактов крайне необходима, в данной статье будет представлен способ обновления контрактов на Rust.
1. Необходимость обновления смарт-контрактов
Смарт-контракты как программы неизбежно содержат недостатки. Исправление уязвимостей и добавление новых функций требуют обновления контракта.
2. Способы обновления смарт-контрактов Solidity
Эфирные смарт-контракты обладают неизменяемостью, после развертывания их нельзя изменить. Решением является развертывание нового контракта, но это сопряжено с проблемами, такими как изменение адреса и миграция состояния. Обычно используется архитектура прокси-контрактов, которая отделяет данные и логику, позволяя обновлять только логический контракт без беспокойства о миграции состояния.
!
3. Метод обновления контракта NEAR
Пример проекта StatusMessage для объяснения методов обновления контрактов NEAR:
3.1 Структура данных смарт-контрактов не изменена
Если изменить только логику контракта и не затрагивать изменения структуры данных, можно напрямую использовать near deploy для повторного развертывания нового кода. Существующие данные по-прежнему могут быть нормально прочитаны.
3.2 Структура данных смарт-контрактов была изменена
Если изменить структуру данных, то прямое повторное развертывание приведет к несовпадению новой и старой структуры данных, что сделает невозможным чтение существующих данных.
!
3.3 Использование метода Migrate для обновления
NEAR предоставляет метод Migrate для помощи в обновлении контрактов. В новом контракте добавьте метод migrate:
ржавчина #[private] #[init(ignore_state)] pub fn migrate() -> Self { let old_state: OldStatusMessage = env::state_read().expect('failed'); Самостоятельно { Слоганы: old_state.records, bios: LookupMap::new(b'b'.to_vec()), } }
Для завершения миграции данных просто вызовите метод migrate при развертывании.
4. Безопасные аспекты обновления смарт-контрактов
Обновление смарт-контрактов является важным средством обеспечения безопасности и итерации функций контрактов, что требует тщательного проектирования и реализации.
!