BatchGetObjects gRPC Method
Paramètres
requests
tableau
OBLIGATOIRE
Chargement en cours...
read_mask
objet
Chargement en cours...
paths
tableau
Chargement en cours...
Retours
objects
tableau
Chargement en cours...
objet
objet
Chargement en cours...
bcs
objet
Chargement en cours...
nom
chaîne de caractères
Chargement en cours...
valeur
chaîne de caractères
Chargement en cours...
objectId
chaîne de caractères
Chargement en cours...
version
chaîne de caractères
Chargement en cours...
digest
chaîne de caractères
Chargement en cours...
owner
objet
Chargement en cours...
kind
chaîne de caractères
Chargement en cours...
version
chaîne de caractères
Chargement en cours...
objectType
chaîne de caractères
Chargement en cours...
hasPublicTransfer
booléen
Chargement en cours...
contents
objet
Chargement en cours...
nom
chaîne de caractères
Chargement en cours...
valeur
chaîne de caractères
Chargement en cours...
previousTransaction
chaîne de caractères
Chargement en cours...
storageRebate
chaîne de caractères
Chargement en cours...
Demande
1grpcurl \2-import-path . \3-proto sui/rpc/v2/ledger_service.proto \4-H "x-token: YOUR_TOKEN_VALUE" \5-d '{6"requests": [7{ "object_id": "0x27c4fdb3b846aa3ae4a65ef5127a309aa3c1f466671471a806d8912a18b253e8" }8],9"read_mask": {10"paths": [11"bcs",12"object_id",13"version",14"digest",15"owner",16"object_type",17"has_public_transfer",18"contents",19"previous_transaction",20"storage_rebate"21]22}23}' \24docs-demo.sui-mainnet.quiknode.pro:9000 \25sui.rpc.v2.LedgerService/BatchGetObjects
1grpcurl \2-import-path . \3-proto sui/rpc/v2/ledger_service.proto \4-H "x-token: YOUR_TOKEN_VALUE" \5-d '{6"requests": [7{ "object_id": "0x27c4fdb3b846aa3ae4a65ef5127a309aa3c1f466671471a806d8912a18b253e8" }8],9"read_mask": {10"paths": [11"bcs",12"object_id",13"version",14"digest",15"owner",16"object_type",17"has_public_transfer",18"contents",19"previous_transaction",20"storage_rebate"21]22}23}' \24docs-demo.sui-mainnet.quiknode.pro:9000 \25sui.rpc.v2.LedgerService/BatchGetObjects
1paquet principal23import (4« contexte »5« crypto/tls »6« encoding/json »7« fmt »8« journal »9« temps »1011« google.golang.grpc »12« google.golang.grpc »13"google.golang.org/protobuf/encoding/protojson"14"google.golang.org/protobuf/types/known/fieldmaskpb"1516pb "sui-grpc/sui/rpc/v2" // 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)2829type auth struct {30jeton chaîne de caractères31}3233func (a *auth) GetRequestMetadata(ctx contexte.Context, uri ...chaîne) (carte[chaîne]chaîne, erreur) {34return map[string]string{"x-token": a.token}, nil35}36func (a *auth) RequireTransportSecurity() bool {37return true38}3940func main() {41creds := credentials.NewTLS(&tls.Config{})42opts := []grpc.DialOption{43grpc.WithTransportCredentials(creds),44grpc.Avec les identifiants RPCC(&auth{token}),45}4647conn, err := grpc.Composer(endpoint, opts...)48si err != nil {49log.Fatalf("Failed to connect: %v", err)50}51reporter conn.Fermer()5253client := pb.NewLedgerServiceClient(conn)5455// Object ID to fetch56objectID := "0x27c4fdb3b846aa3ae4a65ef5127a309aa3c1f466671471a806d8912a18b253e8"5758// Build request with field mask59req := &pb.BatchGetObjectsRequest{60Requests: []*pb.GetObjectRequest{61{62ObjectId: &objectID,63},64},65ReadMask: &fieldmaskpb.FieldMask{66Paths: []string{67"object_id",68"version",69"digest",70"owner",71"object_type",72"has_public_transfer",73"contents",74"previous_transaction",75"storage_rebate",76"bcs",77},78},79}8081ctx, annuler := context.WithTimeout(contexte.Arrière-plan(), 10*temps.Deuxième)82reporter annuler()8384resp, err := client.BatchGetObjects(ctx, req)85si err != nil {86log.Fatalf("BatchGetObjects failed: %v", err)87}8889// Pretty print the response90marshaler := protojson.MarshalOptions{91UseProtoNames: true,92EmitUnpopulated: true,93Indent: " ",94}9596jsonBytes, err := marshaler.Marshal(resp)97si err != nil {98log.Fatalf("Failed to marshal: %v", err)99}100101var pretty map[string]interface{}102if err := json.Unmarshal(jsonBytes, &pretty); err != nil {103log.Fatalf("Failed to parse JSON: %v", err)104}105106out, _ := json.MarshalIndent(pretty, "", " ")107fmt.Println(string(out))108}109
1paquet principal23import (4« contexte »5« crypto/tls »6« encoding/json »7« fmt »8« journal »9« temps »1011« google.golang.grpc »12« google.golang.grpc »13"google.golang.org/protobuf/encoding/protojson"14"google.golang.org/protobuf/types/known/fieldmaskpb"1516pb "sui-grpc/sui/rpc/v2" // 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)2829type auth struct {30jeton chaîne de caractères31}3233func (a *auth) GetRequestMetadata(ctx contexte.Context, uri ...chaîne) (carte[chaîne]chaîne, erreur) {34return map[string]string{"x-token": a.token}, nil35}36func (a *auth) RequireTransportSecurity() bool {37return true38}3940func main() {41creds := credentials.NewTLS(&tls.Config{})42opts := []grpc.DialOption{43grpc.WithTransportCredentials(creds),44grpc.Avec les identifiants RPCC(&auth{token}),45}4647conn, err := grpc.Composer(endpoint, opts...)48si err != nil {49log.Fatalf("Failed to connect: %v", err)50}51reporter conn.Fermer()5253client := pb.NewLedgerServiceClient(conn)5455// Object ID to fetch56objectID := "0x27c4fdb3b846aa3ae4a65ef5127a309aa3c1f466671471a806d8912a18b253e8"5758// Build request with field mask59req := &pb.BatchGetObjectsRequest{60Requests: []*pb.GetObjectRequest{61{62ObjectId: &objectID,63},64},65ReadMask: &fieldmaskpb.FieldMask{66Paths: []string{67"object_id",68"version",69"digest",70"owner",71"object_type",72"has_public_transfer",73"contents",74"previous_transaction",75"storage_rebate",76"bcs",77},78},79}8081ctx, annuler := context.WithTimeout(contexte.Arrière-plan(), 10*temps.Deuxième)82reporter annuler()8384resp, err := client.BatchGetObjects(ctx, req)85si err != nil {86log.Fatalf("BatchGetObjects failed: %v", err)87}8889// Pretty print the response90marshaler := protojson.MarshalOptions{91UseProtoNames: true,92EmitUnpopulated: true,93Indent: " ",94}9596jsonBytes, err := marshaler.Marshal(resp)97si err != nil {98log.Fatalf("Failed to marshal: %v", err)99}100101var pretty map[string]interface{}102if err := json.Unmarshal(jsonBytes, &pretty); err != nil {103log.Fatalf("Failed to parse JSON: %v", err)104}105106out, _ := json.MarshalIndent(pretty, "", " ")107fmt.Println(string(out))108}109
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/v2/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});2425const proto = grpc.loadPackageDefinition(packageDefinition) as any;26const LedgerService = proto.sui.rpc.v2.LedgerService;2728// Create secure client29const client = new LedgerService(endpoint, grpc.credentials.createSsl());3031// Add token metadata32const metadata = new grpc.Metadata();33metadata.add('x-token', token);3435// Request payload36const request = {37requests: [38{39object_id: '0x27c4fdb3b846aa3ae4a65ef5127a309aa3c1f466671471a806d8912a18b253e8',40},41],42read_mask: {43paths: [44'bcs',45'object_id',46'version',47'digest',48'owner',49'object_type',50'has_public_transfer',51'contents',52'previous_transaction',53'storage_rebate',54],55},56};5758// Recursively decode Uint8Array or Buffer fields to hex59function decodeBytesFields(obj: any): any {60if (Array.isArray(obj)) {61return obj.map(decodeBytesFields);62} else if (obj && typeof obj === 'object') {63const result: any = {};64for (const key of Object.keys(obj)) {65const val = obj[key];66if (val instanceof Uint8Array) {67result[key] = Buffer.from(val).toString('hex');68} else if (val && val.type === 'Buffer' && Array.isArray(val.data)) {69result[key] = Buffer.from(val.data).toString('hex');70} else {71result[key] = decodeBytesFields(val);72}73}74return result;75} else {76return obj;77}78}7980// Perform gRPC call81client.BatchGetObjects(request, metadata, (err: grpc.ServiceError | null, response: any) => {82if (err) {83console.error('gRPC Error:', {84code: err.code,85message: err.message,86details: err.details,87});88} else {89const decoded = decodeBytesFields(response);90console.log('BatchGetObjects Response:');91console.log(JSON.stringify(decoded, null, 2));92}93});94
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/v2/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});2425const proto = grpc.loadPackageDefinition(packageDefinition) as any;26const LedgerService = proto.sui.rpc.v2.LedgerService;2728// Create secure client29const client = new LedgerService(endpoint, grpc.credentials.createSsl());3031// Add token metadata32const metadata = new grpc.Metadata();33metadata.add('x-token', token);3435// Request payload36const request = {37requests: [38{39object_id: '0x27c4fdb3b846aa3ae4a65ef5127a309aa3c1f466671471a806d8912a18b253e8',40},41],42read_mask: {43paths: [44'bcs',45'object_id',46'version',47'digest',48'owner',49'object_type',50'has_public_transfer',51'contents',52'previous_transaction',53'storage_rebate',54],55},56};5758// Recursively decode Uint8Array or Buffer fields to hex59function decodeBytesFields(obj: any): any {60if (Array.isArray(obj)) {61return obj.map(decodeBytesFields);62} else if (obj && typeof obj === 'object') {63const result: any = {};64for (const key of Object.keys(obj)) {65const val = obj[key];66if (val instanceof Uint8Array) {67result[key] = Buffer.from(val).toString('hex');68} else if (val && val.type === 'Buffer' && Array.isArray(val.data)) {69result[key] = Buffer.from(val.data).toString('hex');70} else {71result[key] = decodeBytesFields(val);72}73}74return result;75} else {76return obj;77}78}7980// Perform gRPC call81client.BatchGetObjects(request, metadata, (err: grpc.ServiceError | null, response: any) => {82if (err) {83console.error('gRPC Error:', {84code: err.code,85message: err.message,86details: err.details,87});88} else {89const decoded = decodeBytesFields(response);90console.log('BatchGetObjects Response:');91console.log(JSON.stringify(decoded, null, 2));92}93});94
1import grpc2import json3from google.protobuf.field_mask_pb2 import FieldMask4from google.protobuf.json_format import MessageToDict5from sui.rpc.v2 import ledger_service_pb2, ledger_service_pb2_grpc678def batch_get_objects():910# Quicknode endpoints consist of two crucial components: the endpoint name and the corresponding token11# For eg: QN Endpoint: https://docs-demo.sui-mainnet.quiknode.pro/abcde12345678912# endpoint will be: docs-demo.sui-mainnet.quiknode.pro:9000 {9000 is the port number for Sui gRPC}13# token will be : abcde1234567891415endpoint = 'docs-demo.sui-mainnet.quiknode.pro:9000';16token = 'abcde123456789';1718channel = grpc.secure_channel(endpoint, grpc.ssl_channel_credentials())19stub = ledger_service_pb2_grpc.LedgerServiceStub(channel)2021object_id = "0x27c4fdb3b846aa3ae4a65ef5127a309aa3c1f466671471a806d8912a18b253e8"2223# Define valid read_mask field paths from Object message24read_mask = FieldMask(paths=[25"bcs",26"object_id",27"version",28"digest",29"owner",30"object_type",31"has_public_transfer",32"contents",33"previous_transaction",34"storage_rebate"35])3637request = ledger_service_pb2.BatchGetObjectsRequest(38requests=[ledger_service_pb2.GetObjectRequest(object_id=object_id)],39read_mask=read_mask40)4142metadata = [("x-token", token)]4344return stub.BatchGetObjects(request, metadata=metadata)454647def parse_response_to_json(response):48return json.dumps(49MessageToDict(response, preserving_proto_field_name=True),50indent=251)525354def main():55try:56response = batch_get_objects()57print(parse_response_to_json(response))58except grpc.RpcError as e:59print(f"{e.code().name}: {e.details()}")606162if __name__ == "__main__":63main()64
1import grpc2import json3from google.protobuf.field_mask_pb2 import FieldMask4from google.protobuf.json_format import MessageToDict5from sui.rpc.v2 import ledger_service_pb2, ledger_service_pb2_grpc678def batch_get_objects():910# Quicknode endpoints consist of two crucial components: the endpoint name and the corresponding token11# For eg: QN Endpoint: https://docs-demo.sui-mainnet.quiknode.pro/abcde12345678912# endpoint will be: docs-demo.sui-mainnet.quiknode.pro:9000 {9000 is the port number for Sui gRPC}13# token will be : abcde1234567891415endpoint = 'docs-demo.sui-mainnet.quiknode.pro:9000';16token = 'abcde123456789';1718channel = grpc.secure_channel(endpoint, grpc.ssl_channel_credentials())19stub = ledger_service_pb2_grpc.LedgerServiceStub(channel)2021object_id = "0x27c4fdb3b846aa3ae4a65ef5127a309aa3c1f466671471a806d8912a18b253e8"2223# Define valid read_mask field paths from Object message24read_mask = FieldMask(paths=[25"bcs",26"object_id",27"version",28"digest",29"owner",30"object_type",31"has_public_transfer",32"contents",33"previous_transaction",34"storage_rebate"35])3637request = ledger_service_pb2.BatchGetObjectsRequest(38requests=[ledger_service_pb2.GetObjectRequest(object_id=object_id)],39read_mask=read_mask40)4142metadata = [("x-token", token)]4344return stub.BatchGetObjects(request, metadata=metadata)454647def parse_response_to_json(response):48return json.dumps(49MessageToDict(response, preserving_proto_field_name=True),50indent=251)525354def main():55try:56response = batch_get_objects()57print(parse_response_to_json(response))58except grpc.RpcError as e:59print(f"{e.code().name}: {e.details()}")606162if __name__ == "__main__":63main()64
Vous n'avez pas encore de compte ?
Créez votreendpoint Quicknode endpoint quelques secondes et commencez à développer
Commencez gratuitement