Подробности о методах обновления смарт-контрактов на Rust
Смарт-контракты по своей сути являются программами и неизбежно могут содержать недостатки. Даже смарт-контракты, прошедшие множество тестов и аудитов, все равно могут иметь уязвимости. Если они будут использованы злоумышленниками, это может привести к потере активов пользователей, что имеет серьезные последствия. Поэтому возможность обновления контрактов имеет огромное значение. В этой статье будет рассмотрен способ обновления контрактов на Rust.
Необходимость обновления смарт-контрактов
Исправление уязвимостей смарт-контрактов и добавление новых функций часто требует обновления контракта. Основные причины:
Исправление уязвностей безопасности
Добавить новую функцию
Оптимизация производительности смарт-контрактов
Адаптация к новым бизнес-требованиям
!
Способы обновления NEAR смарт-контрактов
На примере проекта StatusMessage рассмотрим распространенные методы обновления контрактов NEAR:
1. Структура данных контракта не изменена
Если изменяется только логика контракта и не затрагиваются изменения структуры данных, можно напрямую использовать команду near deploy для повторного развертывания нового кода. Исходные данные по-прежнему могут быть нормально доступны.
2. Структура данных контракта была изменена
Если изменить структуру данных контракта, то повторное развертывание приведет к тому, что новая структура данных не сможет соответствовать старому состоянию, что вызовет ошибку десериализации.
3. Используйте метод Migrate для обновления
NEAR предоставляет метод Migrate для помощи в обновлении контрактов. В новый контракт добавьте метод migrate:
near развертывание
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "миграция"
--initArgs "{}"
--accountId statusmessage.blocksec_upgrade.testnet
Таким образом, старые данные можно успешно перенести в новую структуру смарт-контрактов.
!
Безопасные аспекты обновления смарт-контрактов
Контроль доступа - только разработчики или DAO могут обновлять смарт-контракты
Рекомендуется установить владельца контракта как DAO, управляя через предложения и голосование.
Функция миграции использует #[init(ignore_state)]
Удалите функцию миграции после завершения миграции
Новая структура данных инициализируется во время миграции
Обновление смарт-контрактов — это сложный процесс, который требует внимательного отношения к каждой детали, чтобы гарантировать безопасность данных и непрерывность бизнеса.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
13 Лайков
Награда
13
4
Поделиться
комментарий
0/400
Anon4461
· 07-14 08:32
Кто это выдержит~
Посмотреть ОригиналОтветить0
rekt_but_not_broke
· 07-14 08:22
near тоже обновился?
Посмотреть ОригиналОтветить0
LightningPacketLoss
· 07-14 08:20
Два года работал с Rust, а теперь снова занимаюсь Web3!
Посмотреть ОригиналОтветить0
MidnightMEVeater
· 07-14 08:18
Даже гильотина не осмелится так разыгрывать людей как лохов. Разработчики вернутся?
Подробное руководство по обновлению смарт-контрактов Rust: руководство по безопасному обновлению платформы NEAR
Подробности о методах обновления смарт-контрактов на Rust
Смарт-контракты по своей сути являются программами и неизбежно могут содержать недостатки. Даже смарт-контракты, прошедшие множество тестов и аудитов, все равно могут иметь уязвимости. Если они будут использованы злоумышленниками, это может привести к потере активов пользователей, что имеет серьезные последствия. Поэтому возможность обновления контрактов имеет огромное значение. В этой статье будет рассмотрен способ обновления контрактов на 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 "миграция"
--initArgs "{}"
--accountId statusmessage.blocksec_upgrade.testnet
Таким образом, старые данные можно успешно перенести в новую структуру смарт-контрактов.
!
Безопасные аспекты обновления смарт-контрактов
Контроль доступа - только разработчики или DAO могут обновлять смарт-контракты
Рекомендуется установить владельца контракта как DAO, управляя через предложения и голосование.
Функция миграции использует #[init(ignore_state)]
Удалите функцию миграции после завершения миграции
Новая структура данных инициализируется во время миграции
Обновление смарт-контрактов — это сложный процесс, который требует внимательного отношения к каждой детали, чтобы гарантировать безопасность данных и непрерывность бизнеса.
!