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

MovePackageService/ListPackageVersions - SUI

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

Returns all versions of a Move package. Move packages on Sui can be upgraded; each upgrade produces a new package object with an incremented version. This method returns the history.

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

Request Fields

Field
Type
Required
Description

package_id

ObjectId

Yes

32-byte ID of any version of the package (typically the original)

page_size

uint32

No

Maximum versions per page

page_token

string

No

Pagination token from a previous response

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",
    "page_size": 20
}' \
  go.getblock.io:443/<ACCESS-TOKEN> \
  sui.rpc.v2.MovePackageService/ListPackageVersions
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",
    "page_size": 20
};

client.ListPackageVersions(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

versions

repeated PackageVersion

Package versions, ordered by version number

versions[].package_id

ObjectId

Object ID of this version (each upgrade produces a new object)

versions[].version

string

Version number

versions[].previous_transaction

string

Digest of the transaction that published this version

next_page_token

string

Pagination cursor; empty when no more pages

Use Cases

  • Auditing package upgrade history

  • Detecting compromised packages by tracking unexpected upgrades

  • Tooling that needs to pin against a specific package version

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 does not exist

SDK Integration

Was this helpful?