Move.

Bài viết

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

Steven.
Nov 16, 2023
Hỏi đáp Chuyên Gia

Làm thế nào để đọc giá trị trả về không đổi từ một hàm di chuyển bằng cách sử dụng BCS trong Sui TS SDK?

Tôi có một hàm Move trả về một giá trị không đổi như sau:

const FEE: u64 = 1_000_000

public fun fee(): u64 {
    FEE
}
When I make a moveCall using the Sui TS SDK, I receive encoded values like this:

javascript
Copy code
returnValues: [
    [
        [ 64, 66, 15, 0, 0, 0, 0, 0 ], "u64"
    ]
]

Tôi hiểu rằng tôi cần giải mã các giá trị này bằng thư viện BCS để có được đầu ra có thể đọc được. Tuy nhiên, tôi không chắc làm thế nào để đạt được điều này. Tôi đã cố gắng sử dụng bcs.registerStructType, nhưng có vẻ như cách tiếp cận này không hoạt động vì giá trị trả về không phải là một cấu trúc.

Ai đó có thể vui lòng cung cấp hướng dẫn về cách giải mã và đọc giá trị trả về không đổi này bằng cách sử dụng thư viện BCS trong SDK Sui TS không?

  • Move
  • Move Script
0
2
Chia sẻ
Bình luận
.

Câu trả lời

2
Jeremy.
Nov 16 2023, 13:49

Bạn không cần phải đăng ký kiểu cấu trúc để giải mã giá trị u64 bằng thư viện BCS (Binary Canonical Serialization). Bạn có thể trực tiếp giải mã giá trị được mã hóa bằng phương pháp bcs.decode. Dưới đây là cách bạn có thể giải mã và đọc giá trị trả về không đổi trong trường hợp của bạn:

const bcs = require('bcs'); // Import the BCS library

const encodedValue = Uint8Array.from([ 64, 66, 15, 0, 0, 0, 0, 0 ]); // Encoded value received from the moveCall

const decodedValue = bcs.decode('u64', encodedValue); // Decode the u64 value

console.log('Decoded result:', decodedValue); // Output: Decoded result: 1000000

Trong đoạn code trên, hàm bcs.decode lấy kiểu 'u64' và giá trị được mã hóa làm đầu vào và trả về kết quả được giải mã. Giá trị được giải mã sẽ là 1000000 trong trường hợp này, tương ứng với giá trị hằng số được trả về bởi hàm Move của bạn.

0
Bình luận
.
Steven.
Nov 16 2023, 13:53

Thư viện Binary Canonical Serialization (BCS) trong ngôn ngữ hợp đồng thông minh Move cung cấp một cách để mã hóa và giải mã cấu trúc dữ liệu. Trong trường hợp của bạn, bạn muốn giải mã giá trị u64 từ một mảng byte được mã hóa. Bạn có thể thực hiện việc này trực tiếp bằng cách sử dụng bcs.decodephương pháp, như bạn đã hiển thị trong đoạn mã của mình.

const bcs = require('bcs'); // Import the BCS library

const encodedValue = Uint8Array.from([ 64, 66, 15, 0, 0, 0, 0, 0 ]); // Encoded value received from the moveCall

const decodedValue = bcs.decode('u64', encodedValue); // Decode the u64 value

console.log('Decoded result:', decodedValue); // Output: Decoded result: 1000000

Trong mã này, bạn đang sử dụng bcs.decodehàm để giải mã giá trị u64 từ một mảng byte được mã hóa. H bcs.decodeàm có hai đối số: loại giá trị để giải mã ('u64' trong trường hợp này) và mảng byte được mã hóa. Nó trả về giá trị được giải mã.

Ch bcs.decodeức năng này là một phần của thư viện BCS, là một triển khai JavaScript của định dạng chuỗi nhị phân của ngôn ngữ Move. Thư viện này cho phép bạn mã hóa và giải mã Move dữ liệu cấu trúc trong JavaScript.

Xin lưu ý rằng mã này giả định rằng mảng byte được mã hóa đại diện cho giá trị u64. Nếu mảng byte được mã hóa đại diện cho một loại giá trị khác, bạn sẽ cần phải thay đổi đối số kiểu thànhbcs.decode.

Ngoài ra, bcs.decodehàm sẽ gây ra lỗi nếu mảng byte được mã hóa không phải là mã hóa hợp lệ của loại được chỉ định. Do đó, bạn nên sử dụng khối try/catch để xử lý các lỗi tiềm ẩn digitalocean.com.

Tóm lại, bạn có thể giải mã giá trị u64 từ một mảng byte được mã hóa bằng bcs.decodephương pháp của thư viện BCS trong ngôn ngữ hợp đồng thông minh Move. Đi���u này cho phép bạn tương tác với cấu trúc dữ liệu Move trong JavaScript.

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

Move is an executable bytecode language used to implement custom transactions and smart contracts.

148Bài viết231Câ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 Sáu
Chúng tôi sử dụng cookie để đảm bảo bạn có trải nghiệm tốt nhất trên trang web của chúng tôi.
Thêm thông tin