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

недалеко розгорнути
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction 'migrate'
--initArgs '{}'
--accountId statusmessage.blocksec_upgrade.testnet

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

!

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

  1. Функція оновлення повинна бути функцією only owner, щоб забезпечити виклик тільки власником.

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

  3. Додайте #[init(ignore_state)] перед функцією міграції

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

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

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

!

INIT-7.07%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 2
  • Репост
  • Поділіться
Прокоментувати
0/400
SandwichVictimvip
· 08-13 22:24
Так багато вразливостей, дивитися страшно.
Переглянути оригіналвідповісти на0
BlockImpostervip
· 08-13 22:24
Яка різниця, оновлюй чи ні, все одно не втечеш з дупла~
Переглянути оригіналвідповісти на0
  • Закріпити