diff --git a/gcosmos/README.md b/gcosmos/README.md
index ab61a92..2eb45a5 100644
--- a/gcosmos/README.md
+++ b/gcosmos/README.md
@@ -51,19 +51,23 @@ echo -n "abandon abandon abandon abandon abandon abandon abandon abandon abandon
 ./gcosmos genesis gentx val 1000000stake --keyring-backend=test --chain-id=gcosmos
 ./gcosmos genesis collect-gentxs
 
+# Run the following to reset the application state without having to reset the base data directory.
+# (This is required until Gordian can start from a >0 height)
 # rm -rf ~/.simappv2/data/application.db/
+
 ./gcosmos start --g-http-addr 127.0.0.1:26657 --g-grpc-addr 127.0.0.1:9092
 ```
 
 # Interact
 ```bash
+# Install the grpcurl binary in your relative directory to interact with the GRPC server.
 # GOBIN="$PWD" go install github.com/fullstorydev/grpcurl/cmd/grpcurl@v1
 
 ./grpcurl -plaintext localhost:9092 list
-./grpcurl -plaintext localhost:9092 server.GordianGRPC/GetBlocksWatermark
-./grpcurl -plaintext localhost:9092 server.GordianGRPC/GetValidators
+./grpcurl -plaintext localhost:9092 gordian.server.v1.GordianGRPC/GetBlocksWatermark
+./grpcurl -plaintext localhost:9092 gordian.server.v1.GordianGRPC/GetValidators
 
-./grpcurl -plaintext -d '{"address":"cosmos1r5v5srda7xfth3hn2s26txvrcrntldjumt8mhl","denom":"stake"}' localhost:9092 server.GordianGRPC/QueryAccountBalance
+./grpcurl -plaintext -d '{"address":"cosmos1r5v5srda7xfth3hn2s26txvrcrntldjumt8mhl","denom":"stake"}' localhost:9092 gordian.server.v1.GordianGRPC/QueryAccountBalance
 ```
 
 # Transaction Testing
@@ -73,7 +77,7 @@ echo -n "abandon abandon abandon abandon abandon abandon abandon abandon abandon
 # TODO: get account number
 ./gcosmos tx sign ./example-tx.json --offline --from=val --sequence=1 --account-number=1 --chain-id=TODO:TEMPORARY_CHAIN_ID --keyring-backend=test > example-tx-signed.json
 
-./grpcurl -plaintext -emit-defaults -d '{"tx":"'$(cat example-tx-signed.json | base64 | tr -d '\n')'"}' localhost:9092 server.GordianGRPC/SimulateTransaction
+./grpcurl -plaintext -emit-defaults -d '{"tx":"'$(cat example-tx-signed.json | base64 | tr -d '\n')'"}' localhost:9092 gordian.server.v1.GordianGRPC/SimulateTransaction
 
-./grpcurl -plaintext -emit-defaults -d '{"tx":"'$(cat example-tx-signed.json | base64 | tr -d '\n')'"}' localhost:9092 server.GordianGRPC/SubmitTransaction
+./grpcurl -plaintext -emit-defaults -d '{"tx":"'$(cat example-tx-signed.json | base64 | tr -d '\n')'"}' localhost:9092 gordian.server.v1.GordianGRPC/SubmitTransaction
 ```
diff --git a/gcosmos/gserver/component.go b/gcosmos/gserver/component.go
index 5c005ff..357ecd0 100644
--- a/gcosmos/gserver/component.go
+++ b/gcosmos/gserver/component.go
@@ -257,16 +257,16 @@ func (c *Component) Start(ctx context.Context) error {
 		c.grpcServer = ggrpc.NewGordianGRPCServer(ctx, c.log.With("sys", "grpc"), ggrpc.GRPCServerConfig{
 			Listener: c.grpcLn,
 
-			FinalizationStore: c.fs,
 			MirrorStore:       c.ms,
+			FinalizationStore: c.fs,
 
 			CryptoRegistry: reg,
 
-			// debug:
-			TxCodec:    c.txc,
 			AppManager: am,
-			TxBuf:      txBuf,
+			TxCodec:    c.txc,
 			Codec:      c.codec,
+
+			TxBuffer: txBuf,
 		})
 	}
 
diff --git a/gcosmos/gserver/internal/ggrpc/grpc.pb.go b/gcosmos/gserver/internal/ggrpc/grpc.pb.go
index 6e1dba1..bf595d2 100644
--- a/gcosmos/gserver/internal/ggrpc/grpc.pb.go
+++ b/gcosmos/gserver/internal/ggrpc/grpc.pb.go
@@ -2,7 +2,7 @@
 // versions:
 // 	protoc-gen-go v1.28.0
 // 	protoc        v4.25.1
-// source: proto/server/grpc.proto
+// source: proto/gordian/server/v1/grpc.proto
 
 package ggrpc
 
@@ -29,7 +29,7 @@ type CurrentBlockRequest struct {
 func (x *CurrentBlockRequest) Reset() {
 	*x = CurrentBlockRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_proto_server_grpc_proto_msgTypes[0]
+		mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[0]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -42,7 +42,7 @@ func (x *CurrentBlockRequest) String() string {
 func (*CurrentBlockRequest) ProtoMessage() {}
 
 func (x *CurrentBlockRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_proto_server_grpc_proto_msgTypes[0]
+	mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[0]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -55,7 +55,7 @@ func (x *CurrentBlockRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use CurrentBlockRequest.ProtoReflect.Descriptor instead.
 func (*CurrentBlockRequest) Descriptor() ([]byte, []int) {
-	return file_proto_server_grpc_proto_rawDescGZIP(), []int{0}
+	return file_proto_gordian_server_v1_grpc_proto_rawDescGZIP(), []int{0}
 }
 
 type CurrentBlockResponse struct {
@@ -72,7 +72,7 @@ type CurrentBlockResponse struct {
 func (x *CurrentBlockResponse) Reset() {
 	*x = CurrentBlockResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_proto_server_grpc_proto_msgTypes[1]
+		mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[1]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -85,7 +85,7 @@ func (x *CurrentBlockResponse) String() string {
 func (*CurrentBlockResponse) ProtoMessage() {}
 
 func (x *CurrentBlockResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_proto_server_grpc_proto_msgTypes[1]
+	mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[1]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -98,7 +98,7 @@ func (x *CurrentBlockResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use CurrentBlockResponse.ProtoReflect.Descriptor instead.
 func (*CurrentBlockResponse) Descriptor() ([]byte, []int) {
-	return file_proto_server_grpc_proto_rawDescGZIP(), []int{1}
+	return file_proto_gordian_server_v1_grpc_proto_rawDescGZIP(), []int{1}
 }
 
 func (x *CurrentBlockResponse) GetVotingHeight() uint64 {
@@ -134,14 +134,14 @@ type Validator struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	PubKey []byte `protobuf:"bytes,1,opt,name=pub_key,json=pubKey,proto3" json:"pub_key,omitempty"`
-	Power  uint64 `protobuf:"varint,2,opt,name=power,proto3" json:"power,omitempty"`
+	EncodedPubKey []byte `protobuf:"bytes,1,opt,name=encoded_pub_key,json=encodedPubKey,proto3" json:"encoded_pub_key,omitempty"`
+	Power         uint64 `protobuf:"varint,2,opt,name=power,proto3" json:"power,omitempty"`
 }
 
 func (x *Validator) Reset() {
 	*x = Validator{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_proto_server_grpc_proto_msgTypes[2]
+		mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[2]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -154,7 +154,7 @@ func (x *Validator) String() string {
 func (*Validator) ProtoMessage() {}
 
 func (x *Validator) ProtoReflect() protoreflect.Message {
-	mi := &file_proto_server_grpc_proto_msgTypes[2]
+	mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[2]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -167,12 +167,12 @@ func (x *Validator) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use Validator.ProtoReflect.Descriptor instead.
 func (*Validator) Descriptor() ([]byte, []int) {
-	return file_proto_server_grpc_proto_rawDescGZIP(), []int{2}
+	return file_proto_gordian_server_v1_grpc_proto_rawDescGZIP(), []int{2}
 }
 
-func (x *Validator) GetPubKey() []byte {
+func (x *Validator) GetEncodedPubKey() []byte {
 	if x != nil {
-		return x.PubKey
+		return x.EncodedPubKey
 	}
 	return nil
 }
@@ -193,7 +193,7 @@ type GetValidatorsRequest struct {
 func (x *GetValidatorsRequest) Reset() {
 	*x = GetValidatorsRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_proto_server_grpc_proto_msgTypes[3]
+		mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[3]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -206,7 +206,7 @@ func (x *GetValidatorsRequest) String() string {
 func (*GetValidatorsRequest) ProtoMessage() {}
 
 func (x *GetValidatorsRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_proto_server_grpc_proto_msgTypes[3]
+	mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[3]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -219,7 +219,7 @@ func (x *GetValidatorsRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetValidatorsRequest.ProtoReflect.Descriptor instead.
 func (*GetValidatorsRequest) Descriptor() ([]byte, []int) {
-	return file_proto_server_grpc_proto_rawDescGZIP(), []int{3}
+	return file_proto_gordian_server_v1_grpc_proto_rawDescGZIP(), []int{3}
 }
 
 type GetValidatorsResponse struct {
@@ -233,7 +233,7 @@ type GetValidatorsResponse struct {
 func (x *GetValidatorsResponse) Reset() {
 	*x = GetValidatorsResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_proto_server_grpc_proto_msgTypes[4]
+		mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[4]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -246,7 +246,7 @@ func (x *GetValidatorsResponse) String() string {
 func (*GetValidatorsResponse) ProtoMessage() {}
 
 func (x *GetValidatorsResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_proto_server_grpc_proto_msgTypes[4]
+	mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[4]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -259,7 +259,7 @@ func (x *GetValidatorsResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use GetValidatorsResponse.ProtoReflect.Descriptor instead.
 func (*GetValidatorsResponse) Descriptor() ([]byte, []int) {
-	return file_proto_server_grpc_proto_rawDescGZIP(), []int{4}
+	return file_proto_gordian_server_v1_grpc_proto_rawDescGZIP(), []int{4}
 }
 
 func (x *GetValidatorsResponse) GetValidators() []*Validator {
@@ -280,7 +280,7 @@ type SubmitTransactionRequest struct {
 func (x *SubmitTransactionRequest) Reset() {
 	*x = SubmitTransactionRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_proto_server_grpc_proto_msgTypes[5]
+		mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[5]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -293,7 +293,7 @@ func (x *SubmitTransactionRequest) String() string {
 func (*SubmitTransactionRequest) ProtoMessage() {}
 
 func (x *SubmitTransactionRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_proto_server_grpc_proto_msgTypes[5]
+	mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[5]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -306,7 +306,7 @@ func (x *SubmitTransactionRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use SubmitTransactionRequest.ProtoReflect.Descriptor instead.
 func (*SubmitTransactionRequest) Descriptor() ([]byte, []int) {
-	return file_proto_server_grpc_proto_rawDescGZIP(), []int{5}
+	return file_proto_gordian_server_v1_grpc_proto_rawDescGZIP(), []int{5}
 }
 
 func (x *SubmitTransactionRequest) GetTx() []byte {
@@ -327,7 +327,7 @@ type SubmitSimulationTransactionRequest struct {
 func (x *SubmitSimulationTransactionRequest) Reset() {
 	*x = SubmitSimulationTransactionRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_proto_server_grpc_proto_msgTypes[6]
+		mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[6]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -340,7 +340,7 @@ func (x *SubmitSimulationTransactionRequest) String() string {
 func (*SubmitSimulationTransactionRequest) ProtoMessage() {}
 
 func (x *SubmitSimulationTransactionRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_proto_server_grpc_proto_msgTypes[6]
+	mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[6]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -353,7 +353,7 @@ func (x *SubmitSimulationTransactionRequest) ProtoReflect() protoreflect.Message
 
 // Deprecated: Use SubmitSimulationTransactionRequest.ProtoReflect.Descriptor instead.
 func (*SubmitSimulationTransactionRequest) Descriptor() ([]byte, []int) {
-	return file_proto_server_grpc_proto_rawDescGZIP(), []int{6}
+	return file_proto_gordian_server_v1_grpc_proto_rawDescGZIP(), []int{6}
 }
 
 func (x *SubmitSimulationTransactionRequest) GetTx() []byte {
@@ -372,7 +372,7 @@ type PendingTransactionsRequest struct {
 func (x *PendingTransactionsRequest) Reset() {
 	*x = PendingTransactionsRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_proto_server_grpc_proto_msgTypes[7]
+		mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[7]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -385,7 +385,7 @@ func (x *PendingTransactionsRequest) String() string {
 func (*PendingTransactionsRequest) ProtoMessage() {}
 
 func (x *PendingTransactionsRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_proto_server_grpc_proto_msgTypes[7]
+	mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[7]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -398,7 +398,7 @@ func (x *PendingTransactionsRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use PendingTransactionsRequest.ProtoReflect.Descriptor instead.
 func (*PendingTransactionsRequest) Descriptor() ([]byte, []int) {
-	return file_proto_server_grpc_proto_rawDescGZIP(), []int{7}
+	return file_proto_gordian_server_v1_grpc_proto_rawDescGZIP(), []int{7}
 }
 
 type PendingTransactionsResponse struct {
@@ -413,7 +413,7 @@ type PendingTransactionsResponse struct {
 func (x *PendingTransactionsResponse) Reset() {
 	*x = PendingTransactionsResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_proto_server_grpc_proto_msgTypes[8]
+		mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[8]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -426,7 +426,7 @@ func (x *PendingTransactionsResponse) String() string {
 func (*PendingTransactionsResponse) ProtoMessage() {}
 
 func (x *PendingTransactionsResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_proto_server_grpc_proto_msgTypes[8]
+	mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[8]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -439,7 +439,7 @@ func (x *PendingTransactionsResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use PendingTransactionsResponse.ProtoReflect.Descriptor instead.
 func (*PendingTransactionsResponse) Descriptor() ([]byte, []int) {
-	return file_proto_server_grpc_proto_rawDescGZIP(), []int{8}
+	return file_proto_gordian_server_v1_grpc_proto_rawDescGZIP(), []int{8}
 }
 
 func (x *PendingTransactionsResponse) GetTxs() [][]byte {
@@ -463,7 +463,7 @@ type Attribute struct {
 func (x *Attribute) Reset() {
 	*x = Attribute{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_proto_server_grpc_proto_msgTypes[9]
+		mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[9]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -476,7 +476,7 @@ func (x *Attribute) String() string {
 func (*Attribute) ProtoMessage() {}
 
 func (x *Attribute) ProtoReflect() protoreflect.Message {
-	mi := &file_proto_server_grpc_proto_msgTypes[9]
+	mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[9]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -489,7 +489,7 @@ func (x *Attribute) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use Attribute.ProtoReflect.Descriptor instead.
 func (*Attribute) Descriptor() ([]byte, []int) {
-	return file_proto_server_grpc_proto_rawDescGZIP(), []int{9}
+	return file_proto_gordian_server_v1_grpc_proto_rawDescGZIP(), []int{9}
 }
 
 func (x *Attribute) GetKey() string {
@@ -518,7 +518,7 @@ type Event struct {
 func (x *Event) Reset() {
 	*x = Event{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_proto_server_grpc_proto_msgTypes[10]
+		mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[10]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -531,7 +531,7 @@ func (x *Event) String() string {
 func (*Event) ProtoMessage() {}
 
 func (x *Event) ProtoReflect() protoreflect.Message {
-	mi := &file_proto_server_grpc_proto_msgTypes[10]
+	mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[10]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -544,7 +544,7 @@ func (x *Event) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use Event.ProtoReflect.Descriptor instead.
 func (*Event) Descriptor() ([]byte, []int) {
-	return file_proto_server_grpc_proto_rawDescGZIP(), []int{10}
+	return file_proto_gordian_server_v1_grpc_proto_rawDescGZIP(), []int{10}
 }
 
 func (x *Event) GetType() string {
@@ -582,7 +582,7 @@ type TxResultResponse struct {
 func (x *TxResultResponse) Reset() {
 	*x = TxResultResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_proto_server_grpc_proto_msgTypes[11]
+		mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[11]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -595,7 +595,7 @@ func (x *TxResultResponse) String() string {
 func (*TxResultResponse) ProtoMessage() {}
 
 func (x *TxResultResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_proto_server_grpc_proto_msgTypes[11]
+	mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[11]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -608,7 +608,7 @@ func (x *TxResultResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use TxResultResponse.ProtoReflect.Descriptor instead.
 func (*TxResultResponse) Descriptor() ([]byte, []int) {
-	return file_proto_server_grpc_proto_rawDescGZIP(), []int{11}
+	return file_proto_gordian_server_v1_grpc_proto_rawDescGZIP(), []int{11}
 }
 
 func (x *TxResultResponse) GetEvents() []*Event {
@@ -686,7 +686,7 @@ type BalanceResponse struct {
 func (x *BalanceResponse) Reset() {
 	*x = BalanceResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_proto_server_grpc_proto_msgTypes[12]
+		mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[12]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -699,7 +699,7 @@ func (x *BalanceResponse) String() string {
 func (*BalanceResponse) ProtoMessage() {}
 
 func (x *BalanceResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_proto_server_grpc_proto_msgTypes[12]
+	mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[12]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -712,7 +712,7 @@ func (x *BalanceResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use BalanceResponse.ProtoReflect.Descriptor instead.
 func (*BalanceResponse) Descriptor() ([]byte, []int) {
-	return file_proto_server_grpc_proto_rawDescGZIP(), []int{12}
+	return file_proto_gordian_server_v1_grpc_proto_rawDescGZIP(), []int{12}
 }
 
 func (x *BalanceResponse) GetDenom() string {
@@ -741,7 +741,7 @@ type QueryAccountBalanceRequest struct {
 func (x *QueryAccountBalanceRequest) Reset() {
 	*x = QueryAccountBalanceRequest{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_proto_server_grpc_proto_msgTypes[13]
+		mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[13]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -754,7 +754,7 @@ func (x *QueryAccountBalanceRequest) String() string {
 func (*QueryAccountBalanceRequest) ProtoMessage() {}
 
 func (x *QueryAccountBalanceRequest) ProtoReflect() protoreflect.Message {
-	mi := &file_proto_server_grpc_proto_msgTypes[13]
+	mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[13]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -767,7 +767,7 @@ func (x *QueryAccountBalanceRequest) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use QueryAccountBalanceRequest.ProtoReflect.Descriptor instead.
 func (*QueryAccountBalanceRequest) Descriptor() ([]byte, []int) {
-	return file_proto_server_grpc_proto_rawDescGZIP(), []int{13}
+	return file_proto_gordian_server_v1_grpc_proto_rawDescGZIP(), []int{13}
 }
 
 func (x *QueryAccountBalanceRequest) GetAddress() string {
@@ -795,7 +795,7 @@ type QueryAccountBalanceResponse struct {
 func (x *QueryAccountBalanceResponse) Reset() {
 	*x = QueryAccountBalanceResponse{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_proto_server_grpc_proto_msgTypes[14]
+		mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[14]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -808,7 +808,7 @@ func (x *QueryAccountBalanceResponse) String() string {
 func (*QueryAccountBalanceResponse) ProtoMessage() {}
 
 func (x *QueryAccountBalanceResponse) ProtoReflect() protoreflect.Message {
-	mi := &file_proto_server_grpc_proto_msgTypes[14]
+	mi := &file_proto_gordian_server_v1_grpc_proto_msgTypes[14]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -821,7 +821,7 @@ func (x *QueryAccountBalanceResponse) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use QueryAccountBalanceResponse.ProtoReflect.Descriptor instead.
 func (*QueryAccountBalanceResponse) Descriptor() ([]byte, []int) {
-	return file_proto_server_grpc_proto_rawDescGZIP(), []int{14}
+	return file_proto_gordian_server_v1_grpc_proto_rawDescGZIP(), []int{14}
 }
 
 func (x *QueryAccountBalanceResponse) GetBalance() *BalanceResponse {
@@ -831,33 +831,36 @@ func (x *QueryAccountBalanceResponse) GetBalance() *BalanceResponse {
 	return nil
 }
 
-var File_proto_server_grpc_proto protoreflect.FileDescriptor
-
-var file_proto_server_grpc_proto_rawDesc = []byte{
-	0x0a, 0x17, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x67,
-	0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65,
-	0x72, 0x22, 0x15, 0x0a, 0x13, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63,
-	0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xb6, 0x01, 0x0a, 0x14, 0x43, 0x75, 0x72,
-	0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x65, 0x69, 0x67,
-	0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67,
-	0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67,
-	0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x76, 0x6f,
-	0x74, 0x69, 0x6e, 0x67, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x6f, 0x6d,
-	0x6d, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03,
-	0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67,
-	0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74,
-	0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d,
-	0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x6f, 0x75, 0x6e,
-	0x64, 0x22, 0x3a, 0x0a, 0x09, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x17,
-	0x0a, 0x07, 0x70, 0x75, 0x62, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52,
-	0x06, 0x70, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x6f, 0x77, 0x65, 0x72,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x22, 0x16, 0x0a,
-	0x14, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4a, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69,
-	0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31,
-	0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03,
-	0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x69,
+var File_proto_gordian_server_v1_grpc_proto protoreflect.FileDescriptor
+
+var file_proto_gordian_server_v1_grpc_proto_rawDesc = []byte{
+	0x0a, 0x22, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2f,
+	0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x67, 0x6f, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x73, 0x65,
+	0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x22, 0x15, 0x0a, 0x13, 0x43, 0x75, 0x72, 0x72, 0x65,
+	0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xb6,
+	0x01, 0x0a, 0x14, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x6f, 0x74, 0x69, 0x6e,
+	0x67, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c,
+	0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x21, 0x0a, 0x0c,
+	0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x0d, 0x52, 0x0b, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12,
+	0x2b, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x65,
+	0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x63, 0x6f, 0x6d, 0x6d,
+	0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x29, 0x0a, 0x10,
+	0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x69,
+	0x6e, 0x67, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x49, 0x0a, 0x09, 0x56, 0x61, 0x6c, 0x69, 0x64,
+	0x61, 0x74, 0x6f, 0x72, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f,
+	0x70, 0x75, 0x62, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x65,
+	0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,
+	0x70, 0x6f, 0x77, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x70, 0x6f, 0x77,
+	0x65, 0x72, 0x22, 0x16, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
+	0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x55, 0x0a, 0x15, 0x47, 0x65,
+	0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72,
+	0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x72, 0x64, 0x69, 0x61,
+	0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69,
 	0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72,
 	0x73, 0x22, 0x2a, 0x0a, 0x18, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73,
 	0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a,
@@ -873,130 +876,140 @@ var file_proto_server_grpc_proto_rawDesc = []byte{
 	0x78, 0x73, 0x22, 0x33, 0x0a, 0x09, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12,
 	0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
 	0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4e, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74,
+	0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x59, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74,
 	0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
-	0x74, 0x79, 0x70, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
-	0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65,
-	0x72, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x0a, 0x61, 0x74, 0x74,
-	0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0xf7, 0x01, 0x0a, 0x10, 0x54, 0x78, 0x52, 0x65,
-	0x73, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x06,
-	0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x73,
-	0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65,
-	0x6e, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64,
-	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a,
-	0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74,
-	0x61, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
-	0x6c, 0x6f, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x61, 0x73, 0x5f, 0x77,
-	0x61, 0x6e, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x67, 0x61, 0x73,
-	0x5f, 0x77, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x73, 0x5f, 0x75,
-	0x73, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x67, 0x61, 0x73, 0x5f, 0x75,
-	0x73, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
-	0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x70, 0x61, 0x63,
-	0x65, 0x22, 0x3f, 0x0a, 0x0f, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70,
-	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x01, 0x20,
-	0x01, 0x28, 0x09, 0x52, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d,
-	0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75,
-	0x6e, 0x74, 0x22, 0x4c, 0x0a, 0x1a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75,
-	0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
-	0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65,
-	0x6e, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d,
-	0x22, 0x50, 0x0a, 0x1b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
-	0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
-	0x31, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
-	0x32, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63,
-	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e,
-	0x63, 0x65, 0x32, 0xa6, 0x04, 0x0a, 0x0b, 0x47, 0x6f, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x47, 0x52,
-	0x50, 0x43, 0x12, 0x51, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x57,
-	0x61, 0x74, 0x65, 0x72, 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x1b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65,
-	0x72, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43,
-	0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69,
-	0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x1c, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e,
-	0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x47, 0x65,
-	0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x11, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54,
-	0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x2e, 0x73, 0x65, 0x72,
-	0x76, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61,
-	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x73,
-	0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x13, 0x53, 0x69, 0x6d, 0x75,
-	0x6c, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12,
-	0x2a, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53,
-	0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63,
-	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x73, 0x65,
-	0x72, 0x76, 0x65, 0x72, 0x2e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x13, 0x50, 0x65, 0x6e, 0x64, 0x69,
-	0x6e, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22,
-	0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54,
-	0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x1a, 0x23, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x50, 0x65, 0x6e, 0x64,
+	0x74, 0x79, 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+	0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x72, 0x64, 0x69,
+	0x61, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74,
+	0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+	0x65, 0x73, 0x22, 0x82, 0x02, 0x0a, 0x10, 0x54, 0x78, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74,
+	0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x72, 0x64, 0x69, 0x61,
+	0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e,
+	0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72,
+	0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12,
+	0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63,
+	0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28,
+	0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, 0x67, 0x18, 0x06,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6c, 0x6f, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x6e, 0x66,
+	0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x1e, 0x0a,
+	0x0a, 0x67, 0x61, 0x73, 0x5f, 0x77, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28,
+	0x04, 0x52, 0x0a, 0x67, 0x61, 0x73, 0x5f, 0x77, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x12, 0x1a, 0x0a,
+	0x08, 0x67, 0x61, 0x73, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52,
+	0x08, 0x67, 0x61, 0x73, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x64,
+	0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f,
+	0x64, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x3f, 0x0a, 0x0f, 0x42, 0x61, 0x6c, 0x61, 0x6e,
+	0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65,
+	0x6e, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d,
+	0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x4c, 0x0a, 0x1a, 0x51, 0x75, 0x65, 0x72,
+	0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73,
+	0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
+	0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x22, 0x5b, 0x0a, 0x1b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41,
+	0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x72, 0x64, 0x69, 0x61, 0x6e,
+	0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e,
+	0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61,
+	0x6e, 0x63, 0x65, 0x32, 0xaa, 0x05, 0x0a, 0x0b, 0x47, 0x6f, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x47,
+	0x52, 0x50, 0x43, 0x12, 0x67, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73,
+	0x57, 0x61, 0x74, 0x65, 0x72, 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x26, 0x2e, 0x67, 0x6f, 0x72, 0x64,
+	0x69, 0x61, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x75,
+	0x72, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x27, 0x2e, 0x67, 0x6f, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76,
+	0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x6f,
+	0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x64, 0x0a, 0x0d,
+	0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x27, 0x2e,
+	0x67, 0x6f, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76,
+	0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x6f, 0x72, 0x64, 0x69, 0x61, 0x6e,
+	0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61,
+	0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x00, 0x12, 0x67, 0x0a, 0x11, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x72, 0x61, 0x6e,
+	0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x2e, 0x67, 0x6f, 0x72, 0x64, 0x69, 0x61,
+	0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6d,
+	0x69, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x6f, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x73,
+	0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x75, 0x6c,
+	0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x73, 0x0a, 0x13, 0x53,
+	0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69,
+	0x6f, 0x6e, 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x73, 0x65, 0x72,
+	0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, 0x69, 0x6d,
+	0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69,
+	0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x6f, 0x72, 0x64,
+	0x69, 0x61, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x78,
+	0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+	0x12, 0x76, 0x0a, 0x13, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73,
+	0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x72, 0x64, 0x69, 0x61,
+	0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x6e, 0x64,
 	0x69, 0x6e, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x13, 0x51, 0x75, 0x65,
-	0x72, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65,
-	0x12, 0x22, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41,
-	0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x51, 0x75,
-	0x65, 0x72, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63,
-	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x3e, 0x5a, 0x3c, 0x67,
-	0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x72, 0x6f, 0x6c, 0x6c, 0x63, 0x68,
-	0x61, 0x69, 0x6e, 0x73, 0x2f, 0x67, 0x6f, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2f, 0x67, 0x63, 0x6f,
-	0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x67, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x69, 0x6e, 0x74,
-	0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x67, 0x67, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x33,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x72, 0x64, 0x69, 0x61, 0x6e,
+	0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x6e, 0x64, 0x69,
+	0x6e, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72,
+	0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12,
+	0x2d, 0x2e, 0x67, 0x6f, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+	0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
+	0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e,
+	0x2e, 0x67, 0x6f, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e,
+	0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42,
+	0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
+	0x42, 0x3e, 0x5a, 0x3c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x72,
+	0x6f, 0x6c, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x2f, 0x67, 0x6f, 0x72, 0x64, 0x69, 0x61,
+	0x6e, 0x2f, 0x67, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x67, 0x73, 0x65, 0x72, 0x76, 0x65,
+	0x72, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x67, 0x67, 0x72, 0x70, 0x63,
+	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
-	file_proto_server_grpc_proto_rawDescOnce sync.Once
-	file_proto_server_grpc_proto_rawDescData = file_proto_server_grpc_proto_rawDesc
+	file_proto_gordian_server_v1_grpc_proto_rawDescOnce sync.Once
+	file_proto_gordian_server_v1_grpc_proto_rawDescData = file_proto_gordian_server_v1_grpc_proto_rawDesc
 )
 
-func file_proto_server_grpc_proto_rawDescGZIP() []byte {
-	file_proto_server_grpc_proto_rawDescOnce.Do(func() {
-		file_proto_server_grpc_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_server_grpc_proto_rawDescData)
+func file_proto_gordian_server_v1_grpc_proto_rawDescGZIP() []byte {
+	file_proto_gordian_server_v1_grpc_proto_rawDescOnce.Do(func() {
+		file_proto_gordian_server_v1_grpc_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_gordian_server_v1_grpc_proto_rawDescData)
 	})
-	return file_proto_server_grpc_proto_rawDescData
-}
-
-var file_proto_server_grpc_proto_msgTypes = make([]protoimpl.MessageInfo, 15)
-var file_proto_server_grpc_proto_goTypes = []interface{}{
-	(*CurrentBlockRequest)(nil),                // 0: server.CurrentBlockRequest
-	(*CurrentBlockResponse)(nil),               // 1: server.CurrentBlockResponse
-	(*Validator)(nil),                          // 2: server.Validator
-	(*GetValidatorsRequest)(nil),               // 3: server.GetValidatorsRequest
-	(*GetValidatorsResponse)(nil),              // 4: server.GetValidatorsResponse
-	(*SubmitTransactionRequest)(nil),           // 5: server.SubmitTransactionRequest
-	(*SubmitSimulationTransactionRequest)(nil), // 6: server.SubmitSimulationTransactionRequest
-	(*PendingTransactionsRequest)(nil),         // 7: server.PendingTransactionsRequest
-	(*PendingTransactionsResponse)(nil),        // 8: server.PendingTransactionsResponse
-	(*Attribute)(nil),                          // 9: server.Attribute
-	(*Event)(nil),                              // 10: server.Event
-	(*TxResultResponse)(nil),                   // 11: server.TxResultResponse
-	(*BalanceResponse)(nil),                    // 12: server.BalanceResponse
-	(*QueryAccountBalanceRequest)(nil),         // 13: server.QueryAccountBalanceRequest
-	(*QueryAccountBalanceResponse)(nil),        // 14: server.QueryAccountBalanceResponse
-}
-var file_proto_server_grpc_proto_depIdxs = []int32{
-	2,  // 0: server.GetValidatorsResponse.validators:type_name -> server.Validator
-	9,  // 1: server.Event.attributes:type_name -> server.Attribute
-	10, // 2: server.TxResultResponse.events:type_name -> server.Event
-	12, // 3: server.QueryAccountBalanceResponse.balance:type_name -> server.BalanceResponse
-	0,  // 4: server.GordianGRPC.GetBlocksWatermark:input_type -> server.CurrentBlockRequest
-	3,  // 5: server.GordianGRPC.GetValidators:input_type -> server.GetValidatorsRequest
-	5,  // 6: server.GordianGRPC.SubmitTransaction:input_type -> server.SubmitTransactionRequest
-	6,  // 7: server.GordianGRPC.SimulateTransaction:input_type -> server.SubmitSimulationTransactionRequest
-	7,  // 8: server.GordianGRPC.PendingTransactions:input_type -> server.PendingTransactionsRequest
-	13, // 9: server.GordianGRPC.QueryAccountBalance:input_type -> server.QueryAccountBalanceRequest
-	1,  // 10: server.GordianGRPC.GetBlocksWatermark:output_type -> server.CurrentBlockResponse
-	4,  // 11: server.GordianGRPC.GetValidators:output_type -> server.GetValidatorsResponse
-	11, // 12: server.GordianGRPC.SubmitTransaction:output_type -> server.TxResultResponse
-	11, // 13: server.GordianGRPC.SimulateTransaction:output_type -> server.TxResultResponse
-	8,  // 14: server.GordianGRPC.PendingTransactions:output_type -> server.PendingTransactionsResponse
-	14, // 15: server.GordianGRPC.QueryAccountBalance:output_type -> server.QueryAccountBalanceResponse
+	return file_proto_gordian_server_v1_grpc_proto_rawDescData
+}
+
+var file_proto_gordian_server_v1_grpc_proto_msgTypes = make([]protoimpl.MessageInfo, 15)
+var file_proto_gordian_server_v1_grpc_proto_goTypes = []interface{}{
+	(*CurrentBlockRequest)(nil),                // 0: gordian.server.v1.CurrentBlockRequest
+	(*CurrentBlockResponse)(nil),               // 1: gordian.server.v1.CurrentBlockResponse
+	(*Validator)(nil),                          // 2: gordian.server.v1.Validator
+	(*GetValidatorsRequest)(nil),               // 3: gordian.server.v1.GetValidatorsRequest
+	(*GetValidatorsResponse)(nil),              // 4: gordian.server.v1.GetValidatorsResponse
+	(*SubmitTransactionRequest)(nil),           // 5: gordian.server.v1.SubmitTransactionRequest
+	(*SubmitSimulationTransactionRequest)(nil), // 6: gordian.server.v1.SubmitSimulationTransactionRequest
+	(*PendingTransactionsRequest)(nil),         // 7: gordian.server.v1.PendingTransactionsRequest
+	(*PendingTransactionsResponse)(nil),        // 8: gordian.server.v1.PendingTransactionsResponse
+	(*Attribute)(nil),                          // 9: gordian.server.v1.Attribute
+	(*Event)(nil),                              // 10: gordian.server.v1.Event
+	(*TxResultResponse)(nil),                   // 11: gordian.server.v1.TxResultResponse
+	(*BalanceResponse)(nil),                    // 12: gordian.server.v1.BalanceResponse
+	(*QueryAccountBalanceRequest)(nil),         // 13: gordian.server.v1.QueryAccountBalanceRequest
+	(*QueryAccountBalanceResponse)(nil),        // 14: gordian.server.v1.QueryAccountBalanceResponse
+}
+var file_proto_gordian_server_v1_grpc_proto_depIdxs = []int32{
+	2,  // 0: gordian.server.v1.GetValidatorsResponse.validators:type_name -> gordian.server.v1.Validator
+	9,  // 1: gordian.server.v1.Event.attributes:type_name -> gordian.server.v1.Attribute
+	10, // 2: gordian.server.v1.TxResultResponse.events:type_name -> gordian.server.v1.Event
+	12, // 3: gordian.server.v1.QueryAccountBalanceResponse.balance:type_name -> gordian.server.v1.BalanceResponse
+	0,  // 4: gordian.server.v1.GordianGRPC.GetBlocksWatermark:input_type -> gordian.server.v1.CurrentBlockRequest
+	3,  // 5: gordian.server.v1.GordianGRPC.GetValidators:input_type -> gordian.server.v1.GetValidatorsRequest
+	5,  // 6: gordian.server.v1.GordianGRPC.SubmitTransaction:input_type -> gordian.server.v1.SubmitTransactionRequest
+	6,  // 7: gordian.server.v1.GordianGRPC.SimulateTransaction:input_type -> gordian.server.v1.SubmitSimulationTransactionRequest
+	7,  // 8: gordian.server.v1.GordianGRPC.PendingTransactions:input_type -> gordian.server.v1.PendingTransactionsRequest
+	13, // 9: gordian.server.v1.GordianGRPC.QueryAccountBalance:input_type -> gordian.server.v1.QueryAccountBalanceRequest
+	1,  // 10: gordian.server.v1.GordianGRPC.GetBlocksWatermark:output_type -> gordian.server.v1.CurrentBlockResponse
+	4,  // 11: gordian.server.v1.GordianGRPC.GetValidators:output_type -> gordian.server.v1.GetValidatorsResponse
+	11, // 12: gordian.server.v1.GordianGRPC.SubmitTransaction:output_type -> gordian.server.v1.TxResultResponse
+	11, // 13: gordian.server.v1.GordianGRPC.SimulateTransaction:output_type -> gordian.server.v1.TxResultResponse
+	8,  // 14: gordian.server.v1.GordianGRPC.PendingTransactions:output_type -> gordian.server.v1.PendingTransactionsResponse
+	14, // 15: gordian.server.v1.GordianGRPC.QueryAccountBalance:output_type -> gordian.server.v1.QueryAccountBalanceResponse
 	10, // [10:16] is the sub-list for method output_type
 	4,  // [4:10] is the sub-list for method input_type
 	4,  // [4:4] is the sub-list for extension type_name
@@ -1004,13 +1017,13 @@ var file_proto_server_grpc_proto_depIdxs = []int32{
 	0,  // [0:4] is the sub-list for field type_name
 }
 
-func init() { file_proto_server_grpc_proto_init() }
-func file_proto_server_grpc_proto_init() {
-	if File_proto_server_grpc_proto != nil {
+func init() { file_proto_gordian_server_v1_grpc_proto_init() }
+func file_proto_gordian_server_v1_grpc_proto_init() {
+	if File_proto_gordian_server_v1_grpc_proto != nil {
 		return
 	}
 	if !protoimpl.UnsafeEnabled {
-		file_proto_server_grpc_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+		file_proto_gordian_server_v1_grpc_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*CurrentBlockRequest); i {
 			case 0:
 				return &v.state
@@ -1022,7 +1035,7 @@ func file_proto_server_grpc_proto_init() {
 				return nil
 			}
 		}
-		file_proto_server_grpc_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+		file_proto_gordian_server_v1_grpc_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*CurrentBlockResponse); i {
 			case 0:
 				return &v.state
@@ -1034,7 +1047,7 @@ func file_proto_server_grpc_proto_init() {
 				return nil
 			}
 		}
-		file_proto_server_grpc_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+		file_proto_gordian_server_v1_grpc_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*Validator); i {
 			case 0:
 				return &v.state
@@ -1046,7 +1059,7 @@ func file_proto_server_grpc_proto_init() {
 				return nil
 			}
 		}
-		file_proto_server_grpc_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+		file_proto_gordian_server_v1_grpc_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*GetValidatorsRequest); i {
 			case 0:
 				return &v.state
@@ -1058,7 +1071,7 @@ func file_proto_server_grpc_proto_init() {
 				return nil
 			}
 		}
-		file_proto_server_grpc_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+		file_proto_gordian_server_v1_grpc_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*GetValidatorsResponse); i {
 			case 0:
 				return &v.state
@@ -1070,7 +1083,7 @@ func file_proto_server_grpc_proto_init() {
 				return nil
 			}
 		}
-		file_proto_server_grpc_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+		file_proto_gordian_server_v1_grpc_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*SubmitTransactionRequest); i {
 			case 0:
 				return &v.state
@@ -1082,7 +1095,7 @@ func file_proto_server_grpc_proto_init() {
 				return nil
 			}
 		}
-		file_proto_server_grpc_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+		file_proto_gordian_server_v1_grpc_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*SubmitSimulationTransactionRequest); i {
 			case 0:
 				return &v.state
@@ -1094,7 +1107,7 @@ func file_proto_server_grpc_proto_init() {
 				return nil
 			}
 		}
-		file_proto_server_grpc_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+		file_proto_gordian_server_v1_grpc_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*PendingTransactionsRequest); i {
 			case 0:
 				return &v.state
@@ -1106,7 +1119,7 @@ func file_proto_server_grpc_proto_init() {
 				return nil
 			}
 		}
-		file_proto_server_grpc_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+		file_proto_gordian_server_v1_grpc_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*PendingTransactionsResponse); i {
 			case 0:
 				return &v.state
@@ -1118,7 +1131,7 @@ func file_proto_server_grpc_proto_init() {
 				return nil
 			}
 		}
-		file_proto_server_grpc_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+		file_proto_gordian_server_v1_grpc_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*Attribute); i {
 			case 0:
 				return &v.state
@@ -1130,7 +1143,7 @@ func file_proto_server_grpc_proto_init() {
 				return nil
 			}
 		}
-		file_proto_server_grpc_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+		file_proto_gordian_server_v1_grpc_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*Event); i {
 			case 0:
 				return &v.state
@@ -1142,7 +1155,7 @@ func file_proto_server_grpc_proto_init() {
 				return nil
 			}
 		}
-		file_proto_server_grpc_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+		file_proto_gordian_server_v1_grpc_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*TxResultResponse); i {
 			case 0:
 				return &v.state
@@ -1154,7 +1167,7 @@ func file_proto_server_grpc_proto_init() {
 				return nil
 			}
 		}
-		file_proto_server_grpc_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
+		file_proto_gordian_server_v1_grpc_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*BalanceResponse); i {
 			case 0:
 				return &v.state
@@ -1166,7 +1179,7 @@ func file_proto_server_grpc_proto_init() {
 				return nil
 			}
 		}
-		file_proto_server_grpc_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
+		file_proto_gordian_server_v1_grpc_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*QueryAccountBalanceRequest); i {
 			case 0:
 				return &v.state
@@ -1178,7 +1191,7 @@ func file_proto_server_grpc_proto_init() {
 				return nil
 			}
 		}
-		file_proto_server_grpc_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+		file_proto_gordian_server_v1_grpc_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*QueryAccountBalanceResponse); i {
 			case 0:
 				return &v.state
@@ -1195,18 +1208,18 @@ func file_proto_server_grpc_proto_init() {
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
-			RawDescriptor: file_proto_server_grpc_proto_rawDesc,
+			RawDescriptor: file_proto_gordian_server_v1_grpc_proto_rawDesc,
 			NumEnums:      0,
 			NumMessages:   15,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
-		GoTypes:           file_proto_server_grpc_proto_goTypes,
-		DependencyIndexes: file_proto_server_grpc_proto_depIdxs,
-		MessageInfos:      file_proto_server_grpc_proto_msgTypes,
+		GoTypes:           file_proto_gordian_server_v1_grpc_proto_goTypes,
+		DependencyIndexes: file_proto_gordian_server_v1_grpc_proto_depIdxs,
+		MessageInfos:      file_proto_gordian_server_v1_grpc_proto_msgTypes,
 	}.Build()
-	File_proto_server_grpc_proto = out.File
-	file_proto_server_grpc_proto_rawDesc = nil
-	file_proto_server_grpc_proto_goTypes = nil
-	file_proto_server_grpc_proto_depIdxs = nil
+	File_proto_gordian_server_v1_grpc_proto = out.File
+	file_proto_gordian_server_v1_grpc_proto_rawDesc = nil
+	file_proto_gordian_server_v1_grpc_proto_goTypes = nil
+	file_proto_gordian_server_v1_grpc_proto_depIdxs = nil
 }
diff --git a/gcosmos/gserver/internal/ggrpc/grpc_grpc.pb.go b/gcosmos/gserver/internal/ggrpc/grpc_grpc.pb.go
index 83d5802..0fd3de0 100644
--- a/gcosmos/gserver/internal/ggrpc/grpc_grpc.pb.go
+++ b/gcosmos/gserver/internal/ggrpc/grpc_grpc.pb.go
@@ -2,7 +2,7 @@
 // versions:
 // - protoc-gen-go-grpc v1.3.0
 // - protoc             v4.25.1
-// source: proto/server/grpc.proto
+// source: proto/gordian/server/v1/grpc.proto
 
 package ggrpc
 
@@ -19,12 +19,12 @@ import (
 const _ = grpc.SupportPackageIsVersion7
 
 const (
-	GordianGRPC_GetBlocksWatermark_FullMethodName  = "/server.GordianGRPC/GetBlocksWatermark"
-	GordianGRPC_GetValidators_FullMethodName       = "/server.GordianGRPC/GetValidators"
-	GordianGRPC_SubmitTransaction_FullMethodName   = "/server.GordianGRPC/SubmitTransaction"
-	GordianGRPC_SimulateTransaction_FullMethodName = "/server.GordianGRPC/SimulateTransaction"
-	GordianGRPC_PendingTransactions_FullMethodName = "/server.GordianGRPC/PendingTransactions"
-	GordianGRPC_QueryAccountBalance_FullMethodName = "/server.GordianGRPC/QueryAccountBalance"
+	GordianGRPC_GetBlocksWatermark_FullMethodName  = "/gordian.server.v1.GordianGRPC/GetBlocksWatermark"
+	GordianGRPC_GetValidators_FullMethodName       = "/gordian.server.v1.GordianGRPC/GetValidators"
+	GordianGRPC_SubmitTransaction_FullMethodName   = "/gordian.server.v1.GordianGRPC/SubmitTransaction"
+	GordianGRPC_SimulateTransaction_FullMethodName = "/gordian.server.v1.GordianGRPC/SimulateTransaction"
+	GordianGRPC_PendingTransactions_FullMethodName = "/gordian.server.v1.GordianGRPC/PendingTransactions"
+	GordianGRPC_QueryAccountBalance_FullMethodName = "/gordian.server.v1.GordianGRPC/QueryAccountBalance"
 )
 
 // GordianGRPCClient is the client API for GordianGRPC service.
@@ -273,7 +273,7 @@ func _GordianGRPC_QueryAccountBalance_Handler(srv interface{}, ctx context.Conte
 // It's only intended for direct use with grpc.RegisterService,
 // and not to be introspected or modified (even as a copy)
 var GordianGRPC_ServiceDesc = grpc.ServiceDesc{
-	ServiceName: "server.GordianGRPC",
+	ServiceName: "gordian.server.v1.GordianGRPC",
 	HandlerType: (*GordianGRPCServer)(nil),
 	Methods: []grpc.MethodDesc{
 		{
@@ -302,5 +302,5 @@ var GordianGRPC_ServiceDesc = grpc.ServiceDesc{
 		},
 	},
 	Streams:  []grpc.StreamDesc{},
-	Metadata: "proto/server/grpc.proto",
+	Metadata: "proto/gordian/server/v1/grpc.proto",
 }
diff --git a/gcosmos/gserver/internal/ggrpc/server.go b/gcosmos/gserver/internal/ggrpc/server.go
index 5c845b9..2cf821c 100644
--- a/gcosmos/gserver/internal/ggrpc/server.go
+++ b/gcosmos/gserver/internal/ggrpc/server.go
@@ -22,9 +22,16 @@ type GordianGRPC struct {
 	UnimplementedGordianGRPCServer
 	log *slog.Logger
 
-	grpcServer *grpc.Server
+	fs tmstore.FinalizationStore
+	ms tmstore.MirrorStore
 
-	cfg GRPCServerConfig
+	reg *gcrypto.Registry
+
+	// debug handler
+	txc   transaction.Codec[transaction.Tx]
+	am    appmanager.AppManager[transaction.Tx]
+	txBuf *gsi.SDKTxBuf
+	cdc   codec.Codec
 
 	done chan struct{}
 }
@@ -37,21 +44,38 @@ type GRPCServerConfig struct {
 
 	CryptoRegistry *gcrypto.Registry
 
-	// debug handler
 	TxCodec    transaction.Codec[transaction.Tx]
 	AppManager appmanager.AppManager[transaction.Tx]
-	TxBuf      *gsi.SDKTxBuf
 	Codec      codec.Codec
+
+	TxBuffer *gsi.SDKTxBuf
 }
 
 func NewGordianGRPCServer(ctx context.Context, log *slog.Logger, cfg GRPCServerConfig) *GordianGRPC {
+	if cfg.Listener == nil {
+		panic("BUG: listener for the grpc server is nil")
+	}
+
 	srv := &GordianGRPC{
-		log:  log,
-		cfg:  cfg,
+		log: log,
+
+		fs:    cfg.FinalizationStore,
+		ms:    cfg.MirrorStore,
+		reg:   cfg.CryptoRegistry,
+		txc:   cfg.TxCodec,
+		am:    cfg.AppManager,
+		txBuf: cfg.TxBuffer,
+		cdc:   cfg.Codec,
+
 		done: make(chan struct{}),
 	}
-	go srv.serve()
-	go srv.waitForShutdown(ctx)
+
+	var opts []grpc.ServerOption
+	// TODO: configure grpc options (like TLS)
+	gs := grpc.NewServer(opts...)
+
+	go srv.serve(cfg.Listener, gs)
+	go srv.waitForShutdown(ctx, gs)
 
 	return srv
 }
@@ -60,35 +84,34 @@ func (g *GordianGRPC) Wait() {
 	<-g.done
 }
 
-func (g *GordianGRPC) waitForShutdown(ctx context.Context) {
+func (g *GordianGRPC) waitForShutdown(ctx context.Context, gs *grpc.Server) {
 	select {
 	case <-g.done:
 		// g.serve returned on its own, nothing left to do here.
 		return
 	case <-ctx.Done():
-		if g.grpcServer != nil {
-			g.grpcServer.Stop()
+		if gs != nil {
+			gs.Stop()
 		}
 	}
 }
 
-func (g *GordianGRPC) serve() {
+func (g *GordianGRPC) serve(ln net.Listener, gs *grpc.Server) {
 	defer close(g.done)
 
-	var opts []grpc.ServerOption
-	g.grpcServer = grpc.NewServer(opts...)
-	RegisterGordianGRPCServer(g.grpcServer, g)
-	reflection.Register(g.grpcServer)
+	RegisterGordianGRPCServer(gs, g)
+	reflection.Register(gs)
 
-	if err := g.grpcServer.Serve(g.cfg.Listener); err != nil {
-		g.log.Error("GRPC server shutting down due to error", "err", err)
+	if err := gs.Serve(ln); err != nil {
+		if err != grpc.ErrServerStopped {
+			g.log.Error("GRPC server stopped with error", "err", err)
+		}
 	}
 }
 
 // GetBlocksWatermark implements GordianGRPCServer.
 func (g *GordianGRPC) GetBlocksWatermark(ctx context.Context, req *CurrentBlockRequest) (*CurrentBlockResponse, error) {
-	ms := g.cfg.MirrorStore
-	vh, vr, ch, cr, err := ms.NetworkHeightRound(ctx)
+	vh, vr, ch, cr, err := g.ms.NetworkHeightRound(ctx)
 	if err != nil {
 		return nil, fmt.Errorf("failed to get network height and round: %w", err)
 	}
@@ -103,15 +126,12 @@ func (g *GordianGRPC) GetBlocksWatermark(ctx context.Context, req *CurrentBlockR
 
 // GetValidators implements GordianGRPCServer.
 func (g *GordianGRPC) GetValidators(ctx context.Context, req *GetValidatorsRequest) (*GetValidatorsResponse, error) {
-	ms := g.cfg.MirrorStore
-	fs := g.cfg.FinalizationStore
-	reg := g.cfg.CryptoRegistry
-	_, _, committingHeight, _, err := ms.NetworkHeightRound(ctx)
+	_, _, committingHeight, _, err := g.ms.NetworkHeightRound(ctx)
 	if err != nil {
 		return nil, fmt.Errorf("failed to get network height and round: %w", err)
 	}
 
-	_, _, vals, _, err := fs.LoadFinalizationByHeight(ctx, committingHeight)
+	_, _, vals, _, err := g.fs.LoadFinalizationByHeight(ctx, committingHeight)
 	if err != nil {
 		return nil, fmt.Errorf("failed to load finalization by height: %w", err)
 	}
@@ -119,8 +139,8 @@ func (g *GordianGRPC) GetValidators(ctx context.Context, req *GetValidatorsReque
 	jsonValidators := make([]*Validator, len(vals))
 	for i, v := range vals {
 		jsonValidators[i] = &Validator{
-			PubKey: reg.Marshal(v.PubKey),
-			Power:  v.Power,
+			EncodedPubKey: g.reg.Marshal(v.PubKey),
+			Power:         v.Power,
 		}
 	}
 
diff --git a/gcosmos/gserver/internal/ggrpc/server_debug.go b/gcosmos/gserver/internal/ggrpc/server_debug.go
index 5565720..35e1eb2 100644
--- a/gcosmos/gserver/internal/ggrpc/server_debug.go
+++ b/gcosmos/gserver/internal/ggrpc/server_debug.go
@@ -13,14 +13,14 @@ import (
 // SubmitTransaction implements GordianGRPCServer.
 func (g *GordianGRPC) SubmitTransaction(ctx context.Context, req *SubmitTransactionRequest) (*TxResultResponse, error) {
 	b := req.Tx
-	tx, err := g.cfg.TxCodec.DecodeJSON(b)
+	tx, err := g.txc.DecodeJSON(b)
 	if err != nil {
 		return &TxResultResponse{
 			Error: fmt.Sprintf("failed to decode transaction json: %v", err),
 		}, nil
 	}
 
-	res, err := g.cfg.AppManager.ValidateTx(ctx, tx)
+	res, err := g.am.ValidateTx(ctx, tx)
 	if err != nil {
 		// ValidateTx should only return an error at this level,
 		// if it failed to get state from the store.
@@ -36,7 +36,7 @@ func (g *GordianGRPC) SubmitTransaction(ctx context.Context, req *SubmitTransact
 	}
 
 	// If it passed basic validation, then we can attempt to add it to the buffer.
-	if err := g.cfg.TxBuf.AddTx(ctx, tx); err != nil {
+	if err := g.txBuf.AddTx(ctx, tx); err != nil {
 		// We could potentially check if it is a TxInvalidError here
 		// and adjust the status code,
 		// but since this is a debug endpoint, we'll ignore the type.
@@ -49,14 +49,14 @@ func (g *GordianGRPC) SubmitTransaction(ctx context.Context, req *SubmitTransact
 // SimulateTransaction implements GordianGRPCServer.
 func (g *GordianGRPC) SimulateTransaction(ctx context.Context, req *SubmitSimulationTransactionRequest) (*TxResultResponse, error) {
 	b := req.Tx
-	tx, err := g.cfg.TxCodec.DecodeJSON(b)
+	tx, err := g.txc.DecodeJSON(b)
 	if err != nil {
 		return &TxResultResponse{
 			Error: fmt.Sprintf("failed to decode transaction json: %v", err),
 		}, nil
 	}
 
-	res, _, err := g.cfg.AppManager.Simulate(ctx, tx)
+	res, _, err := g.am.Simulate(ctx, tx)
 	if err != nil {
 		// Simulate should only return an error at this level,
 		// if it failed to get state from the store.
@@ -76,7 +76,7 @@ func (g *GordianGRPC) SimulateTransaction(ctx context.Context, req *SubmitSimula
 
 // PendingTransactions implements GordianGRPCServer.
 func (g *GordianGRPC) PendingTransactions(ctx context.Context, req *PendingTransactionsRequest) (*PendingTransactionsResponse, error) {
-	txs := g.cfg.TxBuf.Buffered(ctx, nil)
+	txs := g.txBuf.Buffered(ctx, nil)
 
 	encodedTxs := make([][]byte, len(txs))
 	for i, tx := range txs {
@@ -94,9 +94,6 @@ func (g *GordianGRPC) PendingTransactions(ctx context.Context, req *PendingTrans
 
 // QueryAccountBalance implements GordianGRPCServer.
 func (g *GordianGRPC) QueryAccountBalance(ctx context.Context, req *QueryAccountBalanceRequest) (*QueryAccountBalanceResponse, error) {
-	cdc := g.cfg.Codec
-	am := g.cfg.AppManager
-
 	if req.Address == "" {
 		return nil, fmt.Errorf("address field is required")
 	}
@@ -106,7 +103,7 @@ func (g *GordianGRPC) QueryAccountBalance(ctx context.Context, req *QueryAccount
 		denom = req.Denom
 	}
 
-	msg, err := am.Query(ctx, 0, &banktypes.QueryBalanceRequest{
+	msg, err := g.am.Query(ctx, 0, &banktypes.QueryBalanceRequest{
 		Address: req.Address,
 		Denom:   denom,
 	})
@@ -114,13 +111,13 @@ func (g *GordianGRPC) QueryAccountBalance(ctx context.Context, req *QueryAccount
 		return nil, fmt.Errorf("failed to query account balance: %w", err)
 	}
 
-	b, err := cdc.MarshalJSON(msg)
+	b, err := g.cdc.MarshalJSON(msg)
 	if err != nil {
 		return nil, fmt.Errorf("failed to encode response: %w", err)
 	}
 
 	var val QueryAccountBalanceResponse
-	if err = cdc.UnmarshalJSON(b, &val); err != nil {
+	if err = g.cdc.UnmarshalJSON(b, &val); err != nil {
 		return nil, fmt.Errorf("failed to decode response: %w", err)
 	}
 
@@ -149,7 +146,6 @@ func getGordianResponseFromSDKResult(res appmanager.TxResult) *TxResultResponse
 func convertEvent(e []event.Event) []*Event {
 	events := make([]*Event, len(e))
 	for i, ev := range e {
-
 		attr := make([]*Attribute, len(ev.Attributes))
 		for j, a := range ev.Attributes {
 			attr[j] = &Attribute{
diff --git a/gcosmos/proto/server/grpc.proto b/gcosmos/proto/gordian/server/v1/grpc.proto
similarity index 97%
rename from gcosmos/proto/server/grpc.proto
rename to gcosmos/proto/gordian/server/v1/grpc.proto
index 5b62c1e..5428ef6 100644
--- a/gcosmos/proto/server/grpc.proto
+++ b/gcosmos/proto/gordian/server/v1/grpc.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 option go_package = "github.com/rollchains/gordian/gcosmos/gserver/internal/ggrpc";
 
-package server;
+package gordian.server.v1;
 
 service GordianGRPC {
     // GetBlocksWatermark returns the current block information.
@@ -30,7 +30,7 @@ message CurrentBlockResponse {
 }
 
 message Validator {
-    bytes pub_key = 1;
+    bytes encoded_pub_key = 1;
     uint64 power = 2;
 }
 message GetValidatorsRequest {}
diff --git a/gcosmos/scripts/protocgen.sh b/gcosmos/scripts/protocgen.sh
index ec5a834..9930f9c 100644
--- a/gcosmos/scripts/protocgen.sh
+++ b/gcosmos/scripts/protocgen.sh
@@ -3,7 +3,12 @@
 #
 # TODO: migrate to buf?
 
-protoc --go_out=. --go-grpc_out=. proto/**/*.proto
+# Generates the *.go proto files from all found *.proto files into a temparary `github.com/` directory.
+# This directory structure is the `option go_package` string found in the proto file header.
+protoc --go_out=. --go-grpc_out=. $(find proto -iname '*.proto')
 
+# Copies the files from the termporary `github.com/**` directory to the `gcosmos` directory.
+# Given the go_package path matches gordian's directory structure, only changed files are copied.
+# Then, the temporary `github.com/` directory is cleaned up.
 cp -r ./github.com/rollchains/gordian/gcosmos/* .
 rm -rf ./github.com