Смарт-контракты, как вид программного кода, неизбежно имеют недостатки и уязвимости. Даже после большого количества тестов и аудитов могут возникнуть проблемы с безопасностью. Если уязвимость контракта будет использована злоумышленниками, это может привести к серьезным последствиям, таким как потеря активов пользователей. Поэтому обновление контракта имеет важное значение для исправления уязвимостей и добавления новых функций. В данной статье будут представлены методы обновления смарт-контрактов на Rust.
!
Часто используемые методы обновления контрактов NEAR
На примере проекта StatusMessage рассмотрим распространенные методы обновления смарт-контрактов NEAR:
Если просто добавить новые функции, не внося изменений в структуру данных, можно напрямую использовать команду near deploy для повторного развертывания нового кода. Существующие данные можно будет нормально считывать.
Структура данных смарт-контракта была изменена
Если изменена структура данных, то простое повторное развертывание приведет к несовпадению старой и новой структуры данных, что сделает невозможным нормальное чтение данных. В этом случае необходимо использовать метод Migrate для обновления:
near развертывание
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction 'migrate'
--initArgs '{}'
--accountId статуссообщение.example.testnet
Таким образом, старые данные могут быть перенесены в новую структуру данных.
!
Безопасные аспекты обновления смарт-контрактов
Реализуйте контроль доступа, разрешая обновление смарт-контрактов только разработчикам или DAO.
Рекомендуется установить владельца контракта как DAO, чтобы совместно управлять через предложения и голосование.
Перед функцией migrate добавьте #[init(ignore_state)].
После завершения миграции удалите функцию migrate, чтобы убедиться, что она вызывается только один раз.
Новая структура данных инициализируется при миграции.
С помощью вышеуказанных методов можно безопасно и эффективно выполнить обновление смарт-контрактов на Rust.
! </string,>
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
10 Лайков
Награда
10
7
Поделиться
комментарий
0/400
CryptoNomics
· 8ч назад
*вздыхает* позвольте объяснить с помощью стохастических вероятностных матриц, почему обновляемость != безопасность
Посмотреть ОригиналОтветить0
HodlBeliever
· 20ч назад
Независимо от того, насколько низкий коэффициент риска контракта, не стоит рисковать.
Посмотреть ОригиналОтветить0
SnapshotLaborer
· 20ч назад
Снова накручиваю смарт-контракты, тихо смотрю на баланс Кошелька
Посмотреть ОригиналОтветить0
MEV_Whisperer
· 20ч назад
Вот так и происходит обновление контракта, ничего особенного.
Посмотреть ОригиналОтветить0
GateUser-beba108d
· 20ч назад
Такое обновление может сделать каждый!
Посмотреть ОригиналОтветить0
MemeCurator
· 20ч назад
Слишком близко, даже не осмеливаюсь подписывать контракт... боюсь быть обманутым.
Посмотреть ОригиналОтветить0
WalletDivorcer
· 20ч назад
Я в убытке как собака, даже обновление не поможет мне вернуть это.
Советы по обновлению смарт-контрактов на Rust: безопасные методы обновления контрактов NEAR
Советы по обновлению смарт-контрактов на Rust
Смарт-контракты, как вид программного кода, неизбежно имеют недостатки и уязвимости. Даже после большого количества тестов и аудитов могут возникнуть проблемы с безопасностью. Если уязвимость контракта будет использована злоумышленниками, это может привести к серьезным последствиям, таким как потеря активов пользователей. Поэтому обновление контракта имеет важное значение для исправления уязвимостей и добавления новых функций. В данной статье будут представлены методы обновления смарт-контрактов на Rust.
!
Часто используемые методы обновления контрактов NEAR
На примере проекта StatusMessage рассмотрим распространенные методы обновления смарт-контрактов NEAR:
ржавчина #[near_bindgen] #[derive(BorshDeserialize, BorshSerialize)] pub struct StatusMessage { записи: LookupMap<string, string="">, }
impl Default для StatusMessage { fn default() -> Self { Самостоятельно { записи: LookupMap::new(b'r'.to_vec()), } } }
#[near_bindgen] impl StatusMessage { pub fn set_status(&mut self, message: String) { let account_id = env::signer_account_id(); self.records.insert(&account_id, &message); }
}
Структура данных контракта не изменена
Если просто добавить новые функции, не внося изменений в структуру данных, можно напрямую использовать команду near deploy для повторного развертывания нового кода. Существующие данные можно будет нормально считывать.
Структура данных смарт-контракта была изменена
Если изменена структура данных, то простое повторное развертывание приведет к несовпадению старой и новой структуры данных, что сделает невозможным нормальное чтение данных. В этом случае необходимо использовать метод 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()), } }
near развертывание
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction 'migrate'
--initArgs '{}'
--accountId статуссообщение.example.testnet
Таким образом, старые данные могут быть перенесены в новую структуру данных.
!
Безопасные аспекты обновления смарт-контрактов
Реализуйте контроль доступа, разрешая обновление смарт-контрактов только разработчикам или DAO.
Рекомендуется установить владельца контракта как DAO, чтобы совместно управлять через предложения и голосование.
Перед функцией migrate добавьте #[init(ignore_state)].
После завершения миграции удалите функцию migrate, чтобы убедиться, что она вызывается только один раз.
Новая структура данных инициализируется при миграции.
С помощью вышеуказанных методов можно безопасно и эффективно выполнить обновление смарт-контрактов на Rust.
! </string,>