Методи оновлення смартконтрактів Rust та питання безпеки

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

Обговорення методів оновлення смартконтрактів на Rust

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

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

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

  • Виправлено виявлені вразливості безпеки
  • Додати нові функціональні можливості
  • Оптимізувати логіку смартконтракту, підвищити продуктивність

!

2. Способи оновлення контрактів NEAR

Наступне на прикладі проекту StatusMessage буде представлено методи оновлення контрактів NEAR:

2.1 Структура даних смартконтракту не змінена

Якщо потрібно лише змінити логіку контракту і не вносити зміни в структуру даних, можна безпосередньо використовувати команду near deploy для повторного розгортання нового коду. Приклад:

Баш близьке розгортання
--accountId statusmessage.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm

У цьому випадку дані з попереднього контракту будуть збережені.

2.2 Структура даних смартконтракту була змінена

Якщо змінено структуру даних контракту, то пряме повторне розгортання призведе до помилки несумісності нової та старої структур даних. У такому випадку необхідно використовувати метод міграції для оновлення.

Додати метод 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.testnet

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

!

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

При оновленні смартконтрактів необхідно звернути увагу на такі пункти:

  • Строго контролювати права на оновлення, дозволяючи оновлення лише власнику контракту або DAO
  • Рекомендується встановити власника контракту на DAO, щоб керувати оновленнями через пропозиції та голосування.
  • Додайте перед функцією міграції #[init(ignore_state)], щоб забезпечити, що стан не завантажується перед виконанням
  • Після завершення міграції видаліть функцію міграції, щоб уникнути повторних викликів
  • Нову структуру даних ініціалізовано під час міграції

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

!

INIT-5.48%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 6
  • Поділіться
Прокоментувати
0/400
GweiTooHighvip
· 1год тому
Оновлення потрібно проводити обережно
Переглянути оригіналвідповісти на0
NFTArchaeologistvip
· 19год тому
Оновлення - це твердий аргумент
Переглянути оригіналвідповісти на0
HappyToBeDumpedvip
· 07-29 02:04
Оновлення означає виправлення вразливостей
Переглянути оригіналвідповісти на0
NftBankruptcyClubvip
· 07-29 01:53
Говорити не багато, просто діяти
Переглянути оригіналвідповісти на0
NFTHoardervip
· 07-29 01:50
Дійсно, безпека найважливіша
Переглянути оригіналвідповісти на0
FundingMartyrvip
· 07-29 01:36
Я обираю боротися з тарифами
Переглянути оригіналвідповісти на0
  • Закріпити