Sui.

Bài viết

Chia sẻ kiến thức của bạn.

SuiLover.
Jul 30, 2025
Hỏi đáp Chuyên Gia

Làm cách nào để nâng cấp trái phép gói Move?

Tôi đang cố gắng hiểu khía cạnh này của Mạng Sui bởi vì tôi đang xây dựng, gỡ lỗi hoặc triển khai thứ gì đó chạm vào khu vực này. Tôi muốn giải thích chi tiết về cách cơ chế hoặc tính năng này hoạt động, cùng với cách sử dụng CLI có liên quan, cấu trúc mã di chuyển hoặc các khái niệm kiến trúc. Mục tiêu của tôi là đạt được đủ sự rõ ràng để áp dụng kiến thức này vào một dự án thực tế — cho dù đó là hợp đồng thông minh tùy chỉnh, hệ thống NFT, tích hợp ví hay công cụ DeFi. Mạng Sui có những tính năng độc đáo so với chuỗi EVM, vì vậy tôi đặc biệt quan tâm đến điều gì khiến nó khác biệt và điều đó ảnh hưởng như thế nào đến các thực tiễn phát triển tốt nhất. Sẽ rất hữu ích nếu có mã mẫu, ví dụ dòng lệnh hoặc các lỗi điển hình để theo dõi, đặc biệt là khi sử dụng Sui CLI, SDK hoặc triển khai trên localnet/testnet. Cuối cùng, tôi muốn tránh những sai lầm phổ biến, tuân theo các nguyên tắc bảo mật tốt nhất và đảm bảo rằng chức năng tôi đang làm việc hoạt động như mong đợi trong các điều kiện thực tế.

  • Sui
  • Transaction Processing
  • Move
4
14
Chia sẻ
Bình luận
.

Câu trả lời

14
BigSneh.
Jul 30 2025, 12:28

Để ngăn chặn các nâng cấp trái phép của gói Move trên Sui, cơ chế chính là đối tượng upgrade_cap. Đối tượng này hoạt động như một khả năng trên chuỗi cấp quyền độc quyền để nâng cấp gói đã triển khai. Nếu không sở hữu upgrade_cap, không ai có thể nâng cấp gói, do đó bảo vệ nó khỏi những thay đổi trái phép.

Khi bạn xuất bản một gói bằng cách sử dụng Sui CLI:

trên máy khách xuất bản --path. /my_package --gas-budget 10000

Hệ thống tạo một đối tượng upgrade_cap và trả về ID đối tượng của nó. Đối tượng này phải được bao gồm trong bất kỳ giao dịch nâng cấp nào, như sau:

nâng cấp máy khách sui --package. <upgrade_cap_object_id>/new_package --nâng cấp-cap --gas-budget 10000

Để bảo mật gói hàng của bạn:

  1. Bảo vệ upgrade_cap: Lưu trữ an toàn trong ví phần cứng hoặc ví multisig để đảm bảo chỉ các thực thể được ủy quyền mới có thể ký các giao dịch nâng cấp.

  2. Sử dụng ví multisig để nâng cấp quyền: Bọc upgrade_cap bên trong đối tượng ví multisig. Điều này yêu cầu nhiều chữ ký trước khi giao dịch nâng cấp được chấp nhận, thêm một lớp bảo mật.

  3. Thực hiện các biện pháp kiểm soát quản trị ngoài chuỗi: Phối hợp nâng cấp với các quy trình phê duyệt ngoài chuỗi để tránh các nâng cấp giả mạo.

  4. Không chia sẻ upgrade_cap với các bên trái phép hoặc để lộ nó trong môi trường không an toàn.

  5. Sử dụng kiểm soát truy cập dành riêng cho môi trường: Ví dụ: hạn chế hoạt động nâng cấp cho các môi trường triển khai cụ thể hoặc danh sách trắng IP trong cơ sở hạ tầng hoạt động của bạn.

  6. Kiểm toán các giao dịch nâng cấp: Giám sát blockchain để tìm bất kỳ cuộc gọi nâng cấp trái phép hoặc bất ngờ nào để phản ứng kịp thời.

Nếu bạn mất quyền kiểm soát upgrade_cap, gói của bạn có thể được nâng cấp bởi bất kỳ ai nắm giữ nó, điều này làm tổn hại đến tính toàn vẹn của hợp đồng của bạn. Ngược lại, nếu bạn mất hoàn toàn upgrade_cap và không có bản sao lưu, bạn không thể nâng cấp gói nữa, đóng băng trạng thái của nó một cách hiệu quả.

Không giống như các mẫu nâng cấp proxy của Ethereum nơi khả năng nâng cấp được mã hóa trong logic hợp đồng, Sui sử dụng một đối tượng khả năng rõ ràng. Thiết kế này tăng cường tính minh bạch về bảo mật bằng cách liên kết quyền nâng cấp trực tiếp với đối tượng trên chuỗi mà bạn kiểm soát.

Trong mã Move của bạn, upgrade_cap không xuất hiện vì quyền nâng cấp được quản lý bên ngoài logic hợp đồng, nhưng nó rất quan trọng trong việc triển khai và nâng cấp giao dịch thông qua CLI hoặc SDK.

Ví dụ để kiểm tra khả năng nâng cấp gói của bạn:

gói nhận gói khách hàng sui <package_id>

Điều này sẽ hiển thị siêu dữ liệu gói bao gồm đối tượng upgrade_cap.

Bằng cách tuân theo các thực hành này, bạn đảm bảo rằng các nâng cấp gói được kiểm soát chặt chẽ, giảm thiểu rủi ro thay đổi trái phép và duy trì niềm tin của người dùng vào hợp đồng thông minh của bạn.

7
Câu trả lời hay nhất
Bình luận
.
Ashford.
Jul 31 2025, 06:35

Nâng cấp trái phép trong mạng Sui (Di chuyển)

Để ngăn chặn việc nâng cấp trái phép gói Move trong Mạng Sui, bạn cần đảm bảo rằng chỉ các thực thể hoặc địa chỉ đáng tin cậy mới được phép thực hiện nâng cấp. Điều này được thực hiện thông qua upgrade_capcơ chế**** và bằng cách kiểm soát cẩn thận ai có khả năng nâng cấp gói của bạn.

Các khái niệm chính:

*** upgrade_cap**: Khả năng hạn chế những người có thể nâng cấp gói. Bạn có thể thiết lập và kiểm tra upgrade_captrong quá trình triển khai hợp đồng. *Quy trình nâng cấp hợp đồng: Hợp đồng Sui, sau khi được triển khai, có thể được nâng cấp, nhưng bạn cần kiểm soát ai có thể kích hoạt các nâng cấp này.

Các bước để ngăn chặn nâng cấp trái phép:

1.Set upgrade_cap: Khi triển khai gói Move của bạn, hãy xác định upgrade_capđể hạn chế những người có thể nâng cấp hợp đồng của bạn. 2.Cấp quyền nâng cấp: Chỉ cung cấp khả năng nâng cấp cho các địa chỉ đáng tin cậy (ví dụ: quản trị viên).

Ví dụ di chuyển mã:

module MyPackage {
    use 0x1::UpgradeCap;

    public fun initialize(owner: address) {
        let cap = UpgradeCap::new(owner);  // Create upgrade capability for the owner
        // Store the upgrade cap in a resource or object
    }

    public fun upgrade(owner: address) {
        // Only the owner (who has the upgrade cap) can call this function
        UpgradeCap::assert_cap(&cap, owner); // Ensure the caller has the upgrade cap
        // Perform the upgrade logic here
    }
}

upgrade_cap### Ví dụ về CLI để thiết lập:

Khi xuất bản hoặc triển khai gói Move, bạn có thể chuyển mã upgrade_capđịnh danh cho ứng dụng khách Sui:

sui client publish --gas-budget 10000 --upgrade-cap <upgrade-cap-id>

Những sai lầm phổ biến:

*** Không liên kết đúng đó upgrade_cap**: Nếu khả năng nâng cấp không được đặt chính xác, các địa chỉ trái phép có thể vô tình nhận được quyền nâng cấp hợp đồng. ***Địa chỉ nâng cấp sai: Đảm bảo rằng chỉ các địa chỉ được ủy quyền (những địa chỉ giữupgrade_cap) mới có thể thực hiện nâng cấp.

Thực hành tốt nhất:

Giới hạn khả năng nâng cấp: Chỉ cung cấp cho các địa chỉ hoặc quản trị viên upgrade_capđáng tin cậy. *** Kiểm tra trên Testnet/Localnet*: Luôn kiểm tra logic nâng cấp của bạn trên mạng cục bộ/thử nghiệm để đảm bảo rằng các nâng cấp trái phép bị ngăn chặn. *** Lưu trữ an toàn upgrade_cap**: Đảm bảo địa chỉ giữ khả năng nâng cấp được quản lý an toàn.

Bằng cách kiểm soát upgrade_capvà hạn chế cẩn thận những người có thể kích hoạt nâng cấp, bạn có thể tránh các nâng cấp trái phép và đảm bảo rằng hợp đồng của bạn vẫn an toàn sau khi triển khai.

7
Bình luận
.
Benjamin XDV.
Jul 31 2025, 09:44

Đểkhông cho phép nâng cấpcủa gói Move trong Sui, bạn phảithu hồi hoặc ghi đối upgrade_capt, vì khả năng này là cơ chế duy nhất để ủy quyền nâng cấp gói. Một khi upgrade_capbị phá hủy (ví dụ: thông qua public entry fun burnMove), gói sẽ trở thànhbất biến vĩnh cửu, vì Sui thực thi kiểm soát khả năng nâng cấp nghiêm ngặt ở cấp giao thức. Điều này khác với chuỗi EVM nơi khả năng nâng cấp dựa trên các mẫu proxy hoặc lưu trữ có thể thay đổi - mô hình của SUI đảm bảo bảo mật xác định bằng cách gắn các nâng cấp một cách rõ ràng với quyền sở hữu khả năng. Thực tiễn tốt nhất là triển khaigói được kiểm soát quản lý(ví dụ:AdminCap) xung quanh việc thu hồi có thể lập trình, upgrade_capthay vì ghi trực tiếp, để cho phép phân cấp trong tương lai.

6
Bình luận
.
theking.
Jul 30 2025, 11:25

Để trái phép hoặc vô hiệu hóa nâng cấp cho gói Move trên Mạng Sui, bạn cần phải phá hủy hoặc chuyển UpgradeCapđối tượng được tạo trong quá trình triển khai ban đầu của gói. Đây UpgradeCaplà một đối tượng đặc biệt cấp quyền nâng cấp gói cụ thể đó. Nếu không có khả năng này, không thể nâng cấp trong tương lai.

Để ngăn chặn nâng cấp, bạn có thể chuyển UpgradeCapđến một địa chỉ không thể truy cập (như0x0) hoặc phá hủy nó bằng cách sử dụng chức năng Di chuyển mà bạn kiểm soát. Ví dụ, nếu bạn muốn làm cho hợp đồng bất biến, hãy bao gồm một public entry fun burn_upgrade_cap(cap: UpgradeCap)hàm trong mô-đun của bạn và chỉ cần gọi nó sau khi triển khai. Sau khi đốt, các nâng cấp sẽ bị vô hiệu hóa vĩnh viễn.

Dưới đây là đoạn trích Move mẫu để ghi:

public entry fun burn_upgrade_cap(cap: UpgradeCap) {
    sui::package::delete_upgrade_cap(cap);
}

Nếu bạn đang triển khai qua CLI, bạn có thể gọi hàm mục này sau khi xuất bản:

sui client call \
  --package <your_package_id> \
  --module <your_module> \
  --function burn_upgrade_cap \
  --args <upgrade_cap_object_id>

Vô hiệu hóa nâng cấp là điều cần thiết khi bạn muốn khóa logic hợp đồng thông minh của mình vĩnh viễn vì lý do bảo mật hoặc quản trị. Một khi nắp bị phá hủy hoặc di chuyển đến một địa chỉ không có khóa riêng tư, gói hoàn toàn không thể thay đổi.

5
Bình luận
.
Paul.
Paul4310
Jul 31 2025, 05:36

Để ngăn chặn việc nâng cấp trái phép gói Move trong Sui, bạn có thể triển khai kiểm soát truy cập cho quá trình nâng cấp. Cụ thể, bạn có thể sử dụng upgrade_cap(khả năng nâng cấp) và đảm bảo nó được kiểm soát an toàn bởi một thực thể hoặc tài khoản đáng tin cậy.

Các khái niệm chính:

upgrade_cap*Khả năng nâng cấp: Kiểm soát ai có thể nâng cấp gói Move bằng cách liên kết với địa chỉ đáng tin cậy. *Kiểm soát truy cập: Chỉ cho phép tài khoản có khả năng nâng cấp kích hoạt nâng cấp.

Thực hành tốt nhất:

1.Quyền sở upgrade_caphữu an toàn: Chỉ cấp quyền nâng cấp cho các địa chỉ đáng tin cậy (ví dụ: tài khoản người triển khai). 2.Sử dụng Chữ ký: Triển khai logic để xác minh người ký trong quá trình nâng cấp để đảm bảo chỉ người dùng được ủy quyền mới có thể thực hiện nâng cấp.

Mã ví dụ:

module MyModule {
    use sui::object::{Object, upgrade_cap};

    public fun upgrade(beneficiary: &signer) {
        let cap = upgrade_cap::get_cap(beneficiary);
        assert!(cap.is_some(), 0); // Ensure the signer is authorized
        // Logic for upgrading the contract
    }
}

Cách sử dụng CLI:

Sử dụng Sui CLI để xuất bản và quản lý các nâng cấp một cách an toàn:

sui client publish --upgrade --package <package-id> --capability <upgrade-cap-id>

Những sai lầm phổ biến cần tránh:

*Kiểm soát truy cập lỏng lẻo: Tránh gán cho các tài khoản không đáng tin upgrade_capcậy. *** Trạng thái không tương thích: Đảm bảo nâng cấp không phá vỡ các trạng thái đối tượng hoặc cấu trúc dữ liệu hiện có. Luôn luôn kiểm tra trên localnet/testnet trước.

5
Bình luận
.
Arnold.
Arnold3036
Jul 31 2025, 08:18

Để ngăn chặn nâng cấp trái phép của gói Move:

####1. Làm cho gói không thể thay đổi

// During publishing, set `UpgradePolicy` to `immutable`  
let upgrade_cap = package::claim_and_keep(otw);  
package::make_immutable(upgrade_cap);  // 🔐 Burn upgrade capability  

-** Hiệu quả**: Không được phép nâng cấp thêm (như hợp đồng EVM).

####2. Quản lý an toà UpgradeCapn Nếu cần nâng cấp: -Chuyển upgrade_capsang Multisig/DAO:

 transfer::transfer(upgrade_cap, @multisig_address);  

-** Sử dụng logic xác thực tùy chỉnh**:

 public entry fun upgrade(  
   _: &AdminCap,  // Requires admin permission  
   upgrade_cap: &mut UpgradeCap,  
   new_package: vector<u8>  
 ) { package::upgrade(upgrade_cap, new_package); }  

####** Ví dụ CLI (Xuất bản không thể thay đổi)**

sui client publish --gas-budget 100000000  
# Then call `make_immutable` with the returned `upgrade_cap` ID  

###** Sự khác biệt chính từ EVM** UpgradeCap-Sui: Khả năng nâng cấp là tùy chọn (thông qua). -EVM: Hợp đồng không thể thay đổi theo mặc định (không có cơ chế nâng cấp gốc).

###Cạm bẫy phổ biến 1.** Mấ upgrade_capt**: Chuyển đến địa chỉ chết = không thể đảo ngược. 2.Nâng cấp quá đặc quyền: Tránh cấp quyền nâng cấp cho EOA.

4
Bình luận
.
shamueely.
Jul 30 2025, 11:31

UpgradeCapĐể đảm bảo không ai có thể nâng cấp gói Move trên mạng Sui — kể cả chính bạn — bạn cần thu hồi quyền hạn gắn liền với đối tượng của gói. Đây là đối tượng kiểm soát quyền cho các nâng cấp trong tương lai. Nếu bạn xóa hoặc làm cho đối tượng này không thể truy cập được, gói sẽ trở nên bất biến và không bao giờ có thể sửa đổi lại.

Bạn có thể làm điều này một cách an toàn bằng cách sử dụng sui::package::delete_upgrade_capchức năng trong mã Di chuyển của bạn. Dưới đây là một ví dụ đơn giản mà bạn có thể thêm vào module của mình:

use sui::package;
use sui::package::UpgradeCap;

public entry fun lock_package(cap: UpgradeCap) {
    package::delete_upgrade_cap(cap);
}

Sau đó, khi bạn triển khai gói, hãy thực hiện chức năng này trong một giao dịch bằng Sui CLI hoặc SDK:

sui client call \
  --package <your_package_id> \
  --module <your_module_name> \
  --function lock_package \
  --args <upgrade_cap_object_id> \
  --gas-budget 100000000

Bằng cách này, nó UpgradeCapbị đốt cháy, có nghĩa là nó không còn tồn tại trên chuỗi và không ai có thể ủy quyền nâng cấp khác. Đây là phương pháp hay nhất nếu bạn muốn đảm bảo tính bất biến của mã — đặc biệt là đối với các hợp đồng DeFi sẵn sàng sản xuất, tiêu chuẩn NFT hoặc bất kỳ logic nào mà người dùng dựa vào hành vi bị khóa, không đáng tin cậy.

Đối với bối cảnh kiến trúc: không giống như EVM nơi các hợp đồng thông minh không thể thay đổi theo mặc định, Sui cho phép các gói có thể nâng cấp, mang lại sự linh hoạt nhưng cũng mang lại sự phức tạp trong quản trị. Để “không ủy quyền” các nâng cấp, bạn phải phá hủy rõ ràng khóa cho phép chúng.

Đọc thêm trong tài liệu nâng cấp gói Sui chính thức tại đây: [https://docs.sui.io/build/packages-and-upgrades#making-packages-immutable](https://docs.sui.io/build/packages-and-upgrades#making-packages-immutable]

3
Bình luận
.
Alya.
Alya-14
Jul 30 2025, 17:29

Để ngăn chặn việc nâng cấp trái phép gói Move trong Sui,**phá hủy hoặc khóa đối tượng upgrade_cap**sau khi xuất bản.

upgrade_cap(from0x2::package::UpgradeCap) là một đối tượng hạng nhất cấp quyền nâng cấp. Nếu nó vẫn còn trong địa chỉ của nhà xuất bản, bất kỳ ai có quyền truy cập đều có thể nâng cấp gói.

Thực hành tốt nhất:

-Đối với các hợp đồng bất đổi: Đốt khả năng:

 public entry fun burn_upgrade_cap(cap: package::UpgradeCap) {
     package::discard(cap); // Destroys the capability
 }

-Đối với các nâng cấp được quản lý: Chuyển upgrade_capsang mô-đun multisig hoặc DAO thay vì giữ nó trong một tài khoản duy nhất.

  • Không bao giờ phơi bày upgrade_captrong các chức năng công cộng mà không có kiểm soát truy cập.

Kiểm tra CLI:

sui client object --id [PACKAGE_ID]  # Look for associated UpgradeCap object

Một khi upgrade_capbị phá hủy, gói sẽ trở thànhbất biến vĩnh cửu— đây tương đương với việc “khóa” một hợp đồng của Sui (giống như các mô hình nâng cấp của EVM).

Cơ chế này là duy nhất đối với mô hình tập trung vào đối tượng của Sui: quyền nâng cấp được thực thi bởi quyền sở hữu đối tượng, không phải bởi vai trò quản trị hoặc logic trong hợp đồng.

3
Bình luận
.
Evgeniy CRYPTOCOIN.
Jul 31 2025, 09:12

Để ngăn chặn các nâng cấp trái phép trong Sui:

1.** Đốt UpgradeCap- Phá hủy nó sau khi triển khai để bất biến. 2. Khóa n initóa**- Không chia sẻ nắp nếu cần tính bất biến vĩnh viễn.

###Ví dụ di chuyển:

public fun lock_forever(cap: UpgradeCap) {  
    sui::package::make_immutable(cap) // Burns cap  
}  

Ghi chú chính: ✔ Nếu không cóUpgradeCap, không có thể nâng cấp. ✔ Không giống như EVM, Sui cho phép tính bất biến có thể đảo ngược.

Thay thế CLI:

sui client call --function lock_forever --args <CAP_ID>  
  • (Cảnh báo: Vĩnh viễn trừ khi bạn lên kế hoạch trước các phương pháp phục hồi. ) *
3
Bình luận
.
290697tz.
Jul 30 2025, 12:30

Để ngăn chặn các nâng cấp trái phép của gói Move trên Sui, cơ chế cốt lõi là đối tượng upgrade_cap. Đối tượng khả năng này cấp quyền độc quyền để nâng cấp gói đã triển khai. Nếu không sở hữu upgrade_cap thì không ai có thể nâng cấp gói, đảm bảo an ninh.

Khi bạn xuất bản một gói thông qua Sui CLI:

trên máy khách xuất bản --path. /my_package --gas-budget 10000

Một đối tượng upgrade_cap được tạo và trả về. ID đối tượng này phải được cung cấp khi nâng cấp gói:

nâng cấp máy khách sui --package. <upgrade_cap_object_id>/new_package --nâng cấp-cap --gas-budget 10000

Để đảm bảo quá trình nâng cấp:

  1. Lưu trữ upgrade_cap một cách an toàn, chẳng hạn như trong ví phần cứng hoặc ví multisig.

  2. Sử dụng ví multisig để giữ upgrade_cap để yêu cầu nhiều chữ ký để nâng cấp.

  3. Tránh chia sẻ ID đối tượng upgrade_cap hoặc tiết lộ nó công khai.

  4. Thực hiện quản trị ngoài chuỗi để phê duyệt nâng cấp trước khi thực hiện.

  5. Hạn chế quyền truy cập nâng cấp bằng các điều khiển môi trường hoặc danh sách trắng cơ sở hạ tầng.

  6. Giám sát các giao dịch blockchain để phát hiện các nỗ lực nâng cấp trái phép.

  7. Sao lưu upgrade_cap một cách an toàn để tránh mất khả năng nâng cấp.

  8. Hãy nhớ rằng mất upgrade_cap có nghĩa là bạn không thể nâng cấp gói của mình nữa.

  9. Không giống như các proxy EVM, kiểm soát nâng cấp của Sui được quản lý bởi một đối tượng riêng biệt, không phải logic hợp đồng.

  10. Bản thân mã Move không chứa logic nâng cấp; nó được xử lý bên ngoài thông qua upgrade_cap.

  11. Upgrade_cap được gắn với siêu dữ liệu của gói và hiển thị khi truy vấn thông tin gói:

gói nhận gói khách hàng sui <package_id>

  1. Luôn luôn xác minh quyền sở hữu upgrade_cap trước khi thử nâng cấp.

  2. Khi nâng cấp, ID gói không đổi; chỉ có mã thay đổi.

  3. Việc sở hữu trái phép upgrade_cap cho phép nâng cấp độc hại.

  4. Sử dụng cơ chế kiểm soát truy cập trong môi trường hoạt động của bạn để bảo vệ các giao dịch nâng cấp.

  5. Thiết kế đường ống CI/CD của bạn để yêu cầu các bước phê duyệt thủ công để nâng cấp.

  6. Theo dõi những người nắm giữ upgrade_cap trong nhóm hoặc tổ chức của bạn để có trách nhiệm giải trình.

  7. Bạn có thể chuyển đối tượng upgrade_cap sang tài khoản khác nếu cần, nhưng hãy thận trọng.

  8. Giữ cho các giao dịch nâng cấp tiết kiệm khí bằng cách chỉ định ngân sách khí đốt phù hợp.

  9. Kết hợp kiểm soát upgrade_cap trên chuỗi với quản trị ngoài chuỗi là phương pháp tốt nhất để nâng cấp gói an toàn trên Sui.

2
Bình luận
.
Jeff.
Jeff2046
Aug 23 2025, 08:54

To prevent unauthorized upgrades of a Move package on Sui, the core mechanism is the upgrade_cap object. This capability object grants exclusive authority to upgrade a deployed package. Without possessing the upgrade_cap, no one can upgrade the package, ensuring security.

When you publish a package via Sui CLI:

sui client publish --path ./my_package --gas-budget 10000

An upgrade_cap object is created and returned. This object ID must be provided when upgrading the package:

sui client upgrade --package ./new_package --upgrade-cap <upgrade_cap_object_id> --gas-budget 10000

To secure the upgrade process:

Store the upgrade_cap securely, such as in a hardware wallet or multisig wallet.

Use a multisig wallet to hold the upgrade_cap so multiple signatures are required for upgrades.

Avoid sharing the upgrade_cap object ID or exposing it publicly.

Implement off-chain governance to approve upgrades before execution.

Restrict upgrade access with environment controls or infrastructure whitelisting.

Monitor blockchain transactions to detect unauthorized upgrade attempts.

Back up the upgrade_cap securely to avoid losing upgrade ability.

Remember that losing the upgrade_cap means you cannot upgrade your package anymore.

Unlike EVM proxies, Sui’s upgrade control is managed by a distinct object, not contract logic.

The Move code itself does not hold upgrade logic; it's handled externally via the upgrade_cap.

The upgrade_cap is tied to the package’s metadata and visible when querying package info:

sui client get-package <package_id>

Always verify the upgrade_cap ownership before attempting upgrades.

When upgrading, the package ID remains constant; only the code changes.

Unauthorized possession of the upgrade_cap allows malicious upgrades.

Use access control mechanisms in your operational environment to protect upgrade transactions.

Design your CI/CD pipeline to require manual approval steps for upgrades.

Track who holds the upgrade_cap in your team or organization for accountability.

You can transfer the upgrade_cap object to another account if needed, but do so cautiously.

Keep upgrade transactions gas-efficient by specifying appropriate gas budgets.

Combining on-chain upgrade_cap control with off-chain governance is the best practice for secure package upgrades on Sui.

2
Bình luận
.
Bekky.
Bekky1762
Jul 31 2025, 10:29

###1. Cơ chế bảo mật cốt lõi Sui sử dụngnắp nâng cấp(UpgradeCap) để kiểm soát tính biến đổi của gói. Không giống như các hợp đồng bất biến của EVM, Sui cho phép nâng cấp nhưng với sự kiểm soát quyền sở hữu nghiêm ngặt.

####Thuộc tính chính

Tính năngMô tả
UpgradeCapĐối tượng có thể chuyển nhượng cấp quyền nâng cấp
Chính sáchBitflags xác định các thay đổi được phép (tương thích ngược, cộng thêm, phá vỡ)
Xác minh bản thứcĐảm bảo mã byte khớp với hash mong đợi

###2. Các mô hình thực hiện

####Gói bất biến cơ bản

module my_pkg::governance {
    use sui::package;
    use sui::transfer;
    use sui::tx_context;

    // Burn upgrade cap at initialization
    public fun init(ctx: &mut TxContext) {
        let (upgrade_cap, _) = package::claim_upgrade_cap(ctx);
        package::burn_upgrade_cap(upgrade_cap); // Permanent immutability
    }
}

####** Nâng cấp do DAO**

module my_pkg::dao {
    use sui::voting;
    use sui::package;

    struct DaoCap has key, store {
        id: UID,
        upgrade_cap: UpgradeCap,
        threshold: u64
    }

    public entry fun authorize_upgrade(
        dao: &mut DaoCap,
        proposal_id: ID,
        policy: u8,
        digest: vector<u8>,
        ctx: &mut TxContext
    ) {
        assert!(voting::is_approved(proposal_id, dao.threshold), EACCESS_DENIED);
        package::authorize_upgrade(&mut dao.upgrade_cap, policy, digest);
    }
}

###3. Thực thi CLI

####Triển khai dưới dạng Bất đổi

sui client publish --gas-budget 1000000000 --with-upgrade-capability false

####Xác minh tính bất đổi

sui client object <UPGRADE_CAP_ID> --json | grep "burned"
# Expected: "burned": true

###4. Thực hành tốt nhất về bảo mật

####Ma trận chính sách nâng cấp | Cờ chính sách | Thay đổi được phép | Đề xuất cho | | -----------------------------| -----------------| | 0x1(TƯƠNG THÍCH) | Chỉ sửa lỗi | Giao thức ổn định | | 0x3(ADDITIVE) | Chức năng mới | Hệ thống phát triển | | 0x7(PHÁ VỠ) | Thay đổi đầy đủ | Phát triển sớm |

####** Bảo vệ đa sige**

module my_pkg::multisig {
    struct UpgradeVault has key {
        id: UID,
        cap: UpgradeCap,
        required: u8,
        approvals: vector<address>
    }

    public entry fun approve(
        vault: &mut UpgradeVault,
        signer: &signer
    ) {
        let addr = signer::address_of(signer);
        assert!(!vector::contains(&vault.approvals, &addr), EALREADY_APPROVED);
        vector::push_back(&mut vault.approvals, addr);
        
        if (vector::length(&vault.approvals) >= vault.required) {
            package::authorize_upgrade(&mut vault.cap, POLICY_ADDITIVE, digest);
        }
    }
}

###5. Vectơ tấn công & Giảm giá

| Mối đe dọa | Giải pháp | Ví dụ di chuyển | | ------------------| --------------| struct TimedCap { unlock_epoch: u64 }|Mũ bị đánh cấp| Nâng cấp khóa thời gian | | assert!(digest == expected_digest, EINVALID)|Nâng cấp độc động| Yêu cầu xác minh bản phân tích | | required = 5/7|Quản trị| Phân cấp tiến bộ | Bắt đầu với multisig |


###6. Chiến lược kiểm tra

####Chạy khô Localnet

sui client publish --upgrade-policy 1 --dry-run
# Verify no upgrade cap is created

####** Trường hợp xét nghiệm âm cực**

#[test(expected_failure = "EUPGRADE_NOT_AUTHORIZED")]
fun test_unauthorized_upgrade() {
    let (_, publisher) = package::claim_upgrade_cap(ctx);
    package::authorize_upgrade(&mut cap, 0x7, digest); // Should fail
}

###7. Giám sát & Phục hồi

####** Xác minh trên chuỗi**

// TypeScript SDK check
const isImmutable = await client.getObject({
    id: upgradeCapId,
    options: { showContent: true }
}).then(obj => obj.data?.content?.type === '0x2::package::UpgradeCap');

####Đóng băng khẩn cấp

public entry fun freeze_forever(cap: UpgradeCap) {
    transfer::freeze_object(cap); // Makes cap non-transferable
}

###** Các yếu tố khác biệt chính từ EVM** | Khía cạnh | Sui | EVM | | -------------| -----| |** Cơ chế nâng cấp**| Lấy đối tượng làm trung tâm | Mẫu proxy | |Độ chi tiết| Kiểm soát từng gói | Tất cả hoặc không có gì | |** Khả năng kiểm tra**| Lịch sử nâng cấp trên chuỗi | Quản trị viên proxy mờ đục |

Đối với hệ thống sản xuất:

  1. Lưu trữ UpgradeCaptrong kho lạnh
  2. Thực hiệnmulti-sig với độ trễ thời gian
  3. Sử dụngSui Explorerđể theo dõi các đề xuất nâng cấp
1
Bình luận
.

Bạn có biết câu trả lời không?

Hãy đăng nhập và chia sẻ nó.

Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.

1170Bài viết3665Câu trả lời
Sui.X.Peera.

Kiếm phần của bạn từ 1000 Sui

Tích lũy điểm danh tiếng và nhận phần thưởng khi giúp cộng đồng Sui phát triển.

Chiến dịch phần thưởngTháng Tám