Hướng dẫn toàn diện nâng cấp hợp đồng thông minh Rust: Từ NEAR đến các yếu tố an toàn

Thực hành nâng cấp hợp đồng thông minh Rust

Hợp đồng thông minh bản chất là chương trình, không thể tránh khỏi việc tồn tại lỗi. Ngay cả khi đã trải qua nhiều kiểm tra và kiểm toán, vẫn có thể có lỗ hổng. Việc lỗ hổng hợp đồng bị tấn công có thể gây ra tổn thất tài sản cho người dùng, hậu quả rất nghiêm trọng. Việc sửa lỗi và thêm tính năng mới đều cần phải nâng cấp hợp đồng. Do đó, khả năng nâng cấp của hợp đồng là rất cần thiết. Bài viết này sẽ giới thiệu về cách nâng cấp hợp đồng Rust.

Phương pháp nâng cấp hợp đồng NEAR

Lấy dự án StatusMessage làm ví dụ, giới thiệu các phương pháp nâng cấp phổ biến của hợp đồng NEAR.

1. Cấu trúc dữ liệu hợp đồng chưa được sửa đổi

Nếu chỉ sửa đổi logic hợp đồng, không liên quan đến việc thay đổi cấu trúc dữ liệu, có thể sử dụng near deploy để triển khai mã mới. Dữ liệu trong hợp đồng gốc có thể được đọc bình thường.

2. Cấu trúc dữ liệu hợp đồng bị thay đổi

Nếu thay đổi cấu trúc dữ liệu của hợp đồng, việc triển khai lại trực tiếp sẽ dẫn đến việc không khớp cấu trúc dữ liệu cũ và mới, không thể đọc dữ liệu ban đầu.

3. Sử dụng Migrate nâng cấp hợp đồng

NEAR cung cấp phương pháp Migrate để giúp nâng cấp hợp đồng. Thêm phương pháp migrate vào hợp đồng mới:

gỉ #[private] #[init(ignore_state)] Self { let old_state: OldStatusMessage = env::state_read().expect('failed'); Tự { taglines: old_state.records, bios: LookupMap::new(b'b'.to_vec)((, } }

Gọi phương thức migrate khi triển khai lại:

gần triển khai
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction 'migrate'
--initArgs '{}' \ --accountId statusmessage.blocksec_upgrade.testnet

Điều này có thể thành công trong việc di chuyển dữ liệu hợp đồng cũ sang hợp đồng mới.

![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)

Các yếu tố an ninh trong việc nâng cấp hợp đồng

  1. Hàm nâng cấp nên là hàm chỉ dành cho chủ sở hữu, đảm bảo chỉ có thể được gọi bởi chủ sở hữu.

  2. Khuyến nghị đặt owner của hợp đồng là DAO, quản lý chung thông qua đề xuất và bỏ phiếu.

  3. Thêm #[init(ignore_state)] trước hàm di chuyển

  4. Sau khi di chuyển hoàn tất, xóa hàm di chuyển.

  5. Cấu trúc dữ liệu mới được khởi tạo khi di chuyển

Nâng cấp hợp đồng là một phương tiện quan trọng để đảm bảo an toàn cho hợp đồng, các nhà phát triển cần phải thận trọng và đảm bảo tính an toàn trong quá trình nâng cấp.

INIT-5.8%
Xem bản gốc
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
  • Phần thưởng
  • 2
  • Đăng lại
  • Chia sẻ
Bình luận
0/400
SandwichVictimvip
· 08-13 22:24
Lỗ hổng nhiều như vậy, nhìn mà hoảng quá.
Xem bản gốcTrả lời0
BlockImpostervip
· 08-13 22:24
Nâng cấp hay không cũng không ra khỏi cái lỗ được~
Xem bản gốcTrả lời0
  • Ghim
Giao dịch tiền điện tử mọi lúc mọi nơi
qrCode
Quét để tải xuống ứng dụng Gate
Cộng đồng
Tiếng Việt
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)