Смартконтракти за своєю суттю є програмами, тому неминуче можуть мати дефекти. Навіть після численних тестувань і аудиту все ще можуть існувати вразливості. Як тільки їх використають зловмисники, це може призвести до втрати активів користувачів, що має серйозні наслідки. Тому можливість оновлення контрактів є вкрай необхідною, у цій статті буде представлено спосіб оновлення контрактів на Rust.
1. Необхідність оновлення смартконтрактів
смартконтракти як програми, неминуче мають недоліки. Виправлення вразливостей і додавання нових функцій потребують оновлення контрактів.
Ефірні смартконтракти мають незмінність, після розгортання їх не можна змінити. Рішенням є розгортання нового контракту, але при цьому виникають виклики, такі як зміна адреси та міграція стану. Зазвичай використовується архітектура проксі-контрактів, що передбачає розділення даних і логіки, що дозволяє оновлювати лише логічний контракт, не турбуючись про міграцію стану.
!
3. Метод оновлення контрактів NEAR
Взяти за приклад проект StatusMessage, щоб представити методи оновлення контрактів NEAR:
3.1 Структура даних смартконтракту не змінена
Якщо лише змінити логіку контракту, не змінюючи структуру даних, ви можете безпосередньо використовувати near deploy для повторного розгортання нового коду. Існуючі дані все ще можуть бути нормально прочитані.
3.2 Структура даних смартконтракту була змінена
Якщо змінити структуру даних, то пряме повторне розгортання призведе до невідповідності нової та старої структури даних, що унеможливить читання наявних даних.
!
3.3 Використання методу Migrate для оновлення
NEAR надає метод Migrate для допомоги в оновленні контрактів. Додайте метод migrate до нового контракту:
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
10 лайків
Нагородити
10
4
Поділіться
Прокоментувати
0/400
SandwichTrader
· 19год тому
Продовжуєш списувати домашку? Знову змінили контракт і почали грати.
Переглянути оригіналвідповісти на0
BoredRiceBall
· 19год тому
Надійно, спочатку протестуйте, а потім використовуйте
Оновлення смартконтрактів Rust: забезпечення безпеки та масштабованості
Rust смартконтракти养成日记(9): 合约升级
Смартконтракти за своєю суттю є програмами, тому неминуче можуть мати дефекти. Навіть після численних тестувань і аудиту все ще можуть існувати вразливості. Як тільки їх використають зловмисники, це може призвести до втрати активів користувачів, що має серйозні наслідки. Тому можливість оновлення контрактів є вкрай необхідною, у цій статті буде представлено спосіб оновлення контрактів на Rust.
1. Необхідність оновлення смартконтрактів
смартконтракти як програми, неминуче мають недоліки. Виправлення вразливостей і додавання нових функцій потребують оновлення контрактів.
2. Звичні способи оновлення смартконтрактів Solidity
Ефірні смартконтракти мають незмінність, після розгортання їх не можна змінити. Рішенням є розгортання нового контракту, але при цьому виникають виклики, такі як зміна адреси та міграція стану. Зазвичай використовується архітектура проксі-контрактів, що передбачає розділення даних і логіки, що дозволяє оновлювати лише логічний контракт, не турбуючись про міграцію стану.
!
3. Метод оновлення контрактів NEAR
Взяти за приклад проект StatusMessage, щоб представити методи оновлення контрактів NEAR:
3.1 Структура даних смартконтракту не змінена
Якщо лише змінити логіку контракту, не змінюючи структуру даних, ви можете безпосередньо використовувати near deploy для повторного розгортання нового коду. Існуючі дані все ще можуть бути нормально прочитані.
3.2 Структура даних смартконтракту була змінена
Якщо змінити структуру даних, то пряме повторне розгортання призведе до невідповідності нової та старої структури даних, що унеможливить читання наявних даних.
!
3.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 під час розгортання.
4. Безпекові міркування щодо оновлення смартконтрактів
Оновлення смартконтрактів є важливим засобом забезпечення безпеки контрактів та ітерації функцій, і потребує обережного проєктування та впровадження.
!