node/pkg/publicrpc: add GetCurrentGuardianSet RPC call

This is required for network explorers to know about missing guardians
(the GetLastHeartbeats call won't contain those nodes at all).

Change-Id: I28d8621023d79e6fa94c40f36a239c34aa12f1b0
This commit is contained in:
Leo 2021-08-10 16:31:56 +02:00
parent 576ff0cabf
commit e9491d25f8
2 changed files with 41 additions and 0 deletions

View File

@ -113,3 +113,23 @@ func (s *PublicrpcServer) GetSignedVAA(ctx context.Context, req *publicrpcv1.Get
VaaBytes: b, VaaBytes: b,
}, nil }, nil
} }
func (s *PublicrpcServer) GetCurrentGuardianSet(ctx context.Context, req *publicrpcv1.GetCurrentGuardianSetRequest) (*publicrpcv1.GetCurrentGuardianSetResponse, error) {
gs := s.gst.Get()
if gs == nil {
return nil, status.Error(codes.Unavailable, "guardian set not fetched from chain yet")
}
resp := &publicrpcv1.GetCurrentGuardianSetResponse{
GuardianSet: &publicrpcv1.GuardianSet{
Index: gs.Index,
Addresses: make([]string, len(gs.Keys)),
},
}
for i, v := range gs.Keys {
resp.GuardianSet.Addresses[i] = v.Hex()
}
return resp, nil
}

View File

@ -50,6 +50,13 @@ service Publicrpc {
get: "/v1/signed_vaa/{message_id.emitter_chain}/{message_id.emitter_address}/{message_id.sequence}" get: "/v1/signed_vaa/{message_id.emitter_chain}/{message_id.emitter_address}/{message_id.sequence}"
}; };
} }
rpc GetCurrentGuardianSet (GetCurrentGuardianSetRequest) returns (GetCurrentGuardianSetResponse) {
option (google.api.http) = {
get: "/v1/guardianset/current"
};
}
} }
message GetRawHeartbeatsRequest { message GetRawHeartbeatsRequest {
@ -84,3 +91,17 @@ message GetLastHeartbeatResponse {
repeated Entry entries = 1; repeated Entry entries = 1;
} }
message GetCurrentGuardianSetRequest {
}
message GetCurrentGuardianSetResponse {
GuardianSet guardian_set = 1;
}
message GuardianSet {
// Guardian set index
uint32 index = 1;
// List of guardian addresses as human-readable hex-encoded (leading 0x) addresses.
repeated string addresses = 2;
}