Nhật ký phát triển hợp đồng thông minh Rust (9): Nâng cấp hợp đồng
Hợp đồng thông minh bản chất là chương trình, khó tránh khỏi sẽ tồn tại khuyết điểm. Ngay cả khi đã qua nhiều thử nghiệm và kiểm toán, vẫn có thể tồn tại lỗ hổng. Một khi bị kẻ tấn công lợi dụng, có thể gây ra tổn thất tài sản của người dùng, hậu quả rất nghiêm trọ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.
1. Sự cần thiết của việc nâng cấp hợp đồng
Hợp đồng thông minh như một chương trình, không thể tránh khỏi việc tồn tại các lỗi. Việc sửa lỗi và thêm tính năng mới đều cần được thực hiện thông qua việc nâng cấp hợp đồng.
2. Các phương pháp nâng cấp hợp đồng Solidity phổ biến
Hợp đồng thông minh Ethereum có tính không thể thay đổi, không thể sửa đổi sau khi triển khai. Giải pháp là triển khai hợp đồng mới, nhưng sẽ phải đối mặt với các thách thức như thay đổi địa chỉ và di chuyển trạng thái. Thông thường, kiến trúc hợp đồng đại lý được sử dụng, tách biệt dữ liệu và logic, chỉ nâng cấp hợp đồng logic mà không cần lo lắng về việc di chuyển trạng thái.
3. 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 phương pháp nâng cấp hợp đồng NEAR:
3.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 mà không liên quan đến 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 nguyên bản vẫn có thể được đọc bình thường.
3.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, việc triển khai lại sẽ dẫn đến sự không tương thích giữa cấu trúc dữ liệu cũ và mới, không thể đọc được dữ liệu ban đầu.
3.3 Sử dụng phương pháp Migrate để nâng cấp
NEAR cung cấp phương thức Migrate để giúp nâng cấp hợp đồng. Thêm phương thức migrate vào hợp đồng mới:
gỉ
#[private]
#[init(ignore_state)]
Self {
let old_state: OldStatusMessage = env::state_read().expect('thất bại');
Tự {
taglines: old_state.records,
bios: LookupMap::new(b'b'.to_vec)((,
}
}
Gọi phương thức migrate khi triển khai để hoàn tất việc di chuyển dữ liệu.
4. Các yếu tố an toàn khi nâng cấp hợp đồng
Nâng cấp quyền kiểm soát, thường chỉ có thể được nâng cấp bởi nhà phát triển hoặc DAO
Khuyến nghị đặt owner hợp đồng là DAO, quản lý thông qua đề xuất và bỏ phiếu
Thêm #[init)ignore_state)] trước hàm di chuyển
Xóa hàm di chuyển sau khi di chuyển hoàn tất
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à phương pháp quan trọng để đảm bảo an toàn và cập nhật chức năng của hợp đồng, cần được thiết kế và thực hiện một cách cẩn thận.
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.
10 thích
Phần thưởng
10
4
Chia sẻ
Bình luận
0/400
SandwichTrader
· 19giờ trước
Tiếp tục sao chép bài tập? Lại thay hợp đồng và bắt đầu rồi.
Rust hợp đồng thông minh nâng cấp: đảm bảo an toàn và khả năng mở rộng
Nhật ký phát triển hợp đồng thông minh Rust (9): Nâng cấp hợp đồng
Hợp đồng thông minh bản chất là chương trình, khó tránh khỏi sẽ tồn tại khuyết điểm. Ngay cả khi đã qua nhiều thử nghiệm và kiểm toán, vẫn có thể tồn tại lỗ hổng. Một khi bị kẻ tấn công lợi dụng, có thể gây ra tổn thất tài sản của người dùng, hậu quả rất nghiêm trọ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.
1. Sự cần thiết của việc nâng cấp hợp đồng
Hợp đồng thông minh như một chương trình, không thể tránh khỏi việc tồn tại các lỗi. Việc sửa lỗi và thêm tính năng mới đều cần được thực hiện thông qua việc nâng cấp hợp đồng.
2. Các phương pháp nâng cấp hợp đồng Solidity phổ biến
Hợp đồng thông minh Ethereum có tính không thể thay đổi, không thể sửa đổi sau khi triển khai. Giải pháp là triển khai hợp đồng mới, nhưng sẽ phải đối mặt với các thách thức như thay đổi địa chỉ và di chuyển trạng thái. Thông thường, kiến trúc hợp đồng đại lý được sử dụng, tách biệt dữ liệu và logic, chỉ nâng cấp hợp đồng logic mà không cần lo lắng về việc di chuyển trạng thái.
3. 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 phương pháp nâng cấp hợp đồng NEAR:
3.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 mà không liên quan đến 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 nguyên bản vẫn có thể được đọc bình thường.
3.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, việc triển khai lại sẽ dẫn đến sự không tương thích giữa cấu trúc dữ liệu cũ và mới, không thể đọc được dữ liệu ban đầu.
3.3 Sử dụng phương pháp Migrate để nâng cấp
NEAR cung cấp phương thức Migrate để giúp nâng cấp hợp đồng. Thêm phương thức migrate vào hợp đồng mới:
gỉ #[private] #[init(ignore_state)] Self { let old_state: OldStatusMessage = env::state_read().expect('thất bại'); Tự { taglines: old_state.records, bios: LookupMap::new(b'b'.to_vec)((, } }
Gọi phương thức migrate khi triển khai để hoàn tất việc di chuyển dữ liệu.
4. Các yếu tố an toàn khi nâng cấp hợp đồng
Nâng cấp hợp đồng là phương pháp quan trọng để đảm bảo an toàn và cập nhật chức năng của hợp đồng, cần được thiết kế và thực hiện một cách cẩn thận.