Обновление смарт-контрактов Rust: обеспечение безопасности и масштабируемости

robot
Генерация тезисов в процессе

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. Безопасные аспекты обновления смарт-контрактов

  • Обновление контроля доступа, обычно может осуществляться только разработчиками или DAO.
  • Рекомендуется установить владельцем контракта DAO, управляя через предложения и голосование.
  • Добавить #[init(ignore_state)] перед функцией миграции
  • Удалите функцию миграции после завершения миграции
  • Новая структура данных инициализируется во время миграции

Обновление смарт-контрактов является важным средством обеспечения безопасности и итерации функций контрактов, что требует тщательного проектирования и реализации.

!

INIT-1.68%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 7
  • Поделиться
комментарий
0/400
FarmHoppervip
· 07-25 03:37
Почини быстро, старик, всё время паникуешь из-за уязвимостей.
Посмотреть ОригиналОтветить0
WenMoonvip
· 07-24 22:42
Все здесь занимаются обновлениями, это немного опасно?
Посмотреть ОригиналОтветить0
LightningLadyvip
· 07-24 20:23
Снова устанавливаю обновление, эх.
Посмотреть ОригиналОтветить0
SandwichTradervip
· 07-22 05:36
Продолжать списывать домашку? Снова сменили контракт и начали играть.
Посмотреть ОригиналОтветить0
BoredRiceBallvip
· 07-22 05:34
Надежно, сначала протестировать, потом использовать
Посмотреть ОригиналОтветить0
SigmaValidatorvip
· 07-22 05:33
Кто-то атаковал мой смарт-контракт!
Посмотреть ОригиналОтветить0
BoredApeResistancevip
· 07-22 05:30
Агентство снова имеет новые способы игры.
Посмотреть ОригиналОтветить0
  • Закрепить