GetObject gRPC Method
Parameters
object_id
string
REQUIRED
Loading...
read_mask
object
Loading...
paths
array
Loading...
Returns
object
object
Loading...
bcs
object
Loading...
name
string
Loading...
value
string
Loading...
objectId
string
Loading...
version
string
Loading...
digest
string
Loading...
owner
object
Loading...
kind
string
Loading...
version
string
Loading...
objectType
string
Loading...
hasPublicTransfer
boolean
Loading...
contents
object
Loading...
name
string
Loading...
value
string
Loading...
previousTransaction
string
Loading...
storageRebate
string
Loading...
Request
grpcurl \ -import-path . \ -proto sui/rpc/v2beta2/ledger_service.proto \ -H "x-token: YOUR_TOKEN_VALUE" \ -d '{ "object_id": "0x27c4fdb3b846aa3ae4a65ef5127a309aa3c1f466671471a806d8912a18b253e8", "read_mask": { "paths": [ "bcs", "object_id", "version", "digest", "owner", "object_type", "has_public_transfer", "contents", "previous_transaction", "storage_rebate" ] } }' \ docs-demo.sui-mainnet.quiknode.pro:9000 \ sui.rpc.v2beta2.LedgerService/GetObject
package main import ( "context" "crypto/tls" "encoding/json" "fmt" "log" "time" "google.golang.org/grpc" "google.golang.org/grpc/credentials" "google.golang.org/protobuf/encoding/protojson" "google.golang.org/protobuf/types/known/fieldmaskpb" pb "sui-grpc/sui/rpc/v2beta2" // Your Generated .pb.go files path ) // QuickNode endpoints consist of two crucial components: the endpoint name and the corresponding token // For eg: QN Endpoint: https://docs-demo.sui-mainnet.quiknode.pro/abcde123456789 // endpoint will be: docs-demo.sui-mainnet.quiknode.pro:9000 {9000 is the port number for Sui gRPC} // token will be : abcde123456789 var ( token = "YOUR_TOKEN_NUMBER" endpoint = "YOUR_QN_ENDPOINT:9000" ) // Auth structure for x-token type auth struct { token string } func (a *auth) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) { return map[string]string{ "x-token": a.token, }, nil } func (a *auth) RequireTransportSecurity() bool { return true } func main() { creds := credentials.NewTLS(&tls.Config{}) opts := []grpc.DialOption{ grpc.WithTransportCredentials(creds), grpc.WithPerRPCCredentials(&auth{token}), } conn, err := grpc.Dial(endpoint, opts...) if err != nil { log.Fatalf("Failed to connect: %v", err) } defer conn.Close() client := pb.NewLedgerServiceClient(conn) objectID := "0x27c4fdb3b846aa3ae4a65ef5127a309aa3c1f466671471a806d8912a18b253e8" fieldMask := &fieldmaskpb.FieldMask{ Paths: []string{ "bcs", "object_id", "version", "digest", "owner", "object_type", "has_public_transfer", "contents", "previous_transaction", "storage_rebate", }, } req := &pb.GetObjectRequest{ ObjectId: &objectID, ReadMask: fieldMask, } ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() resp, err := client.GetObject(ctx, req) if err != nil { log.Fatalf("GetObject failed: %v", err) } marshaler := protojson.MarshalOptions{ UseProtoNames: true, EmitUnpopulated: true, Indent: " ", } jsonBytes, err := marshaler.Marshal(resp) if err != nil { log.Fatalf("Failed to marshal response to JSON: %v", err) } var prettyJSON map[string]interface{} if err := json.Unmarshal(jsonBytes, &prettyJSON); err != nil { log.Fatalf("Failed to unmarshal JSON: %v", err) } formatted, err := json.MarshalIndent(prettyJSON, "", " ") if err != nil { log.Fatalf("Failed to format JSON: %v", err) } fmt.Println(string(formatted)) }
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/v2beta2/ledger_service.proto'); // QuickNode endpoints consist of two crucial components: the endpoint name and the corresponding token // For eg: QN Endpoint: https://docs-demo.sui-mainnet.quiknode.pro/abcde123456789 // endpoint will be: docs-demo.sui-mainnet.quiknode.pro:9000 {9000 is the port number for Sui gRPC} // token will be : abcde123456789 const endpoint = 'docs-demo.sui-mainnet.quiknode.pro:9000'; const token = 'abcde123456789'; // Load protobuf definitions const packageDefinition = protoLoader.loadSync(PROTO_PATH, { keepCase: true, longs: String, enums: String, defaults: true, oneofs: true, includeDirs: [path.join(__dirname, 'protos/proto')], }); const proto = grpc.loadPackageDefinition(packageDefinition) as any; const LedgerService = proto.sui.rpc.v2beta2.LedgerService; // Create secure client const client = new LedgerService(endpoint, grpc.credentials.createSsl()); // Metadata for authentication const metadata = new grpc.Metadata(); metadata.add('x-token', token); // Request setup const request = { object_id: '0x27c4fdb3b846aa3ae4a65ef5127a309aa3c1f466671471a806d8912a18b253e8', read_mask: { paths: [ 'bcs', 'object_id', 'version', 'digest', 'owner', 'object_type', 'has_public_transfer', 'contents', 'previous_transaction', 'storage_rebate', ], }, }; // Recursively convert byte arrays to hex function convertBytesToHex(obj: any): any { if (Array.isArray(obj)) { return obj.map(convertBytesToHex); } else if (obj && typeof obj === 'object') { const result: any = {}; for (const key of Object.keys(obj)) { const val = obj[key]; if (Buffer.isBuffer(val) || (Array.isArray(val) && typeof val[0] === 'number')) { result[key] = Buffer.from(val).toString('hex'); } else { result[key] = convertBytesToHex(val); } } return result; } return obj; } // Invoke GetObject client.GetObject(request, metadata, (err: grpc.ServiceError | null, response: any) => { if (err) { console.error('gRPC Error:', { code: err.code, message: err.message, details: err.details, }); } else { const decoded = convertBytesToHex(response); console.log('GetObject Response:'); console.log(JSON.stringify(decoded, null, 2)); } });
import grpc import json from google.protobuf.field_mask_pb2 import FieldMask from google.protobuf.json_format import MessageToDict from sui.rpc.v2beta2 import ledger_service_pb2, ledger_service_pb2_grpc def get_object(): # QuickNode endpoints consist of two crucial components: the endpoint name and the corresponding token # For eg: QN Endpoint: https://docs-demo.sui-mainnet.quiknode.pro/abcde123456789 # endpoint will be: docs-demo.sui-mainnet.quiknode.pro:9000 {9000 is the port number for Sui gRPC} # token will be: abcde123456789 endpoint = 'docs-demo.sui-mainnet.quiknode.pro:9000'; token = 'abcde123456789'; channel = grpc.secure_channel(endpoint, grpc.ssl_channel_credentials()) stub = ledger_service_pb2_grpc.LedgerServiceStub(channel) # Specify the object ID you want to retrieve # Replace with an actual Sui object ID object_id = "0x27c4fdb3b846aa3ae4a65ef5127a309aa3c1f466671471a806d8912a18b253e8" # Create a field mask to specify which fields to include in the response read_mask = FieldMask(paths=[ "bcs", "object_id", "version", "digest", "owner", "object_type", "has_public_transfer", "contents", "previous_transaction", "storage_rebate" ]) # Prepare the GetObjectRequest request = ledger_service_pb2.GetObjectRequest( object_id=object_id, read_mask=read_mask ) metadata = [("x-token", token)] return stub.GetObject(request, metadata=metadata) def parse_response_to_json(response): return json.dumps( MessageToDict(response, preserving_proto_field_name=True), indent=2 ) def main(): try: response = get_object() print(parse_response_to_json(response)) except grpc.RpcError as e: print(f"{e.code().name}: {e.details()}") if __name__ == "__main__": main()
Don't have an account yet?
Create your QuickNode endpoint in seconds and start building
Get started for free