diff --git a/agent.go b/agent.go index e6f6bee..fe0622d 100644 --- a/agent.go +++ b/agent.go @@ -6,6 +6,7 @@ import ( "encoding/hex" "errors" "fmt" + "google.golang.org/protobuf/proto" "net/url" "reflect" "time" @@ -158,6 +159,33 @@ func (a Agent) Call(canisterID principal.Principal, methodName string, args []an return call.CallAndWait(values...) } +// CallProto calls a method on a canister and unmarshals the result into the given proto message. +func (a Agent) CallProto(canisterID principal.Principal, methodName string, in, out proto.Message) error { + payload, err := proto.Marshal(in) + if err != nil { + return err + } + requestID, data, err := a.sign(Request{ + Type: RequestTypeCall, + Sender: a.Sender(), + IngressExpiry: a.expiryDate(), + CanisterID: canisterID, + MethodName: methodName, + Arguments: payload, + }) + if err != nil { + return err + } + if _, err := a.call(canisterID, data); err != nil { + return err + } + raw, err := a.poll(canisterID, *requestID) + if err != nil { + return err + } + return proto.Unmarshal(raw, out) +} + // Client returns the underlying Client of the Agent. func (a Agent) Client() *Client { return &a.client @@ -301,7 +329,7 @@ func (a Agent) GetRootKey() []byte { } // Query calls a method on a canister and unmarshals the result into the given values. -func (a Agent) Query(canisterID principal.Principal, methodName string, args []any, values []any) error { +func (a Agent) Query(canisterID principal.Principal, methodName string, args, values []any) error { query, err := a.CreateQuery(canisterID, methodName, args...) if err != nil { return err @@ -309,6 +337,37 @@ func (a Agent) Query(canisterID principal.Principal, methodName string, args []a return query.Query(values...) } +// QueryProto calls a method on a canister and unmarshals the result into the given proto message. +func (a Agent) QueryProto(canisterID principal.Principal, methodName string, in, out proto.Message) error { + payload, err := proto.Marshal(in) + if err != nil { + return err + } + _, data, err := a.sign(Request{ + Type: RequestTypeQuery, + Sender: a.Sender(), + IngressExpiry: a.expiryDate(), + CanisterID: canisterID, + MethodName: methodName, + Arguments: payload, + }) + if err != nil { + return err + } + resp, err := a.client.Query(canisterID, data) + if err != nil { + return err + } + var response Response + if err := cbor.Unmarshal(resp, &response); err != nil { + return err + } + if response.Status != "replied" { + return fmt.Errorf("status: %s", response.Status) + } + return proto.Unmarshal(response.Reply["arg"], out) +} + // ReadStateCertificate reads the certificate state of the given canister at the given path. func (a Agent) ReadStateCertificate(canisterID principal.Principal, path [][]hashtree.Label) (hashtree.Node, error) { c, err := a.readStateCertificate(canisterID, path) diff --git a/registry/client.go b/registry/client.go new file mode 100644 index 0000000..5c65430 --- /dev/null +++ b/registry/client.go @@ -0,0 +1,91 @@ +package registry + +import ( + "bytes" + "fmt" + "github.com/aviate-labs/agent-go/principal" + v1 "github.com/aviate-labs/agent-go/registry/proto/v1" + "google.golang.org/protobuf/proto" + "sort" + "strings" +) + +type Client struct { + dp *DataProvider + deltas []*v1.RegistryDelta +} + +func New() (*Client, error) { + dp, err := NewDataProvider() + if err != nil { + return nil, err + } + deltas, _, err := dp.GetChangesSince(0) + if err != nil { + return nil, err + } + sort.Slice(deltas, func(i, j int) bool { + return 0 < bytes.Compare(deltas[i].Key, deltas[j].Key) + }) + return &Client{ + dp: dp, + deltas: deltas, + }, nil +} + +func (c *Client) GetNNSSubnetID() (*principal.Principal, error) { + v, _, err := c.dp.GetValueUpdate([]byte("nns_subnet_id"), nil) + if err != nil { + return nil, err + } + var nnsSubnetID v1.SubnetId + if err := proto.Unmarshal(v, &nnsSubnetID); err != nil { + return nil, err + } + return &principal.Principal{Raw: nnsSubnetID.PrincipalId.Raw}, nil +} + +func (c *Client) GetNodeList() ([]*v1.NodeRecord, error) { + var nodes []*v1.NodeRecord + for _, delta := range c.deltas { + key := string(delta.Key) + if strings.HasPrefix(key, "node_record_") { + for _, value := range delta.Values { + record := new(v1.NodeRecord) + if err := proto.Unmarshal(value.Value, record); err != nil { + return nil, err + } + nodes = append(nodes, record) + } + } + } + return nodes, nil +} + +func (c *Client) GetSubnetDetails(subnetID principal.Principal) (*v1.SubnetRecord, error) { + v, _, err := c.dp.GetValueUpdate([]byte(fmt.Sprintf("subnet_record_%s", subnetID)), nil) + if err != nil { + return nil, err + } + var record v1.SubnetRecord + if err := proto.Unmarshal(v, &record); err != nil { + return nil, err + } + return &record, nil +} + +func (c *Client) GetSubnetIDs() ([]principal.Principal, error) { + v, _, err := c.dp.GetValueUpdate([]byte("subnet_list"), nil) + if err != nil { + return nil, err + } + var list v1.SubnetListRecord + if err := proto.Unmarshal(v, &list); err != nil { + return nil, err + } + var subnets []principal.Principal + for _, subnet := range list.Subnets { + subnets = append(subnets, principal.Principal{Raw: subnet}) + } + return subnets, nil +} diff --git a/registry/client_test.go b/registry/client_test.go new file mode 100644 index 0000000..9a76f69 --- /dev/null +++ b/registry/client_test.go @@ -0,0 +1,36 @@ +package registry + +import ( + "fmt" + "github.com/aviate-labs/agent-go/principal" + "testing" +) + +var client, _ = New() + +func TestClient_GetNodeList(t *testing.T) { + nodes, err := client.GetNodeList() + if err != nil { + t.Fatal(err) + } + if len(nodes) == 0 { + t.Fatal("no nodes") + } + for _, node := range nodes { + fmt.Println(node.GetXnet(), principal.Principal{Raw: node.NodeOperatorId}) + } +} + +func TestClient_GetSubnetIDs(t *testing.T) { + subnetIDs, err := client.GetSubnetIDs() + if err != nil { + t.Fatal(err) + } + if len(subnetIDs) == 0 { + t.Fatal("no subnet IDs") + } + subnetID := subnetIDs[0] + if _, err := client.GetSubnetDetails(subnetID); err != nil { + t.Fatal(err) + } +} diff --git a/registry/dataprovider.go b/registry/dataprovider.go index f1b92c6..00c526e 100644 --- a/registry/dataprovider.go +++ b/registry/dataprovider.go @@ -2,115 +2,88 @@ package registry import ( "fmt" - "sort" - "sync" - "time" - "github.com/aviate-labs/agent-go" "github.com/aviate-labs/agent-go/ic" - "github.com/aviate-labs/agent-go/identity" - "github.com/aviate-labs/agent-go/principal" "github.com/aviate-labs/agent-go/registry/proto/v1" - "github.com/fxamacker/cbor/v2" - "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/known/wrapperspb" ) type DataProvider struct { - sync.RWMutex - Records []v1.ProtoRegistryRecord -} - -func (d *DataProvider) Add( - key string, - version uint64, - value []byte, -) error { - if version < 1 { - return fmt.Errorf("version must be greater than 0") - } - - d.Lock() - defer d.Unlock() - - var ok bool - idx := sort.Search(len(d.Records), func(i int) bool { - if d.Records[i].Key == key { - if d.Records[i].Version == version { - ok = true // Record already exists. - } - return d.Records[i].Version >= version - } - return d.Records[i].Key >= key - }) - if ok { - // Key and version already exist. - return fmt.Errorf("record already exists: %s@%d", key, version) - } - d.Records = append(d.Records, v1.ProtoRegistryRecord{}) - copy(d.Records[idx+1:], d.Records[idx:]) // Shift right. - d.Records[idx] = v1.ProtoRegistryRecord{ - Key: key, - Version: version, - Value: wrapperspb.Bytes(value), - } - return nil + a *agent.Agent } -func (d *DataProvider) GetChangesSince(version uint64) ([]*v1.RegistryDelta, uint64, error) { +func NewDataProvider() (*DataProvider, error) { a, err := agent.New(agent.DefaultConfig) if err != nil { - return nil, 0, err + return nil, err } - payload, err := proto.Marshal(&v1.RegistryGetChangesSinceRequest{ - Version: version, - }) - if err != nil { + return &DataProvider{a: a}, nil +} + +// GetChangesSince returns the changes since the given version. +func (d DataProvider) GetChangesSince(version uint64) ([]*v1.RegistryDelta, uint64, error) { + var resp v1.RegistryGetChangesSinceResponse + if err := d.a.QueryProto( + ic.REGISTRY_PRINCIPAL, + "get_changes_since", + &v1.RegistryGetChangesSinceRequest{ + Version: version, + }, + &resp, + ); err != nil { return nil, 0, err } - request := agent.Request{ - Type: agent.RequestTypeQuery, - Sender: principal.AnonymousID, - IngressExpiry: uint64(time.Now().Add(5 * time.Minute).UnixNano()), - CanisterID: ic.REGISTRY_PRINCIPAL, - MethodName: "get_changes_since", - Arguments: payload, + if resp.Error != nil { + return nil, 0, fmt.Errorf("error: %s", resp.Error.String()) } - requestID := agent.NewRequestID(request) - id := new(identity.AnonymousIdentity) - data, err := cbor.Marshal(agent.Envelope{ - Content: request, - SenderPubKey: id.PublicKey(), - SenderSig: requestID.Sign(id), - }) - if err != nil { - return nil, 0, err - } - resp, err := a.Client().Query(ic.REGISTRY_PRINCIPAL, data) - if err != nil { - return nil, 0, err + return resp.Deltas, resp.Version, nil +} + +// GetValue returns the value of the given key and its version. +// If version is nil, the latest version is returned. +func (d DataProvider) GetValue(key []byte, version *uint64) ([]byte, uint64, error) { + var v *wrapperspb.UInt64Value + if version != nil { + v = wrapperspb.UInt64(*version) } - var response agent.Response - if err := cbor.Unmarshal(resp, &response); err != nil { + var resp v1.RegistryGetValueResponse + if err := d.a.QueryProto( + ic.REGISTRY_PRINCIPAL, + "get_value", + &v1.RegistryGetValueRequest{ + Key: key, + Version: v, + }, + &resp, + ); err != nil { return nil, 0, err } - if response.Status != "replied" { - return nil, 0, fmt.Errorf("status: %s", response.Status) + if resp.Error != nil { + return nil, 0, fmt.Errorf("error: %s", resp.Error.String()) } + return resp.Value, resp.Version, nil +} - changesResponse := new(v1.RegistryGetChangesSinceResponse) - if err := proto.Unmarshal(response.Reply["arg"], changesResponse); err != nil { +// GetValueUpdate returns the value of the given key and its version. +func (d DataProvider) GetValueUpdate(key []byte, version *uint64) ([]byte, uint64, error) { + var v *wrapperspb.UInt64Value + if version != nil { + v = wrapperspb.UInt64(*version) + } + var resp v1.RegistryGetValueResponse + if err := d.a.CallProto( + ic.REGISTRY_PRINCIPAL, + "get_value", + &v1.RegistryGetValueRequest{ + Key: key, + Version: v, + }, + &resp, + ); err != nil { return nil, 0, err } - if changesResponse.Error != nil { - return nil, 0, fmt.Errorf("error: %s", changesResponse.Error.String()) + if resp.Error != nil { + return nil, 0, fmt.Errorf("error: %s", resp.Error.String()) } - return changesResponse.Deltas, changesResponse.Version, nil -} - -func (d *DataProvider) IsEmpty() bool { - d.RLock() - defer d.RUnlock() - - return len(d.Records) == 0 + return resp.Value, resp.Version, nil } diff --git a/registry/dataprovider_test.go b/registry/dataprovider_test.go index 3a29eb8..c883980 100644 --- a/registry/dataprovider_test.go +++ b/registry/dataprovider_test.go @@ -5,7 +5,11 @@ import ( ) func TestDataProvider_GetChangesSince(t *testing.T) { - if _, _, err := new(DataProvider).GetChangesSince(0); err != nil { + dp, err := NewDataProvider() + if err != nil { + t.Fatal(err) + } + if _, _, err := dp.GetChangesSince(0); err != nil { t.Fatal(err) } } diff --git a/registry/errors.go b/registry/errors.go deleted file mode 100644 index 0006508..0000000 --- a/registry/errors.go +++ /dev/null @@ -1,83 +0,0 @@ -package registry - -import "fmt" - -type ClientDataProviderQueryFailedError struct { - Source DataProviderError -} - -func (e ClientDataProviderQueryFailedError) Error() string { - return fmt.Sprintf("failed to query data provider: %s", e.Source) -} - -func (ClientDataProviderQueryFailedError) registryClientError() {} - -type ClientDecodeError struct { - Err string -} - -func (e ClientDecodeError) Error() string { - return fmt.Sprintf("failed to decode registry contents: %s", e.Err) -} - -func (ClientDecodeError) registryClientError() {} - -type ClientError interface { - registryClientError() - error -} - -type ClientPollLockFailedError struct { - Err string -} - -func (e ClientPollLockFailedError) Error() string { - return fmt.Sprintf("failed to acquire poll lock: %s", e.Err) -} - -func (ClientPollLockFailedError) registryClientError() {} - -type ClientPollingLatestVersionFailedError struct { - Retries uint -} - -func (e ClientPollingLatestVersionFailedError) Error() string { - return fmt.Sprintf("failed to report the same version twice after %d times", e.Retries) -} - -func (ClientPollingLatestVersionFailedError) registryClientError() {} - -type ClientVersionNotAvailableError struct { - Version Version -} - -func (e ClientVersionNotAvailableError) Error() string { - return fmt.Sprintf("the requested version is not available locally: %d", e.Version) -} - -func (ClientVersionNotAvailableError) registryClientError() {} - -type DataProviderError interface { - dataProviderError() - error -} - -// DataProviderTimeoutError occurs when the registry transport client times out. -type DataProviderTimeoutError struct{} - -func (DataProviderTimeoutError) Error() string { - return "registry transport client timed out" -} - -func (DataProviderTimeoutError) dataProviderError() {} - -// DataProviderTransferError occurs when using registry transfer. -type DataProviderTransferError struct { - Source string -} - -func (e DataProviderTransferError) Error() string { - return fmt.Sprintf("registry transport client failed to fetch registry update from registry canister: %s", e.Source) -} - -func (DataProviderTransferError) dataProviderError() {} diff --git a/registry/interfaces.go b/registry/interfaces.go deleted file mode 100644 index ac0c6cd..0000000 --- a/registry/interfaces.go +++ /dev/null @@ -1,53 +0,0 @@ -package registry - -import "time" - -func GetValue(c RegistryClient, key string, version Version) (*[]byte, error) { - vv, err := c.GetVersionedValue(key, version) - if err != nil { - return nil, err - } - return vv.Value, nil -} - -type RegistryClient interface { - GetVersionedValue(key string, version Version) (VersionedRecord[[]byte], error) - GetKeyFamily(keyPrefix string, version Version) ([]string, error) - GetLatestVersion() (Version, error) - GetVersionTimestamp(version Version) (*int64, error) -} - -type RegistryDataProvider interface { - GetUpdatesSince(version Version) ([]TransportRecord, error) -} - -type TransportRecord = VersionedRecord[[]byte] - -func EmptyZeroRecord(key string) TransportRecord { - return TransportRecord{ - Key: key, - Version: ZeroRegistryVersion, - Value: nil, - } -} - -type Version uint64 - -// Reference: https://github.com/dfinity/ic/blob/master/rs/interfaces/registry/src/lib.rs - -const ( - // ZeroRegistryVersion is the version number of the empty registry. - ZeroRegistryVersion Version = 0 - // PollingPeriod is the period at which the local store is polled for updates. - PollingPeriod = 5 * time.Second -) - -// VersionedRecord is a key-value pair with a version. -type VersionedRecord[T any] struct { - // Key of the record. - Key string - // Version at which this record was created. - Version Version - // Value of the record. If the record was deleted in this version, this field is nil. - Value *T -} diff --git a/registry/proto.go b/registry/proto.go index 8f64c6d..c2e5e9c 100644 --- a/registry/proto.go +++ b/registry/proto.go @@ -4,3 +4,6 @@ package registry //go:generate protoc -I=testdata --go_out=. testdata/registry.proto //go:generate protoc -I=testdata --go_out=. testdata/local.proto //go:generate protoc -I=testdata --go_out=. testdata/transport.proto +//go:generate protoc -I=testdata --go_out=. testdata/subnet.proto +//go:generate protoc -I=testdata --go_out=. testdata/node.proto +//go:generate protoc -I=testdata --go_out=. testdata/operator.proto diff --git a/registry/proto/v1/node.pb.go b/registry/proto/v1/node.pb.go new file mode 100644 index 0000000..ad69ec2 --- /dev/null +++ b/registry/proto/v1/node.pb.go @@ -0,0 +1,410 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.34.1 +// protoc v5.26.1 +// source: node.proto + +package v1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +var ( + file_node_proto_rawDescOnce sync.Once + file_node_proto_rawDescData = file_node_proto_rawDesc +) + +var File_node_proto protoreflect.FileDescriptor + +var file_node_proto_depIdxs = []int32{ + 0, // 0: registry.node.v1.NodeRecord.xnet:type_name -> registry.node.v1.ConnectionEndpoint + 0, // 1: registry.node.v1.NodeRecord.http:type_name -> registry.node.v1.ConnectionEndpoint + 1, // 2: registry.node.v1.NodeRecord.public_ipv4_config:type_name -> registry.node.v1.IPv4InterfaceConfig + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] 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 +} + +var file_node_proto_goTypes = []interface{}{ + (*ConnectionEndpoint)(nil), // 0: registry.node.v1.ConnectionEndpoint + (*IPv4InterfaceConfig)(nil), // 1: registry.node.v1.IPv4InterfaceConfig + (*NodeRecord)(nil), // 2: registry.node.v1.NodeRecord +} + +var file_node_proto_msgTypes = make([]protoimpl.MessageInfo, 3) + +var file_node_proto_rawDesc = []byte{ + 0x0a, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x22, 0x47, + 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x64, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x12, 0x12, 0x0a, + 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, + 0x74, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0x7b, 0x0a, 0x13, 0x49, 0x50, 0x76, 0x34, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x17, + 0x0a, 0x07, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x12, 0x26, 0x0a, 0x0f, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x5f, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0d, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x12, + 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x22, 0xc7, 0x05, 0x0a, 0x0a, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x12, 0x38, 0x0a, 0x04, 0x78, 0x6e, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x6f, 0x64, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, + 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x04, 0x78, 0x6e, 0x65, 0x74, 0x12, 0x38, 0x0a, + 0x04, 0x68, 0x74, 0x74, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x49, + 0x64, 0x12, 0x1c, 0x0a, 0x07, 0x63, 0x68, 0x69, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x10, 0x20, 0x01, + 0x28, 0x0c, 0x48, 0x00, 0x52, 0x06, 0x63, 0x68, 0x69, 0x70, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, + 0x2f, 0x0a, 0x11, 0x68, 0x6f, 0x73, 0x74, 0x6f, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0f, 0x68, 0x6f, + 0x73, 0x74, 0x6f, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x88, 0x01, 0x01, + 0x12, 0x58, 0x0a, 0x12, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x69, 0x70, 0x76, 0x34, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x50, 0x76, 0x34, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x48, 0x02, 0x52, 0x10, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x49, 0x70, 0x76, + 0x34, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x64, 0x6f, + 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, 0x06, 0x64, 0x6f, + 0x6d, 0x61, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x68, 0x69, 0x70, + 0x5f, 0x69, 0x64, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x6f, 0x73, 0x5f, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x69, 0x70, 0x76, 0x34, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4a, 0x04, 0x08, 0x01, 0x10, + 0x02, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, + 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, + 0x04, 0x08, 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, 0x4a, 0x04, 0x08, 0x0b, 0x10, + 0x0c, 0x4a, 0x04, 0x08, 0x0c, 0x10, 0x0d, 0x4a, 0x04, 0x08, 0x0d, 0x10, 0x0e, 0x4a, 0x04, 0x08, + 0x0e, 0x10, 0x0f, 0x52, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x52, 0x0d, 0x67, 0x6f, + 0x73, 0x73, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x52, 0x0e, 0x67, 0x6f, 0x73, + 0x73, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x67, 0x6f, 0x73, + 0x73, 0x69, 0x70, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x52, 0x11, 0x64, 0x63, + 0x6f, 0x70, 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x52, + 0x12, 0x70, 0x32, 0x70, 0x5f, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x73, 0x52, 0x17, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x5f, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x68, 0x74, 0x74, 0x70, 0x52, 0x0a, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x61, 0x70, 0x69, 0x52, 0x0b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x5f, 0x61, 0x70, 0x69, 0x52, 0x12, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, + 0x73, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x19, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x74, 0x6c, 0x73, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x52, 0x08, 0x78, 0x6e, 0x65, 0x74, 0x5f, 0x61, 0x70, 0x69, 0x42, 0x0a, + 0x5a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, +} + +func file_node_proto_init() { + if File_node_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_node_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ConnectionEndpoint); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_node_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IPv4InterfaceConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_node_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NodeRecord); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_node_proto_msgTypes[2].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_node_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_node_proto_goTypes, + DependencyIndexes: file_node_proto_depIdxs, + MessageInfos: file_node_proto_msgTypes, + }.Build() + File_node_proto = out.File + file_node_proto_rawDesc = nil + file_node_proto_goTypes = nil + file_node_proto_depIdxs = nil +} + +func file_node_proto_rawDescGZIP() []byte { + file_node_proto_rawDescOnce.Do(func() { + file_node_proto_rawDescData = protoimpl.X.CompressGZIP(file_node_proto_rawDescData) + }) + return file_node_proto_rawDescData +} + +// A connection endpoint. +type ConnectionEndpoint struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The IP address. Senders SHOULD use dotted-quad notation for IPv4 addresses + // and RFC5952 representation for IPv6 addresses (which means that IPv6 + // addresses are *not* enclosed in `[` and `]`, as they are not written + // with the port in the same field). + // + // Clients MUST be prepared to accept IPv6 addresses in the forms shown in + // RFC4291. + IpAddr string `protobuf:"bytes,1,opt,name=ip_addr,json=ipAddr,proto3" json:"ip_addr,omitempty"` + Port uint32 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"` +} + +// Deprecated: Use ConnectionEndpoint.ProtoReflect.Descriptor instead. +func (*ConnectionEndpoint) Descriptor() ([]byte, []int) { + return file_node_proto_rawDescGZIP(), []int{0} +} + +func (x *ConnectionEndpoint) GetIpAddr() string { + if x != nil { + return x.IpAddr + } + return "" +} + +func (x *ConnectionEndpoint) GetPort() uint32 { + if x != nil { + return x.Port + } + return 0 +} + +func (*ConnectionEndpoint) ProtoMessage() {} + +func (x *ConnectionEndpoint) ProtoReflect() protoreflect.Message { + mi := &file_node_proto_msgTypes[0] + 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) +} + +func (x *ConnectionEndpoint) Reset() { + *x = ConnectionEndpoint{} + if protoimpl.UnsafeEnabled { + mi := &file_node_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConnectionEndpoint) String() string { + return protoimpl.X.MessageStringOf(x) +} + +type IPv4InterfaceConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + IpAddr string `protobuf:"bytes,1,opt,name=ip_addr,json=ipAddr,proto3" json:"ip_addr,omitempty"` + GatewayIpAddr []string `protobuf:"bytes,2,rep,name=gateway_ip_addr,json=gatewayIpAddr,proto3" json:"gateway_ip_addr,omitempty"` + PrefixLength uint32 `protobuf:"varint,3,opt,name=prefix_length,json=prefixLength,proto3" json:"prefix_length,omitempty"` +} + +// Deprecated: Use IPv4InterfaceConfig.ProtoReflect.Descriptor instead. +func (*IPv4InterfaceConfig) Descriptor() ([]byte, []int) { + return file_node_proto_rawDescGZIP(), []int{1} +} + +func (x *IPv4InterfaceConfig) GetGatewayIpAddr() []string { + if x != nil { + return x.GatewayIpAddr + } + return nil +} + +func (x *IPv4InterfaceConfig) GetIpAddr() string { + if x != nil { + return x.IpAddr + } + return "" +} + +func (x *IPv4InterfaceConfig) GetPrefixLength() uint32 { + if x != nil { + return x.PrefixLength + } + return 0 +} + +func (*IPv4InterfaceConfig) ProtoMessage() {} + +func (x *IPv4InterfaceConfig) ProtoReflect() protoreflect.Message { + mi := &file_node_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) +} + +func (x *IPv4InterfaceConfig) Reset() { + *x = IPv4InterfaceConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_node_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IPv4InterfaceConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +// A node: one machine running a replica instance. +type NodeRecord struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The endpoint where this node receives xnet messages. + Xnet *ConnectionEndpoint `protobuf:"bytes,5,opt,name=xnet,proto3" json:"xnet,omitempty"` + // The endpoint where this node receives http requests. + Http *ConnectionEndpoint `protobuf:"bytes,6,opt,name=http,proto3" json:"http,omitempty"` + // The id of the node operator that added this node. + NodeOperatorId []byte `protobuf:"bytes,15,opt,name=node_operator_id,json=nodeOperatorId,proto3" json:"node_operator_id,omitempty"` + // The SEV-SNP chip_identifier for this node. + ChipId []byte `protobuf:"bytes,16,opt,name=chip_id,json=chipId,proto3,oneof" json:"chip_id,omitempty"` + // ID of the HostOS version to run. + HostosVersionId *string `protobuf:"bytes,17,opt,name=hostos_version_id,json=hostosVersionId,proto3,oneof" json:"hostos_version_id,omitempty"` + // IPv4 interface configuration + PublicIpv4Config *IPv4InterfaceConfig `protobuf:"bytes,18,opt,name=public_ipv4_config,json=publicIpv4Config,proto3,oneof" json:"public_ipv4_config,omitempty"` + // Domain name, which resolves into Node's IPv4 and IPv6. + // If a Node is to be converted into the ApiBoundaryNode, the domain field should be set. + Domain *string `protobuf:"bytes,19,opt,name=domain,proto3,oneof" json:"domain,omitempty"` +} + +// Deprecated: Use NodeRecord.ProtoReflect.Descriptor instead. +func (*NodeRecord) Descriptor() ([]byte, []int) { + return file_node_proto_rawDescGZIP(), []int{2} +} + +func (x *NodeRecord) GetChipId() []byte { + if x != nil { + return x.ChipId + } + return nil +} + +func (x *NodeRecord) GetDomain() string { + if x != nil && x.Domain != nil { + return *x.Domain + } + return "" +} + +func (x *NodeRecord) GetHostosVersionId() string { + if x != nil && x.HostosVersionId != nil { + return *x.HostosVersionId + } + return "" +} + +func (x *NodeRecord) GetHttp() *ConnectionEndpoint { + if x != nil { + return x.Http + } + return nil +} + +func (x *NodeRecord) GetNodeOperatorId() []byte { + if x != nil { + return x.NodeOperatorId + } + return nil +} + +func (x *NodeRecord) GetPublicIpv4Config() *IPv4InterfaceConfig { + if x != nil { + return x.PublicIpv4Config + } + return nil +} + +func (x *NodeRecord) GetXnet() *ConnectionEndpoint { + if x != nil { + return x.Xnet + } + return nil +} + +func (*NodeRecord) ProtoMessage() {} +func (x *NodeRecord) ProtoReflect() protoreflect.Message { + mi := &file_node_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) +} +func (x *NodeRecord) Reset() { + *x = NodeRecord{} + if protoimpl.UnsafeEnabled { + mi := &file_node_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NodeRecord) String() string { + return protoimpl.X.MessageStringOf(x) +} +func init() { file_node_proto_init() } diff --git a/registry/proto/v1/operator.pb.go b/registry/proto/v1/operator.pb.go new file mode 100644 index 0000000..13a63a9 --- /dev/null +++ b/registry/proto/v1/operator.pb.go @@ -0,0 +1,291 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.34.1 +// protoc v5.26.1 +// source: operator.proto + +package v1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +var ( + file_operator_proto_rawDescOnce sync.Once + file_operator_proto_rawDescData = file_operator_proto_rawDesc +) + +var File_operator_proto protoreflect.FileDescriptor + +var file_operator_proto_depIdxs = []int32{ + 2, // 0: registry.node_operator.v1.NodeOperatorRecord.rewardable_nodes:type_name -> registry.node_operator.v1.NodeOperatorRecord.RewardableNodesEntry + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +var file_operator_proto_goTypes = []interface{}{ + (*NodeOperatorRecord)(nil), // 0: registry.node_operator.v1.NodeOperatorRecord + (*RemoveNodeOperatorsPayload)(nil), // 1: registry.node_operator.v1.RemoveNodeOperatorsPayload + nil, // 2: registry.node_operator.v1.NodeOperatorRecord.RewardableNodesEntry +} + +var file_operator_proto_msgTypes = make([]protoimpl.MessageInfo, 3) + +var file_operator_proto_rawDesc = []byte{ + 0x0a, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x19, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x22, 0x9f, 0x03, 0x0a, 0x12, + 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x12, 0x3b, 0x0a, 0x1a, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x17, 0x6e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x49, 0x64, 0x12, + 0x25, 0x0a, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x61, 0x6e, 0x63, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6e, 0x6f, 0x64, 0x65, 0x41, 0x6c, 0x6c, + 0x6f, 0x77, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, + 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x17, 0x6e, 0x6f, 0x64, 0x65, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, + 0x6c, 0x49, 0x64, 0x12, 0x13, 0x0a, 0x05, 0x64, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x64, 0x63, 0x49, 0x64, 0x12, 0x6d, 0x0a, 0x10, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4e, + 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x61, 0x62, + 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x17, 0x0a, 0x04, 0x69, 0x70, 0x76, 0x36, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x69, 0x70, 0x76, 0x36, 0x88, 0x01, 0x01, + 0x1a, 0x42, 0x0a, 0x14, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, + 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 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, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x69, 0x70, 0x76, 0x36, 0x22, 0x55, 0x0a, + 0x1a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x73, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x5f, 0x74, 0x6f, + 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x15, 0x6e, + 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x54, 0x6f, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x0a, 0x5a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +func file_operator_proto_rawDescGZIP() []byte { + file_operator_proto_rawDescOnce.Do(func() { + file_operator_proto_rawDescData = protoimpl.X.CompressGZIP(file_operator_proto_rawDescData) + }) + return file_operator_proto_rawDescData +} + +// A record for a node operator. Each node operator is associated with a +// unique principal id, a.k.a. NOID. +// +// Note that while a node operator might host nodes for more than +// one funding partner, its principal ID must be unique. +type NodeOperatorRecord struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The principal id of the node operator. This principal is the entity that + // is able to add and remove nodes. + // + // This must be unique across NodeOperatorRecords. + NodeOperatorPrincipalId []byte `protobuf:"bytes,1,opt,name=node_operator_principal_id,json=nodeOperatorPrincipalId,proto3" json:"node_operator_principal_id,omitempty"` + // The remaining number of nodes that could be added by this node operator. + // This number should never go below 0. + NodeAllowance uint64 `protobuf:"varint,2,opt,name=node_allowance,json=nodeAllowance,proto3" json:"node_allowance,omitempty"` + // The principal id of this node operator's provider. + NodeProviderPrincipalId []byte `protobuf:"bytes,3,opt,name=node_provider_principal_id,json=nodeProviderPrincipalId,proto3" json:"node_provider_principal_id,omitempty"` + // The ID of the data center where this Node Operator hosts nodes. + DcId string `protobuf:"bytes,4,opt,name=dc_id,json=dcId,proto3" json:"dc_id,omitempty"` + // A map from node type to the number of nodes for which the associated Node + // Provider should be rewarded. + RewardableNodes map[string]uint32 `protobuf:"bytes,5,rep,name=rewardable_nodes,json=rewardableNodes,proto3" json:"rewardable_nodes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + Ipv6 *string `protobuf:"bytes,6,opt,name=ipv6,proto3,oneof" json:"ipv6,omitempty"` +} + +// Deprecated: Use NodeOperatorRecord.ProtoReflect.Descriptor instead. +func (*NodeOperatorRecord) Descriptor() ([]byte, []int) { + return file_operator_proto_rawDescGZIP(), []int{0} +} + +func (x *NodeOperatorRecord) GetDcId() string { + if x != nil { + return x.DcId + } + return "" +} + +func (x *NodeOperatorRecord) GetIpv6() string { + if x != nil && x.Ipv6 != nil { + return *x.Ipv6 + } + return "" +} + +func (x *NodeOperatorRecord) GetNodeAllowance() uint64 { + if x != nil { + return x.NodeAllowance + } + return 0 +} + +func (x *NodeOperatorRecord) GetNodeOperatorPrincipalId() []byte { + if x != nil { + return x.NodeOperatorPrincipalId + } + return nil +} + +func (x *NodeOperatorRecord) GetNodeProviderPrincipalId() []byte { + if x != nil { + return x.NodeProviderPrincipalId + } + return nil +} + +func (x *NodeOperatorRecord) GetRewardableNodes() map[string]uint32 { + if x != nil { + return x.RewardableNodes + } + return nil +} + +func (*NodeOperatorRecord) ProtoMessage() {} + +func (x *NodeOperatorRecord) ProtoReflect() protoreflect.Message { + mi := &file_operator_proto_msgTypes[0] + 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) +} + +func (x *NodeOperatorRecord) Reset() { + *x = NodeOperatorRecord{} + if protoimpl.UnsafeEnabled { + mi := &file_operator_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NodeOperatorRecord) String() string { + return protoimpl.X.MessageStringOf(x) +} + +// The payload of a request to remove Node Operator records from the Registry +type RemoveNodeOperatorsPayload struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NodeOperatorsToRemove [][]byte `protobuf:"bytes,1,rep,name=node_operators_to_remove,json=nodeOperatorsToRemove,proto3" json:"node_operators_to_remove,omitempty"` +} + +// Deprecated: Use RemoveNodeOperatorsPayload.ProtoReflect.Descriptor instead. +func (*RemoveNodeOperatorsPayload) Descriptor() ([]byte, []int) { + return file_operator_proto_rawDescGZIP(), []int{1} +} + +func (x *RemoveNodeOperatorsPayload) GetNodeOperatorsToRemove() [][]byte { + if x != nil { + return x.NodeOperatorsToRemove + } + return nil +} + +func (*RemoveNodeOperatorsPayload) ProtoMessage() {} + +func (x *RemoveNodeOperatorsPayload) ProtoReflect() protoreflect.Message { + mi := &file_operator_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) +} +func (x *RemoveNodeOperatorsPayload) Reset() { + *x = RemoveNodeOperatorsPayload{} + if protoimpl.UnsafeEnabled { + mi := &file_operator_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} +func (x *RemoveNodeOperatorsPayload) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func init() { file_operator_proto_init() } +func file_operator_proto_init() { + if File_operator_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_operator_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NodeOperatorRecord); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_operator_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RemoveNodeOperatorsPayload); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_operator_proto_msgTypes[0].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_operator_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_operator_proto_goTypes, + DependencyIndexes: file_operator_proto_depIdxs, + MessageInfos: file_operator_proto_msgTypes, + }.Build() + File_operator_proto = out.File + file_operator_proto_rawDesc = nil + file_operator_proto_goTypes = nil + file_operator_proto_depIdxs = nil +} diff --git a/registry/proto/v1/subnet.pb.go b/registry/proto/v1/subnet.pb.go new file mode 100644 index 0000000..56a6fdc --- /dev/null +++ b/registry/proto/v1/subnet.pb.go @@ -0,0 +1,3704 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.34.1 +// protoc v5.26.1 +// source: subnet.proto + +package v1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Enum value maps for EcdsaCurve. +var ( + EcdsaCurve_name = map[int32]string{ + 0: "ECDSA_CURVE_UNSPECIFIED", + 1: "ECDSA_CURVE_SECP256K1", + } + EcdsaCurve_value = map[string]int32{ + "ECDSA_CURVE_UNSPECIFIED": 0, + "ECDSA_CURVE_SECP256K1": 1, + } +) + +// Enum value maps for NiDkgTag. +var ( + NiDkgTag_name = map[int32]string{ + 0: "NI_DKG_TAG_UNSPECIFIED", + 1: "NI_DKG_TAG_LOW_THRESHOLD", + 2: "NI_DKG_TAG_HIGH_THRESHOLD", + } + NiDkgTag_value = map[string]int32{ + "NI_DKG_TAG_UNSPECIFIED": 0, + "NI_DKG_TAG_LOW_THRESHOLD": 1, + "NI_DKG_TAG_HIGH_THRESHOLD": 2, + } +) + +// Enum value maps for AlgorithmId. +var ( + AlgorithmId_name = map[int32]string{ + 0: "ALGORITHM_ID_UNSPECIFIED", + 1: "ALGORITHM_ID_MULTI_BLS12_381", + 2: "ALGORITHM_ID_THRES_BLS12_381", + 3: "ALGORITHM_ID_SCHNORR_SECP256K1", + 4: "ALGORITHM_ID_STATIC_DH_SECP256K1", + 5: "ALGORITHM_ID_HASH_SHA256", + 6: "ALGORITHM_ID_TLS", + 7: "ALGORITHM_ID_ED25519", + 8: "ALGORITHM_ID_SECP256K1", + 9: "ALGORITHM_ID_GROTH20_BLS12_381", + 10: "ALGORITHM_ID_NIDKG_GROTH20_BLS12_381", + 11: "ALGORITHM_ID_ECDSA_P256", + 12: "ALGORITHM_ID_ECDSA_SECP_256K1", + 13: "ALGORITHM_ID_IC_CANISTER_SIGNATURE", + 14: "ALGORITHM_ID_RSA_SHA256", + 15: "ALGORITHM_ID_THRESHOLD_ECDSA_SECP_256K1", + 16: "ALGORITHM_ID_MEGA_SECP_256K1", + 17: "ALGORITHM_ID_THRESHOLD_ECDSA_SECP_256R1", + 18: "ALGORITHM_ID_THRESHOLD_SCHNORR_BIP340", + 19: "ALGORITHM_ID_THRESHOLD_ED25519", + } + AlgorithmId_value = map[string]int32{ + "ALGORITHM_ID_UNSPECIFIED": 0, + "ALGORITHM_ID_MULTI_BLS12_381": 1, + "ALGORITHM_ID_THRES_BLS12_381": 2, + "ALGORITHM_ID_SCHNORR_SECP256K1": 3, + "ALGORITHM_ID_STATIC_DH_SECP256K1": 4, + "ALGORITHM_ID_HASH_SHA256": 5, + "ALGORITHM_ID_TLS": 6, + "ALGORITHM_ID_ED25519": 7, + "ALGORITHM_ID_SECP256K1": 8, + "ALGORITHM_ID_GROTH20_BLS12_381": 9, + "ALGORITHM_ID_NIDKG_GROTH20_BLS12_381": 10, + "ALGORITHM_ID_ECDSA_P256": 11, + "ALGORITHM_ID_ECDSA_SECP_256K1": 12, + "ALGORITHM_ID_IC_CANISTER_SIGNATURE": 13, + "ALGORITHM_ID_RSA_SHA256": 14, + "ALGORITHM_ID_THRESHOLD_ECDSA_SECP_256K1": 15, + "ALGORITHM_ID_MEGA_SECP_256K1": 16, + "ALGORITHM_ID_THRESHOLD_ECDSA_SECP_256R1": 17, + "ALGORITHM_ID_THRESHOLD_SCHNORR_BIP340": 18, + "ALGORITHM_ID_THRESHOLD_ED25519": 19, + } +) + +// Enum value maps for IDkgTranscriptOperation. +var ( + IDkgTranscriptOperation_name = map[int32]string{ + 0: "I_DKG_TRANSCRIPT_OPERATION_UNSPECIFIED", + 1: "I_DKG_TRANSCRIPT_OPERATION_RANDOM", + 2: "I_DKG_TRANSCRIPT_OPERATION_RESHARE_OF_MASKED", + 3: "I_DKG_TRANSCRIPT_OPERATION_RESHARE_OF_UNMASKED", + 4: "I_DKG_TRANSCRIPT_OPERATION_UNMASKED_TIMES_MASKED", + 5: "I_DKG_TRANSCRIPT_OPERATION_RANDOM_UNMASKED", + } + IDkgTranscriptOperation_value = map[string]int32{ + "I_DKG_TRANSCRIPT_OPERATION_UNSPECIFIED": 0, + "I_DKG_TRANSCRIPT_OPERATION_RANDOM": 1, + "I_DKG_TRANSCRIPT_OPERATION_RESHARE_OF_MASKED": 2, + "I_DKG_TRANSCRIPT_OPERATION_RESHARE_OF_UNMASKED": 3, + "I_DKG_TRANSCRIPT_OPERATION_UNMASKED_TIMES_MASKED": 4, + "I_DKG_TRANSCRIPT_OPERATION_RANDOM_UNMASKED": 5, + } +) + +// Enum value maps for SubnetType. +var ( + SubnetType_name = map[int32]string{ + 0: "SUBNET_TYPE_UNSPECIFIED", + 1: "SUBNET_TYPE_APPLICATION", + 2: "SUBNET_TYPE_SYSTEM", + 4: "SUBNET_TYPE_VERIFIED_APPLICATION", + } + SubnetType_value = map[string]int32{ + "SUBNET_TYPE_UNSPECIFIED": 0, + "SUBNET_TYPE_APPLICATION": 1, + "SUBNET_TYPE_SYSTEM": 2, + "SUBNET_TYPE_VERIFIED_APPLICATION": 4, + } +) + +// Enum value maps for SchnorrAlgorithm. +var ( + SchnorrAlgorithm_name = map[int32]string{ + 0: "SCHNORR_ALGORITHM_UNSPECIFIED", + 1: "SCHNORR_ALGORITHM_BIP340SECP256K1", + 2: "SCHNORR_ALGORITHM_ED25519", + } + SchnorrAlgorithm_value = map[string]int32{ + "SCHNORR_ALGORITHM_UNSPECIFIED": 0, + "SCHNORR_ALGORITHM_BIP340SECP256K1": 1, + "SCHNORR_ALGORITHM_ED25519": 2, + } +) + +var ( + file_subnet_proto_rawDescOnce sync.Once + file_subnet_proto_rawDescData = file_subnet_proto_rawDesc +) + +var File_subnet_proto protoreflect.FileDescriptor + +var file_subnet_proto_depIdxs = []int32{ + 29, // 0: registry.subnet.v1.SubnetRecord.gossip_config:type_name -> registry.subnet.v1.GossipConfig + 4, // 1: registry.subnet.v1.SubnetRecord.subnet_type:type_name -> registry.subnet.v1.SubnetType + 30, // 2: registry.subnet.v1.SubnetRecord.features:type_name -> registry.subnet.v1.SubnetFeatures + 31, // 3: registry.subnet.v1.SubnetRecord.ecdsa_config:type_name -> registry.subnet.v1.EcdsaConfig + 35, // 4: registry.subnet.v1.SubnetRecord.chain_key_config:type_name -> registry.subnet.v1.ChainKeyConfig + 0, // 5: registry.subnet.v1.EcdsaKeyId.curve:type_name -> registry.subnet.v1.EcdsaCurve + 7, // 6: registry.subnet.v1.EcdsaInitialization.key_id:type_name -> registry.subnet.v1.EcdsaKeyId + 25, // 7: registry.subnet.v1.EcdsaInitialization.dealings:type_name -> registry.subnet.v1.InitialIDkgDealings + 13, // 8: registry.subnet.v1.CatchUpPackageContents.initial_ni_dkg_transcript_low_threshold:type_name -> registry.subnet.v1.InitialNiDkgTranscriptRecord + 13, // 9: registry.subnet.v1.CatchUpPackageContents.initial_ni_dkg_transcript_high_threshold:type_name -> registry.subnet.v1.InitialNiDkgTranscriptRecord + 10, // 10: registry.subnet.v1.CatchUpPackageContents.registry_store_uri:type_name -> registry.subnet.v1.RegistryStoreUri + 8, // 11: registry.subnet.v1.CatchUpPackageContents.ecdsa_initializations:type_name -> registry.subnet.v1.EcdsaInitialization + 1, // 12: registry.subnet.v1.NiDkgId.dkg_tag:type_name -> registry.subnet.v1.NiDkgTag + 36, // 13: registry.subnet.v1.NiDkgId.remote_target_id:type_name -> google.protobuf.BytesValue + 12, // 14: registry.subnet.v1.InitialNiDkgTranscriptRecord.id:type_name -> registry.subnet.v1.NiDkgId + 14, // 15: registry.subnet.v1.SubnetId.principal_id:type_name -> registry.subnet.v1.PrincipalId + 15, // 16: registry.subnet.v1.IDkgTranscriptId.subnet_id:type_name -> registry.subnet.v1.SubnetId + 24, // 17: registry.subnet.v1.VerifiedIDkgDealing.signed_dealing_tuple:type_name -> registry.subnet.v1.IDkgSignedDealingTuple + 21, // 18: registry.subnet.v1.VerifiedIDkgDealing.support_tuples:type_name -> registry.subnet.v1.SignatureTuple + 14, // 19: registry.subnet.v1.NodeId.principal_id:type_name -> registry.subnet.v1.PrincipalId + 16, // 20: registry.subnet.v1.IDkgTranscript.transcript_id:type_name -> registry.subnet.v1.IDkgTranscriptId + 18, // 21: registry.subnet.v1.IDkgTranscript.dealers:type_name -> registry.subnet.v1.NodeId + 18, // 22: registry.subnet.v1.IDkgTranscript.receivers:type_name -> registry.subnet.v1.NodeId + 17, // 23: registry.subnet.v1.IDkgTranscript.verified_dealings:type_name -> registry.subnet.v1.VerifiedIDkgDealing + 2, // 24: registry.subnet.v1.IDkgTranscript.algorithm_id:type_name -> registry.subnet.v1.AlgorithmId + 18, // 25: registry.subnet.v1.DealerTuple.dealer_id:type_name -> registry.subnet.v1.NodeId + 18, // 26: registry.subnet.v1.SignatureTuple.signer:type_name -> registry.subnet.v1.NodeId + 16, // 27: registry.subnet.v1.IDkgTranscriptParams.transcript_id:type_name -> registry.subnet.v1.IDkgTranscriptId + 20, // 28: registry.subnet.v1.IDkgTranscriptParams.dealers:type_name -> registry.subnet.v1.DealerTuple + 18, // 29: registry.subnet.v1.IDkgTranscriptParams.receivers:type_name -> registry.subnet.v1.NodeId + 2, // 30: registry.subnet.v1.IDkgTranscriptParams.algorithm_id:type_name -> registry.subnet.v1.AlgorithmId + 3, // 31: registry.subnet.v1.IDkgTranscriptParams.idkg_transcript_operation:type_name -> registry.subnet.v1.IDkgTranscriptOperation + 19, // 32: registry.subnet.v1.IDkgTranscriptParams.idkg_transcript_operation_args:type_name -> registry.subnet.v1.IDkgTranscript + 16, // 33: registry.subnet.v1.IDkgDealing.transcript_id:type_name -> registry.subnet.v1.IDkgTranscriptId + 18, // 34: registry.subnet.v1.IDkgSignedDealingTuple.dealer:type_name -> registry.subnet.v1.NodeId + 23, // 35: registry.subnet.v1.IDkgSignedDealingTuple.dealing:type_name -> registry.subnet.v1.IDkgDealing + 22, // 36: registry.subnet.v1.InitialIDkgDealings.params:type_name -> registry.subnet.v1.IDkgTranscriptParams + 24, // 37: registry.subnet.v1.InitialIDkgDealings.signed_dealings:type_name -> registry.subnet.v1.IDkgSignedDealingTuple + 16, // 38: registry.subnet.v1.IDkgComplaint.transcript_id:type_name -> registry.subnet.v1.IDkgTranscriptId + 18, // 39: registry.subnet.v1.IDkgComplaint.dealer:type_name -> registry.subnet.v1.NodeId + 16, // 40: registry.subnet.v1.IDkgOpening.transcript_id:type_name -> registry.subnet.v1.IDkgTranscriptId + 18, // 41: registry.subnet.v1.IDkgOpening.dealer:type_name -> registry.subnet.v1.NodeId + 14, // 42: registry.subnet.v1.ExtendedDerivationPath.caller:type_name -> registry.subnet.v1.PrincipalId + 7, // 43: registry.subnet.v1.EcdsaConfig.key_ids:type_name -> registry.subnet.v1.EcdsaKeyId + 5, // 44: registry.subnet.v1.SchnorrKeyId.algorithm:type_name -> registry.subnet.v1.SchnorrAlgorithm + 7, // 45: registry.subnet.v1.MasterPublicKeyId.ecdsa:type_name -> registry.subnet.v1.EcdsaKeyId + 32, // 46: registry.subnet.v1.MasterPublicKeyId.schnorr:type_name -> registry.subnet.v1.SchnorrKeyId + 33, // 47: registry.subnet.v1.KeyConfig.key_id:type_name -> registry.subnet.v1.MasterPublicKeyId + 34, // 48: registry.subnet.v1.ChainKeyConfig.key_configs:type_name -> registry.subnet.v1.KeyConfig + 49, // [49:49] is the sub-list for method output_type + 49, // [49:49] is the sub-list for method input_type + 49, // [49:49] is the sub-list for extension type_name + 49, // [49:49] is the sub-list for extension extendee + 0, // [0:49] is the sub-list for field type_name +} + +var file_subnet_proto_enumTypes = make([]protoimpl.EnumInfo, 6) + +var file_subnet_proto_goTypes = []interface{}{ + (EcdsaCurve)(0), // 0: registry.subnet.v1.EcdsaCurve + (NiDkgTag)(0), // 1: registry.subnet.v1.NiDkgTag + (AlgorithmId)(0), // 2: registry.subnet.v1.AlgorithmId + (IDkgTranscriptOperation)(0), // 3: registry.subnet.v1.IDkgTranscriptOperation + (SubnetType)(0), // 4: registry.subnet.v1.SubnetType + (SchnorrAlgorithm)(0), // 5: registry.subnet.v1.SchnorrAlgorithm + (*SubnetRecord)(nil), // 6: registry.subnet.v1.SubnetRecord + (*EcdsaKeyId)(nil), // 7: registry.subnet.v1.EcdsaKeyId + (*EcdsaInitialization)(nil), // 8: registry.subnet.v1.EcdsaInitialization + (*CatchUpPackageContents)(nil), // 9: registry.subnet.v1.CatchUpPackageContents + (*RegistryStoreUri)(nil), // 10: registry.subnet.v1.RegistryStoreUri + (*SubnetListRecord)(nil), // 11: registry.subnet.v1.SubnetListRecord + (*NiDkgId)(nil), // 12: registry.subnet.v1.NiDkgId + (*InitialNiDkgTranscriptRecord)(nil), // 13: registry.subnet.v1.InitialNiDkgTranscriptRecord + (*PrincipalId)(nil), // 14: registry.subnet.v1.PrincipalId + (*SubnetId)(nil), // 15: registry.subnet.v1.SubnetId + (*IDkgTranscriptId)(nil), // 16: registry.subnet.v1.IDkgTranscriptId + (*VerifiedIDkgDealing)(nil), // 17: registry.subnet.v1.VerifiedIDkgDealing + (*NodeId)(nil), // 18: registry.subnet.v1.NodeId + (*IDkgTranscript)(nil), // 19: registry.subnet.v1.IDkgTranscript + (*DealerTuple)(nil), // 20: registry.subnet.v1.DealerTuple + (*SignatureTuple)(nil), // 21: registry.subnet.v1.SignatureTuple + (*IDkgTranscriptParams)(nil), // 22: registry.subnet.v1.IDkgTranscriptParams + (*IDkgDealing)(nil), // 23: registry.subnet.v1.IDkgDealing + (*IDkgSignedDealingTuple)(nil), // 24: registry.subnet.v1.IDkgSignedDealingTuple + (*InitialIDkgDealings)(nil), // 25: registry.subnet.v1.InitialIDkgDealings + (*IDkgComplaint)(nil), // 26: registry.subnet.v1.IDkgComplaint + (*IDkgOpening)(nil), // 27: registry.subnet.v1.IDkgOpening + (*ExtendedDerivationPath)(nil), // 28: registry.subnet.v1.ExtendedDerivationPath + (*GossipConfig)(nil), // 29: registry.subnet.v1.GossipConfig + (*SubnetFeatures)(nil), // 30: registry.subnet.v1.SubnetFeatures + (*EcdsaConfig)(nil), // 31: registry.subnet.v1.EcdsaConfig + (*SchnorrKeyId)(nil), // 32: registry.subnet.v1.SchnorrKeyId + (*MasterPublicKeyId)(nil), // 33: registry.subnet.v1.MasterPublicKeyId + (*KeyConfig)(nil), // 34: registry.subnet.v1.KeyConfig + (*ChainKeyConfig)(nil), // 35: registry.subnet.v1.ChainKeyConfig + (*wrapperspb.BytesValue)(nil), // 36: google.protobuf.BytesValue +} + +var file_subnet_proto_msgTypes = make([]protoimpl.MessageInfo, 30) + +var file_subnet_proto_rawDesc = []byte{ + 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, + 0x76, 0x31, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0x83, 0x0b, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, + 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x68, 0x69, 0x70, 0x12, 0x40, 0x0a, 0x1d, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x6e, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x19, 0x6d, 0x61, 0x78, 0x49, + 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x74, 0x65, 0x73, 0x50, 0x65, 0x72, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x64, 0x65, + 0x6c, 0x61, 0x79, 0x5f, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0f, 0x75, 0x6e, 0x69, 0x74, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x69, 0x6c, 0x6c, 0x69, + 0x73, 0x12, 0x3d, 0x0a, 0x1b, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x6f, 0x74, + 0x61, 0x72, 0x79, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x18, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x4e, + 0x6f, 0x74, 0x61, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, + 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x72, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e, + 0x0a, 0x13, 0x64, 0x6b, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x5f, 0x6c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x64, 0x6b, 0x67, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x45, + 0x0a, 0x0d, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x6f, 0x73, 0x73, 0x69, + 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0c, 0x67, 0x6f, 0x73, 0x73, 0x69, 0x70, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x61, + 0x73, 0x5f, 0x6e, 0x6e, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x41, 0x73, 0x4e, 0x6e, 0x73, 0x12, 0x3f, 0x0a, 0x0b, 0x73, 0x75, 0x62, 0x6e, 0x65, + 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x73, 0x75, + 0x62, 0x6e, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x33, 0x0a, 0x16, 0x64, 0x6b, 0x67, 0x5f, + 0x64, 0x65, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x64, 0x6b, 0x67, 0x44, 0x65, 0x61, + 0x6c, 0x69, 0x6e, 0x67, 0x73, 0x50, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1b, 0x0a, + 0x09, 0x69, 0x73, 0x5f, 0x68, 0x61, 0x6c, 0x74, 0x65, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x69, 0x73, 0x48, 0x61, 0x6c, 0x74, 0x65, 0x64, 0x12, 0x42, 0x0a, 0x1e, 0x6d, 0x61, + 0x78, 0x5f, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x12, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x1a, 0x6d, 0x61, 0x78, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x50, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x33, + 0x0a, 0x16, 0x6d, 0x61, 0x78, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x70, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, + 0x6d, 0x61, 0x78, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x53, + 0x69, 0x7a, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x04, 0x52, 0x19, 0x6d, 0x61, 0x78, 0x49, 0x6e, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x6e, 0x73, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x75, + 0x6e, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x04, 0x52, 0x17, 0x6d, 0x61, 0x78, 0x49, 0x6e, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x52, 0x6f, 0x75, 0x6e, + 0x64, 0x12, 0x48, 0x0a, 0x21, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, + 0x6c, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1d, 0x6d, 0x61, + 0x78, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x6d, + 0x61, 0x78, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x5f, 0x63, 0x61, 0x6e, + 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x6d, 0x61, + 0x78, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x43, 0x61, 0x6e, 0x69, 0x73, 0x74, 0x65, + 0x72, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x73, 0x68, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, + 0x6c, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x19, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x11, 0x73, 0x73, 0x68, 0x52, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x73, 0x68, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x73, + 0x73, 0x68, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x42, + 0x0a, 0x0c, 0x65, 0x63, 0x64, 0x73, 0x61, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x1b, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x63, 0x64, 0x73, 0x61, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x65, 0x63, 0x64, 0x73, 0x61, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x2b, 0x0a, 0x12, 0x68, 0x61, 0x6c, 0x74, 0x5f, 0x61, 0x74, 0x5f, 0x63, 0x75, + 0x70, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, + 0x68, 0x61, 0x6c, 0x74, 0x41, 0x74, 0x43, 0x75, 0x70, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, + 0x51, 0x0a, 0x10, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, + 0x0e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x88, + 0x01, 0x01, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x6b, 0x65, 0x79, + 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, + 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x52, + 0x0d, 0x69, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x52, 0x16, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x64, 0x6b, 0x67, 0x5f, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x20, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, + 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, + 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x63, 0x61, 0x70, 0x22, 0x56, 0x0a, 0x0a, 0x45, 0x63, 0x64, 0x73, + 0x61, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x05, 0x63, 0x75, 0x72, 0x76, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x63, 0x64, 0x73, 0x61, + 0x43, 0x75, 0x72, 0x76, 0x65, 0x52, 0x05, 0x63, 0x75, 0x72, 0x76, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x22, 0x91, 0x01, 0x0a, 0x13, 0x45, 0x63, 0x64, 0x73, 0x61, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, + 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x63, + 0x64, 0x73, 0x61, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, + 0x43, 0x0a, 0x08, 0x64, 0x65, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x27, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, + 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x44, + 0x6b, 0x67, 0x44, 0x65, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x08, 0x64, 0x65, 0x61, 0x6c, + 0x69, 0x6e, 0x67, 0x73, 0x22, 0xa7, 0x04, 0x0a, 0x16, 0x43, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, + 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x12, + 0x85, 0x01, 0x0a, 0x27, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x69, 0x5f, 0x64, + 0x6b, 0x67, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x6c, 0x6f, + 0x77, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x30, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, + 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x4e, 0x69, + 0x44, 0x6b, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x52, 0x22, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x4e, 0x69, 0x44, 0x6b, + 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4c, 0x6f, 0x77, 0x54, 0x68, + 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x87, 0x01, 0x0a, 0x28, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x69, 0x5f, 0x64, 0x6b, 0x67, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x68, 0x69, 0x67, 0x68, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, + 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x4e, 0x69, 0x44, 0x6b, 0x67, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x23, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x61, 0x6c, 0x4e, 0x69, 0x44, 0x6b, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x48, 0x69, 0x67, 0x68, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, + 0x64, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x65, 0x48, 0x61, 0x73, 0x68, 0x12, 0x52, 0x0a, 0x12, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x75, + 0x72, 0x69, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x55, 0x72, 0x69, 0x52, 0x10, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x55, 0x72, 0x69, + 0x12, 0x5c, 0x0a, 0x15, 0x65, 0x63, 0x64, 0x73, 0x61, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, + 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x27, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x63, 0x64, 0x73, 0x61, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, + 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x65, 0x63, 0x64, 0x73, 0x61, 0x49, + 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x63, + 0x0a, 0x10, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x55, + 0x72, 0x69, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x75, 0x72, 0x69, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x22, 0x32, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6e, 0x65, + 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, + 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0xf1, 0x01, 0x0a, 0x07, 0x4e, 0x69, 0x44, 0x6b, + 0x67, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x5f, 0x73, 0x75, 0x62, 0x6e, + 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x64, 0x65, 0x61, 0x6c, 0x65, 0x72, + 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x12, 0x35, 0x0a, 0x07, 0x64, 0x6b, 0x67, 0x5f, 0x74, 0x61, + 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x69, 0x44, + 0x6b, 0x67, 0x54, 0x61, 0x67, 0x52, 0x06, 0x64, 0x6b, 0x67, 0x54, 0x61, 0x67, 0x12, 0x45, 0x0a, + 0x10, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x54, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x22, 0xea, 0x01, 0x0a, 0x1c, + 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x4e, 0x69, 0x44, 0x6b, 0x67, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x2b, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x69, + 0x44, 0x6b, 0x67, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68, 0x72, + 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x74, 0x68, + 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x74, 0x65, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x74, 0x65, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x36, 0x0a, 0x17, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x73, 0x70, + 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x15, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x73, 0x70, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x22, 0x1f, 0x0a, 0x0b, 0x50, 0x72, 0x69, 0x6e, + 0x63, 0x69, 0x70, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x72, 0x61, 0x77, 0x22, 0x4e, 0x0a, 0x08, 0x53, 0x75, 0x62, + 0x6e, 0x65, 0x74, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x0c, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, + 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x0b, 0x70, 0x72, + 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x49, 0x64, 0x22, 0x82, 0x01, 0x0a, 0x10, 0x49, 0x44, + 0x6b, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x49, 0x64, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x39, + 0x0a, 0x09, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, + 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x49, 0x64, 0x52, + 0x08, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xae, + 0x02, 0x0a, 0x13, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x49, 0x44, 0x6b, 0x67, 0x44, + 0x65, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x61, 0x6c, 0x65, 0x72, + 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x64, 0x65, + 0x61, 0x6c, 0x65, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x5c, 0x0a, 0x14, 0x73, 0x69, 0x67, + 0x6e, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x75, 0x70, 0x6c, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x44, 0x6b, + 0x67, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x44, 0x65, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x75, + 0x70, 0x6c, 0x65, 0x52, 0x12, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x44, 0x65, 0x61, 0x6c, 0x69, + 0x6e, 0x67, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x12, 0x49, 0x0a, 0x0e, 0x73, 0x75, 0x70, 0x70, 0x6f, + 0x72, 0x74, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x75, + 0x70, 0x6c, 0x65, 0x52, 0x0d, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x75, 0x70, 0x6c, + 0x65, 0x73, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, + 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x52, 0x10, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x0d, 0x64, 0x65, + 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x73, 0x22, + 0x4c, 0x0a, 0x06, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x0c, 0x70, 0x72, 0x69, + 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x49, 0x64, + 0x52, 0x0b, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x49, 0x64, 0x22, 0xe0, 0x03, + 0x0a, 0x0e, 0x49, 0x44, 0x6b, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x12, 0x49, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x44, 0x6b, + 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x49, 0x64, 0x52, 0x0c, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x07, 0x64, + 0x65, 0x61, 0x6c, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x52, 0x07, 0x64, 0x65, 0x61, 0x6c, 0x65, 0x72, + 0x73, 0x12, 0x38, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x64, + 0x52, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x11, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, + 0x65, 0x64, 0x5f, 0x64, 0x65, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x27, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, + 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x49, + 0x44, 0x6b, 0x67, 0x44, 0x65, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x76, 0x65, 0x72, 0x69, + 0x66, 0x69, 0x65, 0x64, 0x44, 0x65, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x27, 0x0a, 0x0f, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x42, 0x0a, 0x0c, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, + 0x68, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x49, 0x64, 0x52, 0x0b, 0x61, 0x6c, + 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x61, 0x77, + 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0d, 0x72, 0x61, 0x77, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x22, 0x69, 0x0a, 0x0b, 0x44, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x12, + 0x37, 0x0a, 0x09, 0x64, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, + 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x52, 0x08, + 0x64, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x61, 0x6c, + 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, + 0x64, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x62, 0x0a, 0x0e, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x12, 0x32, 0x0a, + 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, + 0x72, 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, 0x22, + 0x97, 0x04, 0x0a, 0x14, 0x49, 0x44, 0x6b, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x49, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x44, 0x6b, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x49, 0x64, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x07, 0x64, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x61, 0x6c, 0x65, 0x72, + 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x07, 0x64, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x73, 0x12, 0x38, + 0x0a, 0x09, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, + 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x52, 0x09, 0x72, + 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x0c, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, + 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, + 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x49, 0x64, 0x52, 0x0b, 0x61, 0x6c, 0x67, 0x6f, + 0x72, 0x69, 0x74, 0x68, 0x6d, 0x49, 0x64, 0x12, 0x67, 0x0a, 0x19, 0x69, 0x64, 0x6b, 0x67, 0x5f, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x44, 0x6b, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x17, 0x69, 0x64, 0x6b, 0x67, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x67, 0x0a, 0x1e, 0x69, 0x64, 0x6b, 0x67, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x72, + 0x67, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x44, + 0x6b, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x52, 0x1b, 0x69, 0x64, + 0x6b, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x22, 0x79, 0x0a, 0x0b, 0x49, 0x44, 0x6b, + 0x67, 0x44, 0x65, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x49, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x44, 0x6b, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x49, 0x64, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x61, 0x77, 0x5f, 0x64, 0x65, 0x61, 0x6c, 0x69, + 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x72, 0x61, 0x77, 0x44, 0x65, 0x61, + 0x6c, 0x69, 0x6e, 0x67, 0x22, 0xa5, 0x01, 0x0a, 0x16, 0x49, 0x44, 0x6b, 0x67, 0x53, 0x69, 0x67, + 0x6e, 0x65, 0x64, 0x44, 0x65, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x12, + 0x32, 0x0a, 0x06, 0x64, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x52, 0x06, 0x64, 0x65, 0x61, + 0x6c, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x07, 0x64, 0x65, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x44, 0x6b, 0x67, 0x44, 0x65, + 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x64, 0x65, 0x61, 0x6c, 0x69, 0x6e, 0x67, 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, 0x22, 0xd6, 0x01, 0x0a, + 0x13, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x44, 0x6b, 0x67, 0x44, 0x65, 0x61, 0x6c, + 0x69, 0x6e, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x40, + 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x44, 0x6b, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x12, 0x53, 0x0a, 0x0f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x61, 0x6c, 0x69, + 0x6e, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, + 0x44, 0x6b, 0x67, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x44, 0x65, 0x61, 0x6c, 0x69, 0x6e, 0x67, + 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x0e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x44, 0x65, 0x61, + 0x6c, 0x69, 0x6e, 0x67, 0x73, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x52, 0x08, 0x64, 0x65, 0x61, + 0x6c, 0x69, 0x6e, 0x67, 0x73, 0x22, 0xb3, 0x01, 0x0a, 0x0d, 0x49, 0x44, 0x6b, 0x67, 0x43, 0x6f, + 0x6d, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x12, 0x49, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x44, 0x6b, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x49, 0x64, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x49, 0x64, 0x12, 0x32, 0x0a, 0x06, 0x64, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, + 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x52, 0x06, + 0x64, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x61, 0x77, 0x5f, 0x63, 0x6f, + 0x6d, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x72, + 0x61, 0x77, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x22, 0xad, 0x01, 0x0a, 0x0b, + 0x49, 0x44, 0x6b, 0x67, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x49, 0x0a, 0x0d, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, + 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x44, 0x6b, 0x67, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x49, 0x64, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x06, 0x64, 0x65, 0x61, 0x6c, 0x65, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, + 0x49, 0x64, 0x52, 0x06, 0x64, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x61, + 0x77, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0a, 0x72, 0x61, 0x77, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x22, 0x7a, 0x0a, 0x16, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x61, 0x74, 0x68, 0x12, 0x37, 0x0a, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, + 0x69, 0x70, 0x61, 0x6c, 0x49, 0x64, 0x52, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x27, + 0x0a, 0x0f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0e, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x74, 0x68, 0x22, 0xd4, 0x03, 0x0a, 0x0c, 0x47, 0x6f, 0x73, 0x73, + 0x69, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x1d, 0x6d, 0x61, 0x78, 0x5f, + 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, + 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x70, 0x65, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x19, 0x6d, 0x61, 0x78, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x73, 0x50, 0x65, 0x72, 0x50, 0x65, 0x65, 0x72, 0x12, 0x29, 0x0a, 0x11, 0x6d, 0x61, + 0x78, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x6d, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x57, + 0x61, 0x69, 0x74, 0x4d, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x5f, 0x64, 0x75, 0x70, + 0x6c, 0x69, 0x63, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6d, 0x61, + 0x78, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x61, + 0x78, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x53, 0x69, 0x7a, 0x65, + 0x12, 0x37, 0x0a, 0x18, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x15, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x66, 0x6e, + 0x5f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x5f, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x70, 0x66, 0x6e, + 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x4d, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x5f, 0x70, + 0x6f, 0x6c, 0x6c, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x6d, 0x73, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x14, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x6c, + 0x6c, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x4d, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x72, 0x65, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x17, 0x72, 0x65, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x4d, 0x73, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x0a, 0x10, + 0x0b, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, + 0x0d, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x85, + 0x02, 0x0a, 0x0e, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x61, 0x6e, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x61, + 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, + 0x63, 0x61, 0x6e, 0x69, 0x73, 0x74, 0x65, 0x72, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x69, + 0x6e, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x68, 0x74, 0x74, 0x70, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x24, 0x0a, 0x0b, 0x73, 0x65, 0x76, 0x5f, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0a, + 0x73, 0x65, 0x76, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, + 0x0c, 0x5f, 0x73, 0x65, 0x76, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x4a, 0x04, 0x08, + 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, + 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x4a, 0x04, 0x08, 0x08, 0x10, + 0x09, 0x52, 0x17, 0x62, 0x69, 0x74, 0x63, 0x6f, 0x69, 0x6e, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x6e, + 0x65, 0x74, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x07, 0x62, 0x69, 0x74, 0x63, + 0x6f, 0x69, 0x6e, 0x52, 0x0a, 0x73, 0x65, 0x76, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x15, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x82, 0x03, 0x0a, 0x0b, 0x45, 0x63, 0x64, 0x73, 0x61, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x44, 0x0a, 0x1f, 0x71, 0x75, 0x61, 0x64, 0x72, 0x75, + 0x70, 0x6c, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x69, + 0x6e, 0x5f, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x1b, 0x71, 0x75, 0x61, 0x64, 0x72, 0x75, 0x70, 0x6c, 0x65, 0x73, 0x54, 0x6f, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x49, 0x6e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x37, 0x0a, 0x07, + 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x45, 0x63, 0x64, 0x73, 0x61, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x52, 0x06, 0x6b, + 0x65, 0x79, 0x49, 0x64, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x71, 0x75, 0x65, + 0x75, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6d, + 0x61, 0x78, 0x51, 0x75, 0x65, 0x75, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x44, 0x0a, 0x1c, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x04, 0x48, 0x00, 0x52, 0x19, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4e, 0x73, 0x88, 0x01, + 0x01, 0x12, 0x41, 0x0a, 0x1b, 0x69, 0x64, 0x6b, 0x67, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x72, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x6d, 0x73, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x48, 0x01, 0x52, 0x17, 0x69, 0x64, 0x6b, 0x67, 0x4b, 0x65, + 0x79, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x4d, + 0x73, 0x88, 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, + 0x75, 0x74, 0x5f, 0x6e, 0x73, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x64, 0x6b, 0x67, 0x5f, 0x6b, + 0x65, 0x79, 0x5f, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x5f, 0x6d, 0x73, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0x66, 0x0a, 0x0c, 0x53, + 0x63, 0x68, 0x6e, 0x6f, 0x72, 0x72, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x09, 0x61, + 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x63, 0x68, 0x6e, 0x6f, 0x72, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, + 0x69, 0x74, 0x68, 0x6d, 0x52, 0x09, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x22, 0x93, 0x01, 0x0a, 0x11, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x50, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x05, 0x65, 0x63, 0x64, + 0x73, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x63, + 0x64, 0x73, 0x61, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x48, 0x00, 0x52, 0x05, 0x65, 0x63, 0x64, 0x73, + 0x61, 0x12, 0x3c, 0x0a, 0x07, 0x73, 0x63, 0x68, 0x6e, 0x6f, 0x72, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x73, 0x75, + 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x63, 0x68, 0x6e, 0x6f, 0x72, 0x72, 0x4b, + 0x65, 0x79, 0x49, 0x64, 0x48, 0x00, 0x52, 0x07, 0x73, 0x63, 0x68, 0x6e, 0x6f, 0x72, 0x72, 0x42, + 0x08, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x22, 0x91, 0x02, 0x0a, 0x09, 0x4b, 0x65, + 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x41, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x73, + 0x74, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x48, 0x00, + 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x50, 0x0a, 0x23, 0x70, 0x72, + 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x5f, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x5f, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x01, 0x52, 0x1e, 0x70, 0x72, 0x65, 0x53, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x54, 0x6f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x49, 0x6e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x0e, + 0x6d, 0x61, 0x78, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0d, 0x48, 0x02, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x51, 0x75, 0x65, 0x75, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6b, 0x65, 0x79, 0x5f, + 0x69, 0x64, 0x42, 0x26, 0x0a, 0x24, 0x5f, 0x70, 0x72, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, + 0x69, 0x6e, 0x5f, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x6d, + 0x61, 0x78, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x22, 0x9a, 0x02, + 0x0a, 0x0e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x3e, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x6b, 0x65, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, + 0x12, 0x44, 0x0a, 0x1c, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x6e, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x19, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, + 0x74, 0x4e, 0x73, 0x88, 0x01, 0x01, 0x12, 0x41, 0x0a, 0x1b, 0x69, 0x64, 0x6b, 0x67, 0x5f, 0x6b, + 0x65, 0x79, 0x5f, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x48, 0x01, 0x52, 0x17, 0x69, + 0x64, 0x6b, 0x67, 0x4b, 0x65, 0x79, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, + 0x72, 0x69, 0x6f, 0x64, 0x4d, 0x73, 0x88, 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x6e, 0x73, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, + 0x64, 0x6b, 0x67, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x6d, 0x73, 0x2a, 0x44, 0x0a, 0x0a, 0x45, 0x63, + 0x64, 0x73, 0x61, 0x43, 0x75, 0x72, 0x76, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x45, 0x43, 0x44, 0x53, + 0x41, 0x5f, 0x43, 0x55, 0x52, 0x56, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, 0x43, + 0x55, 0x52, 0x56, 0x45, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x32, 0x35, 0x36, 0x4b, 0x31, 0x10, 0x01, + 0x2a, 0x63, 0x0a, 0x08, 0x4e, 0x69, 0x44, 0x6b, 0x67, 0x54, 0x61, 0x67, 0x12, 0x1a, 0x0a, 0x16, + 0x4e, 0x49, 0x5f, 0x44, 0x4b, 0x47, 0x5f, 0x54, 0x41, 0x47, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x4e, 0x49, 0x5f, 0x44, + 0x4b, 0x47, 0x5f, 0x54, 0x41, 0x47, 0x5f, 0x4c, 0x4f, 0x57, 0x5f, 0x54, 0x48, 0x52, 0x45, 0x53, + 0x48, 0x4f, 0x4c, 0x44, 0x10, 0x01, 0x12, 0x1d, 0x0a, 0x19, 0x4e, 0x49, 0x5f, 0x44, 0x4b, 0x47, + 0x5f, 0x54, 0x41, 0x47, 0x5f, 0x48, 0x49, 0x47, 0x48, 0x5f, 0x54, 0x48, 0x52, 0x45, 0x53, 0x48, + 0x4f, 0x4c, 0x44, 0x10, 0x02, 0x2a, 0xc1, 0x05, 0x0a, 0x0b, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, + 0x74, 0x68, 0x6d, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, + 0x48, 0x4d, 0x5f, 0x49, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x20, 0x0a, 0x1c, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, + 0x5f, 0x49, 0x44, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x5f, 0x42, 0x4c, 0x53, 0x31, 0x32, 0x5f, + 0x33, 0x38, 0x31, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, + 0x48, 0x4d, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x48, 0x52, 0x45, 0x53, 0x5f, 0x42, 0x4c, 0x53, 0x31, + 0x32, 0x5f, 0x33, 0x38, 0x31, 0x10, 0x02, 0x12, 0x22, 0x0a, 0x1e, 0x41, 0x4c, 0x47, 0x4f, 0x52, + 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x43, 0x48, 0x4e, 0x4f, 0x52, 0x52, 0x5f, + 0x53, 0x45, 0x43, 0x50, 0x32, 0x35, 0x36, 0x4b, 0x31, 0x10, 0x03, 0x12, 0x24, 0x0a, 0x20, 0x41, + 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x49, 0x43, 0x5f, 0x44, 0x48, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x32, 0x35, 0x36, 0x4b, 0x31, 0x10, + 0x04, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x49, + 0x44, 0x5f, 0x48, 0x41, 0x53, 0x48, 0x5f, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x10, 0x05, 0x12, + 0x14, 0x0a, 0x10, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x49, 0x44, 0x5f, + 0x54, 0x4c, 0x53, 0x10, 0x06, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, + 0x48, 0x4d, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x44, 0x32, 0x35, 0x35, 0x31, 0x39, 0x10, 0x07, 0x12, + 0x1a, 0x0a, 0x16, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x49, 0x44, 0x5f, + 0x53, 0x45, 0x43, 0x50, 0x32, 0x35, 0x36, 0x4b, 0x31, 0x10, 0x08, 0x12, 0x22, 0x0a, 0x1e, 0x41, + 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x49, 0x44, 0x5f, 0x47, 0x52, 0x4f, 0x54, + 0x48, 0x32, 0x30, 0x5f, 0x42, 0x4c, 0x53, 0x31, 0x32, 0x5f, 0x33, 0x38, 0x31, 0x10, 0x09, 0x12, + 0x28, 0x0a, 0x24, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x49, 0x44, 0x5f, + 0x4e, 0x49, 0x44, 0x4b, 0x47, 0x5f, 0x47, 0x52, 0x4f, 0x54, 0x48, 0x32, 0x30, 0x5f, 0x42, 0x4c, + 0x53, 0x31, 0x32, 0x5f, 0x33, 0x38, 0x31, 0x10, 0x0a, 0x12, 0x1b, 0x0a, 0x17, 0x41, 0x4c, 0x47, + 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, + 0x50, 0x32, 0x35, 0x36, 0x10, 0x0b, 0x12, 0x21, 0x0a, 0x1d, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, + 0x54, 0x48, 0x4d, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, 0x53, 0x45, 0x43, + 0x50, 0x5f, 0x32, 0x35, 0x36, 0x4b, 0x31, 0x10, 0x0c, 0x12, 0x26, 0x0a, 0x22, 0x41, 0x4c, 0x47, + 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x49, 0x44, 0x5f, 0x49, 0x43, 0x5f, 0x43, 0x41, 0x4e, + 0x49, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x10, + 0x0d, 0x12, 0x1b, 0x0a, 0x17, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x49, + 0x44, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x10, 0x0e, 0x12, 0x2b, + 0x0a, 0x27, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x49, 0x44, 0x5f, 0x54, + 0x48, 0x52, 0x45, 0x53, 0x48, 0x4f, 0x4c, 0x44, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, 0x53, + 0x45, 0x43, 0x50, 0x5f, 0x32, 0x35, 0x36, 0x4b, 0x31, 0x10, 0x0f, 0x12, 0x20, 0x0a, 0x1c, 0x41, + 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x49, 0x44, 0x5f, 0x4d, 0x45, 0x47, 0x41, + 0x5f, 0x53, 0x45, 0x43, 0x50, 0x5f, 0x32, 0x35, 0x36, 0x4b, 0x31, 0x10, 0x10, 0x12, 0x2b, 0x0a, + 0x27, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x48, + 0x52, 0x45, 0x53, 0x48, 0x4f, 0x4c, 0x44, 0x5f, 0x45, 0x43, 0x44, 0x53, 0x41, 0x5f, 0x53, 0x45, + 0x43, 0x50, 0x5f, 0x32, 0x35, 0x36, 0x52, 0x31, 0x10, 0x11, 0x12, 0x29, 0x0a, 0x25, 0x41, 0x4c, + 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x48, 0x52, 0x45, 0x53, + 0x48, 0x4f, 0x4c, 0x44, 0x5f, 0x53, 0x43, 0x48, 0x4e, 0x4f, 0x52, 0x52, 0x5f, 0x42, 0x49, 0x50, + 0x33, 0x34, 0x30, 0x10, 0x12, 0x12, 0x22, 0x0a, 0x1e, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, + 0x48, 0x4d, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x48, 0x52, 0x45, 0x53, 0x48, 0x4f, 0x4c, 0x44, 0x5f, + 0x45, 0x44, 0x32, 0x35, 0x35, 0x31, 0x39, 0x10, 0x13, 0x2a, 0xb8, 0x02, 0x0a, 0x17, 0x49, 0x44, + 0x6b, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x26, 0x49, 0x5f, 0x44, 0x4b, 0x47, 0x5f, 0x54, + 0x52, 0x41, 0x4e, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x25, 0x0a, 0x21, 0x49, 0x5f, 0x44, 0x4b, 0x47, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, + 0x43, 0x52, 0x49, 0x50, 0x54, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x52, 0x41, 0x4e, 0x44, 0x4f, 0x4d, 0x10, 0x01, 0x12, 0x30, 0x0a, 0x2c, 0x49, 0x5f, 0x44, 0x4b, + 0x47, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x5f, 0x4f, 0x50, 0x45, + 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x53, 0x48, 0x41, 0x52, 0x45, 0x5f, 0x4f, + 0x46, 0x5f, 0x4d, 0x41, 0x53, 0x4b, 0x45, 0x44, 0x10, 0x02, 0x12, 0x32, 0x0a, 0x2e, 0x49, 0x5f, + 0x44, 0x4b, 0x47, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x5f, 0x4f, + 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x53, 0x48, 0x41, 0x52, 0x45, + 0x5f, 0x4f, 0x46, 0x5f, 0x55, 0x4e, 0x4d, 0x41, 0x53, 0x4b, 0x45, 0x44, 0x10, 0x03, 0x12, 0x34, + 0x0a, 0x30, 0x49, 0x5f, 0x44, 0x4b, 0x47, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x43, 0x52, 0x49, + 0x50, 0x54, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x4d, + 0x41, 0x53, 0x4b, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x5f, 0x4d, 0x41, 0x53, 0x4b, + 0x45, 0x44, 0x10, 0x04, 0x12, 0x2e, 0x0a, 0x2a, 0x49, 0x5f, 0x44, 0x4b, 0x47, 0x5f, 0x54, 0x52, + 0x41, 0x4e, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x52, 0x41, 0x4e, 0x44, 0x4f, 0x4d, 0x5f, 0x55, 0x4e, 0x4d, 0x41, 0x53, 0x4b, + 0x45, 0x44, 0x10, 0x05, 0x2a, 0xab, 0x01, 0x0a, 0x0a, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x55, 0x42, 0x4e, 0x45, 0x54, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x55, 0x42, 0x4e, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x16, 0x0a, + 0x12, 0x53, 0x55, 0x42, 0x4e, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x59, 0x53, + 0x54, 0x45, 0x4d, 0x10, 0x02, 0x12, 0x24, 0x0a, 0x20, 0x53, 0x55, 0x42, 0x4e, 0x45, 0x54, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x41, 0x50, + 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x22, 0x04, 0x08, 0x03, 0x10, + 0x03, 0x2a, 0x1f, 0x53, 0x55, 0x42, 0x4e, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, + 0x52, 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x2a, 0x7b, 0x0a, 0x10, 0x53, 0x63, 0x68, 0x6e, 0x6f, 0x72, 0x72, 0x41, 0x6c, 0x67, + 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x43, 0x48, 0x4e, 0x4f, 0x52, + 0x52, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x25, 0x0a, 0x21, 0x53, 0x43, 0x48, + 0x4e, 0x4f, 0x52, 0x52, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x42, + 0x49, 0x50, 0x33, 0x34, 0x30, 0x53, 0x45, 0x43, 0x50, 0x32, 0x35, 0x36, 0x4b, 0x31, 0x10, 0x01, + 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x43, 0x48, 0x4e, 0x4f, 0x52, 0x52, 0x5f, 0x41, 0x4c, 0x47, 0x4f, + 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x45, 0x44, 0x32, 0x35, 0x35, 0x31, 0x39, 0x10, 0x02, 0x42, + 0x0a, 0x5a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +func file_subnet_proto_init() { + if File_subnet_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_subnet_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubnetRecord); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EcdsaKeyId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EcdsaInitialization); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CatchUpPackageContents); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegistryStoreUri); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubnetListRecord); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NiDkgId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InitialNiDkgTranscriptRecord); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PrincipalId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubnetId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IDkgTranscriptId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VerifiedIDkgDealing); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NodeId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IDkgTranscript); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DealerTuple); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SignatureTuple); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IDkgTranscriptParams); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IDkgDealing); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IDkgSignedDealingTuple); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InitialIDkgDealings); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IDkgComplaint); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IDkgOpening); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExtendedDerivationPath); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GossipConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubnetFeatures); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EcdsaConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchnorrKeyId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MasterPublicKeyId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KeyConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChainKeyConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_subnet_proto_msgTypes[0].OneofWrappers = []interface{}{} + file_subnet_proto_msgTypes[24].OneofWrappers = []interface{}{} + file_subnet_proto_msgTypes[25].OneofWrappers = []interface{}{} + file_subnet_proto_msgTypes[27].OneofWrappers = []interface{}{ + (*MasterPublicKeyId_Ecdsa)(nil), + (*MasterPublicKeyId_Schnorr)(nil), + } + file_subnet_proto_msgTypes[28].OneofWrappers = []interface{}{} + file_subnet_proto_msgTypes[29].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_subnet_proto_rawDesc, + NumEnums: 6, + NumMessages: 30, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_subnet_proto_goTypes, + DependencyIndexes: file_subnet_proto_depIdxs, + EnumInfos: file_subnet_proto_enumTypes, + MessageInfos: file_subnet_proto_msgTypes, + }.Build() + File_subnet_proto = out.File + file_subnet_proto_rawDesc = nil + file_subnet_proto_goTypes = nil + file_subnet_proto_depIdxs = nil +} + +func file_subnet_proto_rawDescGZIP() []byte { + file_subnet_proto_rawDescOnce.Do(func() { + file_subnet_proto_rawDescData = protoimpl.X.CompressGZIP(file_subnet_proto_rawDescData) + }) + return file_subnet_proto_rawDescData +} + +func init() { file_subnet_proto_init() } + +// An algorithm ID. This is used to specify the signature algorithm associated with a public key. +type AlgorithmId int32 + +const ( + AlgorithmId_ALGORITHM_ID_UNSPECIFIED AlgorithmId = 0 + AlgorithmId_ALGORITHM_ID_MULTI_BLS12_381 AlgorithmId = 1 + AlgorithmId_ALGORITHM_ID_THRES_BLS12_381 AlgorithmId = 2 + AlgorithmId_ALGORITHM_ID_SCHNORR_SECP256K1 AlgorithmId = 3 + AlgorithmId_ALGORITHM_ID_STATIC_DH_SECP256K1 AlgorithmId = 4 + AlgorithmId_ALGORITHM_ID_HASH_SHA256 AlgorithmId = 5 + AlgorithmId_ALGORITHM_ID_TLS AlgorithmId = 6 + AlgorithmId_ALGORITHM_ID_ED25519 AlgorithmId = 7 + AlgorithmId_ALGORITHM_ID_SECP256K1 AlgorithmId = 8 + AlgorithmId_ALGORITHM_ID_GROTH20_BLS12_381 AlgorithmId = 9 + AlgorithmId_ALGORITHM_ID_NIDKG_GROTH20_BLS12_381 AlgorithmId = 10 + AlgorithmId_ALGORITHM_ID_ECDSA_P256 AlgorithmId = 11 + AlgorithmId_ALGORITHM_ID_ECDSA_SECP_256K1 AlgorithmId = 12 + AlgorithmId_ALGORITHM_ID_IC_CANISTER_SIGNATURE AlgorithmId = 13 + AlgorithmId_ALGORITHM_ID_RSA_SHA256 AlgorithmId = 14 + AlgorithmId_ALGORITHM_ID_THRESHOLD_ECDSA_SECP_256K1 AlgorithmId = 15 + AlgorithmId_ALGORITHM_ID_MEGA_SECP_256K1 AlgorithmId = 16 + AlgorithmId_ALGORITHM_ID_THRESHOLD_ECDSA_SECP_256R1 AlgorithmId = 17 + AlgorithmId_ALGORITHM_ID_THRESHOLD_SCHNORR_BIP340 AlgorithmId = 18 + AlgorithmId_ALGORITHM_ID_THRESHOLD_ED25519 AlgorithmId = 19 +) + +func (AlgorithmId) Descriptor() protoreflect.EnumDescriptor { + return file_subnet_proto_enumTypes[2].Descriptor() +} + +func (x AlgorithmId) Enum() *AlgorithmId { + p := new(AlgorithmId) + *p = x + return p +} + +// Deprecated: Use AlgorithmId.Descriptor instead. +func (AlgorithmId) EnumDescriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{2} +} + +func (x AlgorithmId) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +func (x AlgorithmId) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AlgorithmId) Type() protoreflect.EnumType { + return &file_subnet_proto_enumTypes[2] +} + +// Contains the initial DKG transcripts for the subnet and materials to construct a base CUP (i.e. +// a CUP with no dependencies on previous CUPs or blocks). Such CUP materials can be used to +// construct the genesis CUP or a recovery CUP in the event of a subnet stall. +type CatchUpPackageContents struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Initial non-interactive low-threshold DKG transcript + InitialNiDkgTranscriptLowThreshold *InitialNiDkgTranscriptRecord `protobuf:"bytes,1,opt,name=initial_ni_dkg_transcript_low_threshold,json=initialNiDkgTranscriptLowThreshold,proto3" json:"initial_ni_dkg_transcript_low_threshold,omitempty"` + // Initial non-interactive high-threshold DKG transcript + InitialNiDkgTranscriptHighThreshold *InitialNiDkgTranscriptRecord `protobuf:"bytes,2,opt,name=initial_ni_dkg_transcript_high_threshold,json=initialNiDkgTranscriptHighThreshold,proto3" json:"initial_ni_dkg_transcript_high_threshold,omitempty"` + // The blockchain height that the CUP should have + Height uint64 `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"` + // Block time for the CUP's block + Time uint64 `protobuf:"varint,4,opt,name=time,proto3" json:"time,omitempty"` + // The hash of the state that the subnet should use + StateHash []byte `protobuf:"bytes,5,opt,name=state_hash,json=stateHash,proto3" json:"state_hash,omitempty"` + // A uri from which data to replace the registry local store should be downloaded + RegistryStoreUri *RegistryStoreUri `protobuf:"bytes,6,opt,name=registry_store_uri,json=registryStoreUri,proto3" json:"registry_store_uri,omitempty"` + // / The initial ECDSA dealings for boot strapping target subnets. + EcdsaInitializations []*EcdsaInitialization `protobuf:"bytes,7,rep,name=ecdsa_initializations,json=ecdsaInitializations,proto3" json:"ecdsa_initializations,omitempty"` +} + +// Deprecated: Use CatchUpPackageContents.ProtoReflect.Descriptor instead. +func (*CatchUpPackageContents) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{3} +} + +func (x *CatchUpPackageContents) GetEcdsaInitializations() []*EcdsaInitialization { + if x != nil { + return x.EcdsaInitializations + } + return nil +} + +func (x *CatchUpPackageContents) GetHeight() uint64 { + if x != nil { + return x.Height + } + return 0 +} + +func (x *CatchUpPackageContents) GetInitialNiDkgTranscriptHighThreshold() *InitialNiDkgTranscriptRecord { + if x != nil { + return x.InitialNiDkgTranscriptHighThreshold + } + return nil +} + +func (x *CatchUpPackageContents) GetInitialNiDkgTranscriptLowThreshold() *InitialNiDkgTranscriptRecord { + if x != nil { + return x.InitialNiDkgTranscriptLowThreshold + } + return nil +} + +func (x *CatchUpPackageContents) GetRegistryStoreUri() *RegistryStoreUri { + if x != nil { + return x.RegistryStoreUri + } + return nil +} + +func (x *CatchUpPackageContents) GetStateHash() []byte { + if x != nil { + return x.StateHash + } + return nil +} + +func (x *CatchUpPackageContents) GetTime() uint64 { + if x != nil { + return x.Time + } + return 0 +} + +func (*CatchUpPackageContents) ProtoMessage() {} + +func (x *CatchUpPackageContents) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[3] + 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) +} + +func (x *CatchUpPackageContents) Reset() { + *x = CatchUpPackageContents{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CatchUpPackageContents) String() string { + return protoimpl.X.MessageStringOf(x) +} + +// Per-subnet chain key configuration +type ChainKeyConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Configurations for keys held by the subnet. + KeyConfigs []*KeyConfig `protobuf:"bytes,1,rep,name=key_configs,json=keyConfigs,proto3" json:"key_configs,omitempty"` + // Signature requests will timeout after the given number of nano seconds. + SignatureRequestTimeoutNs *uint64 `protobuf:"varint,2,opt,name=signature_request_timeout_ns,json=signatureRequestTimeoutNs,proto3,oneof" json:"signature_request_timeout_ns,omitempty"` + // Key rotation period of a single node in milliseconds. + // If none is specified key rotation is disabled. + IdkgKeyRotationPeriodMs *uint64 `protobuf:"varint,3,opt,name=idkg_key_rotation_period_ms,json=idkgKeyRotationPeriodMs,proto3,oneof" json:"idkg_key_rotation_period_ms,omitempty"` +} + +// Deprecated: Use ChainKeyConfig.ProtoReflect.Descriptor instead. +func (*ChainKeyConfig) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{29} +} + +func (x *ChainKeyConfig) GetIdkgKeyRotationPeriodMs() uint64 { + if x != nil && x.IdkgKeyRotationPeriodMs != nil { + return *x.IdkgKeyRotationPeriodMs + } + return 0 +} + +func (x *ChainKeyConfig) GetKeyConfigs() []*KeyConfig { + if x != nil { + return x.KeyConfigs + } + return nil +} + +func (x *ChainKeyConfig) GetSignatureRequestTimeoutNs() uint64 { + if x != nil && x.SignatureRequestTimeoutNs != nil { + return *x.SignatureRequestTimeoutNs + } + return 0 +} + +func (*ChainKeyConfig) ProtoMessage() {} + +func (x *ChainKeyConfig) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[29] + 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) +} + +func (x *ChainKeyConfig) Reset() { + *x = ChainKeyConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChainKeyConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +type DealerTuple struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DealerId *NodeId `protobuf:"bytes,1,opt,name=dealer_id,json=dealerId,proto3" json:"dealer_id,omitempty"` + DealerIndex uint32 `protobuf:"varint,2,opt,name=dealer_index,json=dealerIndex,proto3" json:"dealer_index,omitempty"` +} + +// Deprecated: Use DealerTuple.ProtoReflect.Descriptor instead. +func (*DealerTuple) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{14} +} + +func (x *DealerTuple) GetDealerId() *NodeId { + if x != nil { + return x.DealerId + } + return nil +} + +func (x *DealerTuple) GetDealerIndex() uint32 { + if x != nil { + return x.DealerIndex + } + return 0 +} + +func (*DealerTuple) ProtoMessage() {} + +func (x *DealerTuple) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[14] + 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) +} + +func (x *DealerTuple) Reset() { + *x = DealerTuple{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DealerTuple) String() string { + return protoimpl.X.MessageStringOf(x) +} + +// Per subnet ECDSA configuration +// +// Deprecated; please use ChainKeyConfig instead. +type EcdsaConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Number of quadruples to create in advance. + QuadruplesToCreateInAdvance uint32 `protobuf:"varint,1,opt,name=quadruples_to_create_in_advance,json=quadruplesToCreateInAdvance,proto3" json:"quadruples_to_create_in_advance,omitempty"` + // Identifiers for threshold ECDSA keys held by the subnet. + KeyIds []*EcdsaKeyId `protobuf:"bytes,3,rep,name=key_ids,json=keyIds,proto3" json:"key_ids,omitempty"` + // The maximum number of signature requests that can be enqueued at once. + MaxQueueSize uint32 `protobuf:"varint,4,opt,name=max_queue_size,json=maxQueueSize,proto3" json:"max_queue_size,omitempty"` + // Signature requests will timeout after the given number of nano seconds. + SignatureRequestTimeoutNs *uint64 `protobuf:"varint,5,opt,name=signature_request_timeout_ns,json=signatureRequestTimeoutNs,proto3,oneof" json:"signature_request_timeout_ns,omitempty"` + // Key rotation period of a single node in milliseconds. + // If none is specified key rotation is disabled. + IdkgKeyRotationPeriodMs *uint64 `protobuf:"varint,6,opt,name=idkg_key_rotation_period_ms,json=idkgKeyRotationPeriodMs,proto3,oneof" json:"idkg_key_rotation_period_ms,omitempty"` +} + +// Deprecated: Use EcdsaConfig.ProtoReflect.Descriptor instead. +func (*EcdsaConfig) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{25} +} + +func (x *EcdsaConfig) GetIdkgKeyRotationPeriodMs() uint64 { + if x != nil && x.IdkgKeyRotationPeriodMs != nil { + return *x.IdkgKeyRotationPeriodMs + } + return 0 +} + +func (x *EcdsaConfig) GetKeyIds() []*EcdsaKeyId { + if x != nil { + return x.KeyIds + } + return nil +} + +func (x *EcdsaConfig) GetMaxQueueSize() uint32 { + if x != nil { + return x.MaxQueueSize + } + return 0 +} + +func (x *EcdsaConfig) GetQuadruplesToCreateInAdvance() uint32 { + if x != nil { + return x.QuadruplesToCreateInAdvance + } + return 0 +} + +func (x *EcdsaConfig) GetSignatureRequestTimeoutNs() uint64 { + if x != nil && x.SignatureRequestTimeoutNs != nil { + return *x.SignatureRequestTimeoutNs + } + return 0 +} + +func (*EcdsaConfig) ProtoMessage() {} + +func (x *EcdsaConfig) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[25] + 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) +} + +func (x *EcdsaConfig) Reset() { + *x = EcdsaConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EcdsaConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +// Types of curves that can be used for ECDSA signatures. +type EcdsaCurve int32 + +const ( + EcdsaCurve_ECDSA_CURVE_UNSPECIFIED EcdsaCurve = 0 + EcdsaCurve_ECDSA_CURVE_SECP256K1 EcdsaCurve = 1 +) + +func (EcdsaCurve) Descriptor() protoreflect.EnumDescriptor { + return file_subnet_proto_enumTypes[0].Descriptor() +} + +func (x EcdsaCurve) Enum() *EcdsaCurve { + p := new(EcdsaCurve) + *p = x + return p +} + +// Deprecated: Use EcdsaCurve.Descriptor instead. +func (EcdsaCurve) EnumDescriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{0} +} + +func (x EcdsaCurve) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +func (x EcdsaCurve) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (EcdsaCurve) Type() protoreflect.EnumType { + return &file_subnet_proto_enumTypes[0] +} + +type EcdsaInitialization struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + KeyId *EcdsaKeyId `protobuf:"bytes,1,opt,name=key_id,json=keyId,proto3" json:"key_id,omitempty"` + Dealings *InitialIDkgDealings `protobuf:"bytes,2,opt,name=dealings,proto3" json:"dealings,omitempty"` +} + +// Deprecated: Use EcdsaInitialization.ProtoReflect.Descriptor instead. +func (*EcdsaInitialization) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{2} +} + +func (x *EcdsaInitialization) GetDealings() *InitialIDkgDealings { + if x != nil { + return x.Dealings + } + return nil +} + +func (x *EcdsaInitialization) GetKeyId() *EcdsaKeyId { + if x != nil { + return x.KeyId + } + return nil +} + +func (*EcdsaInitialization) ProtoMessage() {} + +func (x *EcdsaInitialization) ProtoReflect() protoreflect.Message { + mi := &file_subnet_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) +} + +func (x *EcdsaInitialization) Reset() { + *x = EcdsaInitialization{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EcdsaInitialization) String() string { + return protoimpl.X.MessageStringOf(x) +} + +type EcdsaKeyId struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Curve EcdsaCurve `protobuf:"varint,1,opt,name=curve,proto3,enum=registry.subnet.v1.EcdsaCurve" json:"curve,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` +} + +// Deprecated: Use EcdsaKeyId.ProtoReflect.Descriptor instead. +func (*EcdsaKeyId) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{1} +} + +func (x *EcdsaKeyId) GetCurve() EcdsaCurve { + if x != nil { + return x.Curve + } + return EcdsaCurve_ECDSA_CURVE_UNSPECIFIED +} + +func (x *EcdsaKeyId) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (*EcdsaKeyId) ProtoMessage() {} + +func (x *EcdsaKeyId) ProtoReflect() protoreflect.Message { + mi := &file_subnet_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) +} + +func (x *EcdsaKeyId) Reset() { + *x = EcdsaKeyId{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EcdsaKeyId) String() string { + return protoimpl.X.MessageStringOf(x) +} + +type ExtendedDerivationPath struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Caller *PrincipalId `protobuf:"bytes,1,opt,name=caller,proto3" json:"caller,omitempty"` + DerivationPath [][]byte `protobuf:"bytes,2,rep,name=derivation_path,json=derivationPath,proto3" json:"derivation_path,omitempty"` +} + +// Deprecated: Use ExtendedDerivationPath.ProtoReflect.Descriptor instead. +func (*ExtendedDerivationPath) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{22} +} + +func (x *ExtendedDerivationPath) GetCaller() *PrincipalId { + if x != nil { + return x.Caller + } + return nil +} + +func (x *ExtendedDerivationPath) GetDerivationPath() [][]byte { + if x != nil { + return x.DerivationPath + } + return nil +} + +func (*ExtendedDerivationPath) ProtoMessage() {} + +func (x *ExtendedDerivationPath) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[22] + 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) +} + +func (x *ExtendedDerivationPath) Reset() { + *x = ExtendedDerivationPath{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExtendedDerivationPath) String() string { + return protoimpl.X.MessageStringOf(x) +} + +// Per subnet P2P configuration +// Note: protoc is mangling the name P2PConfig to P2pConfig +type GossipConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // max outstanding request per peer MIN/DEFAULT/MAX 1/20/200 + MaxArtifactStreamsPerPeer uint32 `protobuf:"varint,1,opt,name=max_artifact_streams_per_peer,json=maxArtifactStreamsPerPeer,proto3" json:"max_artifact_streams_per_peer,omitempty"` + // timeout for a outstanding request 3_000/15_000/180_000 + MaxChunkWaitMs uint32 `protobuf:"varint,2,opt,name=max_chunk_wait_ms,json=maxChunkWaitMs,proto3" json:"max_chunk_wait_ms,omitempty"` + // max duplicate requests in underutilized networks 1/28/6000 + MaxDuplicity uint32 `protobuf:"varint,3,opt,name=max_duplicity,json=maxDuplicity,proto3" json:"max_duplicity,omitempty"` + // maximum chunk size supported on this subnet 1024/4096/131_072 + MaxChunkSize uint32 `protobuf:"varint,4,opt,name=max_chunk_size,json=maxChunkSize,proto3" json:"max_chunk_size,omitempty"` + // history size for receive check 1_000/5_000/30_000 + ReceiveCheckCacheSize uint32 `protobuf:"varint,5,opt,name=receive_check_cache_size,json=receiveCheckCacheSize,proto3" json:"receive_check_cache_size,omitempty"` + // period for re evaluating the priority function. 1_000/3_000/30_000 + PfnEvaluationPeriodMs uint32 `protobuf:"varint,6,opt,name=pfn_evaluation_period_ms,json=pfnEvaluationPeriodMs,proto3" json:"pfn_evaluation_period_ms,omitempty"` + // period for polling the registry for updates 1_000/3_000/30_000 + RegistryPollPeriodMs uint32 `protobuf:"varint,7,opt,name=registry_poll_period_ms,json=registryPollPeriodMs,proto3" json:"registry_poll_period_ms,omitempty"` + // period for sending a retransmission request + RetransmissionRequestMs uint32 `protobuf:"varint,8,opt,name=retransmission_request_ms,json=retransmissionRequestMs,proto3" json:"retransmission_request_ms,omitempty"` // config for advert distribution. +} + +// Deprecated: Use GossipConfig.ProtoReflect.Descriptor instead. +func (*GossipConfig) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{23} +} + +func (x *GossipConfig) GetMaxArtifactStreamsPerPeer() uint32 { + if x != nil { + return x.MaxArtifactStreamsPerPeer + } + return 0 +} + +func (x *GossipConfig) GetMaxChunkSize() uint32 { + if x != nil { + return x.MaxChunkSize + } + return 0 +} + +func (x *GossipConfig) GetMaxChunkWaitMs() uint32 { + if x != nil { + return x.MaxChunkWaitMs + } + return 0 +} + +func (x *GossipConfig) GetMaxDuplicity() uint32 { + if x != nil { + return x.MaxDuplicity + } + return 0 +} + +func (x *GossipConfig) GetPfnEvaluationPeriodMs() uint32 { + if x != nil { + return x.PfnEvaluationPeriodMs + } + return 0 +} + +func (x *GossipConfig) GetReceiveCheckCacheSize() uint32 { + if x != nil { + return x.ReceiveCheckCacheSize + } + return 0 +} + +func (x *GossipConfig) GetRegistryPollPeriodMs() uint32 { + if x != nil { + return x.RegistryPollPeriodMs + } + return 0 +} + +func (x *GossipConfig) GetRetransmissionRequestMs() uint32 { + if x != nil { + return x.RetransmissionRequestMs + } + return 0 +} + +func (*GossipConfig) ProtoMessage() {} + +func (x *GossipConfig) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[23] + 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) +} + +func (x *GossipConfig) Reset() { + *x = GossipConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GossipConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +type IDkgComplaint struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TranscriptId *IDkgTranscriptId `protobuf:"bytes,1,opt,name=transcript_id,json=transcriptId,proto3" json:"transcript_id,omitempty"` + Dealer *NodeId `protobuf:"bytes,2,opt,name=dealer,proto3" json:"dealer,omitempty"` + RawComplaint []byte `protobuf:"bytes,3,opt,name=raw_complaint,json=rawComplaint,proto3" json:"raw_complaint,omitempty"` +} + +// Deprecated: Use IDkgComplaint.ProtoReflect.Descriptor instead. +func (*IDkgComplaint) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{20} +} + +func (x *IDkgComplaint) GetDealer() *NodeId { + if x != nil { + return x.Dealer + } + return nil +} + +func (x *IDkgComplaint) GetRawComplaint() []byte { + if x != nil { + return x.RawComplaint + } + return nil +} + +func (x *IDkgComplaint) GetTranscriptId() *IDkgTranscriptId { + if x != nil { + return x.TranscriptId + } + return nil +} + +func (*IDkgComplaint) ProtoMessage() {} + +func (x *IDkgComplaint) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[20] + 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) +} + +func (x *IDkgComplaint) Reset() { + *x = IDkgComplaint{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IDkgComplaint) String() string { + return protoimpl.X.MessageStringOf(x) +} + +type IDkgDealing struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TranscriptId *IDkgTranscriptId `protobuf:"bytes,1,opt,name=transcript_id,json=transcriptId,proto3" json:"transcript_id,omitempty"` + RawDealing []byte `protobuf:"bytes,2,opt,name=raw_dealing,json=rawDealing,proto3" json:"raw_dealing,omitempty"` // serialised InternalRawDealing +} + +// Deprecated: Use IDkgDealing.ProtoReflect.Descriptor instead. +func (*IDkgDealing) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{17} +} + +func (x *IDkgDealing) GetRawDealing() []byte { + if x != nil { + return x.RawDealing + } + return nil +} + +func (x *IDkgDealing) GetTranscriptId() *IDkgTranscriptId { + if x != nil { + return x.TranscriptId + } + return nil +} + +func (*IDkgDealing) ProtoMessage() {} + +func (x *IDkgDealing) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[17] + 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) +} + +func (x *IDkgDealing) Reset() { + *x = IDkgDealing{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IDkgDealing) String() string { + return protoimpl.X.MessageStringOf(x) +} + +type IDkgOpening struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TranscriptId *IDkgTranscriptId `protobuf:"bytes,1,opt,name=transcript_id,json=transcriptId,proto3" json:"transcript_id,omitempty"` + Dealer *NodeId `protobuf:"bytes,2,opt,name=dealer,proto3" json:"dealer,omitempty"` + RawOpening []byte `protobuf:"bytes,3,opt,name=raw_opening,json=rawOpening,proto3" json:"raw_opening,omitempty"` +} + +// Deprecated: Use IDkgOpening.ProtoReflect.Descriptor instead. +func (*IDkgOpening) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{21} +} + +func (x *IDkgOpening) GetDealer() *NodeId { + if x != nil { + return x.Dealer + } + return nil +} + +func (x *IDkgOpening) GetRawOpening() []byte { + if x != nil { + return x.RawOpening + } + return nil +} + +func (x *IDkgOpening) GetTranscriptId() *IDkgTranscriptId { + if x != nil { + return x.TranscriptId + } + return nil +} + +func (*IDkgOpening) ProtoMessage() {} + +func (x *IDkgOpening) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[21] + 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) +} + +func (x *IDkgOpening) Reset() { + *x = IDkgOpening{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IDkgOpening) String() string { + return protoimpl.X.MessageStringOf(x) +} + +type IDkgSignedDealingTuple struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Dealer *NodeId `protobuf:"bytes,1,opt,name=dealer,proto3" json:"dealer,omitempty"` + Dealing *IDkgDealing `protobuf:"bytes,2,opt,name=dealing,proto3" json:"dealing,omitempty"` + Signature []byte `protobuf:"bytes,3,opt,name=signature,proto3" json:"signature,omitempty"` +} + +// Deprecated: Use IDkgSignedDealingTuple.ProtoReflect.Descriptor instead. +func (*IDkgSignedDealingTuple) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{18} +} + +func (x *IDkgSignedDealingTuple) GetDealer() *NodeId { + if x != nil { + return x.Dealer + } + return nil +} + +func (x *IDkgSignedDealingTuple) GetDealing() *IDkgDealing { + if x != nil { + return x.Dealing + } + return nil +} + +func (x *IDkgSignedDealingTuple) GetSignature() []byte { + if x != nil { + return x.Signature + } + return nil +} + +func (*IDkgSignedDealingTuple) ProtoMessage() {} + +func (x *IDkgSignedDealingTuple) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[18] + 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) +} + +func (x *IDkgSignedDealingTuple) Reset() { + *x = IDkgSignedDealingTuple{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IDkgSignedDealingTuple) String() string { + return protoimpl.X.MessageStringOf(x) +} + +type IDkgTranscript struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TranscriptId *IDkgTranscriptId `protobuf:"bytes,1,opt,name=transcript_id,json=transcriptId,proto3" json:"transcript_id,omitempty"` + Dealers []*NodeId `protobuf:"bytes,2,rep,name=dealers,proto3" json:"dealers,omitempty"` + Receivers []*NodeId `protobuf:"bytes,3,rep,name=receivers,proto3" json:"receivers,omitempty"` + RegistryVersion uint64 `protobuf:"varint,4,opt,name=registry_version,json=registryVersion,proto3" json:"registry_version,omitempty"` + VerifiedDealings []*VerifiedIDkgDealing `protobuf:"bytes,5,rep,name=verified_dealings,json=verifiedDealings,proto3" json:"verified_dealings,omitempty"` + TranscriptType []byte `protobuf:"bytes,6,opt,name=transcript_type,json=transcriptType,proto3" json:"transcript_type,omitempty"` // CBOR serialized IDkgTranscriptType + AlgorithmId AlgorithmId `protobuf:"varint,7,opt,name=algorithm_id,json=algorithmId,proto3,enum=registry.subnet.v1.AlgorithmId" json:"algorithm_id,omitempty"` + RawTranscript []byte `protobuf:"bytes,8,opt,name=raw_transcript,json=rawTranscript,proto3" json:"raw_transcript,omitempty"` // serialised InternalRawTranscript +} + +// Deprecated: Use IDkgTranscript.ProtoReflect.Descriptor instead. +func (*IDkgTranscript) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{13} +} + +func (x *IDkgTranscript) GetAlgorithmId() AlgorithmId { + if x != nil { + return x.AlgorithmId + } + return AlgorithmId_ALGORITHM_ID_UNSPECIFIED +} + +func (x *IDkgTranscript) GetDealers() []*NodeId { + if x != nil { + return x.Dealers + } + return nil +} + +func (x *IDkgTranscript) GetRawTranscript() []byte { + if x != nil { + return x.RawTranscript + } + return nil +} + +func (x *IDkgTranscript) GetReceivers() []*NodeId { + if x != nil { + return x.Receivers + } + return nil +} + +func (x *IDkgTranscript) GetRegistryVersion() uint64 { + if x != nil { + return x.RegistryVersion + } + return 0 +} + +func (x *IDkgTranscript) GetTranscriptId() *IDkgTranscriptId { + if x != nil { + return x.TranscriptId + } + return nil +} + +func (x *IDkgTranscript) GetTranscriptType() []byte { + if x != nil { + return x.TranscriptType + } + return nil +} + +func (x *IDkgTranscript) GetVerifiedDealings() []*VerifiedIDkgDealing { + if x != nil { + return x.VerifiedDealings + } + return nil +} + +func (*IDkgTranscript) ProtoMessage() {} + +func (x *IDkgTranscript) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[13] + 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) +} + +func (x *IDkgTranscript) Reset() { + *x = IDkgTranscript{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IDkgTranscript) String() string { + return protoimpl.X.MessageStringOf(x) +} + +type IDkgTranscriptId struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + SubnetId *SubnetId `protobuf:"bytes,2,opt,name=subnet_id,json=subnetId,proto3" json:"subnet_id,omitempty"` + SourceHeight uint64 `protobuf:"varint,3,opt,name=source_height,json=sourceHeight,proto3" json:"source_height,omitempty"` +} + +// Deprecated: Use IDkgTranscriptId.ProtoReflect.Descriptor instead. +func (*IDkgTranscriptId) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{10} +} + +func (x *IDkgTranscriptId) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *IDkgTranscriptId) GetSourceHeight() uint64 { + if x != nil { + return x.SourceHeight + } + return 0 +} + +func (x *IDkgTranscriptId) GetSubnetId() *SubnetId { + if x != nil { + return x.SubnetId + } + return nil +} + +func (*IDkgTranscriptId) ProtoMessage() {} + +func (x *IDkgTranscriptId) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[10] + 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) +} + +func (x *IDkgTranscriptId) Reset() { + *x = IDkgTranscriptId{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IDkgTranscriptId) String() string { + return protoimpl.X.MessageStringOf(x) +} + +type IDkgTranscriptOperation int32 + +const ( + IDkgTranscriptOperation_I_DKG_TRANSCRIPT_OPERATION_UNSPECIFIED IDkgTranscriptOperation = 0 + IDkgTranscriptOperation_I_DKG_TRANSCRIPT_OPERATION_RANDOM IDkgTranscriptOperation = 1 + IDkgTranscriptOperation_I_DKG_TRANSCRIPT_OPERATION_RESHARE_OF_MASKED IDkgTranscriptOperation = 2 + IDkgTranscriptOperation_I_DKG_TRANSCRIPT_OPERATION_RESHARE_OF_UNMASKED IDkgTranscriptOperation = 3 + IDkgTranscriptOperation_I_DKG_TRANSCRIPT_OPERATION_UNMASKED_TIMES_MASKED IDkgTranscriptOperation = 4 + IDkgTranscriptOperation_I_DKG_TRANSCRIPT_OPERATION_RANDOM_UNMASKED IDkgTranscriptOperation = 5 +) + +func (IDkgTranscriptOperation) Descriptor() protoreflect.EnumDescriptor { + return file_subnet_proto_enumTypes[3].Descriptor() +} + +func (x IDkgTranscriptOperation) Enum() *IDkgTranscriptOperation { + p := new(IDkgTranscriptOperation) + *p = x + return p +} + +// Deprecated: Use IDkgTranscriptOperation.Descriptor instead. +func (IDkgTranscriptOperation) EnumDescriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{3} +} + +func (x IDkgTranscriptOperation) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +func (x IDkgTranscriptOperation) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (IDkgTranscriptOperation) Type() protoreflect.EnumType { + return &file_subnet_proto_enumTypes[3] +} + +type IDkgTranscriptParams struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TranscriptId *IDkgTranscriptId `protobuf:"bytes,1,opt,name=transcript_id,json=transcriptId,proto3" json:"transcript_id,omitempty"` + Dealers []*DealerTuple `protobuf:"bytes,2,rep,name=dealers,proto3" json:"dealers,omitempty"` + Receivers []*NodeId `protobuf:"bytes,3,rep,name=receivers,proto3" json:"receivers,omitempty"` + RegistryVersion uint64 `protobuf:"varint,4,opt,name=registry_version,json=registryVersion,proto3" json:"registry_version,omitempty"` + AlgorithmId AlgorithmId `protobuf:"varint,5,opt,name=algorithm_id,json=algorithmId,proto3,enum=registry.subnet.v1.AlgorithmId" json:"algorithm_id,omitempty"` + IdkgTranscriptOperation IDkgTranscriptOperation `protobuf:"varint,6,opt,name=idkg_transcript_operation,json=idkgTranscriptOperation,proto3,enum=registry.subnet.v1.IDkgTranscriptOperation" json:"idkg_transcript_operation,omitempty"` + IdkgTranscriptOperationArgs []*IDkgTranscript `protobuf:"bytes,7,rep,name=idkg_transcript_operation_args,json=idkgTranscriptOperationArgs,proto3" json:"idkg_transcript_operation_args,omitempty"` // 0, 1, or 2 IDkgTranscripts +} + +// Deprecated: Use IDkgTranscriptParams.ProtoReflect.Descriptor instead. +func (*IDkgTranscriptParams) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{16} +} + +func (x *IDkgTranscriptParams) GetAlgorithmId() AlgorithmId { + if x != nil { + return x.AlgorithmId + } + return AlgorithmId_ALGORITHM_ID_UNSPECIFIED +} + +func (x *IDkgTranscriptParams) GetDealers() []*DealerTuple { + if x != nil { + return x.Dealers + } + return nil +} + +func (x *IDkgTranscriptParams) GetIdkgTranscriptOperation() IDkgTranscriptOperation { + if x != nil { + return x.IdkgTranscriptOperation + } + return IDkgTranscriptOperation_I_DKG_TRANSCRIPT_OPERATION_UNSPECIFIED +} + +func (x *IDkgTranscriptParams) GetIdkgTranscriptOperationArgs() []*IDkgTranscript { + if x != nil { + return x.IdkgTranscriptOperationArgs + } + return nil +} + +func (x *IDkgTranscriptParams) GetReceivers() []*NodeId { + if x != nil { + return x.Receivers + } + return nil +} + +func (x *IDkgTranscriptParams) GetRegistryVersion() uint64 { + if x != nil { + return x.RegistryVersion + } + return 0 +} + +func (x *IDkgTranscriptParams) GetTranscriptId() *IDkgTranscriptId { + if x != nil { + return x.TranscriptId + } + return nil +} + +func (*IDkgTranscriptParams) ProtoMessage() {} + +func (x *IDkgTranscriptParams) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[16] + 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) +} + +func (x *IDkgTranscriptParams) Reset() { + *x = IDkgTranscriptParams{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IDkgTranscriptParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +type InitialIDkgDealings struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Version uint32 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"` + Params *IDkgTranscriptParams `protobuf:"bytes,2,opt,name=params,proto3" json:"params,omitempty"` + SignedDealings []*IDkgSignedDealingTuple `protobuf:"bytes,4,rep,name=signed_dealings,json=signedDealings,proto3" json:"signed_dealings,omitempty"` +} + +// Deprecated: Use InitialIDkgDealings.ProtoReflect.Descriptor instead. +func (*InitialIDkgDealings) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{19} +} + +func (x *InitialIDkgDealings) GetParams() *IDkgTranscriptParams { + if x != nil { + return x.Params + } + return nil +} + +func (x *InitialIDkgDealings) GetSignedDealings() []*IDkgSignedDealingTuple { + if x != nil { + return x.SignedDealings + } + return nil +} + +func (x *InitialIDkgDealings) GetVersion() uint32 { + if x != nil { + return x.Version + } + return 0 +} + +func (*InitialIDkgDealings) ProtoMessage() {} + +func (x *InitialIDkgDealings) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[19] + 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) +} + +func (x *InitialIDkgDealings) Reset() { + *x = InitialIDkgDealings{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InitialIDkgDealings) String() string { + return protoimpl.X.MessageStringOf(x) +} + +// Initial non-interactive DKG transcript record +type InitialNiDkgTranscriptRecord struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id *NiDkgId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Threshold uint32 `protobuf:"varint,2,opt,name=threshold,proto3" json:"threshold,omitempty"` + Committee [][]byte `protobuf:"bytes,3,rep,name=committee,proto3" json:"committee,omitempty"` + RegistryVersion uint64 `protobuf:"varint,4,opt,name=registry_version,json=registryVersion,proto3" json:"registry_version,omitempty"` + InternalCspTranscript []byte `protobuf:"bytes,5,opt,name=internal_csp_transcript,json=internalCspTranscript,proto3" json:"internal_csp_transcript,omitempty"` +} + +// Deprecated: Use InitialNiDkgTranscriptRecord.ProtoReflect.Descriptor instead. +func (*InitialNiDkgTranscriptRecord) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{7} +} + +func (x *InitialNiDkgTranscriptRecord) GetCommittee() [][]byte { + if x != nil { + return x.Committee + } + return nil +} + +func (x *InitialNiDkgTranscriptRecord) GetId() *NiDkgId { + if x != nil { + return x.Id + } + return nil +} + +func (x *InitialNiDkgTranscriptRecord) GetInternalCspTranscript() []byte { + if x != nil { + return x.InternalCspTranscript + } + return nil +} + +func (x *InitialNiDkgTranscriptRecord) GetRegistryVersion() uint64 { + if x != nil { + return x.RegistryVersion + } + return 0 +} + +func (x *InitialNiDkgTranscriptRecord) GetThreshold() uint32 { + if x != nil { + return x.Threshold + } + return 0 +} + +func (*InitialNiDkgTranscriptRecord) ProtoMessage() {} + +func (x *InitialNiDkgTranscriptRecord) ProtoReflect() protoreflect.Message { + mi := &file_subnet_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) +} + +func (x *InitialNiDkgTranscriptRecord) Reset() { + *x = InitialNiDkgTranscriptRecord{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InitialNiDkgTranscriptRecord) String() string { + return protoimpl.X.MessageStringOf(x) +} + +type KeyConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The key's identifier. + KeyId *MasterPublicKeyId `protobuf:"bytes,1,opt,name=key_id,json=keyId,proto3,oneof" json:"key_id,omitempty"` + // Number of pre-signatures to create in advance. + PreSignaturesToCreateInAdvance *uint32 `protobuf:"varint,3,opt,name=pre_signatures_to_create_in_advance,json=preSignaturesToCreateInAdvance,proto3,oneof" json:"pre_signatures_to_create_in_advance,omitempty"` + // The maximum number of signature requests that can be enqueued at once. + MaxQueueSize *uint32 `protobuf:"varint,4,opt,name=max_queue_size,json=maxQueueSize,proto3,oneof" json:"max_queue_size,omitempty"` +} + +// Deprecated: Use KeyConfig.ProtoReflect.Descriptor instead. +func (*KeyConfig) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{28} +} + +func (x *KeyConfig) GetKeyId() *MasterPublicKeyId { + if x != nil { + return x.KeyId + } + return nil +} + +func (x *KeyConfig) GetMaxQueueSize() uint32 { + if x != nil && x.MaxQueueSize != nil { + return *x.MaxQueueSize + } + return 0 +} + +func (x *KeyConfig) GetPreSignaturesToCreateInAdvance() uint32 { + if x != nil && x.PreSignaturesToCreateInAdvance != nil { + return *x.PreSignaturesToCreateInAdvance + } + return 0 +} + +func (*KeyConfig) ProtoMessage() {} + +func (x *KeyConfig) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[28] + 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) +} + +func (x *KeyConfig) Reset() { + *x = KeyConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KeyConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +type MasterPublicKeyId struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to KeyId: + // + // *MasterPublicKeyId_Ecdsa + // *MasterPublicKeyId_Schnorr + KeyId isMasterPublicKeyId_KeyId `protobuf_oneof:"key_id"` +} + +// Deprecated: Use MasterPublicKeyId.ProtoReflect.Descriptor instead. +func (*MasterPublicKeyId) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{27} +} + +func (x *MasterPublicKeyId) GetEcdsa() *EcdsaKeyId { + if x, ok := x.GetKeyId().(*MasterPublicKeyId_Ecdsa); ok { + return x.Ecdsa + } + return nil +} + +func (m *MasterPublicKeyId) GetKeyId() isMasterPublicKeyId_KeyId { + if m != nil { + return m.KeyId + } + return nil +} + +func (x *MasterPublicKeyId) GetSchnorr() *SchnorrKeyId { + if x, ok := x.GetKeyId().(*MasterPublicKeyId_Schnorr); ok { + return x.Schnorr + } + return nil +} + +func (*MasterPublicKeyId) ProtoMessage() {} + +func (x *MasterPublicKeyId) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[27] + 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) +} + +func (x *MasterPublicKeyId) Reset() { + *x = MasterPublicKeyId{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MasterPublicKeyId) String() string { + return protoimpl.X.MessageStringOf(x) +} + +type MasterPublicKeyId_Ecdsa struct { + Ecdsa *EcdsaKeyId `protobuf:"bytes,1,opt,name=ecdsa,proto3,oneof"` +} + +func (*MasterPublicKeyId_Ecdsa) isMasterPublicKeyId_KeyId() {} + +type MasterPublicKeyId_Schnorr struct { + Schnorr *SchnorrKeyId `protobuf:"bytes,2,opt,name=schnorr,proto3,oneof"` +} + +func (*MasterPublicKeyId_Schnorr) isMasterPublicKeyId_KeyId() {} + +// A non-interactive distributed key generation (NI-DKG) ID. +type NiDkgId struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + StartBlockHeight uint64 `protobuf:"varint,1,opt,name=start_block_height,json=startBlockHeight,proto3" json:"start_block_height,omitempty"` + DealerSubnet []byte `protobuf:"bytes,2,opt,name=dealer_subnet,json=dealerSubnet,proto3" json:"dealer_subnet,omitempty"` + DkgTag NiDkgTag `protobuf:"varint,4,opt,name=dkg_tag,json=dkgTag,proto3,enum=registry.subnet.v1.NiDkgTag" json:"dkg_tag,omitempty"` + RemoteTargetId *wrapperspb.BytesValue `protobuf:"bytes,5,opt,name=remote_target_id,json=remoteTargetId,proto3" json:"remote_target_id,omitempty"` +} + +// Deprecated: Use NiDkgId.ProtoReflect.Descriptor instead. +func (*NiDkgId) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{6} +} + +func (x *NiDkgId) GetDealerSubnet() []byte { + if x != nil { + return x.DealerSubnet + } + return nil +} + +func (x *NiDkgId) GetDkgTag() NiDkgTag { + if x != nil { + return x.DkgTag + } + return NiDkgTag_NI_DKG_TAG_UNSPECIFIED +} + +func (x *NiDkgId) GetRemoteTargetId() *wrapperspb.BytesValue { + if x != nil { + return x.RemoteTargetId + } + return nil +} + +func (x *NiDkgId) GetStartBlockHeight() uint64 { + if x != nil { + return x.StartBlockHeight + } + return 0 +} + +func (*NiDkgId) ProtoMessage() {} + +func (x *NiDkgId) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[6] + 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) +} + +func (x *NiDkgId) Reset() { + *x = NiDkgId{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NiDkgId) String() string { + return protoimpl.X.MessageStringOf(x) +} + +// A non-interactive distributed key generation (NI-DKG) tag. +type NiDkgTag int32 + +const ( + NiDkgTag_NI_DKG_TAG_UNSPECIFIED NiDkgTag = 0 + NiDkgTag_NI_DKG_TAG_LOW_THRESHOLD NiDkgTag = 1 + NiDkgTag_NI_DKG_TAG_HIGH_THRESHOLD NiDkgTag = 2 +) + +func (NiDkgTag) Descriptor() protoreflect.EnumDescriptor { + return file_subnet_proto_enumTypes[1].Descriptor() +} + +func (x NiDkgTag) Enum() *NiDkgTag { + p := new(NiDkgTag) + *p = x + return p +} + +// Deprecated: Use NiDkgTag.Descriptor instead. +func (NiDkgTag) EnumDescriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{1} +} + +func (x NiDkgTag) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +func (x NiDkgTag) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NiDkgTag) Type() protoreflect.EnumType { + return &file_subnet_proto_enumTypes[1] +} + +type NodeId struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PrincipalId *PrincipalId `protobuf:"bytes,1,opt,name=principal_id,json=principalId,proto3" json:"principal_id,omitempty"` +} + +// Deprecated: Use NodeId.ProtoReflect.Descriptor instead. +func (*NodeId) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{12} +} + +func (x *NodeId) GetPrincipalId() *PrincipalId { + if x != nil { + return x.PrincipalId + } + return nil +} + +func (*NodeId) ProtoMessage() {} + +func (x *NodeId) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[12] + 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) +} + +func (x *NodeId) Reset() { + *x = NodeId{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NodeId) String() string { + return protoimpl.X.MessageStringOf(x) +} + +type PrincipalId struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Raw []byte `protobuf:"bytes,1,opt,name=raw,proto3" json:"raw,omitempty"` +} + +// Deprecated: Use PrincipalId.ProtoReflect.Descriptor instead. +func (*PrincipalId) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{8} +} + +func (x *PrincipalId) GetRaw() []byte { + if x != nil { + return x.Raw + } + return nil +} + +func (*PrincipalId) ProtoMessage() {} + +func (x *PrincipalId) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[8] + 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) +} + +func (x *PrincipalId) Reset() { + *x = PrincipalId{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PrincipalId) String() string { + return protoimpl.X.MessageStringOf(x) +} + +type RegistryStoreUri struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // / The uri at which the registry store data should be retrieved. The data + // / must be provided as gzipped tar archive + Uri string `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"` + // / A SHA-256, hex encoded hash of the contents of the data stored at the + // / provided URI + Hash string `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"` + // / The registry version that should be used for the catch up package contents + RegistryVersion uint64 `protobuf:"varint,3,opt,name=registry_version,json=registryVersion,proto3" json:"registry_version,omitempty"` +} + +// Deprecated: Use RegistryStoreUri.ProtoReflect.Descriptor instead. +func (*RegistryStoreUri) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{4} +} + +func (x *RegistryStoreUri) GetHash() string { + if x != nil { + return x.Hash + } + return "" +} + +func (x *RegistryStoreUri) GetRegistryVersion() uint64 { + if x != nil { + return x.RegistryVersion + } + return 0 +} + +func (x *RegistryStoreUri) GetUri() string { + if x != nil { + return x.Uri + } + return "" +} + +func (*RegistryStoreUri) ProtoMessage() {} + +func (x *RegistryStoreUri) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[4] + 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) +} + +func (x *RegistryStoreUri) Reset() { + *x = RegistryStoreUri{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RegistryStoreUri) String() string { + return protoimpl.X.MessageStringOf(x) +} + +// Types of curves that can be used for Schnorr signatures. +type SchnorrAlgorithm int32 + +const ( + SchnorrAlgorithm_SCHNORR_ALGORITHM_UNSPECIFIED SchnorrAlgorithm = 0 + SchnorrAlgorithm_SCHNORR_ALGORITHM_BIP340SECP256K1 SchnorrAlgorithm = 1 + SchnorrAlgorithm_SCHNORR_ALGORITHM_ED25519 SchnorrAlgorithm = 2 +) + +func (SchnorrAlgorithm) Descriptor() protoreflect.EnumDescriptor { + return file_subnet_proto_enumTypes[5].Descriptor() +} + +func (x SchnorrAlgorithm) Enum() *SchnorrAlgorithm { + p := new(SchnorrAlgorithm) + *p = x + return p +} + +// Deprecated: Use SchnorrAlgorithm.Descriptor instead. +func (SchnorrAlgorithm) EnumDescriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{5} +} + +func (x SchnorrAlgorithm) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +func (x SchnorrAlgorithm) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SchnorrAlgorithm) Type() protoreflect.EnumType { + return &file_subnet_proto_enumTypes[5] +} + +type SchnorrKeyId struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Algorithm SchnorrAlgorithm `protobuf:"varint,1,opt,name=algorithm,proto3,enum=registry.subnet.v1.SchnorrAlgorithm" json:"algorithm,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` +} + +// Deprecated: Use SchnorrKeyId.ProtoReflect.Descriptor instead. +func (*SchnorrKeyId) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{26} +} + +func (x *SchnorrKeyId) GetAlgorithm() SchnorrAlgorithm { + if x != nil { + return x.Algorithm + } + return SchnorrAlgorithm_SCHNORR_ALGORITHM_UNSPECIFIED +} + +func (x *SchnorrKeyId) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (*SchnorrKeyId) ProtoMessage() {} + +func (x *SchnorrKeyId) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[26] + 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) +} + +func (x *SchnorrKeyId) Reset() { + *x = SchnorrKeyId{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchnorrKeyId) String() string { + return protoimpl.X.MessageStringOf(x) +} + +type SignatureTuple struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Signer *NodeId `protobuf:"bytes,1,opt,name=signer,proto3" json:"signer,omitempty"` + Signature []byte `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` +} + +// Deprecated: Use SignatureTuple.ProtoReflect.Descriptor instead. +func (*SignatureTuple) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{15} +} + +func (x *SignatureTuple) GetSignature() []byte { + if x != nil { + return x.Signature + } + return nil +} + +func (x *SignatureTuple) GetSigner() *NodeId { + if x != nil { + return x.Signer + } + return nil +} + +func (*SignatureTuple) ProtoMessage() {} + +func (x *SignatureTuple) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[15] + 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) +} + +func (x *SignatureTuple) Reset() { + *x = SignatureTuple{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SignatureTuple) String() string { + return protoimpl.X.MessageStringOf(x) +} + +type SubnetFeatures struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // This feature flag controls whether canister execution happens + // in sandboxed process or not. It is disabled by default. + CanisterSandboxing bool `protobuf:"varint,2,opt,name=canister_sandboxing,json=canisterSandboxing,proto3" json:"canister_sandboxing,omitempty"` + // This feature flag controls whether canisters of this subnet are capable of + // performing http(s) requests to the web2. + HttpRequests bool `protobuf:"varint,3,opt,name=http_requests,json=httpRequests,proto3" json:"http_requests,omitempty"` + // Status of the SEV-SNP feature. + SevEnabled *bool `protobuf:"varint,9,opt,name=sev_enabled,json=sevEnabled,proto3,oneof" json:"sev_enabled,omitempty"` +} + +// Deprecated: Use SubnetFeatures.ProtoReflect.Descriptor instead. +func (*SubnetFeatures) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{24} +} + +func (x *SubnetFeatures) GetCanisterSandboxing() bool { + if x != nil { + return x.CanisterSandboxing + } + return false +} + +func (x *SubnetFeatures) GetHttpRequests() bool { + if x != nil { + return x.HttpRequests + } + return false +} + +func (x *SubnetFeatures) GetSevEnabled() bool { + if x != nil && x.SevEnabled != nil { + return *x.SevEnabled + } + return false +} + +func (*SubnetFeatures) ProtoMessage() {} + +func (x *SubnetFeatures) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[24] + 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) +} + +func (x *SubnetFeatures) Reset() { + *x = SubnetFeatures{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubnetFeatures) String() string { + return protoimpl.X.MessageStringOf(x) +} + +type SubnetId struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PrincipalId *PrincipalId `protobuf:"bytes,1,opt,name=principal_id,json=principalId,proto3" json:"principal_id,omitempty"` +} + +// Deprecated: Use SubnetId.ProtoReflect.Descriptor instead. +func (*SubnetId) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{9} +} + +func (x *SubnetId) GetPrincipalId() *PrincipalId { + if x != nil { + return x.PrincipalId + } + return nil +} + +func (*SubnetId) ProtoMessage() {} + +func (x *SubnetId) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[9] + 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) +} + +func (x *SubnetId) Reset() { + *x = SubnetId{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubnetId) String() string { + return protoimpl.X.MessageStringOf(x) +} + +// Contains information pertaining to all subnets in the IC and their params. +type SubnetListRecord struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A list of subnet ids of all subnets present in this instance of the IC. + Subnets [][]byte `protobuf:"bytes,2,rep,name=subnets,proto3" json:"subnets,omitempty"` +} + +// Deprecated: Use SubnetListRecord.ProtoReflect.Descriptor instead. +func (*SubnetListRecord) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{5} +} + +func (x *SubnetListRecord) GetSubnets() [][]byte { + if x != nil { + return x.Subnets + } + return nil +} + +func (*SubnetListRecord) ProtoMessage() {} + +func (x *SubnetListRecord) ProtoReflect() protoreflect.Message { + mi := &file_subnet_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) +} + +func (x *SubnetListRecord) Reset() { + *x = SubnetListRecord{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubnetListRecord) String() string { + return protoimpl.X.MessageStringOf(x) +} + +// A subnet: A logical group of nodes that run consensus +type SubnetRecord struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Membership [][]byte `protobuf:"bytes,3,rep,name=membership,proto3" json:"membership,omitempty"` + // Maximum amount of bytes per message. This is a hard cap, which means + // ingress messages greater than the limit will be dropped. + MaxIngressBytesPerMessage uint64 `protobuf:"varint,5,opt,name=max_ingress_bytes_per_message,json=maxIngressBytesPerMessage,proto3" json:"max_ingress_bytes_per_message,omitempty"` + // Unit delay for blockmaker (in milliseconds). + UnitDelayMillis uint64 `protobuf:"varint,7,opt,name=unit_delay_millis,json=unitDelayMillis,proto3" json:"unit_delay_millis,omitempty"` + // Initial delay for notary (in milliseconds), to give time to rank-0 block + // propagation. + InitialNotaryDelayMillis uint64 `protobuf:"varint,8,opt,name=initial_notary_delay_millis,json=initialNotaryDelayMillis,proto3" json:"initial_notary_delay_millis,omitempty"` + // ID of the Replica version to run + ReplicaVersionId string `protobuf:"bytes,9,opt,name=replica_version_id,json=replicaVersionId,proto3" json:"replica_version_id,omitempty"` + // The length of all DKG intervals. The DKG interval length is the number of rounds following the DKG summary. + DkgIntervalLength uint64 `protobuf:"varint,10,opt,name=dkg_interval_length,json=dkgIntervalLength,proto3" json:"dkg_interval_length,omitempty"` + // Gossip Config + GossipConfig *GossipConfig `protobuf:"bytes,13,opt,name=gossip_config,json=gossipConfig,proto3" json:"gossip_config,omitempty"` + // If set to yes, the subnet starts as a (new) NNS + StartAsNns bool `protobuf:"varint,14,opt,name=start_as_nns,json=startAsNns,proto3" json:"start_as_nns,omitempty"` + // The type of subnet. + SubnetType SubnetType `protobuf:"varint,15,opt,name=subnet_type,json=subnetType,proto3,enum=registry.subnet.v1.SubnetType" json:"subnet_type,omitempty"` + // The upper bound for the number of dealings we allow in a block. + DkgDealingsPerBlock uint64 `protobuf:"varint,16,opt,name=dkg_dealings_per_block,json=dkgDealingsPerBlock,proto3" json:"dkg_dealings_per_block,omitempty"` + // If `true`, the subnet will be halted: it will no longer create or execute blocks. + IsHalted bool `protobuf:"varint,17,opt,name=is_halted,json=isHalted,proto3" json:"is_halted,omitempty"` + // Max number of ingress messages per block. + MaxIngressMessagesPerBlock uint64 `protobuf:"varint,18,opt,name=max_ingress_messages_per_block,json=maxIngressMessagesPerBlock,proto3" json:"max_ingress_messages_per_block,omitempty"` + // The maximum combined size of the ingress and xnet messages that fit into a block. + MaxBlockPayloadSize uint64 `protobuf:"varint,19,opt,name=max_block_payload_size,json=maxBlockPayloadSize,proto3" json:"max_block_payload_size,omitempty"` + // The maximum number of instructions a message can execute. + // See the comments in `subnet_config.rs` for more details. + MaxInstructionsPerMessage uint64 `protobuf:"varint,20,opt,name=max_instructions_per_message,json=maxInstructionsPerMessage,proto3" json:"max_instructions_per_message,omitempty"` + // The maximum number of instructions a round can execute. + // See the comments in `subnet_config.rs` for more details. + MaxInstructionsPerRound uint64 `protobuf:"varint,21,opt,name=max_instructions_per_round,json=maxInstructionsPerRound,proto3" json:"max_instructions_per_round,omitempty"` + // The maximum number of instructions an `install_code` message can execute. + // See the comments in `subnet_config.rs` for more details. + MaxInstructionsPerInstallCode uint64 `protobuf:"varint,22,opt,name=max_instructions_per_install_code,json=maxInstructionsPerInstallCode,proto3" json:"max_instructions_per_install_code,omitempty"` + // Information on whether a feature is supported by this subnet. + Features *SubnetFeatures `protobuf:"bytes,23,opt,name=features,proto3" json:"features,omitempty"` + // The maximum number of canisters that may be present on the subnet at any given time. + // + // A value of 0 is equivalent to setting no limit. This also provides an easy way + // to maintain compatibility of different versions of replica and registry. + MaxNumberOfCanisters uint64 `protobuf:"varint,24,opt,name=max_number_of_canisters,json=maxNumberOfCanisters,proto3" json:"max_number_of_canisters,omitempty"` + // The list of public keys whose owners have "readonly" SSH access to all replicas on this subnet, + // in case it is necessary to perform subnet recovery. + SshReadonlyAccess []string `protobuf:"bytes,25,rep,name=ssh_readonly_access,json=sshReadonlyAccess,proto3" json:"ssh_readonly_access,omitempty"` + // The list of public keys whose owners have "backup" SSH access to nodes on the NNS subnet + // to make sure the NNS can be backed up. + SshBackupAccess []string `protobuf:"bytes,26,rep,name=ssh_backup_access,json=sshBackupAccess,proto3" json:"ssh_backup_access,omitempty"` + // ECDSA Config. This field cannot be set back to `None` once it has been set + // to `Some`. To remove a key, the list of `key_ids` can be set to not include a particular key. + // If a removed key is not held by another subnet, it will be lost. + // + // Deprecated; please use chain_key_config instead. + EcdsaConfig *EcdsaConfig `protobuf:"bytes,27,opt,name=ecdsa_config,json=ecdsaConfig,proto3" json:"ecdsa_config,omitempty"` + // If `true`, the subnet will be halted after reaching the next cup height: it will no longer + // create or execute blocks. + // + // Note: this flag is reset automatically when a new CUP proposal is approved. When that + // happens, the `is_halted` flag is set to `true`, so the Subnet remains halted until an + // appropriate proposal which sets `is_halted` to `false` is approved. + HaltAtCupHeight bool `protobuf:"varint,28,opt,name=halt_at_cup_height,json=haltAtCupHeight,proto3" json:"halt_at_cup_height,omitempty"` + // Cryptographic key configuration. This field cannot be set back to `None` once it has been set + // to `Some`. To remove a key, the list of `key_configs` can be set to not include a particular + // key. If the removed key is not held by another subnet, it will be lost. + ChainKeyConfig *ChainKeyConfig `protobuf:"bytes,29,opt,name=chain_key_config,json=chainKeyConfig,proto3,oneof" json:"chain_key_config,omitempty"` +} + +// Deprecated: Use SubnetRecord.ProtoReflect.Descriptor instead. +func (*SubnetRecord) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{0} +} + +func (x *SubnetRecord) GetChainKeyConfig() *ChainKeyConfig { + if x != nil { + return x.ChainKeyConfig + } + return nil +} + +func (x *SubnetRecord) GetDkgDealingsPerBlock() uint64 { + if x != nil { + return x.DkgDealingsPerBlock + } + return 0 +} + +func (x *SubnetRecord) GetDkgIntervalLength() uint64 { + if x != nil { + return x.DkgIntervalLength + } + return 0 +} + +func (x *SubnetRecord) GetEcdsaConfig() *EcdsaConfig { + if x != nil { + return x.EcdsaConfig + } + return nil +} + +func (x *SubnetRecord) GetFeatures() *SubnetFeatures { + if x != nil { + return x.Features + } + return nil +} + +func (x *SubnetRecord) GetGossipConfig() *GossipConfig { + if x != nil { + return x.GossipConfig + } + return nil +} + +func (x *SubnetRecord) GetHaltAtCupHeight() bool { + if x != nil { + return x.HaltAtCupHeight + } + return false +} + +func (x *SubnetRecord) GetInitialNotaryDelayMillis() uint64 { + if x != nil { + return x.InitialNotaryDelayMillis + } + return 0 +} + +func (x *SubnetRecord) GetIsHalted() bool { + if x != nil { + return x.IsHalted + } + return false +} + +func (x *SubnetRecord) GetMaxBlockPayloadSize() uint64 { + if x != nil { + return x.MaxBlockPayloadSize + } + return 0 +} + +func (x *SubnetRecord) GetMaxIngressBytesPerMessage() uint64 { + if x != nil { + return x.MaxIngressBytesPerMessage + } + return 0 +} + +func (x *SubnetRecord) GetMaxIngressMessagesPerBlock() uint64 { + if x != nil { + return x.MaxIngressMessagesPerBlock + } + return 0 +} + +func (x *SubnetRecord) GetMaxInstructionsPerInstallCode() uint64 { + if x != nil { + return x.MaxInstructionsPerInstallCode + } + return 0 +} + +func (x *SubnetRecord) GetMaxInstructionsPerMessage() uint64 { + if x != nil { + return x.MaxInstructionsPerMessage + } + return 0 +} + +func (x *SubnetRecord) GetMaxInstructionsPerRound() uint64 { + if x != nil { + return x.MaxInstructionsPerRound + } + return 0 +} + +func (x *SubnetRecord) GetMaxNumberOfCanisters() uint64 { + if x != nil { + return x.MaxNumberOfCanisters + } + return 0 +} + +func (x *SubnetRecord) GetMembership() [][]byte { + if x != nil { + return x.Membership + } + return nil +} + +func (x *SubnetRecord) GetReplicaVersionId() string { + if x != nil { + return x.ReplicaVersionId + } + return "" +} + +func (x *SubnetRecord) GetSshBackupAccess() []string { + if x != nil { + return x.SshBackupAccess + } + return nil +} + +func (x *SubnetRecord) GetSshReadonlyAccess() []string { + if x != nil { + return x.SshReadonlyAccess + } + return nil +} + +func (x *SubnetRecord) GetStartAsNns() bool { + if x != nil { + return x.StartAsNns + } + return false +} + +func (x *SubnetRecord) GetSubnetType() SubnetType { + if x != nil { + return x.SubnetType + } + return SubnetType_SUBNET_TYPE_UNSPECIFIED +} + +func (x *SubnetRecord) GetUnitDelayMillis() uint64 { + if x != nil { + return x.UnitDelayMillis + } + return 0 +} + +func (*SubnetRecord) ProtoMessage() {} + +func (x *SubnetRecord) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[0] + 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) +} + +func (x *SubnetRecord) Reset() { + *x = SubnetRecord{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubnetRecord) String() string { + return protoimpl.X.MessageStringOf(x) +} + +// Represents the type of subnet. Subnets of different type might exhibit different +// behavior, e.g. being more restrictive in what operations are allowed or privileged +// compared to other subnet types. +type SubnetType int32 + +const ( + SubnetType_SUBNET_TYPE_UNSPECIFIED SubnetType = 0 + // A normal subnet where no restrictions are applied. + SubnetType_SUBNET_TYPE_APPLICATION SubnetType = 1 + // A more privileged subnet where certain restrictions are applied, + // like not charging for cycles or restricting who can create and + // install canisters on it. + SubnetType_SUBNET_TYPE_SYSTEM SubnetType = 2 + // A subnet type that is like application subnets but can have some + // additional features. + SubnetType_SUBNET_TYPE_VERIFIED_APPLICATION SubnetType = 4 +) + +func (SubnetType) Descriptor() protoreflect.EnumDescriptor { + return file_subnet_proto_enumTypes[4].Descriptor() +} + +func (x SubnetType) Enum() *SubnetType { + p := new(SubnetType) + *p = x + return p +} + +// Deprecated: Use SubnetType.Descriptor instead. +func (SubnetType) EnumDescriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{4} +} + +func (x SubnetType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +func (x SubnetType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SubnetType) Type() protoreflect.EnumType { + return &file_subnet_proto_enumTypes[4] +} + +type VerifiedIDkgDealing struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DealerIndex uint32 `protobuf:"varint,1,opt,name=dealer_index,json=dealerIndex,proto3" json:"dealer_index,omitempty"` + SignedDealingTuple *IDkgSignedDealingTuple `protobuf:"bytes,6,opt,name=signed_dealing_tuple,json=signedDealingTuple,proto3" json:"signed_dealing_tuple,omitempty"` + SupportTuples []*SignatureTuple `protobuf:"bytes,7,rep,name=support_tuples,json=supportTuples,proto3" json:"support_tuples,omitempty"` +} + +// Deprecated: Use VerifiedIDkgDealing.ProtoReflect.Descriptor instead. +func (*VerifiedIDkgDealing) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{11} +} + +func (x *VerifiedIDkgDealing) GetDealerIndex() uint32 { + if x != nil { + return x.DealerIndex + } + return 0 +} + +func (x *VerifiedIDkgDealing) GetSignedDealingTuple() *IDkgSignedDealingTuple { + if x != nil { + return x.SignedDealingTuple + } + return nil +} + +func (x *VerifiedIDkgDealing) GetSupportTuples() []*SignatureTuple { + if x != nil { + return x.SupportTuples + } + return nil +} +func (*VerifiedIDkgDealing) ProtoMessage() {} +func (x *VerifiedIDkgDealing) ProtoReflect() protoreflect.Message { + mi := &file_subnet_proto_msgTypes[11] + 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) +} +func (x *VerifiedIDkgDealing) Reset() { + *x = VerifiedIDkgDealing{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VerifiedIDkgDealing) String() string { + return protoimpl.X.MessageStringOf(x) +} +type isMasterPublicKeyId_KeyId interface { + isMasterPublicKeyId_KeyId() +} diff --git a/registry/proto/v1/transport.pb.go b/registry/proto/v1/transport.pb.go index 26c43d9..1dbcf4c 100644 --- a/registry/proto/v1/transport.pb.go +++ b/registry/proto/v1/transport.pb.go @@ -300,232 +300,6 @@ var file_transport_proto_rawDesc = []byte{ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } -func file_transport_proto_init() { - if File_transport_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_transport_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegistryError); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_transport_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegistryValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_transport_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegistryDelta); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_transport_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegistryGetChangesSinceRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_transport_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegistryGetChangesSinceResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_transport_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegistryGetValueRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_transport_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegistryGetValueResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_transport_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegistryGetLatestVersionResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_transport_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegistryMutation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_transport_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Precondition); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_transport_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegistryAtomicMutateRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_transport_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegistryAtomicMutateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_transport_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MixedHashTree); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_transport_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CertifiedResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_transport_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MixedHashTree_Fork); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_transport_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MixedHashTree_Labeled); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_transport_proto_msgTypes[12].OneofWrappers = []interface{}{ - (*MixedHashTree_Empty)(nil), - (*MixedHashTree_Fork_)(nil), - (*MixedHashTree_Labeled_)(nil), - (*MixedHashTree_LeafData)(nil), - (*MixedHashTree_PrunedDigest)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_transport_proto_rawDesc, - NumEnums: 2, - NumMessages: 16, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_transport_proto_goTypes, - DependencyIndexes: file_transport_proto_depIdxs, - EnumInfos: file_transport_proto_enumTypes, - MessageInfos: file_transport_proto_msgTypes, - }.Build() - File_transport_proto = out.File - file_transport_proto_rawDesc = nil - file_transport_proto_goTypes = nil - file_transport_proto_depIdxs = nil -} - func file_transport_proto_rawDescGZIP() []byte { file_transport_proto_rawDescOnce.Do(func() { file_transport_proto_rawDescData = protoimpl.X.CompressGZIP(file_transport_proto_rawDescData) @@ -533,8 +307,6 @@ func file_transport_proto_rawDescGZIP() []byte { return file_transport_proto_rawDescData } -func init() { file_transport_proto_init() } - // Message encoding a response to any *_certified method call. type CertifiedResponse struct { state protoimpl.MessageState @@ -1646,7 +1418,9 @@ func (x *RegistryValue) GetVersion() uint64 { } return 0 } + func (*RegistryValue) ProtoMessage() {} + func (x *RegistryValue) ProtoReflect() protoreflect.Message { mi := &file_transport_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { @@ -1666,11 +1440,236 @@ func (x *RegistryValue) Reset() { ms.StoreMessageInfo(mi) } } - func (x *RegistryValue) String() string { return protoimpl.X.MessageStringOf(x) } +func init() { file_transport_proto_init() } +func file_transport_proto_init() { + if File_transport_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_transport_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegistryError); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_transport_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegistryValue); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_transport_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegistryDelta); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_transport_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegistryGetChangesSinceRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_transport_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegistryGetChangesSinceResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_transport_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegistryGetValueRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_transport_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegistryGetValueResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_transport_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegistryGetLatestVersionResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_transport_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegistryMutation); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_transport_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Precondition); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_transport_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegistryAtomicMutateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_transport_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegistryAtomicMutateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_transport_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MixedHashTree); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_transport_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CertifiedResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_transport_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MixedHashTree_Fork); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_transport_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MixedHashTree_Labeled); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_transport_proto_msgTypes[12].OneofWrappers = []interface{}{ + (*MixedHashTree_Empty)(nil), + (*MixedHashTree_Fork_)(nil), + (*MixedHashTree_Labeled_)(nil), + (*MixedHashTree_LeafData)(nil), + (*MixedHashTree_PrunedDigest)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_transport_proto_rawDesc, + NumEnums: 2, + NumMessages: 16, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_transport_proto_goTypes, + DependencyIndexes: file_transport_proto_depIdxs, + EnumInfos: file_transport_proto_enumTypes, + MessageInfos: file_transport_proto_msgTypes, + }.Build() + File_transport_proto = out.File + file_transport_proto_rawDesc = nil + file_transport_proto_goTypes = nil + file_transport_proto_depIdxs = nil +} type isMixedHashTree_TreeEnum interface { isMixedHashTree_TreeEnum() } diff --git a/registry/testdata/node.proto b/registry/testdata/node.proto new file mode 100644 index 0000000..90c0aa7 --- /dev/null +++ b/registry/testdata/node.proto @@ -0,0 +1,68 @@ +syntax = "proto3"; + +package registry.node.v1; +option go_package = "proto/v1"; + +// A connection endpoint. +message ConnectionEndpoint { + // The IP address. Senders SHOULD use dotted-quad notation for IPv4 addresses + // and RFC5952 representation for IPv6 addresses (which means that IPv6 + // addresses are *not* enclosed in `[` and `]`, as they are not written + // with the port in the same field). + // + // Clients MUST be prepared to accept IPv6 addresses in the forms shown in + // RFC4291. + string ip_addr = 1; + uint32 port = 2; + + reserved 4; +} + +message IPv4InterfaceConfig { + string ip_addr = 1; + repeated string gateway_ip_addr = 2; + uint32 prefix_length = 3; +} + +// A node: one machine running a replica instance. +message NodeRecord { + // the node_id is redundant as it is already contained in the key for this + // value. + reserved 1, 2, 3, 4; + reserved "node_id"; + reserved "gossip_advert"; + reserved "gossip_request"; + reserved "gossip_artifact"; + + // The endpoint where this node receives xnet messages. + ConnectionEndpoint xnet = 5; + + // The endpoint where this node receives http requests. + ConnectionEndpoint http = 6; + + reserved 7, 8, 9, 10, 11, 12, 13, 14; + reserved "dcop_principal_id"; + reserved "p2p_flow_endpoints"; + reserved "prometheus_metrics_http"; + reserved "public_api"; + reserved "private_api"; + reserved "prometheus_metrics"; + reserved "transport_tls_certificate"; + reserved "xnet_api"; + + // The id of the node operator that added this node. + bytes node_operator_id = 15; + + // The SEV-SNP chip_identifier for this node. + optional bytes chip_id = 16; + + // ID of the HostOS version to run. + optional string hostos_version_id = 17; + + // IPv4 interface configuration + optional IPv4InterfaceConfig public_ipv4_config = 18; + + // Domain name, which resolves into Node's IPv4 and IPv6. + // If a Node is to be converted into the ApiBoundaryNode, the domain field should be set. + optional string domain = 19; +} diff --git a/registry/testdata/operator.proto b/registry/testdata/operator.proto new file mode 100644 index 0000000..38aef70 --- /dev/null +++ b/registry/testdata/operator.proto @@ -0,0 +1,38 @@ +syntax = "proto3"; + +package registry.node_operator.v1; +option go_package = "proto/v1"; + +// A record for a node operator. Each node operator is associated with a +// unique principal id, a.k.a. NOID. +// +// Note that while a node operator might host nodes for more than +// one funding partner, its principal ID must be unique. +message NodeOperatorRecord { + // The principal id of the node operator. This principal is the entity that + // is able to add and remove nodes. + // + // This must be unique across NodeOperatorRecords. + bytes node_operator_principal_id = 1; + + // The remaining number of nodes that could be added by this node operator. + // This number should never go below 0. + uint64 node_allowance = 2; + + // The principal id of this node operator's provider. + bytes node_provider_principal_id = 3; + + // The ID of the data center where this Node Operator hosts nodes. + string dc_id = 4; + + // A map from node type to the number of nodes for which the associated Node + // Provider should be rewarded. + map rewardable_nodes = 5; + + optional string ipv6 = 6; +} + +// The payload of a request to remove Node Operator records from the Registry +message RemoveNodeOperatorsPayload { + repeated bytes node_operators_to_remove = 1; +} diff --git a/registry/testdata/subnet.proto b/registry/testdata/subnet.proto new file mode 100644 index 0000000..fbab802 --- /dev/null +++ b/registry/testdata/subnet.proto @@ -0,0 +1,458 @@ +syntax = "proto3"; + +import "google/protobuf/wrappers.proto"; + +package registry.subnet.v1; +option go_package = "proto/v1"; + +// A subnet: A logical group of nodes that run consensus +message SubnetRecord { + // The the list of node_ids that represent the set of nodes + // that are part of this subnet. + reserved 1; // this is from membership consisting of uint64 + reserved 6; + reserved "ic_version_id"; + repeated bytes membership = 3; + + reserved 2; + reserved "initial_dkg_transcript"; + + reserved 4; + reserved "ingress_bytes_per_block_soft_cap"; + + // Maximum amount of bytes per message. This is a hard cap, which means + // ingress messages greater than the limit will be dropped. + uint64 max_ingress_bytes_per_message = 5; + + // Unit delay for blockmaker (in milliseconds). + uint64 unit_delay_millis = 7; + + // Initial delay for notary (in milliseconds), to give time to rank-0 block + // propagation. + uint64 initial_notary_delay_millis = 8; + + // ID of the Replica version to run + string replica_version_id = 9; + + // The length of all DKG intervals. The DKG interval length is the number of rounds following the DKG summary. + uint64 dkg_interval_length = 10; + + // Gossip Config + GossipConfig gossip_config = 13; + + // If set to yes, the subnet starts as a (new) NNS + bool start_as_nns = 14; + + // The type of subnet. + SubnetType subnet_type = 15; + + // The upper bound for the number of dealings we allow in a block. + uint64 dkg_dealings_per_block = 16; + + // If `true`, the subnet will be halted: it will no longer create or execute blocks. + bool is_halted = 17; + + // Max number of ingress messages per block. + uint64 max_ingress_messages_per_block = 18; + + // The maximum combined size of the ingress and xnet messages that fit into a block. + uint64 max_block_payload_size = 19; + + // The maximum number of instructions a message can execute. + // See the comments in `subnet_config.rs` for more details. + uint64 max_instructions_per_message = 20; + + // The maximum number of instructions a round can execute. + // See the comments in `subnet_config.rs` for more details. + uint64 max_instructions_per_round = 21; + + // The maximum number of instructions an `install_code` message can execute. + // See the comments in `subnet_config.rs` for more details. + uint64 max_instructions_per_install_code = 22; + + // Information on whether a feature is supported by this subnet. + SubnetFeatures features = 23; + + // The maximum number of canisters that may be present on the subnet at any given time. + // + // A value of 0 is equivalent to setting no limit. This also provides an easy way + // to maintain compatibility of different versions of replica and registry. + uint64 max_number_of_canisters = 24; + + // The list of public keys whose owners have "readonly" SSH access to all replicas on this subnet, + // in case it is necessary to perform subnet recovery. + repeated string ssh_readonly_access = 25; + + // The list of public keys whose owners have "backup" SSH access to nodes on the NNS subnet + // to make sure the NNS can be backed up. + repeated string ssh_backup_access = 26; + + // ECDSA Config. This field cannot be set back to `None` once it has been set + // to `Some`. To remove a key, the list of `key_ids` can be set to not include a particular key. + // If a removed key is not held by another subnet, it will be lost. + // + // Deprecated; please use chain_key_config instead. + EcdsaConfig ecdsa_config = 27; + + // If `true`, the subnet will be halted after reaching the next cup height: it will no longer + // create or execute blocks. + // + // Note: this flag is reset automatically when a new CUP proposal is approved. When that + // happens, the `is_halted` flag is set to `true`, so the Subnet remains halted until an + // appropriate proposal which sets `is_halted` to `false` is approved. + bool halt_at_cup_height = 28; + + // Cryptographic key configuration. This field cannot be set back to `None` once it has been set + // to `Some`. To remove a key, the list of `key_configs` can be set to not include a particular + // key. If the removed key is not held by another subnet, it will be lost. + optional ChainKeyConfig chain_key_config = 29; +} + +// Types of curves that can be used for ECDSA signatures. +enum EcdsaCurve { + ECDSA_CURVE_UNSPECIFIED = 0; + ECDSA_CURVE_SECP256K1 = 1; +} + +message EcdsaKeyId { + EcdsaCurve curve = 1; + string name = 2; +} + +message EcdsaInitialization { + EcdsaKeyId key_id = 1; + InitialIDkgDealings dealings = 2; +} + +// Contains the initial DKG transcripts for the subnet and materials to construct a base CUP (i.e. +// a CUP with no dependencies on previous CUPs or blocks). Such CUP materials can be used to +// construct the genesis CUP or a recovery CUP in the event of a subnet stall. +message CatchUpPackageContents { + // Initial non-interactive low-threshold DKG transcript + InitialNiDkgTranscriptRecord initial_ni_dkg_transcript_low_threshold = 1; + + // Initial non-interactive high-threshold DKG transcript + InitialNiDkgTranscriptRecord initial_ni_dkg_transcript_high_threshold = 2; + + // The blockchain height that the CUP should have + uint64 height = 3; + + // Block time for the CUP's block + uint64 time = 4; + + // The hash of the state that the subnet should use + bytes state_hash = 5; + + // A uri from which data to replace the registry local store should be downloaded + RegistryStoreUri registry_store_uri = 6; + + /// The initial ECDSA dealings for boot strapping target subnets. + repeated EcdsaInitialization ecdsa_initializations = 7; +} + +message RegistryStoreUri { + /// The uri at which the registry store data should be retrieved. The data + /// must be provided as gzipped tar archive + string uri = 1; + /// A SHA-256, hex encoded hash of the contents of the data stored at the + /// provided URI + string hash = 2; + /// The registry version that should be used for the catch up package contents + uint64 registry_version = 3; +} + +// Contains information pertaining to all subnets in the IC and their params. +message SubnetListRecord { + reserved 1; // this is from subnet id being a uint64 + // A list of subnet ids of all subnets present in this instance of the IC. + repeated bytes subnets = 2; +} + +// A non-interactive distributed key generation (NI-DKG) ID. +message NiDkgId { + reserved "receiver_subnet"; + reserved 3; // this is from receiver_subnet consisting of bytes + uint64 start_block_height = 1; + bytes dealer_subnet = 2; + NiDkgTag dkg_tag = 4; + google.protobuf.BytesValue remote_target_id = 5; +} + +// A non-interactive distributed key generation (NI-DKG) tag. +enum NiDkgTag { + NI_DKG_TAG_UNSPECIFIED = 0; + NI_DKG_TAG_LOW_THRESHOLD = 1; + NI_DKG_TAG_HIGH_THRESHOLD = 2; +} + +// Initial non-interactive DKG transcript record +message InitialNiDkgTranscriptRecord { + NiDkgId id = 1; + uint32 threshold = 2; + repeated bytes committee = 3; + uint64 registry_version = 4; + bytes internal_csp_transcript = 5; +} + +message PrincipalId { + bytes raw = 1; +} + +message SubnetId { + PrincipalId principal_id = 1; +} + +message IDkgTranscriptId { + uint64 id = 1; + SubnetId subnet_id = 2; + uint64 source_height = 3; +} + +message VerifiedIDkgDealing { + reserved 4; + reserved "requested_height"; + reserved 5; + reserved "dealing_tuple"; + reserved 2; + reserved "signature"; + reserved 3; + reserved "signers"; + + uint32 dealer_index = 1; + IDkgSignedDealingTuple signed_dealing_tuple = 6; + repeated SignatureTuple support_tuples = 7; +} + +message NodeId { + PrincipalId principal_id = 1; +} + +// An algorithm ID. This is used to specify the signature algorithm associated with a public key. +enum AlgorithmId { + ALGORITHM_ID_UNSPECIFIED = 0; + ALGORITHM_ID_MULTI_BLS12_381 = 1; + ALGORITHM_ID_THRES_BLS12_381 = 2; + ALGORITHM_ID_SCHNORR_SECP256K1 = 3; + ALGORITHM_ID_STATIC_DH_SECP256K1 = 4; + ALGORITHM_ID_HASH_SHA256 = 5; + ALGORITHM_ID_TLS = 6; + ALGORITHM_ID_ED25519 = 7; + ALGORITHM_ID_SECP256K1 = 8; + ALGORITHM_ID_GROTH20_BLS12_381 = 9; + ALGORITHM_ID_NIDKG_GROTH20_BLS12_381 = 10; + ALGORITHM_ID_ECDSA_P256 = 11; + ALGORITHM_ID_ECDSA_SECP_256K1 = 12; + ALGORITHM_ID_IC_CANISTER_SIGNATURE = 13; + ALGORITHM_ID_RSA_SHA256 = 14; + ALGORITHM_ID_THRESHOLD_ECDSA_SECP_256K1 = 15; + ALGORITHM_ID_MEGA_SECP_256K1 = 16; + ALGORITHM_ID_THRESHOLD_ECDSA_SECP_256R1 = 17; + ALGORITHM_ID_THRESHOLD_SCHNORR_BIP340 = 18; + ALGORITHM_ID_THRESHOLD_ED25519 = 19; +} + +message IDkgTranscript { + IDkgTranscriptId transcript_id = 1; + repeated NodeId dealers = 2; + repeated NodeId receivers = 3; + uint64 registry_version = 4; + repeated VerifiedIDkgDealing verified_dealings = 5; + bytes transcript_type = 6; // CBOR serialized IDkgTranscriptType + AlgorithmId algorithm_id = 7; + bytes raw_transcript = 8; // serialised InternalRawTranscript +} + +message DealerTuple { + NodeId dealer_id = 1; + uint32 dealer_index = 2; +} + +message SignatureTuple { + NodeId signer = 1; + bytes signature = 2; +} + +enum IDkgTranscriptOperation { + I_DKG_TRANSCRIPT_OPERATION_UNSPECIFIED = 0; + I_DKG_TRANSCRIPT_OPERATION_RANDOM = 1; + I_DKG_TRANSCRIPT_OPERATION_RESHARE_OF_MASKED = 2; + I_DKG_TRANSCRIPT_OPERATION_RESHARE_OF_UNMASKED = 3; + I_DKG_TRANSCRIPT_OPERATION_UNMASKED_TIMES_MASKED = 4; + I_DKG_TRANSCRIPT_OPERATION_RANDOM_UNMASKED = 5; +} + +message IDkgTranscriptParams { + IDkgTranscriptId transcript_id = 1; + repeated DealerTuple dealers = 2; + repeated NodeId receivers = 3; + uint64 registry_version = 4; + AlgorithmId algorithm_id = 5; + IDkgTranscriptOperation idkg_transcript_operation = 6; + repeated IDkgTranscript idkg_transcript_operation_args = 7; // 0, 1, or 2 IDkgTranscripts +} + +message IDkgDealing { + IDkgTranscriptId transcript_id = 1; + bytes raw_dealing = 2; // serialised InternalRawDealing +} + +message IDkgSignedDealingTuple { + NodeId dealer = 1; + IDkgDealing dealing = 2; + bytes signature = 3; +} + +message InitialIDkgDealings { + reserved 3; + reserved "dealings"; + + uint32 version = 1; + IDkgTranscriptParams params = 2; + repeated IDkgSignedDealingTuple signed_dealings = 4; +} + +message IDkgComplaint { + IDkgTranscriptId transcript_id = 1; + NodeId dealer = 2; + bytes raw_complaint = 3; +} + +message IDkgOpening { + IDkgTranscriptId transcript_id = 1; + NodeId dealer = 2; + bytes raw_opening = 3; +} + +message ExtendedDerivationPath { + PrincipalId caller = 1; + repeated bytes derivation_path = 2; +} + +// Per subnet P2P configuration +// Note: protoc is mangling the name P2PConfig to P2pConfig +message GossipConfig { + reserved 9; + reserved "relay_config"; + reserved 10; + reserved "advert_config"; + + // max outstanding request per peer MIN/DEFAULT/MAX 1/20/200 + uint32 max_artifact_streams_per_peer = 1; + // timeout for a outstanding request 3_000/15_000/180_000 + uint32 max_chunk_wait_ms = 2; + // max duplicate requests in underutilized networks 1/28/6000 + uint32 max_duplicity = 3; + // maximum chunk size supported on this subnet 1024/4096/131_072 + uint32 max_chunk_size = 4; + // history size for receive check 1_000/5_000/30_000 + uint32 receive_check_cache_size = 5; + // period for re evaluating the priority function. 1_000/3_000/30_000 + uint32 pfn_evaluation_period_ms = 6; + // period for polling the registry for updates 1_000/3_000/30_000 + uint32 registry_poll_period_ms = 7; + // period for sending a retransmission request + uint32 retransmission_request_ms = 8; + // config for advert distribution. +} + +// Represents the type of subnet. Subnets of different type might exhibit different +// behavior, e.g. being more restrictive in what operations are allowed or privileged +// compared to other subnet types. +enum SubnetType { + SUBNET_TYPE_UNSPECIFIED = 0; + // A normal subnet where no restrictions are applied. + SUBNET_TYPE_APPLICATION = 1; + // A more privileged subnet where certain restrictions are applied, + // like not charging for cycles or restricting who can create and + // install canisters on it. + SUBNET_TYPE_SYSTEM = 2; + reserved 3; + reserved "SUBNET_TYPE_PREMIUM_APPLICATION"; + // A subnet type that is like application subnets but can have some + // additional features. + SUBNET_TYPE_VERIFIED_APPLICATION = 4; +} + +message SubnetFeatures { + reserved 1; + // This feature flag controls whether canister execution happens + // in sandboxed process or not. It is disabled by default. + bool canister_sandboxing = 2; + // This feature flag controls whether canisters of this subnet are capable of + // performing http(s) requests to the web2. + bool http_requests = 3; + + reserved 4; + + reserved "bitcoin_testnet_feature"; + reserved 5; + + reserved "bitcoin"; + reserved 6; + + reserved "sev_status"; + reserved 7; + + reserved "onchain_observability"; + reserved 8; + + // Status of the SEV-SNP feature. + optional bool sev_enabled = 9; +} + +// Per subnet ECDSA configuration +// +// Deprecated; please use ChainKeyConfig instead. +message EcdsaConfig { + // Number of quadruples to create in advance. + uint32 quadruples_to_create_in_advance = 1; + reserved 2; + // Identifiers for threshold ECDSA keys held by the subnet. + repeated EcdsaKeyId key_ids = 3; + // The maximum number of signature requests that can be enqueued at once. + uint32 max_queue_size = 4; + // Signature requests will timeout after the given number of nano seconds. + optional uint64 signature_request_timeout_ns = 5; + // Key rotation period of a single node in milliseconds. + // If none is specified key rotation is disabled. + optional uint64 idkg_key_rotation_period_ms = 6; +} + +// Types of curves that can be used for Schnorr signatures. +enum SchnorrAlgorithm { + SCHNORR_ALGORITHM_UNSPECIFIED = 0; + SCHNORR_ALGORITHM_BIP340SECP256K1 = 1; + SCHNORR_ALGORITHM_ED25519 = 2; +} + +message SchnorrKeyId { + SchnorrAlgorithm algorithm = 1; + string name = 2; +} + +message MasterPublicKeyId { + oneof key_id { + EcdsaKeyId ecdsa = 1; + SchnorrKeyId schnorr = 2; + } +} + +message KeyConfig { + // The key's identifier. + optional MasterPublicKeyId key_id = 1; + // Number of pre-signatures to create in advance. + optional uint32 pre_signatures_to_create_in_advance = 3; + // The maximum number of signature requests that can be enqueued at once. + optional uint32 max_queue_size = 4; +} + +// Per-subnet chain key configuration +message ChainKeyConfig { + // Configurations for keys held by the subnet. + repeated KeyConfig key_configs = 1; + // Signature requests will timeout after the given number of nano seconds. + optional uint64 signature_request_timeout_ns = 2; + // Key rotation period of a single node in milliseconds. + // If none is specified key rotation is disabled. + optional uint64 idkg_key_rotation_period_ms = 3; +}