Смартконтракти як форма програмного коду неминуче можуть містити недоліки та вразливості. Навіть після повного тестування та аудиту контрактів можуть залишатися невиявлені проблеми. Як тільки ці потенційні проблеми будуть використані, це може призвести до серйозних наслідків, таких як втрата активів користувачів. Тому можливість оновлення контрактів є надзвичайно важливою для виправлення вразливостей та додавання нових функцій. У цій статті буде представлене оновлення контрактів Rust на платформі NEAR.
1. Необхідність оновлення смартконтрактів
Смартконтракти за сутністю є програмним кодом, що неминуче містить недоліки. Навіть після великої кількості тестувань та аудиту все ще можуть бути вразливості. Якщо ці вразливості будуть використані зловмисниками, це може призвести до серйозних наслідків, таких як втрата активів користувачів. Виправлення вразливостей зазвичай вимагає оновлення контракту. Крім того, додавання нових функцій також потребує оновлення контракту. Тому можливість оновлення контракту є вкрай необхідною.
!
2. Загальні способи оновлення смартконтрактів Ethereum
Смартконтракти на Ethereum мають незмінність, і після розгортання їх неможливо змінити. Для вирішення цієї проблеми зазвичай використовують проксі-контракти (Proxy Contract).
Договір-агент використовується для зберігання даних та виклику логічного контракту за допомогою deleGatecall
Логічні контракти містять конкретну бізнес-логіку
Під час оновлення потрібно лише розгорнути новий логічний смартконтракт і оновити адресу проксі-контракту.
Цей спосіб дозволяє зберегти наявні дані, оновлюючи лише логічну частину.
!
3. Способи оновлення контрактів NEAR
Нижче на прикладі проекту StatusMessage описується метод оновлення контрактів NEAR:
3.1 Структура даних смартконтракту не змінена
Якщо змінюється лише логіка контракту, без зміни структури даних, можна безпосередньо використовувати команду near deploy для повторного розгортання нового коду. Існуючі дані будуть збережені.
3.2 Структура даних смартконтрактів була змінена
Якщо змінити структуру даних контракту, безпосереднє повторне розгортання призведе до невідповідності між новою та старою структурами даних, і неможливо буде нормально зчитувати існуючі дані.
3.3 Використання методу Migrate для оновлення
NEAR надає метод Migrate для оновлення контрактів. Додайте функцію 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.
10 лайків
Нагородити
10
5
Поділіться
Прокоментувати
0/400
liquiditea_sipper
· 20год тому
Звучить так сильно, але я все ще не наважуюсь спробувати.
Переглянути оригіналвідповісти на0
NeverVoteOnDAO
· 20год тому
Чи варто оновлювати? Постійно відчуваю, що не можу добре очистити.
Переглянути оригіналвідповісти на0
BrokenDAO
· 20год тому
Права дорівнюють задній двері, про яку безпеку можна говорити?
Переглянути оригіналвідповісти на0
LayerZeroHero
· 20год тому
Як тільки оновлення буде завершено, ніхто не зможе цього контролювати.
Rust смартконтракти оновлення поради: найкращі практики від Ethereum до NEAR
Rust смартконтракти养成日记(9):合约安全之合约升级
Смартконтракти як форма програмного коду неминуче можуть містити недоліки та вразливості. Навіть після повного тестування та аудиту контрактів можуть залишатися невиявлені проблеми. Як тільки ці потенційні проблеми будуть використані, це може призвести до серйозних наслідків, таких як втрата активів користувачів. Тому можливість оновлення контрактів є надзвичайно важливою для виправлення вразливостей та додавання нових функцій. У цій статті буде представлене оновлення контрактів Rust на платформі NEAR.
1. Необхідність оновлення смартконтрактів
Смартконтракти за сутністю є програмним кодом, що неминуче містить недоліки. Навіть після великої кількості тестувань та аудиту все ще можуть бути вразливості. Якщо ці вразливості будуть використані зловмисниками, це може призвести до серйозних наслідків, таких як втрата активів користувачів. Виправлення вразливостей зазвичай вимагає оновлення контракту. Крім того, додавання нових функцій також потребує оновлення контракту. Тому можливість оновлення контракту є вкрай необхідною.
!
2. Загальні способи оновлення смартконтрактів Ethereum
Смартконтракти на Ethereum мають незмінність, і після розгортання їх неможливо змінити. Для вирішення цієї проблеми зазвичай використовують проксі-контракти (Proxy Contract).
Цей спосіб дозволяє зберегти наявні дані, оновлюючи лише логічну частину.
!
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 під час розгортання:
незабаром розгорнути
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "мігрувати"
--initArgs "{}"
--accountId статусповідомлення.blocksec_upgrade.testnet
Таким чином можна завершити міграцію даних, нова та стара структура даних контрактів можуть нормально оновлюватись.
4. Безпекові аспекти оновлення смартконтрактів
Оновлення контракту потрібно враховувати наступні фактори безпеки:
Цими заходами можна забезпечити безпечність оновлення контракту та знизити ризики під час процесу оновлення.
!