Bài viết
Chia sẻ kiến thức của bạn.
Gọi hàm từ Move Module: Phương pháp và Thực tiễn tốt nhất
Xin chào, tôi đang cố gắng gọi một hàm (make_sword) từ mô-đun Move với địa chỉ 0x4c6cccd6bc62eac9a9d023b6fa671d8f8c7eaf8ae7e67fae89d26883360dd89d
trong MOVE. Có thể gọi các hàm từ các mô-đun Di chuyển khác nhau không và nếu có, tôi có thể sử dụng phương pháp hoặc cách tiếp cận nào? Có khái niệm nào tương tự như giao diện trong Solidity để đạt được điều này không?
- Move
- Move Module
Câu trả lời
2Có, có thể gọi các hàm từ (các) mô-đun Di chuyển. Có một số phương pháp bạn có thể sử dụng để đạt được điều này:
-
moveCall
Chức năng: Bạn có thể sử dụng hàm Unsafe_MoveCall để gọi các hàm từ (các) mô-đun Move khác. Phương pháp này cho phép bạn thực hiện cuộc gọi trực tiếp đến các chức năng cụ thể bằng cách sử dụng curl. Bạn có thể tìm thêm chi tiết trong tài liệu ở đây. Tuy nhiên, hãy thận trọng khi sử dụng phương pháp này vì nó được dán nhãn là “không an toàn”. -
Trên CLI: Một tùy chọn khác là sử dụng Sui CLI, nơi bạn có thể gọi các hàm từ các mô-đun khác bằng lệnh sui client call [args + params]. Điều này cung cấp một cách có cấu trúc và thân thiện hơn để tương tác với (các) mô-đun Move.
Khi thử nghiệm các phương pháp này, hãy đảm bảo rằng bạn đang làm việc trên testnet hoặc devnet, vì thực hiện cuộc gọi sẽ yêu cầu gas, ngay cả trong quá trình thử nghiệm. Điều cần thiết là phải lưu ý đến việc sử dụng gas và tuân thủ các phương pháp hay nhất trong khi thực hiện các cuộc gọi này. Nếu bạn có thêm câu hỏi hoặc cần hỗ trợ với một cách tiếp cận khác, vui lòng hỏi họ tại đây;
Có, có thể gọi các hàm từ các mô-đun khác nhau trong Move. Để làm điều này, bạn cần có quyền truy cập vào mã nguồn của mô-đun mà bạn muốn gọi hàm từ đó. Điều này là do Move yêu cầu mã nguồn của mô-đun Move để biên dịch và liên kết nó vào chương trình của bạn.
Nếu mã nguồn của mô-đun nằm trong kho git, bạn có thể chỉ định kho git và đường dẫn đến mã nguồn trong tệp Move.toml của bạn như sau:
[dependencies.other]
git = 'https://github.com/banool/move-examples.git'
rev = 'main'
subdir = 'call_other_module/other'
If the source code is local, you can specify the path to the source code in your Move.toml file:
[dependencies.other]
local = "../other"
Nếu bạn không có mã nguồn, bạn có thể thử tải xuống bằng lệnh aptos move download. Đối số --account phải là địa chỉ của mô-đun bạn muốn tải xuống:
tải về aptos move -- account 6286dfd5e2778ec069d5906cd774efdba93ab2bec71550fa69363482fbd814e7
--package other
Khi bạn có quyền truy cập vào mã nguồn của mô-đun, bạn có thể gọi hàm như sau:0x4c6cccd6bc62eac9a9d023b6fa671d8f8c7eaf8ae7e67fae89d26883360dd89d::make_sword()
;
Trong ví dụ này, 0x4c6cccd6bc62eac9a9d023b6fa671d8f8c7eaf8ae7e67fae89d26883360dd89d
là địa chỉ của mô-đun và make_sword
là hàm bạn muốn gọi.
Về câu hỏi của bạn về giao diện trong Move, không có giao diện trực tiếp tương đương với giao diện của Solidity. Tuy nhiên, Move có một khái niệm tương tự với các công cụ sửa đổi khả năng hiển thị công khai và công khai (bạn bè). Một hàm công cộng có thể được gọi bởi bất kỳ hàm nào được xác định trong bất kỳ mô-đun hoặc tập lệnh nào. Một hàm công khai (bạn bè) chỉ có thể được gọi bởi các hàm được xác định trong các mô-đun được chỉ định rõ ràng trong danh sách bạn bè của mô-đun xác định hàm move-language.github.io.
Dưới đây là một ví dụ về cách sử dụng các công cụ sửa đổi khả năng hiển thị này:
address 0x42 {
module m {
friend 0x42::n; // friend declaration
public(friend) fun foo(): u64 { 0 }
fun calls_foo(): u64 { foo() } // valid
}
module n {
fun calls_m_foo(): u64 {
0x42::m::foo() // valid
}
}
module other {
fun calls_m_foo(): u64 {
0x42::m::foo() // ERROR!
// ^^^^^^^^^^^^ 'foo' can only be called from a 'friend' of module '0x42::m'
}
}
}
script {
fun calls_m_foo(): u64 {
0x42::m::foo() // ERROR!
// ^^^^^^^^^^^^ 'foo' can only be called from a 'friend' of module '0x42::m'
}
}
Trong ví dụ này, hàm foo chỉ có thể được gọi từ mô-đun n vì nó được khai báo là một hàm public (friend) trong mô-đun m và n được liệt kê là một bạn của m.
Bạn có biết câu trả lời không?
Hãy đăng nhập và chia sẻ nó.