BatchGetObjects gRPC Method
参数
requests
数组
必填
正在加载...
read_mask
对象
正在加载...
paths
数组
正在加载...
退货
objects
数组
正在加载...
对象
对象
正在加载...
bcs
对象
正在加载...
名称
字符串
正在加载...
值
字符串
正在加载...
objectId
字符串
正在加载...
版本
字符串
正在加载...
摘要
字符串
正在加载...
owner
对象
正在加载...
kind
字符串
正在加载...
版本
字符串
正在加载...
objectType
字符串
正在加载...
hasPublicTransfer
布尔型
正在加载...
contents
对象
正在加载...
名称
字符串
正在加载...
值
字符串
正在加载...
previousTransaction
字符串
正在加载...
storageRebate
字符串
正在加载...
请求
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.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.mainnet.quiknode.pro:9000 \25sui.rpc.v2.LedgerService/BatchGetObjects
1包 main23import (4"上下文"5"crypto/tls"6"encoding/json"7"fmt"8“日志”9“时间”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 = "您的令牌编号"26endpoint = "您的QN端点:9000"27)2829类型 auth 结构体 {30token 字符串31}3233func (a *auth) GetRequestMetadata(ctx 上下文.Context, uri ...字符串) (map[字符串]字符串, error) {34return map[string]string{"x-token": a.token}, nil35}36func (a *auth) RequireTransportSecurity() bool {37返回 true38}3940func main() {41creds := credentials.NewTLS(&tls.Config{})42opts := []grpc.DialOption{43grpc.WithTransportCredentials(creds),44grpc.WithPerRPCCredentials(&auth{令牌}),45}4647conn, err := grpc.Dial(endpoint, opts...)48如果 err != nil {49log.Fatalf("连接失败:%v", err)50}51推迟 conn.关闭()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, 取消 := context.带超时(context.Background(), 10*时间.第二次)82推迟 取消()8384resp, err := client.BatchGetObjects(ctx, req)85如果 err != nil {86log.Fatalf("BatchGetObjects failed: %v", err)87}8889// Pretty print the response90marshaler := protojson.MarshalOptions{91UseProtoNames: true,92EmitUnpopulated: true,93缩进: " ",94}9596jsonBytes, err := marshaler.Marshal(resp)97如果 err != nil {98log.Fatalf(“序列化失败:%v”, err)99}100101var pretty map[字符串]接口{}102if err := json.Unmarshal(jsonBytes, &pretty); err != nil {103log.Fatalf(“无法解析 JSON:%v”, err)104}105106out, _ := json.MarshalIndent(pretty, "", " ")107fmt.Println(字符串(out))108}109
1包 main23import (4"上下文"5"crypto/tls"6"encoding/json"7"fmt"8“日志”9“时间”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 = "您的令牌编号"26endpoint = "您的QN端点:9000"27)2829类型 auth 结构体 {30token 字符串31}3233func (a *auth) GetRequestMetadata(ctx 上下文.Context, uri ...字符串) (map[字符串]字符串, error) {34return map[string]string{"x-token": a.token}, nil35}36func (a *auth) RequireTransportSecurity() bool {37返回 true38}3940func main() {41creds := credentials.NewTLS(&tls.Config{})42opts := []grpc.DialOption{43grpc.WithTransportCredentials(creds),44grpc.WithPerRPCCredentials(&auth{令牌}),45}4647conn, err := grpc.Dial(endpoint, opts...)48如果 err != nil {49log.Fatalf("连接失败:%v", err)50}51推迟 conn.关闭()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, 取消 := context.带超时(context.Background(), 10*时间.第二次)82推迟 取消()8384resp, err := client.BatchGetObjects(ctx, req)85如果 err != nil {86log.Fatalf("BatchGetObjects failed: %v", err)87}8889// Pretty print the response90marshaler := protojson.MarshalOptions{91UseProtoNames: true,92EmitUnpopulated: true,93缩进: " ",94}9596jsonBytes, err := marshaler.Marshal(resp)97如果 err != nil {98log.Fatalf(“序列化失败:%v”, err)99}100101var pretty map[字符串]接口{}102if err := json.Unmarshal(jsonBytes, &pretty); err != nil {103log.Fatalf(“无法解析 JSON:%v”, err)104}105106out, _ := json.MarshalIndent(pretty, "", " ")107fmt.Println(字符串(out))108}109
1import * 作为 grpc from grpc;2import * 作为 protoLoader from grpc;3import * 作为 路径 from '路径';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.mainnet.quiknode.pro:9000';13const 令牌 = 'abcde123456789';1415// Load protobuf definitions16const 包定义 = protoLoader.loadSync(PROTO_PATH, {17keepCase: true,18多头: 字符串,19枚举: 字符串,20默认值: true,21oneofs: true,22includeDirs: [路径.join(__dirname, 'protos/proto')],23});2425const proto = grpc.loadPackageDefinition(packageDefinition) 作为 any;26const LedgerService = proto.sui.rpc.v2.LedgerService;2728// Create secure client29const client = new LedgerService(endpoint, grpc.credentials.createSsl());3031// Add token metadata32const 元数据 = new grpc.元数据();33元数据.添加('x-token', token);3435// Request payload36const 请求 = {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) => {82如果 (err) {83console.error('gRPC Error:', {84代码: err.代码,85消息: err.消息,86详细信息: err.详情,87});88} else {89const decoded = decodeBytesFields(response);90console.log('BatchGetObjects Response:');91console.log(JSON.stringify(decoded, null, 2));92}93});94
1import * 作为 grpc from grpc;2import * 作为 protoLoader from grpc;3import * 作为 路径 from '路径';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.mainnet.quiknode.pro:9000';13const 令牌 = 'abcde123456789';1415// Load protobuf definitions16const 包定义 = protoLoader.loadSync(PROTO_PATH, {17keepCase: true,18多头: 字符串,19枚举: 字符串,20默认值: true,21oneofs: true,22includeDirs: [路径.join(__dirname, 'protos/proto')],23});2425const proto = grpc.loadPackageDefinition(packageDefinition) 作为 any;26const LedgerService = proto.sui.rpc.v2.LedgerService;2728// Create secure client29const client = new LedgerService(endpoint, grpc.credentials.createSsl());3031// Add token metadata32const 元数据 = new grpc.元数据();33元数据.添加('x-token', token);3435// Request payload36const 请求 = {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) => {82如果 (err) {83console.error('gRPC Error:', {84代码: err.代码,85消息: err.消息,86详细信息: err.详情,87});88} else {89const decoded = decodeBytesFields(response);90console.log('BatchGetObjects Response:');91console.log(JSON.stringify(decoded, null, 2));92}93});94
1import grpc2导入 json3来源 谷歌.protobuf.field_mask_pb2 导入 FieldMask4来源 谷歌.protobuf.json_format import MessageToDict5from sui.rpc.v2 import ledger_service_pb2, ledger_service_pb2_grpc678def batch_get_objects():910#Quicknode 由两个关键组成部分构成:endpoint 和相应的令牌11# 例如:QNEndpoint:mainnet12# 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';1718频道 = 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 = 字段掩码(路径=[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)4142元数据 = [("x-token", token)]4344return stub.BatchGetObjects(request, metadata=metadata)454647def parse_response_to_json(response):48返回 json.dumps(49MessageToDict(response, 保留_proto_字段_名称=True),50缩进=251)525354def main():55试一试:56response = batch_get_objects()57打印(parse_response_to_json(response))58除了 grpc。RpcError 作为 e:59print(f"{e.code().name}: {e.details()}")606162如果 __name__ == "__main__":63主()64
1import grpc2导入 json3来源 谷歌.protobuf.field_mask_pb2 导入 FieldMask4来源 谷歌.protobuf.json_format import MessageToDict5from sui.rpc.v2 import ledger_service_pb2, ledger_service_pb2_grpc678def batch_get_objects():910#Quicknode 由两个关键组成部分构成:endpoint 和相应的令牌11# 例如:QNEndpoint:mainnet12# 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';1718频道 = 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 = 字段掩码(路径=[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)4142元数据 = [("x-token", token)]4344return stub.BatchGetObjects(request, metadata=metadata)454647def parse_response_to_json(response):48返回 json.dumps(49MessageToDict(response, 保留_proto_字段_名称=True),50缩进=251)525354def main():55试一试:56response = batch_get_objects()57打印(parse_response_to_json(response))58除了 grpc。RpcError 作为 e:59print(f"{e.code().name}: {e.details()}")606162如果 __name__ == "__main__":63主()64