Детальний огляд оновлення смартконтрактів Rust: посібник з безпеки платформи NEAR

robot
Генерація анотацій у процесі

Детальний опис методів оновлення смартконтрактів на Rust

смартконтракти в своїй суті є програмами, тому не уникнути дефектів. Навіть після великої кількості тестувань та аудитів смартконтрактів можуть залишатися вразливості. Як тільки їх використає зловмисник, це може призвести до втрати активів користувачів, що має серйозні наслідки. Тому можливість оновлення контракту є надзвичайно важливою. У цій статті буде розглянуто способи оновлення контрактів на Rust.

Необхідність оновлення контракту

Виправлення вразливостей смартконтрактів та додавання нових функцій зазвичай потребує оновлення контракту. Основні причини такі:

  1. Виправити вразливості безпеки
  2. Додати нову функцію
  3. Оптимізація продуктивності смартконтрактів
  4. Адаптація до нових бізнес-вимог

!

Методи оновлення контрактів 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 при розгортанні:

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

Таким чином, можна успішно перенести старі дані до нової структури смартконтрактів.

!

Безпекові міркування щодо оновлення смартконтрактів

  1. Контроль доступу - лише розробникам або DAO дозволено оновлювати смартконтракти

  2. Рекомендується встановити власника контракту як DAO, управляти через пропозиції та голосування.

  3. Функція міграції використовує #[init(ignore_state)]

  4. Після завершення міграції видалити функцію міграції

  5. Нові структури даних ініціалізуються під час міграції

Оновлення смартконтрактів - це складний процес, який потребує уважного ставлення до кожної деталі, щоб забезпечити безпеку даних та безперервність бізнесу.

!

NEAR-1.26%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 4
  • Поділіться
Прокоментувати
0/400
Anon4461vip
· 07-14 08:32
Це хто витримає~
Переглянути оригіналвідповісти на0
rekt_but_not_brokevip
· 07-14 08:22
чи також була оновлена версія near?
Переглянути оригіналвідповісти на0
LightningPacketLossvip
· 07-14 08:20
Після двох років роботи з Rust вирішив зайнятися Web3.
Переглянути оригіналвідповісти на0
MidnightMEVeatervip
· 07-14 08:18
Навіть гільйотина не наважиться так обдурювати людей, як лохів. Чи повернуться розробники?
Переглянути оригіналвідповісти на0
  • Закріпити