BatchVAA protos and Spy updates (#1691)

* gossip.proto - add nonce to SignedBatchObservation

* publicrpc.proto - add nonce to BatchID

* spy.proto - filters for BatchVAA, new VAA endpoint

* node - spy.go allow subscribing to BatchVAAs

* add built Go protos to node/pkg/proto

* improve & simplify Publish logic

* simplify filter match logic

* update protos - consistent naming & types for transaction identifiers

* add Spy unit & e2e tests
This commit is contained in:
Justin Schuldt 2022-11-09 10:39:57 -06:00 committed by GitHub
parent d00c8bad29
commit 1b3590b9ce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 2141 additions and 504 deletions

View File

@ -1,8 +1,8 @@
package spy
import (
"bytes"
"context"
"encoding/hex"
"fmt"
"net"
"net/http"
@ -69,84 +69,244 @@ var SpyCmd = &cobra.Command{
type spyServer struct {
spyv1.UnimplementedSpyRPCServiceServer
logger *zap.Logger
subs map[string]*subscription
subsMu sync.Mutex
logger *zap.Logger
subsSignedVaa map[string]*subscriptionSignedVaa
subsSignedVaaMu sync.Mutex
subsAllVaa map[string]*subscriptionAllVaa
subsAllVaaMu sync.Mutex
}
type message struct {
vaaBytes []byte
}
type filter struct {
type filterSignedVaa struct {
chainId vaa.ChainID
emitterAddr vaa.Address
}
type subscription struct {
filters []filter
type subscriptionSignedVaa struct {
filters []filterSignedVaa
ch chan message
}
type subscriptionAllVaa struct {
filters []*spyv1.FilterEntry
ch chan *spyv1.SubscribeSignedVAAByTypeResponse
}
func subscriptionId() string {
return uuid.New().String()
}
func decodeEmitterAddr(hexAddr string) (vaa.Address, error) {
address, err := hex.DecodeString(hexAddr)
if err != nil {
return vaa.Address{}, status.Error(codes.InvalidArgument, fmt.Sprintf("failed to decode address: %v", err))
}
if len(address) != 32 {
return vaa.Address{}, status.Error(codes.InvalidArgument, "address must be 32 bytes")
}
addr := vaa.Address{}
copy(addr[:], address)
return addr, nil
}
func (s *spyServer) Publish(vaaBytes []byte) error {
s.subsMu.Lock()
defer s.subsMu.Unlock()
func (s *spyServer) PublishSignedVAA(vaaBytes []byte) error {
s.subsSignedVaaMu.Lock()
defer s.subsSignedVaaMu.Unlock()
var v *vaa.VAA
for _, sub := range s.subs {
for _, sub := range s.subsSignedVaa {
if len(sub.filters) == 0 {
sub.ch <- message{vaaBytes: vaaBytes}
} else {
if v == nil {
var err error
v, err = vaa.Unmarshal(vaaBytes)
if err != nil {
return err
}
}
continue
}
for _, fi := range sub.filters {
if fi.chainId == v.EmitterChain && fi.emitterAddr == v.EmitterAddress {
sub.ch <- message{vaaBytes: vaaBytes}
}
if v == nil {
var err error
v, err = vaa.Unmarshal(vaaBytes)
if err != nil {
return err
}
}
for _, fi := range sub.filters {
if fi.chainId == v.EmitterChain && fi.emitterAddr == v.EmitterAddress {
sub.ch <- message{vaaBytes: vaaBytes}
}
}
}
return nil
}
// TransactionIdMatches checks if both TxIds have the same value.
func TransactionIdMatches(g *gossipv1.SignedBatchVAAWithQuorum, t *spyv1.BatchFilter) bool {
return bytes.Equal(g.TxId, t.TxId)
}
// BatchMatchFilter asserts that the obervation matches the values of the filter.
func BatchMatchesFilter(g *gossipv1.SignedBatchVAAWithQuorum, f *spyv1.BatchFilter) bool {
// check the chain ID
if g.ChainId != uint32(f.ChainId) {
return false
}
// check the transaction ID
txMatch := TransactionIdMatches(g, f)
if !txMatch {
return false
}
// check the Nonce
if f.Nonce >= 1 {
// filter has a nonce, so make sure it matches
if g.Nonce != f.Nonce {
// filter's nonce does not match the nonce of the Batch.
return false
}
}
return true
}
// HandleGossipVAA compares a gossip message to client subscriptions & filters,
// and forwards the VAA to those requesting it.
func (s *spyServer) HandleGossipVAA(g *gossipv1.SignedVAAWithQuorum) error {
s.subsAllVaaMu.Lock()
defer s.subsAllVaaMu.Unlock()
v, err := vaa.Unmarshal(g.Vaa)
if err != nil {
s.logger.Error("failed unmarshaing VAA bytes from gossipv1.SignedVAAWithQuorum.",
zap.Error(err))
return err
}
// resType defines which oneof proto will be retuned - res type "SignedVaa" is *gossipv1.SignedVAAWithQuorum
resType := &spyv1.SubscribeSignedVAAByTypeResponse_SignedVaa{
SignedVaa: g,
}
// envelope is the highest level proto struct, the wrapper proto that contains one of the VAA types.
envelope := &spyv1.SubscribeSignedVAAByTypeResponse{
VaaType: resType,
}
// loop through the subscriptions and send responses to everyone that wants this VAA
for _, sub := range s.subsAllVaa {
if len(sub.filters) == 0 {
// this subscription has no filters, send them the VAA.
sub.ch <- envelope
continue
}
// this subscription has filters.
for _, filterEntry := range sub.filters {
filter := filterEntry.GetFilter()
switch t := filter.(type) {
case *spyv1.FilterEntry_EmitterFilter:
filterAddr := t.EmitterFilter.EmitterAddress
filterChain := vaa.ChainID(t.EmitterFilter.ChainId)
if v.EmitterChain == filterChain && v.EmitterAddress.String() == filterAddr {
// it is a match, send the response
sub.ch <- envelope
}
default:
panic(fmt.Sprintf("unsupported filter type in subscriptions: %T", filter))
}
}
}
return nil
}
// HandleGossipBatchVAA compares a gossip message to client subscriptions & filters,
// and forwards the VAA to those requesting it.
func (s *spyServer) HandleGossipBatchVAA(g *gossipv1.SignedBatchVAAWithQuorum) error {
s.subsAllVaaMu.Lock()
defer s.subsAllVaaMu.Unlock()
b, err := vaa.UnmarshalBatch(g.BatchVaa)
if err != nil {
s.logger.Error("failed unmarshaing BatchVAA bytes from gossipv1.SignedBatchVAAWithQuorum.",
zap.Error(err))
return err
}
// resType defines which oneof proto will be retuned -
// res type "SignedBatchVaa" is *gossipv1.SignedBatchVAAWithQuorum
resType := &spyv1.SubscribeSignedVAAByTypeResponse_SignedBatchVaa{
SignedBatchVaa: g,
}
// envelope is the highest level proto struct, the wrapper proto that contains one of the VAA types.
envelope := &spyv1.SubscribeSignedVAAByTypeResponse{
VaaType: resType,
}
// loop through the subscriptions and send responses to everyone that wants this VAA
for _, sub := range s.subsAllVaa {
if len(sub.filters) == 0 {
// this subscription has no filters, send them the VAA.
sub.ch <- envelope
continue
}
// this subscription has filters.
for _, filterEntry := range sub.filters {
filter := filterEntry.GetFilter()
switch t := filter.(type) {
case *spyv1.FilterEntry_EmitterFilter:
filterChain := uint32(t.EmitterFilter.ChainId)
if g.ChainId != filterChain {
// VAA does not pass the filter
continue
}
// BatchVAAs do not have EmitterAddress at the top level - each Observation
// in the Batch has an EmitterAddress.
// In order to make it easier for integrators, allow subscribing to BatchVAAs by
// EmitterFilter. Send BatchVAAs to subscriptions with an EmitterFilter that
// matches 1 (or more) Obervation(s) in the batch.
filterAddr := t.EmitterFilter.EmitterAddress
// check each Observation to see if it meets the criteria of the filter.
for _, obs := range b.Observations {
if obs.Observation.EmitterAddress.String() == filterAddr {
// it is a match, send the response to the subscriber.
sub.ch <- envelope
break
}
}
case *spyv1.FilterEntry_BatchFilter:
if BatchMatchesFilter(g, t.BatchFilter) {
sub.ch <- envelope
}
case *spyv1.FilterEntry_BatchTransactionFilter:
// make a BatchFilter struct from the BatchTransactionFilter since the latter is
// a subset of the former's properties, so we can use TransactionIdMatches.
batchFilter := &spyv1.BatchFilter{
ChainId: t.BatchTransactionFilter.ChainId,
TxId: t.BatchTransactionFilter.TxId,
}
if BatchMatchesFilter(g, batchFilter) {
sub.ch <- envelope
}
default:
panic(fmt.Sprintf("unsupported filter type in subscriptions: %T", filter))
}
}
}
return nil
}
func (s *spyServer) SubscribeSignedVAA(req *spyv1.SubscribeSignedVAARequest, resp spyv1.SpyRPCService_SubscribeSignedVAAServer) error {
var fi []filter
var fi []filterSignedVaa
if req.Filters != nil {
for _, f := range req.Filters {
switch t := f.Filter.(type) {
case *spyv1.FilterEntry_EmitterFilter:
addr, err := decodeEmitterAddr(t.EmitterFilter.EmitterAddress)
addr, err := vaa.StringToAddress(t.EmitterFilter.EmitterAddress)
if err != nil {
return status.Error(codes.InvalidArgument, fmt.Sprintf("failed to decode emitter address: %v", err))
}
fi = append(fi, filter{
fi = append(fi, filterSignedVaa{
chainId: vaa.ChainID(t.EmitterFilter.ChainId),
emitterAddr: addr,
})
@ -156,19 +316,19 @@ func (s *spyServer) SubscribeSignedVAA(req *spyv1.SubscribeSignedVAARequest, res
}
}
s.subsMu.Lock()
s.subsSignedVaaMu.Lock()
id := subscriptionId()
sub := &subscription{
sub := &subscriptionSignedVaa{
ch: make(chan message, 1),
filters: fi,
}
s.subs[id] = sub
s.subsMu.Unlock()
s.subsSignedVaa[id] = sub
s.subsSignedVaaMu.Unlock()
defer func() {
s.subsMu.Lock()
defer s.subsMu.Unlock()
delete(s.subs, id)
s.subsSignedVaaMu.Lock()
defer s.subsSignedVaaMu.Unlock()
delete(s.subsSignedVaa, id)
}()
for {
@ -185,10 +345,63 @@ func (s *spyServer) SubscribeSignedVAA(req *spyv1.SubscribeSignedVAARequest, res
}
}
// SubscribeSignedVAAByType fields requests for subscriptions. Each new subscription adds a channel and request params (filters)
// to the map of active subscriptions.
func (s *spyServer) SubscribeSignedVAAByType(req *spyv1.SubscribeSignedVAAByTypeRequest, resp spyv1.SpyRPCService_SubscribeSignedVAAByTypeServer) error {
var fi []*spyv1.FilterEntry
if req.Filters != nil {
for _, f := range req.Filters {
switch t := f.Filter.(type) {
case *spyv1.FilterEntry_EmitterFilter:
// validate the emitter address is valid by decoding it
_, err := vaa.StringToAddress(t.EmitterFilter.EmitterAddress)
if err != nil {
return status.Error(codes.InvalidArgument, fmt.Sprintf("failed to decode emitter address: %v", err))
}
fi = append(fi, &spyv1.FilterEntry{Filter: t})
case *spyv1.FilterEntry_BatchFilter,
*spyv1.FilterEntry_BatchTransactionFilter:
fi = append(fi, &spyv1.FilterEntry{Filter: t})
default:
return status.Error(codes.InvalidArgument, "unsupported filter type")
}
}
}
s.subsAllVaaMu.Lock()
id := subscriptionId()
sub := &subscriptionAllVaa{
ch: make(chan *spyv1.SubscribeSignedVAAByTypeResponse, 1),
filters: fi,
}
s.subsAllVaa[id] = sub
s.subsAllVaaMu.Unlock()
defer func() {
s.subsAllVaaMu.Lock()
defer s.subsAllVaaMu.Unlock()
delete(s.subsAllVaa, id)
}()
for {
select {
case <-resp.Context().Done():
return resp.Context().Err()
case msg := <-sub.ch:
if err := resp.Send(msg); err != nil {
return err
}
}
}
}
func newSpyServer(logger *zap.Logger) *spyServer {
return &spyServer{
logger: logger.Named("spyserver"),
subs: make(map[string]*subscription),
logger: logger.Named("spyserver"),
subsSignedVaa: make(map[string]*subscriptionSignedVaa),
subsAllVaa: make(map[string]*subscriptionAllVaa),
}
}
@ -198,7 +411,7 @@ func spyServerRunnable(s *spyServer, logger *zap.Logger, listenAddr string) (sup
return nil, nil, fmt.Errorf("failed to listen: %w", err)
}
logger.Info("publicrpc server listening", zap.String("addr", l.Addr().String()))
logger.Info("spy server listening", zap.String("addr", l.Addr().String()))
grpcServer := common.NewInstrumentedGRPCServer(logger)
spyv1.RegisterSpyRPCServiceServer(grpcServer, s)
@ -298,9 +511,12 @@ func runSpy(cmd *cobra.Command, args []string) {
case v := <-signedInC:
logger.Info("Received signed VAA",
zap.Any("vaa", v.Vaa))
if err := s.Publish(v.Vaa); err != nil {
if err := s.PublishSignedVAA(v.Vaa); err != nil {
logger.Error("failed to publish signed VAA", zap.Error(err))
}
if err := s.HandleGossipVAA(v); err != nil {
logger.Error("failed to HandleGossipVAA", zap.Error(err))
}
}
}
}()

756
node/cmd/spy/spy_test.go Normal file
View File

@ -0,0 +1,756 @@
package spy
import (
"bytes"
"context"
"encoding/hex"
"fmt"
"io"
"net"
"testing"
"time"
"github.com/certusone/wormhole/node/pkg/common"
gossipv1 "github.com/certusone/wormhole/node/pkg/proto/gossip/v1"
publicrpcv1 "github.com/certusone/wormhole/node/pkg/proto/publicrpc/v1"
spyv1 "github.com/certusone/wormhole/node/pkg/proto/spy/v1"
ipfslog "github.com/ipfs/go-log/v2"
"github.com/wormhole-foundation/wormhole/sdk/vaa"
"go.uber.org/zap"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"google.golang.org/grpc/test/bufconn"
)
const vaaNonce = uint32(1)
const vaaSequence = uint64(1)
const tx = "39c5940431b1507c2a496e945dfb6b6760771fb3c19f2531c5976decc16814ca"
var govEmitter = vaa.Address{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4}
// govAddress is the string representation of the govEmitter Address.
// Leaving here in case it is helpful for future tests.
// const govAddress = "0000000000000000000000000000000000000000000000000000000000000004"
func getTxBytes(tx string) []byte {
bytes, err := hex.DecodeString(tx)
if err != nil {
panic("failed decoding Tx string to bytes")
}
return bytes
}
// helper method for *vaa.VAA creation
func getVAA(chainID vaa.ChainID, emitterAddr vaa.Address, nonce uint32) *vaa.VAA {
var payload = []byte{97, 97, 97, 97, 97, 97}
vaa := &vaa.VAA{
Version: vaa.SupportedVAAVersion,
GuardianSetIndex: uint32(1),
Signatures: nil,
Timestamp: time.Unix(0, 0),
Nonce: nonce,
Sequence: vaaSequence,
ConsistencyLevel: uint8(32),
EmitterChain: chainID,
EmitterAddress: emitterAddr,
Payload: payload,
}
return vaa
}
// helper method for *vaa.BatchVAA creation
func getBatchVAA(chainID vaa.ChainID, txID []byte, nonce uint32, emitterAddr vaa.Address) *vaa.BatchVAA {
v := getVAA(chainID, emitterAddr, nonce)
obs := &vaa.Observation{
Index: uint8(0),
Observation: v,
}
var obsList = []*vaa.Observation{}
obsList = append(obsList, obs)
batchVAA := &vaa.BatchVAA{
Version: vaa.BatchVAAVersion,
GuardianSetIndex: uint32(1),
Signatures: nil,
Observations: obsList,
}
return batchVAA
}
// helper method for *gossipv1.SignedBatchVAAWithQuorum creation
func getBatchVAAQuorumMessage(chainID vaa.ChainID, txID []byte, nonce uint32, emitterAddr vaa.Address) *gossipv1.SignedBatchVAAWithQuorum {
batchVaa := getBatchVAA(chainID, txID, nonce, emitterAddr)
vaaBytes, err := batchVaa.Marshal()
if err != nil {
panic("failed marshaling batchVAA.")
}
msg := &gossipv1.SignedBatchVAAWithQuorum{
BatchVaa: vaaBytes,
ChainId: uint32(chainID),
TxId: txID,
Nonce: nonce,
}
return msg
}
// wait for the server to establish a client subscription before returning.
func waitForClientSubscriptionInit(server *spyServer) {
for {
server.subsAllVaaMu.Lock()
subs := len(server.subsAllVaa)
server.subsAllVaaMu.Unlock()
if subs > 0 {
return
}
time.Sleep(time.Millisecond * 10)
}
}
//
// unit tests
//
// returns a gossip message and the pertinant values for filtering
func batchMsg() (msg *gossipv1.SignedBatchVAAWithQuorum, chainID vaa.ChainID, txID []byte, nonce uint32, emitterAddr vaa.Address) {
chainID = vaa.ChainIDEthereum
txID = getTxBytes(tx)
nonce = vaaNonce
emitterAddr = govEmitter
msg = getBatchVAAQuorumMessage(chainID, txID, nonce, emitterAddr)
return msg, chainID, txID, nonce, emitterAddr
}
// happy path of VAA and spyv1.FilterEntry comparison
func TestSpyTransactionIdMatches(t *testing.T) {
batchMsg, chainID, txID, _, _ := batchMsg()
filter := &spyv1.BatchFilter{
ChainId: publicrpcv1.ChainID(chainID),
TxId: txID,
}
matches := TransactionIdMatches(batchMsg, filter)
if !matches {
t.FailNow()
}
}
// filter does not match the VAA
func TestSpyTransactionIdMatchesNoMatch(t *testing.T) {
batchMsg, chainID, _, _, _ := batchMsg()
filter := &spyv1.BatchFilter{
ChainId: publicrpcv1.ChainID(chainID),
TxId: []byte{1, 1, 1, 1}, // anything that does not match txBytes
}
matches := TransactionIdMatches(batchMsg, filter)
if matches {
// should not return true
t.FailNow()
}
}
// happy path
func TestSpyBatchMatchesFilter(t *testing.T) {
batchMsg, chainID, txID, nonce, _ := batchMsg()
// filter without nonce
filter := &spyv1.BatchFilter{
ChainId: publicrpcv1.ChainID(chainID),
TxId: txID,
}
matches := BatchMatchesFilter(batchMsg, filter)
if !matches {
t.FailNow()
}
// filter with nonce
nonceFilter := &spyv1.BatchFilter{
ChainId: publicrpcv1.ChainID(chainID),
TxId: txID,
Nonce: nonce,
}
nonceMatches := BatchMatchesFilter(batchMsg, nonceFilter)
if !nonceMatches {
t.FailNow()
}
}
// filter is valid, but does not match the VAA
func TestSpyBatchMatchesFilterNoMatch(t *testing.T) {
batchMsg, chainID, txID, _, _ := batchMsg()
// different chainID
solFilter := &spyv1.BatchFilter{
ChainId: publicrpcv1.ChainID(vaa.ChainIDSolana),
TxId: txID,
}
solMatches := BatchMatchesFilter(batchMsg, solFilter)
if solMatches {
// should not return true
t.FailNow()
}
// different transaction identifier
txFilter := &spyv1.BatchFilter{
ChainId: publicrpcv1.ChainID(chainID),
TxId: []byte{1, 1, 1, 1}, // anything that does not match txBytes
}
txMatches := BatchMatchesFilter(batchMsg, txFilter)
if txMatches {
// should not return true
t.FailNow()
}
}
//
// gRPC server setup for e2e tests
//
// for protobuf gRPC testing
const bufSize = 1024 * 1024
var lis *bufconn.Listener
var mockedSpyServer *spyServer
// mock the rpc server so it can run in CI without needing ports and such.
func init() {
// setup the spyServer as it is setup in prod, only mock what is necessary.
logger := ipfslog.Logger("wormhole-spy-mocked-in-ci").Desugar()
// only print PANIC logs from the server's logger
_ = ipfslog.SetLogLevel("wormhole-spy-mocked-in-ci", "PANIC")
lis = bufconn.Listen(bufSize)
grpcServer := common.NewInstrumentedGRPCServer(logger)
mockedSpyServer = newSpyServer(logger)
spyv1.RegisterSpyRPCServiceServer(grpcServer, mockedSpyServer)
go func() {
if err := grpcServer.Serve(lis); err != nil {
fmt.Println("server error", err)
logger.Fatal("Server exited with error", zap.Error(err))
}
}()
}
// creates a network connection in memory rather than with the host's network
// stack, for CI. See https://pkg.go.dev/google.golang.org/grpc/test/bufconn for info.
func bufDialer(context.Context, string) (net.Conn, error) {
return lis.Dial()
}
//
// e2e gRPC server tests
// assert clients can connect, supply filters, and responses are as expected
//
// subscription tests - make sure the spy allows subscribing with and without filters
// helper function that setups a gRPC client for spySever
func grpcClientSetup(t *testing.T) (context.Context, *grpc.ClientConn, spyv1.SpyRPCServiceClient) {
ctx := context.Background()
creds := grpc.WithTransportCredentials(insecure.NewCredentials())
conn, err := grpc.DialContext(ctx, "bufnet", grpc.WithContextDialer(bufDialer), creds)
if err != nil {
t.Fatalf("Failed to dial bufnet: %v", err)
}
client := spyv1.NewSpyRPCServiceClient(conn)
return ctx, conn, client
}
// Tests creating a subscription to spyServer with no filters succeeds
func TestSpySubscribeNoFilter(t *testing.T) {
ctx, conn, client := grpcClientSetup(t)
defer conn.Close()
req := &spyv1.SubscribeSignedVAARequest{Filters: []*spyv1.FilterEntry{}}
_, err := client.SubscribeSignedVAA(ctx, req)
if err != nil {
t.Fatalf("SubscribeSignedVAA failed: %v", err)
}
// just check the subscription can be created without returning an error
}
// Tests creating a subscription to spyServer with a spyv1.EmitterFilter succeeds
func TestSpySubscribeEmitterFilter(t *testing.T) {
ctx, conn, client := grpcClientSetup(t)
defer conn.Close()
// create EmitterFilter
emitterFilter := &spyv1.EmitterFilter{ChainId: publicrpcv1.ChainID(vaa.ChainIDEthereum), EmitterAddress: ""}
filterEntryEmitter := &spyv1.FilterEntry_EmitterFilter{EmitterFilter: emitterFilter}
filter := &spyv1.FilterEntry{Filter: filterEntryEmitter}
req := &spyv1.SubscribeSignedVAARequest{Filters: []*spyv1.FilterEntry{filter}}
_, err := client.SubscribeSignedVAA(ctx, req)
if err != nil {
t.Fatalf("SubscribeSignedVAA failed: %v", err)
}
// just check the subscription can be created without returning an error
}
// Tests creating a subscription to spyServer with a spyv1.BatchFilter succeeds
func TestSpySubscribeBatchFilter(t *testing.T) {
ctx, conn, client := grpcClientSetup(t)
defer conn.Close()
batchFilter := &spyv1.BatchFilter{
ChainId: publicrpcv1.ChainID(vaa.ChainIDEthereum),
TxId: getTxBytes(tx),
Nonce: vaaNonce,
}
filterEntryBatch := &spyv1.FilterEntry_BatchFilter{BatchFilter: batchFilter}
filter := &spyv1.FilterEntry{Filter: filterEntryBatch}
req := &spyv1.SubscribeSignedVAAByTypeRequest{Filters: []*spyv1.FilterEntry{filter}}
_, err := client.SubscribeSignedVAAByType(ctx, req)
if err != nil {
t.Fatalf("SubscribeSignedVAAByType failed: %v", err)
}
// just check the subscription can be created without returning an error
}
// Tests creating a subscription to spyServer with a spyv1.BatchTransactionFilter succeeds
func TestSpySubscribeBatchTransactionFilter(t *testing.T) {
ctx, conn, client := grpcClientSetup(t)
defer conn.Close()
batchTxFilter := &spyv1.BatchTransactionFilter{
ChainId: publicrpcv1.ChainID(vaa.ChainIDEthereum),
TxId: getTxBytes(tx),
}
filterEntryBatchTx := &spyv1.FilterEntry_BatchTransactionFilter{
BatchTransactionFilter: batchTxFilter,
}
filter := &spyv1.FilterEntry{Filter: filterEntryBatchTx}
req := &spyv1.SubscribeSignedVAAByTypeRequest{Filters: []*spyv1.FilterEntry{filter}}
_, err := client.SubscribeSignedVAAByType(ctx, req)
if err != nil {
t.Fatalf("SubscribeSignedVAAByType failed: %v", err)
}
// just check the subscription can be created without returning an error
}
// Tests a subscription to spySever with no filters will return message(s)
func TestSpyHandleGossipVAA(t *testing.T) {
ctx, conn, client := grpcClientSetup(t)
defer conn.Close()
vaaToSend := getVAA(vaa.ChainIDEthereum, govEmitter, vaaNonce)
req := &spyv1.SubscribeSignedVAAByTypeRequest{Filters: []*spyv1.FilterEntry{}}
stream, err := client.SubscribeSignedVAAByType(ctx, req)
if err != nil {
t.Fatalf("SubscribeSignedVAA failed: %v", err)
}
doneCh := make(chan bool)
go func() {
defer close(doneCh)
for {
// recieve is a blocking call, it will keep recieving/looping until the pipe breaks.
signedVAA, err := stream.Recv()
if err == io.EOF {
t.Log("the SignedVAA stream has closed, err == io.EOF. going to break.")
t.Fail()
return
}
if err != nil {
t.Log("SubscribeSignedVAAByType returned an error.")
t.Fail()
return
}
vaaRes := signedVAA.GetVaaType()
switch resType := vaaRes.(type) {
case *spyv1.SubscribeSignedVAAByTypeResponse_SignedVaa:
bytes := resType.SignedVaa.Vaa
parsedRes, err := vaa.Unmarshal(bytes)
if err != nil {
t.Log("failed unmarshaling VAA from response")
t.Fail()
return
}
if parsedRes.MessageID() != vaaToSend.MessageID() {
t.Log("parsedRes.MessageID() does not equal vaaToSend.MessageID()")
t.Fail()
return
}
// this test only expects one response, so return
return
}
}
}()
waitForClientSubscriptionInit(mockedSpyServer)
vaaBytes, err := vaaToSend.Marshal()
if err != nil {
t.Fatal("failed marshaling VAA to bytes")
}
msg := &gossipv1.SignedVAAWithQuorum{
Vaa: vaaBytes,
}
err = mockedSpyServer.HandleGossipVAA(msg)
if err != nil {
t.Fatal("failed HandleGossipVAA")
}
<-doneCh
}
// Tests spySever's implementation of the spyv1.EmitterFilter
func TestSpyHandleGossipBatchVAAEmitterFilter(t *testing.T) {
ctx, conn, client := grpcClientSetup(t)
defer conn.Close()
// This test creates a message (gossipMsg) that will be published, and a filter that will allow the
// message through (emitterFilter). Then it subscribes to messages from the server (SubscribeSignedVAAByType),
// and publishes the gossipMsg, along with some messages that do not pass the filter (msg1, msg2, etc).
// This test passes if only the expected gossipMsg is recieved from the client stream (emitterFilterStream.Recv()).
// gossipMsg will be published to the spyServer
gossipMsg, chainID, txID, nonce, emitter := batchMsg()
// create an EmitterFilter request
emitterFilter := &spyv1.EmitterFilter{
ChainId: publicrpcv1.ChainID(chainID),
EmitterAddress: emitter.String(),
}
filterEntryEmitter := &spyv1.FilterEntry_EmitterFilter{EmitterFilter: emitterFilter}
emitterFilterEnvelope := &spyv1.FilterEntry{Filter: filterEntryEmitter}
emitterFilterReq := &spyv1.SubscribeSignedVAAByTypeRequest{Filters: []*spyv1.FilterEntry{emitterFilterEnvelope}}
emitterFilterStream, err := client.SubscribeSignedVAAByType(ctx, emitterFilterReq)
if err != nil {
t.Fatalf("SubscribeSignedVAAByType failed: %v", err)
}
doneCh := make(chan bool)
go func() {
defer close(doneCh)
for {
// recieve is a blocking call, it will keep recieving/looping until the pipe breaks.
res, err := emitterFilterStream.Recv()
if err == io.EOF {
t.Log("the SignedVAA stream has closed, err == io.EOF. going to break.")
t.Fail()
return
}
if err != nil {
t.Log("SubscribeSignedVAAByType returned an error.")
t.Fail()
return
}
vaaRes := res.GetVaaType()
switch resType := vaaRes.(type) {
case *spyv1.SubscribeSignedVAAByTypeResponse_SignedBatchVaa:
vaaBytes := resType.SignedBatchVaa.BatchVaa
// just unmarshal to smoke test
_, err := vaa.UnmarshalBatch(vaaBytes)
if err != nil {
t.Log("failed unmarshaling BatchVAA from response")
t.Fail()
return
}
// check the response is the expected vaa (one that passes the supplied filter)
if !bytes.Equal(resType.SignedBatchVaa.TxId, txID) {
t.Log("Got a VAA from the server stream not matching the supplied filter.")
t.Fail()
}
// check to make sure msg1 did not make it through
if resType.SignedBatchVaa.ChainId != uint32(chainID) {
t.Fail()
}
// check that the VAA we got is exactly what we expect
if !bytes.Equal(vaaBytes, gossipMsg.BatchVaa) {
t.Log("vaaBytes of the response does not match what was sent")
t.Fail()
}
return
case *spyv1.SubscribeSignedVAAByTypeResponse_SignedVaa:
t.Log("got SubscribeSignedVAAByTypeResponse_SignedVaa")
return
}
}
}()
waitForClientSubscriptionInit(mockedSpyServer)
// should not be sent to us by the server
// everything passes the filter except for chainID
msg1 := getBatchVAAQuorumMessage(vaa.ChainIDSolana, txID, nonce, emitter)
err = mockedSpyServer.HandleGossipBatchVAA(msg1)
if err != nil {
t.Fatal("failed HandleGossipBatchVAA for msg1")
}
// should not be sent to us by the server
// everything passes the filter except except for emitterAddress
differentEmitter := vaa.Address{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
msg2 := getBatchVAAQuorumMessage(chainID, txID, nonce, differentEmitter)
err = mockedSpyServer.HandleGossipBatchVAA(msg2)
if err != nil {
t.Fatal("failed HandleGossipBatchVAA for msg2")
}
// passes the filter - should be sent back to us by the server
err = mockedSpyServer.HandleGossipBatchVAA(gossipMsg)
if err != nil {
t.Fatal("failed HandleGossipBatchVAA for gossipMsg")
}
<-doneCh
}
// Tests spySever's implementation of the spyv1.BatchTransactionFilter
func TestSpyHandleGossipBatchVAABatchTxFilter(t *testing.T) {
ctx, conn, client := grpcClientSetup(t)
defer conn.Close()
// This test creates a message (gossipMsg) that will be published, and a filter that will allow the
// message through (batchTxFilter). Then it subscribes to messages from the server (SubscribeSignedVAAByType),
// and publishes the gossipMsg, along with some messages that do not pass the filter (msg1, msg2, etc).
// This test passes if only the expected gossipMsg is recieved from the client stream (batchTxStream.Recv()).
// gossipMsg will be published to the spyServer
// the other values returned are used for setting up the filters we expect this message to pass
gossipMsg, chainID, txID, nonce, emitter := batchMsg()
// create a BatchTransactionFilter request
batchTxFilter := &spyv1.BatchTransactionFilter{
ChainId: publicrpcv1.ChainID(chainID),
TxId: txID,
}
filterEntryBatchTx := &spyv1.FilterEntry_BatchTransactionFilter{
BatchTransactionFilter: batchTxFilter,
}
batchTxFilterEnvelope := &spyv1.FilterEntry{Filter: filterEntryBatchTx}
batchTxReq := &spyv1.SubscribeSignedVAAByTypeRequest{Filters: []*spyv1.FilterEntry{batchTxFilterEnvelope}}
batchTxStream, err := client.SubscribeSignedVAAByType(ctx, batchTxReq)
if err != nil {
t.Fatalf("SubscribeSignedVAAByType failed: %v", err)
}
doneCh := make(chan bool)
go func() {
defer close(doneCh)
for {
// recieve is a blocking call, it will keep recieving/looping until the pipe breaks.
res, err := batchTxStream.Recv()
if err == io.EOF {
t.Log("the SignedVAA stream has closed, err == io.EOF. going to break.")
t.Fail()
return
}
if err != nil {
t.Log("SubscribeSignedVAAByType returned an error.")
t.Fail()
return
}
vaaRes := res.GetVaaType()
switch resType := vaaRes.(type) {
case *spyv1.SubscribeSignedVAAByTypeResponse_SignedBatchVaa:
vaaBytes := resType.SignedBatchVaa.BatchVaa
// just unmarshal to smoke test
_, err := vaa.UnmarshalBatch(vaaBytes)
if err != nil {
t.Log("failed unmarshaling BatchVAA from response")
t.Fail()
return
}
// check the response is the expected vaa (one that passes the supplied filter)
if !bytes.Equal(resType.SignedBatchVaa.TxId, txID) {
t.Log("Got a VAA from the server stream not matching the supplied filter.")
t.Fail()
}
if resType.SignedBatchVaa.ChainId != uint32(chainID) {
t.Fail()
}
// check that the VAA we got is exactly what we expect
if !bytes.Equal(vaaBytes, gossipMsg.BatchVaa) {
t.Log("vaaBytes of the response does not match what was sent")
t.Fail()
}
return
case *spyv1.SubscribeSignedVAAByTypeResponse_SignedVaa:
t.Log("got SubscribeSignedVAAByTypeResponse_SignedVaa")
return
}
}
}()
waitForClientSubscriptionInit(mockedSpyServer)
// should not be sent to us by the server
// everything passes the filter except for chainID
msg1 := getBatchVAAQuorumMessage(vaa.ChainIDSolana, txID, nonce, emitter)
err = mockedSpyServer.HandleGossipBatchVAA(msg1)
if err != nil {
t.Fatal("failed HandleGossipBatchVAA for msg1")
}
// should not be sent to us by the server
// everything passes the filter except except for txID
differentTx := []byte{1, 1, 1, 1} // anything that does not match txBytes
msg2 := getBatchVAAQuorumMessage(chainID, differentTx, nonce, emitter)
err = mockedSpyServer.HandleGossipBatchVAA(msg2)
if err != nil {
t.Fatal("failed HandleGossipBatchVAA for msg2")
}
// passes the filter - should be sent back to us by the server
err = mockedSpyServer.HandleGossipBatchVAA(gossipMsg)
if err != nil {
t.Fatal("failed HandleGossipBatchVAA for gossipMsg")
}
<-doneCh
}
// Tests spySever's implementation of the spyv1.BatchFilter
func TestSpyHandleGossipBatchVAABatchFilter(t *testing.T) {
ctx, conn, client := grpcClientSetup(t)
defer conn.Close()
// This test creates a message (gossipMsg) that will be published, and a filter that will allow the
// message through (batchFilter). Then it subscribes to messages from the server (SubscribeSignedVAAByType),
// and publishes the gossipMsg, along with some messages that do not pass the filter (msg1, msg2, etc).
// This test passes if only the expected gossipMsg is recieved from the client stream (batchStream.Recv()).
// gossipMsg will be published to the spyServer
// the other values returned are used for setting up the filters we expect this message to pass
gossipMsg, chainID, txID, nonce, emitter := batchMsg()
// create a BatchTransactionFilter request
batchFilter := &spyv1.BatchFilter{
ChainId: publicrpcv1.ChainID(chainID),
TxId: txID,
Nonce: nonce,
}
filterEntryBatch := &spyv1.FilterEntry_BatchFilter{
BatchFilter: batchFilter,
}
batchFilterEnvelope := &spyv1.FilterEntry{Filter: filterEntryBatch}
batchReq := &spyv1.SubscribeSignedVAAByTypeRequest{Filters: []*spyv1.FilterEntry{batchFilterEnvelope}}
batchStream, err := client.SubscribeSignedVAAByType(ctx, batchReq)
if err != nil {
t.Fatalf("SubscribeSignedVAAByType failed: %v", err)
}
doneCh := make(chan bool)
go func() {
defer close(doneCh)
for {
// recieve is a blocking call, it will keep recieving/looping until the pipe breaks.
res, err := batchStream.Recv()
if err == io.EOF {
t.Log("the SignedVAA stream has closed, err == io.EOF. going to break.")
t.Fail()
return
}
if err != nil {
t.Log("SubscribeSignedVAAByType returned an error.")
t.Fail()
return
}
vaaRes := res.GetVaaType()
switch resType := vaaRes.(type) {
case *spyv1.SubscribeSignedVAAByTypeResponse_SignedBatchVaa:
vaaBytes := resType.SignedBatchVaa.BatchVaa
// just unmarshal to smoke test
_, err := vaa.UnmarshalBatch(vaaBytes)
if err != nil {
t.Log("failed unmarshaling BatchVAA from response")
t.Fail()
return
}
if resType.SignedBatchVaa.Nonce != uint32(nonce) {
t.Fail()
}
// check the response is the expected vaa (one that passes the supplied filter)
if !bytes.Equal(resType.SignedBatchVaa.TxId, txID) {
t.Log("Got a VAA from the server stream not matching the supplied filter.")
t.Fail()
}
if resType.SignedBatchVaa.ChainId != uint32(chainID) {
t.Fail()
}
// check that the VAA we got is exactly what we expect
if !bytes.Equal(vaaBytes, gossipMsg.BatchVaa) {
t.Log("vaaBytes of the response does not match what was sent")
t.Fail()
}
return
case *spyv1.SubscribeSignedVAAByTypeResponse_SignedVaa:
t.Log("got SubscribeSignedVAAByTypeResponse_SignedVaa")
return
}
}
}()
waitForClientSubscriptionInit(mockedSpyServer)
// should not be sent to us by the server
// everything passes the filter except for chainID
msg1 := getBatchVAAQuorumMessage(vaa.ChainIDSolana, txID, nonce, emitter)
err = mockedSpyServer.HandleGossipBatchVAA(msg1)
if err != nil {
t.Fatal("failed HandleGossipBatchVAA for msg1")
}
// should not be sent to us by the server
// everything passes the filter except except for txID
differentTx := []byte{1, 1, 1, 1} // anything that does not match txBytes
msg2 := getBatchVAAQuorumMessage(chainID, differentTx, nonce, emitter)
err = mockedSpyServer.HandleGossipBatchVAA(msg2)
if err != nil {
t.Fatal("failed HandleGossipBatchVAA for msg2")
}
// should not be sent to us by the server
// everything passes the filter except except for nonce
differentNonce := uint32(8888) // anything that does not match txBytes
msg3 := getBatchVAAQuorumMessage(chainID, txID, differentNonce, emitter)
err = mockedSpyServer.HandleGossipBatchVAA(msg3)
if err != nil {
t.Fatal("failed HandleGossipBatchVAA for msg3")
}
// passes the filter - should be sent back to us by the server
err = mockedSpyServer.HandleGossipBatchVAA(gossipMsg)
if err != nil {
t.Fatal("failed HandleGossipBatchVAA for gossipMsg")
}
<-doneCh
}

View File

@ -658,12 +658,14 @@ type SignedBatchObservation struct {
Hash []byte `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"`
// ECSDA signature of the hash using the node's guardian key.
Signature []byte `protobuf:"bytes,3,opt,name=signature,proto3" json:"signature,omitempty"`
// Transaction hash this observation was made from.
TxHash []byte `protobuf:"bytes,4,opt,name=tx_hash,json=txHash,proto3" json:"tx_hash,omitempty"`
// Unique identifier of the transaction that produced the observation.
TxId []byte `protobuf:"bytes,4,opt,name=tx_id,json=txId,proto3" json:"tx_id,omitempty"`
// Chain ID for this observation.
ChainId uint32 `protobuf:"varint,5,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"`
// Batch ID - emitterChain/transactionID
BatchId string `protobuf:"bytes,6,opt,name=batch_id,json=batchId,proto3" json:"batch_id,omitempty"`
// Nonce of the messages in the batch.
Nonce uint32 `protobuf:"varint,6,opt,name=nonce,proto3" json:"nonce,omitempty"`
// Batch ID - emitterChain/transactionID/nonce
BatchId string `protobuf:"bytes,7,opt,name=batch_id,json=batchId,proto3" json:"batch_id,omitempty"`
}
func (x *SignedBatchObservation) Reset() {
@ -719,9 +721,9 @@ func (x *SignedBatchObservation) GetSignature() []byte {
return nil
}
func (x *SignedBatchObservation) GetTxHash() []byte {
func (x *SignedBatchObservation) GetTxId() []byte {
if x != nil {
return x.TxHash
return x.TxId
}
return nil
}
@ -733,6 +735,13 @@ func (x *SignedBatchObservation) GetChainId() uint32 {
return 0
}
func (x *SignedBatchObservation) GetNonce() uint32 {
if x != nil {
return x.Nonce
}
return 0
}
func (x *SignedBatchObservation) GetBatchId() string {
if x != nil {
return x.BatchId
@ -745,7 +754,16 @@ type SignedBatchVAAWithQuorum struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// batch_vaa bytes are the binary encoding of the BatchVAA
BatchVaa []byte `protobuf:"bytes,1,opt,name=batch_vaa,json=batchVaa,proto3" json:"batch_vaa,omitempty"`
// Emitter Chain ID of the messages
ChainId uint32 `protobuf:"varint,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"`
// Transaction identifier of the observation
TxId []byte `protobuf:"bytes,3,opt,name=tx_id,json=txId,proto3" json:"tx_id,omitempty"`
// Nonce of the messages in the batch
Nonce uint32 `protobuf:"varint,4,opt,name=nonce,proto3" json:"nonce,omitempty"`
// Batch ID - emitterChain/transactionID/nonce string, for convenience
BatchId string `protobuf:"bytes,5,opt,name=batch_id,json=batchId,proto3" json:"batch_id,omitempty"`
}
func (x *SignedBatchVAAWithQuorum) Reset() {
@ -787,6 +805,34 @@ func (x *SignedBatchVAAWithQuorum) GetBatchVaa() []byte {
return nil
}
func (x *SignedBatchVAAWithQuorum) GetChainId() uint32 {
if x != nil {
return x.ChainId
}
return 0
}
func (x *SignedBatchVAAWithQuorum) GetTxId() []byte {
if x != nil {
return x.TxId
}
return nil
}
func (x *SignedBatchVAAWithQuorum) GetNonce() uint32 {
if x != nil {
return x.Nonce
}
return 0
}
func (x *SignedBatchVAAWithQuorum) GetBatchId() string {
if x != nil {
return x.BatchId
}
return ""
}
// This message is published every five minutes.
type SignedChainGovernorConfig struct {
state protoimpl.MessageState
@ -1581,30 +1627,74 @@ var file_gossip_v1_gossip_proto_rawDesc = []byte{
0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x17, 0x0a,
0x07, 0x74, 0x78, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06,
0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x22, 0xad, 0x01, 0x0a, 0x16, 0x53, 0x69, 0x67, 0x6e, 0x65,
0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x22, 0xbf, 0x01, 0x0a, 0x16, 0x53, 0x69, 0x67, 0x6e, 0x65,
0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52,
0x04, 0x61, 0x64, 0x64, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20,
0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67,
0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69,
0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x68, 0x61,
0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68,
0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x62,
0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62,
0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0x37, 0x0a, 0x18, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64,
0x42, 0x61, 0x74, 0x63, 0x68, 0x56, 0x41, 0x41, 0x57, 0x69, 0x74, 0x68, 0x51, 0x75, 0x6f, 0x72,
0x75, 0x6d, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x61, 0x18,
0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x62, 0x61, 0x74, 0x63, 0x68, 0x56, 0x61, 0x61, 0x22,
0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64,
0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08,
0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07,
0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65,
0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x19, 0x0a,
0x08, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52,
0x07, 0x62, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0x98, 0x01, 0x0a, 0x18, 0x53, 0x69, 0x67,
0x6e, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x56, 0x41, 0x41, 0x57, 0x69, 0x74, 0x68, 0x51,
0x75, 0x6f, 0x72, 0x75, 0x6d, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x76,
0x61, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x62, 0x61, 0x74, 0x63, 0x68, 0x56,
0x61, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x13, 0x0a,
0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x74, 0x78,
0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x61, 0x74, 0x63,
0x68, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x61, 0x74, 0x63,
0x68, 0x49, 0x64, 0x22, 0x76, 0x0a, 0x19, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x43, 0x68, 0x61,
0x69, 0x6e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c,
0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e,
0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67,
0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69,
0x61, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x67,
0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x22, 0xd1, 0x03, 0x0a, 0x13,
0x43, 0x68, 0x61, 0x69, 0x6e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x43, 0x6f, 0x6e,
0x66, 0x69, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65,
0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28,
0x03, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69,
0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74,
0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3c, 0x0a, 0x06, 0x63, 0x68, 0x61, 0x69,
0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x73, 0x73, 0x69,
0x70, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e,
0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x06,
0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x3c, 0x0a, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73,
0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x2e,
0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72,
0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x06, 0x74, 0x6f,
0x6b, 0x65, 0x6e, 0x73, 0x1a, 0x7b, 0x0a, 0x05, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x19, 0x0a,
0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x69,
0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04,
0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12,
0x30, 0x0a, 0x14, 0x62, 0x69, 0x67, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69,
0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x62,
0x69, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x7a,
0x65, 0x1a, 0x6c, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x6f, 0x72,
0x69, 0x67, 0x69, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x69, 0x6e,
0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x61, 0x64, 0x64,
0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x72, 0x69, 0x67,
0x69, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x69,
0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x22,
0x76, 0x0a, 0x19, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x47, 0x6f,
0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06,
0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x63, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72,
0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06,
0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, 0x74,
0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72,
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75,
0x72, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x5f, 0x61,
0x64, 0x64, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x67, 0x75, 0x61, 0x72, 0x64,
0x69, 0x61, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x22, 0xd1, 0x03, 0x0a, 0x13, 0x43, 0x68, 0x61, 0x69,
0x6e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12,
0x69, 0x61, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x22, 0x98, 0x05, 0x0a, 0x13, 0x43, 0x68, 0x61, 0x69,
0x6e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07,
0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x63,
@ -1612,81 +1702,44 @@ var file_gossip_v1_gossip_proto_rawDesc = []byte{
0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73,
0x74, 0x61, 0x6d, 0x70, 0x12, 0x3c, 0x0a, 0x06, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x04,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x2e, 0x76, 0x31,
0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x43, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x06, 0x63, 0x68, 0x61, 0x69,
0x6e, 0x73, 0x12, 0x3c, 0x0a, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03,
0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x43,
0x68, 0x61, 0x69, 0x6e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73,
0x1a, 0x7b, 0x0a, 0x05, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61,
0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x63, 0x68, 0x61,
0x69, 0x6e, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6e, 0x6f,
0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x62,
0x69, 0x67, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73,
0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x62, 0x69, 0x67, 0x54, 0x72,
0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x7a, 0x65, 0x1a, 0x6c, 0x0a,
0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e,
0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x25,
0x0a, 0x0e, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x41, 0x64,
0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x03,
0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x22, 0x76, 0x0a, 0x19, 0x53,
0x69, 0x67, 0x6e, 0x65, 0x64, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e,
0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20,
0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x23,
0x0a, 0x0d, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18,
0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x41,
0x64, 0x64, 0x72, 0x22, 0x98, 0x05, 0x0a, 0x13, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x47, 0x6f, 0x76,
0x65, 0x72, 0x6e, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6e,
0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e,
0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74,
0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18,
0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
0x12, 0x3c, 0x0a, 0x06, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x24, 0x2e, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61,
0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x53, 0x74,
0x61, 0x74, 0x75, 0x73, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x06, 0x63, 0x68, 0x61, 0x69,
0x6e, 0x73, 0x1a, 0x8c, 0x01, 0x0a, 0x0b, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x56,
0x41, 0x41, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01,
0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x21,
0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x54, 0x69, 0x6d,
0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x76, 0x61,
0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x6f,
0x6e, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x68,
0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73,
0x68, 0x1a, 0xb3, 0x01, 0x0a, 0x07, 0x45, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x12, 0x27, 0x0a,
0x0f, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x41,
0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f,
0x65, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x61, 0x73, 0x18, 0x02, 0x20,
0x01, 0x28, 0x04, 0x52, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75,
0x65, 0x64, 0x56, 0x61, 0x61, 0x73, 0x12, 0x4f, 0x0a, 0x0d, 0x65, 0x6e, 0x71, 0x75, 0x65, 0x75,
0x65, 0x64, 0x5f, 0x76, 0x61, 0x61, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e,
0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x47,
0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x45, 0x6e,
0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x56, 0x41, 0x41, 0x52, 0x0c, 0x65, 0x6e, 0x71, 0x75, 0x65,
0x75, 0x65, 0x64, 0x56, 0x61, 0x61, 0x73, 0x1a, 0xa8, 0x01, 0x0a, 0x05, 0x43, 0x68, 0x61, 0x69,
0x6e, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x1c,
0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61,
0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01,
0x28, 0x04, 0x52, 0x1a, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x76, 0x61,
0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x42,
0x0a, 0x08, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x26, 0x2e, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61,
0x69, 0x6e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x06, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x1a, 0x8c,
0x01, 0x0a, 0x0b, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x56, 0x41, 0x41, 0x12, 0x1a,
0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04,
0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65,
0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a,
0x0e, 0x6e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x56,
0x61, 0x6c, 0x75, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18,
0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x1a, 0xb3, 0x01,
0x0a, 0x07, 0x45, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x6d, 0x69,
0x74, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0e, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65,
0x73, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x71, 0x75,
0x65, 0x75, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52,
0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x56, 0x61,
0x61, 0x73, 0x12, 0x4f, 0x0a, 0x0d, 0x65, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x5f, 0x76,
0x61, 0x61, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x73, 0x73,
0x69, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x47, 0x6f, 0x76, 0x65, 0x72,
0x6e, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75,
0x65, 0x64, 0x56, 0x41, 0x41, 0x52, 0x0c, 0x65, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x56,
0x61, 0x61, 0x73, 0x1a, 0xa8, 0x01, 0x0a, 0x05, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x19, 0x0a,
0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x1c, 0x72, 0x65, 0x6d, 0x61,
0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f,
0x6e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1a,
0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62,
0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x42, 0x0a, 0x08, 0x65, 0x6d,
0x69, 0x74, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67,
0x6f, 0x73, 0x73, 0x69, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x47, 0x6f,
0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x45, 0x6d, 0x69,
0x74, 0x74, 0x65, 0x72, 0x52, 0x08, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x73, 0x42, 0x41,
0x5a, 0x3f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x65, 0x72,
0x74, 0x75, 0x73, 0x6f, 0x6e, 0x65, 0x2f, 0x77, 0x6f, 0x72, 0x6d, 0x68, 0x6f, 0x6c, 0x65, 0x2f,
0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67,
0x6f, 0x73, 0x73, 0x69, 0x70, 0x2f, 0x76, 0x31, 0x3b, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x76,
0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x2e, 0x45, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x52, 0x08, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65,
0x72, 0x73, 0x42, 0x41, 0x5a, 0x3f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
0x2f, 0x63, 0x65, 0x72, 0x74, 0x75, 0x73, 0x6f, 0x6e, 0x65, 0x2f, 0x77, 0x6f, 0x72, 0x6d, 0x68,
0x6f, 0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x2f, 0x76, 0x31, 0x3b, 0x67, 0x6f, 0x73,
0x73, 0x69, 0x70, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (

View File

@ -220,8 +220,10 @@ type BatchID struct {
// Emitter chain ID.
EmitterChain ChainID `protobuf:"varint,1,opt,name=emitter_chain,json=emitterChain,proto3,enum=publicrpc.v1.ChainID" json:"emitter_chain,omitempty"`
// Hex-encoded (without leading 0x) transaction identifier.
TxId string `protobuf:"bytes,2,opt,name=tx_id,json=txId,proto3" json:"tx_id,omitempty"`
// Transaction's unique identifier.
TxId []byte `protobuf:"bytes,2,opt,name=tx_id,json=txId,proto3" json:"tx_id,omitempty"`
// Nonce of the messages in the batch.
Nonce uint32 `protobuf:"varint,3,opt,name=nonce,proto3" json:"nonce,omitempty"`
}
func (x *BatchID) Reset() {
@ -263,11 +265,18 @@ func (x *BatchID) GetEmitterChain() ChainID {
return ChainID_CHAIN_ID_UNSPECIFIED
}
func (x *BatchID) GetTxId() string {
func (x *BatchID) GetTxId() []byte {
if x != nil {
return x.TxId
}
return ""
return nil
}
func (x *BatchID) GetNonce() uint32 {
if x != nil {
return x.Nonce
}
return 0
}
type GetSignedVAARequest struct {
@ -416,7 +425,7 @@ type GetSignedBatchVAAResponse struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
BatchVaaBytes []byte `protobuf:"bytes,1,opt,name=batch_vaa_bytes,json=batchVaaBytes,proto3" json:"batch_vaa_bytes,omitempty"`
SignedBatchVaa *v1.SignedBatchVAAWithQuorum `protobuf:"bytes,1,opt,name=signed_batch_vaa,json=signedBatchVaa,proto3" json:"signed_batch_vaa,omitempty"`
}
func (x *GetSignedBatchVAAResponse) Reset() {
@ -451,9 +460,9 @@ func (*GetSignedBatchVAAResponse) Descriptor() ([]byte, []int) {
return file_publicrpc_v1_publicrpc_proto_rawDescGZIP(), []int{5}
}
func (x *GetSignedBatchVAAResponse) GetBatchVaaBytes() []byte {
func (x *GetSignedBatchVAAResponse) GetSignedBatchVaa() *v1.SignedBatchVAAWithQuorum {
if x != nil {
return x.BatchVaaBytes
return x.SignedBatchVaa
}
return nil
}
@ -1347,262 +1356,267 @@ var file_publicrpc_v1_publicrpc_proto_rawDesc = []byte{
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x41, 0x64,
0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63,
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63,
0x65, 0x22, 0x5a, 0x0a, 0x07, 0x42, 0x61, 0x74, 0x63, 0x68, 0x49, 0x44, 0x12, 0x3a, 0x0a, 0x0d,
0x65, 0x22, 0x70, 0x0a, 0x07, 0x42, 0x61, 0x74, 0x63, 0x68, 0x49, 0x44, 0x12, 0x3a, 0x0a, 0x0d,
0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e,
0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, 0x52, 0x0c, 0x65, 0x6d, 0x69, 0x74,
0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69,
0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x4d, 0x0a,
0x13, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f,
0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69,
0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49,
0x44, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x22, 0x33, 0x0a, 0x14,
0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x61, 0x61, 0x5f, 0x62, 0x79, 0x74, 0x65,
0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x76, 0x61, 0x61, 0x42, 0x79, 0x74, 0x65,
0x73, 0x22, 0x4c, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x61,
0x74, 0x63, 0x68, 0x56, 0x41, 0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a,
0x08, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x15, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x42,
0x61, 0x74, 0x63, 0x68, 0x49, 0x44, 0x52, 0x07, 0x62, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22,
0x43, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63,
0x68, 0x56, 0x41, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0f,
0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x61, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18,
0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x62, 0x61, 0x74, 0x63, 0x68, 0x56, 0x61, 0x61, 0x42,
0x79, 0x74, 0x65, 0x73, 0x22, 0x1a, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x48,
0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x22, 0x83, 0x02, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x61, 0x72,
0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47,
0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x2d, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47,
0x65, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07,
0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x1a, 0x9c, 0x01, 0x0a, 0x05, 0x45, 0x6e, 0x74, 0x72,
0x79, 0x12, 0x34, 0x0a, 0x16, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x67, 0x75,
0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x14, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x47, 0x75, 0x61, 0x72, 0x64,
0x69, 0x61, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x32, 0x70, 0x5f, 0x6e,
0x6f, 0x64, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
0x70, 0x32, 0x70, 0x4e, 0x6f, 0x64, 0x65, 0x41, 0x64, 0x64, 0x72, 0x12, 0x39, 0x0a, 0x0d, 0x72,
0x61, 0x77, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x48,
0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x0c, 0x72, 0x61, 0x77, 0x48, 0x65, 0x61,
0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72,
0x72, 0x65, 0x6e, 0x74, 0x47, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x53, 0x65, 0x74, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5d, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72,
0x72, 0x65, 0x6e, 0x74, 0x47, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x53, 0x65, 0x74, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0c, 0x67, 0x75, 0x61, 0x72, 0x64,
0x69, 0x61, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e,
0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x75, 0x61,
0x72, 0x64, 0x69, 0x61, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x0b, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69,
0x61, 0x6e, 0x53, 0x65, 0x74, 0x22, 0x41, 0x0a, 0x0b, 0x47, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61,
0x6e, 0x53, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64,
0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61,
0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x2c, 0x0a, 0x2a, 0x47, 0x6f, 0x76, 0x65,
0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65,
0x4e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xc8, 0x02, 0x0a, 0x2b, 0x47, 0x6f, 0x76, 0x65, 0x72,
0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4e,
0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65,
0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63,
0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47,
0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x6f,
0x6e, 0x61, 0x6c, 0x42, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65,
0x73, 0x1a, 0xbd, 0x01, 0x0a, 0x05, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x63,
0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x63,
0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x1c, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e,
0x69, 0x6e, 0x67, 0x5f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x6f,
0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1a, 0x72, 0x65,
0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65,
0x4e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x69,
0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04,
0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12,
0x30, 0x0a, 0x14, 0x62, 0x69, 0x67, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69,
0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x62,
0x69, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x7a,
0x65, 0x22, 0x20, 0x0a, 0x1e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74,
0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x56, 0x41, 0x41, 0x73, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x22, 0xc7, 0x02, 0x0a, 0x1f, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72,
0x47, 0x65, 0x74, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x56, 0x41, 0x41, 0x73, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69,
0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69,
0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72,
0x47, 0x65, 0x74, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x56, 0x41, 0x41, 0x73, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65,
0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x1a, 0xd4, 0x01, 0x0a, 0x05, 0x45, 0x6e, 0x74, 0x72, 0x79,
0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x69,
0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72,
0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72,
0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e,
0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1a,
0x0a, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04,
0x52, 0x08, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65,
0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x0b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a,
0x0e, 0x6e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x56,
0x61, 0x6c, 0x75, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18,
0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x22, 0x56, 0x0a,
0x1c, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x49, 0x73, 0x56, 0x41, 0x41, 0x45, 0x6e,
0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a,
0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x17, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31,
0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73,
0x61, 0x67, 0x65, 0x49, 0x64, 0x22, 0x40, 0x0a, 0x1d, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f,
0x72, 0x49, 0x73, 0x56, 0x41, 0x41, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x71,
0x75, 0x65, 0x75, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x45,
0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x22, 0x1d, 0x0a, 0x1b, 0x47, 0x6f, 0x76, 0x65, 0x72,
0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xd8, 0x01, 0x0a, 0x1c, 0x47, 0x6f, 0x76, 0x65, 0x72,
0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69,
0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69,
0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72,
0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72,
0x69, 0x65, 0x73, 0x1a, 0x6c, 0x0a, 0x05, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x26, 0x0a, 0x0f,
0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x43, 0x68, 0x61,
0x69, 0x6e, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x61,
0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x72,
0x69, 0x67, 0x69, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x70,
0x72, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63,
0x65, 0x2a, 0xdb, 0x04, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, 0x12, 0x18, 0x0a,
0x14, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43,
0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x48, 0x41, 0x49, 0x4e,
0x5f, 0x49, 0x44, 0x5f, 0x53, 0x4f, 0x4c, 0x41, 0x4e, 0x41, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11,
0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x54, 0x48, 0x45, 0x52, 0x45, 0x55,
0x4d, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f,
0x54, 0x45, 0x52, 0x52, 0x41, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x48, 0x41, 0x49, 0x4e,
0x5f, 0x49, 0x44, 0x5f, 0x42, 0x53, 0x43, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x48, 0x41,
0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x50, 0x4f, 0x4c, 0x59, 0x47, 0x4f, 0x4e, 0x10, 0x05, 0x12,
0x16, 0x0a, 0x12, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x56, 0x41, 0x4c,
0x41, 0x4e, 0x43, 0x48, 0x45, 0x10, 0x06, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x49, 0x4e,
0x5f, 0x49, 0x44, 0x5f, 0x4f, 0x41, 0x53, 0x49, 0x53, 0x10, 0x07, 0x12, 0x15, 0x0a, 0x11, 0x43,
0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x41, 0x4e, 0x44,
0x10, 0x08, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x41,
0x55, 0x52, 0x4f, 0x52, 0x41, 0x10, 0x09, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x48, 0x41, 0x49, 0x4e,
0x5f, 0x49, 0x44, 0x5f, 0x46, 0x41, 0x4e, 0x54, 0x4f, 0x4d, 0x10, 0x0a, 0x12, 0x13, 0x0a, 0x0f,
0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x4b, 0x41, 0x52, 0x55, 0x52, 0x41, 0x10,
0x0b, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x43,
0x41, 0x4c, 0x41, 0x10, 0x0c, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49,
0x44, 0x5f, 0x4b, 0x4c, 0x41, 0x59, 0x54, 0x4e, 0x10, 0x0d, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x48,
0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x43, 0x45, 0x4c, 0x4f, 0x10, 0x0e, 0x12, 0x11, 0x0a,
0x0d, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x4e, 0x45, 0x41, 0x52, 0x10, 0x0f,
0x12, 0x15, 0x0a, 0x11, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x4d, 0x4f, 0x4f,
0x4e, 0x42, 0x45, 0x41, 0x4d, 0x10, 0x10, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x48, 0x41, 0x49, 0x4e,
0x5f, 0x49, 0x44, 0x5f, 0x4e, 0x45, 0x4f, 0x4e, 0x10, 0x11, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x48,
0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x52, 0x52, 0x41, 0x32, 0x10, 0x12, 0x12,
0x16, 0x0a, 0x12, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x49, 0x4e, 0x4a, 0x45,
0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x13, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x48, 0x41, 0x49, 0x4e,
0x5f, 0x49, 0x44, 0x5f, 0x4f, 0x53, 0x4d, 0x4f, 0x53, 0x49, 0x53, 0x10, 0x14, 0x12, 0x10, 0x0a,
0x0c, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x55, 0x49, 0x10, 0x15, 0x12,
0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x50, 0x54, 0x4f,
0x53, 0x10, 0x16, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f,
0x41, 0x52, 0x42, 0x49, 0x54, 0x52, 0x55, 0x4d, 0x10, 0x17, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x48,
0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4d, 0x49, 0x53, 0x4d, 0x10,
0x18, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x47, 0x4e,
0x4f, 0x53, 0x49, 0x53, 0x10, 0x19, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f,
0x49, 0x44, 0x5f, 0x50, 0x59, 0x54, 0x48, 0x4e, 0x45, 0x54, 0x10, 0x1a, 0x12, 0x11, 0x0a, 0x0d,
0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x58, 0x50, 0x4c, 0x41, 0x10, 0x1c, 0x32,
0xf5, 0x0a, 0x0a, 0x10, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x52, 0x50, 0x43, 0x53, 0x65, 0x72,
0x76, 0x69, 0x63, 0x65, 0x12, 0x7c, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x48,
0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x12, 0x26, 0x2e, 0x70, 0x75, 0x62, 0x6c,
0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x73, 0x74,
0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x1a, 0x27, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31,
0x2e, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61,
0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93,
0x02, 0x10, 0x12, 0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61,
0x74, 0x73, 0x12, 0xbb, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64,
0x56, 0x41, 0x41, 0x12, 0x21, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e,
0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72,
0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56,
0x41, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x64, 0x82, 0xd3, 0xe4, 0x93,
0x02, 0x5e, 0x12, 0x5c, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x76,
0x61, 0x61, 0x2f, 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x2e, 0x65,
0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x7d, 0x2f, 0x7b, 0x6d,
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65,
0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x7b, 0x6d, 0x65, 0x73, 0x73,
0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x2e, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x7d,
0x12, 0xac, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x61,
0x74, 0x63, 0x68, 0x56, 0x41, 0x41, 0x12, 0x26, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72,
0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42,
0x61, 0x74, 0x63, 0x68, 0x56, 0x41, 0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27,
0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65,
0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x56, 0x41, 0x41, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x46, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x12,
0x3e, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x62, 0x61, 0x74, 0x63,
0x68, 0x5f, 0x76, 0x61, 0x61, 0x2f, 0x7b, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x2e,
0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x7d, 0x2f, 0x7b,
0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x2e, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x7d, 0x12,
0x91, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x47, 0x75,
0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x2a, 0x2e, 0x70, 0x75, 0x62, 0x6c,
0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72,
0x65, 0x6e, 0x74, 0x47, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70,
0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x47,
0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f,
0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x73, 0x65, 0x74, 0x2f, 0x63, 0x75, 0x72, 0x72,
0x65, 0x6e, 0x74, 0x12, 0xcc, 0x01, 0x0a, 0x23, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72,
0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x14, 0x0a,
0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6e, 0x6f,
0x6e, 0x63, 0x65, 0x22, 0x4d, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64,
0x56, 0x41, 0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0a, 0x6d, 0x65,
0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17,
0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65,
0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
0x49, 0x64, 0x22, 0x33, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56,
0x41, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x61,
0x61, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x76,
0x61, 0x61, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x4c, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x53, 0x69,
0x67, 0x6e, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x56, 0x41, 0x41, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x08, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70,
0x63, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x49, 0x44, 0x52, 0x07, 0x62, 0x61,
0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0x6a, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e,
0x65, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x56, 0x41, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x12, 0x4d, 0x0a, 0x10, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x62, 0x61, 0x74,
0x63, 0x68, 0x5f, 0x76, 0x61, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67,
0x6f, 0x73, 0x73, 0x69, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42,
0x61, 0x74, 0x63, 0x68, 0x56, 0x41, 0x41, 0x57, 0x69, 0x74, 0x68, 0x51, 0x75, 0x6f, 0x72, 0x75,
0x6d, 0x52, 0x0e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x56, 0x61,
0x61, 0x22, 0x1a, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x61, 0x72,
0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x83, 0x02,
0x0a, 0x19, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65,
0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x07, 0x65,
0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70,
0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c,
0x61, 0x73, 0x74, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74,
0x72, 0x69, 0x65, 0x73, 0x1a, 0x9c, 0x01, 0x0a, 0x05, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x34,
0x0a, 0x16, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x67, 0x75, 0x61, 0x72, 0x64,
0x69, 0x61, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14,
0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x47, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e,
0x41, 0x64, 0x64, 0x72, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x32, 0x70, 0x5f, 0x6e, 0x6f, 0x64, 0x65,
0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x32, 0x70,
0x4e, 0x6f, 0x64, 0x65, 0x41, 0x64, 0x64, 0x72, 0x12, 0x39, 0x0a, 0x0d, 0x72, 0x61, 0x77, 0x5f,
0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x14, 0x2e, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x72,
0x74, 0x62, 0x65, 0x61, 0x74, 0x52, 0x0c, 0x72, 0x61, 0x77, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62,
0x65, 0x61, 0x74, 0x22, 0x1e, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e,
0x74, 0x47, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x22, 0x5d, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e,
0x74, 0x47, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0c, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e,
0x5f, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x75, 0x62,
0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x75, 0x61, 0x72, 0x64, 0x69,
0x61, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x0b, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x53,
0x65, 0x74, 0x22, 0x41, 0x0a, 0x0b, 0x47, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x53, 0x65,
0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65,
0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72,
0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x2c, 0x0a, 0x2a, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f,
0x72, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74,
0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x22, 0xc8, 0x02, 0x0a, 0x2b, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72,
0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x69,
0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x38, 0x2e, 0x70, 0x75,
0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72,
0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4e,
0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70,
0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63,
0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74, 0x41,
0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
0x42, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e,
0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x1a, 0xbd,
0x01, 0x0a, 0x05, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69,
0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69,
0x6e, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x1c, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67,
0x5f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x6f,
0x6e, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1a, 0x72, 0x65, 0x6d, 0x61, 0x69,
0x6e, 0x69, 0x6e, 0x67, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74,
0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61,
0x6c, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6e,
0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x30, 0x0a, 0x14,
0x62, 0x69, 0x67, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x62, 0x69, 0x67, 0x54,
0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x20,
0x0a, 0x1e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x71,
0x75, 0x65, 0x75, 0x65, 0x64, 0x56, 0x41, 0x41, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x22, 0xc7, 0x02, 0x0a, 0x1f, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74,
0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x56, 0x41, 0x41, 0x73, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18,
0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70,
0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74,
0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61,
0x6c, 0x42, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x6f,
0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x2f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65,
0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x5f, 0x63, 0x68, 0x61,
0x69, 0x6e, 0x12, 0x9a, 0x01, 0x0a, 0x17, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47,
0x65, 0x74, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x56, 0x41, 0x41, 0x73, 0x12, 0x2c,
0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f,
0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65,
0x64, 0x56, 0x41, 0x41, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x70,
0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x56, 0x41, 0x41, 0x73, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72,
0x69, 0x65, 0x73, 0x1a, 0xd4, 0x01, 0x0a, 0x05, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x23, 0x0a,
0x0d, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61,
0x69, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x64,
0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x6d, 0x69,
0x74, 0x74, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73,
0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73,
0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x65, 0x61,
0x73, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x72,
0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x6f,
0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01,
0x28, 0x04, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75,
0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x06, 0x20, 0x01,
0x28, 0x09, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x22, 0x56, 0x0a, 0x1c, 0x47, 0x6f,
0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x49, 0x73, 0x56, 0x41, 0x41, 0x45, 0x6e, 0x71, 0x75, 0x65,
0x75, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0a, 0x6d, 0x65,
0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17,
0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65,
0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
0x49, 0x64, 0x22, 0x40, 0x0a, 0x1d, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x49, 0x73,
0x56, 0x41, 0x41, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x65, 0x6e, 0x71, 0x75, 0x65, 0x75,
0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x45, 0x6e, 0x71, 0x75,
0x65, 0x75, 0x65, 0x64, 0x22, 0x1d, 0x0a, 0x1b, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72,
0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x22, 0xd8, 0x01, 0x0a, 0x1c, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72,
0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18,
0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70,
0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74,
0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x65, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73,
0x1a, 0x6c, 0x0a, 0x05, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x6f, 0x72, 0x69,
0x67, 0x69, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49,
0x64, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72,
0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x69,
0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x69, 0x63,
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x2a, 0xdb,
0x04, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x48,
0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49,
0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44,
0x5f, 0x53, 0x4f, 0x4c, 0x41, 0x4e, 0x41, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x48, 0x41,
0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x54, 0x48, 0x45, 0x52, 0x45, 0x55, 0x4d, 0x10, 0x02,
0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x52,
0x52, 0x41, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44,
0x5f, 0x42, 0x53, 0x43, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f,
0x49, 0x44, 0x5f, 0x50, 0x4f, 0x4c, 0x59, 0x47, 0x4f, 0x4e, 0x10, 0x05, 0x12, 0x16, 0x0a, 0x12,
0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x56, 0x41, 0x4c, 0x41, 0x4e, 0x43,
0x48, 0x45, 0x10, 0x06, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44,
0x5f, 0x4f, 0x41, 0x53, 0x49, 0x53, 0x10, 0x07, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x48, 0x41, 0x49,
0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x41, 0x4e, 0x44, 0x10, 0x08, 0x12,
0x13, 0x0a, 0x0f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x55, 0x52, 0x4f,
0x52, 0x41, 0x10, 0x09, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44,
0x5f, 0x46, 0x41, 0x4e, 0x54, 0x4f, 0x4d, 0x10, 0x0a, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x48, 0x41,
0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x4b, 0x41, 0x52, 0x55, 0x52, 0x41, 0x10, 0x0b, 0x12, 0x12,
0x0a, 0x0e, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x43, 0x41, 0x4c, 0x41,
0x10, 0x0c, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x4b,
0x4c, 0x41, 0x59, 0x54, 0x4e, 0x10, 0x0d, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x48, 0x41, 0x49, 0x4e,
0x5f, 0x49, 0x44, 0x5f, 0x43, 0x45, 0x4c, 0x4f, 0x10, 0x0e, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x48,
0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x4e, 0x45, 0x41, 0x52, 0x10, 0x0f, 0x12, 0x15, 0x0a,
0x11, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x4d, 0x4f, 0x4f, 0x4e, 0x42, 0x45,
0x41, 0x4d, 0x10, 0x10, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44,
0x5f, 0x4e, 0x45, 0x4f, 0x4e, 0x10, 0x11, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x48, 0x41, 0x49, 0x4e,
0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x52, 0x52, 0x41, 0x32, 0x10, 0x12, 0x12, 0x16, 0x0a, 0x12,
0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x49, 0x4e, 0x4a, 0x45, 0x43, 0x54, 0x49,
0x56, 0x45, 0x10, 0x13, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44,
0x5f, 0x4f, 0x53, 0x4d, 0x4f, 0x53, 0x49, 0x53, 0x10, 0x14, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x48,
0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x55, 0x49, 0x10, 0x15, 0x12, 0x12, 0x0a, 0x0e,
0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x50, 0x54, 0x4f, 0x53, 0x10, 0x16,
0x12, 0x15, 0x0a, 0x11, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x52, 0x42,
0x49, 0x54, 0x52, 0x55, 0x4d, 0x10, 0x17, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x48, 0x41, 0x49, 0x4e,
0x5f, 0x49, 0x44, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4d, 0x49, 0x53, 0x4d, 0x10, 0x18, 0x12, 0x13,
0x0a, 0x0f, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x47, 0x4e, 0x4f, 0x53, 0x49,
0x53, 0x10, 0x19, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f,
0x50, 0x59, 0x54, 0x48, 0x4e, 0x45, 0x54, 0x10, 0x1a, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x48, 0x41,
0x49, 0x4e, 0x5f, 0x49, 0x44, 0x5f, 0x58, 0x50, 0x4c, 0x41, 0x10, 0x1c, 0x32, 0x86, 0x0b, 0x0a,
0x10, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x52, 0x50, 0x43, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
0x65, 0x12, 0x7c, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x61, 0x72,
0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x12, 0x26, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72,
0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x61,
0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27,
0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65,
0x74, 0x4c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12,
0x0e, 0x2f, 0x76, 0x31, 0x2f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x73, 0x12,
0xbb, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41,
0x12, 0x21, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e,
0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e,
0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5e, 0x12,
0x5c, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x61, 0x2f,
0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x69, 0x74,
0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x7d, 0x2f, 0x7b, 0x6d, 0x65, 0x73, 0x73,
0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x61,
0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
0x5f, 0x69, 0x64, 0x2e, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x7d, 0x12, 0xbd, 0x01,
0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68,
0x56, 0x41, 0x41, 0x12, 0x26, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e,
0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63,
0x68, 0x56, 0x41, 0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x70, 0x75,
0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x69,
0x67, 0x6e, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x56, 0x41, 0x41, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x51, 0x12, 0x4f, 0x2f, 0x76,
0x31, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x76,
0x61, 0x61, 0x2f, 0x7b, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x69,
0x74, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x7d, 0x2f, 0x7b, 0x62, 0x61, 0x74,
0x63, 0x68, 0x5f, 0x69, 0x64, 0x2e, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x62, 0x61,
0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x2e, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x7d, 0x12, 0x91, 0x01,
0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x47, 0x75, 0x61, 0x72,
0x64, 0x69, 0x61, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x2a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63,
0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e,
0x74, 0x47, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e,
0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x47, 0x75, 0x61,
0x72, 0x64, 0x69, 0x61, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x75,
0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x73, 0x65, 0x74, 0x2f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e,
0x74, 0x12, 0xcc, 0x01, 0x0a, 0x23, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65,
0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x6f, 0x6e,
0x61, 0x6c, 0x42, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x38, 0x2e, 0x70, 0x75, 0x62, 0x6c,
0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f,
0x72, 0x47, 0x65, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74,
0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e,
0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74, 0x41, 0x76,
0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42,
0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30,
0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x6f, 0x76, 0x65,
0x72, 0x6e, 0x6f, 0x72, 0x2f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e,
0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e,
0x12, 0x9a, 0x01, 0x0a, 0x17, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74,
0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x56, 0x41, 0x41, 0x73, 0x12, 0x2c, 0x2e, 0x70,
0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65,
0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x56,
0x41, 0x41, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4,
0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f,
0x72, 0x2f, 0x65, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x61, 0x73, 0x12,
0xe4, 0x01, 0x0a, 0x15, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x49, 0x73, 0x56, 0x41,
0x41, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x12, 0x2a, 0x2e, 0x70, 0x75, 0x62, 0x6c,
0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f,
0x72, 0x49, 0x73, 0x56, 0x41, 0x41, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70,
0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x49, 0x73, 0x56,
0x41, 0x41, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6c, 0x12, 0x6a, 0x2f, 0x76, 0x31, 0x2f,
0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x2f, 0x69, 0x73, 0x5f, 0x76, 0x61, 0x61, 0x5f,
0x65, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x2f, 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
0x65, 0x5f, 0x69, 0x64, 0x2e, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61,
0x69, 0x6e, 0x7d, 0x2f, 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x2e,
0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d,
0x2f, 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x2e, 0x73, 0x65, 0x71,
0x75, 0x65, 0x6e, 0x63, 0x65, 0x7d, 0x12, 0x8e, 0x01, 0x0a, 0x14, 0x47, 0x6f, 0x76, 0x65, 0x72,
0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12,
0x29, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47,
0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4c,
0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x70, 0x75, 0x62,
0x41, 0x41, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x70, 0x75, 0x62,
0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e,
0x6f, 0x72, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17,
0x2f, 0x76, 0x31, 0x2f, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x2f, 0x74, 0x6f, 0x6b,
0x65, 0x6e, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x42, 0x47, 0x5a, 0x45, 0x67, 0x69, 0x74, 0x68, 0x75,
0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x75, 0x73, 0x6f, 0x6e, 0x65, 0x2f,
0x77, 0x6f, 0x72, 0x6d, 0x68, 0x6f, 0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x6b,
0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70,
0x63, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x76, 0x31,
0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x6f, 0x72, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x56, 0x41, 0x41,
0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02,
0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x2f,
0x65, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x61, 0x73, 0x12, 0xe4, 0x01,
0x0a, 0x15, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x49, 0x73, 0x56, 0x41, 0x41, 0x45,
0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x12, 0x2a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63,
0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x49,
0x73, 0x56, 0x41, 0x41, 0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e,
0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x49, 0x73, 0x56, 0x41, 0x41,
0x45, 0x6e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6c, 0x12, 0x6a, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x6f,
0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x2f, 0x69, 0x73, 0x5f, 0x76, 0x61, 0x61, 0x5f, 0x65, 0x6e,
0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x2f, 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f,
0x69, 0x64, 0x2e, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e,
0x7d, 0x2f, 0x7b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x2e, 0x65, 0x6d,
0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x7b,
0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x2e, 0x73, 0x65, 0x71, 0x75, 0x65,
0x6e, 0x63, 0x65, 0x7d, 0x12, 0x8e, 0x01, 0x0a, 0x14, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f,
0x72, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x29, 0x2e,
0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76,
0x65, 0x72, 0x6e, 0x6f, 0x72, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4c, 0x69, 0x73,
0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69,
0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72,
0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76,
0x31, 0x2f, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x6f, 0x72, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e,
0x5f, 0x6c, 0x69, 0x73, 0x74, 0x42, 0x47, 0x5a, 0x45, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x75, 0x73, 0x6f, 0x6e, 0x65, 0x2f, 0x77, 0x6f,
0x72, 0x6d, 0x68, 0x6f, 0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x6b, 0x67, 0x2f,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2f,
0x76, 0x31, 0x3b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x76, 0x31, 0x62, 0x06,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@ -1644,41 +1658,43 @@ var file_publicrpc_v1_publicrpc_proto_goTypes = []interface{}{
(*GovernorGetAvailableNotionalByChainResponse_Entry)(nil), // 21: publicrpc.v1.GovernorGetAvailableNotionalByChainResponse.Entry
(*GovernorGetEnqueuedVAAsResponse_Entry)(nil), // 22: publicrpc.v1.GovernorGetEnqueuedVAAsResponse.Entry
(*GovernorGetTokenListResponse_Entry)(nil), // 23: publicrpc.v1.GovernorGetTokenListResponse.Entry
(*v1.Heartbeat)(nil), // 24: gossip.v1.Heartbeat
(*v1.SignedBatchVAAWithQuorum)(nil), // 24: gossip.v1.SignedBatchVAAWithQuorum
(*v1.Heartbeat)(nil), // 25: gossip.v1.Heartbeat
}
var file_publicrpc_v1_publicrpc_proto_depIdxs = []int32{
0, // 0: publicrpc.v1.MessageID.emitter_chain:type_name -> publicrpc.v1.ChainID
0, // 1: publicrpc.v1.BatchID.emitter_chain:type_name -> publicrpc.v1.ChainID
1, // 2: publicrpc.v1.GetSignedVAARequest.message_id:type_name -> publicrpc.v1.MessageID
2, // 3: publicrpc.v1.GetSignedBatchVAARequest.batch_id:type_name -> publicrpc.v1.BatchID
20, // 4: publicrpc.v1.GetLastHeartbeatsResponse.entries:type_name -> publicrpc.v1.GetLastHeartbeatsResponse.Entry
11, // 5: publicrpc.v1.GetCurrentGuardianSetResponse.guardian_set:type_name -> publicrpc.v1.GuardianSet
21, // 6: publicrpc.v1.GovernorGetAvailableNotionalByChainResponse.entries:type_name -> publicrpc.v1.GovernorGetAvailableNotionalByChainResponse.Entry
22, // 7: publicrpc.v1.GovernorGetEnqueuedVAAsResponse.entries:type_name -> publicrpc.v1.GovernorGetEnqueuedVAAsResponse.Entry
1, // 8: publicrpc.v1.GovernorIsVAAEnqueuedRequest.message_id:type_name -> publicrpc.v1.MessageID
23, // 9: publicrpc.v1.GovernorGetTokenListResponse.entries:type_name -> publicrpc.v1.GovernorGetTokenListResponse.Entry
24, // 10: publicrpc.v1.GetLastHeartbeatsResponse.Entry.raw_heartbeat:type_name -> gossip.v1.Heartbeat
7, // 11: publicrpc.v1.PublicRPCService.GetLastHeartbeats:input_type -> publicrpc.v1.GetLastHeartbeatsRequest
3, // 12: publicrpc.v1.PublicRPCService.GetSignedVAA:input_type -> publicrpc.v1.GetSignedVAARequest
5, // 13: publicrpc.v1.PublicRPCService.GetSignedBatchVAA:input_type -> publicrpc.v1.GetSignedBatchVAARequest
9, // 14: publicrpc.v1.PublicRPCService.GetCurrentGuardianSet:input_type -> publicrpc.v1.GetCurrentGuardianSetRequest
12, // 15: publicrpc.v1.PublicRPCService.GovernorGetAvailableNotionalByChain:input_type -> publicrpc.v1.GovernorGetAvailableNotionalByChainRequest
14, // 16: publicrpc.v1.PublicRPCService.GovernorGetEnqueuedVAAs:input_type -> publicrpc.v1.GovernorGetEnqueuedVAAsRequest
16, // 17: publicrpc.v1.PublicRPCService.GovernorIsVAAEnqueued:input_type -> publicrpc.v1.GovernorIsVAAEnqueuedRequest
18, // 18: publicrpc.v1.PublicRPCService.GovernorGetTokenList:input_type -> publicrpc.v1.GovernorGetTokenListRequest
8, // 19: publicrpc.v1.PublicRPCService.GetLastHeartbeats:output_type -> publicrpc.v1.GetLastHeartbeatsResponse
4, // 20: publicrpc.v1.PublicRPCService.GetSignedVAA:output_type -> publicrpc.v1.GetSignedVAAResponse
6, // 21: publicrpc.v1.PublicRPCService.GetSignedBatchVAA:output_type -> publicrpc.v1.GetSignedBatchVAAResponse
10, // 22: publicrpc.v1.PublicRPCService.GetCurrentGuardianSet:output_type -> publicrpc.v1.GetCurrentGuardianSetResponse
13, // 23: publicrpc.v1.PublicRPCService.GovernorGetAvailableNotionalByChain:output_type -> publicrpc.v1.GovernorGetAvailableNotionalByChainResponse
15, // 24: publicrpc.v1.PublicRPCService.GovernorGetEnqueuedVAAs:output_type -> publicrpc.v1.GovernorGetEnqueuedVAAsResponse
17, // 25: publicrpc.v1.PublicRPCService.GovernorIsVAAEnqueued:output_type -> publicrpc.v1.GovernorIsVAAEnqueuedResponse
19, // 26: publicrpc.v1.PublicRPCService.GovernorGetTokenList:output_type -> publicrpc.v1.GovernorGetTokenListResponse
19, // [19:27] is the sub-list for method output_type
11, // [11:19] is the sub-list for method input_type
11, // [11:11] is the sub-list for extension type_name
11, // [11:11] is the sub-list for extension extendee
0, // [0:11] is the sub-list for field type_name
24, // 4: publicrpc.v1.GetSignedBatchVAAResponse.signed_batch_vaa:type_name -> gossip.v1.SignedBatchVAAWithQuorum
20, // 5: publicrpc.v1.GetLastHeartbeatsResponse.entries:type_name -> publicrpc.v1.GetLastHeartbeatsResponse.Entry
11, // 6: publicrpc.v1.GetCurrentGuardianSetResponse.guardian_set:type_name -> publicrpc.v1.GuardianSet
21, // 7: publicrpc.v1.GovernorGetAvailableNotionalByChainResponse.entries:type_name -> publicrpc.v1.GovernorGetAvailableNotionalByChainResponse.Entry
22, // 8: publicrpc.v1.GovernorGetEnqueuedVAAsResponse.entries:type_name -> publicrpc.v1.GovernorGetEnqueuedVAAsResponse.Entry
1, // 9: publicrpc.v1.GovernorIsVAAEnqueuedRequest.message_id:type_name -> publicrpc.v1.MessageID
23, // 10: publicrpc.v1.GovernorGetTokenListResponse.entries:type_name -> publicrpc.v1.GovernorGetTokenListResponse.Entry
25, // 11: publicrpc.v1.GetLastHeartbeatsResponse.Entry.raw_heartbeat:type_name -> gossip.v1.Heartbeat
7, // 12: publicrpc.v1.PublicRPCService.GetLastHeartbeats:input_type -> publicrpc.v1.GetLastHeartbeatsRequest
3, // 13: publicrpc.v1.PublicRPCService.GetSignedVAA:input_type -> publicrpc.v1.GetSignedVAARequest
5, // 14: publicrpc.v1.PublicRPCService.GetSignedBatchVAA:input_type -> publicrpc.v1.GetSignedBatchVAARequest
9, // 15: publicrpc.v1.PublicRPCService.GetCurrentGuardianSet:input_type -> publicrpc.v1.GetCurrentGuardianSetRequest
12, // 16: publicrpc.v1.PublicRPCService.GovernorGetAvailableNotionalByChain:input_type -> publicrpc.v1.GovernorGetAvailableNotionalByChainRequest
14, // 17: publicrpc.v1.PublicRPCService.GovernorGetEnqueuedVAAs:input_type -> publicrpc.v1.GovernorGetEnqueuedVAAsRequest
16, // 18: publicrpc.v1.PublicRPCService.GovernorIsVAAEnqueued:input_type -> publicrpc.v1.GovernorIsVAAEnqueuedRequest
18, // 19: publicrpc.v1.PublicRPCService.GovernorGetTokenList:input_type -> publicrpc.v1.GovernorGetTokenListRequest
8, // 20: publicrpc.v1.PublicRPCService.GetLastHeartbeats:output_type -> publicrpc.v1.GetLastHeartbeatsResponse
4, // 21: publicrpc.v1.PublicRPCService.GetSignedVAA:output_type -> publicrpc.v1.GetSignedVAAResponse
6, // 22: publicrpc.v1.PublicRPCService.GetSignedBatchVAA:output_type -> publicrpc.v1.GetSignedBatchVAAResponse
10, // 23: publicrpc.v1.PublicRPCService.GetCurrentGuardianSet:output_type -> publicrpc.v1.GetCurrentGuardianSetResponse
13, // 24: publicrpc.v1.PublicRPCService.GovernorGetAvailableNotionalByChain:output_type -> publicrpc.v1.GovernorGetAvailableNotionalByChainResponse
15, // 25: publicrpc.v1.PublicRPCService.GovernorGetEnqueuedVAAs:output_type -> publicrpc.v1.GovernorGetEnqueuedVAAsResponse
17, // 26: publicrpc.v1.PublicRPCService.GovernorIsVAAEnqueued:output_type -> publicrpc.v1.GovernorIsVAAEnqueuedResponse
19, // 27: publicrpc.v1.PublicRPCService.GovernorGetTokenList:output_type -> publicrpc.v1.GovernorGetTokenListResponse
20, // [20:28] is the sub-list for method output_type
12, // [12:20] is the sub-list for method input_type
12, // [12:12] is the sub-list for extension type_name
12, // [12:12] is the sub-list for extension extendee
0, // [0:12] is the sub-list for field type_name
}
func init() { file_publicrpc_v1_publicrpc_proto_init() }

View File

@ -176,7 +176,7 @@ func local_request_PublicRPCService_GetSignedVAA_0(ctx context.Context, marshale
}
var (
filter_PublicRPCService_GetSignedBatchVAA_0 = &utilities.DoubleArray{Encoding: map[string]int{"batch_id": 0, "emitter_chain": 1, "tx_id": 2}, Base: []int{1, 1, 1, 2, 0, 0}, Check: []int{0, 1, 2, 2, 3, 4}}
filter_PublicRPCService_GetSignedBatchVAA_0 = &utilities.DoubleArray{Encoding: map[string]int{"batch_id": 0, "emitter_chain": 1, "tx_id": 2, "nonce": 3}, Base: []int{1, 1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 2, 2, 2, 3, 4, 5}}
)
func request_PublicRPCService_GetSignedBatchVAA_0(ctx context.Context, marshaler runtime.Marshaler, client PublicRPCServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
@ -218,6 +218,16 @@ func request_PublicRPCService_GetSignedBatchVAA_0(ctx context.Context, marshaler
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "batch_id.tx_id", err)
}
val, ok = pathParams["batch_id.nonce"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "batch_id.nonce")
}
err = runtime.PopulateFieldFromPath(&protoReq, "batch_id.nonce", val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "batch_id.nonce", err)
}
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@ -269,6 +279,16 @@ func local_request_PublicRPCService_GetSignedBatchVAA_0(ctx context.Context, mar
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "batch_id.tx_id", err)
}
val, ok = pathParams["batch_id.nonce"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "batch_id.nonce")
}
err = runtime.PopulateFieldFromPath(&protoReq, "batch_id.nonce", val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "batch_id.nonce", err)
}
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@ -537,7 +557,7 @@ func RegisterPublicRPCServiceHandlerServer(ctx context.Context, mux *runtime.Ser
var stream runtime.ServerTransportStream
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/publicrpc.v1.PublicRPCService/GetSignedBatchVAA", runtime.WithHTTPPathPattern("/v1/signed_batch_vaa/{batch_id.emitter_chain}/{batch_id.tx_id}"))
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/publicrpc.v1.PublicRPCService/GetSignedBatchVAA", runtime.WithHTTPPathPattern("/v1/signed_batch_vaa/{batch_id.emitter_chain}/{batch_id.tx_id}/{batch_id.nonce}"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
@ -754,7 +774,7 @@ func RegisterPublicRPCServiceHandlerClient(ctx context.Context, mux *runtime.Ser
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req, "/publicrpc.v1.PublicRPCService/GetSignedBatchVAA", runtime.WithHTTPPathPattern("/v1/signed_batch_vaa/{batch_id.emitter_chain}/{batch_id.tx_id}"))
rctx, err := runtime.AnnotateContext(ctx, mux, req, "/publicrpc.v1.PublicRPCService/GetSignedBatchVAA", runtime.WithHTTPPathPattern("/v1/signed_batch_vaa/{batch_id.emitter_chain}/{batch_id.tx_id}/{batch_id.nonce}"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
@ -878,7 +898,7 @@ var (
pattern_PublicRPCService_GetSignedVAA_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "signed_vaa", "message_id.emitter_chain", "message_id.emitter_address", "message_id.sequence"}, ""))
pattern_PublicRPCService_GetSignedBatchVAA_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "signed_batch_vaa", "batch_id.emitter_chain", "batch_id.tx_id"}, ""))
pattern_PublicRPCService_GetSignedBatchVAA_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "signed_batch_vaa", "batch_id.emitter_chain", "batch_id.tx_id", "batch_id.nonce"}, ""))
pattern_PublicRPCService_GetCurrentGuardianSet_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "guardianset", "current"}, ""))

View File

@ -7,6 +7,7 @@
package spyv1
import (
v11 "github.com/certusone/wormhole/node/pkg/proto/gossip/v1"
v1 "github.com/certusone/wormhole/node/pkg/proto/publicrpc/v1"
_ "google.golang.org/genproto/googleapis/api/annotations"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
@ -80,6 +81,129 @@ func (x *EmitterFilter) GetEmitterAddress() string {
return ""
}
type BatchFilter struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Source chain
ChainId v1.ChainID `protobuf:"varint,1,opt,name=chain_id,json=chainId,proto3,enum=publicrpc.v1.ChainID" json:"chain_id,omitempty"`
// Native transaction identifier bytes.
TxId []byte `protobuf:"bytes,2,opt,name=tx_id,json=txId,proto3" json:"tx_id,omitempty"`
// Nonce of the messages in the batch.
Nonce uint32 `protobuf:"varint,3,opt,name=nonce,proto3" json:"nonce,omitempty"`
}
func (x *BatchFilter) Reset() {
*x = BatchFilter{}
if protoimpl.UnsafeEnabled {
mi := &file_spy_v1_spy_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *BatchFilter) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*BatchFilter) ProtoMessage() {}
func (x *BatchFilter) ProtoReflect() protoreflect.Message {
mi := &file_spy_v1_spy_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use BatchFilter.ProtoReflect.Descriptor instead.
func (*BatchFilter) Descriptor() ([]byte, []int) {
return file_spy_v1_spy_proto_rawDescGZIP(), []int{1}
}
func (x *BatchFilter) GetChainId() v1.ChainID {
if x != nil {
return x.ChainId
}
return v1.ChainID(0)
}
func (x *BatchFilter) GetTxId() []byte {
if x != nil {
return x.TxId
}
return nil
}
func (x *BatchFilter) GetNonce() uint32 {
if x != nil {
return x.Nonce
}
return 0
}
type BatchTransactionFilter struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Source chain
ChainId v1.ChainID `protobuf:"varint,1,opt,name=chain_id,json=chainId,proto3,enum=publicrpc.v1.ChainID" json:"chain_id,omitempty"`
// Native transaction identifier bytes.
TxId []byte `protobuf:"bytes,2,opt,name=tx_id,json=txId,proto3" json:"tx_id,omitempty"`
}
func (x *BatchTransactionFilter) Reset() {
*x = BatchTransactionFilter{}
if protoimpl.UnsafeEnabled {
mi := &file_spy_v1_spy_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *BatchTransactionFilter) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*BatchTransactionFilter) ProtoMessage() {}
func (x *BatchTransactionFilter) ProtoReflect() protoreflect.Message {
mi := &file_spy_v1_spy_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use BatchTransactionFilter.ProtoReflect.Descriptor instead.
func (*BatchTransactionFilter) Descriptor() ([]byte, []int) {
return file_spy_v1_spy_proto_rawDescGZIP(), []int{2}
}
func (x *BatchTransactionFilter) GetChainId() v1.ChainID {
if x != nil {
return x.ChainId
}
return v1.ChainID(0)
}
func (x *BatchTransactionFilter) GetTxId() []byte {
if x != nil {
return x.TxId
}
return nil
}
type FilterEntry struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@ -87,13 +211,15 @@ type FilterEntry struct {
// Types that are assignable to Filter:
// *FilterEntry_EmitterFilter
// *FilterEntry_BatchFilter
// *FilterEntry_BatchTransactionFilter
Filter isFilterEntry_Filter `protobuf_oneof:"filter"`
}
func (x *FilterEntry) Reset() {
*x = FilterEntry{}
if protoimpl.UnsafeEnabled {
mi := &file_spy_v1_spy_proto_msgTypes[1]
mi := &file_spy_v1_spy_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -106,7 +232,7 @@ func (x *FilterEntry) String() string {
func (*FilterEntry) ProtoMessage() {}
func (x *FilterEntry) ProtoReflect() protoreflect.Message {
mi := &file_spy_v1_spy_proto_msgTypes[1]
mi := &file_spy_v1_spy_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -119,7 +245,7 @@ func (x *FilterEntry) ProtoReflect() protoreflect.Message {
// Deprecated: Use FilterEntry.ProtoReflect.Descriptor instead.
func (*FilterEntry) Descriptor() ([]byte, []int) {
return file_spy_v1_spy_proto_rawDescGZIP(), []int{1}
return file_spy_v1_spy_proto_rawDescGZIP(), []int{3}
}
func (m *FilterEntry) GetFilter() isFilterEntry_Filter {
@ -136,6 +262,20 @@ func (x *FilterEntry) GetEmitterFilter() *EmitterFilter {
return nil
}
func (x *FilterEntry) GetBatchFilter() *BatchFilter {
if x, ok := x.GetFilter().(*FilterEntry_BatchFilter); ok {
return x.BatchFilter
}
return nil
}
func (x *FilterEntry) GetBatchTransactionFilter() *BatchTransactionFilter {
if x, ok := x.GetFilter().(*FilterEntry_BatchTransactionFilter); ok {
return x.BatchTransactionFilter
}
return nil
}
type isFilterEntry_Filter interface {
isFilterEntry_Filter()
}
@ -144,8 +284,20 @@ type FilterEntry_EmitterFilter struct {
EmitterFilter *EmitterFilter `protobuf:"bytes,1,opt,name=emitter_filter,json=emitterFilter,proto3,oneof"`
}
type FilterEntry_BatchFilter struct {
BatchFilter *BatchFilter `protobuf:"bytes,2,opt,name=batch_filter,json=batchFilter,proto3,oneof"`
}
type FilterEntry_BatchTransactionFilter struct {
BatchTransactionFilter *BatchTransactionFilter `protobuf:"bytes,3,opt,name=batch_transaction_filter,json=batchTransactionFilter,proto3,oneof"`
}
func (*FilterEntry_EmitterFilter) isFilterEntry_Filter() {}
func (*FilterEntry_BatchFilter) isFilterEntry_Filter() {}
func (*FilterEntry_BatchTransactionFilter) isFilterEntry_Filter() {}
type SubscribeSignedVAARequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@ -159,7 +311,7 @@ type SubscribeSignedVAARequest struct {
func (x *SubscribeSignedVAARequest) Reset() {
*x = SubscribeSignedVAARequest{}
if protoimpl.UnsafeEnabled {
mi := &file_spy_v1_spy_proto_msgTypes[2]
mi := &file_spy_v1_spy_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -172,7 +324,7 @@ func (x *SubscribeSignedVAARequest) String() string {
func (*SubscribeSignedVAARequest) ProtoMessage() {}
func (x *SubscribeSignedVAARequest) ProtoReflect() protoreflect.Message {
mi := &file_spy_v1_spy_proto_msgTypes[2]
mi := &file_spy_v1_spy_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -185,7 +337,7 @@ func (x *SubscribeSignedVAARequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use SubscribeSignedVAARequest.ProtoReflect.Descriptor instead.
func (*SubscribeSignedVAARequest) Descriptor() ([]byte, []int) {
return file_spy_v1_spy_proto_rawDescGZIP(), []int{2}
return file_spy_v1_spy_proto_rawDescGZIP(), []int{4}
}
func (x *SubscribeSignedVAARequest) GetFilters() []*FilterEntry {
@ -195,6 +347,55 @@ func (x *SubscribeSignedVAARequest) GetFilters() []*FilterEntry {
return nil
}
type SubscribeSignedVAAByTypeRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// List of filters to apply to the stream (OR).
// If empty, all messages are streamed.
Filters []*FilterEntry `protobuf:"bytes,1,rep,name=filters,proto3" json:"filters,omitempty"`
}
func (x *SubscribeSignedVAAByTypeRequest) Reset() {
*x = SubscribeSignedVAAByTypeRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_spy_v1_spy_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SubscribeSignedVAAByTypeRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SubscribeSignedVAAByTypeRequest) ProtoMessage() {}
func (x *SubscribeSignedVAAByTypeRequest) ProtoReflect() protoreflect.Message {
mi := &file_spy_v1_spy_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SubscribeSignedVAAByTypeRequest.ProtoReflect.Descriptor instead.
func (*SubscribeSignedVAAByTypeRequest) Descriptor() ([]byte, []int) {
return file_spy_v1_spy_proto_rawDescGZIP(), []int{5}
}
func (x *SubscribeSignedVAAByTypeRequest) GetFilters() []*FilterEntry {
if x != nil {
return x.Filters
}
return nil
}
type SubscribeSignedVAAResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@ -207,7 +408,7 @@ type SubscribeSignedVAAResponse struct {
func (x *SubscribeSignedVAAResponse) Reset() {
*x = SubscribeSignedVAAResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_spy_v1_spy_proto_msgTypes[3]
mi := &file_spy_v1_spy_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -220,7 +421,7 @@ func (x *SubscribeSignedVAAResponse) String() string {
func (*SubscribeSignedVAAResponse) ProtoMessage() {}
func (x *SubscribeSignedVAAResponse) ProtoReflect() protoreflect.Message {
mi := &file_spy_v1_spy_proto_msgTypes[3]
mi := &file_spy_v1_spy_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -233,7 +434,7 @@ func (x *SubscribeSignedVAAResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use SubscribeSignedVAAResponse.ProtoReflect.Descriptor instead.
func (*SubscribeSignedVAAResponse) Descriptor() ([]byte, []int) {
return file_spy_v1_spy_proto_rawDescGZIP(), []int{3}
return file_spy_v1_spy_proto_rawDescGZIP(), []int{6}
}
func (x *SubscribeSignedVAAResponse) GetVaaBytes() []byte {
@ -243,45 +444,177 @@ func (x *SubscribeSignedVAAResponse) GetVaaBytes() []byte {
return nil
}
type SubscribeSignedVAAByTypeResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Types that are assignable to VaaType:
// *SubscribeSignedVAAByTypeResponse_SignedVaa
// *SubscribeSignedVAAByTypeResponse_SignedBatchVaa
VaaType isSubscribeSignedVAAByTypeResponse_VaaType `protobuf_oneof:"vaa_type"`
}
func (x *SubscribeSignedVAAByTypeResponse) Reset() {
*x = SubscribeSignedVAAByTypeResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_spy_v1_spy_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *SubscribeSignedVAAByTypeResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*SubscribeSignedVAAByTypeResponse) ProtoMessage() {}
func (x *SubscribeSignedVAAByTypeResponse) ProtoReflect() protoreflect.Message {
mi := &file_spy_v1_spy_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use SubscribeSignedVAAByTypeResponse.ProtoReflect.Descriptor instead.
func (*SubscribeSignedVAAByTypeResponse) Descriptor() ([]byte, []int) {
return file_spy_v1_spy_proto_rawDescGZIP(), []int{7}
}
func (m *SubscribeSignedVAAByTypeResponse) GetVaaType() isSubscribeSignedVAAByTypeResponse_VaaType {
if m != nil {
return m.VaaType
}
return nil
}
func (x *SubscribeSignedVAAByTypeResponse) GetSignedVaa() *v11.SignedVAAWithQuorum {
if x, ok := x.GetVaaType().(*SubscribeSignedVAAByTypeResponse_SignedVaa); ok {
return x.SignedVaa
}
return nil
}
func (x *SubscribeSignedVAAByTypeResponse) GetSignedBatchVaa() *v11.SignedBatchVAAWithQuorum {
if x, ok := x.GetVaaType().(*SubscribeSignedVAAByTypeResponse_SignedBatchVaa); ok {
return x.SignedBatchVaa
}
return nil
}
type isSubscribeSignedVAAByTypeResponse_VaaType interface {
isSubscribeSignedVAAByTypeResponse_VaaType()
}
type SubscribeSignedVAAByTypeResponse_SignedVaa struct {
SignedVaa *v11.SignedVAAWithQuorum `protobuf:"bytes,1,opt,name=signed_vaa,json=signedVaa,proto3,oneof"`
}
type SubscribeSignedVAAByTypeResponse_SignedBatchVaa struct {
SignedBatchVaa *v11.SignedBatchVAAWithQuorum `protobuf:"bytes,2,opt,name=signed_batch_vaa,json=signedBatchVaa,proto3,oneof"`
}
func (*SubscribeSignedVAAByTypeResponse_SignedVaa) isSubscribeSignedVAAByTypeResponse_VaaType() {}
func (*SubscribeSignedVAAByTypeResponse_SignedBatchVaa) isSubscribeSignedVAAByTypeResponse_VaaType() {
}
var File_spy_v1_spy_proto protoreflect.FileDescriptor
var file_spy_v1_spy_proto_rawDesc = []byte{
0x0a, 0x10, 0x73, 0x70, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x70, 0x79, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x12, 0x06, 0x73, 0x70, 0x79, 0x2e, 0x76, 0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63,
0x72, 0x70, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6a, 0x0a, 0x0d, 0x45, 0x6d, 0x69, 0x74, 0x74, 0x65,
0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e,
0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x75, 0x62, 0x6c,
0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44,
0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x6d, 0x69,
0x74, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0e, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65,
0x73, 0x73, 0x22, 0x57, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72,
0x79, 0x12, 0x3e, 0x0a, 0x0e, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x6c,
0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x70, 0x79, 0x2e,
0x76, 0x31, 0x2e, 0x45, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72,
0x48, 0x00, 0x52, 0x0d, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65,
0x72, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x4a, 0x0a, 0x19, 0x53,
0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70,
0x2f, 0x76, 0x31, 0x2f, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x1a, 0x1c, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x70,
0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6a,
0x0a, 0x0d, 0x45, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12,
0x30, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x0e, 0x32, 0x15, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31,
0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49,
0x64, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64,
0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x6d, 0x69, 0x74,
0x74, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x6a, 0x0a, 0x0b, 0x42, 0x61,
0x74, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x08, 0x63, 0x68, 0x61,
0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x75,
0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e,
0x49, 0x44, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x13, 0x0a, 0x05, 0x74,
0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64,
0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x5f, 0x0a, 0x16, 0x42, 0x61, 0x74, 0x63, 0x68, 0x54,
0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72,
0x12, 0x30, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x72, 0x70, 0x63, 0x2e, 0x76,
0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e,
0x49, 0x64, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
0x0c, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0xed, 0x01, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x74,
0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x3e, 0x0a, 0x0e, 0x65, 0x6d, 0x69, 0x74, 0x74,
0x65, 0x72, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x15, 0x2e, 0x73, 0x70, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72,
0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65,
0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x0c, 0x62, 0x61, 0x74, 0x63, 0x68,
0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e,
0x73, 0x70, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x74,
0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x62, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x6c, 0x74, 0x65,
0x72, 0x12, 0x5a, 0x0a, 0x18, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73,
0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x70, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74,
0x63, 0x68, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c,
0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x16, 0x62, 0x61, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x6e,
0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, 0x0a,
0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x4a, 0x0a, 0x19, 0x53, 0x75, 0x62, 0x73, 0x63,
0x72, 0x69, 0x62, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18,
0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x70, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x46,
0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74,
0x65, 0x72, 0x73, 0x22, 0x50, 0x0a, 0x1f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65,
0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41, 0x42, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72,
0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x70, 0x79, 0x2e, 0x76, 0x31,
0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x66, 0x69,
0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0x39, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69,
0x62, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x61, 0x61, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x76, 0x61, 0x61, 0x42, 0x79, 0x74, 0x65, 0x73,
0x22, 0xc0, 0x01, 0x0a, 0x20, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x53, 0x69,
0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41, 0x42, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f,
0x76, 0x61, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x73, 0x73,
0x69, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41, 0x57,
0x69, 0x74, 0x68, 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x48, 0x00, 0x52, 0x09, 0x73, 0x69, 0x67,
0x6e, 0x65, 0x64, 0x56, 0x61, 0x61, 0x12, 0x4f, 0x0a, 0x10, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64,
0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x23, 0x2e, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67,
0x6e, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x56, 0x41, 0x41, 0x57, 0x69, 0x74, 0x68, 0x51,
0x75, 0x6f, 0x72, 0x75, 0x6d, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42,
0x61, 0x74, 0x63, 0x68, 0x56, 0x61, 0x61, 0x42, 0x0a, 0x0a, 0x08, 0x76, 0x61, 0x61, 0x5f, 0x74,
0x79, 0x70, 0x65, 0x32, 0xb3, 0x02, 0x0a, 0x0d, 0x53, 0x70, 0x79, 0x52, 0x50, 0x43, 0x53, 0x65,
0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x82, 0x01, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72,
0x69, 0x62, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41, 0x12, 0x21, 0x2e, 0x73,
0x70, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x53,
0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
0x22, 0x2e, 0x73, 0x70, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69,
0x62, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x76, 0x31,
0x3a, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65,
0x64, 0x5f, 0x76, 0x61, 0x61, 0x3a, 0x01, 0x2a, 0x30, 0x01, 0x12, 0x9c, 0x01, 0x0a, 0x18, 0x53,
0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x41,
0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74,
0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x70, 0x79, 0x2e,
0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07,
0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x22, 0x39, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x73, 0x63,
0x72, 0x69, 0x62, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x61, 0x61, 0x5f, 0x62, 0x79, 0x74,
0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x76, 0x61, 0x61, 0x42, 0x79, 0x74,
0x65, 0x73, 0x32, 0x94, 0x01, 0x0a, 0x0d, 0x53, 0x70, 0x79, 0x52, 0x50, 0x43, 0x53, 0x65, 0x72,
0x76, 0x69, 0x63, 0x65, 0x12, 0x82, 0x01, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69,
0x62, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41, 0x12, 0x21, 0x2e, 0x73, 0x70,
0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x53, 0x69,
0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22,
0x2e, 0x73, 0x70, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62,
0x65, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x3a,
0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64,
0x5f, 0x76, 0x61, 0x61, 0x3a, 0x01, 0x2a, 0x30, 0x01, 0x42, 0x3b, 0x5a, 0x39, 0x67, 0x69, 0x74,
0x41, 0x42, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x27, 0x2e, 0x73, 0x70, 0x79, 0x2e, 0x76, 0x31,
0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64,
0x56, 0x41, 0x41, 0x42, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x1a, 0x28, 0x2e, 0x73, 0x70, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72,
0x69, 0x62, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x56, 0x41, 0x41, 0x42, 0x79, 0x54, 0x79,
0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93,
0x02, 0x25, 0x22, 0x20, 0x2f, 0x76, 0x31, 0x3a, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62,
0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x61, 0x5f, 0x62, 0x79, 0x5f,
0x74, 0x79, 0x70, 0x65, 0x3a, 0x01, 0x2a, 0x30, 0x01, 0x42, 0x3b, 0x5a, 0x39, 0x67, 0x69, 0x74,
0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x75, 0x73, 0x6f, 0x6e,
0x65, 0x2f, 0x77, 0x6f, 0x72, 0x6d, 0x68, 0x6f, 0x6c, 0x65, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f,
0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x79, 0x2f, 0x76, 0x31,
@ -300,25 +633,40 @@ func file_spy_v1_spy_proto_rawDescGZIP() []byte {
return file_spy_v1_spy_proto_rawDescData
}
var file_spy_v1_spy_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
var file_spy_v1_spy_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
var file_spy_v1_spy_proto_goTypes = []interface{}{
(*EmitterFilter)(nil), // 0: spy.v1.EmitterFilter
(*FilterEntry)(nil), // 1: spy.v1.FilterEntry
(*SubscribeSignedVAARequest)(nil), // 2: spy.v1.SubscribeSignedVAARequest
(*SubscribeSignedVAAResponse)(nil), // 3: spy.v1.SubscribeSignedVAAResponse
(v1.ChainID)(0), // 4: publicrpc.v1.ChainID
(*EmitterFilter)(nil), // 0: spy.v1.EmitterFilter
(*BatchFilter)(nil), // 1: spy.v1.BatchFilter
(*BatchTransactionFilter)(nil), // 2: spy.v1.BatchTransactionFilter
(*FilterEntry)(nil), // 3: spy.v1.FilterEntry
(*SubscribeSignedVAARequest)(nil), // 4: spy.v1.SubscribeSignedVAARequest
(*SubscribeSignedVAAByTypeRequest)(nil), // 5: spy.v1.SubscribeSignedVAAByTypeRequest
(*SubscribeSignedVAAResponse)(nil), // 6: spy.v1.SubscribeSignedVAAResponse
(*SubscribeSignedVAAByTypeResponse)(nil), // 7: spy.v1.SubscribeSignedVAAByTypeResponse
(v1.ChainID)(0), // 8: publicrpc.v1.ChainID
(*v11.SignedVAAWithQuorum)(nil), // 9: gossip.v1.SignedVAAWithQuorum
(*v11.SignedBatchVAAWithQuorum)(nil), // 10: gossip.v1.SignedBatchVAAWithQuorum
}
var file_spy_v1_spy_proto_depIdxs = []int32{
4, // 0: spy.v1.EmitterFilter.chain_id:type_name -> publicrpc.v1.ChainID
0, // 1: spy.v1.FilterEntry.emitter_filter:type_name -> spy.v1.EmitterFilter
1, // 2: spy.v1.SubscribeSignedVAARequest.filters:type_name -> spy.v1.FilterEntry
2, // 3: spy.v1.SpyRPCService.SubscribeSignedVAA:input_type -> spy.v1.SubscribeSignedVAARequest
3, // 4: spy.v1.SpyRPCService.SubscribeSignedVAA:output_type -> spy.v1.SubscribeSignedVAAResponse
4, // [4:5] is the sub-list for method output_type
3, // [3:4] is the sub-list for method input_type
3, // [3:3] is the sub-list for extension type_name
3, // [3:3] is the sub-list for extension extendee
0, // [0:3] is the sub-list for field type_name
8, // 0: spy.v1.EmitterFilter.chain_id:type_name -> publicrpc.v1.ChainID
8, // 1: spy.v1.BatchFilter.chain_id:type_name -> publicrpc.v1.ChainID
8, // 2: spy.v1.BatchTransactionFilter.chain_id:type_name -> publicrpc.v1.ChainID
0, // 3: spy.v1.FilterEntry.emitter_filter:type_name -> spy.v1.EmitterFilter
1, // 4: spy.v1.FilterEntry.batch_filter:type_name -> spy.v1.BatchFilter
2, // 5: spy.v1.FilterEntry.batch_transaction_filter:type_name -> spy.v1.BatchTransactionFilter
3, // 6: spy.v1.SubscribeSignedVAARequest.filters:type_name -> spy.v1.FilterEntry
3, // 7: spy.v1.SubscribeSignedVAAByTypeRequest.filters:type_name -> spy.v1.FilterEntry
9, // 8: spy.v1.SubscribeSignedVAAByTypeResponse.signed_vaa:type_name -> gossip.v1.SignedVAAWithQuorum
10, // 9: spy.v1.SubscribeSignedVAAByTypeResponse.signed_batch_vaa:type_name -> gossip.v1.SignedBatchVAAWithQuorum
4, // 10: spy.v1.SpyRPCService.SubscribeSignedVAA:input_type -> spy.v1.SubscribeSignedVAARequest
5, // 11: spy.v1.SpyRPCService.SubscribeSignedVAAByType:input_type -> spy.v1.SubscribeSignedVAAByTypeRequest
6, // 12: spy.v1.SpyRPCService.SubscribeSignedVAA:output_type -> spy.v1.SubscribeSignedVAAResponse
7, // 13: spy.v1.SpyRPCService.SubscribeSignedVAAByType:output_type -> spy.v1.SubscribeSignedVAAByTypeResponse
12, // [12:14] is the sub-list for method output_type
10, // [10:12] is the sub-list for method input_type
10, // [10:10] is the sub-list for extension type_name
10, // [10:10] is the sub-list for extension extendee
0, // [0:10] is the sub-list for field type_name
}
func init() { file_spy_v1_spy_proto_init() }
@ -340,7 +688,7 @@ func file_spy_v1_spy_proto_init() {
}
}
file_spy_v1_spy_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*FilterEntry); i {
switch v := v.(*BatchFilter); i {
case 0:
return &v.state
case 1:
@ -352,7 +700,7 @@ func file_spy_v1_spy_proto_init() {
}
}
file_spy_v1_spy_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SubscribeSignedVAARequest); i {
switch v := v.(*BatchTransactionFilter); i {
case 0:
return &v.state
case 1:
@ -364,6 +712,42 @@ func file_spy_v1_spy_proto_init() {
}
}
file_spy_v1_spy_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*FilterEntry); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_spy_v1_spy_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SubscribeSignedVAARequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_spy_v1_spy_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SubscribeSignedVAAByTypeRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_spy_v1_spy_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SubscribeSignedVAAResponse); i {
case 0:
return &v.state
@ -375,9 +759,27 @@ func file_spy_v1_spy_proto_init() {
return nil
}
}
file_spy_v1_spy_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SubscribeSignedVAAByTypeResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
file_spy_v1_spy_proto_msgTypes[1].OneofWrappers = []interface{}{
file_spy_v1_spy_proto_msgTypes[3].OneofWrappers = []interface{}{
(*FilterEntry_EmitterFilter)(nil),
(*FilterEntry_BatchFilter)(nil),
(*FilterEntry_BatchTransactionFilter)(nil),
}
file_spy_v1_spy_proto_msgTypes[7].OneofWrappers = []interface{}{
(*SubscribeSignedVAAByTypeResponse_SignedVaa)(nil),
(*SubscribeSignedVAAByTypeResponse_SignedBatchVaa)(nil),
}
type x struct{}
out := protoimpl.TypeBuilder{
@ -385,7 +787,7 @@ func file_spy_v1_spy_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_spy_v1_spy_proto_rawDesc,
NumEnums: 0,
NumMessages: 4,
NumMessages: 8,
NumExtensions: 0,
NumServices: 1,
},

View File

@ -56,6 +56,31 @@ func request_SpyRPCService_SubscribeSignedVAA_0(ctx context.Context, marshaler r
}
func request_SpyRPCService_SubscribeSignedVAAByType_0(ctx context.Context, marshaler runtime.Marshaler, client SpyRPCServiceClient, req *http.Request, pathParams map[string]string) (SpyRPCService_SubscribeSignedVAAByTypeClient, runtime.ServerMetadata, error) {
var protoReq SubscribeSignedVAAByTypeRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
stream, err := client.SubscribeSignedVAAByType(ctx, &protoReq)
if err != nil {
return nil, metadata, err
}
header, err := stream.Header()
if err != nil {
return nil, metadata, err
}
metadata.HeaderMD = header
return stream, metadata, nil
}
// RegisterSpyRPCServiceHandlerServer registers the http handlers for service SpyRPCService to "mux".
// UnaryRPC :call SpyRPCServiceServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
@ -69,6 +94,13 @@ func RegisterSpyRPCServiceHandlerServer(ctx context.Context, mux *runtime.ServeM
return
})
mux.Handle("POST", pattern_SpyRPCService_SubscribeSignedVAAByType_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport")
_, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
})
return nil
}
@ -130,13 +162,37 @@ func RegisterSpyRPCServiceHandlerClient(ctx context.Context, mux *runtime.ServeM
})
mux.Handle("POST", pattern_SpyRPCService_SubscribeSignedVAAByType_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req, "/spy.v1.SpyRPCService/SubscribeSignedVAAByType", runtime.WithHTTPPathPattern("/v1:subscribe_signed_vaa_by_type"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_SpyRPCService_SubscribeSignedVAAByType_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_SpyRPCService_SubscribeSignedVAAByType_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...)
})
return nil
}
var (
pattern_SpyRPCService_SubscribeSignedVAA_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"v1"}, "subscribe_signed_vaa"))
pattern_SpyRPCService_SubscribeSignedVAAByType_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"v1"}, "subscribe_signed_vaa_by_type"))
)
var (
forward_SpyRPCService_SubscribeSignedVAA_0 = runtime.ForwardResponseStream
forward_SpyRPCService_SubscribeSignedVAAByType_0 = runtime.ForwardResponseStream
)

View File

@ -20,6 +20,8 @@ const _ = grpc.SupportPackageIsVersion7
type SpyRPCServiceClient interface {
// SubscribeSignedVAA returns a stream of signed VAA messages received on the network.
SubscribeSignedVAA(ctx context.Context, in *SubscribeSignedVAARequest, opts ...grpc.CallOption) (SpyRPCService_SubscribeSignedVAAClient, error)
// SubscribeSignedBatchVAA returns a stream of signed VAA messages, by type, received on the network.
SubscribeSignedVAAByType(ctx context.Context, in *SubscribeSignedVAAByTypeRequest, opts ...grpc.CallOption) (SpyRPCService_SubscribeSignedVAAByTypeClient, error)
}
type spyRPCServiceClient struct {
@ -62,12 +64,46 @@ func (x *spyRPCServiceSubscribeSignedVAAClient) Recv() (*SubscribeSignedVAARespo
return m, nil
}
func (c *spyRPCServiceClient) SubscribeSignedVAAByType(ctx context.Context, in *SubscribeSignedVAAByTypeRequest, opts ...grpc.CallOption) (SpyRPCService_SubscribeSignedVAAByTypeClient, error) {
stream, err := c.cc.NewStream(ctx, &SpyRPCService_ServiceDesc.Streams[1], "/spy.v1.SpyRPCService/SubscribeSignedVAAByType", opts...)
if err != nil {
return nil, err
}
x := &spyRPCServiceSubscribeSignedVAAByTypeClient{stream}
if err := x.ClientStream.SendMsg(in); err != nil {
return nil, err
}
if err := x.ClientStream.CloseSend(); err != nil {
return nil, err
}
return x, nil
}
type SpyRPCService_SubscribeSignedVAAByTypeClient interface {
Recv() (*SubscribeSignedVAAByTypeResponse, error)
grpc.ClientStream
}
type spyRPCServiceSubscribeSignedVAAByTypeClient struct {
grpc.ClientStream
}
func (x *spyRPCServiceSubscribeSignedVAAByTypeClient) Recv() (*SubscribeSignedVAAByTypeResponse, error) {
m := new(SubscribeSignedVAAByTypeResponse)
if err := x.ClientStream.RecvMsg(m); err != nil {
return nil, err
}
return m, nil
}
// SpyRPCServiceServer is the server API for SpyRPCService service.
// All implementations must embed UnimplementedSpyRPCServiceServer
// for forward compatibility
type SpyRPCServiceServer interface {
// SubscribeSignedVAA returns a stream of signed VAA messages received on the network.
SubscribeSignedVAA(*SubscribeSignedVAARequest, SpyRPCService_SubscribeSignedVAAServer) error
// SubscribeSignedBatchVAA returns a stream of signed VAA messages, by type, received on the network.
SubscribeSignedVAAByType(*SubscribeSignedVAAByTypeRequest, SpyRPCService_SubscribeSignedVAAByTypeServer) error
mustEmbedUnimplementedSpyRPCServiceServer()
}
@ -78,6 +114,9 @@ type UnimplementedSpyRPCServiceServer struct {
func (UnimplementedSpyRPCServiceServer) SubscribeSignedVAA(*SubscribeSignedVAARequest, SpyRPCService_SubscribeSignedVAAServer) error {
return status.Errorf(codes.Unimplemented, "method SubscribeSignedVAA not implemented")
}
func (UnimplementedSpyRPCServiceServer) SubscribeSignedVAAByType(*SubscribeSignedVAAByTypeRequest, SpyRPCService_SubscribeSignedVAAByTypeServer) error {
return status.Errorf(codes.Unimplemented, "method SubscribeSignedVAAByType not implemented")
}
func (UnimplementedSpyRPCServiceServer) mustEmbedUnimplementedSpyRPCServiceServer() {}
// UnsafeSpyRPCServiceServer may be embedded to opt out of forward compatibility for this service.
@ -112,6 +151,27 @@ func (x *spyRPCServiceSubscribeSignedVAAServer) Send(m *SubscribeSignedVAARespon
return x.ServerStream.SendMsg(m)
}
func _SpyRPCService_SubscribeSignedVAAByType_Handler(srv interface{}, stream grpc.ServerStream) error {
m := new(SubscribeSignedVAAByTypeRequest)
if err := stream.RecvMsg(m); err != nil {
return err
}
return srv.(SpyRPCServiceServer).SubscribeSignedVAAByType(m, &spyRPCServiceSubscribeSignedVAAByTypeServer{stream})
}
type SpyRPCService_SubscribeSignedVAAByTypeServer interface {
Send(*SubscribeSignedVAAByTypeResponse) error
grpc.ServerStream
}
type spyRPCServiceSubscribeSignedVAAByTypeServer struct {
grpc.ServerStream
}
func (x *spyRPCServiceSubscribeSignedVAAByTypeServer) Send(m *SubscribeSignedVAAByTypeResponse) error {
return x.ServerStream.SendMsg(m)
}
// SpyRPCService_ServiceDesc is the grpc.ServiceDesc for SpyRPCService service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
@ -125,6 +185,11 @@ var SpyRPCService_ServiceDesc = grpc.ServiceDesc{
Handler: _SpyRPCService_SubscribeSignedVAA_Handler,
ServerStreams: true,
},
{
StreamName: "SubscribeSignedVAAByType",
Handler: _SpyRPCService_SubscribeSignedVAAByType_Handler,
ServerStreams: true,
},
},
Metadata: "spy/v1/spy.proto",
}

View File

@ -135,17 +135,28 @@ message SignedBatchObservation {
bytes hash = 2;
// ECSDA signature of the hash using the node's guardian key.
bytes signature = 3;
// Transaction hash this observation was made from.
bytes tx_hash = 4;
// Unique identifier of the transaction that produced the observation.
bytes tx_id = 4;
// Chain ID for this observation.
uint32 chain_id = 5;
// Batch ID - emitterChain/transactionID
string batch_id = 6;
// Nonce of the messages in the batch.
uint32 nonce = 6;
// Batch ID - emitterChain/transactionID/nonce
string batch_id = 7;
}
message SignedBatchVAAWithQuorum {
// batch_vaa bytes are the binary encoding of the BatchVAA
bytes batch_vaa = 1;
// Emitter Chain ID of the messages
uint32 chain_id = 2;
// Transaction identifier of the observation
bytes tx_id = 3;
// Nonce of the messages in the batch
uint32 nonce = 4;
// Batch ID - emitterChain/transactionID/nonce string, for convenience
string batch_id = 5;
}
// This message is published every five minutes.

View File

@ -51,8 +51,10 @@ message MessageID {
message BatchID {
// Emitter chain ID.
ChainID emitter_chain = 1;
// Hex-encoded (without leading 0x) transaction identifier.
string tx_id = 2;
// Transaction's unique identifier.
bytes tx_id = 2;
// Nonce of the messages in the batch.
uint32 nonce = 3;
}
// PublicRPCService service exposes endpoints to be consumed externally; GUIs, historical record keeping, etc.
@ -74,7 +76,7 @@ service PublicRPCService {
rpc GetSignedBatchVAA (GetSignedBatchVAARequest) returns (GetSignedBatchVAAResponse) {
option (google.api.http) = {
get: "/v1/signed_batch_vaa/{batch_id.emitter_chain}/{batch_id.tx_id}"
get: "/v1/signed_batch_vaa/{batch_id.emitter_chain}/{batch_id.tx_id}/{batch_id.nonce}"
};
}
@ -123,7 +125,7 @@ message GetSignedBatchVAARequest {
}
message GetSignedBatchVAAResponse {
bytes batch_vaa_bytes = 1;
gossip.v1.SignedBatchVAAWithQuorum signed_batch_vaa = 1;
}
message GetLastHeartbeatsRequest {

View File

@ -5,6 +5,7 @@ package spy.v1;
option go_package = "github.com/certusone/wormhole/node/pkg/proto/spy/v1;spyv1";
import "google/api/annotations.proto";
import "gossip/v1/gossip.proto";
import "publicrpc/v1/publicrpc.proto";
// SpyRPCService exposes a gossip introspection service, allowing sniffing of gossip messages.
@ -16,6 +17,13 @@ service SpyRPCService {
body: "*"
};
}
// SubscribeSignedBatchVAA returns a stream of signed VAA messages, by type, received on the network.
rpc SubscribeSignedVAAByType (SubscribeSignedVAAByTypeRequest) returns (stream SubscribeSignedVAAByTypeResponse) {
option (google.api.http) = {
post: "/v1:subscribe_signed_vaa_by_type"
body: "*"
};
}
}
// A MessageFilter represents an exact match for an emitter.
@ -26,9 +34,28 @@ message EmitterFilter {
string emitter_address = 2;
}
message BatchFilter {
// Source chain
publicrpc.v1.ChainID chain_id = 1;
// Native transaction identifier bytes.
bytes tx_id = 2;
// Nonce of the messages in the batch.
uint32 nonce = 3;
}
message BatchTransactionFilter {
// Source chain
publicrpc.v1.ChainID chain_id = 1;
// Native transaction identifier bytes.
bytes tx_id = 2;
}
message FilterEntry {
oneof filter {
EmitterFilter emitter_filter = 1;
BatchFilter batch_filter = 2;
BatchTransactionFilter batch_transaction_filter = 3;
}
}
@ -38,7 +65,20 @@ message SubscribeSignedVAARequest {
repeated FilterEntry filters = 1;
}
message SubscribeSignedVAAByTypeRequest {
// List of filters to apply to the stream (OR).
// If empty, all messages are streamed.
repeated FilterEntry filters = 1;
}
message SubscribeSignedVAAResponse {
// Raw VAA bytes
bytes vaa_bytes = 1;
}
message SubscribeSignedVAAByTypeResponse {
oneof vaa_type {
gossip.v1.SignedVAAWithQuorum signed_vaa = 1;
gossip.v1.SignedBatchVAAWithQuorum signed_batch_vaa = 2;
}
}