Rustスマートコントラクトアップグレードテクニック:NEAR契約の安全な更新方法

robot
概要作成中

Rustスマートコントラクトアップグレードテクニック

スマートコントラクトはプログラムコードの一種であり、欠陥や脆弱性が存在することは避けられません。多くのテストや監査を経ても、セキュリティの問題が発生する可能性があります。一旦、契約の脆弱性が攻撃者に利用されると、ユーザーの資産損失などの深刻な結果を招く可能性があります。したがって、契約のアップグレードは脆弱性を修正し、新しい機能を追加するために非常に重要です。本記事では、Rustスマートコントラクトのアップグレード方法について紹介します。

!

NEAR契約アップグレードの一般的な方法

StatusMessageプロジェクトを例にとり、NEARコントラクトの一般的なアップグレード方法について紹介します:

さび #[near_bindgen] #[derive(BorshDeserialize、BorshSerialize)] pub struct ステータスメッセージ { レコード: LookupMap<string, string="">, }

StatusMessageのデフォルト実装を行います。 fn default() -> 自己 { セルフ { レコード: LookupMap::new(b'r'.to_vec()), } } }

#[near_bindgen] ステータスメッセージ{ pub fn set_status(&mut self, メッセージ: String) { account_id = env::signer_account_id(); self.records.insert(&account_id, &message); }

pub fn get_status( self, account_id: String) -> オプション<string> {
    self.records.get(&account_id)を返します。
}

}

合約データ構造は変更されていません

もし新しい関数を追加するだけで、データ構造の変更が関与しない場合は、near deployコマンドを使用して新しいコードを再デプロイすることができます。既存のデータは正常に読み取ることができます。

合約データ構造が変更されました

データ構造を変更した場合、直接再デプロイすると新旧データ構造が一致せず、データを正常に読み取ることができなくなります。この場合、Migrateメソッドを使用してアップグレードする必要があります:

  1. 新しいスマートコントラクトに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()), } }

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

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

これにより、古いデータを新しいデータ構造に移行できます。

!

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

  1. アクセス制御を実施し、開発者またはDAOのみがスマートコントラクトをアップグレードできるようにします。

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

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

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

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

上記の方法を通じて、Rustのスマートコントラクトのアップグレードを安全かつ効率的に完了できます。

! </string,>

原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • 7
  • 共有
コメント
0/400
CryptoNomicsvip
· 4時間前
*ため息* アップグレード可能性がセキュリティと等しくない理由を確率的マトリックスを使って説明させてください
原文表示返信0
HodlBelievervip
· 16時間前
契約のリスク係数がいくら低くても賭けてはいけない
原文表示返信0
SnapshotLaborervip
· 16時間前
またスマートコントラクトに巻き込まれた 財布の残高を静かに見た
原文表示返信0
MEV_Whisperervip
· 16時間前
契約のアップグレードはこんなもので、何がすごいのか。
原文表示返信0
GateUser-beba108dvip
· 16時間前
このアップグレードは誰でもできます!
原文表示返信0
MemeCuratorvip
· 16時間前
近すぎて契約書を書けない... 薅られるのが怖い
原文表示返信0
WalletDivorcervip
· 16時間前
犬のように損をした アップグレードでは私を救えない
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)