GetBalance gRPC Method
Parameters
owner
string
REQUIRED
Loading...
coin_type
string
REQUIRED
Loading...
Returns
balance
object
Loading...
coinType
string
Loading...
balance
string
Loading...
Request
grpcurl -proto ./sui/rpc/v2beta2/live_data_service.proto -H "x-token: abcde123456789" -d '{
"owner": "0xac5bceec1b789ff840d7d4e6ce4ce61c90d190a7f8c4f4ddf0bff6ee2413c33c",
"coin_type": "0x2::sui::SUI"
}' docs-demo.sui-mainnet.quiknode.pro:9000 sui.rpc.v2beta2.LiveDataService/GetBalancepackage 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"
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.NewLiveDataServiceClient(conn)
owner := "0xac5bceec1b789ff840d7d4e6ce4ce61c90d190a7f8c4f4ddf0bff6ee2413c33c"
coinType := "0x2::sui::SUI"
// Build request with field mask
req := &pb.GetBalanceRequest{
Owner: &owner,
CoinType: &coinType,
}
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
resp, err := client.GetBalance(ctx, req)
if err != nil {
log.Fatalf("GetBalance failed: %v", err)
}
// Pretty print the response
marshaler := protojson.MarshalOptions{
UseProtoNames: true,
EmitUnpopulated: true,
Indent: " ",
}
jsonBytes, err := marshaler.Marshal(resp)
if err != nil {
log.Fatalf("Failed to marshal: %v", err)
}
var pretty map[string]interface{}
if err := json.Unmarshal(jsonBytes, &pretty); err != nil {
log.Fatalf("Failed to parse JSON: %v", err)
}
out, _ := json.MarshalIndent(pretty, "", " ")
fmt.Println(string(out))
}
import * as grpc from '@grpc/grpc-js';
import * as protoLoader from '@grpc/proto-loader';
import * as path from 'path';
// Configuration
const PROTO_PATH = path.join(__dirname, 'protos/proto/sui/rpc/v2beta2/live_data_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 LiveDataService = proto.sui.rpc.v2beta2.LiveDataService;
// Create secure client
const client = new LiveDataService(endpoint, grpc.credentials.createSsl());
// Add token metadata
const metadata = new grpc.Metadata();
metadata.add('x-token', token);
// Request payload
const request = {
owner: '0xac5bceec1b789ff840d7d4e6ce4ce61c90d190a7f8c4f4ddf0bff6ee2413c33c',
coin_type: '0x2::sui::SUI',
};
// Perform gRPC call
client.GetBalance(request, metadata, (err: grpc.ServiceError | null, response: any) => {
if (err) {
console.error('gRPC Error:', {
code: err.code,
message: err.message,
details: err.details,
});
} else {
console.log('GetBalance Response:');
console.log(JSON.stringify(response, null, 2));
}
});
import grpc
import json
from google.protobuf.json_format import MessageToDict
from sui.rpc.v2beta2 import live_data_service_pb2, live_data_service_pb2_grpc
def get_balance():
# 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 = live_data_service_pb2_grpc.LiveDataServiceStub(channel)
owner = "0xac5bceec1b789ff840d7d4e6ce4ce61c90d190a7f8c4f4ddf0bff6ee2413c33c"
coin_type = "0x2::sui::SUI"
request = live_data_service_pb2.GetBalanceRequest(
owner=owner,
coin_type=coin_type
)
metadata = [("x-token", token)]
return stub.GetBalance(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_balance()
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