Подробное руководство по обновлению смарт-контрактов Rust: руководство по безопасному обновлению платформы NEAR

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

Подробности о методах обновления смарт-контрактов на Rust

Смарт-контракты по своей сути являются программами и неизбежно могут содержать недостатки. Даже смарт-контракты, прошедшие множество тестов и аудитов, все равно могут иметь уязвимости. Если они будут использованы злоумышленниками, это может привести к потере активов пользователей, что имеет серьезные последствия. Поэтому возможность обновления контрактов имеет огромное значение. В этой статье будет рассмотрен способ обновления контрактов на Rust.

Необходимость обновления смарт-контрактов

Исправление уязвимостей смарт-контрактов и добавление новых функций часто требует обновления контракта. Основные причины:

  1. Исправление уязвностей безопасности
  2. Добавить новую функцию
  3. Оптимизация производительности смарт-контрактов
  4. Адаптация к новым бизнес-требованиям

!

Способы обновления NEAR смарт-контрактов

На примере проекта StatusMessage рассмотрим распространенные методы обновления контрактов NEAR:

1. Структура данных контракта не изменена

Если изменяется только логика контракта и не затрагиваются изменения структуры данных, можно напрямую использовать команду near deploy для повторного развертывания нового кода. Исходные данные по-прежнему могут быть нормально доступны.

2. Структура данных контракта была изменена

Если изменить структуру данных контракта, то повторное развертывание приведет к тому, что новая структура данных не сможет соответствовать старому состоянию, что вызовет ошибку десериализации.

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 при развертывании:

near развертывание
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "миграция"
--initArgs "{}"
--accountId statusmessage.blocksec_upgrade.testnet

Таким образом, старые данные можно успешно перенести в новую структуру смарт-контрактов.

!

Безопасные аспекты обновления смарт-контрактов

  1. Контроль доступа - только разработчики или DAO могут обновлять смарт-контракты

  2. Рекомендуется установить владельца контракта как DAO, управляя через предложения и голосование.

  3. Функция миграции использует #[init(ignore_state)]

  4. Удалите функцию миграции после завершения миграции

  5. Новая структура данных инициализируется во время миграции

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

!

NEAR-0.56%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 4
  • Поделиться
комментарий
0/400
Anon4461vip
· 07-14 08:32
Кто это выдержит~
Посмотреть ОригиналОтветить0
rekt_but_not_brokevip
· 07-14 08:22
near тоже обновился?
Посмотреть ОригиналОтветить0
LightningPacketLossvip
· 07-14 08:20
Два года работал с Rust, а теперь снова занимаюсь Web3!
Посмотреть ОригиналОтветить0
MidnightMEVeatervip
· 07-14 08:18
Даже гильотина не осмелится так разыгрывать людей как лохов. Разработчики вернутся?
Посмотреть ОригиналОтветить0
  • Закрепить