Hợp đồng thông minh, như một loại chương trình, khó tránh khỏi có khuyết điểm. Ngay cả khi đã trải 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, chủ yếu để sửa lỗi và thêm tính năng mới. Bài viết này sẽ giới thiệu 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 thường dùng 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 thay đổi cấu trúc dữ liệu, có thể trực tiếp sử dụng near deploy để triển khai mã mới:
bash
gần triển khai
--accountId status_message.example.testnet \
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
Dữ liệu hợp đồng gốc có thể được đọc bình thường.
2. Sửa đổi cấu trúc dữ liệu hợp đồng
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 giải mã trạng thái thất bại. Lúc này cần sử dụng phương thức migrate để nâng cấp:
gỉ
#[private]
#[init(ignore_state)]
Self {
let old_state: OldStatusMessage = env::state_read().expect("failed");
Tự {
new_field: LookupMap::new(b"n".to_vec)((,
old_field: old_state.old_field,
}
}
Gọi phương thức migrate khi triển khai:
bash
gần triển khai
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "migrate"
--initArgs "{}"
--accountId status_message.example.testnet
Điều này có thể di chuyển trạng thái cũ sang hợp đồng mới.
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.
6 thích
Phần thưởng
6
3
Chia sẻ
Bình luận
0/400
PumpBeforeRug
· 16giờ trước
Phòng ngừa các lỗ hổng cơ bản còn chưa làm tốt, thì còn chơi gì với việc chạy nude.
Rust hợp đồng thông minh nâng cấp thực tiễn tốt nhất: Học từ trường hợp hợp đồng NEAR
Hướng dẫn nâng cấp hợp đồng thông minh Rust
Hợp đồng thông minh, như một loại chương trình, khó tránh khỏi có khuyết điểm. Ngay cả khi đã trải 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, chủ yếu để sửa lỗi và thêm tính năng mới. Bài viết này sẽ giới thiệu 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 thường dùng 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 thay đổi cấu trúc dữ liệu, có thể trực tiếp sử dụng near deploy để triển khai mã mới:
bash gần triển khai
--accountId status_message.example.testnet \ --wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
Dữ liệu hợp đồng gốc có thể được đọc bình thường.
2. Sửa đổi cấu trúc dữ liệu hợp đồng
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 giải mã trạng thái thất bại. Lúc này cần sử dụng phương thức migrate để nâng cấp:
gỉ #[private] #[init(ignore_state)] Self { let old_state: OldStatusMessage = env::state_read().expect("failed"); Tự { new_field: LookupMap::new(b"n".to_vec)((, old_field: old_state.old_field, } }
Gọi phương thức migrate khi triển khai:
bash
gần triển khai
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "migrate"
--initArgs "{}"
--accountId status_message.example.testnet
Điều này có thể di chuyển trạng thái cũ sang hợp đồng mới.
![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)
Đề xuất an toàn nâng cấp hợp đồng
Nâng cấp hợp lý có thể giúp hợp đồng duy trì tính an toàn và khả năng mở rộng, là một bước quan trọng trong phát triển hợp đồng thông minh.