Sui.

Bài viết

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

Tiền thưởng+10

Peera Admin.
Mar 05, 2025
Hỏi đáp Chuyên Gia

Nhiều lỗi xác minh nguồn” trong các ấn phẩm về mô-đun Sui Move - Giải quyết lỗi tự động

Các nhà phát triển làm việc với Sui Move thường gặp phải các vấn đề liên quan đến “Tìm thấy nhiều lỗi xác minh nguồn” khi cố gắng xuất bản hoặc nâng cấp các mô-đun. Những lỗi này xảy ra do sự không phù hợp giữa các phụ thuộc cục bộ và các đối tác trên chuỗi của chúng, dẫn đến các ấn phẩm không thành công và các thách thức triển khai. Dưới đây là một ví dụ tổng hợp về các lỗi mà các nhà phát triển phải đối mặt:

Failed to publish the Move module(s), reason: [warning] Multiple source verification errors found:
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000002::Sui::vec_set
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000002::Sui::vec_map
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000001::MoveStdlib::bit_vector
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000001::MoveStdlib::ascii
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000002::Sui::hex
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000002::Sui::zklogin_verified_id
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000002::Sui::prover
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000002::Sui::coin
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000002::Sui::dynamic_field
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000002::Sui::transfer
- On-chain version of dependency Sui::zklogin_verified_id was not found.
- On-chain version of dependency Sui::zklogin_verified_issuer was not found.
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000002::Sui::tx_context
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000002::Sui::transfer_policy
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000002::Sui::kiosk

Vấn đề này thường phát sinh do:

  1. Các phiên bản không phù hợp giữa môi trường phát triển địa phương (ví dụ: Sui CLI) và trạng thái trên chuỗi.
  2. Sự khác biệt trong cấu hình gói trên các mạng (ví dụ: Mainnet so với Testnet).
  3. Thiếu hoặc lỗi thời các phụ thuộc trong môi trường trên chuỗi.

Các câu hỏi chính

  • Làm thế nào chúng ta có thể tự động hóa việc phát hiện và giải quyết các sự không phù hợp phụ thuộc này trong quá trình xuất bản?
  • Những công cụ hoặc tập lệnh nào có thể được phát triển để đảm bảo rằng các phụ thuộc cục bộ luôn phù hợp với các đối tác trên chuỗi của chúng?
  • Có cách nào để hợp lý hóa quy trình này bằng cách tích hợp kiểm tra phụ thuộc vào các đường ống CI/CD hiện có hoặc tăng cường Sui SDK không?

Nhiệm vụ của bạn là đề xuất một giải pháp giải quyết những thách thức này, đảm bảo triển khai mượt mà và đáng tin cậy hơn cho các nhà phát triển Sui Move. Đảm bảo đăng giải pháp của bạn bên dưới.

  • Sui
  • SDKs and Developer Tools
5
5
Chia sẻ
Bình luận
.

Câu trả lời

5
0xduckmove.
Mar 7 2025, 09:09

Hãy để tôi giải thích giải pháp và cách giải quyết**"Lỗi xác minh nhiều nguồn**” mà bạn gặp phải trong Sui Move khi xuất bản hoặc nâng cấp các mô-đun. Khi bạn phát triển các mô-đun Sui Move cục bộ, bạn chỉ định các phụ thuộc trong tệp Move.toml của mình, như sau:

[dependencies]
Sui = { git = "https://github.com/MystenLabs/sui", subdir = "crates/sui-framework", rev = "some-revision" }

Trường rev cho biết phiên bản cụ thể (một nhánh, thẻ hoặc hash commit) của khung Sui mà bạn đang sử dụng.

Nếu phiên bản này không khớp với những gì được triển khai trên blockchain cho mạng mục tiêu của bạn, bạn sẽ gặp lỗi xác minh trong quá trình xuất bản hoặc nâng cấp. Ví dụ: blockchain có thể đang sử dụng phiên bản cũ Sui::vec_sethơn mã cục bộ của bạn hoặc một mô-đun tương tự có Sui::zklogin_verified_idthể không được xuất bản trên mạng bạn đang nhắm mục tiêu.

Giải pháp của tôi là tập lệnh Bash cập nhật tệp Move.toml của bạn với bản sửa đổi chính xác của khung Sui dựa trên mạng mục tiêu của bạn và sau đó xác minh thiết lập bằng cách xây dựng gói của bạn. Lưu nó như update-deps.shtrong thư mục dự án của bạn (nơi Move.toml được đặt).

#!/bin/bash

# Function to get the latest commit hash for the network-specific branch
get_latest_rev() {
    network=$1
    case $network in
        "testnet")
            branch="framework/testnet"
            ;;
        "devnet")
            branch="framework/devnet"
            ;;
        "mainnet")
            branch="main"
            ;;
        *)
            echo "Invalid network specified. Use 'testnet', 'devnet', or 'mainnet'."
            exit 1
            ;;
    esac
    # Fetch the latest commit hash from the specified branch
    rev=$(git ls-remote https://github.com/MystenLabs/sui $branch | cut -f1)
    if [ -z "$rev" ]; then
        echo "Failed to fetch revision for branch $branch."
        exit 1
    fi
    echo $rev
}

# Function to update Move.toml with the correct revision
update_move_toml() {
    network=$1
    rev=$(get_latest_rev $network)
    # Update the rev field in Move.toml for the Sui dependency
    sed -i "s/rev = .*/rev = \"$rev\"/" Move.toml
    echo "Updated Move.toml with rev = $rev for $network"
}

# Main function
main() {
    if [ $# -ne 1 ]; then
        echo "Usage: $0 <network> (e.g., testnet, devnet, mainnet)"
        exit 1
    fi
    network=$1
    update_move_toml $network
    # Attempt to build the package
    if ! sui move build; then
        echo "Build failed. Please check for missing dependencies or other issues."
    else
        echo "Build successful. You can now publish the package."
    fi
}

# Run the main function with provided arguments
main "$@"

Bạn có thể chạy Run chmod +x update-deps.shvà thực thi nó với mạng mục tiêu của mình. như ./update-deps.sh testnet

Vì vậy, đây là phần ra trong thiết bị đầu cuối của bạn:

harryphan@MacBook-Pro-2 hello % ./update-deps.sh testnet

Updated Move.toml with rev = 556b6e14896a09f95e7cf460bc8220a3bf997979 for testnet
UPDATING GIT DEPENDENCY https://github.com/MystenLabs/sui.git
INCLUDING DEPENDENCY Sui
INCLUDING DEPENDENCY MoveStdlib
BUILDING hello
Build successful. You can now publish the package.
7
Câu trả lời hay nhất
Bình luận
.
md rifat hossen.
Jun 19 2025, 17:22

Câu trả lời của tôi (với +10 tiền thưởng):

Để tự động tránh “Lỗi xác minh nhiều nguồn” trong triển khai mô-đun Sui Move, tôi khuyên bạn nên làm theo quy trình giải quyết tự động sau:


🛠️ Giải pháp từng bước:

  1. Đồng bộ hóa với phiên bản On-chain

Trước khi xuất bản, Move.toml của bạn phải khớp với bản sửa đổi khung chính xác được sử dụng trên mạng mục tiêu (Testnet, Devnet hoặc Mainnet).

Nếu không, sự không khớp phụ thuộc như Sui: :vec_set hoặc Sui: :transfer_policy sẽ gây ra lỗi xuất bản.


  1. Sử dụng tập lệnh tự động hóa

Tạo một tập lệnh bash có tên update-deps.sh mà:

✅ Lấy mã băm sửa đổi chính xác cho mạng ✅ Cập nhật sự phụ thuộc Move.toml của bạn ✅ Xây dựng lại gói của bạn để kiểm tra khả năng tương thích

#! /bin/bash

get_latest_rev () { mạng = $1 trường hợp $network in “testnet”) nhánh = “framework/testnet”;; “devnet”) nhánh = “framework/devnet”;; “mainnet”) nhánh = “chính”;; *) echo “Mạng không hợp lệ! Sử dụng: testnet/devnet/mainnet”; thoát 1;; esac

rev = $ (git ls-remote https://github.com/MystenLabs/sui $ nhánh | cắt -f1) echo $ rev }

cập nhật_move_toml () { rev = $ (get_latest_rev $1) nhưng -i “s/rev =. */rev =\ "$rev\”/” Move.toml echo "✅ Đã cập nhật Move.toml với rev = $ rev” }

chính () { [$# -ne 1] && echo “Cách sử dụng: $0" && thoát 1 cập nhật_move_toml $1 sui move build && echo "✅ Xây dựng thành công. Sẵn sàng xuất bản!” || echo "❌ Xây dựng không thành công. Kiểm tra sự phụ thuộc.” }

chính “$@”


✅ Cách sử dụng:

chmod+x update-deps.sh . mạng thử nghiệm /update-deps.sh

Điều này đảm bảo môi trường địa phương của bạn sử dụng các phiên bản Sui và MovestDlib chính xác được triển khai trên chuỗi.


🚀 Mẹo bổ sung:

Tích hợp CI/CD: Thêm tập lệnh này vào quy trình làm việc GitHub Actions của bạn trước khi xuất bản sui move.

Ghi nhật ký lỗi: Nhật ký phiên bản không khớp để giúp phát hiện nâng cấp nhanh hơn.

An toàn mô-đun: Không bao giờ thay đổi các trường cấu trúc công cộng hoặc thứ tự nâng cấp - Sui sẽ từ chối chúng.


Bằng cách tự động hóa đồng bộ hóa phụ thuộc, bạn loại bỏ nguyên nhân #1 gây ra lỗi xác minh mô-đun - và tăng tốc độ triển khai sản xuất.


Gửi bởi: md rifat hossen Hãy cho tôi biết nếu bạn muốn điều này được dịch sang tiếng Bangla hoặc cũng muốn một ví dụ CI/CD YAML ✅

2
Bình luận
.
BigDev.
Aug 15 2025, 16:31

Dưới đây là cách giải thích và giải quyết “Lỗi xác minh nhiều nguồn” trong Sui Move khi xuất bản hoặc nâng cấp:

Những lỗi này thường xảy ra do phiên bản Sui framework cục bộ của bạn (từ Move.toml) không khớp với những gì blockchain mục tiêu (Testnet, Devnet, Mainnet) đang sử dụng. Sự không khớp đó dẫn đến lỗi xác thực — đặc biệt nếu các mô-đun như Sui: :vec_set hoặc Sui: :zklogin_verified_id không có hoặc khác nhau về mã byte giữa các phiên bản.

Để khắc phục, hãy cập nhật rev trong phần [dependencies] của bạn để khớp chính xác với bản sửa đổi được triển khai trên chuỗi cho mạng bạn đang nhắm mục tiêu. Thay vì thực hiện thủ công, hãy sử dụng tập lệnh Bash được cung cấp (update-deps.sh) để tự động hóa quy trình.

Kịch bản này: • Lấy hash commit mới nhất từ nhánh bên phải (framework/testnet, framework/devnet hoặc main). • Cập nhật giá trị rev trong Move.toml. • Xây dựng gói bằng cách sử dụng sui move build để xác nhận rằng thiết lập hợp lệ.

Ví dụ sử dụng:

chmod+x update-deps.sh . mạng thử nghiệm /update-deps.sh

Bạn sẽ nhận được đầu ra như:

Cập nhật Move.toml với rev = 556b6e14896a09f95e7cf460bc8220a3bf997979 cho testnet CẬP NHẬT PHỤ THUỘC GIT https://github.com/MystenLabs/sui.git BAO GỒM PHỤ THUỘC Sui BAO GỒM SỰ PHỤ THUỘC MOVESTDlib XÂY DỰNG xin chào Xây dựng thành công. Bây giờ bạn có thể xuất bản gói.

Điều này đảm bảo bản dựng cục bộ của bạn khớp với thời gian chạy của chuỗi, tránh lỗi xác minh nguồn

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