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

Vai trò của upgrade_cap trong các gói Sui là gì?

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
7
12
Chia sẻ
Bình luận
.

Câu trả lời

12
BigSneh.
Jul 30 2025, 12:16

Upgrade_cap trong gói Sui là một đối tượng đặc biệt kiểm soát quyền nâng cấp gói Move đã xuất bản. Khi bạn xuất bản một gói trên Sui, hệ thống sẽ tạo một đối tượng upgrade_cap được liên kết với gói đó. Đối tượng này được nắm giữ bởi nhà xuất bản hoặc cơ quan được chỉ định và được yêu cầu thực hiện bất kỳ nâng cấp hoặc sửa đổi nào trong tương lai đối với mã gói. Nếu không có upgrade_cap, gói sẽ trở nên bất biến, nghĩa là bạn không thể thay đổi hoặc thay thế các mô-đun của nó. Thiết kế này thực thi các nâng cấp an toàn, có kiểm soát và ngăn chặn các thay đổi trái phép, điều này rất quan trọng để duy trì sự tin tưởng và ổn định trong các hợp đồng thông minh được triển khai.

Từ góc độ CLI, khi bạn xuất bản một gói bằng sui client publish, bạn sẽ nhận được ID gói và ID đối tượng upgrade_cap. Để nâng cấp, bạn phải ký một giao dịch tham chiếu đến upgrade_cap hiện tại, sau đó hệ thống phát hành phiên bản mới của gói cùng với một đối tượng upgrade_cap mới. Trong Move code, bạn không trực tiếp thao tác với upgrade_cap, nhưng các tập lệnh triển khai hoặc logic off-chain của bạn phải xử lý nó một cách an toàn.

Về mặt kiến trúc, upgrade_cap thể hiện quyền sở hữu và kiểm soát quyền quản lý vòng đời gói, phân biệt mô hình gói của Sui với các hợp đồng hoặc proxy bất biến của Ethereum. Thực hành tốt nhất là lưu trữ upgrade_cap an toàn ngoại tuyến hoặc trong ví multisig để ngăn chặn sự xâm phạm. Ngoài ra, cần quản lý và thử nghiệm phiên bản cẩn thận trước khi nâng cấp vì nó ảnh hưởng đến tất cả người dùng tùy thuộc vào gói.

Các lỗi điển hình bao gồm mất upgrade_cap, khóa bạn khỏi nâng cấp hoặc quản lý sai quyền dẫn đến rủi ro bảo mật. Sử dụng Sui CLI, bạn có thể truy vấn upgrade_cap hiện tại cho một gói hoặc gửi các giao dịch nâng cấp tiêu thụ và phát hành lại gói đó.

Tóm lại, upgrade_cap là khóa mật mã để phát triển gói trên Sui, cho phép nâng cấp được kiểm soát, cho phép trong khi vẫn duy trì sự phân cấp và bảo mật. Quản lý nó đúng cách là điều cần thiết cho quy trình phát triển và triển khai hợp đồng thông minh Sui sẵn sàng sản xuất.

6
Câu trả lời hay nhất
Bình luận
.
Paul.
Paul4180
Jul 31 2025, 05:27

Trong Sui, upgrade_capđược sử dụng để quản lý khả năng nâng cấp của hợp đồng thông minh, cho phép các nhà phát triển cập nhật hợp đồng mà không làm mất dữ liệu. Nó cấp phép thực hiện nâng cấp hợp đồng và thường thuộc sở hữu của một địa chỉ đáng tin cậy.

Điểm chính:

*** Nâng cấp kiểm soát**: upgrade_capđảm bảo chỉ các địa chỉ được ủy quyền mới có thể kích hoạt nâng cấp. *** Move Code**: Được sử dụng trong các mô-đun Di chuyển để xử lý các nâng cấp. *Ví dụ CLI:

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

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

  • Kiểm tra nâng cấp trên localnet/testnet.
  • Bảo mật upgrade_capđể ngăn chặn truy cập trái phép.
8
Bình luận
.
Ashford.
Jul 31 2025, 06:31

Vai trò của upgrade_captrong Sui Network

Mục đích: Kiểm soát ai có thể nâng cấp hợp đồng hoặc mô-đun thông minh.

*** Nó làm gì**: Cấp quyền nâng cấp cho các địa chỉ cụ thể (thường là quản trị viên). Nó đảm bảo chỉ các thực thể được ủy quyền mới có thể sửa đổi các hợp đồng đã triển khai.

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

*** Ngôn ngữ di chuyển**: upgrade_capđược triển khai trong Move để quản lý hợp đồng an toàn. *Triển dụng: Được chỉ định trong quá trình triển khai hợp đồng để cho phép nâng cấp trong tương lai chỉ bằng các địa chỉ được ủy quyền.

Ví dụ về CLI:

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

Ví dụ di chuyển mã:

public fun grant_upgrade_cap() {
    let upgrade_cap = UpgradeCap::new();
    // Assign cap to authorized address
}

Các vấn đề thường gặp:

*** Lỗi cho quyền**: Địa chỉ trái phép đang cố gắng nâng cấp. *Thiếu khả năng: Đảm bảo được thiết lập chính xác trong quá trình triển upgrade_capkhai.

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

Hạn chế upgrade_cap: Giới hạn quyền truy cập vào các địa chỉ đáng tin cậy. *** Kiểm tra trong Localnet/Testnet*: Đảm bảo hành vi thích hợp trước khi triển khai lên mainnet.

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

**upgrade_cap**trong Sui đóng vai trò như một cơ chế ủy quyền cho việc nâng cấp gói, hoạt động như một đối tượng khả năng duy nhất cấp quyền nâng cấp cho chủ sở hữu của nó. Không giống như chuỗi EVM nơi các hợp đồng là bất biến, hệ thống nâng cấp của Sui yêu cầu đối tượng này sửa đổi các gói đã xuất bản, cung cấp khả năng thay đổi có kiểm soát trong khi vẫn duy trì bảo mật. upgrade_capChủ sở hữu sui client upgradecó thể ủy quyền nâng cấp thông qua package::authorize_upgradelệnh CLI hoặc lập trình thông qua chức năng Move. Các phương pháp hay nhất liên quan đến việc lưu trữ an toàn upgrade_cap(thường là trong một Versionedhoặc bao AdminCapbọc) và thực hiện các kiểm soát quyền sở hữu thích hợp, vì mất nó sẽ khóa vĩnh viễn khả năng nâng cấp trong khi lộ ra nó có nguy cơ sửa đổi trái phép.

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

Trong mạng Sui, nó upgrade_capđóng một vai trò quan trọng trong việc cho phép nâng cấp an toàn và có kiểm soát cho các gói Move sau khi triển khai ban đầu. Khi bạn xuất bản một gói trên Sui, một đối tượng thuộc loại UpgradeCapđược tạo và trả về. Đối tượng này làthẩm quyền duy nhấtcho phép nâng cấp trong tương lai cho gói, hoạt động hiệu quả như một khóa cấp quyền thay đổi mã của nó.

Bạn phải giữ quyền sở hữu gói này upgrade_capnếu bạn có ý định nâng cấp gói của mình sau này. Nếu bạn chuyển nó sang một địa chỉ khác hoặc ghi nó (ví dụ: bằng cách gửi nó đến0x0), thì không thể nâng cấp thêm. Thiết kế này thực thi tính bất biến trừ khi người tạo gói chọn tham gia một cách rõ ràng.

Tại sao UpgradeCap lại quan trọng

Mô hình tập trung đối tượng của Sui giới thiệu khái niệm này để phân biệt giữa các gói bất biến và các gói có thể nâng cấp. Các gói không có quyền truy cập vào chúng upgrade_capđược coi là bất biến vĩnh viễn. Điều này trái ngược với các chuỗi EVM trong đó các hợp đồng chỉ có thể thay đổi nếu delegatecallproxy hoặc các mẫu có thể nâng cấp được xây dựng thủ công.

Ví dụ về quy trình làm việc nâng cấp

Khi bạn xuất bản một gói:

sui client publish --path . --gas-budget 100000000

Đầu ra bao gồm:

  • ID gói
  • ID đối tượng UpgradeCap

Để nâng cấp sau:

sui client upgrade \
  --package <original_package_id> \
  --module-upgrade-path <new_module_path> \
  --upgrade-cap <upgrade_cap_id> \
  --gas-budget 100000000

Sử dụng UpgradeCap trong Move

Trong các mô-đun Move của bạn, bạn có thể bảo vệ các nâng cấp hoặc chuyển tiếp nhạy cảm bằng cách sử dụng đối tượng khả năng:

public entry fun secure_upgrade(upgrade_cap: &UpgradeCap, ctx: &mut TxContext) {
    // logic that uses upgrade_cap as proof of authority
}

Hoặc phá hủy nó nếu bạn muốn hoàn thiện gói:

transfer::public_transfer(upgrade_cap, @0x0);

Điều này sẽ thu hồi vĩnh viễn khả năng cập nhật gói của bạn.

Thực tiễn tốt nhất

*** Lưu trữ upgrade_captrong ví an toàn hoặc mô-đun quản trị**nếu bạn có kế hoạch nâng cấp trong tương lai. *** Đốt upgrade_capnếu bạn muốn gói của mình không thể thay đổi, điều này phổ biến đối với các hợp đồng tài chính hoặc NFT để xây dựng lòng tin của người dùng. *** Gói logic nâng cấp trong quản lý, để DAO hoặc multisig chấp thuận nâng cấp thay vì một khóa riêng duy nhất. *Tránh làm rò rỉ upgrade_capID, vì quyền sở hữu tương đương với quyền hạn ở Tùy.

Lỗi thường gặp

*** Thiếu upgrade_captrong quá trình nâng cấp→ Kết quả là lỗi “quyền bị từ chối”. *Vô tình chuyển sang null→ Gói hàng của bạn bị khóa vĩnh viễn. *** Cố gắng gọi nâng cấp trên các gói bất đổi→ Hệ thống sẽ từ chối giao dịch.

Tìm hiểu thêm

Cuối cùng, upgrade_capđại diện cho cam kết của Sui về thẩm quyền rõ ràng và kiểm soát chi tiết đối với sự phát triển của nhà nước và mã. Hiểu cách sử dụng, lưu trữ và thu hồi nó là chìa khóa để xây dựng các hợp đồng thông minh an toàn và có thể bảo trì trong hệ sinh thái Sui.

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

Vai trò của upgrade_captrong các gói Sui

Đây upgrade_caplà mộtđối tượng khả năngkiểm soát quyền nâng cấp gói trong hệ thống nâng cấp lấy đối tượng làm trung tâm của Sui. Không giống như chuỗi EVM sử dụng các mẫu proxy, Sui xử lý các nâng cấp ở cấp gói thông qua đối tượng khả năng chuyên dụng này.

Cơ học cốt lõi

Khi xuất bản một gói:

sui client publish --gas-budget 100000000 --path ./move_package

Giao dịch trả lại:

  1. ID gói (định danh bất biến)
  2. upgrade_capđối tượng (0x2: :package: :UpgradeCap)

Đối tượng khả năng này:

  • đối tượng Sui hạng nhấtcó thể được sở hữu, chuyển nhượng hoặc chia sẻ
  • Phải được bao gồm như một đầu vào trong bất kỳ giao dịch nâng cấp nào
  • Chứa ID gói mà nó cho phép nâng cấp

Chi tiết kỹ thuật chính

1.** Mô hình bảo mật**:

  • Chỉ chủ sở hữu mới upgrade_capcó thể nâng cấp gói
  • Tuân theo mô hình sở hữu đối tượng của Sui (không có ủy quyền dựa trên chữ ký)
  • Có thể được quản lý trong hợp đồng multisig hoặc timelocks

2.** Quy trình nâng cấp**:

  sui client upgrade --package [PACKAGE_ID] \
                    --upgrade-cap [UPGRADE_CAP_ID] \
                    --gas-budget 200000000 \
                    --path ./updated_package

3.** Các mẫu di chuyển quan trọng**:

  // Storing upgrade_cap in a publisher struct
  struct Publisher has key {
      id: UID,
      upgrade_cap: package::UpgradeCap,
  }
  
  // Upgrading (must use &mut reference)
  public entry fun upgrade(
      publisher: &mut Publisher,
      new_package: vector<u8>,
      new_modules: vector<vector<u8>>,
      ctx: &mut TxContext
  ) {
      package::upgrade_package(
          &mut publisher.upgrade_cap,
          new_package,
          new_modules,
          ctx
      )
  }

Ưu điểm cụ thể của Sui so với EVM

-** Không cần mẫu proxy**: Nâng cấp xảy ra ở cấp gói, không phải cấp hợp đồng -** Khả năng tương thích lại**: Các đối tượng hiện có vẫn còn hiệu lực sau khi nâng cấp -Bảo mật dựa trên khả năng: Sử dụng mô hình sở hữu đối tượng của Sui thay vì vai trò quản trị viên -** Quản trị minh bạch**: Có upgrade_capthể được đưa vào kho bạc multisigs hoặc DAO

Lỗi và giải pháp phổ biến

| Lỗi | Nguyên nhân | Khắc phục | | --------------| -----| | UpgradeCap not found| Thiếu đối tượng khả năng | Xác minh bạn đang sử dụng ID upgrade_cap chính xác | | Package ID mismatch| Sử dụng sai upgrade_cap | Kiểm tra gói: :id (&cap) khớp với gói mục tiêu | | Insufficient gas| Nâng cấp cần nhiều gas hơn | Tăng ngân sách gas (chi phí nâng cấp 2-3x tx thông thường) | | Module compatibility error| Thay đổi thay đổi trong phiên bản mới | Đảm bảo bố cục cấu trúc vẫn tương thích |

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

  1. Để sản xuất: Chuyển upgrade_capsang ví multisig
  2. Đối với các hợp đồng bất biến: Ghi khả năng sau khi xuất bản
  3. Luôn xác thực quyền sở hữu khả năng: object::is_owner(&cap, tx_context::sender(ctx))
  4. Phát ra các sự kiện khi nâng cấp: event::emit(UpgradeEvent { package_id, version })

upgrade_capthể hiện mô hình bảo mật hướng đối tượng của Sui - quyền nâng cấp được coi là tài sản có thể chuyển nhượng thay vì vai trò quản trị được mã hóa cứng, cung cấp các tùy chọn quản trị linh hoạt trong khi vẫn duy trì bảo mật.

5
Bình luận
.
290697tz.
Jul 30 2025, 12:18

Upgrade_cap trong Sui là một đối tượng đặc biệt đại diện cho quyền nâng cấp gói Move đã xuất bản. Khi bạn xuất bản một gói bằng cách sử dụng Sui CLI, hệ thống sẽ tự động tạo một đối tượng upgrade_cap được liên kết với gói đó. Đối tượng này kiểm soát khả năng nâng cấp hoặc sửa đổi gói sau khi triển khai ban đầu. Nếu không giữ upgrade_cap, không ai có thể nâng cấp gói, làm cho nó bất biến được.

Ví dụ: khi xuất bản một gói:

riêng khách hàng xuất bản --gas-budget 10000 --path. /gói của tôi

Đầu ra bao gồm ID đối tượng upgrade_cap. Đối tượng này phải được bao gồm trong các giao dịch nâng cấp để chứng minh thẩm quyền. Để nâng cấp gói, bạn gọi:

<upgrade_cap_object_id>nâng cấp máy khách riêng - gói - nâng cấp-giới hạn <new_package_path>- ngân sách gas 10000

Giao dịch này tiêu thụ upgrade_cap cũ và phát hành một giao dịch mới cho gói nâng cấp. Upgrade_cap thực thi kiểm soát quyền hạn chế nghiêm ngặt đối với vòng đời gói, đảm bảo chỉ các bên được ủy quyền mới có thể sửa đổi mã hợp đồng.

Từ góc độ Move, bản thân mã gói không trực tiếp thao tác với upgrade_cap vì nó được xử lý ở cấp giao thức. Tuy nhiên, các nhà phát triển cần quản lý đối tượng này một cách an toàn ngoài chuỗi, thường lưu trữ nó trong ví bảo mật hoặc thiết lập multisig để ngăn chặn các nâng cấp trái phép.

Một upgrade_cap bị mất có nghĩa là bạn không thể nâng cấp gói lại, khóa mã vĩnh viễn một cách hiệu quả. Điều này nhấn mạnh tầm quan trọng của các thực hành quản lý khóa an toàn. Hơn nữa, việc nâng cấp một gói ảnh hưởng đến tất cả người dùng dựa vào nó, vì vậy các nâng cấp nên được kiểm tra kỹ lưỡng trên testnet hoặc localnet trước khi triển khai.

Bởi vì các gói Sui được phiên bản hóa, upgrade_cap là chìa khóa để di chuyển giữa các phiên bản. Hệ thống đảm bảo nâng cấp nguyên tử bằng cách gắn phiên bản gói với khả năng này.

Bạn có thể truy vấn upgrade_cap được liên kết với gói bằng cách sử dụng Sui CLI hoặc SDK:

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

trả về chi tiết gói bao gồm upgrade_cap hiện tại. Xử lý upgrade_cap một cách an toàn là một phần của các phương pháp hay nhất trong quy trình phát triển Sui để tránh các thay đổi mã vô tình hoặc độc hại.

Trái ngược với các hợp đồng bất biến hoặc mô hình nâng cấp proxy của Ethereum, upgrade_cap của Sui là một đối tượng khả năng trên chuỗi rõ ràng kiểm soát các nâng cấp. Thiết kế này tăng cường tính minh bạch và bảo mật bằng cách làm cho quyền nâng cấp trở thành một đối tượng rõ ràng trong hệ thống.

Các nhà phát triển phải kết hợp quản lý upgrade_cap vào các đường ống triển khai của họ, thường lập kịch bản quá trình nâng cấp để bao gồm đối tượng upgrade_cap và đảm bảo nó được ký bởi các khóa chính xác.

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

Các upgrade_capgói in Sui là một đối tượng đặc biệt cho phép chủ sở hữu của nó độc quyền nâng cấp gói Move đã xuất bản. Khi bạn triển khai một gói trên mạng Sui, Sui tạo ra một UpgradeCapđối tượng gắn với tài khoản của bạn. Khả năng này hoạt động như một khóa truy cập an toàn — nếu không có nó, không ai (kể cả bạn) có thể nâng cấp mã của gói đó trong tương lai.

Bạn sử dụng upgrade_capkhi gọi upgradechức năng được cung cấp bởi mô-đun hệ thống của Sui. CLI cho phép bạn thực hiện các nâng cấp như thế này:

sui client upgrade \
  --package-path /path/to/your/package \
  --upgrade-capability <upgrade_cap_object_id> \
  --gas-budget 100000000

Bạn phải chuyển ID của UpgradeCapđối tượng để ủy quyền giao dịch nâng cấp. Nếu bạn mất UpgradeCaphoặc chuyển nó đến một địa chỉ không thể truy cập (chẳng hạn như0x0), gói sẽ trở nên bất biến vì không ai có thể bắt đầu nâng cấp.

Nếu bạn muốn cố tình vô hiệu hóa các nâng cấp trong tương lai, bạn có thể bao gồm một chức năng trong gói của mình như:

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

Việc gọi hàm này sẽ xóa khả năng và khóa mã vĩnh viễn. Điều này được khuyến nghị cho các gói phải không đáng tin cậy hoặc được quản lý bên ngoài.

Thực hành tốt nhất: Luôn bảo mật của bạn UpgradeCapvà cân nhắc chuyển nó sang DAO hoặc multisig nếu bạn đang làm việc trên cơ sở hạ tầng cộng tác hoặc công cộng.

3
Bình luận
.
Arnold.
Arnold2956
Jul 31 2025, 08:13

###Vai trò của upgrade_captrong Gói Sui Đây upgrade_caplà mộtđối tượng khả năngcấp quyền nâng cấp gói Move trên Sui. Đó là một tính năng Sui độc đáo cho phéptính đột biến có kiểm soátcho các gói đã xuất bản, không giống như các hợp đồng bất biến trên chuỗi EVM.


###Khái niệm chính 1.** Nó làm gì**:

  • Giữ PublisherUpgradePolicy(ví dụ,immutable,compatible,arbitrary).
  • Bắt buộc để ủy quyền nâng cấp gói (ví dụ: sửa lỗi, tính năng mới).

2.** Tại sao Sui lại độc đác**: upgrade_cap- Hợp đồng EVM làbất đổisau khi triển khai; Sui cho phép nâng cấpvới quản lý(thông qua).

  • Các nâng cấp là** tiết kiệm khí**(chỉ các mô-đun sửa đổi mới được xuất bản lại).

3.** Ý nghĩa bảo mật**:

  • Ai cầm upgrade_capcó thể thay đổi logic của gói.
  • Thực hành tốt nhất:** Chuyển nó sang multisig hoặc DAO**sau khi triển khai.

###Di chuyển cấu trúc mã ####1. Định upgrade_capnghĩa trong init

module my_pkg::my_module {
  use sui::package;
  use sui::transfer;

  // Called once during package publish
  fun init(otw: &mut TxContext) {
    let (upgrade_cap, publisher) = package::claim(otw);
    transfer::transfer(upgrade_cap, tx_context::sender(otw)); // Give cap to deployer
  }
}

####2. Nâng cấp một gói cửa

module my_pkg::upgrader {
  use sui::package;

  // Requires the UpgradeCap
  public entry fun upgrade(
    upgrade_cap: &mut UpgradeCap,
    new_package: vector<u8>,
    otw: &mut TxContext
  ) {
    package::upgrade(upgrade_cap, new_package, otw);
  }
}
3
Bình luận
.
Evgeniy CRYPTOCOIN.
Jul 31 2025, 09:07

upgrade_captrong Sui là mộtđối tượng chínhkiểm soát nâng cấp gói.

###Điểm chính: 1.Quyền quản trị— Chỉ chủ sở hữu mới upgrade_capcó thể nâng cấp gói. 2.** Bảo mật**— Ngăn chặn các thay đổi trái phép (không giống như các hợp đồng bất biến của Ethereum). 3. sui client upgradeCách sử dụng CLI- Bắt buộc cho.

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

struct UpgradeCap has key, store { id: UID }  

###Thực hành tốt nhất: ✔ Lưu trữ an toàn (ví dụ: multisig). ✔ Kiểm tra nâng cấp localnettrước.

Tại sao độc đáo: Sui cho phép nâng cấp (so với tính bất biến của EVM).

  • (Mất upgrade_cap= không còn nâng cấp nữa!) *
3
Bình luận
.
Bekky.
Bekky1752
Jul 31 2025, 10:03

###1. Khái niệm cốt lử Đây upgrade_caplà mộtđối tượng đặc phínhkiểm soát việc nâng cấp gói trong Sui. Không giống như các chuỗi EVM nơi các hợp đồng không thể thay đổi, Sui cho phép khả năng thay đổi có kiểm soát thông qua hệ thống dựa trên khả năng này.

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

Bất động sảnMô tả
Chủ sở hữuChỉ chủ sở hữu mới có thể ủy quyền nâng cấp
Có thể chuyển nhậnCó thể gửi đến các địa chỉ khác
Có thể đốt nóiTùy chọn bất biến vĩnh viễn

###2. Triển khai di chuyển ####Cấu trúc cơ bản

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

    // Generated during initial publish
    struct UpgradeCap has key, store { 
        id: UID 
    }

    // Initialize and transfer cap
    public fun init(ctx: &mut tx_context::TxContext) {
        let (upgrade_cap, publisher) = package::claim_upgrade_cap(ctx);
        transfer::transfer(upgrade_cap, tx_context::sender(ctx));
    }
}

####Quy trình nâng cấp

module my_pkg::upgrader {
    use sui::package;
    use sui::upgrade_cap;

    public entry fun upgrade(
        cap: &mut upgrade_cap::UpgradeCap,
        policy: u8,
        digest: vector<u8>,
        ctx: &mut tx_context::TxContext
    ) {
        package::authorize_upgrade(cap, policy, digest);
        let new_pkg = package::make_upgrade_ticket(cap, policy, digest);
        // ... complete upgrade
    }
}

###3. Quy trình làm việc CLI ####Xuất bản ban đầu

sui client publish --gas-budget 1000000000
# Output includes UpgradeCap object ID

####Cho phép nâng cấp

sui client call \
  --package <UPGRADE_CAP_PKG> \
  --module admin \
  --function authorize_upgrade \
  --args <UPGRADE_CAP_ID> 1 0x<COMPILED_PACKAGE_DIGEST> \
  --gas-budget 1000000000

####Thực hiện nâng cấp

sui client upgrade --upgrade-capability <UPGRADE_CAP_ID> \
  --gas-budget 1000000000

###4. Các mẫu bảo mật ####Khả năng làm nướng

struct AdminCap has key {
    id: UID,
    upgrade_cap: UpgradeCap  // Delegatable
}

####** Nâng cấp bị khóa theo thời gian**

module my_pkg::timelock {
    struct TimedUpgradeCap has key {
        cap: UpgradeCap,
        unlock_epoch: u64
    }

    public fun upgrade_when_ready(
        cap: &mut TimedUpgradeCap,
        ctx: &mut TxContext
    ) {
        assert!(tx_context::epoch(ctx) >= cap.unlock_epoch, ELOCKED);
        package::authorize_upgrade(&mut cap.cap, ...);
    }
}

###5. Cạm bẫy phổ biến

LỗiGiải pháp
MissingUpgradeCapLưu ID giới hạn trong tài liệu triển khai của bạn
UnauthorizedUpgradeSử dụng transfer::freeze_objectđể khóa nắp
DigestMismatchBiên dịch lại với các phụ thuộc giống hệt nhau

###6. Chính sách nâng cấp

// Bitflags determining upgrade flexibility
const POLICY_COMPATIBLE: u8 = 0x1;  // Backwards-compatible
const POLICY_ADDITIVE: u8  = 0x2;   // New functions only
const POLICY_BREAKING: u8 = 0x4;    // Full changes

###7. Chiến lược kiểm tra ####Chạy khô Localnet

sui client publish --upgrade-policy 7 --dry-run

####** Mô phỏng nâng cấp**

#[test_only]
module test {
    fun test_upgrade() {
        let (cap, _) = package::test_upgrade_cap();
        package::authorize_upgrade(&mut cap, ...);
        assert!(package::test_is_authorized(cap), 0);
    }
}

###Tác động kiến trúctur 1.** Quản trị phi tập trung (phi tập trung)**:

  • DAO có thể giữ mũ nâng cấp shared- Đề án đa sig thông qua các đối tượng

2.** Sẵn sàng cho doanh nghiệp**:

  • Triển khai theo giai đoạn với cờ chính sách
  • Khả năng thu hồi khẩn cấp

3.** Ưu điểm của Devex**:

  • Sửa lỗi sau triển khai
  • Di chuyển lưu trữ tiết kiệm khí

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

1
Bình luận
.
24p30p.
24p30p2042
Jul 30 2025, 15:46

Trong Sui, upgrade_caplà một đối tượng đặc biệt cho phép bạn nâng cấp gói Move đã xuất bản. Khi bạn triển khai một gói với--upgradeable, bạn sẽ tự động nhận được một UpgradeCapđối tượng được liên kết với nó. Đối tượng này hoạt động giống như một phiếu cấp phép — nếu không có nó, bạn không thể đẩy nâng cấp cho gói đó. Bạn cần giữ và ký với đối tượng này bất cứ khi nào bạn muốn nâng cấp mã, điều này làm cho nó trở thành một cơ chế kiểm soát truy cập mạnh mẽ để phát triển trên chuỗi.

Thiết kế này làm cho Sui khác với chuỗi EVM, nơi logic nâng cấp thường được xử lý thông qua các hợp đồng proxy và vai trò quản trị riêng biệt. Ở Sui, quyền nâng cấp được nung vào hệ thống đối tượng. Nếu bạn đang xây dựng bộ sưu tập NFT, hợp đồng DeFi hoặc bất kỳ hệ thống nào cần cập nhật trong tương lai, điều này UpgradeCapđảm bảo rằng chỉ nhà phát triển đáng tin cậy (hoặc multisig) với giới hạn đó mới có thể thúc đẩy những thay đổi đó, giảm khả năng nâng cấp trái phép.

Để tạo một gói có thể nâng cấp, hãy sử dụng Sui CLI:

sui client publish --path . --gas-budget 100000000 --with-unpublished-dependencies --upgradeable

Sau khi xuất bản, bạn sẽ thấy một upgrade_captrong đầu ra như sau:

"createdObjects": [
  {
    "objectType": "0x2::package::UpgradeCap",
    "objectId": "0xabc123...",
    ...
  }
]

Để nâng cấp gói sau này, hãy biên dịch nó thành bản .jsontổng hợp và chạy:

sui client upgrade --package-id <PACKAGE_ID> --module <PATH_TO_COMPILED_MODULE> --upgrade-capability <CAP_OBJECT_ID> --gas-budget 100000000

Đảm bảo ID đối tượng trong --upgrade-capabilitykhớp với ID bạn nhận được từ lần xuất bản đầu tiên. Nếu bạn mất đối tượng này hoặc quên bảo vệ nó (như bằng cách chuyển sang ví multisig), bất kỳ ai nhận được nó đều có thể sửa đổi hợp đồng của bạn.

Các lỗi phổ biến bao gồm quên lưu trữupgrade_cap, sử dụng bản tóm tắt không hợp lệ hoặc cố gắng nâng cấp gói không thể nâng cấp. Thực tiễn tốt nhất là bảo quản an upgrade_captoàn, đặc biệt là trong sản xuất và giám sát chặt chẽ trong quá trình kiểm toán.

Bạn có thể đọc thêm về upgrade_capvà nâng cấp gói bảo mật trong tài liệu chính thức của Sui: [https://docs.sui.io/build/package-upgrades](https://docs.sui.io/build/package-upgrades]

-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.

637Bài viết1665Câ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