Детальний опис методів оновлення смартконтрактів Rust
Смартконтракти як одна з форм програм, неминуче мають недоліки та вразливості. Навіть після численних тестів та аудитів, можуть виникати проблеми. Як тільки вразливість буде використана зловмисниками, це може призвести до серйозних наслідків, таких як втрата активів користувачів. Отже, здатність контракту до оновлення є вкрай важливою, у цій статті буде представлено способи оновлення контрактів на Rust.
Способи оновлення контрактів Ethereum
Смартконтракти на Ethereum мають незмінність, після розгортання їх неможливо безпосередньо змінити. Зазвичай для оновлення використовують такі способи:
Розгортання нового контракту, зміна адреси контракту в DApp. Недолік полягає в тому, що необхідно перенести стан даних старого контракту.
Архітектура, що розділяє дані та логіку. Зберігайте дані в смартконтрактах, а логіку реалізуйте в іншому контракті. Під час оновлення потрібно лише оновити логічний контракт.
Використання проксі-контрактів. Проксі-контракти зберігають дані та викликають логічний контракт через delegatecall, під час оновлення потрібно лише змінити адресу логічного контракту.
!
Спосіб оновлення контрактів NEAR
В якості прикладу проекту StatusMessage розглянемо методи оновлення NEAR смартконтрактів:
1. Структура даних контракту не була змінена
Якщо змінюється лише логіка контракту, без змін у структурі даних, можна безпосередньо використовувати команду near deploy для повторного розгортання нового коду. Існуючі дані залишаться.
2. Структура даних смартконтракту була змінена
Якщо змінити структуру даних, пряме повторне розгортання призведе до несумісності нової та старої структур даних, що ускладнить нормальне зчитування даних.
3. Використовуйте метод Migrate для оновлення
NEAR надає метод Migrate для допомоги в оновленні:
Додати метод migrate до нового смартконтракту
Виклик методу migrate під час розгортання для міграції даних
Після завершення міграції можна нормально використовувати нові функції смартконтрактів.
!
Безпека оновлення смартконтрактів
Контроль доступу - функція оновлення повинна бути функцією only owner
Рекомендується встановити owner на DAO, щоб уникнути ризиків централізації
Використовуйте #[init(ignore_state)], щоб забезпечити, що перед виконанням міграції стан не завантажується.
Після міграції видалити функцію міграції, щоб уникнути повторних викликів
Додана структура даних ініціалізується під час міграції
Завдяки розумному проектуванню плану оновлення можна досягти можливості оновлення контракту при забезпеченні безпеки, що підвищує довгострокову підтримуваність проєкту.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
12 лайків
Нагородити
12
6
Поділіться
Прокоментувати
0/400
FlatlineTrader
· 5год тому
Вразливість — це гаманець...
Переглянути оригіналвідповісти на0
Deconstructionist
· 11год тому
Рекомендується додати гаряче перезавантаження
Переглянути оригіналвідповісти на0
rekt_but_not_broke
· 11год тому
Смартконтракти виявляється такі підступні!
Переглянути оригіналвідповісти на0
LiquidityWizard
· 12год тому
теоретично кажучи, патерни проксі - це просто підсолоджені мутації стану з 73.4% додатковими витратами газу... смх
Детальний опис оновлення смартконтрактів Rust: найкращі практики від Ethereum до NEAR
Детальний опис методів оновлення смартконтрактів Rust
Смартконтракти як одна з форм програм, неминуче мають недоліки та вразливості. Навіть після численних тестів та аудитів, можуть виникати проблеми. Як тільки вразливість буде використана зловмисниками, це може призвести до серйозних наслідків, таких як втрата активів користувачів. Отже, здатність контракту до оновлення є вкрай важливою, у цій статті буде представлено способи оновлення контрактів на Rust.
Способи оновлення контрактів Ethereum
Смартконтракти на Ethereum мають незмінність, після розгортання їх неможливо безпосередньо змінити. Зазвичай для оновлення використовують такі способи:
Розгортання нового контракту, зміна адреси контракту в DApp. Недолік полягає в тому, що необхідно перенести стан даних старого контракту.
Архітектура, що розділяє дані та логіку. Зберігайте дані в смартконтрактах, а логіку реалізуйте в іншому контракті. Під час оновлення потрібно лише оновити логічний контракт.
Використання проксі-контрактів. Проксі-контракти зберігають дані та викликають логічний контракт через delegatecall, під час оновлення потрібно лише змінити адресу логічного контракту.
!
Спосіб оновлення контрактів NEAR
В якості прикладу проекту StatusMessage розглянемо методи оновлення NEAR смартконтрактів:
1. Структура даних контракту не була змінена
Якщо змінюється лише логіка контракту, без змін у структурі даних, можна безпосередньо використовувати команду near deploy для повторного розгортання нового коду. Існуючі дані залишаться.
2. Структура даних смартконтракту була змінена
Якщо змінити структуру даних, пряме повторне розгортання призведе до несумісності нової та старої структур даних, що ускладнить нормальне зчитування даних.
3. Використовуйте метод Migrate для оновлення
NEAR надає метод Migrate для допомоги в оновленні:
!
Безпека оновлення смартконтрактів
Завдяки розумному проектуванню плану оновлення можна досягти можливості оновлення контракту при забезпеченні безпеки, що підвищує довгострокову підтримуваність проєкту.
!