Руководство по обновлению смарт-контрактов Rust: практика безопасной миграции на платформу NEAR

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

Руководство по обновлению смарт-контрактов на Rust

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

!

Способы обновления контрактов 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 'migrate'
--initArgs '{}'
--accountId statusmessage.blocksec_upgrade.testnet

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

!

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

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

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

  3. Перед функцией миграции добавьте #[init(ignore_state)], чтобы убедиться, что состояние не загружается перед выполнением.

  4. После завершения миграции удалите функцию миграции, чтобы убедиться, что она вызывается только один раз.

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

Рациональный механизм обновления может обеспечить гибкость и поддерживаемость контрактов при гарантии безопасности.

!

INIT3.09%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 6
  • Поделиться
комментарий
0/400
SignatureAnxietyvip
· 19ч назад
состояние игроков near гг了
Посмотреть ОригиналОтветить0
DAOTruantvip
· 07-27 00:44
Зависит от настроения, стоит ли переносить данные.
Посмотреть ОригиналОтветить0
0xSherlockvip
· 07-25 08:10
Смотреть на это голова болит, учиться не могу.
Посмотреть ОригиналОтветить0
MEVHunterLuckyvip
· 07-25 08:10
Честно говоря, кода вообще нет, как учиться?
Посмотреть ОригиналОтветить0
blocksnarkvip
· 07-25 08:10
Мастер NEAR пришёл учить
Посмотреть ОригиналОтветить0
rugpull_survivorvip
· 07-25 08:00
Старый слух near稳啊
Посмотреть ОригиналОтветить0
  • Закрепить