Rustスマートコントラクトアップグレードガイド:NEARプラットフォームのセキュリティ更新方法の詳細

robot
概要作成中

Rustスマートコントラクトアップグレードガイド

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

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

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

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

もし契約のロジックのみを変更し、データ構造の変更を伴わない場合は、near deployコマンドを直接使用して新しいコードを再デプロイできます。たとえば、元の契約に基づいて新しい関数を追加します。

さび #[near_bindgen] ステータスメッセージ{ pub fn set_get_status(&mut self, message: String) -> Option { account_id = env::signer_account_id(); self.records.insert(&account_id, &message); self.records.get(&account_id)を返します。 } }

コンパイル後は、near deployを使用して再デプロイするだけです。元のスマートコントラクト内のデータは引き続き正常に読み取ることができます。

!

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

契約のデータ構造を変更した場合、直接再デプロイすると状態の逆シリアル化に失敗します。例えば、私たちは契約の構造を次のように変更します:

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

この場合、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

これで契約を正常にアップグレードし、古いデータを移行できます。

!

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

  1. 権限管理: アップグレード関数はonly owner関数として設定し、ownerのみが呼び出せるようにする。

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

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

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

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

契約のアップグレードは複雑なプロセスであり、慎重に扱う必要があります。合理的な設計と厳格なテストを通じて、安全で信頼性のある契約のアップグレードを実現できます。

! </string,></string,>

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