For the complete documentation index, see llms.txt. This page is also available as Markdown.

MovePackageService/GetDatatype - SUI

Example code for the MovePackageService/GetDatatype gRPC method. Complete guide on how to use MovePackageService/GetDatatype gRPC method in GetBlock Web3 documentation.

Returns the definition of a Move struct or enum — its fields, type parameters, and abilities (copy, drop, store, key). Useful for ABI introspection and decoding raw Move values.

Service: sui.rpc.v2.MovePackageService Proto file: sui/rpc/v2/move_package_service.proto Full method path: sui.rpc.v2.MovePackageService/GetDatatype

Request Fields

Field
Type
Required
Description

package_id

ObjectId

Yes

32-byte package ID

module_name

string

Yes

Module name within the package

type_name

string

Yes

Datatype (struct or enum) name

Request Example

# Clone the official proto files first (one-time setup):
#   git clone https://github.com/MystenLabs/sui-apis.git && cd sui-apis

grpcurl \
  -import-path proto \
  -proto sui/rpc/v2/move_package_service.proto \
  -H "x-grpc-web: 1" \
  -d '{
    "package_id": "0x0000000000000000000000000000000000000000000000000000000000000002",
    "module_name": "coin",
    "type_name": "Coin"
}' \
  go.getblock.io:443/<ACCESS-TOKEN> \
  sui.rpc.v2.MovePackageService/GetDatatype
import * as grpc from '@grpc/grpc-js';
import * as protoLoader from '@grpc/proto-loader';
import * as path from 'path';

const PROTO_PATH = path.join(__dirname, 'protos/proto/sui/rpc/v2/move_package_service.proto');
const ACCESS_TOKEN = '<ACCESS-TOKEN>';

const packageDef = protoLoader.loadSync(PROTO_PATH, {
    includeDirs: [path.join(__dirname, 'protos/proto')],
    keepCase: true, longs: String, enums: String, defaults: true,
});
const proto = grpc.loadPackageDefinition(packageDef) as any;
const ServiceClient = proto.sui.rpc.v2.MovePackageService;

const metadata = new grpc.Metadata();
metadata.add('authorization', `Bearer ${ACCESS_TOKEN}`);

const client = new ServiceClient('go.getblock.io:443', grpc.credentials.createSsl());

const request = {
    "package_id": "0x0000000000000000000000000000000000000000000000000000000000000002",
    "module_name": "coin",
    "type_name": "Coin"
};

client.GetDatatype(request, metadata, (err: any, response: any) => {
    if (err) {
        console.error('Error:', err);
        return;
    }
    console.log(JSON.stringify(response, null, 2));
});

Response Example

Responses are encoded in Protocol Buffers binary format on the wire. The example below shows the protobuf JSON encoding for readability.

Response Fields

Field
Type
Description

datatype.name

string

Echoed type name

datatype.type_parameters

repeated TypeParameter

Generic type parameters with their constraints

datatype.abilities

repeated string

Move abilities — combinations of copy, drop, store, key

datatype.kind

string

struct or enum

datatype.fields

repeated Field

For structs: field name and type. For enums: variant info

Use Cases

  • Decoding raw Move values returned from GetObject

  • Move IDE auto-completion and type checking

  • Building ABI viewers for deployed packages

Error Handling

gRPC uses status codes rather than JSON-RPC numeric error codes. The most relevant for this method:

Status Code
Numeric
Cause

UNAUTHENTICATED

16

Missing or invalid <ACCESS-TOKEN> in the URL path

INVALID_ARGUMENT

3

Request fields are missing, malformed, or fail validation

UNAVAILABLE

14

Node is overloaded or temporarily unable to handle the request — retry with backoff

DEADLINE_EXCEEDED

4

Request did not complete within the timeout window

RESOURCE_EXHAUSTED

8

Rate limit exceeded for your plan

NOT_FOUND

5

Package, module, or datatype not found

SDK Integration

Was this helpful?