From 785acb897d936139d8f7c6b781eecf4b49d0a16b Mon Sep 17 00:00:00 2001 From: Quint Daenen Date: Tue, 21 May 2024 18:02:16 +0200 Subject: [PATCH] Add node list endpoint. --- agent.go | 9 +- certification/certificate.go | 218 +- certification/certificate_test.go | 48 +- certification/hashtree/hashtree.go | 65 + certification/hashtree/node_test.go | 21 + certification/http/verify.go | 14 +- certification/rootKey.go | 16 - ic/testdata/did/ic.did | 2 +- ic/testdata/did/icpledger.did | 59 + ic/testdata/did/registry.did | 71 +- registry/client.go | 110 + registry/dataprovider.go | 104 + registry/dataprovider_test.go | 12 +- registry/hashtree.go | 53 + registry/proto/v1/local.pb.go | 156 +- registry/proto/v1/registry.pb.go | 106 +- registry/proto/v1/subnet.pb.go | 3366 ++++++++++++++------------- registry/proto/v1/transport.pb.go | 457 ++-- registry/testdata/subnet.proto | 10 + 19 files changed, 2804 insertions(+), 2093 deletions(-) create mode 100644 registry/hashtree.go diff --git a/agent.go b/agent.go index fe0622d..63a10d8 100644 --- a/agent.go +++ b/agent.go @@ -343,6 +343,9 @@ func (a Agent) QueryProto(canisterID principal.Principal, methodName string, in, if err != nil { return err } + if len(payload) == 0 { + payload = []byte{} + } _, data, err := a.sign(Request{ Type: RequestTypeQuery, Sender: a.Sender(), @@ -393,11 +396,11 @@ func (a Agent) RequestStatus(ecID principal.Principal, requestID RequestID) ([]b if err := cbor.Unmarshal(c, &state); err != nil { return nil, nil, err } - cert, err := certification.New(ecID, a.rootKey[len(a.rootKey)-96:], c) - if err != nil { + var certificate certification.Certificate + if err := cbor.Unmarshal(c, &certificate); err != nil { return nil, nil, err } - if err := cert.Verify(); err != nil { + if err := certification.VerifyCertificate(certificate, ecID, a.rootKey); err != nil { return nil, nil, err } node, err := hashtree.DeserializeNode(state["tree"].([]any)) diff --git a/certification/certificate.go b/certification/certificate.go index 8278c16..03ff751 100644 --- a/certification/certificate.go +++ b/certification/certificate.go @@ -1,6 +1,8 @@ package certification import ( + "bytes" + "encoding/asn1" "fmt" "slices" @@ -11,103 +13,170 @@ import ( "github.com/fxamacker/cbor/v2" ) -// Cert is a certificate gets returned by the IC. -type Cert struct { - // Tree is the certificate tree. - Tree hashtree.HashTree `cbor:"tree"` - // Signature is the signature of the certificate tree. - Signature []byte `cbor:"signature"` - // Delegation is the delegation of the certificate. - Delegation *Delegation `cbor:"delegation"` +func PublicKeyFromDER(der []byte) (*bls.PublicKey, error) { + var seq asn1.RawValue + if _, err := asn1.Unmarshal(der, &seq); err != nil { + return nil, err + } + if seq.Tag != asn1.TagSequence { + return nil, fmt.Errorf("invalid tag: %d", seq.Tag) + } + var idSeq asn1.RawValue + rest, err := asn1.Unmarshal(seq.Bytes, &idSeq) + if err != nil { + return nil, err + } + var bs asn1.BitString + if _, err := asn1.Unmarshal(rest, &bs); err != nil { + return nil, err + } + if bs.BitLength != 96*8 { + return nil, fmt.Errorf("invalid bit string length: %d", bs.BitLength) + } + var algoId asn1.ObjectIdentifier + seqRest, err := asn1.Unmarshal(idSeq.Bytes, &algoId) + if err != nil { + return nil, err + } + if !algoId.Equal(asn1.ObjectIdentifier{1, 3, 6, 1, 4, 1, 44668, 5, 3, 1, 2, 1}) { + return nil, fmt.Errorf("invalid algorithm identifier: %v", algoId) + } + var curveID asn1.ObjectIdentifier + if _, err := asn1.Unmarshal(seqRest, &curveID); err != nil { + return nil, err + } + if !curveID.Equal(asn1.ObjectIdentifier{1, 3, 6, 1, 4, 1, 44668, 5, 3, 2, 1}) { + return nil, fmt.Errorf("invalid curve identifier: %v", curveID) + } + return bls.PublicKeyFromBytes(bs.Bytes) } -// Certificate is a certificate that gets returned by the IC and can be used to verify the state root based on the root -// key and canister ID. -type Certificate struct { - Cert Cert - RootKey []byte - CanisterID principal.Principal +func PublicKeyToDER(publicKey []byte) ([]byte, error) { + if len(publicKey) != 96 { + return nil, fmt.Errorf("invalid public key length: %d", len(publicKey)) + } + return asn1.Marshal([]any{ + []any{ + asn1.ObjectIdentifier{1, 3, 6, 1, 4, 1, 44668, 5, 3, 1, 2, 1}, // algorithm identifier + asn1.ObjectIdentifier{1, 3, 6, 1, 4, 1, 44668, 5, 3, 2, 1}, // curve identifier + }, + asn1.BitString{ + Bytes: publicKey, + BitLength: len(publicKey) * 8, + }, + }) } -// New creates a new certificate. -func New(canisterID principal.Principal, rootKey []byte, certificate []byte) (*Certificate, error) { - var cert Cert - if err := cbor.Unmarshal(certificate, &cert); err != nil { - return nil, err +func VerifyCertificate( + certificate Certificate, + canisterID principal.Principal, + rootPublicKey []byte, +) error { + publicKey, err := PublicKeyFromDER(rootPublicKey) + if err != nil { + return err + } + key := publicKey + if certificate.Delegation != nil { + delegation := certificate.Delegation + k, err := verifyDelegationCertificate( + delegation.Certificate, + delegation.SubnetId, + publicKey, + canisterID, + ) + if err != nil { + return err + } + key = k } - return &Certificate{ - Cert: cert, - RootKey: rootKey, - CanisterID: canisterID, - }, nil + return verifyCertificateSignature(certificate, key) } -// Verify verifies the certificate. -func (c Certificate) Verify() error { - signature, err := bls.SignatureFromBytes(c.Cert.Signature) - if err != nil { +func VerifyCertifiedData( + certificate Certificate, + canisterID principal.Principal, + rootPublicKey []byte, + certifiedData []byte, +) error { + if err := VerifyCertificate(certificate, canisterID, rootPublicKey); err != nil { return err } - publicKey, err := c.getPublicKey() + certificateCertifiedData, err := certificate.Tree.Lookup( + hashtree.Label("canister"), + canisterID.Raw, + hashtree.Label("certified_data"), + ) if err != nil { return err } - rootHash := c.Cert.Tree.Digest() + if !bytes.Equal(certificateCertifiedData, certifiedData) { + return fmt.Errorf("certified data does not match") + } + return nil +} + +func verifyCertificateSignature(certificate Certificate, publicKey *bls.PublicKey) error { + rootHash := certificate.Tree.Digest() message := append(hashtree.DomainSeparator("ic-state-root"), rootHash[:]...) - if !signature.Verify(publicKey, string(message)) { + signature, err := bls.SignatureFromBytes(certificate.Signature) + if err != nil { + return err + } + if !signature.VerifyByte(publicKey, message) { return fmt.Errorf("signature verification failed") } return nil } -// getPublicKey checks the delegation and returns the public key. -func (c Certificate) getPublicKey() (*bls.PublicKey, error) { - if c.Cert.Delegation == nil { - return bls.PublicKeyFromBytes(c.RootKey) +func verifyDelegationCertificate( + certificate Certificate, + subnetID principal.Principal, + rootPublicKey *bls.PublicKey, + canisterID principal.Principal, +) (*bls.PublicKey, error) { + if certificate.Delegation != nil { + return nil, fmt.Errorf("multiple delegations are not supported") + } + if err := verifyCertificateSignature(certificate, rootPublicKey); err != nil { + return nil, err } - cert := c.Cert.Delegation - canisterRanges, err := cert.Certificate.Cert.Tree.Lookup( - hashtree.Label("subnet"), cert.SubnetId.Raw, hashtree.Label("canister_ranges"), + rawRanges, err := certificate.Tree.Lookup( + hashtree.Label("subnet"), + subnetID.Raw, + hashtree.Label("canister_ranges"), ) if err != nil { - return nil, fmt.Errorf("no canister ranges found for subnet %s: %w", cert.SubnetId, err) - } - var rawRanges [][][]byte - if err := cbor.Unmarshal(canisterRanges, &rawRanges); err != nil { return nil, err } - - var inRange bool - for _, pair := range rawRanges { - if len(pair) != 2 { - return nil, fmt.Errorf("invalid range: %v", pair) - } - if slices.Compare(pair[0], c.CanisterID.Raw) <= 0 && slices.Compare(c.CanisterID.Raw, pair[1]) <= 0 { - inRange = true - break - } + var canisterRanges canisterRanges + if err := cbor.Unmarshal(rawRanges, &canisterRanges); err != nil { + return nil, err } - if !inRange { - return nil, fmt.Errorf("canister %s is not in range", c.CanisterID) + if !canisterRanges.InRange(canisterID) { + return nil, fmt.Errorf("canister %s is not in range", canisterID) } - publicKey, err := cert.Certificate.Cert.Tree.Lookup( - hashtree.Label("subnet"), cert.SubnetId.Raw, hashtree.Label("public_key"), + rawPublicKey, err := certificate.Tree.Lookup( + hashtree.Label("subnet"), + subnetID.Raw, + hashtree.Label("public_key"), ) if err != nil { - return nil, fmt.Errorf("no public key found for subnet %s: %w", cert.SubnetId, err) - } - - if len(publicKey) != len(derPrefix)+96 { - return nil, fmt.Errorf("invalid public key length: %d", len(publicKey)) - } - - if slices.Compare(publicKey[:len(derPrefix)], derPrefix) != 0 { - return nil, fmt.Errorf("invalid public key prefix: %s", publicKey[:len(derPrefix)]) + return nil, err } + return PublicKeyFromDER(rawPublicKey) +} - return bls.PublicKeyFromBytes(publicKey[len(derPrefix):]) +// Certificate is a certificate gets returned by the IC. +type Certificate struct { + // Tree is the certificate tree. + Tree hashtree.HashTree `cbor:"tree"` + // Signature is the signature of the certificate tree. + Signature []byte `cbor:"signature"` + // Delegation is the delegation of the certificate. + Delegation *Delegation `cbor:"delegation"` } // Delegation is a delegation of a certificate. @@ -122,7 +191,7 @@ type Delegation struct { // UnmarshalCBOR unmarshals a delegation. func (d *Delegation) UnmarshalCBOR(bytes []byte) error { - var m map[string]any + var m map[string][]byte if err := cbor.Unmarshal(bytes, &m); err != nil { return err } @@ -130,10 +199,10 @@ func (d *Delegation) UnmarshalCBOR(bytes []byte) error { switch k { case "subnet_id": d.SubnetId = principal.Principal{ - Raw: v.([]byte), + Raw: v, } case "certificate": - if err := cbor.Unmarshal(v.([]byte), &d.Certificate.Cert); err != nil { + if err := cbor.Unmarshal(v, &d.Certificate); err != nil { return err } default: @@ -142,3 +211,14 @@ func (d *Delegation) UnmarshalCBOR(bytes []byte) error { } return nil } + +type canisterRanges [][][]byte + +func (c canisterRanges) InRange(canisterID principal.Principal) bool { + for _, pair := range c { + if slices.Compare(pair[0], canisterID.Raw) <= 0 && slices.Compare(canisterID.Raw, pair[1]) <= 0 { + return true + } + } + return false +} diff --git a/certification/certificate_test.go b/certification/certificate_test.go index 2e67205..1ce6de0 100644 --- a/certification/certificate_test.go +++ b/certification/certificate_test.go @@ -1,9 +1,9 @@ -package certification_test +package certification import ( "encoding/hex" - "github.com/aviate-labs/agent-go/certification" "github.com/aviate-labs/agent-go/principal" + "github.com/fxamacker/cbor/v2" "testing" ) @@ -16,23 +16,51 @@ func TestSampleCert(t *testing.T) { "00000000002FFFFF0101", } { t.Run(s, func(t *testing.T) { - c, err := certification.New( + rawCertificate := hexToBytes(SampleCert) + var certificate Certificate + if err := cbor.Unmarshal(rawCertificate, &certificate); err != nil { + t.Fatal(err) + } + if err := VerifyCertificate( + certificate, principal.Principal{ Raw: hexToBytes(s), }, - hexToBytes(certification.RootKey), - hexToBytes(SampleCert), - ) - if err != nil { + hexToBytes(RootKey), + ); err != nil { t.Fatal(err) } - if err := c.Verify(); err != nil { - t.Error(err) - } }) } } +func TestSubnetDelegateTestVector(t *testing.T) { + rawCertificate, err := hex.DecodeString("D9D9F7A3647472656583018301830183024863616E6973746572830183018301830183024A000000000010000001018301830183024E6365727469666965645F6461746182035820619D02453B55BA8EA01DA1D26DF7083644EBE84A97AFC8D4ECE7F82453548EAA82045820D598630C2C94E80F8EDD451F3B7E942ACE5680B60FB5897A96A466D2F8FCF6F882045820FD96014A4A0368DBD8BD4BD05806C0F8C6BDFBDFBE6F6182B9E4963F18ADD55B8204582072379FD63D4B0A8E7D0C9F87316613DC1ADED56B7311F83213FF213F8B802F1C820458208079C8D69F2C1813E63B2488CD1C7D0BAA73ECE24AEAAD48348D7A1F9B8E868F82045820F7251F6708258AA9E995EE4A923E615908D40E9D4C57DFA84640B77B76D016D0820458205D38A89DDE470A2252C2F4060C42AD6EBCBE5C689CA68241C2858D1149B13386820458200BDF772535F123B48C553D3AE0B6B464277B8E2DDF887CDFE5F54B595352BD658204582055A1F078E350F151DDDE43AEDFBAC8647AC4B392F7141917824EFB1A956B79DB8301820458205C9ABFBA1DFE4D188D30474AF0A1BB796D8EFA15353973A0EEC3427675789C1783024474696D6582034980EFCBB1A5FEF5E616697369676E61747572655830A754B5AE47F254B23420F17E71265CDAF64D34BA002BA88578FDF3CD9B2436FE5A3B7A2245E6DCF4A574169EB72DD4DF6A64656C65676174696F6EA2697375626E65745F6964581DCF9D54E35F653FD0FD4FF05E9C020923B719429C9A3139BEAAF4871B026B6365727469666963617465590199D9D9F7A26474726565830182045820E82F4E336F033E15D337975AF1617E1030F4C6F9F53FCF89A48E861F75C5C98483018302467375626E6574830182045820FB286DDA6CB7FE72AF261F5C896D51CBF82F233679907A1CB7E7299B44F5E23D8302581DCF9D54E35F653FD0FD4FF05E9C020923B719429C9A3139BEAAF4871B02830183024F63616E69737465725F72616E6765738203581BD9D9F781824A000000000010000001014A00000000001FFFFF010183024A7075626C69635F6B657982035885308182301D060D2B0601040182DC7C0503010201060C2B0601040182DC7C0503020103610088EB824FC43459023B08806C56AC224EDEA54AF7A656D96F6E909906B7442AC65A60D2C0B831425B0376674430E48F1D09658CD3F86BDD8607199401422C8B641C43F58740F52B497136E70B62522AEF12A6DB95ECBA58123D44D9B2E852B40883024474696D6582034987A5E7EB83F2E3E416697369676E6174757265583091EC641476446FFA0AB613BE624664BFEC32F7AC20B7E943EA7DACE1B7247101CA5B3CD6DFF38E6276BD6A7AF6C0587F") + if err != nil { + t.Fatal(err) + } + rootPubKey, err := hex.DecodeString("308182301D060D2B0601040182DC7C0503010201060C2B0601040182DC7C05030201036100923A67B791270CD8F5320212AE224377CF407D3A8A2F44F11FED5915A97EE67AD0E90BC382A44A3F14C363AD2006640417B4BBB3A304B97088EC6B4FC87A25558494FC239B47E129260232F79973945253F5036FD520DDABD1E2DE57ABFB40CB") + if err != nil { + t.Fatal(err) + } + certifiedData := []byte{ + 97, 157, 2, 69, 59, 85, 186, 142, 160, 29, 161, 210, 109, 247, 8, 54, 68, 235, 232, 74, + 151, 175, 200, 212, 236, 231, 248, 36, 83, 84, 142, 170, + } + var certificate Certificate + if err := cbor.Unmarshal(rawCertificate, &certificate); err != nil { + t.Fatal(err) + } + if err := VerifyCertifiedData( + certificate, + principal.MustDecode("5v3p4-iyaaa-aaaaa-qaaaa-cai"), + rootPubKey, + certifiedData, + ); err != nil { + t.Fatal(err) + } +} + func hexToBytes(s string) []byte { b, _ := hex.DecodeString(s) return b diff --git a/certification/hashtree/hashtree.go b/certification/hashtree/hashtree.go index 9cb7838..e7dc90a 100644 --- a/certification/hashtree/hashtree.go +++ b/certification/hashtree/hashtree.go @@ -1,5 +1,7 @@ package hashtree +import "fmt" + // HashTree is a hash tree. type HashTree struct { Root Node @@ -39,3 +41,66 @@ func (t *HashTree) UnmarshalCBOR(bytes []byte) error { t.Root = root return nil } + +type PathValuePair struct { + Path []Label + Value []byte +} + +func AllChildren(n Node) ([]PathValuePair, error) { + return allChildren(n) +} + +// AllPaths returns all non-empty labeled paths in the hash tree, does not include pruned nodes. +func AllPaths(n Node) ([]PathValuePair, error) { + return allLabeled(n, nil) +} + +func allChildren(n Node) ([]PathValuePair, error) { + switch n := n.(type) { + case Empty, Pruned, Leaf: + return nil, nil + case Labeled: + switch c := n.Tree.(type) { + case Leaf: + return []PathValuePair{{Path: []Label{n.Label}, Value: c}}, nil + default: + return nil, nil + } + case Fork: + left, err := allChildren(n.LeftTree) + if err != nil { + return nil, err + } + right, err := allChildren(n.RightTree) + if err != nil { + return nil, err + } + return append(left, right...), nil + default: + return nil, fmt.Errorf("unsupported node type: %T", n) + } +} + +func allLabeled(n Node, path []Label) ([]PathValuePair, error) { + switch n := n.(type) { + case Empty, Pruned: + return nil, nil + case Leaf: + return []PathValuePair{{Path: path, Value: n}}, nil + case Labeled: + return allLabeled(n.Tree, append(path, n.Label)) + case Fork: + left, err := allLabeled(n.LeftTree, path) + if err != nil { + return nil, err + } + right, err := allLabeled(n.RightTree, path) + if err != nil { + return nil, err + } + return append(left, right...), nil + default: + return nil, fmt.Errorf("unsupported node type: %T", n) + } +} diff --git a/certification/hashtree/node_test.go b/certification/hashtree/node_test.go index 8ff5c24..f081630 100644 --- a/certification/hashtree/node_test.go +++ b/certification/hashtree/node_test.go @@ -3,6 +3,7 @@ package hashtree_test import ( "encoding/hex" "fmt" + "strings" "testing" "github.com/aviate-labs/agent-go/certification/hashtree" @@ -69,6 +70,26 @@ var tree = hashtree.Fork{ }, } +func ExampleAllPaths() { + paths, _ := hashtree.AllPaths(tree) + for _, path := range paths { + var p []string + for _, l := range path.Path { + p = append(p, string(l)) + } + fmt.Printf( + "%s: %s\n", + strings.Join(p, "/"), + string(path.Value), + ) + } + // Output: + // a/x: hello + // a/y: world + // b: good + // d: morning +} + func ExampleDeserialize() { data, _ := hex.DecodeString("8301830183024161830183018302417882034568656c6c6f810083024179820345776f726c6483024162820344676f6f648301830241638100830241648203476d6f726e696e67") fmt.Println(hashtree.Deserialize(data)) diff --git a/certification/http/verify.go b/certification/http/verify.go index f2fa6b8..fee9705 100644 --- a/certification/http/verify.go +++ b/certification/http/verify.go @@ -170,11 +170,11 @@ func (a Agent) VerifyResponse(path string, req *Request, resp *Response) error { } // Validate the certificate. - if err := (certification.Certificate{ - Cert: certificateHeader.Certificate, - RootKey: a.GetRootKey(), - CanisterID: a.canisterId, - }).Verify(); err != nil { + if err := certification.VerifyCertificate( + certificateHeader.Certificate, + a.canisterId, + a.GetRootKey(), + ); err != nil { return err } @@ -316,7 +316,7 @@ func (a *Agent) verifyLegacy(path string, hash [32]byte, certificateHeader *Cert } type CertificateHeader struct { - Certificate certification.Cert + Certificate certification.Certificate Tree hashtree.HashTree Version int ExprPath []hashtree.Label @@ -335,7 +335,7 @@ func ParseCertificateHeader(header string) (*CertificateHeader, error) { if err != nil { return nil, err } - var cert certification.Cert + var cert certification.Certificate if err := cbor.Unmarshal(raw, &cert); err != nil { return nil, err } diff --git a/certification/rootKey.go b/certification/rootKey.go index 36314cd..b738c8b 100644 --- a/certification/rootKey.go +++ b/certification/rootKey.go @@ -1,20 +1,4 @@ package certification -import "encoding/hex" - -// DerPrefix is the DER prefix of IC main net. -const DerPrefix = "308182301d060d2b0601040182dc7c0503010201060c2b0601040182dc7c05030201036100" - // RootKey is the root key of IC main net. const RootKey = "308182301d060d2b0601040182dc7c0503010201060c2b0601040182dc7c05030201036100814c0e6ec71fab583b08bd81373c255c3c371b2e84863c98a4f1e08b74235d14fb5d9c0cd546d9685f913a0c0b2cc5341583bf4b4392e467db96d65b9bb4cb717112f8472e0d5a4d14505ffd7484b01291091c5f87b98883463f98091a0baaae" - -var ( - derPrefix []byte -) - -func init() { - var err error - if derPrefix, err = hex.DecodeString(DerPrefix); err != nil { - panic(err) - } -} diff --git a/ic/testdata/did/ic.did b/ic/testdata/did/ic.did index 052d082..7930575 100644 --- a/ic/testdata/did/ic.did +++ b/ic/testdata/did/ic.did @@ -146,7 +146,7 @@ type millisatoshi_per_byte = nat64; type node_metrics = record { node_id : principal; - num_blocks_total : nat64; + num_blocks_proposed_total : nat64; num_block_failures_total : nat64; }; diff --git a/ic/testdata/did/icpledger.did b/ic/testdata/did/icpledger.did index 124d40a..a7d4e63 100644 --- a/ic/testdata/did/icpledger.did +++ b/ic/testdata/did/icpledger.did @@ -425,6 +425,62 @@ type TransferFromError = variant { GenericError : record { error_code : nat; message : text }; }; +type icrc21_consent_message_metadata = record { + language: text; +}; + +type icrc21_consent_message_spec = record { + metadata: icrc21_consent_message_metadata; + device_spec: opt variant { + GenericDisplay; + LineDisplay: record { + characters_per_line: nat16; + lines_per_page: nat16; + }; + }; +}; + +type icrc21_consent_message_request = record { + method: text; + arg: blob; + user_preferences: icrc21_consent_message_spec; +}; + +type icrc21_consent_message = variant { + GenericDisplayMessage: text; + LineDisplayMessage: record { + pages: vec record { + lines: vec text; + }; + }; +}; + +type icrc21_consent_info = record { + consent_message: icrc21_consent_message; + metadata: icrc21_consent_message_metadata; +}; + +type icrc21_error_info = record { + description: text; +}; + +type icrc21_error = variant { + UnsupportedCanisterCall: icrc21_error_info; + ConsentMessageUnavailable: icrc21_error_info; + InsufficientPayment: icrc21_error_info; + + // Any error not covered by the above variants. + GenericError: record { + error_code: nat; + description: text; + }; +}; + +type icrc21_consent_message_response = variant { + Ok: icrc21_consent_info; + Err: icrc21_error; +}; + service: (LedgerCanisterPayload) -> { // Transfers tokens from a subaccount of the caller to the destination address. // The source address is computed from the principal of the caller and the specified subaccount. @@ -476,4 +532,7 @@ service: (LedgerCanisterPayload) -> { icrc2_approve : (ApproveArgs) -> (ApproveResult); icrc2_allowance : (AllowanceArgs) -> (Allowance) query; icrc2_transfer_from : (TransferFromArgs) -> (TransferFromResult); + + icrc21_canister_call_consent_message: (icrc21_consent_message_request) -> (icrc21_consent_message_response); + icrc10_supported_standards : () -> (vec record { name : text; url : text }) query; } diff --git a/ic/testdata/did/registry.did b/ic/testdata/did/registry.did index 419966b..c6b4726 100644 --- a/ic/testdata/did/registry.did +++ b/ic/testdata/did/registry.did @@ -1,13 +1,25 @@ +// A brief note about the history of this file: This file used to be +// automatically generated, but now, it is hand-crafted, because the +// auto-generator has some some pretty degenerate behaviors. The worst of those +// behaviors are 1. type conflation 2. (unstable) numeric suffixes. These +// behaviors made it impractical for clients to do the right thing: program +// against registry.did (by using `didc bind`). +// +// test_implementated_interface_matches_declared_interface_exactly (defined in +// ./tests.rs) ensures that the implementation stays in sync with this file. + type AddApiBoundaryNodesPayload = record { version : text; node_ids : vec principal; }; + type AddFirewallRulesPayload = record { expected_hash : text; scope : FirewallRulesScope; positions : vec int32; rules : vec FirewallRule; }; + type AddNodeOperatorPayload = record { ipv6 : opt text; node_operator_principal_id : opt principal; @@ -16,6 +28,7 @@ type AddNodeOperatorPayload = record { node_provider_principal_id : opt principal; dc_id : text; }; + type AddNodePayload = record { prometheus_metrics_endpoint : text; http_endpoint : text; @@ -30,14 +43,17 @@ type AddNodePayload = record { ni_dkg_dealing_encryption_pk : blob; p2p_flow_endpoints : vec text; }; + type AddNodesToSubnetPayload = record { subnet_id : principal; node_ids : vec principal; }; + type AddOrRemoveDataCentersProposalPayload = record { data_centers_to_add : vec DataCenterRecord; data_centers_to_remove : vec text; }; + type BlessReplicaVersionPayload = record { release_package_urls : opt vec text; node_manager_sha256_hex : text; @@ -49,16 +65,20 @@ type BlessReplicaVersionPayload = record { node_manager_binary_url : text; binary_url : text; }; + type CanisterIdRange = record { end : principal; start : principal }; + type ChangeSubnetMembershipPayload = record { node_ids_add : vec principal; subnet_id : principal; node_ids_remove : vec principal; }; + type CompleteCanisterMigrationPayload = record { canister_id_ranges : vec CanisterIdRange; migration_trace : vec principal; }; + type CreateSubnetPayload = record { unit_delay_millis : nat64; max_instructions_per_round : nat64; @@ -91,20 +111,25 @@ type CreateSubnetPayload = record { gossip_receive_check_cache_size : nat32; node_ids : vec principal; }; + type DataCenterRecord = record { id : text; gps : opt Gps; region : text; owner : text; }; + type DeleteSubnetPayload = record { subnet_id : opt principal }; + type DeployGuestosToAllSubnetNodesPayload = record { subnet_id : principal; replica_version_id : text; }; + type DeployGuestosToAllUnassignedNodesPayload = record { elected_replica_version : text; }; + type EcdsaConfig = record { quadruples_to_create_in_advance : nat32; max_queue_size : opt nat32; @@ -112,7 +137,9 @@ type EcdsaConfig = record { signature_request_timeout_ns : opt nat64; idkg_key_rotation_period_ms : opt nat64; }; + type EcdsaCurve = variant { secp256k1 }; + type EcdsaInitialConfig = record { quadruples_to_create_in_advance : nat32; max_queue_size : opt nat32; @@ -120,11 +147,14 @@ type EcdsaInitialConfig = record { signature_request_timeout_ns : opt nat64; idkg_key_rotation_period_ms : opt nat64; }; + type EcdsaKeyId = record { name : text; curve : EcdsaCurve }; + type EcdsaKeyRequest = record { key_id : EcdsaKeyId; subnet_id : opt principal; }; + type FirewallRule = record { ipv4_prefixes : vec text; direction : opt int32; @@ -134,6 +164,7 @@ type FirewallRule = record { ipv6_prefixes : vec text; ports : vec nat32; }; + type FirewallRulesScope = variant { Node : principal; ReplicaNodes; @@ -141,14 +172,19 @@ type FirewallRulesScope = variant { Subnet : principal; Global; }; + type GetSubnetForCanisterRequest = record { "principal" : opt principal }; + type GetSubnetForCanisterResponse = record { subnet_id : opt principal }; + type Gps = record { latitude : float32; longitude : float32 }; + type IPv4Config = record { prefix_length : nat32; gateway_ip_addr : text; ip_addr : text; }; + type NodeOperatorRecord = record { ipv6 : opt text; node_operator_principal_id : blob; @@ -157,19 +193,24 @@ type NodeOperatorRecord = record { node_provider_principal_id : blob; dc_id : text; }; + type NodeProvidersMonthlyXdrRewards = record { rewards : vec record { text; nat64 }; }; + type NodeRewardRate = record { xdr_permyriad_per_node_per_month : nat64; reward_coefficient_percent : opt int32; }; + type NodeRewardRates = record { rates : vec record { text; NodeRewardRate } }; + type PrepareCanisterMigrationPayload = record { canister_id_ranges : vec CanisterIdRange; source_subnet : principal; destination_subnet : principal; }; + type RecoverSubnetPayload = record { height : nat64; replacement_nodes : opt vec principal; @@ -179,31 +220,44 @@ type RecoverSubnetPayload = record { state_hash : blob; time_ns : nat64; }; + type RemoveApiBoundaryNodesPayload = record { node_ids : vec principal }; + type RemoveFirewallRulesPayload = record { expected_hash : text; scope : FirewallRulesScope; positions : vec int32; }; + type RemoveNodeDirectlyPayload = record { node_id : principal }; + type RemoveNodeOperatorsPayload = record { node_operators_to_remove : vec blob; }; + type RemoveNodesPayload = record { node_ids : vec principal }; + type RerouteCanisterRangesPayload = record { source_subnet : principal; reassigned_canister_ranges : vec CanisterIdRange; destination_subnet : principal; }; + type Result = variant { Ok : principal; Err : text }; + type Result_1 = variant { Ok; Err : text }; + type Result_2 = variant { Ok : vec record { DataCenterRecord; NodeOperatorRecord }; Err : text; }; + type Result_3 = variant { Ok : NodeProvidersMonthlyXdrRewards; Err : text }; + type Result_4 = variant { Ok : GetSubnetForCanisterResponse; Err : text }; + type RetireReplicaVersionPayload = record { replica_version_ids : vec text }; + type ReviseElectedGuestosVersionsPayload = record { release_package_urls : vec text; replica_versions_to_unelect : vec text; @@ -211,38 +265,47 @@ type ReviseElectedGuestosVersionsPayload = record { guest_launch_measurement_sha256_hex : opt text; release_package_sha256_hex : opt text; }; + type SetFirewallConfigPayload = record { ipv4_prefixes : vec text; firewall_config : text; ipv6_prefixes : vec text; }; + type SubnetFeatures = record { canister_sandboxing : bool; http_requests : bool; sev_enabled : opt bool; }; + type SubnetType = variant { application; verified_application; system }; + type UpdateElectedHostosVersionsPayload = record { release_package_urls : vec text; hostos_version_to_elect : opt text; hostos_versions_to_unelect : vec text; release_package_sha256_hex : opt text; }; + type UpdateNodeDirectlyPayload = record { idkg_dealing_encryption_pk : opt blob; }; + type UpdateNodeDomainDirectlyPayload = record { node_id : principal; domain : opt text; }; + type UpdateNodeIPv4ConfigDirectlyPayload = record { ipv4_config : opt IPv4Config; node_id : principal; }; + type UpdateNodeOperatorConfigDirectlyPayload = record { node_operator_id : opt principal; node_provider_id : opt principal; }; + type UpdateNodeOperatorConfigPayload = record { node_operator_id : opt principal; set_ipv6_to_none : opt bool; @@ -252,16 +315,20 @@ type UpdateNodeOperatorConfigPayload = record { rewardable_nodes : vec record { text; nat32 }; dc_id : opt text; }; + type UpdateNodeRewardsTableProposalPayload = record { new_entries : vec record { text; NodeRewardRates }; }; + type UpdateNodesHostosVersionPayload = record { hostos_version_id : opt text; node_ids : vec principal; }; + type UpdateSshReadOnlyAccessForAllUnassignedNodesPayload = record { ssh_readonly_keys : vec text; }; + type UpdateSubnetPayload = record { unit_delay_millis : opt nat64; max_duplicity : opt nat32; @@ -295,10 +362,12 @@ type UpdateSubnetPayload = record { subnet_type : opt SubnetType; ssh_readonly_access : opt vec text; }; + type UpdateUnassignedNodesConfigPayload = record { replica_version : opt text; ssh_readonly_access : opt vec text; }; + service : { add_api_boundary_nodes : (AddApiBoundaryNodesPayload) -> (); add_firewall_rules : (AddFirewallRulesPayload) -> (); @@ -357,4 +426,4 @@ service : { update_subnet : (UpdateSubnetPayload) -> (); update_subnet_replica_version : (DeployGuestosToAllSubnetNodesPayload) -> (); update_unassigned_nodes_config : (UpdateUnassignedNodesConfigPayload) -> (); -} \ No newline at end of file +} diff --git a/registry/client.go b/registry/client.go index 5c65430..e4b8b4e 100644 --- a/registry/client.go +++ b/registry/client.go @@ -3,6 +3,7 @@ package registry import ( "bytes" "fmt" + "github.com/aviate-labs/agent-go/certification" "github.com/aviate-labs/agent-go/principal" v1 "github.com/aviate-labs/agent-go/registry/proto/v1" "google.golang.org/protobuf/proto" @@ -62,6 +63,84 @@ func (c *Client) GetNodeList() ([]*v1.NodeRecord, error) { return nodes, nil } +func (c *Client) GetNodeListSince(version uint64) (map[string]NodeDetails, error) { + nnsSubnetID, err := c.GetNNSSubnetID() + if err != nil { + return nil, err + } + nnsPublicKey, err := c.GetSubnetPublicKey(*nnsSubnetID) + if err != nil { + return nil, err + } + + latestVersion, err := c.dp.GetLatestVersion() + if err != nil { + return nil, err + } + + currentVersion := version + nodeMap := make(map[string]*v1.NodeRecord) + nodeOperatorMap := make(map[string]*v1.NodeOperatorRecord) + for { + records, _, err := c.dp.GetCertifiedChangesSince(currentVersion, nnsPublicKey) + if err != nil { + return nil, err + } + currentVersion = records[len(records)-1].Version + for _, record := range records { + if strings.HasPrefix(record.Key, "node_record_") { + var nodeRecord v1.NodeRecord + if err := proto.Unmarshal(record.Value, &nodeRecord); err != nil { + return nil, err + } + nodeMap[strings.TrimPrefix(record.Key, "node_record_")] = &nodeRecord + } else if strings.HasPrefix(record.Key, "node_operator_record_") { + var nodeOperatorRecord v1.NodeOperatorRecord + if err := proto.Unmarshal(record.Value, &nodeOperatorRecord); err != nil { + return nil, err + } + nodeOperatorMap[strings.TrimPrefix(record.Key, "node_operator_record_")] = &nodeOperatorRecord + } + } + if currentVersion >= latestVersion { + break + } + } + + nodeDetailsMap := make(map[string]NodeDetails) + for key, nodeRecord := range nodeMap { + nodeOperatorID := principal.Principal{Raw: nodeRecord.NodeOperatorId} + var nodeProviderID principal.Principal + var dcID string + if no, ok := nodeOperatorMap[nodeOperatorID.String()]; ok { + nodeProviderID = principal.Principal{Raw: no.NodeOperatorPrincipalId} + dcID = no.DcId + } + var ipv6 string + if nodeRecord.Http != nil { + ipv6 = nodeRecord.Http.IpAddr + } + var ipv4 *IPv4Interface + if nodeRecord.PublicIpv4Config != nil { + ipv4 = &IPv4Interface{ + Address: nodeRecord.PublicIpv4Config.IpAddr, + Gateways: nodeRecord.PublicIpv4Config.GatewayIpAddr, + PrefixLength: nodeRecord.PublicIpv4Config.PrefixLength, + } + } + nodeDetailsMap[key] = NodeDetails{ + IPv6: ipv6, + IPv4: ipv4, + NodeProviderID: nodeProviderID, + NodeOperatorID: nodeOperatorID, + DCID: dcID, + HostOSVersionID: nodeRecord.HostosVersionId, + Domain: nodeRecord.Domain, + } + } + return nodeDetailsMap, 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 { @@ -89,3 +168,34 @@ func (c *Client) GetSubnetIDs() ([]principal.Principal, error) { } return subnets, nil } + +func (c *Client) GetSubnetPublicKey(subnetID principal.Principal) ([]byte, error) { + v, _, err := c.dp.GetValueUpdate([]byte(fmt.Sprintf("crypto_threshold_signing_public_key_%s", subnetID)), nil) + if err != nil { + return nil, err + } + var publicKey v1.PublicKey + if err := proto.Unmarshal(v, &publicKey); err != nil { + return nil, err + } + if publicKey.Algorithm != v1.AlgorithmId_ALGORITHM_ID_THRES_BLS12_381 { + return nil, fmt.Errorf("unsupported public key algorithm") + } + return certification.PublicKeyToDER(publicKey.KeyValue) +} + +type IPv4Interface struct { + Address string + Gateways []string + PrefixLength uint32 +} + +type NodeDetails struct { + IPv6 string + IPv4 *IPv4Interface + NodeOperatorID principal.Principal + NodeProviderID principal.Principal + DCID string + HostOSVersionID *string + Domain *string +} diff --git a/registry/dataprovider.go b/registry/dataprovider.go index 00c526e..d7514ec 100644 --- a/registry/dataprovider.go +++ b/registry/dataprovider.go @@ -1,10 +1,17 @@ package registry import ( + "bytes" + "encoding/binary" "fmt" "github.com/aviate-labs/agent-go" + "github.com/aviate-labs/agent-go/certification" + "github.com/aviate-labs/agent-go/certification/hashtree" "github.com/aviate-labs/agent-go/ic" "github.com/aviate-labs/agent-go/registry/proto/v1" + "github.com/aviate-labs/leb128" + "github.com/fxamacker/cbor/v2" + "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/known/wrapperspb" ) @@ -20,6 +27,84 @@ func NewDataProvider() (*DataProvider, error) { return &DataProvider{a: a}, nil } +func (d DataProvider) GetCertifiedChangesSince(version uint64, publicKey []byte) ([]VersionedRecord, uint64, error) { + var resp v1.CertifiedResponse + if err := d.a.QueryProto( + ic.REGISTRY_PRINCIPAL, + "get_certified_changes_since", + &v1.RegistryGetChangesSinceRequest{ + Version: version, + }, + &resp, + ); err != nil { + return nil, 0, err + } + ht, err := NewHashTree(resp.HashTree) + if err != nil { + return nil, 0, err + } + rawCurrentVersion, err := ht.Lookup(hashtree.Label("current_version")) + if err != nil { + return nil, 0, err + } + currentVersion, err := leb128.DecodeUnsigned(bytes.NewReader(rawCurrentVersion)) + if err != nil { + return nil, 0, err + } + + deltaNodes, err := ht.LookupSubTree(hashtree.Label("delta")) + if err != nil { + return nil, 0, err + } + rawDeltas, err := hashtree.AllChildren(deltaNodes) + if err != nil { + return nil, 0, err + } + + var deltas []VersionedRecord + lastVersion := version + for _, delta := range rawDeltas { + req := new(v1.RegistryAtomicMutateRequest) + if err := proto.Unmarshal(delta.Value, req); err != nil { + return nil, 0, err + } + + v := binary.BigEndian.Uint64(delta.Path[0]) + if v != lastVersion+1 { + return nil, 0, fmt.Errorf("unexpected version: %d", v) + } + lastVersion = v + + for _, m := range req.Mutations { + var value []byte + if m.MutationType != v1.RegistryMutation_DELETE { + value = m.Value + } + deltas = append(deltas, VersionedRecord{ + Key: string(m.Key), + Version: v, + Value: value, + }) + } + } + + var certificate certification.Certificate + if err := cbor.Unmarshal(resp.Certificate, &certificate); err != nil { + return nil, 0, err + } + digest := ht.Digest() + if err := certification.VerifyCertifiedData( + certificate, + ic.REGISTRY_PRINCIPAL, + publicKey, + digest[:], + ); err != nil { + return nil, 0, err + } + + return deltas, currentVersion.Uint64(), nil +} + // GetChangesSince returns the changes since the given version. func (d DataProvider) GetChangesSince(version uint64) ([]*v1.RegistryDelta, uint64, error) { var resp v1.RegistryGetChangesSinceResponse @@ -39,6 +124,19 @@ func (d DataProvider) GetChangesSince(version uint64) ([]*v1.RegistryDelta, uint return resp.Deltas, resp.Version, nil } +func (d DataProvider) GetLatestVersion() (uint64, error) { + var resp v1.RegistryGetLatestVersionResponse + if err := d.a.QueryProto( + ic.REGISTRY_PRINCIPAL, + "get_latest_version", + nil, + &resp, + ); err != nil { + return 0, err + } + return 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) { @@ -87,3 +185,9 @@ func (d DataProvider) GetValueUpdate(key []byte, version *uint64) ([]byte, uint6 } return resp.Value, resp.Version, nil } + +type VersionedRecord struct { + Key string + Version uint64 + Value []byte +} diff --git a/registry/dataprovider_test.go b/registry/dataprovider_test.go index c883980..47550a3 100644 --- a/registry/dataprovider_test.go +++ b/registry/dataprovider_test.go @@ -9,7 +9,17 @@ func TestDataProvider_GetChangesSince(t *testing.T) { if err != nil { t.Fatal(err) } - if _, _, err := dp.GetChangesSince(0); err != nil { + if _, _, err = dp.GetChangesSince(0); err != nil { + t.Fatal(err) + } +} + +func TestDataProvider_GetLatestVersion(t *testing.T) { + dp, err := NewDataProvider() + if err != nil { + t.Fatal(err) + } + if _, err = dp.GetLatestVersion(); err != nil { t.Fatal(err) } } diff --git a/registry/hashtree.go b/registry/hashtree.go new file mode 100644 index 0000000..cc2337e --- /dev/null +++ b/registry/hashtree.go @@ -0,0 +1,53 @@ +package registry + +import ( + "fmt" + "github.com/aviate-labs/agent-go/certification/hashtree" + v1 "github.com/aviate-labs/agent-go/registry/proto/v1" +) + +func NewHashTree(tree *v1.MixedHashTree) (*hashtree.HashTree, error) { + root, err := newHashTree(tree) + if err != nil { + return nil, err + } + return &hashtree.HashTree{ + Root: root, + }, nil + +} + +func newHashTree(tree *v1.MixedHashTree) (hashtree.Node, error) { + switch t := tree.TreeEnum.(type) { + case *v1.MixedHashTree_Empty: + return hashtree.Empty{}, nil + case *v1.MixedHashTree_LeafData: + return hashtree.Leaf(t.LeafData), nil + case *v1.MixedHashTree_Labeled_: + n, err := newHashTree(t.Labeled.Subtree) + if err != nil { + return nil, err + } + return hashtree.Labeled{ + Label: t.Labeled.Label, + Tree: n, + }, nil + case *v1.MixedHashTree_Fork_: + left, err := newHashTree(t.Fork.LeftTree) + if err != nil { + return nil, err + } + right, err := newHashTree(t.Fork.RightTree) + if err != nil { + return nil, err + } + return hashtree.Fork{ + LeftTree: left, + RightTree: right, + }, nil + case *v1.MixedHashTree_PrunedDigest: + return hashtree.Pruned(t.PrunedDigest), nil + default: + return nil, fmt.Errorf("unsupported hash tree type: %T", tree.TreeEnum) + } +} diff --git a/registry/proto/v1/local.pb.go b/registry/proto/v1/local.pb.go index 5de8427..45b9a9a 100644 --- a/registry/proto/v1/local.pb.go +++ b/registry/proto/v1/local.pb.go @@ -105,6 +105,81 @@ var file_local_proto_rawDesc = []byte{ 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } +func file_local_proto_init() { + if File_local_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_local_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangelogEntry); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_local_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KeyMutation); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_local_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CertifiedTime); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_local_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Delta); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_local_proto_rawDesc, + NumEnums: 1, + NumMessages: 4, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_local_proto_goTypes, + DependencyIndexes: file_local_proto_depIdxs, + EnumInfos: file_local_proto_enumTypes, + MessageInfos: file_local_proto_msgTypes, + }.Build() + File_local_proto = out.File + file_local_proto_rawDesc = nil + file_local_proto_goTypes = nil + file_local_proto_depIdxs = nil +} + func file_local_proto_rawDescGZIP() []byte { file_local_proto_rawDescOnce.Do(func() { file_local_proto_rawDescData = protoimpl.X.CompressGZIP(file_local_proto_rawDescData) @@ -112,6 +187,8 @@ func file_local_proto_rawDescGZIP() []byte { return file_local_proto_rawDescData } +func init() { file_local_proto_init() } + // The time when the last certified update was successfully received. type CertifiedTime struct { state protoimpl.MessageState @@ -348,13 +425,11 @@ const ( func (MutationType) Descriptor() protoreflect.EnumDescriptor { return file_local_proto_enumTypes[0].Descriptor() } - func (x MutationType) Enum() *MutationType { p := new(MutationType) *p = x return p } - // Deprecated: Use MutationType.Descriptor instead. func (MutationType) EnumDescriptor() ([]byte, []int) { return file_local_proto_rawDescGZIP(), []int{0} @@ -362,85 +437,10 @@ func (MutationType) EnumDescriptor() ([]byte, []int) { func (x MutationType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } + func (x MutationType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (MutationType) Type() protoreflect.EnumType { return &file_local_proto_enumTypes[0] } - -func init() { file_local_proto_init() } -func file_local_proto_init() { - if File_local_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_local_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangelogEntry); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_local_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KeyMutation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_local_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CertifiedTime); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_local_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Delta); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_local_proto_rawDesc, - NumEnums: 1, - NumMessages: 4, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_local_proto_goTypes, - DependencyIndexes: file_local_proto_depIdxs, - EnumInfos: file_local_proto_enumTypes, - MessageInfos: file_local_proto_msgTypes, - }.Build() - File_local_proto = out.File - file_local_proto_rawDesc = nil - file_local_proto_goTypes = nil - file_local_proto_depIdxs = nil -} diff --git a/registry/proto/v1/registry.pb.go b/registry/proto/v1/registry.pb.go index 99341d5..08380d2 100644 --- a/registry/proto/v1/registry.pb.go +++ b/registry/proto/v1/registry.pb.go @@ -70,6 +70,56 @@ var file_registry_proto_rawDesc = []byte{ 0x6f, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } +func file_registry_proto_init() { + if File_registry_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_registry_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProtoRegistry); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProtoRegistryRecord); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_registry_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_registry_proto_goTypes, + DependencyIndexes: file_registry_proto_depIdxs, + MessageInfos: file_registry_proto_msgTypes, + }.Build() + File_registry_proto = out.File + file_registry_proto_rawDesc = nil + file_registry_proto_goTypes = nil + file_registry_proto_depIdxs = nil +} + func file_registry_proto_rawDescGZIP() []byte { file_registry_proto_rawDescOnce.Do(func() { file_registry_proto_rawDescData = protoimpl.X.CompressGZIP(file_registry_proto_rawDescData) @@ -77,6 +127,8 @@ func file_registry_proto_rawDescGZIP() []byte { return file_registry_proto_rawDescData } +func init() { file_registry_proto_init() } + type ProtoRegistry struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -159,9 +211,7 @@ func (x *ProtoRegistryRecord) GetVersion() uint64 { } return 0 } - func (*ProtoRegistryRecord) ProtoMessage() {} - func (x *ProtoRegistryRecord) ProtoReflect() protoreflect.Message { mi := &file_registry_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { @@ -173,6 +223,7 @@ func (x *ProtoRegistryRecord) ProtoReflect() protoreflect.Message { } return mi.MessageOf(x) } + func (x *ProtoRegistryRecord) Reset() { *x = ProtoRegistryRecord{} if protoimpl.UnsafeEnabled { @@ -184,54 +235,3 @@ func (x *ProtoRegistryRecord) Reset() { func (x *ProtoRegistryRecord) String() string { return protoimpl.X.MessageStringOf(x) } - -func init() { file_registry_proto_init() } -func file_registry_proto_init() { - if File_registry_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_registry_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProtoRegistry); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProtoRegistryRecord); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_registry_proto_rawDesc, - NumEnums: 0, - NumMessages: 2, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_registry_proto_goTypes, - DependencyIndexes: file_registry_proto_depIdxs, - MessageInfos: file_registry_proto_msgTypes, - }.Build() - File_registry_proto = out.File - file_registry_proto_rawDesc = nil - file_registry_proto_goTypes = nil - file_registry_proto_depIdxs = nil -} diff --git a/registry/proto/v1/subnet.pb.go b/registry/proto/v1/subnet.pb.go index 56a6fdc..0b67deb 100644 --- a/registry/proto/v1/subnet.pb.go +++ b/registry/proto/v1/subnet.pb.go @@ -153,60 +153,63 @@ var ( 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 + 30, // 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 + 31, // 2: registry.subnet.v1.SubnetRecord.features:type_name -> registry.subnet.v1.SubnetFeatures + 32, // 3: registry.subnet.v1.SubnetRecord.ecdsa_config:type_name -> registry.subnet.v1.EcdsaConfig + 36, // 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 + 26, // 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 + 37, // 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 + 25, // 17: registry.subnet.v1.VerifiedIDkgDealing.signed_dealing_tuple:type_name -> registry.subnet.v1.IDkgSignedDealingTuple + 22, // 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 + 2, // 20: registry.subnet.v1.PublicKey.algorithm:type_name -> registry.subnet.v1.AlgorithmId + 37, // 21: registry.subnet.v1.PublicKey.proof_data:type_name -> google.protobuf.BytesValue + 38, // 22: registry.subnet.v1.PublicKey.timestamp:type_name -> google.protobuf.UInt64Value + 16, // 23: registry.subnet.v1.IDkgTranscript.transcript_id:type_name -> registry.subnet.v1.IDkgTranscriptId + 18, // 24: registry.subnet.v1.IDkgTranscript.dealers:type_name -> registry.subnet.v1.NodeId + 18, // 25: registry.subnet.v1.IDkgTranscript.receivers:type_name -> registry.subnet.v1.NodeId + 17, // 26: registry.subnet.v1.IDkgTranscript.verified_dealings:type_name -> registry.subnet.v1.VerifiedIDkgDealing + 2, // 27: registry.subnet.v1.IDkgTranscript.algorithm_id:type_name -> registry.subnet.v1.AlgorithmId + 18, // 28: registry.subnet.v1.DealerTuple.dealer_id:type_name -> registry.subnet.v1.NodeId + 18, // 29: registry.subnet.v1.SignatureTuple.signer:type_name -> registry.subnet.v1.NodeId + 16, // 30: registry.subnet.v1.IDkgTranscriptParams.transcript_id:type_name -> registry.subnet.v1.IDkgTranscriptId + 21, // 31: registry.subnet.v1.IDkgTranscriptParams.dealers:type_name -> registry.subnet.v1.DealerTuple + 18, // 32: registry.subnet.v1.IDkgTranscriptParams.receivers:type_name -> registry.subnet.v1.NodeId + 2, // 33: registry.subnet.v1.IDkgTranscriptParams.algorithm_id:type_name -> registry.subnet.v1.AlgorithmId + 3, // 34: registry.subnet.v1.IDkgTranscriptParams.idkg_transcript_operation:type_name -> registry.subnet.v1.IDkgTranscriptOperation + 20, // 35: registry.subnet.v1.IDkgTranscriptParams.idkg_transcript_operation_args:type_name -> registry.subnet.v1.IDkgTranscript + 16, // 36: registry.subnet.v1.IDkgDealing.transcript_id:type_name -> registry.subnet.v1.IDkgTranscriptId + 18, // 37: registry.subnet.v1.IDkgSignedDealingTuple.dealer:type_name -> registry.subnet.v1.NodeId + 24, // 38: registry.subnet.v1.IDkgSignedDealingTuple.dealing:type_name -> registry.subnet.v1.IDkgDealing + 23, // 39: registry.subnet.v1.InitialIDkgDealings.params:type_name -> registry.subnet.v1.IDkgTranscriptParams + 25, // 40: registry.subnet.v1.InitialIDkgDealings.signed_dealings:type_name -> registry.subnet.v1.IDkgSignedDealingTuple + 16, // 41: registry.subnet.v1.IDkgComplaint.transcript_id:type_name -> registry.subnet.v1.IDkgTranscriptId + 18, // 42: registry.subnet.v1.IDkgComplaint.dealer:type_name -> registry.subnet.v1.NodeId + 16, // 43: registry.subnet.v1.IDkgOpening.transcript_id:type_name -> registry.subnet.v1.IDkgTranscriptId + 18, // 44: registry.subnet.v1.IDkgOpening.dealer:type_name -> registry.subnet.v1.NodeId + 14, // 45: registry.subnet.v1.ExtendedDerivationPath.caller:type_name -> registry.subnet.v1.PrincipalId + 7, // 46: registry.subnet.v1.EcdsaConfig.key_ids:type_name -> registry.subnet.v1.EcdsaKeyId + 5, // 47: registry.subnet.v1.SchnorrKeyId.algorithm:type_name -> registry.subnet.v1.SchnorrAlgorithm + 7, // 48: registry.subnet.v1.MasterPublicKeyId.ecdsa:type_name -> registry.subnet.v1.EcdsaKeyId + 33, // 49: registry.subnet.v1.MasterPublicKeyId.schnorr:type_name -> registry.subnet.v1.SchnorrKeyId + 34, // 50: registry.subnet.v1.KeyConfig.key_id:type_name -> registry.subnet.v1.MasterPublicKeyId + 35, // 51: registry.subnet.v1.ChainKeyConfig.key_configs:type_name -> registry.subnet.v1.KeyConfig + 52, // [52:52] is the sub-list for method output_type + 52, // [52:52] is the sub-list for method input_type + 52, // [52:52] is the sub-list for extension type_name + 52, // [52:52] is the sub-list for extension extendee + 0, // [0:52] is the sub-list for field type_name } var file_subnet_proto_enumTypes = make([]protoimpl.EnumInfo, 6) @@ -231,27 +234,29 @@ var file_subnet_proto_goTypes = []interface{}{ (*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) + (*PublicKey)(nil), // 19: registry.subnet.v1.PublicKey + (*IDkgTranscript)(nil), // 20: registry.subnet.v1.IDkgTranscript + (*DealerTuple)(nil), // 21: registry.subnet.v1.DealerTuple + (*SignatureTuple)(nil), // 22: registry.subnet.v1.SignatureTuple + (*IDkgTranscriptParams)(nil), // 23: registry.subnet.v1.IDkgTranscriptParams + (*IDkgDealing)(nil), // 24: registry.subnet.v1.IDkgDealing + (*IDkgSignedDealingTuple)(nil), // 25: registry.subnet.v1.IDkgSignedDealingTuple + (*InitialIDkgDealings)(nil), // 26: registry.subnet.v1.InitialIDkgDealings + (*IDkgComplaint)(nil), // 27: registry.subnet.v1.IDkgComplaint + (*IDkgOpening)(nil), // 28: registry.subnet.v1.IDkgOpening + (*ExtendedDerivationPath)(nil), // 29: registry.subnet.v1.ExtendedDerivationPath + (*GossipConfig)(nil), // 30: registry.subnet.v1.GossipConfig + (*SubnetFeatures)(nil), // 31: registry.subnet.v1.SubnetFeatures + (*EcdsaConfig)(nil), // 32: registry.subnet.v1.EcdsaConfig + (*SchnorrKeyId)(nil), // 33: registry.subnet.v1.SchnorrKeyId + (*MasterPublicKeyId)(nil), // 34: registry.subnet.v1.MasterPublicKeyId + (*KeyConfig)(nil), // 35: registry.subnet.v1.KeyConfig + (*ChainKeyConfig)(nil), // 36: registry.subnet.v1.ChainKeyConfig + (*wrapperspb.BytesValue)(nil), // 37: google.protobuf.BytesValue + (*wrapperspb.UInt64Value)(nil), // 38: google.protobuf.UInt64Value +} + +var file_subnet_proto_msgTypes = make([]protoimpl.MessageInfo, 31) var file_subnet_proto_rawDesc = []byte{ 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, @@ -474,117 +479,144 @@ var file_subnet_proto_rawDesc = []byte{ 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, + 0x52, 0x0b, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x49, 0x64, 0x22, 0xf9, 0x01, + 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 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, 0x3d, 0x0a, 0x09, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, + 0x68, 0x6d, 0x18, 0x02, 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, 0x09, 0x61, 0x6c, 0x67, 0x6f, 0x72, + 0x69, 0x74, 0x68, 0x6d, 0x12, 0x1b, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x3a, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x04, 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, 0x09, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3a, 0x0a, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 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, 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, + 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, 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, + 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, 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, + 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, 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, + 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, @@ -592,786 +624,677 @@ var file_subnet_proto_rawDesc = []byte{ 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, + 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, 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, + 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, 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, + 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, - 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, + 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, 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, + 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 +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 +} + +// 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 } - 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 - } + 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) } - 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 - } + 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{30} +} + +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[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - 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 - } + return ms + } + return mi.MessageOf(x) +} + +func (x *ChainKeyConfig) Reset() { + *x = ChainKeyConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[30] + 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{15} +} + +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[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } - 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 - } + return ms + } + return mi.MessageOf(x) +} + +func (x *DealerTuple) Reset() { + *x = DealerTuple{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[15] + 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{26} +} + +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[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - 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), + return mi.MessageOf(x) +} + +func (x *EcdsaConfig) Reset() { + *x = EcdsaConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - 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 (x *EcdsaConfig) String() string { + return protoimpl.X.MessageStringOf(x) } -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 +// Types of curves that can be used for ECDSA signatures. +type EcdsaCurve 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 + EcdsaCurve_ECDSA_CURVE_UNSPECIFIED EcdsaCurve = 0 + EcdsaCurve_ECDSA_CURVE_SECP256K1 EcdsaCurve = 1 ) -func (AlgorithmId) Descriptor() protoreflect.EnumDescriptor { - return file_subnet_proto_enumTypes[2].Descriptor() +func (EcdsaCurve) Descriptor() protoreflect.EnumDescriptor { + return file_subnet_proto_enumTypes[0].Descriptor() } -func (x AlgorithmId) Enum() *AlgorithmId { - p := new(AlgorithmId) +func (x EcdsaCurve) Enum() *EcdsaCurve { + p := new(EcdsaCurve) *p = x return p } -// Deprecated: Use AlgorithmId.Descriptor instead. -func (AlgorithmId) EnumDescriptor() ([]byte, []int) { - return file_subnet_proto_rawDescGZIP(), []int{2} +// Deprecated: Use EcdsaCurve.Descriptor instead. +func (EcdsaCurve) EnumDescriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{0} } -func (x AlgorithmId) Number() protoreflect.EnumNumber { +func (x EcdsaCurve) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } -func (x AlgorithmId) String() string { +func (x EcdsaCurve) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (AlgorithmId) Type() protoreflect.EnumType { - return &file_subnet_proto_enumTypes[2] +func (EcdsaCurve) Type() protoreflect.EnumType { + return &file_subnet_proto_enumTypes[0] } -// 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 { +type EcdsaInitialization 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 + 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"` } -func (x *CatchUpPackageContents) GetInitialNiDkgTranscriptLowThreshold() *InitialNiDkgTranscriptRecord { - if x != nil { - return x.InitialNiDkgTranscriptLowThreshold - } - return nil +// Deprecated: Use EcdsaInitialization.ProtoReflect.Descriptor instead. +func (*EcdsaInitialization) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{2} } -func (x *CatchUpPackageContents) GetRegistryStoreUri() *RegistryStoreUri { +func (x *EcdsaInitialization) GetDealings() *InitialIDkgDealings { if x != nil { - return x.RegistryStoreUri + return x.Dealings } return nil } -func (x *CatchUpPackageContents) GetStateHash() []byte { +func (x *EcdsaInitialization) GetKeyId() *EcdsaKeyId { if x != nil { - return x.StateHash + return x.KeyId } return nil } -func (x *CatchUpPackageContents) GetTime() uint64 { - if x != nil { - return x.Time - } - return 0 -} - -func (*CatchUpPackageContents) ProtoMessage() {} +func (*EcdsaInitialization) ProtoMessage() {} -func (x *CatchUpPackageContents) ProtoReflect() protoreflect.Message { - mi := &file_subnet_proto_msgTypes[3] +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 { @@ -1382,64 +1305,51 @@ func (x *CatchUpPackageContents) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -func (x *CatchUpPackageContents) Reset() { - *x = CatchUpPackageContents{} +func (x *EcdsaInitialization) Reset() { + *x = EcdsaInitialization{} if protoimpl.UnsafeEnabled { - mi := &file_subnet_proto_msgTypes[3] + mi := &file_subnet_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *CatchUpPackageContents) String() string { +func (x *EcdsaInitialization) String() string { return protoimpl.X.MessageStringOf(x) } -// Per-subnet chain key configuration -type ChainKeyConfig struct { +type EcdsaKeyId 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} + 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"` } -func (x *ChainKeyConfig) GetIdkgKeyRotationPeriodMs() uint64 { - if x != nil && x.IdkgKeyRotationPeriodMs != nil { - return *x.IdkgKeyRotationPeriodMs - } - return 0 +// Deprecated: Use EcdsaKeyId.ProtoReflect.Descriptor instead. +func (*EcdsaKeyId) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{1} } -func (x *ChainKeyConfig) GetKeyConfigs() []*KeyConfig { +func (x *EcdsaKeyId) GetCurve() EcdsaCurve { if x != nil { - return x.KeyConfigs + return x.Curve } - return nil + return EcdsaCurve_ECDSA_CURVE_UNSPECIFIED } -func (x *ChainKeyConfig) GetSignatureRequestTimeoutNs() uint64 { - if x != nil && x.SignatureRequestTimeoutNs != nil { - return *x.SignatureRequestTimeoutNs +func (x *EcdsaKeyId) GetName() string { + if x != nil { + return x.Name } - return 0 + return "" } -func (*ChainKeyConfig) ProtoMessage() {} +func (*EcdsaKeyId) ProtoMessage() {} -func (x *ChainKeyConfig) ProtoReflect() protoreflect.Message { - mi := &file_subnet_proto_msgTypes[29] +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 { @@ -1450,51 +1360,51 @@ func (x *ChainKeyConfig) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -func (x *ChainKeyConfig) Reset() { - *x = ChainKeyConfig{} +func (x *EcdsaKeyId) Reset() { + *x = EcdsaKeyId{} if protoimpl.UnsafeEnabled { - mi := &file_subnet_proto_msgTypes[29] + mi := &file_subnet_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ChainKeyConfig) String() string { +func (x *EcdsaKeyId) String() string { return protoimpl.X.MessageStringOf(x) } -type DealerTuple struct { +type ExtendedDerivationPath 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"` + 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 DealerTuple.ProtoReflect.Descriptor instead. -func (*DealerTuple) Descriptor() ([]byte, []int) { - return file_subnet_proto_rawDescGZIP(), []int{14} +// Deprecated: Use ExtendedDerivationPath.ProtoReflect.Descriptor instead. +func (*ExtendedDerivationPath) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{23} } -func (x *DealerTuple) GetDealerId() *NodeId { +func (x *ExtendedDerivationPath) GetCaller() *PrincipalId { if x != nil { - return x.DealerId + return x.Caller } return nil } -func (x *DealerTuple) GetDealerIndex() uint32 { +func (x *ExtendedDerivationPath) GetDerivationPath() [][]byte { if x != nil { - return x.DealerIndex + return x.DerivationPath } - return 0 + return nil } -func (*DealerTuple) ProtoMessage() {} +func (*ExtendedDerivationPath) ProtoMessage() {} -func (x *DealerTuple) ProtoReflect() protoreflect.Message { - mi := &file_subnet_proto_msgTypes[14] +func (x *ExtendedDerivationPath) 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 { @@ -1505,84 +1415,109 @@ func (x *DealerTuple) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -func (x *DealerTuple) Reset() { - *x = DealerTuple{} +func (x *ExtendedDerivationPath) Reset() { + *x = ExtendedDerivationPath{} if protoimpl.UnsafeEnabled { - mi := &file_subnet_proto_msgTypes[14] + mi := &file_subnet_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *DealerTuple) String() string { +func (x *ExtendedDerivationPath) String() string { return protoimpl.X.MessageStringOf(x) } -// Per subnet ECDSA configuration -// -// Deprecated; please use ChainKeyConfig instead. -type EcdsaConfig struct { +// 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 - // 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"` + // 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 EcdsaConfig.ProtoReflect.Descriptor instead. -func (*EcdsaConfig) Descriptor() ([]byte, []int) { - return file_subnet_proto_rawDescGZIP(), []int{25} +// Deprecated: Use GossipConfig.ProtoReflect.Descriptor instead. +func (*GossipConfig) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{24} } -func (x *EcdsaConfig) GetIdkgKeyRotationPeriodMs() uint64 { - if x != nil && x.IdkgKeyRotationPeriodMs != nil { - return *x.IdkgKeyRotationPeriodMs +func (x *GossipConfig) GetMaxArtifactStreamsPerPeer() uint32 { + if x != nil { + return x.MaxArtifactStreamsPerPeer } return 0 } -func (x *EcdsaConfig) GetKeyIds() []*EcdsaKeyId { +func (x *GossipConfig) GetMaxChunkSize() uint32 { if x != nil { - return x.KeyIds + return x.MaxChunkSize } - return nil + return 0 } -func (x *EcdsaConfig) GetMaxQueueSize() uint32 { +func (x *GossipConfig) GetMaxChunkWaitMs() uint32 { if x != nil { - return x.MaxQueueSize + return x.MaxChunkWaitMs } return 0 } -func (x *EcdsaConfig) GetQuadruplesToCreateInAdvance() uint32 { +func (x *GossipConfig) GetMaxDuplicity() uint32 { if x != nil { - return x.QuadruplesToCreateInAdvance + return x.MaxDuplicity } return 0 } -func (x *EcdsaConfig) GetSignatureRequestTimeoutNs() uint64 { - if x != nil && x.SignatureRequestTimeoutNs != nil { - return *x.SignatureRequestTimeoutNs +func (x *GossipConfig) GetPfnEvaluationPeriodMs() uint32 { + if x != nil { + return x.PfnEvaluationPeriodMs } return 0 } -func (*EcdsaConfig) ProtoMessage() {} +func (x *GossipConfig) GetReceiveCheckCacheSize() uint32 { + if x != nil { + return x.ReceiveCheckCacheSize + } + return 0 +} -func (x *EcdsaConfig) ProtoReflect() protoreflect.Message { - mi := &file_subnet_proto_msgTypes[25] +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[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1593,86 +1528,59 @@ func (x *EcdsaConfig) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -func (x *EcdsaConfig) Reset() { - *x = EcdsaConfig{} +func (x *GossipConfig) Reset() { + *x = GossipConfig{} if protoimpl.UnsafeEnabled { - mi := &file_subnet_proto_msgTypes[25] + mi := &file_subnet_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *EcdsaConfig) String() string { +func (x *GossipConfig) 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 { +type IDkgComplaint 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"` + 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 EcdsaInitialization.ProtoReflect.Descriptor instead. -func (*EcdsaInitialization) Descriptor() ([]byte, []int) { - return file_subnet_proto_rawDescGZIP(), []int{2} +// Deprecated: Use IDkgComplaint.ProtoReflect.Descriptor instead. +func (*IDkgComplaint) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{21} } -func (x *EcdsaInitialization) GetDealings() *InitialIDkgDealings { +func (x *IDkgComplaint) GetDealer() *NodeId { if x != nil { - return x.Dealings + return x.Dealer } return nil } -func (x *EcdsaInitialization) GetKeyId() *EcdsaKeyId { +func (x *IDkgComplaint) GetRawComplaint() []byte { if x != nil { - return x.KeyId + return x.RawComplaint } return nil } -func (*EcdsaInitialization) ProtoMessage() {} +func (x *IDkgComplaint) GetTranscriptId() *IDkgTranscriptId { + if x != nil { + return x.TranscriptId + } + return nil +} -func (x *EcdsaInitialization) ProtoReflect() protoreflect.Message { - mi := &file_subnet_proto_msgTypes[2] +func (*IDkgComplaint) ProtoMessage() {} + +func (x *IDkgComplaint) 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 { @@ -1683,51 +1591,51 @@ func (x *EcdsaInitialization) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -func (x *EcdsaInitialization) Reset() { - *x = EcdsaInitialization{} +func (x *IDkgComplaint) Reset() { + *x = IDkgComplaint{} if protoimpl.UnsafeEnabled { - mi := &file_subnet_proto_msgTypes[2] + mi := &file_subnet_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *EcdsaInitialization) String() string { +func (x *IDkgComplaint) String() string { return protoimpl.X.MessageStringOf(x) } -type EcdsaKeyId struct { +type IDkgDealing 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"` + 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 EcdsaKeyId.ProtoReflect.Descriptor instead. -func (*EcdsaKeyId) Descriptor() ([]byte, []int) { - return file_subnet_proto_rawDescGZIP(), []int{1} +// Deprecated: Use IDkgDealing.ProtoReflect.Descriptor instead. +func (*IDkgDealing) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{18} } -func (x *EcdsaKeyId) GetCurve() EcdsaCurve { +func (x *IDkgDealing) GetRawDealing() []byte { if x != nil { - return x.Curve + return x.RawDealing } - return EcdsaCurve_ECDSA_CURVE_UNSPECIFIED + return nil } -func (x *EcdsaKeyId) GetName() string { +func (x *IDkgDealing) GetTranscriptId() *IDkgTranscriptId { if x != nil { - return x.Name + return x.TranscriptId } - return "" + return nil } -func (*EcdsaKeyId) ProtoMessage() {} +func (*IDkgDealing) ProtoMessage() {} -func (x *EcdsaKeyId) ProtoReflect() protoreflect.Message { - mi := &file_subnet_proto_msgTypes[1] +func (x *IDkgDealing) 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 { @@ -1738,50 +1646,58 @@ func (x *EcdsaKeyId) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -func (x *EcdsaKeyId) Reset() { - *x = EcdsaKeyId{} +func (x *IDkgDealing) Reset() { + *x = IDkgDealing{} if protoimpl.UnsafeEnabled { - mi := &file_subnet_proto_msgTypes[1] + mi := &file_subnet_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *EcdsaKeyId) String() string { +func (x *IDkgDealing) String() string { return protoimpl.X.MessageStringOf(x) } -type ExtendedDerivationPath struct { +type IDkgOpening 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"` + 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 ExtendedDerivationPath.ProtoReflect.Descriptor instead. -func (*ExtendedDerivationPath) Descriptor() ([]byte, []int) { +// Deprecated: Use IDkgOpening.ProtoReflect.Descriptor instead. +func (*IDkgOpening) Descriptor() ([]byte, []int) { return file_subnet_proto_rawDescGZIP(), []int{22} } -func (x *ExtendedDerivationPath) GetCaller() *PrincipalId { +func (x *IDkgOpening) GetDealer() *NodeId { if x != nil { - return x.Caller + return x.Dealer } return nil } -func (x *ExtendedDerivationPath) GetDerivationPath() [][]byte { +func (x *IDkgOpening) GetRawOpening() []byte { if x != nil { - return x.DerivationPath + return x.RawOpening } return nil } -func (*ExtendedDerivationPath) ProtoMessage() {} +func (x *IDkgOpening) GetTranscriptId() *IDkgTranscriptId { + if x != nil { + return x.TranscriptId + } + return nil +} -func (x *ExtendedDerivationPath) ProtoReflect() protoreflect.Message { +func (*IDkgOpening) ProtoMessage() {} + +func (x *IDkgOpening) ProtoReflect() protoreflect.Message { mi := &file_subnet_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1793,8 +1709,8 @@ func (x *ExtendedDerivationPath) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -func (x *ExtendedDerivationPath) Reset() { - *x = ExtendedDerivationPath{} +func (x *IDkgOpening) Reset() { + *x = IDkgOpening{} if protoimpl.UnsafeEnabled { mi := &file_subnet_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1802,100 +1718,50 @@ func (x *ExtendedDerivationPath) Reset() { } } -func (x *ExtendedDerivationPath) String() string { +func (x *IDkgOpening) String() string { return protoimpl.X.MessageStringOf(x) } -// Per subnet P2P configuration -// Note: protoc is mangling the name P2PConfig to P2pConfig -type GossipConfig struct { +type IDkgSignedDealingTuple 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. + 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 GossipConfig.ProtoReflect.Descriptor instead. -func (*GossipConfig) Descriptor() ([]byte, []int) { - return file_subnet_proto_rawDescGZIP(), []int{23} +// Deprecated: Use IDkgSignedDealingTuple.ProtoReflect.Descriptor instead. +func (*IDkgSignedDealingTuple) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{19} } -func (x *GossipConfig) GetMaxArtifactStreamsPerPeer() uint32 { +func (x *IDkgSignedDealingTuple) GetDealer() *NodeId { if x != nil { - return x.MaxArtifactStreamsPerPeer + return x.Dealer } - return 0 + return nil } -func (x *GossipConfig) GetMaxChunkSize() uint32 { +func (x *IDkgSignedDealingTuple) GetDealing() *IDkgDealing { 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 x.Dealing } - return 0 + return nil } -func (x *GossipConfig) GetRetransmissionRequestMs() uint32 { +func (x *IDkgSignedDealingTuple) GetSignature() []byte { if x != nil { - return x.RetransmissionRequestMs + return x.Signature } - return 0 + return nil } -func (*GossipConfig) ProtoMessage() {} +func (*IDkgSignedDealingTuple) ProtoMessage() {} -func (x *GossipConfig) ProtoReflect() protoreflect.Message { - mi := &file_subnet_proto_msgTypes[23] +func (x *IDkgSignedDealingTuple) 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 { @@ -1906,114 +1772,99 @@ func (x *GossipConfig) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -func (x *GossipConfig) Reset() { - *x = GossipConfig{} +func (x *IDkgSignedDealingTuple) Reset() { + *x = IDkgSignedDealingTuple{} if protoimpl.UnsafeEnabled { - mi := &file_subnet_proto_msgTypes[23] + mi := &file_subnet_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GossipConfig) String() string { +func (x *IDkgSignedDealingTuple) String() string { return protoimpl.X.MessageStringOf(x) } -type IDkgComplaint struct { +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"` - 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"` + 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 IDkgComplaint.ProtoReflect.Descriptor instead. -func (*IDkgComplaint) Descriptor() ([]byte, []int) { - return file_subnet_proto_rawDescGZIP(), []int{20} +// Deprecated: Use IDkgTranscript.ProtoReflect.Descriptor instead. +func (*IDkgTranscript) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{14} } -func (x *IDkgComplaint) GetDealer() *NodeId { +func (x *IDkgTranscript) GetAlgorithmId() AlgorithmId { if x != nil { - return x.Dealer + return x.AlgorithmId } - return nil + return AlgorithmId_ALGORITHM_ID_UNSPECIFIED } -func (x *IDkgComplaint) GetRawComplaint() []byte { +func (x *IDkgTranscript) GetDealers() []*NodeId { if x != nil { - return x.RawComplaint + return x.Dealers } return nil } -func (x *IDkgComplaint) GetTranscriptId() *IDkgTranscriptId { +func (x *IDkgTranscript) GetRawTranscript() []byte { if x != nil { - return x.TranscriptId + return x.RawTranscript } 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 +func (x *IDkgTranscript) GetReceivers() []*NodeId { + if x != nil { + return x.Receivers } - return mi.MessageOf(x) + return nil } -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 *IDkgTranscript) GetRegistryVersion() uint64 { + if x != nil { + return x.RegistryVersion } + return 0 } -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 *IDkgTranscript) GetTranscriptId() *IDkgTranscriptId { + if x != nil { + return x.TranscriptId + } + return nil } -func (x *IDkgDealing) GetRawDealing() []byte { +func (x *IDkgTranscript) GetTranscriptType() []byte { if x != nil { - return x.RawDealing + return x.TranscriptType } return nil } -func (x *IDkgDealing) GetTranscriptId() *IDkgTranscriptId { +func (x *IDkgTranscript) GetVerifiedDealings() []*VerifiedIDkgDealing { if x != nil { - return x.TranscriptId + return x.VerifiedDealings } return nil } -func (*IDkgDealing) ProtoMessage() {} +func (*IDkgTranscript) ProtoMessage() {} -func (x *IDkgDealing) ProtoReflect() protoreflect.Message { - mi := &file_subnet_proto_msgTypes[17] +func (x *IDkgTranscript) 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 { @@ -2024,59 +1875,59 @@ func (x *IDkgDealing) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -func (x *IDkgDealing) Reset() { - *x = IDkgDealing{} +func (x *IDkgTranscript) Reset() { + *x = IDkgTranscript{} if protoimpl.UnsafeEnabled { - mi := &file_subnet_proto_msgTypes[17] + mi := &file_subnet_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *IDkgDealing) String() string { +func (x *IDkgTranscript) String() string { return protoimpl.X.MessageStringOf(x) } -type IDkgOpening struct { +type IDkgTranscriptId 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"` + 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 IDkgOpening.ProtoReflect.Descriptor instead. -func (*IDkgOpening) Descriptor() ([]byte, []int) { - return file_subnet_proto_rawDescGZIP(), []int{21} +// Deprecated: Use IDkgTranscriptId.ProtoReflect.Descriptor instead. +func (*IDkgTranscriptId) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{10} } -func (x *IDkgOpening) GetDealer() *NodeId { +func (x *IDkgTranscriptId) GetId() uint64 { if x != nil { - return x.Dealer + return x.Id } - return nil + return 0 } -func (x *IDkgOpening) GetRawOpening() []byte { +func (x *IDkgTranscriptId) GetSourceHeight() uint64 { if x != nil { - return x.RawOpening + return x.SourceHeight } - return nil + return 0 } -func (x *IDkgOpening) GetTranscriptId() *IDkgTranscriptId { +func (x *IDkgTranscriptId) GetSubnetId() *SubnetId { if x != nil { - return x.TranscriptId + return x.SubnetId } return nil } -func (*IDkgOpening) ProtoMessage() {} +func (*IDkgTranscriptId) ProtoMessage() {} -func (x *IDkgOpening) ProtoReflect() protoreflect.Message { - mi := &file_subnet_proto_msgTypes[21] +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 { @@ -2087,285 +1938,56 @@ func (x *IDkgOpening) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -func (x *IDkgOpening) Reset() { - *x = IDkgOpening{} +func (x *IDkgTranscriptId) Reset() { + *x = IDkgTranscriptId{} if protoimpl.UnsafeEnabled { - mi := &file_subnet_proto_msgTypes[21] + mi := &file_subnet_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *IDkgOpening) String() string { +func (x *IDkgTranscriptId) String() string { return protoimpl.X.MessageStringOf(x) } -type IDkgSignedDealingTuple struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +type IDkgTranscriptOperation int32 - 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"` +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() } -// Deprecated: Use IDkgSignedDealingTuple.ProtoReflect.Descriptor instead. -func (*IDkgSignedDealingTuple) Descriptor() ([]byte, []int) { - return file_subnet_proto_rawDescGZIP(), []int{18} +func (x IDkgTranscriptOperation) Enum() *IDkgTranscriptOperation { + p := new(IDkgTranscriptOperation) + *p = x + return p } -func (x *IDkgSignedDealingTuple) GetDealer() *NodeId { - if x != nil { - return x.Dealer - } - return nil +// Deprecated: Use IDkgTranscriptOperation.Descriptor instead. +func (IDkgTranscriptOperation) EnumDescriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{3} } -func (x *IDkgSignedDealingTuple) GetDealing() *IDkgDealing { - if x != nil { - return x.Dealing - } - return nil +func (x IDkgTranscriptOperation) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func (x *IDkgSignedDealingTuple) GetSignature() []byte { - if x != nil { - return x.Signature - } - return nil +func (x IDkgTranscriptOperation) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -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] -} +func (IDkgTranscriptOperation) Type() protoreflect.EnumType { + return &file_subnet_proto_enumTypes[3] +} type IDkgTranscriptParams struct { state protoimpl.MessageState @@ -2383,7 +2005,7 @@ type IDkgTranscriptParams struct { // Deprecated: Use IDkgTranscriptParams.ProtoReflect.Descriptor instead. func (*IDkgTranscriptParams) Descriptor() ([]byte, []int) { - return file_subnet_proto_rawDescGZIP(), []int{16} + return file_subnet_proto_rawDescGZIP(), []int{17} } func (x *IDkgTranscriptParams) GetAlgorithmId() AlgorithmId { @@ -2438,7 +2060,7 @@ func (x *IDkgTranscriptParams) GetTranscriptId() *IDkgTranscriptId { func (*IDkgTranscriptParams) ProtoMessage() {} func (x *IDkgTranscriptParams) ProtoReflect() protoreflect.Message { - mi := &file_subnet_proto_msgTypes[16] + mi := &file_subnet_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2452,7 +2074,7 @@ func (x *IDkgTranscriptParams) ProtoReflect() protoreflect.Message { func (x *IDkgTranscriptParams) Reset() { *x = IDkgTranscriptParams{} if protoimpl.UnsafeEnabled { - mi := &file_subnet_proto_msgTypes[16] + mi := &file_subnet_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2474,7 +2096,7 @@ type InitialIDkgDealings struct { // Deprecated: Use InitialIDkgDealings.ProtoReflect.Descriptor instead. func (*InitialIDkgDealings) Descriptor() ([]byte, []int) { - return file_subnet_proto_rawDescGZIP(), []int{19} + return file_subnet_proto_rawDescGZIP(), []int{20} } func (x *InitialIDkgDealings) GetParams() *IDkgTranscriptParams { @@ -2501,7 +2123,7 @@ func (x *InitialIDkgDealings) GetVersion() uint32 { func (*InitialIDkgDealings) ProtoMessage() {} func (x *InitialIDkgDealings) ProtoReflect() protoreflect.Message { - mi := &file_subnet_proto_msgTypes[19] + mi := &file_subnet_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2515,7 +2137,7 @@ func (x *InitialIDkgDealings) ProtoReflect() protoreflect.Message { func (x *InitialIDkgDealings) Reset() { *x = InitialIDkgDealings{} if protoimpl.UnsafeEnabled { - mi := &file_subnet_proto_msgTypes[19] + mi := &file_subnet_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2620,7 +2242,7 @@ type KeyConfig struct { // Deprecated: Use KeyConfig.ProtoReflect.Descriptor instead. func (*KeyConfig) Descriptor() ([]byte, []int) { - return file_subnet_proto_rawDescGZIP(), []int{28} + return file_subnet_proto_rawDescGZIP(), []int{29} } func (x *KeyConfig) GetKeyId() *MasterPublicKeyId { @@ -2647,7 +2269,7 @@ func (x *KeyConfig) GetPreSignaturesToCreateInAdvance() uint32 { func (*KeyConfig) ProtoMessage() {} func (x *KeyConfig) ProtoReflect() protoreflect.Message { - mi := &file_subnet_proto_msgTypes[28] + mi := &file_subnet_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2661,7 +2283,7 @@ func (x *KeyConfig) ProtoReflect() protoreflect.Message { func (x *KeyConfig) Reset() { *x = KeyConfig{} if protoimpl.UnsafeEnabled { - mi := &file_subnet_proto_msgTypes[28] + mi := &file_subnet_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2685,7 +2307,7 @@ type MasterPublicKeyId struct { // Deprecated: Use MasterPublicKeyId.ProtoReflect.Descriptor instead. func (*MasterPublicKeyId) Descriptor() ([]byte, []int) { - return file_subnet_proto_rawDescGZIP(), []int{27} + return file_subnet_proto_rawDescGZIP(), []int{28} } func (x *MasterPublicKeyId) GetEcdsa() *EcdsaKeyId { @@ -2712,7 +2334,7 @@ func (x *MasterPublicKeyId) GetSchnorr() *SchnorrKeyId { func (*MasterPublicKeyId) ProtoMessage() {} func (x *MasterPublicKeyId) ProtoReflect() protoreflect.Message { - mi := &file_subnet_proto_msgTypes[27] + mi := &file_subnet_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2726,7 +2348,7 @@ func (x *MasterPublicKeyId) ProtoReflect() protoreflect.Message { func (x *MasterPublicKeyId) Reset() { *x = MasterPublicKeyId{} if protoimpl.UnsafeEnabled { - mi := &file_subnet_proto_msgTypes[27] + mi := &file_subnet_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2950,14 +2572,95 @@ func (x *PrincipalId) String() string { return protoimpl.X.MessageStringOf(x) } -type RegistryStoreUri struct { +// A public key. Described by its `AlgorithmId`, the key's value and proof data holding, e.g., a proof of possession (PoP). +type PublicKey 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"` + Version uint32 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"` + Algorithm AlgorithmId `protobuf:"varint,2,opt,name=algorithm,proto3,enum=registry.subnet.v1.AlgorithmId" json:"algorithm,omitempty"` + KeyValue []byte `protobuf:"bytes,3,opt,name=key_value,json=keyValue,proto3" json:"key_value,omitempty"` + ProofData *wrapperspb.BytesValue `protobuf:"bytes,4,opt,name=proof_data,json=proofData,proto3" json:"proof_data,omitempty"` + // Number of non-leap-milliseconds since January 1, 1970 UTC. + Timestamp *wrapperspb.UInt64Value `protobuf:"bytes,5,opt,name=timestamp,proto3" json:"timestamp,omitempty"` +} + +// Deprecated: Use PublicKey.ProtoReflect.Descriptor instead. +func (*PublicKey) Descriptor() ([]byte, []int) { + return file_subnet_proto_rawDescGZIP(), []int{13} +} + +func (x *PublicKey) GetAlgorithm() AlgorithmId { + if x != nil { + return x.Algorithm + } + return AlgorithmId_ALGORITHM_ID_UNSPECIFIED +} + +func (x *PublicKey) GetKeyValue() []byte { + if x != nil { + return x.KeyValue + } + return nil +} + +func (x *PublicKey) GetProofData() *wrapperspb.BytesValue { + if x != nil { + return x.ProofData + } + return nil +} + +func (x *PublicKey) GetTimestamp() *wrapperspb.UInt64Value { + if x != nil { + return x.Timestamp + } + return nil +} + +func (x *PublicKey) GetVersion() uint32 { + if x != nil { + return x.Version + } + return 0 +} + +func (*PublicKey) ProtoMessage() {} + +func (x *PublicKey) 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 *PublicKey) Reset() { + *x = PublicKey{} + if protoimpl.UnsafeEnabled { + mi := &file_subnet_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PublicKey) 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"` @@ -3065,7 +2768,7 @@ type SchnorrKeyId struct { // Deprecated: Use SchnorrKeyId.ProtoReflect.Descriptor instead. func (*SchnorrKeyId) Descriptor() ([]byte, []int) { - return file_subnet_proto_rawDescGZIP(), []int{26} + return file_subnet_proto_rawDescGZIP(), []int{27} } func (x *SchnorrKeyId) GetAlgorithm() SchnorrAlgorithm { @@ -3085,7 +2788,7 @@ func (x *SchnorrKeyId) GetName() string { func (*SchnorrKeyId) ProtoMessage() {} func (x *SchnorrKeyId) ProtoReflect() protoreflect.Message { - mi := &file_subnet_proto_msgTypes[26] + mi := &file_subnet_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3099,7 +2802,7 @@ func (x *SchnorrKeyId) ProtoReflect() protoreflect.Message { func (x *SchnorrKeyId) Reset() { *x = SchnorrKeyId{} if protoimpl.UnsafeEnabled { - mi := &file_subnet_proto_msgTypes[26] + mi := &file_subnet_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3120,7 +2823,7 @@ type SignatureTuple struct { // Deprecated: Use SignatureTuple.ProtoReflect.Descriptor instead. func (*SignatureTuple) Descriptor() ([]byte, []int) { - return file_subnet_proto_rawDescGZIP(), []int{15} + return file_subnet_proto_rawDescGZIP(), []int{16} } func (x *SignatureTuple) GetSignature() []byte { @@ -3140,7 +2843,7 @@ func (x *SignatureTuple) GetSigner() *NodeId { func (*SignatureTuple) ProtoMessage() {} func (x *SignatureTuple) ProtoReflect() protoreflect.Message { - mi := &file_subnet_proto_msgTypes[15] + mi := &file_subnet_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3154,7 +2857,7 @@ func (x *SignatureTuple) ProtoReflect() protoreflect.Message { func (x *SignatureTuple) Reset() { *x = SignatureTuple{} if protoimpl.UnsafeEnabled { - mi := &file_subnet_proto_msgTypes[15] + mi := &file_subnet_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3181,7 +2884,7 @@ type SubnetFeatures struct { // Deprecated: Use SubnetFeatures.ProtoReflect.Descriptor instead. func (*SubnetFeatures) Descriptor() ([]byte, []int) { - return file_subnet_proto_rawDescGZIP(), []int{24} + return file_subnet_proto_rawDescGZIP(), []int{25} } func (x *SubnetFeatures) GetCanisterSandboxing() bool { @@ -3208,7 +2911,7 @@ func (x *SubnetFeatures) GetSevEnabled() bool { func (*SubnetFeatures) ProtoMessage() {} func (x *SubnetFeatures) ProtoReflect() protoreflect.Message { - mi := &file_subnet_proto_msgTypes[24] + mi := &file_subnet_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3222,7 +2925,7 @@ func (x *SubnetFeatures) ProtoReflect() protoreflect.Message { func (x *SubnetFeatures) Reset() { *x = SubnetFeatures{} if protoimpl.UnsafeEnabled { - mi := &file_subnet_proto_msgTypes[24] + mi := &file_subnet_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3577,128 +3280,539 @@ func (x *SubnetRecord) ProtoReflect() protoreflect.Message { 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 *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() +} + +func init() { file_subnet_proto_init() } +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.(*PublicKey); 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.(*IDkgTranscript); 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.(*DealerTuple); 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.(*SignatureTuple); 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.(*IDkgTranscriptParams); 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.(*IDkgDealing); 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.(*IDkgSignedDealingTuple); 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.(*InitialIDkgDealings); 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.(*IDkgComplaint); 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.(*IDkgOpening); 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.(*ExtendedDerivationPath); 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.(*GossipConfig); 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.(*SubnetFeatures); 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.(*EcdsaConfig); 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.(*SchnorrKeyId); 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.(*MasterPublicKeyId); 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.(*KeyConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subnet_proto_msgTypes[30].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 + } } - 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) + file_subnet_proto_msgTypes[0].OneofWrappers = []interface{}{} + file_subnet_proto_msgTypes[25].OneofWrappers = []interface{}{} + file_subnet_proto_msgTypes[26].OneofWrappers = []interface{}{} + file_subnet_proto_msgTypes[28].OneofWrappers = []interface{}{ + (*MasterPublicKeyId_Ecdsa)(nil), + (*MasterPublicKeyId_Schnorr)(nil), } -} - -func (x *VerifiedIDkgDealing) String() string { - return protoimpl.X.MessageStringOf(x) -} -type isMasterPublicKeyId_KeyId interface { - isMasterPublicKeyId_KeyId() + file_subnet_proto_msgTypes[29].OneofWrappers = []interface{}{} + file_subnet_proto_msgTypes[30].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_subnet_proto_rawDesc, + NumEnums: 6, + NumMessages: 31, + 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 } diff --git a/registry/proto/v1/transport.pb.go b/registry/proto/v1/transport.pb.go index 1dbcf4c..26c43d9 100644 --- a/registry/proto/v1/transport.pb.go +++ b/registry/proto/v1/transport.pb.go @@ -300,6 +300,232 @@ 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) @@ -307,6 +533,8 @@ 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 @@ -1418,9 +1646,7 @@ 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 { @@ -1440,236 +1666,11 @@ 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/subnet.proto b/registry/testdata/subnet.proto index fbab802..508bfb0 100644 --- a/registry/testdata/subnet.proto +++ b/registry/testdata/subnet.proto @@ -251,6 +251,16 @@ enum AlgorithmId { ALGORITHM_ID_THRESHOLD_ED25519 = 19; } +// A public key. Described by its `AlgorithmId`, the key's value and proof data holding, e.g., a proof of possession (PoP). +message PublicKey { + uint32 version = 1; + AlgorithmId algorithm = 2; + bytes key_value = 3; + google.protobuf.BytesValue proof_data = 4; + // Number of non-leap-milliseconds since January 1, 1970 UTC. + google.protobuf.UInt64Value timestamp = 5; +} + message IDkgTranscript { IDkgTranscriptId transcript_id = 1; repeated NodeId dealers = 2;