Руководство по обновлению смарт-контрактов на Rust
Смарт-контракты, будучи одной из форм программы, неизбежно могут содержать недостатки. Даже после большого количества тестов и аудитов могут оставаться уязвимости. Если уязвимость будет использована, это может привести к серьезным последствиям, таким как потеря активов пользователей. Поэтому возможность обновления контрактов имеет очень большое значение, в основном для исправления уязвимостей и добавления новых функций.
!
Способы обновления контрактов NEAR
На примере проекта StatusMessage рассмотрим распространенные методы обновления контрактов NEAR.
1. Структура данных контракта не изменена
Если изменить только логику контракта, не затрагивая изменение структуры данных, можно напрямую использовать команду near deploy для повторного развертывания нового кода. Данные из оригинального контракта все еще можно нормально считывать.
2. Структура данных смарт-контрактов была изменена
Если изменить структуру данных контракта, то повторное развертывание приведет к тому, что новая структура данных не будет соответствовать старому состоянию, что вызовет ошибку.
3. Используйте метод Migrate для обновления
NEAR предоставляет метод Migrate для помощи в обновлении смарт-контрактов. Добавьте метод migrate в новый контракт:
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
20 Лайков
Награда
20
6
Поделиться
комментарий
0/400
SignatureAnxiety
· 19ч назад
состояние игроков near гг了
Посмотреть ОригиналОтветить0
DAOTruant
· 07-27 00:44
Зависит от настроения, стоит ли переносить данные.
Руководство по обновлению смарт-контрактов Rust: практика безопасной миграции на платформу NEAR
Руководство по обновлению смарт-контрактов на 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
Таким образом, можно успешно развернуть новый смарт-контракт и перенести старые данные.
!
Безопасные аспекты обновления смарт-контрактов
Функция обновления должна иметь контроль доступа, как правило, ее могут вызывать только разработчики или DAO.
Рекомендуется установить владельца смарт-контрактов как DAO, чтобы совместно управлять через предложения и голосования.
Перед функцией миграции добавьте #[init(ignore_state)], чтобы убедиться, что состояние не загружается перед выполнением.
После завершения миграции удалите функцию миграции, чтобы убедиться, что она вызывается только один раз.
Новая структура данных инициализируется при миграции.
Рациональный механизм обновления может обеспечить гибкость и поддерживаемость контрактов при гарантии безопасности.
!