Найкращі практики оновлення смартконтрактів 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 під час розгортання:

Баш
ближній розгортання
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "мігрувати"
--initArgs "{}"
--accountId статус_повідомлення.example.testnet

Це дозволить перенести старий стан до нового смартконтракту.

!

Рекомендації щодо безпеки оновлення смартконтрактів

  1. Функцію оновлення додано контроль доступу, дозволено викликати лише власнику.
  2. Встановити owner як DAO, управляти через пропозиції та голосування
  3. Додати функцію міграції #[init(ignore_state)]
  4. Видалити функцію мігрування після завершення мігрування
  5. Нова структура даних ініціалізується під час міграції

Розумне оновлення може забезпечити безпеку та масштабованість контрактів, що є важливим етапом у розробці смартконтрактів.

!

Переглянути оригінал
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.
  • Нагородити
  • 3
  • Поділіться
Прокоментувати
0/400
PumpBeforeRugvip
· 10год тому
Якщо не можете впоратися з базовими вразливостями, то про що йдеться у безкоштовному запуску?
Переглянути оригіналвідповісти на0
DegenWhisperervip
· 10год тому
Не дарма rust, дивовижний
Переглянути оригіналвідповісти на0
WalletWhisperervip
· 10год тому
Новий проєкт знову прийшов, виглядає цікаво.
Переглянути оригіналвідповісти на0
  • Закріпити