Move.

Hỏi đáp Chuyên Gia

Hỏi đáp với các chuyên gia trong cộng đồng Move

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.

Bài viết

125
  • FUNLOP431.
    Aug 13, 2025
    Hỏi đáp Chuyên Gia

    Làm chủ Move trên Sui Network: Hướng dẫn đầy đủ cho người mới bắt đầu và người xây dựng

    Nếu bạn đã tham gia phát triển blockchain, có lẽ bạn đã nhận thấy sự chú ý ngày càng tăng vềSui Networkvà ngôn ngữ lập trình độc đáo của nó -* Move*. Đây không chỉ là một “ngôn ngữ hợp đồng thông minh” khác cạnh tranh để giành sự chú ý của nhà phát triển. Move mang đến một cách suy nghĩ hoàn toàn khác về lập trình blockchain - một cách nhanh chóng, an toàn và hoàn hảo cho các ứng dụng dựa trên tài sản. Trong bài đăng này, bạn sẽ tìm hiểu sâu về Move on Sui**— cách thức hoạt động của nó, tại sao nó lại khác biệt và cách bạn có thể bắt đầu xây dựng dựa trên nó. Chúng tôi cũng sẽ khám phá những sai lầm phổ biến, các phương pháp hay nhất và các mẹo thực tế để thành công. ##1. Move là gì và tại sao Sui sử dụng nó? Move là một ngôn ngữ lập trình dựa trên bytecodeban đầu được phát triển bởi Meta (trước đây là Facebook) cho blockchain Libra/Diem. Sui đã áp dụng Move nhưng đã mở rộng và tối ưu hóa nó để phù hợp với mô hình dữ liệu tập trung vào đối tượng**của nó. Về cốt lõi, Move được thiết kế để* quản lý tài sản kỹ thuật số một cách an toàn. Các ngôn ngữ hợp đồng thông minh truyền thống như Solidity coi tài sản là con số trong số dư tài khoản - nhưng trong Move, tài sản là* công dân hạng nhất**. Điều này có nghĩa là: Tài sản* không thể vô tình sao lợp*. Tài sản* không thể bị mất*mà không phá hủy chúng một cách rõ ràng. Tài sản* phải có quyền sở hữu rõ ràng*. Triết lý này giúp bạn dễ dàng suy luận về an toàn tài sản và ngăn chặn các lỗi và hack phổ biến. Tại sao Sui chọn Move: An toàn:** Quyền sở hữu tài sản được thực thi ở cấp độ ngôn ngữ. Tốc độ:** Chương trình di chuyển chạy nhanh và tránh tính toán không cần thiết. Tính linh hoạt:** Bạn có thể tạo các loại tài sản tùy chỉnh ngoài các mã thông báo đơn giản. Thực thi song song:** Kiến trúc của Sui cho phép Move code xử lý các giao dịch song song, tăng thông lượng. ##2. Cách thức hoạt động của Move trên Sui Trong khi các blockchain khác thực hiện các giao dịch tuần tự, Sui tổ chức dữ liệu thànhđối tượng. Mỗi đối tượng: Cóchủ sở hữu(có thể là người dùng, đối tượng khác hoặc hệ thống). Chỉ có thể được sửa đổi bởi chủ sở hữu của nó hoặc bởi các chức năng Di chuyển cụ thể. Có một ID duy nhất. Di chuyển trên Tùy có ba khái niệm chính: 1.* Đối tượng* Mọi thứ được lưu trữ trên chuỗi là một đối tượng. Các đối tượng được lưu trữ và sửa đổi bởi các mô-đun Move. Ví dụ: một đồng xu, một NFT, một nhân vật trò chơi. 2.* Các mô-đun* Container cho Move code. Xác định các loại, hàm và quy tắc cho cách các đối tượng hoạt động. 3.Giao dịch Hành động người dùng thực hiện. Gọi chức năng Move, truyền vào các đối tượng mà chúng sở hữu. ##3. So sánh chuyển đổi với sự vững chất | Tính năng | Di chuyển (Sui) | Solidity (Ethereum) | | ------------------------------------------------------------------| -------------------------------------------| |Trọng tâm chính| An toàn tài sản, quyền sở hữu | Logic hợp đồng thông minh chung | |Mô hình dữ liệu| Dựa trên đối tượng | Dựa trên tài khoản | |Thực dụng| Song song (khi không có đối tượng xung đột) | Trình tự | |Loại an toàn| Gõ mạnh, tài nguyên không thể sao chép/thả | Hệ thống loại lỏng hơn | |Bảo mật| Ngăn chặn chi tiêu gấp đôi và tổn thất tài sản ngoài ý muốn | Các vấn đề thường gặp: tái nhập cảnh, tràn số nguyên | Nếu bạn đến từ Solidity, bạn sẽ nhận thấy rằng Move* buộc bạn*phải rõ ràng về việc xử lý tài sản. Điều này đôi khi gây khó chịu lúc đầu, nhưng đó cũng là lý do tại sao các chương trình Move khó khai thác hơn. ##4. Viết mô-đun di chuyển đầu tiên của bạn trên Sui Hãy xem qua một ví dụ Move cơ bản: một mô-đun tạo và chuyển mã thông báo tùy chỉnh. ###Tạo Token module my_project::my_coin { use sui::coin; use sui::transfer; use sui::tx_context::{self, TxContext}; /// Create a new coin type struct MyCoin has drop, store {} /// Initialize a new coin and send it to the transaction sender public entry fun mint(ctx: &mut TxContext) { let coin = coin::mint(1000, ctx); transfer::transfer(coin, tx_context::sender(ctx)); } } Giải thích: struct MyCoinxác định một loại tiền xu mới. mintchức năng tạo 1.000 đơn vị MyCoinvà chuyển chúng cho người gửi. cung TxContextcấp quyền truy cập vào chi tiết giao dịch (như ai đã gửi nó). ##5. Các loại tài nguyên của Move - The Secret Sauce Move giới thiệucác loại tài lượng, là* cấu trúc dữ liệu không thể sao chép, không thể sao chép*. Trong thuật ngữ hàng ngày: nếu bạn có một tờ tiền 10 đô la, bạn không thể chỉ “sao chép” nó - bạn có thể giữ nó hoặc cho đi. Tài nguyên hoạt động theo cùng một cách. Đang di chuyển: struct MyCoin has key, store { value: u64 } key**- Có thể được lưu trữ như một đối tượng cấp cao nhất. store**- Có thể được lưu trữ bên trong một đối tượng khác. Nếu bạn cố gắng sao chép**một tài nguyên, trình biên dịch sẽ từ chối biên dịch mã của bạn. Điều này ngăn chặn các lỗi trong đó tài sản vô tình được nhân bản. ##6. Phần mở rộng di chuyển dành riêng cho Sui Sui đã thực hiện một số thay đổi đối với vanilla Move để tối ưu hóa nó chothực thi dựa trên đối tượng: Trường đối tượng động:** Bạn có thể thêm trường vào đối tượng sau khi chúng được tạo. Đối tượng được chia sẻ:** Nhiều người dùng có thể tương tác với cùng một đối tượng. Tham chiếu có thể thay đổi:** Cho phép thay đổi dữ liệu đối tượng theo cách có kiểm soát. Phát xạ sự kiện:** Các mô-đun di chuyển có thể phát ra các sự kiện cho người nghe ngoài chuỗi. Ví dụ: tạo bảng xếp hạng trò chơi được chia sẻ: struct Leaderboard has key { scores: vector } Điều này có thể được cập nhật bởi nhiều người chơi mà không gây ra tắc nghẽn trên toàn blockchain. ##7. Quy trình phát triển Dưới đây là quy trình làm việc cơ bản để phát triển với Move on Sui: 1.* Cài đặt Sui CLI* curl -fsSL https://sui.io/install.sh | bash 2.* Tạo gói Move mới* sui move new my_project sourcesViết mô-đun của bạntrong thư mục. 4.* Xây dựng gói của bạn* sui move build 5.* Xuất bản lên Sui* sui client publish --gas-budget 100000000 6.* Chức năng gọi*sử dụng: sui client call --package --module my_module --function my_function ##8. Kiểm tra mã di chuyển của bạn Sui Move hỗ trợ kiểm tra đơn vị ngay trong ngôn ngữ. Ví dụ: #[test] fun test_mint() { let ctx = test::new_tx_context(@0x1); my_project::my_coin::mint(&mut ctx); // Add assertions here } Chạy thử nghiệm: sui move test ##9. Những sai lầm thường gặp của người mới bắt đầu Quên truyền txContext**- Nhiều chức năng cần &mut TxContexttạo hoặc chuyển các đối tượng. Hiểu lầm quyền sở hữu đối tượng**- Nếu bạn không sở hữu nó, bạn không thể biến đổi nó. Không xử lý phá hủy tài sản**- Bạn phải rõ ràng “phá hủy” tài nguyên mà bạn không cần nữa. Xuất bản mà không có phiên bản**- Cập nhật mô-đun có nghĩa là xuất bản một phiên bản mới. ##10. Các phương pháp hay nhất cho Move on Sui Sử dụng các quy tắc đặt tên rõ ràng**- Làm cho mã có thể đọc được. Giới hạn sử dụng đối tượng được chia sẻ**- Chúng chậm hơn các đối tượng sở hữu. Phát ra các sự kiện cho các thay đổi trạng thường**- Giúp lập chỉ mục ngoài chuỗi. Viết bài kiểm tra kỹ lưỡng — Trình biên dịch bắt được rất nhiều, nhưng lỗi logic vẫn xảy ra. Tài liệu các mô-đun của bạn**- Tương lai bạn sẽ cảm ơn bạn. ##**11. Các trường hợp sử dụng trong thế giới thực Tài sản trò chơi**- Mỗi thanh kiếm, da hoặc thú cưng có thể là một đối tượng độc đáo. Thị trường NFT**- Chuyển nhượng và đấu giá an toàn với kiểm tra quyền sở hữu tích hợp. Giao thức DeFi**- Cho vay, đặt cược và hoán đổi bằng cách xử lý tài sản an toàn. Theo dõi chuỗi cung phần**- Thể hiện hàng hóa dưới dạng các đối tượng di chuyển qua hệ thống. ##12. Tương lai của Move on Sui Ngôn ngữ Move của Sui vẫn đang phát triển. Công việc hiện tại bao gồm: Tốt hơn* công cụ nhà phát triển*. Thư viện tiêu chuẩn**cho các mẫu thông thường. Khả năng tương thống**với các blockchain khác. Khi việc áp dụng ngày càng tăng, chúng ta có thể mong đợi tài liệu phong phú hơn, các dự án mã nguồn mở lớn hơn và tích hợp sâu hơn với cơ sở hạ tầng Web3. ##Suy nghĩ cuối cùng Nếu bạn nghiêm túc trong việc xây dựng các ứng dụng blockchain an toàn, hiệu suất cao, thì Move on Sui đáng để bạn chú ý. Thiết kế nghiêm ngặt nhưng hợp lý của nó giúp bạn tránh được toàn bộ các loại lỗi trong khi cho phép các trường hợp sử dụng sáng tạo không thể thực hiện được trên các chuỗi dựa trên tài khoản truyền thống. Cho dù bạn đang tạo giao thức DeFi, trò chơi hay hệ sinh thái NFT phức tạp, Move cung cấp cho bạncác khối xây dựng cho tương lai blockchain an toàn hơn, nhanh hơn.

    • Move CLI
    • Move
    • Smart Contract
    0
    1
  • Forever_A-gator.
    Apr 11, 2025
    Hỏi đáp Chuyên Gia

    Làm thế nào để tạo mã byte có thể đọc được cho Move với Miden Assembly?

    Tôi đang cố gắng thử nghiệm viết trình biên dịch Move bằng cách sử dụng Miden Assembly làm mục tiêu trình biên dịch. Tôi muốn tạo mã byte có thể đọc được cho chương trình Move đã biên dịch. Có cách nào đơn giản để đạt được điều này không?

    • Move CLI
    0
    3
  • elfDani.
    Apr 11, 2025
    Hỏi đáp Chuyên Gia

    Các mô-đun có thể tạo ra nhiều đồng xu trên chuỗi một cách liền mạch không?

    Tôi đang làm việc trên một mô-đun cho các thị trường dự đoán và cần nó để tạo ra các đồng tiền trên chuỗi thông qua một lớp nhà máy theo cách không cho phép và có thể xác minh được. Hiện tại, các mô-đun có những hạn chế như chỉ có một đồng xu cho mỗi mô-đun do One Time Witness, điều đó có nghĩa là tôi phải tạo một tiêu chuẩn tiền xu tương đương mà ví của người dùng không nhận ra là coin. Chúng ta có thể giải quyết vấn đề này trong bản cập nhật tiếp theo không?

    • Move CLI
    • Move Module
    0
    3
  • skywinder.
    Apr 10, 2025
    Hỏi đáp Chuyên Gia

    Chức năng gốc là gì và chúng ta có thể gọi chúng trực tiếp không?

    Tôi đã bắt gặp thuật ngữ 'chức năng gốc 'trong Move nhưng không thể tìm thấy thông tin chi tiết về nó. Tôi nghe nói rằng chúng được khai báo trong Move nhưng được xác định bên ngoài, thường là trong Rust. Điều đó có nghĩa là chúng là các chức năng nội bộ không thể được gọi trực tiếp bằng ví hoặc các mô-đun khác?

    • Move CLI
    • Move
    0
    3
  • kryptoschain.
    Apr 10, 2025
    Hỏi đáp Chuyên Gia

    Làm thế nào để chuyển một đối tượng thuộc sở hữu của một đối tượng khác?

    Tôi đang phải đối mặt với một vấn đề với việc chuyển một đối tượng A, thuộc sở hữu của đối tượng B và đối tượng B thuộc sở hữu của tôi. Tôi gặp lỗi cho biết giao dịch không được ký bởi ngư��i gửi chính xác. Có ai biết cách giải quyết vấn đề này và nhận đúng đối tượng A không?

    • Move CLI
    • Move
    0
    3
  • Pluto Dev👽.
    Apr 10, 2025
    Hỏi đáp Chuyên Gia

    Chuyển đổi khóa công khai sang địa chỉ Sui trong Sui Move

    Tôi đang cố gắng chuyển đổi khóa công khai thành địa chỉ Sui bằng Sui Move nhưng không thể tìm thấy bất kỳ chức năng tích hợp nào. Tôi hiểu nó rất quan trọng đối với công việc của tôi. Ai đó có thể giải thích chính xác làm thế nào để thực hiện chuyển đổi này?

    • Move CLI
    0
    2
  • yhant3.
    Apr 07, 2025
    Hỏi đáp Chuyên Gia

    Làm thế nào để đảm bảo chỉ chủ sở hữu NFT mới có thể chuyển giao nó trong hợp đồng?

    Này mọi người! Tôi đang thực hiện hợp đồng NFT và muốn đảm bảo rằng chỉ chủ sở hữu hợp pháp của NFT mới có thể chuyển giao nó. Tôi có chức năng này để chuyển: public fun transfer( nft: DevNetNFT, recipient: address, _: &mut TxContext ) { transfer::public_transfer(nft, recipient) } Việc kiểm tra này có được thực hiện trong public_transferphương thức không, hay tôi cần thêm logic bổ sung?

    • Move CLI
    0
    3
  • Britain.
    Apr 07, 2025
    Hỏi đáp Chuyên Gia

    Làm thế nào để lấy giá trị từ ObjectTable bằng cách sử dụng Trường động?

    dynamicFieldObjectTôi đang cố gắng tìm nạp các giá trị từ ObjectTable bằng cách sử dụng Trường động từ giao diện người dùng, nhưng tôi gặp lỗi. Lỗi nóiUnexpected arg String("gms") for the expected type Struct(MoveStructLayout...). Làm thế nào tôi có thể nhận được loại chính xác cho giá trị và tránh lỗi này?

    • Move CLI
    • Move
    0
    3
  • Raju.
    Raju158
    Apr 06, 2025
    Hỏi đáp Chuyên Gia

    Làm thế nào để kiểm tra một hàm với tham số Nhận trong Sui?

    Tôi đang cố gắng kiểm tra receive_objectchức năng với một Receivingtham số trong Sui dựa trên các tài liệu tại [liên kết] này (https://docs.sui.io/concepts/transfers/transfer-to-object#receive-shared-example). Ban đầu, tôi đã tạo một bài kiểm tra bằng cách sử dụng ví dụ, nhưng tôi đang vật lộn với cách làm cho đối số đã gửi thành một Receivingkiểu. Tôi cũng đã thử biểu thị loại nhận, nhưng gặp lỗi. Ai đó có thể hướng dẫn tôi kiểm tra đúng chức năng này không?

    • Move CLI
    • Move
    0
    4
  • Santorini.
    Apr 06, 2025
    Hỏi đáp Chuyên Gia

    Làm thế nào tôi có thể sao chép một vector <u64>để sử dụng nhiều lần?

    Tôi đang cố gắng sao chép một vectơ vào một biến cục bộ vì tôi cần hai trường hợp của cùng một vectơ cho dự án của mình. Tôi đã thấy một số phương pháp, nhưng tôi không hoàn toàn chắc chắn làm thế nào để thực hiện chúng một cách chính xác. Có ai có thể hướng dẫn tôi về các phương pháp hay phương pháp tốt nhất để đạt được điều này trong ngôn ngữ lập trình Move không?

    • Move CLI
    • Move
    0
    4
Chiến dịch phần thưởngTháng Tám
Các thẻ hàng đầu
  • Move CLI
  • Move
  • Move Module
  • Move Bug
  • Smart Contract
  • Move Script
  • Move Prover
  • Feature Request