SubscribeCheckpoints gRPC Method
매개변수
read_mask
객체
로딩 중...
반품
커서
문자열
로딩 중...
checkpoint
객체
로딩 중...
sequenceNumber
문자열
로딩 중...
요약
문자열
로딩 중...
summary
객체
로딩 중...
서명
객체
로딩 중...
contents
객체
로딩 중...
거래
배열
로딩 중...
요청
1grpcurl -proto ./sui/rpc/v2/subscription_service.proto -H "x-token: abcde123456789" -d '{2"read_mask": {3"paths": [4"sequence_number",5"digest",6"network_total_transactions",7"previous_digest",8"epoch_rolling_gas_cost_summary",9"timestamp_ms",10"transactions"11]12}13}' docs-demo.sui-mainnet.quiknode.pro:9000 sui.rpc.v2.SubscriptionService/SubscribeCheckpoints14
1grpcurl -proto ./sui/rpc/v2/subscription_service.proto -H "x-token: abcde123456789" -d '{2"read_mask": {3"paths": [4"sequence_number",5"digest",6"network_total_transactions",7"previous_digest",8"epoch_rolling_gas_cost_summary",9"timestamp_ms",10"transactions"11]12}13}' docs-demo.sui-mainnet.quiknode.pro:9000 sui.rpc.v2.SubscriptionService/SubscribeCheckpoints14
1패키지 main23import (4"문맥"5"crypto/tls"6"encoding/json"7"fmt"8"io"9"로그"10"os"11"os/signal"12"syscall"1314"google.golang.org/grpc"15"google.golang.org/grpc/credentials"16"google.golang.org/protobuf/encoding/protojson"17"google.golang.org/protobuf/types/known/fieldmaskpb"1819pb "sui-grpc/sui/rpc/v2" // Your Generated .pb.go files path20)2122// Quicknode endpoints consist of two crucial components: the endpoint name and the corresponding token23// For eg: QN Endpoint: https://docs-demo.sui-mainnet.quiknode.pro/abcde12345678924// endpoint will be: docs-demo.sui-mainnet.quiknode.pro:9000 {9000 is the port number for Sui gRPC}25// token will be : abcde1234567892627var (28token = "YOUR_TOKEN_NUMBER"29endpoint = "YOUR_QN_ENDPOINT:9000"30)3132// Auth structure for x-token33type auth struct {34token string35}3637func (a *auth) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) {38return map[string]string{"x-token": a.token}, nil39}40func (a *auth) RequireTransportSecurity() bool {41return true42}4344func main() {45creds := credentials.NewTLS(&tls.Config{})46opts := []grpc.DialOption{47grpc.WithTransportCredentials(creds),48grpc.WithPerRPCCredentials(&auth{token}),49}5051conn, err := grpc.Dial(endpoint, opts...)52만약 err != nil {53log.Fatalf("Failed to connect: %v", err)54}55defer conn.Close()5657client := pb.NewSubscriptionServiceClient(conn)5859// Build request with field mask60req := &pb.SubscribeCheckpointsRequest{61ReadMask: &fieldmaskpb.FieldMask{62Paths: []string{63"sequence_number",64"digest",65"network_total_transactions",66"previous_digest",67"epoch_rolling_gas_cost_summary",68"timestamp_ms",69"transactions",70},71},72}7374ctx, cancel := context.WithCancel(context.Background())75defer cancel()7677stream, err := client.SubscribeCheckpoints(ctx, req)78만약 err != nil {79log.Fatalf("SubscribeCheckpoints failed: %v", err)80}8182sigChan := make(chan os.Signal, 1)83signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)8485go func() {86<-sigChan87fmt.Println("\nClosing subscription...")88cancel()89}()9091fmt.Println("Subscribing to checkpoints... Press Ctrl+C to stop.")9293marshaler := protojson.MarshalOptions{94UseProtoNames: true,95EmitUnpopulated: true,96Indent: " ",97}9899for {100resp, err := stream.Recv()101if err == io.EOF {102fmt.Println("Stream ended")103중단104}105만약 err != nil {106log.Printf("Stream error: %v", err)107중단108}109110// Pretty print the response111jsonBytes, err := marshaler.Marshal(resp)112만약 err != nil {113log.Printf("Failed to marshal: %v", err)114계속115}116117var pretty map[string]interface{}118if err := json.Unmarshal(jsonBytes, &pretty); err != nil {119log.Printf("Failed to parse JSON: %v", err)120계속121}122123out, _ := json.MarshalIndent(pretty, "", " ")124fmt.Printf("Received checkpoint:\n%s\n", string(out))125}126}127
1패키지 main23import (4"문맥"5"crypto/tls"6"encoding/json"7"fmt"8"io"9"로그"10"os"11"os/signal"12"syscall"1314"google.golang.org/grpc"15"google.golang.org/grpc/credentials"16"google.golang.org/protobuf/encoding/protojson"17"google.golang.org/protobuf/types/known/fieldmaskpb"1819pb "sui-grpc/sui/rpc/v2" // Your Generated .pb.go files path20)2122// Quicknode endpoints consist of two crucial components: the endpoint name and the corresponding token23// For eg: QN Endpoint: https://docs-demo.sui-mainnet.quiknode.pro/abcde12345678924// endpoint will be: docs-demo.sui-mainnet.quiknode.pro:9000 {9000 is the port number for Sui gRPC}25// token will be : abcde1234567892627var (28token = "YOUR_TOKEN_NUMBER"29endpoint = "YOUR_QN_ENDPOINT:9000"30)3132// Auth structure for x-token33type auth struct {34token string35}3637func (a *auth) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) {38return map[string]string{"x-token": a.token}, nil39}40func (a *auth) RequireTransportSecurity() bool {41return true42}4344func main() {45creds := credentials.NewTLS(&tls.Config{})46opts := []grpc.DialOption{47grpc.WithTransportCredentials(creds),48grpc.WithPerRPCCredentials(&auth{token}),49}5051conn, err := grpc.Dial(endpoint, opts...)52만약 err != nil {53log.Fatalf("Failed to connect: %v", err)54}55defer conn.Close()5657client := pb.NewSubscriptionServiceClient(conn)5859// Build request with field mask60req := &pb.SubscribeCheckpointsRequest{61ReadMask: &fieldmaskpb.FieldMask{62Paths: []string{63"sequence_number",64"digest",65"network_total_transactions",66"previous_digest",67"epoch_rolling_gas_cost_summary",68"timestamp_ms",69"transactions",70},71},72}7374ctx, cancel := context.WithCancel(context.Background())75defer cancel()7677stream, err := client.SubscribeCheckpoints(ctx, req)78만약 err != nil {79log.Fatalf("SubscribeCheckpoints failed: %v", err)80}8182sigChan := make(chan os.Signal, 1)83signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)8485go func() {86<-sigChan87fmt.Println("\nClosing subscription...")88cancel()89}()9091fmt.Println("Subscribing to checkpoints... Press Ctrl+C to stop.")9293marshaler := protojson.MarshalOptions{94UseProtoNames: true,95EmitUnpopulated: true,96Indent: " ",97}9899for {100resp, err := stream.Recv()101if err == io.EOF {102fmt.Println("Stream ended")103중단104}105만약 err != nil {106log.Printf("Stream error: %v", err)107중단108}109110// Pretty print the response111jsonBytes, err := marshaler.Marshal(resp)112만약 err != nil {113log.Printf("Failed to marshal: %v", err)114계속115}116117var pretty map[string]interface{}118if err := json.Unmarshal(jsonBytes, &pretty); err != nil {119log.Printf("Failed to parse JSON: %v", err)120계속121}122123out, _ := json.MarshalIndent(pretty, "", " ")124fmt.Printf("Received checkpoint:\n%s\n", string(out))125}126}127
1import * as grpc from '@grpc/grpc-js';2import * as protoLoader from '@grpc/proto-loader';3import * as path from 'path';45// Configuration6const PROTO_PATH = path.join(__dirname, 'protos/proto/sui/rpc/v2/subscription_service.proto');78// Quicknode endpoints consist of two crucial components: the endpoint name and the corresponding token9// For eg: QN Endpoint: https://docs-demo.sui-mainnet.quiknode.pro/abcde12345678910// endpoint will be: docs-demo.sui-mainnet.quiknode.pro:9000 {9000 is the port number for Sui gRPC}11// token will be : abcde1234567891213const endpoint = 'docs-demo.sui-mainnet.quiknode.pro:9000';14const token = 'abcde123456789';1516// Load protobuf definitions17const 패키지 정의 = protoLoader.loadSync(PROTO_PATH, {18keepCase: true,19longs: String,20enums: String,21defaults: true,22oneofs: true,23includeDirs: [path.join(__dirname, 'protos/proto')],24});2526const proto = grpc.loadPackageDefinition(packageDefinition) as any;27const SubscriptionService = proto.sui.rpc.v2.SubscriptionService;2829// Create secure client30const client = new SubscriptionService(endpoint, grpc.credentials.createSsl());3132// Add token metadata33const metadata = new grpc.Metadata();34metadata.add('x-token', token);3536// Request payload37const request = {38read_mask: {39paths: [40'sequence_number',41'digest',42'network_total_transactions',43'previous_digest',44'epoch_rolling_gas_cost_summary',45'timestamp_ms',46'transactions',47],48},49};5051const call = client.SubscribeCheckpoints(request, metadata);5253call.on('data', (response: any) => {54console.log('Received checkpoint:', JSON.stringify(response, null, 2));55});5657call.on('error', (error: any) => {58console.error('Stream error:', error);59});6061call.on('end', () => {62console.log('Stream ended');63});6465console.log('Subscribing to checkpoints... Press Ctrl+C to stop.');66process.on('SIGINT', () => {67console.log('Closing subscription...');68call.cancel();69process.exit(0);70});71
1import * as grpc from '@grpc/grpc-js';2import * as protoLoader from '@grpc/proto-loader';3import * as path from 'path';45// Configuration6const PROTO_PATH = path.join(__dirname, 'protos/proto/sui/rpc/v2/subscription_service.proto');78// Quicknode endpoints consist of two crucial components: the endpoint name and the corresponding token9// For eg: QN Endpoint: https://docs-demo.sui-mainnet.quiknode.pro/abcde12345678910// endpoint will be: docs-demo.sui-mainnet.quiknode.pro:9000 {9000 is the port number for Sui gRPC}11// token will be : abcde1234567891213const endpoint = 'docs-demo.sui-mainnet.quiknode.pro:9000';14const token = 'abcde123456789';1516// Load protobuf definitions17const 패키지 정의 = protoLoader.loadSync(PROTO_PATH, {18keepCase: true,19longs: String,20enums: String,21defaults: true,22oneofs: true,23includeDirs: [path.join(__dirname, 'protos/proto')],24});2526const proto = grpc.loadPackageDefinition(packageDefinition) as any;27const SubscriptionService = proto.sui.rpc.v2.SubscriptionService;2829// Create secure client30const client = new SubscriptionService(endpoint, grpc.credentials.createSsl());3132// Add token metadata33const metadata = new grpc.Metadata();34metadata.add('x-token', token);3536// Request payload37const request = {38read_mask: {39paths: [40'sequence_number',41'digest',42'network_total_transactions',43'previous_digest',44'epoch_rolling_gas_cost_summary',45'timestamp_ms',46'transactions',47],48},49};5051const call = client.SubscribeCheckpoints(request, metadata);5253call.on('data', (response: any) => {54console.log('Received checkpoint:', JSON.stringify(response, null, 2));55});5657call.on('error', (error: any) => {58console.error('Stream error:', error);59});6061call.on('end', () => {62console.log('Stream ended');63});6465console.log('Subscribing to checkpoints... Press Ctrl+C to stop.');66process.on('SIGINT', () => {67console.log('Closing subscription...');68call.cancel();69process.exit(0);70});71
1import grpc2import json3import signal4import sys5from google.protobuf.field_mask_pb2 import FieldMask6from google.protobuf.json_format import MessageToDict7from sui.rpc.v2 import subscription_service_pb2, subscription_service_pb2_grpc89def signal_handler(sig, frame):10print('\nClosing subscription...')11sys.exit(0)1213def subscribe_checkpoints():14# Quicknode endpoints consist of two crucial components: the endpoint name and the corresponding token15# For eg: QN Endpoint: https://docs-demo.sui-mainnet.quiknode.pro/abcde12345678916# endpoint will be: docs-demo.sui-mainnet.quiknode.pro:9000 {9000 is the port number for Sui gRPC}17# token will be : abcde1234567891819endpoint = 'docs-demo.sui-mainnet.quiknode.pro:9000';20token = 'abcde123456789';2122channel = grpc.secure_channel(endpoint, grpc.ssl_channel_credentials())23stub = subscription_service_pb2_grpc.SubscriptionServiceStub(channel)2425read_mask = FieldMask(paths=[26"sequence_number",27"digest",28"network_total_transactions",29"previous_digest",30"epoch_rolling_gas_cost_summary",31"timestamp_ms",32"transactions"33])3435request = subscription_service_pb2.SubscribeCheckpointsRequest(36read_mask=read_mask37)3839metadata = [("x-token", token)]4041return stub.SubscribeCheckpoints(request, metadata=metadata)4243def parse_response_to_json(response):44return json.dumps(45MessageToDict(response, preserving_proto_field_name=True),46indent=247)4849def main():50signal.signal(signal.SIGINT, signal_handler)51print("Subscribing to checkpoints... Press Ctrl+C to stop.")5253시도해 보세요:54response_stream = subscribe_checkpoints()5556for response in response_stream:57print("Received checkpoint:")58print(parse_response_to_json(response))5960except grpc.RpcError as e:61print(f"{e.code().name}: {e.details()}")62except KeyboardInterrupt:63print("\nSubscription interrupted")6465if __name__ == "__main__":66main()67
1import grpc2import json3import signal4import sys5from google.protobuf.field_mask_pb2 import FieldMask6from google.protobuf.json_format import MessageToDict7from sui.rpc.v2 import subscription_service_pb2, subscription_service_pb2_grpc89def signal_handler(sig, frame):10print('\nClosing subscription...')11sys.exit(0)1213def subscribe_checkpoints():14# Quicknode endpoints consist of two crucial components: the endpoint name and the corresponding token15# For eg: QN Endpoint: https://docs-demo.sui-mainnet.quiknode.pro/abcde12345678916# endpoint will be: docs-demo.sui-mainnet.quiknode.pro:9000 {9000 is the port number for Sui gRPC}17# token will be : abcde1234567891819endpoint = 'docs-demo.sui-mainnet.quiknode.pro:9000';20token = 'abcde123456789';2122channel = grpc.secure_channel(endpoint, grpc.ssl_channel_credentials())23stub = subscription_service_pb2_grpc.SubscriptionServiceStub(channel)2425read_mask = FieldMask(paths=[26"sequence_number",27"digest",28"network_total_transactions",29"previous_digest",30"epoch_rolling_gas_cost_summary",31"timestamp_ms",32"transactions"33])3435request = subscription_service_pb2.SubscribeCheckpointsRequest(36read_mask=read_mask37)3839metadata = [("x-token", token)]4041return stub.SubscribeCheckpoints(request, metadata=metadata)4243def parse_response_to_json(response):44return json.dumps(45MessageToDict(response, preserving_proto_field_name=True),46indent=247)4849def main():50signal.signal(signal.SIGINT, signal_handler)51print("Subscribing to checkpoints... Press Ctrl+C to stop.")5253시도해 보세요:54response_stream = subscribe_checkpoints()5556for response in response_stream:57print("Received checkpoint:")58print(parse_response_to_json(response))5960except grpc.RpcError as e:61print(f"{e.code().name}: {e.details()}")62except KeyboardInterrupt:63print("\nSubscription interrupted")6465if __name__ == "__main__":66main()67