Смарт-контракты как одна из форм программ неизбежно могут содержать недостатки. Даже после многочисленных тестов и аудитов все еще могут быть уязвимости. Как только они будут использованы злоумышленниками, это может привести к потерям активов пользователей, и последствия могут быть серьезными. Поэтому возможность обновления контрактов крайне необходима, в основном для исправления уязвимостей и добавления новых функций. В этой статье будет представлен способ обновления контрактов на Rust.
Метод обновления контрактов NEAR
На примере проекта StatusMessage рассмотрим распространенные методы обновления контрактов NEAR.
1. Структура данных смарт-контракта не изменена
Если изменить только логику контракта, не затрагивая изменения в структуре данных, можно напрямую использовать near deploy для развертывания нового кода:
бить
близко к развертыванию
--accountId статус_сообщение.example.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
Исходные данные контракта могут быть нормально прочитаны.
!
2. Изменение структуры данных смарт-контрактов
Если изменить структуру данных контракта, повторное развертывание приведет к сбою десериализации состояния. В этом случае необходимо использовать метод 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.
6 Лайков
Награда
6
3
Поделиться
комментарий
0/400
PumpBeforeRug
· 10ч назад
Если вы не можете предотвратить низкоуровневые уязвимости, то о каком голом беге может идти речь?
Лучшие практики обновления смарт-контрактов Rust: учимся на примере контракта NEAR
Руководство по обновлению смарт-контрактов Rust
Смарт-контракты как одна из форм программ неизбежно могут содержать недостатки. Даже после многочисленных тестов и аудитов все еще могут быть уязвимости. Как только они будут использованы злоумышленниками, это может привести к потерям активов пользователей, и последствия могут быть серьезными. Поэтому возможность обновления контрактов крайне необходима, в основном для исправления уязвимостей и добавления новых функций. В этой статье будет представлен способ обновления контрактов на Rust.
Метод обновления контрактов NEAR
На примере проекта StatusMessage рассмотрим распространенные методы обновления контрактов NEAR.
1. Структура данных смарт-контракта не изменена
Если изменить только логику контракта, не затрагивая изменения в структуре данных, можно напрямую использовать near deploy для развертывания нового кода:
бить близко к развертыванию
--accountId статус_сообщение.example.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
Исходные данные контракта могут быть нормально прочитаны.
!
2. Изменение структуры данных смарт-контрактов
Если изменить структуру данных контракта, повторное развертывание приведет к сбою десериализации состояния. В этом случае необходимо использовать метод migrate для обновления:
руда #[private] #[init(ignore_state)] pub fn migrate() -> Self { let old_state: OldStatusMessage = env::state_read().expect("failed"); Самостоятельно { new_field: LookupMap::new(b"n".to_vec()), old_field: old_state.old_field, } }
Вызов метода migrate при развертывании:
бить
near развертывание
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "миграция"
--initArgs "{}"
--accountId status_message.example.testnet
Таким образом, старое состояние может быть перенесено в новый смарт-контракт.
!
Рекомендации по безопасности обновления смарт-контрактов
Разумное обновление может обеспечить безопасность и масштабируемость контрактов, что является важным этапом в разработке смарт-контрактов.
!