GetEpoch gRPC Method
参数
epoch
字符串
正在加载...
read_mask
对象
正在加载...
paths
数组
正在加载...
退货
epoch
对象
正在加载...
epoch
字符串
正在加载...
committee
对象
正在加载...
epoch
字符串
正在加载...
members
数组
正在加载...
publicKey
字符串
正在加载...
重量
字符串
正在加载...
请求
1grpcurl \2-import-path . \3-proto sui/rpc/v2/ledger_service.proto \4-H "x-token: YOUR_TOKEN_VALUE" \5-d '{6"epoch": "10",7"read_mask": {8"paths": [9"epoch",10"committee"11]12}13}' \14docs-demo.mainnet.quiknode.pro:9000 \15sui.rpc.v2.LedgerService/GetEpoch16
1grpcurl \2-import-path . \3-proto sui/rpc/v2/ledger_service.proto \4-H "x-token: YOUR_TOKEN_VALUE" \5-d '{6"epoch": "10",7"read_mask": {8"paths": [9"epoch",10"committee"11]12}13}' \14docs-demo.mainnet.quiknode.pro:9000 \15sui.rpc.v2.LedgerService/GetEpoch16
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" // 您生成的 .pb.go 文件路径17)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 structure for x-token30类型 auth 结构体 {31token 字符串32}3334func (a *auth) GetRequestMetadata(ctx 上下文.Context, uri ...字符串) (map[字符串]字符串, error) {35返回 map[字符串]字符串{36“x-token”: a.令牌,37}, nil38}3940func (a *auth) RequireTransportSecurity() bool {41返回 true42}4344func main() {45creds := credentials.NewTLS(&tls.Config{})4647opts := []grpc.DialOption{48grpc.WithTransportCredentials(creds),49grpc.WithPerRPCCredentials(&auth{令牌}),50}5152conn, err := grpc.Dial(endpoint, opts...)53如果 err != nil {54log.Fatalf("连接失败:%v", err)55}56推迟 conn.关闭()5758client := pb.NewLedgerServiceClient(conn)5960// Request epoch #1061epochNum := uint64(10)62fieldMask := &fieldmaskpb.FieldMask{63Paths: []string{64"epoch",65"committee",66},67}6869req := &pb.GetEpochRequest{70Epoch: &epochNum,71ReadMask: fieldMask,72}7374ctx, 取消 := context.带超时(context.Background(), 10*时间.第二次)75推迟 取消()7677resp, err := client.GetEpoch(ctx, req)78如果 err != nil {79log.Fatalf("GetEpoch failed: %v", err)80}8182// Convert protobuf response to readable JSON83marshaler := protojson.MarshalOptions{84UseProtoNames: true,85EmitUnpopulated: true,86缩进: " ",87}8889jsonBytes, err := marshaler.Marshal(resp)90如果 err != nil {91log.Fatalf("Failed to marshal response: %v", err)92}9394var pretty map[字符串]接口{}95if err := json.Unmarshal(jsonBytes, &pretty); err != nil {96log.Fatalf(“无法解析 JSON:%v”, err)97}9899formatted, _ := json.MarshalIndent(pretty, "", " ")100fmt.Println(string(formatted))101}102
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" // 您生成的 .pb.go 文件路径17)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 structure for x-token30类型 auth 结构体 {31token 字符串32}3334func (a *auth) GetRequestMetadata(ctx 上下文.Context, uri ...字符串) (map[字符串]字符串, error) {35返回 map[字符串]字符串{36“x-token”: a.令牌,37}, nil38}3940func (a *auth) RequireTransportSecurity() bool {41返回 true42}4344func main() {45creds := credentials.NewTLS(&tls.Config{})4647opts := []grpc.DialOption{48grpc.WithTransportCredentials(creds),49grpc.WithPerRPCCredentials(&auth{令牌}),50}5152conn, err := grpc.Dial(endpoint, opts...)53如果 err != nil {54log.Fatalf("连接失败:%v", err)55}56推迟 conn.关闭()5758client := pb.NewLedgerServiceClient(conn)5960// Request epoch #1061epochNum := uint64(10)62fieldMask := &fieldmaskpb.FieldMask{63Paths: []string{64"epoch",65"committee",66},67}6869req := &pb.GetEpochRequest{70Epoch: &epochNum,71ReadMask: fieldMask,72}7374ctx, 取消 := context.带超时(context.Background(), 10*时间.第二次)75推迟 取消()7677resp, err := client.GetEpoch(ctx, req)78如果 err != nil {79log.Fatalf("GetEpoch failed: %v", err)80}8182// Convert protobuf response to readable JSON83marshaler := protojson.MarshalOptions{84UseProtoNames: true,85EmitUnpopulated: true,86缩进: " ",87}8889jsonBytes, err := marshaler.Marshal(resp)90如果 err != nil {91log.Fatalf("Failed to marshal response: %v", err)92}9394var pretty map[字符串]接口{}95if err := json.Unmarshal(jsonBytes, &pretty); err != nil {96log.Fatalf(“无法解析 JSON:%v”, err)97}9899formatted, _ := json.MarshalIndent(pretty, "", " ")100fmt.Println(string(formatted))101}102
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});24const proto = grpc.loadPackageDefinition(packageDefinition) 作为 any;25const LedgerService = proto.sui.rpc.v2.LedgerService;2627// Create secure client28const client = new LedgerService(endpoint, grpc.credentials.createSsl());2930// Metadata for authentication31const 元数据 = new grpc.元数据();32元数据.添加('x-token', token);3334// Request setup35const 请求 = {36epoch: 10, // Replace with desired epoch number37read_mask: {38paths: ['epoch', 'committee'], // FieldMask39},40};4142// Recursively convert byte arrays to hex43function convertBytesToHex(obj: any): any {44if (Array.isArray(obj)) {45return obj.map(convertBytesToHex);46} else if (obj && typeof obj === 'object') {47const result: any = {};48for (const key of Object.keys(obj)) {49const val = obj[key];50if (Buffer.isBuffer(val) || (Array.isArray(val) && typeof val[0] === 'number')) {51result[key] = Buffer.from(val).toString('hex');52} else {53result[key] = convertBytesToHex(val);54}55}56return result;57}58return obj;59}6061client.GetEpoch(request, metadata, (err: grpc.ServiceError | null, response: any) => {62如果 (err) {63console.error('gRPC Error:', {64代码: err.代码,65消息: err.消息,66详细信息: err.详情,67});68} else {69const decoded = convertBytesToHex(response);70console.log('GetEpoch Response:');71console.log(JSON.stringify(decoded, null, 2));72}73});74
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});24const proto = grpc.loadPackageDefinition(packageDefinition) 作为 any;25const LedgerService = proto.sui.rpc.v2.LedgerService;2627// Create secure client28const client = new LedgerService(endpoint, grpc.credentials.createSsl());2930// Metadata for authentication31const 元数据 = new grpc.元数据();32元数据.添加('x-token', token);3334// Request setup35const 请求 = {36epoch: 10, // Replace with desired epoch number37read_mask: {38paths: ['epoch', 'committee'], // FieldMask39},40};4142// Recursively convert byte arrays to hex43function convertBytesToHex(obj: any): any {44if (Array.isArray(obj)) {45return obj.map(convertBytesToHex);46} else if (obj && typeof obj === 'object') {47const result: any = {};48for (const key of Object.keys(obj)) {49const val = obj[key];50if (Buffer.isBuffer(val) || (Array.isArray(val) && typeof val[0] === 'number')) {51result[key] = Buffer.from(val).toString('hex');52} else {53result[key] = convertBytesToHex(val);54}55}56return result;57}58return obj;59}6061client.GetEpoch(request, metadata, (err: grpc.ServiceError | null, response: any) => {62如果 (err) {63console.error('gRPC Error:', {64代码: err.代码,65消息: err.消息,66详细信息: err.详情,67});68} else {69const decoded = convertBytesToHex(response);70console.log('GetEpoch Response:');71console.log(JSON.stringify(decoded, null, 2));72}73});74
1import grpc2导入 json3来源 谷歌.protobuf.field_mask_pb2 导入 FieldMask4来源 谷歌.protobuf.json_format import MessageToDict5from sui.rpc.v2 import ledger_service_pb2, ledger_service_pb2_grpc678def get_epoch():9#Quicknode 由两个关键组成部分构成:endpoint 和相应的令牌10# 例如:QNEndpoint:mainnet11# endpoint will be: docs-demo.sui-mainnet.quiknode.pro:9000 {9000 is the port number for Sui gRPC}12# 令牌将为:abcde1234567891314endpoint = 'docs-demo.sui-mainnet.quiknode.pro:9000';15token = 'abcde123456789';1617频道 = grpc.secure_channel(endpoint, grpc.ssl_channel_credentials())18stub = ledger_service_pb2_grpc.LedgerServiceStub(channel)1920# Specify which epoch you want to retrieve21# For example, epoch 10 - replace with the actual epoch number you want22epoch_number = 102324# Create a field mask to specify which fields to include in the response25read_mask = 字段掩码(路径=[26"epoch",27"committee"28])2930# Prepare the GetEpochRequest31request = ledger_service_pb2.GetEpochRequest(32epoch=epoch_number,33read_mask=read_mask34)3536元数据 = [("x-token", token)]3738return stub.GetEpoch(request, metadata=metadata)394041def parse_response_to_json(response):42返回 json.dumps(43MessageToDict(response, 保留_proto_字段_名称=True),44缩进=245)464748def main():49试一试:50response = get_epoch()51打印(parse_response_to_json(response))52除了 grpc。RpcError 作为 e:53print(f"{e.code().name}: {e.details()}")545556如果 __name__ == "__main__":57主()58
1import grpc2导入 json3来源 谷歌.protobuf.field_mask_pb2 导入 FieldMask4来源 谷歌.protobuf.json_format import MessageToDict5from sui.rpc.v2 import ledger_service_pb2, ledger_service_pb2_grpc678def get_epoch():9#Quicknode 由两个关键组成部分构成:endpoint 和相应的令牌10# 例如:QNEndpoint:mainnet11# endpoint will be: docs-demo.sui-mainnet.quiknode.pro:9000 {9000 is the port number for Sui gRPC}12# 令牌将为:abcde1234567891314endpoint = 'docs-demo.sui-mainnet.quiknode.pro:9000';15token = 'abcde123456789';1617频道 = grpc.secure_channel(endpoint, grpc.ssl_channel_credentials())18stub = ledger_service_pb2_grpc.LedgerServiceStub(channel)1920# Specify which epoch you want to retrieve21# For example, epoch 10 - replace with the actual epoch number you want22epoch_number = 102324# Create a field mask to specify which fields to include in the response25read_mask = 字段掩码(路径=[26"epoch",27"committee"28])2930# Prepare the GetEpochRequest31request = ledger_service_pb2.GetEpochRequest(32epoch=epoch_number,33read_mask=read_mask34)3536元数据 = [("x-token", token)]3738return stub.GetEpoch(request, metadata=metadata)394041def parse_response_to_json(response):42返回 json.dumps(43MessageToDict(response, 保留_proto_字段_名称=True),44缩进=245)464748def main():49试一试:50response = get_epoch()51打印(parse_response_to_json(response))52除了 grpc。RpcError 作为 e:53print(f"{e.code().name}: {e.details()}")545556如果 __name__ == "__main__":57主()58