Rustスマートコントラクトアップグレードのテクニック:イーサリアムからNEARへのベストプラクティス

robot
概要作成中

Rustスマートコントラクト育成日記(9):契約安全の契約アップグレード

スマートコントラクトはプログラムコードの一形態であり、欠陥や脆弱性が存在する可能性があります。十分なテストと監査を受けたコントラクトでも、発見されていない問題があるかもしれません。これらの潜在的な問題が悪用されると、ユーザーの資産の損失など深刻な結果を引き起こす可能性があります。したがって、コントラクトのアップグレード能力は、脆弱性の修正や新機能の追加に非常に重要です。本記事では、NEARプラットフォームにおけるRustコントラクトのアップグレード方法について紹介します。

1. 契約のアップグレードの必要性

スマートコントラクト本質的にはプログラムコードであり、避けがたい欠陥が存在する可能性があります。大量のテストや監査を経ても、脆弱性が残ることがあります。これらの脆弱性が攻撃者によって悪用されると、ユーザーの資産損失などの深刻な結果を引き起こす可能性があります。脆弱性を修正するには、しばしば契約のアップグレードを通じて実現する必要があります。さらに、新機能の追加も契約のアップグレードを必要とします。したがって、契約のアップグレード可能性は非常に重要です。

!

2. イーサリアムスマートコントラクトの一般的なアップグレード方法

イーサリアム上のスマートコントラクトは不変性を持ち、一度デプロイされると変更できません。この問題を解決するために、通常はプロキシコントラクト(Proxy Contract)の方式を採用します:

  • 代理コントラクトはデータを保存するために使用され、deleGatecallを使用してロジックコントラクトを呼び出します
  • ロジックコントラクトは具体的なビジネスロジックを含みます
  • アップグレード時には、新しいロジックコントラクトをデプロイし、プロキシコントラクトを更新して指し示す必要があります。

この方法では、元のデータを保持し、ロジック部分のみを更新できます。

!

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

以下にStatusMessageプロジェクトを例として、NEARスマートコントラクトのアップグレード方法を紹介します:

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

契約のロジックのみを変更し、データ構造の変更がない場合は、直接 near deploy コマンドを使用して新しいコードを再デプロイできます。既存のデータは保持されます。

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

契約のデータ構造を変更した場合、直接再デプロイすると新旧のデータ構造が一致せず、既存のデータを正常に読み取ることができなくなります。

3.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 "移行"
--initArgs "{}"
--accountId statusmessage.blocksec_upgrade.testnet

こうすることでデータ移行が完了し、新旧スマートコントラクトのデータ構造が不一致でも正常にアップグレードできます。

4. コントラクトアップグレードの安全性に関する考慮事項

契約のアップグレードには、以下のセキュリティ要因を考慮する必要があります:

  • アップグレード権限を厳格に制御し、開発者またはDAOのみがアップグレードを許可される
  • 推奨する合約のオーナーをDAOに設定し、提案と投票で管理すること
  • 移行機能の前に #[init(ignore_state)] を追加します。
  • マイグレーション後に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.
  • 報酬
  • 5
  • 共有
コメント
0/400
liquiditea_sippervip
· 07-13 07:37
そんなに強そうに聞こえるけど、やっぱり試すのが怖い。
原文表示返信0
NeverVoteOnDAOvip
· 07-13 07:37
アップグレードは信頼できますか?なんだかきれいに拭けない気がします。
原文表示返信0
BrokenDAOvip
· 07-13 07:24
権限はバックドアと同じで、安全性について話すことはできません。
原文表示返信0
LayerZeroHerovip
· 07-13 07:24
アップグレードが完了すると、もう神仙の管理は受けられません。
原文表示返信0
ser_ngmivip
· 07-13 07:09
rugコントラクトの天井
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)