Rustスマートコントラクトアップグレード完全ガイド:NEARから安全性の考慮へ

Rustスマートコントラクトアップグレード実践

スマートコントラクトは本質的にプログラムであり、避けられない欠陥が存在します。大量のテストと監査を経ても、まだ脆弱性がある可能性があります。契約の脆弱性が攻撃されると、ユーザーの資産が損失する可能性があり、その結果は深刻です。脆弱性を修正し、新しい機能を追加するには、契約のアップグレードが必要です。したがって、契約のアップグレード可能性は非常に重要です。本記事では、Rust契約のアップグレード方法について紹介します。

!

NEARスマートコントラクトアップグレード方法

StatusMessageプロジェクトを例に挙げて、NEARのスマートコントラクトの一般的なアップグレード方法を紹介します。

1. 合約データ構造は未変更です。

契約のロジックのみを修正し、データ構造の変更がない場合は、near deployを使用して新しいコードを再デプロイできます。元の契約のデータは正常に読み取ることができます。

2. コントラクトデータ構造が変更されました

契約のデータ構造を変更した場合、直接再展開すると新旧のデータ構造が一致せず、既存のデータを読み取ることができません。

3. 使用Migrateアップグレードスマートコントラクト

NEARは契約のアップグレードを支援するMigrateメソッドを提供しています。新しい契約にmigrateメソッドを追加します:

さび #[private] #[init(ignore_state)] pub fn migrate() -> セルフ { old_stateさせてください: OldStatusMessage = env::state_read().expect('failed'); セルフ { タグライン: old_state.records, bios: LookupMap::new(b'b'.to_vec()), } }

再デプロイ時にmigrateメソッドを呼び出す:

デプロイする近く \ --wasmファイルターゲット/wasm32-unknown-unknown/release/status_message.wasm
--initFunction 'migrate'
--initArgs '{}'
--accountId statusmessage.blocksec_upgrade.testnet

これにより、旧スマートコントラクトのデータを新しいスマートコントラクトに正常に移行できます。

!

契約のアップグレードに関する安全性の考慮

  1. アップグレード関数はonly owner関数であるべきで、ownerのみが呼び出せることを保証します。

  2. コントラクトのオーナーをDAOに設定し、提案と投票を通じて共同管理を推奨します。

  3. 移行機能の前に #[init(ignore_state)] を追加します

  4. 移行が完了したら、移行関数を削除します。

  5. 新しいデータ構造は移行時に初期化を完了します

契約のアップグレードは契約の安全を確保するための重要な手段であり、開発者は慎重に取り扱い、アップグレードプロセスの安全性を確保する必要があります。

!

INIT-10.66%
原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • 2
  • リポスト
  • 共有
コメント
0/400
SandwichVictimvip
· 08-13 22:24
バグがこんなに多いと、見ていて不安になる。
原文表示返信0
BlockImpostervip
· 08-13 22:24
アップグレードしてもしなくても、穴から出られないね〜
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)