Rustスマートコントラクトアップグレードガイド:NEARプラットフォームセキュリティ移行実践

robot
概要作成中

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. アップグレード関数は権限管理を行う必要があり、通常は開発者またはDAOのみが呼び出すことができます。

  2. 契約のオーナーをDAOに設定し、提案と投票を通じて共同管理することをお勧めします。

  3. マイグレーション関数の前に #[init(ignore_state)] を追加し、実行前に状態をロードしないようにします。

  4. 移行が完了したら、移行関数を削除し、1回だけ呼び出されることを確認します。

  5. 新たに追加されたデータ構造は、移行時に初期化を完了します。

合理なアップグレードメカニズムは、安全を保証する前提で、スマートコントラクトに柔軟性と保守性を提供できます。

!

INIT-1.96%
原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • 5
  • 共有
コメント
0/400
DAOTruantvip
· 2時間前
データを移行するかどうかは気分次第だね
原文表示返信0
0xSherlockvip
· 07-25 08:10
見るだけで頭が痛い、勉強ができない。
原文表示返信0
MEVHunterLuckyvip
· 07-25 08:10
正直に言うと、コードが全然入っていないので、どうやって学べばいいのか。
原文表示返信0
blocksnarkvip
· 07-25 08:10
NEARマスターが授業をしに来ました
原文表示返信0
rugpull_survivorvip
· 07-25 08:00
近くの安定した音をよく聞いている
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)