Смарт-контракты как форма программного кода неизбежно могут содержать дефекты и уязвимости. Даже контракты, прошедшие тщательное тестирование и аудит, могут иметь невыявленные проблемы. Как только эти потенциальные проблемы будут использованы, это может привести к серьезным последствиям, таким как потеря активов пользователей. Поэтому способность к обновлению контрактов имеет важное значение для исправления уязвимостей и добавления новых функций. В данной статье будет рассмотрен способ обновления Rust-контрактов на платформе NEAR.
1. Необходимость обновления смарт-контрактов
Смарт-контракты по своей сути являются программным кодом и неизбежно могут содержать недостатки. Даже после многочисленных тестов и аудитов могут оставаться уязвимости. Если эти уязвимости будут использованы злоумышленниками, это может привести к серьезным последствиям, таким как потеря активов пользователей. Исправление уязвимостей часто требует обновления контракта. Кроме того, добавление новых функций также требует обновления контракта. Поэтому возможность обновления контракта крайне необходима.
!
2. Общие способы обновления контрактов Ethereum
Смарт-контракты на Ethereum обладают неизменяемостью, и после развертывания их невозможно изменить. Чтобы решить эту проблему, обычно используется способ прокси-контрактов (Proxy Contract):
Агенты используют смарт-контракты для хранения данных и вызывают логические контракты с помощью deleGatecall
Логические контракты содержат конкретную бизнес-логику
При обновлении необходимо просто развернуть новый логический смарт-контракт и обновить адрес прокси-контракта.
Этот способ позволяет сохранить исходные данные, обновляя только логическую часть.
!
3. Способы обновления контрактов NEAR
В качестве примера проекта StatusMessage, представим методы обновления контракта NEAR:
3.1 Структура данных смарт-контрактов не изменена
Если изменить только логику контракта, не затрагивая изменения в структуре данных, можно напрямую использовать команду near deploy для повторного развертывания нового кода. Существующие данные будут сохранены.
3.2 Структура данных смарт-контрактов была изменена
Если изменить структуру данных контракта, повторное развертывание приведет к несовпадению старой и новой структуры данных, что сделает невозможным нормальное чтение существующих данных.
3.3 Использование метода Migrate для обновления
NEAR предоставляет метод Migrate для обновления контрактов. В новом контракте добавьте функцию migrate:
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
10 Лайков
Награда
10
5
Поделиться
комментарий
0/400
liquiditea_sipper
· 20ч назад
Звучит так сильно, но я все равно не осмеливаюсь попробовать.
Посмотреть ОригиналОтветить0
NeverVoteOnDAO
· 20ч назад
Насчет обновления, кажется, не слишком хорошая идея, все время чувствую, что не могу очистить это полностью.
Посмотреть ОригиналОтветить0
BrokenDAO
· 20ч назад
Права равны бэкдору, о какой безопасности может идти речь?
Посмотреть ОригиналОтветить0
LayerZeroHero
· 20ч назад
Как только обновление будет завершено, никто не сможет управлять.
Советы по обновлению смарт-контрактов на Rust: лучшие практики перехода от Ethereum к NEAR
Rust смарт-контракты养成日记(9):合约安全之合约升级
Смарт-контракты как форма программного кода неизбежно могут содержать дефекты и уязвимости. Даже контракты, прошедшие тщательное тестирование и аудит, могут иметь невыявленные проблемы. Как только эти потенциальные проблемы будут использованы, это может привести к серьезным последствиям, таким как потеря активов пользователей. Поэтому способность к обновлению контрактов имеет важное значение для исправления уязвимостей и добавления новых функций. В данной статье будет рассмотрен способ обновления Rust-контрактов на платформе NEAR.
1. Необходимость обновления смарт-контрактов
Смарт-контракты по своей сути являются программным кодом и неизбежно могут содержать недостатки. Даже после многочисленных тестов и аудитов могут оставаться уязвимости. Если эти уязвимости будут использованы злоумышленниками, это может привести к серьезным последствиям, таким как потеря активов пользователей. Исправление уязвимостей часто требует обновления контракта. Кроме того, добавление новых функций также требует обновления контракта. Поэтому возможность обновления контракта крайне необходима.
!
2. Общие способы обновления контрактов Ethereum
Смарт-контракты на Ethereum обладают неизменяемостью, и после развертывания их невозможно изменить. Чтобы решить эту проблему, обычно используется способ прокси-контрактов (Proxy Contract):
Этот способ позволяет сохранить исходные данные, обновляя только логическую часть.
!
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 при развертывании:
near развертывание
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "миграция"
--initArgs "{}"
--accountId statusmessage.blocksec_upgrade.testnet
Таким образом, можно завершить миграцию данных, даже если структуры данных старых и новых смарт-контрактов не совпадают, обновление пройдет нормально.
4. Безопасные аспекты обновления смарт-контрактов
При обновлении смарт-контрактов необходимо учитывать следующие факторы безопасности:
С помощью этих мер можно обеспечить безопасность обновления смарт-контрактов и снизить риски в процессе обновления.
!