GetCheckpoint gRPC Method
Parameters
sequence_number
string
Loading...
read_mask
object
Loading...
paths
array
Loading...
Returns
checkpoint
object
Loading...
sequenceNumber
string
Loading...
digest
string
Loading...
Request
1grpcurl \2-import-path . \3-proto sui/rpc/v2beta2/ledger_service.proto \4-H "x-token: YOUR_TOKEN_VALUE" \5-d '{6"sequence_number": "1000",7"read_mask": {8"paths": [9"sequence_number",10"digest"11]12}13}' \14docs-demo.sui-mainnet.quiknode.pro:9000 \15sui.rpc.v2beta2.LedgerService/GetCheckpoint16
1grpcurl \2-import-path . \3-proto sui/rpc/v2beta2/ledger_service.proto \4-H "x-token: YOUR_TOKEN_VALUE" \5-d '{6"sequence_number": "1000",7"read_mask": {8"paths": [9"sequence_number",10"digest"11]12}13}' \14docs-demo.sui-mainnet.quiknode.pro:9000 \15sui.rpc.v2beta2.LedgerService/GetCheckpoint16
1package main23import (4"context"5"crypto/tls"6"encoding/json"7"fmt"8"log"9"time"1011"google.golang.org/grpc"12"google.golang.org/grpc/credentials"13"google.golang.org/protobuf/encoding/protojson"14"google.golang.org/protobuf/types/known/fieldmaskpb"1516pb "sui-grpc/sui/rpc/v2beta2" // Your Generated .pb.go files path17)1819// Quicknode endpoints consist of two crucial components: the endpoint name and the corresponding token20// For eg: QN Endpoint: https://docs-demo.sui-mainnet.quiknode.pro/abcde12345678921// endpoint will be: docs-demo.sui-mainnet.quiknode.pro:9000 {9000 is the port number for Sui gRPC}22// token will be : abcde1234567892324var (25token = "YOUR_TOKEN_NUMBER"26endpoint = "YOUR_QN_ENDPOINT:9000"27)2829// Auth structure for x-token30type auth struct {31token string32}3334func (a *auth) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) {35return map[string]string{36"x-token": a.token,37}, nil38}3940func (a *auth) RequireTransportSecurity() bool {41return true42}4344func main() {45// TLS credentials46creds := credentials.NewTLS(&tls.Config{})47opts := []grpc.DialOption{48grpc.WithTransportCredentials(creds),49grpc.WithPerRPCCredentials(&auth{token}),50}5152conn, err := grpc.Dial(endpoint, opts...)53if err != nil {54log.Fatalf("Failed to connect: %v", err)55}56defer conn.Close()5758client := pb.NewLedgerServiceClient(conn)5960// Request for checkpoint with sequence_number = 100061seq := uint64(1000)62req := &pb.GetCheckpointRequest{63CheckpointId: &pb.GetCheckpointRequest_SequenceNumber{64SequenceNumber: seq,65},66ReadMask: &fieldmaskpb.FieldMask{67Paths: []string{"sequence_number", "digest"},68},69}7071ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)72defer cancel()7374resp, err := client.GetCheckpoint(ctx, req)75if err != nil {76log.Fatalf("GetCheckpoint failed: %v", err)77}7879marshaler := protojson.MarshalOptions{80UseProtoNames: true,81EmitUnpopulated: true,82Indent: " ",83}8485jsonBytes, err := marshaler.Marshal(resp)86if err != nil {87log.Fatalf("Failed to marshal: %v", err)88}8990var pretty map[string]interface{}91if err := json.Unmarshal(jsonBytes, &pretty); err != nil {92log.Fatalf("Failed to unmarshal: %v", err)93}9495formatted, _ := json.MarshalIndent(pretty, "", " ")96fmt.Println(string(formatted))97}98
1package main23import (4"context"5"crypto/tls"6"encoding/json"7"fmt"8"log"9"time"1011"google.golang.org/grpc"12"google.golang.org/grpc/credentials"13"google.golang.org/protobuf/encoding/protojson"14"google.golang.org/protobuf/types/known/fieldmaskpb"1516pb "sui-grpc/sui/rpc/v2beta2" // Your Generated .pb.go files path17)1819// Quicknode endpoints consist of two crucial components: the endpoint name and the corresponding token20// For eg: QN Endpoint: https://docs-demo.sui-mainnet.quiknode.pro/abcde12345678921// endpoint will be: docs-demo.sui-mainnet.quiknode.pro:9000 {9000 is the port number for Sui gRPC}22// token will be : abcde1234567892324var (25token = "YOUR_TOKEN_NUMBER"26endpoint = "YOUR_QN_ENDPOINT:9000"27)2829// Auth structure for x-token30type auth struct {31token string32}3334func (a *auth) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) {35return map[string]string{36"x-token": a.token,37}, nil38}3940func (a *auth) RequireTransportSecurity() bool {41return true42}4344func main() {45// TLS credentials46creds := credentials.NewTLS(&tls.Config{})47opts := []grpc.DialOption{48grpc.WithTransportCredentials(creds),49grpc.WithPerRPCCredentials(&auth{token}),50}5152conn, err := grpc.Dial(endpoint, opts...)53if err != nil {54log.Fatalf("Failed to connect: %v", err)55}56defer conn.Close()5758client := pb.NewLedgerServiceClient(conn)5960// Request for checkpoint with sequence_number = 100061seq := uint64(1000)62req := &pb.GetCheckpointRequest{63CheckpointId: &pb.GetCheckpointRequest_SequenceNumber{64SequenceNumber: seq,65},66ReadMask: &fieldmaskpb.FieldMask{67Paths: []string{"sequence_number", "digest"},68},69}7071ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)72defer cancel()7374resp, err := client.GetCheckpoint(ctx, req)75if err != nil {76log.Fatalf("GetCheckpoint failed: %v", err)77}7879marshaler := protojson.MarshalOptions{80UseProtoNames: true,81EmitUnpopulated: true,82Indent: " ",83}8485jsonBytes, err := marshaler.Marshal(resp)86if err != nil {87log.Fatalf("Failed to marshal: %v", err)88}8990var pretty map[string]interface{}91if err := json.Unmarshal(jsonBytes, &pretty); err != nil {92log.Fatalf("Failed to unmarshal: %v", err)93}9495formatted, _ := json.MarshalIndent(pretty, "", " ")96fmt.Println(string(formatted))97}98
1import * as grpc from '@grpc/grpc-js';2import * as protoLoader from '@grpc/proto-loader';3import * as path from 'path';45const PROTO_PATH = path.join(__dirname, 'protos/proto/sui/rpc/v2beta2/ledger_service.proto');67// Quicknode endpoints consist of two crucial components: the endpoint name and the corresponding token8// For eg: QN Endpoint: https://docs-demo.sui-mainnet.quiknode.pro/abcde1234567899// endpoint will be: docs-demo.sui-mainnet.quiknode.pro:9000 {9000 is the port number for Sui gRPC}10// token will be : abcde1234567891112const endpoint = 'docs-demo.sui-mainnet.quiknode.pro:9000';13const token = 'abcde123456789';1415// Load protobuf definitions16const packageDefinition = protoLoader.loadSync(PROTO_PATH, {17keepCase: true,18longs: String,19enums: String,20defaults: true,21oneofs: true,22includeDirs: [path.join(__dirname, 'protos/proto')],23});24const proto = grpc.loadPackageDefinition(packageDefinition) as any;25const LedgerService = proto.sui.rpc.v2beta2.LedgerService;2627// Create secure client28const client = new LedgerService(endpoint, grpc.credentials.createSsl());2930// Metadata for authentication31const metadata = new grpc.Metadata();32metadata.add('x-token', token);3334const request = {35sequence_number: 1000, // Replace as needed36read_mask: {37paths: ['sequence_number', 'digest'],38},39};4041client.GetCheckpoint(request, metadata, (err: grpc.ServiceError | null, response: any) => {42if (err) {43console.error('gRPC Error:', {44code: err.code,45message: err.message,46details: err.details,47});48} else {49console.log('Checkpoint Response:');50console.log(JSON.stringify(response, null, 2));51}52});53
1import * as grpc from '@grpc/grpc-js';2import * as protoLoader from '@grpc/proto-loader';3import * as path from 'path';45const PROTO_PATH = path.join(__dirname, 'protos/proto/sui/rpc/v2beta2/ledger_service.proto');67// Quicknode endpoints consist of two crucial components: the endpoint name and the corresponding token8// For eg: QN Endpoint: https://docs-demo.sui-mainnet.quiknode.pro/abcde1234567899// endpoint will be: docs-demo.sui-mainnet.quiknode.pro:9000 {9000 is the port number for Sui gRPC}10// token will be : abcde1234567891112const endpoint = 'docs-demo.sui-mainnet.quiknode.pro:9000';13const token = 'abcde123456789';1415// Load protobuf definitions16const packageDefinition = protoLoader.loadSync(PROTO_PATH, {17keepCase: true,18longs: String,19enums: String,20defaults: true,21oneofs: true,22includeDirs: [path.join(__dirname, 'protos/proto')],23});24const proto = grpc.loadPackageDefinition(packageDefinition) as any;25const LedgerService = proto.sui.rpc.v2beta2.LedgerService;2627// Create secure client28const client = new LedgerService(endpoint, grpc.credentials.createSsl());2930// Metadata for authentication31const metadata = new grpc.Metadata();32metadata.add('x-token', token);3334const request = {35sequence_number: 1000, // Replace as needed36read_mask: {37paths: ['sequence_number', 'digest'],38},39};4041client.GetCheckpoint(request, metadata, (err: grpc.ServiceError | null, response: any) => {42if (err) {43console.error('gRPC Error:', {44code: err.code,45message: err.message,46details: err.details,47});48} else {49console.log('Checkpoint Response:');50console.log(JSON.stringify(response, null, 2));51}52});53
1import grpc2import json3from google.protobuf.field_mask_pb2 import FieldMask4from google.protobuf.json_format import MessageToDict5from sui.rpc.v2beta2 import ledger_service_pb2, ledger_service_pb2_grpc678def get_checkpoint():9# Quicknode endpoints consist of two crucial components: the endpoint name and the corresponding token10# For eg: QN Endpoint: https://docs-demo.sui-mainnet.quiknode.pro/abcde12345678911# endpoint will be: docs-demo.sui-mainnet.quiknode.pro:9000 {9000 is the port number for Sui gRPC}12# token will be: abcde1234567891314endpoint = 'docs-demo.sui-mainnet.quiknode.pro:9000';15token = 'abcde123456789';1617channel = grpc.secure_channel(endpoint, grpc.ssl_channel_credentials())18stub = ledger_service_pb2_grpc.LedgerServiceStub(channel)1920# You can specify a checkpoint by sequence_number or digest21# Using sequence_number here as an example22sequence_number = 1000 # Replace with the actual checkpoint sequence number you want to retrieve2324# Create a field mask to specify which fields to include in the response25read_mask = FieldMask(paths=[26"sequence_number",27"digest"28])2930# Prepare the GetCheckpointRequest31request = ledger_service_pb2.GetCheckpointRequest(32sequence_number=sequence_number,33read_mask=read_mask34)3536metadata = [("x-token", token)]3738return stub.GetCheckpoint(request, metadata=metadata)394041def parse_response_to_json(response):42return json.dumps(43MessageToDict(response, preserving_proto_field_name=True),44indent=245)464748def main():49try:50response = get_checkpoint()51print(parse_response_to_json(response))52except grpc.RpcError as e:53print(f"{e.code().name}: {e.details()}")545556if __name__ == "__main__":57main()58
1import grpc2import json3from google.protobuf.field_mask_pb2 import FieldMask4from google.protobuf.json_format import MessageToDict5from sui.rpc.v2beta2 import ledger_service_pb2, ledger_service_pb2_grpc678def get_checkpoint():9# Quicknode endpoints consist of two crucial components: the endpoint name and the corresponding token10# For eg: QN Endpoint: https://docs-demo.sui-mainnet.quiknode.pro/abcde12345678911# endpoint will be: docs-demo.sui-mainnet.quiknode.pro:9000 {9000 is the port number for Sui gRPC}12# token will be: abcde1234567891314endpoint = 'docs-demo.sui-mainnet.quiknode.pro:9000';15token = 'abcde123456789';1617channel = grpc.secure_channel(endpoint, grpc.ssl_channel_credentials())18stub = ledger_service_pb2_grpc.LedgerServiceStub(channel)1920# You can specify a checkpoint by sequence_number or digest21# Using sequence_number here as an example22sequence_number = 1000 # Replace with the actual checkpoint sequence number you want to retrieve2324# Create a field mask to specify which fields to include in the response25read_mask = FieldMask(paths=[26"sequence_number",27"digest"28])2930# Prepare the GetCheckpointRequest31request = ledger_service_pb2.GetCheckpointRequest(32sequence_number=sequence_number,33read_mask=read_mask34)3536metadata = [("x-token", token)]3738return stub.GetCheckpoint(request, metadata=metadata)394041def parse_response_to_json(response):42return json.dumps(43MessageToDict(response, preserving_proto_field_name=True),44indent=245)464748def main():49try:50response = get_checkpoint()51print(parse_response_to_json(response))52except grpc.RpcError as e:53print(f"{e.code().name}: {e.details()}")545556if __name__ == "__main__":57main()58
Don't have an account yet?
Create your Quicknode endpoint in seconds and start building
Get started for free