Смартконтракти як програми можуть мати недоліки. Навіть після великої кількості тестування та аудиту все ще можуть бути вразливості. Як тільки їх використовує зловмисник, це може призвести до втрати активів користувачів, що має серйозні наслідки. Тому можливість оновлення контрактів є вкрай необхідною, головним чином для виправлення вразливостей та додавання нових функцій. У цій статті буде розглянуто способи оновлення контрактів на 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 під час розгортання:
Баш
ближній розгортання
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "мігрувати"
--initArgs "{}"
--accountId статус_повідомлення.example.testnet
Це дозволить перенести старий стан до нового смартконтракту.
!
Рекомендації щодо безпеки оновлення смартконтрактів
Розумне оновлення може забезпечити безпеку та масштабованість контрактів, що є важливим етапом у розробці смартконтрактів.
!