From 5ff69fb80801b84d5550e33db4ff7b7cc177da65 Mon Sep 17 00:00:00 2001 From: Jordan Krage Date: Mon, 21 Oct 2024 08:51:42 -0500 Subject: [PATCH 01/13] golangci-lint: add new rules; sort list (#14862) * golangci-lint: add new rules * golangci-lint: sort rules --- .golangci.yml | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index ea53d380767..9e6cf25c69d 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -2,23 +2,29 @@ run: timeout: 15m0s linters: enable: + - containedctx + - depguard + - errname + - errorlint - exhaustive - exportloopref - - revive + - fatcontext + - ginkgolinter - goimports - gosec + - loggercheck + - mirror - misspell + - noctx + - perfsprint + - prealloc + - revive - rowserrcheck - - errorlint - - unconvert + - spancheck - sqlclosecheck - - noctx - - depguard + - testifylint + - unconvert - whitespace - - containedctx - - fatcontext - - mirror - - loggercheck linters-settings: exhaustive: default-signifies-exhaustive: true From 89fcfea8a42f67a592cb1187538f9b3a9791b58f Mon Sep 17 00:00:00 2001 From: amit-momin <108959691+amit-momin@users.noreply.github.com> Date: Mon, 21 Oct 2024 09:20:02 -0500 Subject: [PATCH 02/13] Add compute unit limit estimation to Solana TXM (#14741) * Added compute unit limit estimation to Solana TXM * Fixed linting * Updated chainlink-solana pin --- .changeset/curly-baboons-enjoy.md | 5 +++ core/chains/evm/config/toml/config.go | 1 - core/config/docs/chains-solana.toml | 2 ++ core/scripts/go.mod | 2 +- core/scripts/go.sum | 4 +-- core/services/chainlink/config_test.go | 36 ++++++++++--------- .../chainlink/testdata/config-full.toml | 1 + .../config-multi-chain-effective.toml | 2 ++ core/web/resolver/testdata/config-full.toml | 1 + .../config-multi-chain-effective.toml | 2 ++ core/web/solana_chains_controller_test.go | 1 + docs/CONFIG.md | 7 ++++ go.mod | 2 +- go.sum | 4 +-- integration-tests/go.mod | 2 +- integration-tests/go.sum | 4 +-- integration-tests/load/go.mod | 2 +- integration-tests/load/go.sum | 4 +-- 18 files changed, 52 insertions(+), 30 deletions(-) create mode 100644 .changeset/curly-baboons-enjoy.md diff --git a/.changeset/curly-baboons-enjoy.md b/.changeset/curly-baboons-enjoy.md new file mode 100644 index 00000000000..440f394d23b --- /dev/null +++ b/.changeset/curly-baboons-enjoy.md @@ -0,0 +1,5 @@ +--- +"chainlink": minor +--- + +Added the compute unit limit estimation feature for the Solana TXM #added diff --git a/core/chains/evm/config/toml/config.go b/core/chains/evm/config/toml/config.go index 4655a9798c3..cc6a8d4eabf 100644 --- a/core/chains/evm/config/toml/config.go +++ b/core/chains/evm/config/toml/config.go @@ -846,7 +846,6 @@ func (t *HeadTracker) setFrom(f *HeadTracker) { if v := f.PersistenceEnabled; v != nil { t.PersistenceEnabled = v } - } func (t *HeadTracker) ValidateConfig() (err error) { diff --git a/core/config/docs/chains-solana.toml b/core/config/docs/chains-solana.toml index 7a5911c4d2e..626c2f0613f 100644 --- a/core/config/docs/chains-solana.toml +++ b/core/config/docs/chains-solana.toml @@ -38,6 +38,8 @@ FeeBumpPeriod = '3s' # Default BlockHistoryPollPeriod = '5s' # Default # ComputeUnitLimitDefault is the compute units limit applied to transactions unless overriden during the txm enqueue ComputeUnitLimitDefault = 200_000 # Default +# EstimateComputeUnitLimit enables or disables compute unit limit estimations per transaction. If estimations return 0 used compute, the ComputeUnitLimitDefault value is used, if set. +EstimateComputeUnitLimit = false # Default [Solana.MultiNode] # Enabled enables the multinode feature. diff --git a/core/scripts/go.mod b/core/scripts/go.mod index 31bf042caa4..075894c7c3d 100644 --- a/core/scripts/go.mod +++ b/core/scripts/go.mod @@ -292,7 +292,7 @@ require ( github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20241018134907-a00ba3729b5e // indirect github.com/smartcontractkit/chainlink-feeds v0.1.1 // indirect github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0 // indirect - github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017134533-5459a1034ecd // indirect + github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042 // indirect github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8 // indirect github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 // indirect github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20241009055228-33d0c0bf38de // indirect diff --git a/core/scripts/go.sum b/core/scripts/go.sum index 575b341548e..461fbc8074b 100644 --- a/core/scripts/go.sum +++ b/core/scripts/go.sum @@ -1084,8 +1084,8 @@ github.com/smartcontractkit/chainlink-feeds v0.1.1 h1:JzvUOM/OgGQA1sOqTXXl52R6An github.com/smartcontractkit/chainlink-feeds v0.1.1/go.mod h1:55EZ94HlKCfAsUiKUTNI7QlE/3d3IwTlsU3YNa/nBb4= github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0 h1:PBUaFfPLm+Efq7H9kdfGBivH+QhJ6vB5EZTR/sCZsxI= github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0/go.mod h1:m/A3lqD7ms/RsQ9BT5P2uceYY0QX5mIt4KQxT2G6qEo= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017134533-5459a1034ecd h1:uF+MfvqZ7R3fVxln4lYdgTAeZwHoZKwsm3JXhZDU5RA= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017134533-5459a1034ecd/go.mod h1:XDrfLscHNHXIrB8MJVEYRcCVxxxO4BflcS+S6rlcgU4= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042 h1:R8F2tpyvN0peK0woG/Spx+IdukxlSSWDDLyFQNkLfUs= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042/go.mod h1:UndTf1YRDBt/4LDauMFou9+vt/M0q6o7u80a9J5Xu+0= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8 h1:B4DFdk6MGcQnoCjjMBCx7Z+GWQpxRWJ4O8W/dVJyWGA= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8/go.mod h1:WkBqgBo+g34Gm5vWkDDl8Fh3Mzd7bF5hXp7rryg0t5o= github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 h1:12ijqMM9tvYVEm+nR826WsrNi6zCKpwBhuApq127wHs= diff --git a/core/services/chainlink/config_test.go b/core/services/chainlink/config_test.go index be7c0a08530..4171c7af164 100644 --- a/core/services/chainlink/config_test.go +++ b/core/services/chainlink/config_test.go @@ -736,23 +736,24 @@ func TestConfig_Marshal(t *testing.T) { ChainID: ptr("mainnet"), Enabled: ptr(false), Chain: solcfg.Chain{ - BalancePollPeriod: commoncfg.MustNewDuration(time.Minute), - ConfirmPollPeriod: commoncfg.MustNewDuration(time.Second), - OCR2CachePollPeriod: commoncfg.MustNewDuration(time.Minute), - OCR2CacheTTL: commoncfg.MustNewDuration(time.Hour), - TxTimeout: commoncfg.MustNewDuration(time.Hour), - TxRetryTimeout: commoncfg.MustNewDuration(time.Minute), - TxConfirmTimeout: commoncfg.MustNewDuration(time.Second), - SkipPreflight: ptr(true), - Commitment: ptr("banana"), - MaxRetries: ptr[int64](7), - FeeEstimatorMode: ptr("fixed"), - ComputeUnitPriceMax: ptr[uint64](1000), - ComputeUnitPriceMin: ptr[uint64](10), - ComputeUnitPriceDefault: ptr[uint64](100), - FeeBumpPeriod: commoncfg.MustNewDuration(time.Minute), - BlockHistoryPollPeriod: commoncfg.MustNewDuration(time.Minute), - ComputeUnitLimitDefault: ptr[uint32](100_000), + BalancePollPeriod: commoncfg.MustNewDuration(time.Minute), + ConfirmPollPeriod: commoncfg.MustNewDuration(time.Second), + OCR2CachePollPeriod: commoncfg.MustNewDuration(time.Minute), + OCR2CacheTTL: commoncfg.MustNewDuration(time.Hour), + TxTimeout: commoncfg.MustNewDuration(time.Hour), + TxRetryTimeout: commoncfg.MustNewDuration(time.Minute), + TxConfirmTimeout: commoncfg.MustNewDuration(time.Second), + SkipPreflight: ptr(true), + Commitment: ptr("banana"), + MaxRetries: ptr[int64](7), + FeeEstimatorMode: ptr("fixed"), + ComputeUnitPriceMax: ptr[uint64](1000), + ComputeUnitPriceMin: ptr[uint64](10), + ComputeUnitPriceDefault: ptr[uint64](100), + FeeBumpPeriod: commoncfg.MustNewDuration(time.Minute), + BlockHistoryPollPeriod: commoncfg.MustNewDuration(time.Minute), + ComputeUnitLimitDefault: ptr[uint32](100_000), + EstimateComputeUnitLimit: ptr(false), }, MultiNode: solcfg.MultiNodeConfig{ MultiNode: solcfg.MultiNode{ @@ -1278,6 +1279,7 @@ ComputeUnitPriceDefault = 100 FeeBumpPeriod = '1m0s' BlockHistoryPollPeriod = '1m0s' ComputeUnitLimitDefault = 100000 +EstimateComputeUnitLimit = false [Solana.MultiNode] Enabled = false diff --git a/core/services/chainlink/testdata/config-full.toml b/core/services/chainlink/testdata/config-full.toml index 35b8903878d..44362761bd1 100644 --- a/core/services/chainlink/testdata/config-full.toml +++ b/core/services/chainlink/testdata/config-full.toml @@ -500,6 +500,7 @@ ComputeUnitPriceDefault = 100 FeeBumpPeriod = '1m0s' BlockHistoryPollPeriod = '1m0s' ComputeUnitLimitDefault = 100000 +EstimateComputeUnitLimit = false [Solana.MultiNode] Enabled = false diff --git a/core/services/chainlink/testdata/config-multi-chain-effective.toml b/core/services/chainlink/testdata/config-multi-chain-effective.toml index 3d82a30e88c..f9d34ffbde6 100644 --- a/core/services/chainlink/testdata/config-multi-chain-effective.toml +++ b/core/services/chainlink/testdata/config-multi-chain-effective.toml @@ -661,6 +661,7 @@ ComputeUnitPriceDefault = 0 FeeBumpPeriod = '3s' BlockHistoryPollPeriod = '5s' ComputeUnitLimitDefault = 200000 +EstimateComputeUnitLimit = false [Solana.MultiNode] Enabled = false @@ -703,6 +704,7 @@ ComputeUnitPriceDefault = 0 FeeBumpPeriod = '3s' BlockHistoryPollPeriod = '5s' ComputeUnitLimitDefault = 200000 +EstimateComputeUnitLimit = false [Solana.MultiNode] Enabled = false diff --git a/core/web/resolver/testdata/config-full.toml b/core/web/resolver/testdata/config-full.toml index 6f8a6d5e777..c319a7bf8ec 100644 --- a/core/web/resolver/testdata/config-full.toml +++ b/core/web/resolver/testdata/config-full.toml @@ -499,6 +499,7 @@ ComputeUnitPriceDefault = 0 FeeBumpPeriod = '3s' BlockHistoryPollPeriod = '5s' ComputeUnitLimitDefault = 200000 +EstimateComputeUnitLimit = false [Solana.MultiNode] Enabled = false diff --git a/core/web/resolver/testdata/config-multi-chain-effective.toml b/core/web/resolver/testdata/config-multi-chain-effective.toml index 612f2eaf390..e29c763b74c 100644 --- a/core/web/resolver/testdata/config-multi-chain-effective.toml +++ b/core/web/resolver/testdata/config-multi-chain-effective.toml @@ -661,6 +661,7 @@ ComputeUnitPriceDefault = 0 FeeBumpPeriod = '3s' BlockHistoryPollPeriod = '5s' ComputeUnitLimitDefault = 200000 +EstimateComputeUnitLimit = false [Solana.MultiNode] Enabled = false @@ -703,6 +704,7 @@ ComputeUnitPriceDefault = 0 FeeBumpPeriod = '3s' BlockHistoryPollPeriod = '5s' ComputeUnitLimitDefault = 200000 +EstimateComputeUnitLimit = false [Solana.MultiNode] Enabled = false diff --git a/core/web/solana_chains_controller_test.go b/core/web/solana_chains_controller_test.go index 316f14ccf2d..148d6302592 100644 --- a/core/web/solana_chains_controller_test.go +++ b/core/web/solana_chains_controller_test.go @@ -59,6 +59,7 @@ ComputeUnitPriceDefault = 0 FeeBumpPeriod = '3s' BlockHistoryPollPeriod = '5s' ComputeUnitLimitDefault = 200000 +EstimateComputeUnitLimit = false Nodes = [] [MultiNode] diff --git a/docs/CONFIG.md b/docs/CONFIG.md index 010d1aa03d9..ba36c8d258d 100644 --- a/docs/CONFIG.md +++ b/docs/CONFIG.md @@ -10086,6 +10086,7 @@ ComputeUnitPriceDefault = 0 # Default FeeBumpPeriod = '3s' # Default BlockHistoryPollPeriod = '5s' # Default ComputeUnitLimitDefault = 200_000 # Default +EstimateComputeUnitLimit = false # Default ``` @@ -10204,6 +10205,12 @@ ComputeUnitLimitDefault = 200_000 # Default ``` ComputeUnitLimitDefault is the compute units limit applied to transactions unless overriden during the txm enqueue +### EstimateComputeUnitLimit +```toml +EstimateComputeUnitLimit = false # Default +``` +EstimateComputeUnitLimit enables or disables compute unit limit estimations per transaction. If estimations return 0 used compute, the ComputeUnitLimitDefault value is used, if set. + ## Solana.MultiNode ```toml [Solana.MultiNode] diff --git a/go.mod b/go.mod index e193812e51d..76941e415d3 100644 --- a/go.mod +++ b/go.mod @@ -81,7 +81,7 @@ require ( github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20241018134907-a00ba3729b5e github.com/smartcontractkit/chainlink-feeds v0.1.1 github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0 - github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017134533-5459a1034ecd + github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042 github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8 github.com/smartcontractkit/libocr v0.0.0-20241007185508-adbe57025f12 github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20241009055228-33d0c0bf38de diff --git a/go.sum b/go.sum index 62b3036f249..41eebb99d38 100644 --- a/go.sum +++ b/go.sum @@ -1067,8 +1067,8 @@ github.com/smartcontractkit/chainlink-feeds v0.1.1 h1:JzvUOM/OgGQA1sOqTXXl52R6An github.com/smartcontractkit/chainlink-feeds v0.1.1/go.mod h1:55EZ94HlKCfAsUiKUTNI7QlE/3d3IwTlsU3YNa/nBb4= github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0 h1:PBUaFfPLm+Efq7H9kdfGBivH+QhJ6vB5EZTR/sCZsxI= github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0/go.mod h1:m/A3lqD7ms/RsQ9BT5P2uceYY0QX5mIt4KQxT2G6qEo= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017134533-5459a1034ecd h1:uF+MfvqZ7R3fVxln4lYdgTAeZwHoZKwsm3JXhZDU5RA= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017134533-5459a1034ecd/go.mod h1:XDrfLscHNHXIrB8MJVEYRcCVxxxO4BflcS+S6rlcgU4= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042 h1:R8F2tpyvN0peK0woG/Spx+IdukxlSSWDDLyFQNkLfUs= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042/go.mod h1:UndTf1YRDBt/4LDauMFou9+vt/M0q6o7u80a9J5Xu+0= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8 h1:B4DFdk6MGcQnoCjjMBCx7Z+GWQpxRWJ4O8W/dVJyWGA= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8/go.mod h1:WkBqgBo+g34Gm5vWkDDl8Fh3Mzd7bF5hXp7rryg0t5o= github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 h1:12ijqMM9tvYVEm+nR826WsrNi6zCKpwBhuApq127wHs= diff --git a/integration-tests/go.mod b/integration-tests/go.mod index 3fc511fa385..fc91dd58b05 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -411,7 +411,7 @@ require ( github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20241018134907-a00ba3729b5e // indirect github.com/smartcontractkit/chainlink-feeds v0.1.1 // indirect github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0 // indirect - github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017134533-5459a1034ecd // indirect + github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042 // indirect github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8 // indirect github.com/smartcontractkit/grpc-proxy v0.0.0-20240830132753-a7e17fec5ab7 // indirect github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20241009055228-33d0c0bf38de // indirect diff --git a/integration-tests/go.sum b/integration-tests/go.sum index d73c09ac3c5..d9764015109 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -1414,8 +1414,8 @@ github.com/smartcontractkit/chainlink-feeds v0.1.1 h1:JzvUOM/OgGQA1sOqTXXl52R6An github.com/smartcontractkit/chainlink-feeds v0.1.1/go.mod h1:55EZ94HlKCfAsUiKUTNI7QlE/3d3IwTlsU3YNa/nBb4= github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0 h1:PBUaFfPLm+Efq7H9kdfGBivH+QhJ6vB5EZTR/sCZsxI= github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0/go.mod h1:m/A3lqD7ms/RsQ9BT5P2uceYY0QX5mIt4KQxT2G6qEo= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017134533-5459a1034ecd h1:uF+MfvqZ7R3fVxln4lYdgTAeZwHoZKwsm3JXhZDU5RA= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017134533-5459a1034ecd/go.mod h1:XDrfLscHNHXIrB8MJVEYRcCVxxxO4BflcS+S6rlcgU4= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042 h1:R8F2tpyvN0peK0woG/Spx+IdukxlSSWDDLyFQNkLfUs= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042/go.mod h1:UndTf1YRDBt/4LDauMFou9+vt/M0q6o7u80a9J5Xu+0= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8 h1:B4DFdk6MGcQnoCjjMBCx7Z+GWQpxRWJ4O8W/dVJyWGA= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8/go.mod h1:WkBqgBo+g34Gm5vWkDDl8Fh3Mzd7bF5hXp7rryg0t5o= github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.0 h1:mgjBQIEy+3V3G6K8e+6by3xndgsXdYYsdy+7kzQZwSk= diff --git a/integration-tests/load/go.mod b/integration-tests/load/go.mod index 9acb28d1215..c959d69720e 100644 --- a/integration-tests/load/go.mod +++ b/integration-tests/load/go.mod @@ -410,7 +410,7 @@ require ( github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20241018134907-a00ba3729b5e // indirect github.com/smartcontractkit/chainlink-feeds v0.1.1 // indirect github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0 // indirect - github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017134533-5459a1034ecd // indirect + github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042 // indirect github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8 // indirect github.com/smartcontractkit/chainlink-testing-framework/lib/grafana v1.50.0 // indirect github.com/smartcontractkit/libocr v0.0.0-20241007185508-adbe57025f12 // indirect diff --git a/integration-tests/load/go.sum b/integration-tests/load/go.sum index 1a671072c5c..395be850d18 100644 --- a/integration-tests/load/go.sum +++ b/integration-tests/load/go.sum @@ -1391,8 +1391,8 @@ github.com/smartcontractkit/chainlink-feeds v0.1.1 h1:JzvUOM/OgGQA1sOqTXXl52R6An github.com/smartcontractkit/chainlink-feeds v0.1.1/go.mod h1:55EZ94HlKCfAsUiKUTNI7QlE/3d3IwTlsU3YNa/nBb4= github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0 h1:PBUaFfPLm+Efq7H9kdfGBivH+QhJ6vB5EZTR/sCZsxI= github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0/go.mod h1:m/A3lqD7ms/RsQ9BT5P2uceYY0QX5mIt4KQxT2G6qEo= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017134533-5459a1034ecd h1:uF+MfvqZ7R3fVxln4lYdgTAeZwHoZKwsm3JXhZDU5RA= -github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017134533-5459a1034ecd/go.mod h1:XDrfLscHNHXIrB8MJVEYRcCVxxxO4BflcS+S6rlcgU4= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042 h1:R8F2tpyvN0peK0woG/Spx+IdukxlSSWDDLyFQNkLfUs= +github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042/go.mod h1:UndTf1YRDBt/4LDauMFou9+vt/M0q6o7u80a9J5Xu+0= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8 h1:B4DFdk6MGcQnoCjjMBCx7Z+GWQpxRWJ4O8W/dVJyWGA= github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8/go.mod h1:WkBqgBo+g34Gm5vWkDDl8Fh3Mzd7bF5hXp7rryg0t5o= github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.0 h1:mgjBQIEy+3V3G6K8e+6by3xndgsXdYYsdy+7kzQZwSk= From 80b0501bee805f30da170f779e7ceeb4b0ebe179 Mon Sep 17 00:00:00 2001 From: Matthew Romage <33700623+ma33r@users.noreply.github.com> Date: Mon, 21 Oct 2024 10:36:48 -0400 Subject: [PATCH 03/13] Add Mantle NonceTooLow Error (#14859) * handle mantle "nonce too low" error * add changeset --- .changeset/pretty-worms-smell.md | 5 +++++ core/chains/evm/client/errors.go | 1 + core/chains/evm/client/errors_test.go | 1 + 3 files changed, 7 insertions(+) create mode 100644 .changeset/pretty-worms-smell.md diff --git a/.changeset/pretty-worms-smell.md b/.changeset/pretty-worms-smell.md new file mode 100644 index 00000000000..9633de09502 --- /dev/null +++ b/.changeset/pretty-worms-smell.md @@ -0,0 +1,5 @@ +--- +"chainlink": patch +--- + +Added a custom client error message for Mantle to capture NonceTooLow error. #added diff --git a/core/chains/evm/client/errors.go b/core/chains/evm/client/errors.go index 448d33080d9..d47d97660b1 100644 --- a/core/chains/evm/client/errors.go +++ b/core/chains/evm/client/errors.go @@ -265,6 +265,7 @@ var aStar = ClientErrors{ var mantle = ClientErrors{ InsufficientEth: regexp.MustCompile(`(: |^)'*insufficient funds for gas \* price \+ value`), Fatal: regexp.MustCompile(`(: |^)'*invalid sender`), + NonceTooLow: regexp.MustCompile(`(: |^)'*nonce too low`), } var hederaFatal = regexp.MustCompile(`(: |^)(execution reverted)(:|$) | ^Transaction gas limit '(\d+)' exceeds block gas limit '(\d+)' | ^Transaction gas limit provided '(\d+)' is insufficient of intrinsic gas required '(\d+)' | ^Oversized data:|status INVALID_SIGNATURE`) diff --git a/core/chains/evm/client/errors_test.go b/core/chains/evm/client/errors_test.go index 276146fd06b..226f4cef7c9 100644 --- a/core/chains/evm/client/errors_test.go +++ b/core/chains/evm/client/errors_test.go @@ -48,6 +48,7 @@ func Test_Eth_Errors(t *testing.T) { {"nonce too low. allowed nonce range: 427 - 447, actual: 426", true, "zkSync"}, {"client error nonce too low", true, "tomlConfig"}, {"[Request ID: 2e952947-ffad-408b-aed9-35f3ed152001] Nonce too low. Provided nonce: 15, current nonce: 15", true, "hedera"}, + {"failed to forward tx to sequencer, please try again. Error message: 'nonce too low'", true, "Mantle"}, } for _, test := range tests { From 84bcbe03ebfa3ab7f58b97897eb0c55b45191859 Mon Sep 17 00:00:00 2001 From: Ryan Hall Date: Mon, 21 Oct 2024 11:30:16 -0400 Subject: [PATCH 04/13] change `else if` to `else` .. `if` .. (#14863) * change else if to else { if ( * add changeset * [Bot] Update changeset file with jira issues --------- Co-authored-by: app-token-issuer-infra-releng[bot] <120227048+app-token-issuer-infra-releng[bot]@users.noreply.github.com> --- contracts/.changeset/wild-tigers-know.md | 8 ++++++++ contracts/src/v0.8/ccip/ocr/MultiOCR3Base.sol | 6 ++++-- contracts/src/v0.8/ccip/offRamp/OffRamp.sol | 12 +++++++----- 3 files changed, 19 insertions(+), 7 deletions(-) create mode 100644 contracts/.changeset/wild-tigers-know.md diff --git a/contracts/.changeset/wild-tigers-know.md b/contracts/.changeset/wild-tigers-know.md new file mode 100644 index 00000000000..e7b33aeb75a --- /dev/null +++ b/contracts/.changeset/wild-tigers-know.md @@ -0,0 +1,8 @@ +--- +'@chainlink/contracts': patch +--- + +change else if to else..if.. + + +PR issue: CCIP-3726 \ No newline at end of file diff --git a/contracts/src/v0.8/ccip/ocr/MultiOCR3Base.sol b/contracts/src/v0.8/ccip/ocr/MultiOCR3Base.sol index ba1dc1e32c0..62665f4a2a0 100644 --- a/contracts/src/v0.8/ccip/ocr/MultiOCR3Base.sol +++ b/contracts/src/v0.8/ccip/ocr/MultiOCR3Base.sol @@ -150,8 +150,10 @@ abstract contract MultiOCR3Base is ITypeAndVersion, OwnerIsCreator { // If F is 0, then the config is not yet set if (configInfo.F == 0) { configInfo.isSignatureVerificationEnabled = ocrConfigArgs.isSignatureVerificationEnabled; - } else if (configInfo.isSignatureVerificationEnabled != ocrConfigArgs.isSignatureVerificationEnabled) { - revert StaticConfigCannotBeChanged(ocrPluginType); + } else { + if (configInfo.isSignatureVerificationEnabled != ocrConfigArgs.isSignatureVerificationEnabled) { + revert StaticConfigCannotBeChanged(ocrPluginType); + } } address[] memory transmitters = ocrConfigArgs.transmitters; diff --git a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol index 51e8787ec33..145a4ad1e5f 100644 --- a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol @@ -971,11 +971,13 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { if (currentConfig.onRamp.length == 0) { currentConfig.minSeqNr = 1; emit SourceChainSelectorAdded(sourceChainSelector); - } else if (currentConfig.minSeqNr != 1) { - // OnRamp updates should only happens due to a misconfiguration - // If an OnRamp is misconfigured not reports should have been committed and no messages should have been executed - // This is enforced byt the onRamp address check in the commit function - revert InvalidOnRampUpdate(sourceChainSelector); + } else { + if (currentConfig.minSeqNr != 1) { + // OnRamp updates should only happens due to a misconfiguration + // If an OnRamp is misconfigured not reports should have been committed and no messages should have been executed + // This is enforced byt the onRamp address check in the commit function + revert InvalidOnRampUpdate(sourceChainSelector); + } } // OnRamp can never be zero - if it is, then the source chain has been added for the first time From 7cd384b945ec66532b68cbdfffa3b48a8e375158 Mon Sep 17 00:00:00 2001 From: Dimitris Grigoriou Date: Mon, 21 Oct 2024 18:36:32 +0300 Subject: [PATCH 05/13] Rename SequenceAt (#14855) * Rename SequenceAt * More changes * Add changeset * Return uint64 instead of nonce * Fixes * Disable G115 --- .changeset/two-snails-mix.md | 5 + core/chains/evm/client/chain_client.go | 6 +- core/chains/evm/client/chain_client_test.go | 2 +- core/chains/evm/client/mocks/client.go | 116 +++++++++--------- core/chains/evm/client/null_client.go | 4 +- core/chains/evm/client/null_client_test.go | 4 +- core/chains/evm/client/rpc_client.go | 11 +- .../evm/client/simulated_backend_client.go | 5 +- core/chains/evm/txmgr/broadcaster_test.go | 8 +- core/chains/evm/txmgr/client.go | 7 +- core/chains/evm/txmgr/confirmer_test.go | 40 +++--- core/cmd/evm_transaction_commands_test.go | 5 +- core/web/evm_transfer_controller_test.go | 3 +- 13 files changed, 110 insertions(+), 106 deletions(-) create mode 100644 .changeset/two-snails-mix.md diff --git a/.changeset/two-snails-mix.md b/.changeset/two-snails-mix.md new file mode 100644 index 00000000000..0fb49dce9b2 --- /dev/null +++ b/.changeset/two-snails-mix.md @@ -0,0 +1,5 @@ +--- +"chainlink": minor +--- + +Rename SequenceAt to NonceAt #internal diff --git a/core/chains/evm/client/chain_client.go b/core/chains/evm/client/chain_client.go index 6334fb78423..0fc14861ed0 100644 --- a/core/chains/evm/client/chain_client.go +++ b/core/chains/evm/client/chain_client.go @@ -70,7 +70,7 @@ type Client interface { CodeAt(ctx context.Context, account common.Address, blockNumber *big.Int) ([]byte, error) PendingCodeAt(ctx context.Context, account common.Address) ([]byte, error) PendingNonceAt(ctx context.Context, account common.Address) (uint64, error) - SequenceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (evmtypes.Nonce, error) + NonceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (uint64, error) TransactionByHash(ctx context.Context, txHash common.Hash) (*types.Transaction, error) TransactionReceipt(ctx context.Context, txHash common.Hash) (*types.Receipt, error) BlockByNumber(ctx context.Context, number *big.Int) (*types.Block, error) @@ -397,12 +397,12 @@ func (c *chainClient) SendTransactionReturnCode(ctx context.Context, tx *types.T return returnCode, err } -func (c *chainClient) SequenceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (evmtypes.Nonce, error) { +func (c *chainClient) NonceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (uint64, error) { r, err := c.multiNode.SelectRPC() if err != nil { return 0, err } - return r.SequenceAt(ctx, account, blockNumber) + return r.NonceAt(ctx, account, blockNumber) } func (c *chainClient) SubscribeFilterLogs(ctx context.Context, q ethereum.FilterQuery, ch chan<- types.Log) (s ethereum.Subscription, err error) { diff --git a/core/chains/evm/client/chain_client_test.go b/core/chains/evm/client/chain_client_test.go index 5562046d96a..77e11db7a90 100644 --- a/core/chains/evm/client/chain_client_test.go +++ b/core/chains/evm/client/chain_client_test.go @@ -867,7 +867,7 @@ func TestEthClient_ErroringClient(t *testing.T) { require.Equal(t, code, commonclient.Unknown) require.Equal(t, err, txSenderNotStarted) - _, err = erroringClient.SequenceAt(ctx, common.Address{}, nil) + _, err = erroringClient.NonceAt(ctx, common.Address{}, nil) require.Equal(t, err, commonclient.ErroringNodeError) _, err = erroringClient.SubscribeFilterLogs(ctx, ethereum.FilterQuery{}, nil) diff --git a/core/chains/evm/client/mocks/client.go b/core/chains/evm/client/mocks/client.go index e3350cf8a14..59621a6257d 100644 --- a/core/chains/evm/client/mocks/client.go +++ b/core/chains/evm/client/mocks/client.go @@ -1346,6 +1346,64 @@ func (_c *Client_NodeStates_Call) RunAndReturn(run func() map[string]string) *Cl return _c } +// NonceAt provides a mock function with given fields: ctx, account, blockNumber +func (_m *Client) NonceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (uint64, error) { + ret := _m.Called(ctx, account, blockNumber) + + if len(ret) == 0 { + panic("no return value specified for NonceAt") + } + + var r0 uint64 + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, common.Address, *big.Int) (uint64, error)); ok { + return rf(ctx, account, blockNumber) + } + if rf, ok := ret.Get(0).(func(context.Context, common.Address, *big.Int) uint64); ok { + r0 = rf(ctx, account, blockNumber) + } else { + r0 = ret.Get(0).(uint64) + } + + if rf, ok := ret.Get(1).(func(context.Context, common.Address, *big.Int) error); ok { + r1 = rf(ctx, account, blockNumber) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// Client_NonceAt_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'NonceAt' +type Client_NonceAt_Call struct { + *mock.Call +} + +// NonceAt is a helper method to define mock.On call +// - ctx context.Context +// - account common.Address +// - blockNumber *big.Int +func (_e *Client_Expecter) NonceAt(ctx interface{}, account interface{}, blockNumber interface{}) *Client_NonceAt_Call { + return &Client_NonceAt_Call{Call: _e.mock.On("NonceAt", ctx, account, blockNumber)} +} + +func (_c *Client_NonceAt_Call) Run(run func(ctx context.Context, account common.Address, blockNumber *big.Int)) *Client_NonceAt_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(common.Address), args[2].(*big.Int)) + }) + return _c +} + +func (_c *Client_NonceAt_Call) Return(_a0 uint64, _a1 error) *Client_NonceAt_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *Client_NonceAt_Call) RunAndReturn(run func(context.Context, common.Address, *big.Int) (uint64, error)) *Client_NonceAt_Call { + _c.Call.Return(run) + return _c +} + // PendingCallContract provides a mock function with given fields: ctx, msg func (_m *Client) PendingCallContract(ctx context.Context, msg ethereum.CallMsg) ([]byte, error) { ret := _m.Called(ctx, msg) @@ -1626,64 +1684,6 @@ func (_c *Client_SendTransactionReturnCode_Call) RunAndReturn(run func(context.C return _c } -// SequenceAt provides a mock function with given fields: ctx, account, blockNumber -func (_m *Client) SequenceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (evmtypes.Nonce, error) { - ret := _m.Called(ctx, account, blockNumber) - - if len(ret) == 0 { - panic("no return value specified for SequenceAt") - } - - var r0 evmtypes.Nonce - var r1 error - if rf, ok := ret.Get(0).(func(context.Context, common.Address, *big.Int) (evmtypes.Nonce, error)); ok { - return rf(ctx, account, blockNumber) - } - if rf, ok := ret.Get(0).(func(context.Context, common.Address, *big.Int) evmtypes.Nonce); ok { - r0 = rf(ctx, account, blockNumber) - } else { - r0 = ret.Get(0).(evmtypes.Nonce) - } - - if rf, ok := ret.Get(1).(func(context.Context, common.Address, *big.Int) error); ok { - r1 = rf(ctx, account, blockNumber) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// Client_SequenceAt_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SequenceAt' -type Client_SequenceAt_Call struct { - *mock.Call -} - -// SequenceAt is a helper method to define mock.On call -// - ctx context.Context -// - account common.Address -// - blockNumber *big.Int -func (_e *Client_Expecter) SequenceAt(ctx interface{}, account interface{}, blockNumber interface{}) *Client_SequenceAt_Call { - return &Client_SequenceAt_Call{Call: _e.mock.On("SequenceAt", ctx, account, blockNumber)} -} - -func (_c *Client_SequenceAt_Call) Run(run func(ctx context.Context, account common.Address, blockNumber *big.Int)) *Client_SequenceAt_Call { - _c.Call.Run(func(args mock.Arguments) { - run(args[0].(context.Context), args[1].(common.Address), args[2].(*big.Int)) - }) - return _c -} - -func (_c *Client_SequenceAt_Call) Return(_a0 evmtypes.Nonce, _a1 error) *Client_SequenceAt_Call { - _c.Call.Return(_a0, _a1) - return _c -} - -func (_c *Client_SequenceAt_Call) RunAndReturn(run func(context.Context, common.Address, *big.Int) (evmtypes.Nonce, error)) *Client_SequenceAt_Call { - _c.Call.Return(run) - return _c -} - // SubscribeFilterLogs provides a mock function with given fields: ctx, q, ch func (_m *Client) SubscribeFilterLogs(ctx context.Context, q ethereum.FilterQuery, ch chan<- types.Log) (ethereum.Subscription, error) { ret := _m.Called(ctx, q, ch) diff --git a/core/chains/evm/client/null_client.go b/core/chains/evm/client/null_client.go index c59861a7379..13fbf66c6cc 100644 --- a/core/chains/evm/client/null_client.go +++ b/core/chains/evm/client/null_client.go @@ -142,8 +142,8 @@ func (nc *NullClient) PendingNonceAt(ctx context.Context, account common.Address return 0, nil } -func (nc *NullClient) SequenceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (evmtypes.Nonce, error) { - nc.lggr.Debug("SequenceAt") +func (nc *NullClient) NonceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (uint64, error) { + nc.lggr.Debug("NonceAt") return 0, nil } diff --git a/core/chains/evm/client/null_client_test.go b/core/chains/evm/client/null_client_test.go index 6d61a3e808f..5e07c71c4ee 100644 --- a/core/chains/evm/client/null_client_test.go +++ b/core/chains/evm/client/null_client_test.go @@ -99,10 +99,10 @@ func TestNullClient(t *testing.T) { require.Zero(t, n) require.Equal(t, 1, logs.FilterMessage("PendingNonceAt").Len()) - s, err := nc.SequenceAt(ctx, common.Address{}, nil) + s, err := nc.NonceAt(ctx, common.Address{}, nil) require.NoError(t, err) require.Zero(t, s) - require.Equal(t, 1, logs.FilterMessage("SequenceAt").Len()) + require.Equal(t, 1, logs.FilterMessage("NonceAt").Len()) r, err := nc.TransactionReceipt(ctx, common.Hash{}) require.NoError(t, err) diff --git a/core/chains/evm/client/rpc_client.go b/core/chains/evm/client/rpc_client.go index 79d6bc9214f..d2247b0343e 100644 --- a/core/chains/evm/client/rpc_client.go +++ b/core/chains/evm/client/rpc_client.go @@ -854,24 +854,21 @@ func (r *RPCClient) PendingSequenceAt(ctx context.Context, account common.Addres return } -// SequenceAt is a bit of a misnomer. You might expect it to return the highest +// NonceAt is a bit of a misnomer. You might expect it to return the highest // mined nonce at the given block number, but it actually returns the total // transaction count which is the highest mined nonce + 1 -func (r *RPCClient) SequenceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (nonce evmtypes.Nonce, err error) { +func (r *RPCClient) NonceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (nonce uint64, err error) { ctx, cancel, ws, http := r.makeLiveQueryCtxAndSafeGetClients(ctx, r.rpcTimeout) defer cancel() lggr := r.newRqLggr().With("account", account, "blockNumber", blockNumber) lggr.Debug("RPC call: evmclient.Client#NonceAt") start := time.Now() - var n uint64 if http != nil { - n, err = http.geth.NonceAt(ctx, account, blockNumber) - nonce = evmtypes.Nonce(int64(n)) + nonce, err = http.geth.NonceAt(ctx, account, blockNumber) err = r.wrapHTTP(err) } else { - n, err = ws.geth.NonceAt(ctx, account, blockNumber) - nonce = evmtypes.Nonce(int64(n)) + nonce, err = ws.geth.NonceAt(ctx, account, blockNumber) err = r.wrapWS(err) } duration := time.Since(start) diff --git a/core/chains/evm/client/simulated_backend_client.go b/core/chains/evm/client/simulated_backend_client.go index 3753a6704a5..a831f38d10d 100644 --- a/core/chains/evm/client/simulated_backend_client.go +++ b/core/chains/evm/client/simulated_backend_client.go @@ -271,9 +271,8 @@ func (c *SimulatedBackendClient) PendingNonceAt(ctx context.Context, account com } // NonceAt gets nonce as of a specified block. -func (c *SimulatedBackendClient) SequenceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (evmtypes.Nonce, error) { - nonce, err := c.b.NonceAt(ctx, account, blockNumber) - return evmtypes.Nonce(nonce), err +func (c *SimulatedBackendClient) NonceAt(ctx context.Context, account common.Address, blockNumber *big.Int) (uint64, error) { + return c.b.NonceAt(ctx, account, blockNumber) } // BalanceAt gets balance as of a specified block. diff --git a/core/chains/evm/txmgr/broadcaster_test.go b/core/chains/evm/txmgr/broadcaster_test.go index f7bfce1e9ef..bafe46fefc5 100644 --- a/core/chains/evm/txmgr/broadcaster_test.go +++ b/core/chains/evm/txmgr/broadcaster_test.go @@ -1904,7 +1904,7 @@ func TestEthBroadcaster_HederaBroadcastValidation(t *testing.T) { ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool { return tx.Nonce() == localNonce }), fromAddress).Return(commonclient.Successful, nil).Once() - ethClient.On("SequenceAt", mock.Anything, fromAddress, mock.Anything).Return(evmtypes.Nonce(1), nil).Once() + ethClient.On("NonceAt", mock.Anything, fromAddress, mock.Anything).Return(uint64(1), nil).Once() mustInsertInProgressEthTxWithAttempt(t, txStore, evmtypes.Nonce(localNonce), fromAddress) nonceTracker := txmgr.NewNonceTracker(lggr, txStore, txmgr.NewEvmTxmClient(ethClient, nil)) @@ -1924,8 +1924,8 @@ func TestEthBroadcaster_HederaBroadcastValidation(t *testing.T) { ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool { return tx.Nonce() == localNonce }), fromAddress).Return(commonclient.Successful, nil).Twice() - ethClient.On("SequenceAt", mock.Anything, fromAddress, mock.Anything).Return(evmtypes.Nonce(0), nil).Once() - ethClient.On("SequenceAt", mock.Anything, fromAddress, mock.Anything).Return(evmtypes.Nonce(1), nil).Once() + ethClient.On("NonceAt", mock.Anything, fromAddress, mock.Anything).Return(uint64(0), nil).Once() + ethClient.On("NonceAt", mock.Anything, fromAddress, mock.Anything).Return(uint64(1), nil).Once() mustInsertInProgressEthTxWithAttempt(t, txStore, evmtypes.Nonce(localNonce), fromAddress) nonceTracker := txmgr.NewNonceTracker(lggr, txStore, txmgr.NewEvmTxmClient(ethClient, nil)) @@ -1946,7 +1946,7 @@ func TestEthBroadcaster_HederaBroadcastValidation(t *testing.T) { ethClient.On("SendTransactionReturnCode", mock.Anything, mock.MatchedBy(func(tx *gethTypes.Transaction) bool { return tx.Nonce() == localNonce }), fromAddress).Return(commonclient.Successful, nil).Times(4) - ethClient.On("SequenceAt", mock.Anything, fromAddress, mock.Anything).Return(evmtypes.Nonce(0), nil).Times(4) + ethClient.On("NonceAt", mock.Anything, fromAddress, mock.Anything).Return(uint64(0), nil).Times(4) etx := mustInsertInProgressEthTxWithAttempt(t, txStore, evmtypes.Nonce(localNonce), fromAddress) nonceTracker := txmgr.NewNonceTracker(lggr, txStore, txmgr.NewEvmTxmClient(ethClient, nil)) diff --git a/core/chains/evm/txmgr/client.go b/core/chains/evm/txmgr/client.go index a39efcb8721..dfaa4e6bfd8 100644 --- a/core/chains/evm/txmgr/client.go +++ b/core/chains/evm/txmgr/client.go @@ -117,7 +117,12 @@ func (c *evmTxmClient) PendingNonceAt(ctx context.Context, fromAddress common.Ad } func (c *evmTxmClient) SequenceAt(ctx context.Context, addr common.Address, blockNum *big.Int) (evmtypes.Nonce, error) { - return c.client.SequenceAt(ctx, addr, blockNum) + nonce, err := c.client.NonceAt(ctx, addr, blockNum) + if nonce > math.MaxInt64 { + return 0, fmt.Errorf("overflow for nonce: %d", nonce) + } + //nolint:gosec // disable G115 + return evmtypes.Nonce(nonce), err } func (c *evmTxmClient) BatchGetReceipts(ctx context.Context, attempts []TxAttempt) (txReceipt []*evmtypes.Receipt, txErr []error, funcErr error) { diff --git a/core/chains/evm/txmgr/confirmer_test.go b/core/chains/evm/txmgr/confirmer_test.go index a75b7709787..03a43a61cf0 100644 --- a/core/chains/evm/txmgr/confirmer_test.go +++ b/core/chains/evm/txmgr/confirmer_test.go @@ -234,7 +234,7 @@ func TestEthConfirmer_CheckForReceipts(t *testing.T) { require.Len(t, attempt1_1.Receipts, 0) t.Run("fetches receipt for one unconfirmed eth_tx", func(t *testing.T) { - ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil) + ethClient.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(10), nil) // Transaction not confirmed yet, receipt is nil ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool { return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], hashAttempt1_1, "eth_getTransactionReceipt") @@ -263,7 +263,7 @@ func TestEthConfirmer_CheckForReceipts(t *testing.T) { TransactionIndex: uint(1), } - ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil) + ethClient.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(10), nil) // First transaction confirmed ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool { return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], hashAttempt1_1, "eth_getTransactionReceipt") @@ -290,7 +290,7 @@ func TestEthConfirmer_CheckForReceipts(t *testing.T) { TransactionIndex: uint(1), } - ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil) + ethClient.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(10), nil) // First transaction confirmed ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool { return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], hashAttempt1_1, "eth_getTransactionReceipt") @@ -324,7 +324,7 @@ func TestEthConfirmer_CheckForReceipts(t *testing.T) { Status: uint64(1), } - ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil) + ethClient.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(10), nil) ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool { return len(b) == 2 && cltest.BatchElemMatchesParams(b[0], attempt1_1.Hash, "eth_getTransactionReceipt") && @@ -383,7 +383,7 @@ func TestEthConfirmer_CheckForReceipts(t *testing.T) { Status: uint64(1), } - ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil) + ethClient.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(10), nil) ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool { return len(b) == 3 && cltest.BatchElemMatchesParams(b[2], attempt2_1.Hash, "eth_getTransactionReceipt") && @@ -415,7 +415,7 @@ func TestEthConfirmer_CheckForReceipts(t *testing.T) { nonce++ t.Run("ignores receipt missing BlockHash that comes from querying parity too early", func(t *testing.T) { - ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil) + ethClient.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(10), nil) receipt := evmtypes.Receipt{ TxHash: attempt3_1.Hash, Status: uint64(1), @@ -475,7 +475,7 @@ func TestEthConfirmer_CheckForReceipts(t *testing.T) { TransactionIndex: ethReceipt.TransactionIndex, Status: uint64(1), } - ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil) + ethClient.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(10), nil) ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool { return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt3_1.Hash, "eth_getTransactionReceipt") })).Return(nil).Run(func(args mock.Arguments) { @@ -520,7 +520,7 @@ func TestEthConfirmer_CheckForReceipts(t *testing.T) { TransactionIndex: uint(1), Status: uint64(1), } - ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil) + ethClient.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(10), nil) // Second attempt is confirmed ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool { return len(b) == 2 && @@ -568,7 +568,7 @@ func TestEthConfirmer_CheckForReceipts(t *testing.T) { TransactionIndex: uint(1), Status: uint64(0), } - ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil) + ethClient.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(10), nil) // First attempt is confirmed and reverted ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool { return len(b) == 1 && @@ -635,7 +635,7 @@ func TestEthConfirmer_CheckForReceipts_batching(t *testing.T) { attempts = append(attempts, attempt) } - ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil) + ethClient.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(10), nil) ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool { return len(b) == 2 && @@ -703,7 +703,7 @@ func TestEthConfirmer_CheckForReceipts_HandlesNonFwdTxsWithForwardingEnabled(t * Status: uint64(1), } - ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil) + ethClient.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(10), nil) ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool { return len(b) == 1 && cltest.BatchElemMatchesParams(b[0], attempt.Hash, "eth_getTransactionReceipt") @@ -757,7 +757,7 @@ func TestEthConfirmer_CheckForReceipts_only_likely_confirmed(t *testing.T) { attempts = append(attempts, attempt) } - ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(0), nil) + ethClient.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(0), nil) var captured []rpc.BatchElem ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool { @@ -803,7 +803,7 @@ func TestEthConfirmer_CheckForReceipts_should_not_check_for_likely_unconfirmed(t } // latest nonce is lower that all attempts' nonces - ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(0), nil) + ethClient.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(0), nil) require.NoError(t, ec.CheckForReceipts(ctx, 42, latestFinalizedBlockNum)) } @@ -821,7 +821,7 @@ func TestEthConfirmer_CheckForReceipts_confirmed_missing_receipt_scoped_to_key(t _, fromAddress2_1 := cltest.MustInsertRandomKeyReturningState(t, ethKeyStore) ethClient := testutils.NewEthClientMockWithDefaultChain(t) - ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(20), nil) + ethClient.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(20), nil) evmcfg := evmtest.NewChainScopedConfig(t, cfg) ec := newEthConfirmer(t, txStore, ethClient, cfg, evmcfg, ethKeyStore, nil) @@ -941,7 +941,7 @@ func TestEthConfirmer_CheckForReceipts_confirmed_missing_receipt(t *testing.T) { TransactionIndex: uint(1), Status: uint64(1), } - ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(4), nil) + ethClient.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(4), nil) ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool { return len(b) == 6 && cltest.BatchElemMatchesParams(b[0], attempt0_2.Hash, "eth_getTransactionReceipt") && @@ -1009,7 +1009,7 @@ func TestEthConfirmer_CheckForReceipts_confirmed_missing_receipt(t *testing.T) { TransactionIndex: uint(1), Status: uint64(1), } - ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil) + ethClient.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(10), nil) ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool { return len(b) == 3 && cltest.BatchElemMatchesParams(b[0], attempt1_2.Hash, "eth_getTransactionReceipt") && @@ -1056,7 +1056,7 @@ func TestEthConfirmer_CheckForReceipts_confirmed_missing_receipt(t *testing.T) { // eth_txes with nonce 3 is confirmed t.Run("continues to leave eth_txes with state 'confirmed_missing_receipt' unchanged if at least one attempt is above LatestFinalizedBlockNum", func(t *testing.T) { - ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil) + ethClient.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(10), nil) ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool { return len(b) == 2 && cltest.BatchElemMatchesParams(b[0], attempt1_2.Hash, "eth_getTransactionReceipt") && @@ -1098,7 +1098,7 @@ func TestEthConfirmer_CheckForReceipts_confirmed_missing_receipt(t *testing.T) { // eth_txes with nonce 3 is confirmed t.Run("marks eth_Txes with state 'confirmed_missing_receipt' as 'errored' if a receipt fails to show up and all attempts are buried deeper than LatestFinalizedBlockNum", func(t *testing.T) { - ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(10), nil) + ethClient.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(10), nil) ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool { return len(b) == 2 && cltest.BatchElemMatchesParams(b[0], attempt1_2.Hash, "eth_getTransactionReceipt") && @@ -3262,7 +3262,7 @@ func TestEthConfirmer_ProcessStuckTransactions(t *testing.T) { ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(&head, nil).Once() ethClient.On("LatestFinalizedBlock", mock.Anything).Return(&head, nil).Once() - ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(0), nil).Once() + ethClient.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(0), nil).Once() ethClient.On("BatchCallContext", mock.Anything, mock.Anything).Return(nil).Once() // First call to ProcessHead should: @@ -3289,7 +3289,7 @@ func TestEthConfirmer_ProcessStuckTransactions(t *testing.T) { head.IsFinalized.Store(true) ethClient.On("HeadByNumber", mock.Anything, (*big.Int)(nil)).Return(&head, nil).Once() ethClient.On("LatestFinalizedBlock", mock.Anything).Return(&head, nil).Once() - ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(1), nil) + ethClient.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(1), nil) ethClient.On("BatchCallContext", mock.Anything, mock.MatchedBy(func(b []rpc.BatchElem) bool { return len(b) == 4 && cltest.BatchElemMatchesParams(b[0], latestAttempt.Hash, "eth_getTransactionReceipt") })).Return(nil).Run(func(args mock.Arguments) { diff --git a/core/cmd/evm_transaction_commands_test.go b/core/cmd/evm_transaction_commands_test.go index da153f6884b..1b593dccd84 100644 --- a/core/cmd/evm_transaction_commands_test.go +++ b/core/cmd/evm_transaction_commands_test.go @@ -15,7 +15,6 @@ import ( commonconfig "github.com/smartcontractkit/chainlink-common/pkg/config" "github.com/smartcontractkit/chainlink/v2/core/chains/evm/assets" "github.com/smartcontractkit/chainlink/v2/core/chains/evm/txmgr" - evmtypes "github.com/smartcontractkit/chainlink/v2/core/chains/evm/types" "github.com/smartcontractkit/chainlink/v2/core/cmd" "github.com/smartcontractkit/chainlink/v2/core/internal/cltest" "github.com/smartcontractkit/chainlink/v2/core/internal/testutils" @@ -140,7 +139,7 @@ func TestShell_SendEther_From_Txm(t *testing.T) { ethMock := newEthMockWithTransactionsOnBlocksAssertions(t) ethMock.On("BalanceAt", mock.Anything, key.Address, (*big.Int)(nil)).Return(balance.ToInt(), nil) - ethMock.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(0), nil).Maybe() + ethMock.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(0), nil).Maybe() ethMock.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once() app := startNewApplicationV2(t, func(c *chainlink.Config, s *chainlink.Secrets) { @@ -204,7 +203,7 @@ func TestShell_SendEther_From_Txm_WEI(t *testing.T) { ethMock := newEthMockWithTransactionsOnBlocksAssertions(t) ethMock.On("BalanceAt", mock.Anything, key.Address, (*big.Int)(nil)).Return(balance.ToInt(), nil) - ethMock.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(0), nil).Maybe() + ethMock.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(0), nil).Maybe() ethMock.On("PendingNonceAt", mock.Anything, fromAddress).Return(uint64(0), nil).Once() app := startNewApplicationV2(t, func(c *chainlink.Config, s *chainlink.Secrets) { diff --git a/core/web/evm_transfer_controller_test.go b/core/web/evm_transfer_controller_test.go index ccb2f0774ca..61226839401 100644 --- a/core/web/evm_transfer_controller_test.go +++ b/core/web/evm_transfer_controller_test.go @@ -14,7 +14,6 @@ import ( "github.com/smartcontractkit/chainlink-common/pkg/sqlutil" "github.com/smartcontractkit/chainlink/v2/core/chains/evm/assets" "github.com/smartcontractkit/chainlink/v2/core/chains/evm/txmgr" - evmtypes "github.com/smartcontractkit/chainlink/v2/core/chains/evm/types" ubig "github.com/smartcontractkit/chainlink/v2/core/chains/evm/utils/big" "github.com/smartcontractkit/chainlink/v2/core/internal/cltest" "github.com/smartcontractkit/chainlink/v2/core/internal/testutils" @@ -286,7 +285,7 @@ func TestTransfersController_CreateSuccess_eip1559(t *testing.T) { ethClient.On("PendingNonceAt", mock.Anything, key.Address).Return(uint64(1), nil) ethClient.On("BalanceAt", mock.Anything, key.Address, (*big.Int)(nil)).Return(balance.ToInt(), nil) - ethClient.On("SequenceAt", mock.Anything, mock.Anything, mock.Anything).Return(evmtypes.Nonce(0), nil).Maybe() + ethClient.On("NonceAt", mock.Anything, mock.Anything, mock.Anything).Return(uint64(0), nil).Maybe() config := configtest.NewGeneralConfig(t, func(c *chainlink.Config, s *chainlink.Secrets) { c.EVM[0].GasEstimator.EIP1559DynamicFees = ptr(true) From 072bfb667a4e1f7cc0c874409ebfe6ef7f7b6cbe Mon Sep 17 00:00:00 2001 From: Suryansh <39276431+0xsuryansh@users.noreply.github.com> Date: Mon, 21 Oct 2024 21:10:41 +0530 Subject: [PATCH 06/13] Add `getNextDONId` and `getNodesByP2PIds` Functions and define `ICapabilitiesRegistry` Interface (#14696) * feat: add getNextDonId and batch getNodes getter * fix: prettier * add changeset * feat: add interface to fetch NodeInfo from CapabilitiesRegistry * prettier fix * prettier fix * add test for getNodes revert on invalid p2pId * merge fixes * fix offchain setup * forge fmt * CCIP-3569 update changeset * CCIP-3569 core changeset * CCIP-3569 bump version of CapabilitiesRegistry * Update gethwrappers * CCIP-3569 bump version of CapabilitiesRegistry in test * fix wrappers * Update gethwrappers * correct pragma for INodeInfoProvider.sol * fix wrapper --------- Co-authored-by: app-token-issuer-infra-releng[bot] <120227048+app-token-issuer-infra-releng[bot]@users.noreply.github.com> --- .changeset/angry-fishes-ring.md | 8 + contracts/.changeset/hungry-badgers-jump.md | 9 + contracts/gas-snapshots/ccip.gas-snapshot | 67 +++--- contracts/gas-snapshots/keystone.gas-snapshot | 87 +++---- .../src/v0.8/ccip/capability/CCIPHome.sol | 11 +- .../v0.8/ccip/test/capability/CCIPHome.t.sol | 216 +++++++----------- .../v0.8/keystone/CapabilitiesRegistry.sol | 53 ++--- .../interfaces/INodeInfoProvider.sol} | 32 ++- ...apabilitiesRegistry_GetNextDONIdTest.t.sol | 92 ++++++++ .../CapabilitiesRegistry_GetNodesTest.t.sol | 19 ++ ...CapabilitiesRegistry_RemoveNodesTest.t.sol | 5 +- ...abilitiesRegistry_TypeAndVersionTest.t.sol | 2 +- ...CapabilitiesRegistry_UpdateNodesTest.t.sol | 5 +- core/capabilities/ccip/launcher/diff_test.go | 4 +- core/capabilities/ccip/launcher/launcher.go | 2 +- core/capabilities/launcher_test.go | 12 +- .../ccip/generated/ccip_home/ccip_home.go | 4 +- ...rapper-dependency-versions-do-not-edit.txt | 2 +- .../capabilities_registry.go | 96 ++++++-- ...rapper-dependency-versions-do-not-edit.txt | 2 +- .../services/registrysyncer/local_registry.go | 4 +- core/services/registrysyncer/orm.go | 4 +- core/services/registrysyncer/orm_test.go | 2 +- core/services/registrysyncer/syncer.go | 8 +- core/services/registrysyncer/syncer_test.go | 6 +- 25 files changed, 444 insertions(+), 308 deletions(-) create mode 100644 .changeset/angry-fishes-ring.md create mode 100644 contracts/.changeset/hungry-badgers-jump.md rename contracts/src/v0.8/{ccip/interfaces/ICapabilitiesRegistry.sol => keystone/interfaces/INodeInfoProvider.sol} (52%) create mode 100644 contracts/src/v0.8/keystone/test/CapabilitiesRegistry_GetNextDONIdTest.t.sol diff --git a/.changeset/angry-fishes-ring.md b/.changeset/angry-fishes-ring.md new file mode 100644 index 00000000000..86671967372 --- /dev/null +++ b/.changeset/angry-fishes-ring.md @@ -0,0 +1,8 @@ +--- +"chainlink": minor +--- + +#internal add getNextDonId() and getNodes(bytes32[] calldata p2pIds) in CapabilitiesRegistry and define interface for node info + + +PR issue: CCIP-3569 \ No newline at end of file diff --git a/contracts/.changeset/hungry-badgers-jump.md b/contracts/.changeset/hungry-badgers-jump.md new file mode 100644 index 00000000000..9fba12fb6f2 --- /dev/null +++ b/contracts/.changeset/hungry-badgers-jump.md @@ -0,0 +1,9 @@ +--- +'@chainlink/contracts': minor +--- + +#internal add getNextDonId() and getNodes(bytes32[] calldata p2pIds) in CapabilitiesRegistry and define interface for node info + + + +PR issue: CCIP-3569 \ No newline at end of file diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index 78a14c69523..a86ecc87efd 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -20,52 +20,51 @@ BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 244092) BurnWithFromMintTokenPool_lockOrBurn:test_Setup_Success() (gas: 24189) CCIPClientExample_sanity:test_ImmutableExamples_Success() (gas: 2108396) -CCIPHome__validateConfig:test__validateConfigLessTransmittersThanSigners_Success() (gas: 335794) -CCIPHome__validateConfig:test__validateConfigSmallerFChain_Success() (gas: 468721) -CCIPHome__validateConfig:test__validateConfig_ABIEncodedAddress_OfframpAddressCannotBeZero_Reverts() (gas: 290481) -CCIPHome__validateConfig:test__validateConfig_ABIEncodedAddress_RMNHomeAddressCannotBeZero_Reverts() (gas: 290754) -CCIPHome__validateConfig:test__validateConfig_ChainSelectorNotFound_Reverts() (gas: 293491) -CCIPHome__validateConfig:test__validateConfig_ChainSelectorNotSet_Reverts() (gas: 290092) -CCIPHome__validateConfig:test__validateConfig_FChainTooHigh_Reverts() (gas: 338872) -CCIPHome__validateConfig:test__validateConfig_FMustBePositive_Reverts() (gas: 291865) -CCIPHome__validateConfig:test__validateConfig_FTooHigh_Reverts() (gas: 291412) -CCIPHome__validateConfig:test__validateConfig_NodeNotInRegistry_Reverts() (gas: 345901) -CCIPHome__validateConfig:test__validateConfig_NotEnoughTransmittersEmptyAddresses_Reverts() (gas: 309921) -CCIPHome__validateConfig:test__validateConfig_NotEnoughTransmitters_Reverts() (gas: 1219220) -CCIPHome__validateConfig:test__validateConfig_OfframpAddressCannotBeZero_Reverts() (gas: 290208) -CCIPHome__validateConfig:test__validateConfig_RMNHomeAddressCannotBeZero_Reverts() (gas: 290402) -CCIPHome__validateConfig:test__validateConfig_Success() (gas: 301560) -CCIPHome__validateConfig:test__validateConfig_TooManySigners_Reverts() (gas: 774058) -CCIPHome__validateConfig:test__validateConfig_ZeroP2PId_Reverts() (gas: 294730) -CCIPHome__validateConfig:test__validateConfig_ZeroSignerKey_Reverts() (gas: 294777) -CCIPHome_applyChainConfigUpdates:test__applyChainConfigUpdates_FChainNotPositive_Reverts() (gas: 185425) -CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_addChainConfigs_Success() (gas: 347454) -CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_nodeNotInRegistry_Reverts() (gas: 20780) -CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_removeChainConfigs_Success() (gas: 271006) +CCIPHome__validateConfig:test__validateConfigLessTransmittersThanSigners_Success() (gas: 332601) +CCIPHome__validateConfig:test__validateConfigSmallerFChain_Success() (gas: 458549) +CCIPHome__validateConfig:test__validateConfig_ABIEncodedAddress_OfframpAddressCannotBeZero_Reverts() (gas: 289173) +CCIPHome__validateConfig:test__validateConfig_ABIEncodedAddress_RMNHomeAddressCannotBeZero_Reverts() (gas: 289468) +CCIPHome__validateConfig:test__validateConfig_ChainSelectorNotFound_Reverts() (gas: 292198) +CCIPHome__validateConfig:test__validateConfig_ChainSelectorNotSet_Reverts() (gas: 288806) +CCIPHome__validateConfig:test__validateConfig_FChainTooHigh_Reverts() (gas: 336339) +CCIPHome__validateConfig:test__validateConfig_FMustBePositive_Reverts() (gas: 290572) +CCIPHome__validateConfig:test__validateConfig_FTooHigh_Reverts() (gas: 290037) +CCIPHome__validateConfig:test__validateConfig_NotEnoughTransmittersEmptyAddresses_Reverts() (gas: 308628) +CCIPHome__validateConfig:test__validateConfig_NotEnoughTransmitters_Reverts() (gas: 1191207) +CCIPHome__validateConfig:test__validateConfig_OfframpAddressCannotBeZero_Reverts() (gas: 288900) +CCIPHome__validateConfig:test__validateConfig_RMNHomeAddressCannotBeZero_Reverts() (gas: 289094) +CCIPHome__validateConfig:test__validateConfig_Success() (gas: 299779) +CCIPHome__validateConfig:test__validateConfig_TooManySigners_Reverts() (gas: 773087) +CCIPHome__validateConfig:test__validateConfig_ZeroP2PId_Reverts() (gas: 293437) +CCIPHome__validateConfig:test__validateConfig_ZeroSignerKey_Reverts() (gas: 293485) +CCIPHome_applyChainConfigUpdates:test__applyChainConfigUpdates_FChainNotPositive_Reverts() (gas: 187716) +CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_addChainConfigs_Success() (gas: 349798) +CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_nodeNotInRegistry_Reverts() (gas: 18043) +CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_removeChainConfigs_Success() (gas: 272797) CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_selectorNotFound_Reverts() (gas: 14930) -CCIPHome_applyChainConfigUpdates:test_getPaginatedCCIPHomes_Success() (gas: 371164) -CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_DONIdMismatch_reverts() (gas: 27137) +CCIPHome_applyChainConfigUpdates:test_getPaginatedCCIPHomes_Success() (gas: 373719) +CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_DONIdMismatch_reverts() (gas: 38052) CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_InnerCallReverts_reverts() (gas: 11783) CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_InvalidSelector_reverts() (gas: 11038) -CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_OnlyCapabilitiesRegistryCanCall_reverts() (gas: 26173) -CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_success() (gas: 1437037) -CCIPHome_constructor:test_constructor_CapabilitiesRegistryAddressZero_reverts() (gas: 63878) -CCIPHome_constructor:test_constructor_success() (gas: 3516226) +CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_OnlyCapabilitiesRegistryCanCall_reverts() (gas: 37071) +CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_success() (gas: 1455626) +CCIPHome_constructor:test_constructor_CapabilitiesRegistryAddressZero_reverts() (gas: 63886) +CCIPHome_constructor:test_constructor_success() (gas: 3526450) CCIPHome_constructor:test_getCapabilityConfiguration_success() (gas: 9151) CCIPHome_constructor:test_supportsInterface_success() (gas: 9931) -CCIPHome_getAllConfigs:test_getAllConfigs_success() (gas: 2765592) -CCIPHome_getConfigDigests:test_getConfigDigests_success() (gas: 2540012) +CCIPHome_getAllConfigs:test_getAllConfigs_success() (gas: 2772754) +CCIPHome_getConfigDigests:test_getConfigDigests_success() (gas: 2547429) CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_CanOnlySelfCall_reverts() (gas: 9110) CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_ConfigDigestMismatch_reverts() (gas: 23052) CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_NoOpStateTransitionNotAllowed_reverts() (gas: 8818) -CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_multiplePlugins_success() (gas: 5096688) +CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_multiplePlugins_success() (gas: 5113562) CCIPHome_revokeCandidate:test_revokeCandidate_CanOnlySelfCall_reverts() (gas: 9046) CCIPHome_revokeCandidate:test_revokeCandidate_ConfigDigestMismatch_reverts() (gas: 19106) CCIPHome_revokeCandidate:test_revokeCandidate_RevokingZeroDigestNotAllowed_reverts() (gas: 8773) CCIPHome_revokeCandidate:test_revokeCandidate_success() (gas: 30699) -CCIPHome_setCandidate:test_setCandidate_CanOnlySelfCall_reverts() (gas: 19051) -CCIPHome_setCandidate:test_setCandidate_ConfigDigestMismatch_reverts() (gas: 1388623) -CCIPHome_setCandidate:test_setCandidate_success() (gas: 1357884) +CCIPHome_setCandidate:test_setCandidate_CanOnlySelfCall_reverts() (gas: 29359) +CCIPHome_setCandidate:test_setCandidate_ConfigDigestMismatch_reverts() (gas: 1395130) +CCIPHome_setCandidate:test_setCandidate_success() (gas: 1365381) DefensiveExampleTest:test_HappyPath_Success() (gas: 200048) DefensiveExampleTest:test_Recovery() (gas: 424306) E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1518589) diff --git a/contracts/gas-snapshots/keystone.gas-snapshot b/contracts/gas-snapshots/keystone.gas-snapshot index eaa90b81826..d8ba041a5df 100644 --- a/contracts/gas-snapshots/keystone.gas-snapshot +++ b/contracts/gas-snapshots/keystone.gas-snapshot @@ -1,20 +1,20 @@ -CapabilitiesRegistry_AddCapabilitiesTest:test_AddCapability_NoConfigurationContract() (gas: 154787) -CapabilitiesRegistry_AddCapabilitiesTest:test_AddCapability_WithConfiguration() (gas: 180379) +CapabilitiesRegistry_AddCapabilitiesTest:test_AddCapability_NoConfigurationContract() (gas: 154800) +CapabilitiesRegistry_AddCapabilitiesTest:test_AddCapability_WithConfiguration() (gas: 180392) CapabilitiesRegistry_AddCapabilitiesTest:test_RevertWhen_CalledByNonAdmin() (gas: 24678) -CapabilitiesRegistry_AddCapabilitiesTest:test_RevertWhen_CapabilityExists() (gas: 145613) -CapabilitiesRegistry_AddCapabilitiesTest:test_RevertWhen_ConfigurationContractDoesNotMatchInterface() (gas: 94543) -CapabilitiesRegistry_AddCapabilitiesTest:test_RevertWhen_ConfigurationContractNotDeployed() (gas: 96349) -CapabilitiesRegistry_AddDONTest:test_AddDON() (gas: 373940) -CapabilitiesRegistry_AddDONTest:test_RevertWhen_CalledByNonAdmin() (gas: 19288) -CapabilitiesRegistry_AddDONTest:test_RevertWhen_CapabilityDoesNotExist() (gas: 169767) -CapabilitiesRegistry_AddDONTest:test_RevertWhen_DeprecatedCapabilityAdded() (gas: 239806) -CapabilitiesRegistry_AddDONTest:test_RevertWhen_DuplicateCapabilityAdded() (gas: 250928) -CapabilitiesRegistry_AddDONTest:test_RevertWhen_DuplicateNodeAdded() (gas: 116883) -CapabilitiesRegistry_AddDONTest:test_RevertWhen_FaultToleranceIsZero() (gas: 43351) -CapabilitiesRegistry_AddDONTest:test_RevertWhen_NodeAlreadyBelongsToWorkflowDON() (gas: 344037) -CapabilitiesRegistry_AddDONTest:test_RevertWhen_NodeDoesNotSupportCapability() (gas: 180143) -CapabilitiesRegistry_AddDONTest_WhenMaliciousCapabilityConfigurationConfigured:test_RevertWhen_MaliciousCapabilitiesConfigContractTriesToRemoveCapabilitiesFromDONNodes() (gas: 340724) -CapabilitiesRegistry_AddNodeOperatorsTest:test_AddNodeOperators() (gas: 184157) +CapabilitiesRegistry_AddCapabilitiesTest:test_RevertWhen_CapabilityExists() (gas: 145611) +CapabilitiesRegistry_AddCapabilitiesTest:test_RevertWhen_ConfigurationContractDoesNotMatchInterface() (gas: 94542) +CapabilitiesRegistry_AddCapabilitiesTest:test_RevertWhen_ConfigurationContractNotDeployed() (gas: 96348) +CapabilitiesRegistry_AddDONTest:test_AddDON() (gas: 373985) +CapabilitiesRegistry_AddDONTest:test_RevertWhen_CalledByNonAdmin() (gas: 19333) +CapabilitiesRegistry_AddDONTest:test_RevertWhen_CapabilityDoesNotExist() (gas: 169812) +CapabilitiesRegistry_AddDONTest:test_RevertWhen_DeprecatedCapabilityAdded() (gas: 239851) +CapabilitiesRegistry_AddDONTest:test_RevertWhen_DuplicateCapabilityAdded() (gas: 250973) +CapabilitiesRegistry_AddDONTest:test_RevertWhen_DuplicateNodeAdded() (gas: 116928) +CapabilitiesRegistry_AddDONTest:test_RevertWhen_FaultToleranceIsZero() (gas: 43396) +CapabilitiesRegistry_AddDONTest:test_RevertWhen_NodeAlreadyBelongsToWorkflowDON() (gas: 344127) +CapabilitiesRegistry_AddDONTest:test_RevertWhen_NodeDoesNotSupportCapability() (gas: 180188) +CapabilitiesRegistry_AddDONTest_WhenMaliciousCapabilityConfigurationConfigured:test_RevertWhen_MaliciousCapabilitiesConfigContractTriesToRemoveCapabilitiesFromDONNodes() (gas: 340769) +CapabilitiesRegistry_AddNodeOperatorsTest:test_AddNodeOperators() (gas: 184201) CapabilitiesRegistry_AddNodeOperatorsTest:test_RevertWhen_CalledByNonAdmin() (gas: 17624) CapabilitiesRegistry_AddNodeOperatorsTest:test_RevertWhen_NodeOperatorAdminAddressZero() (gas: 18542) CapabilitiesRegistry_AddNodesTest:test_AddsNodeParams() (gas: 380796) @@ -28,35 +28,38 @@ CapabilitiesRegistry_AddNodesTest:test_RevertWhen_EncryptionPublicKeyEmpty() (ga CapabilitiesRegistry_AddNodesTest:test_RevertWhen_P2PIDEmpty() (gas: 27558) CapabilitiesRegistry_AddNodesTest:test_RevertWhen_SignerAddressEmpty() (gas: 27241) CapabilitiesRegistry_AddNodesTest:test_RevertWhen_SignerAddressNotUnique() (gas: 332070) -CapabilitiesRegistry_DeprecateCapabilitiesTest:test_DeprecatesCapability() (gas: 89742) -CapabilitiesRegistry_DeprecateCapabilitiesTest:test_EmitsEvent() (gas: 89892) -CapabilitiesRegistry_DeprecateCapabilitiesTest:test_RevertWhen_CalledByNonAdmin() (gas: 22879) +CapabilitiesRegistry_DeprecateCapabilitiesTest:test_DeprecatesCapability() (gas: 89796) +CapabilitiesRegistry_DeprecateCapabilitiesTest:test_EmitsEvent() (gas: 89924) +CapabilitiesRegistry_DeprecateCapabilitiesTest:test_RevertWhen_CalledByNonAdmin() (gas: 22911) CapabilitiesRegistry_DeprecateCapabilitiesTest:test_RevertWhen_CapabilityDoesNotExist() (gas: 16188) -CapabilitiesRegistry_DeprecateCapabilitiesTest:test_RevertWhen_CapabilityIsDeprecated() (gas: 91178) -CapabilitiesRegistry_GetCapabilitiesTest:test_ReturnsCapabilities() (gas: 135513) -CapabilitiesRegistry_GetDONsTest:test_CorrectlyFetchesDONs() (gas: 65468) -CapabilitiesRegistry_GetDONsTest:test_DoesNotIncludeRemovedDONs() (gas: 65016) -CapabilitiesRegistry_GetHashedCapabilityTest:test_CorrectlyGeneratesHashedCapabilityId() (gas: 11428) -CapabilitiesRegistry_GetHashedCapabilityTest:test_DoesNotCauseIncorrectClashes() (gas: 13087) +CapabilitiesRegistry_DeprecateCapabilitiesTest:test_RevertWhen_CapabilityIsDeprecated() (gas: 91210) +CapabilitiesRegistry_GetCapabilitiesTest:test_ReturnsCapabilities() (gas: 135531) +CapabilitiesRegistry_GetDONsTest:test_CorrectlyFetchesDONs() (gas: 65490) +CapabilitiesRegistry_GetDONsTest:test_DoesNotIncludeRemovedDONs() (gas: 65060) +CapabilitiesRegistry_GetHashedCapabilityTest:test_CorrectlyGeneratesHashedCapabilityId() (gas: 11460) +CapabilitiesRegistry_GetHashedCapabilityTest:test_DoesNotCauseIncorrectClashes() (gas: 13151) +CapabilitiesRegistry_GetNextDONIdTest:test_CorrectlyFetchesNextDONId() (gas: 348178) CapabilitiesRegistry_GetNodeOperatorsTest:test_CorrectlyFetchesNodeOperators() (gas: 36429) CapabilitiesRegistry_GetNodeOperatorsTest:test_DoesNotIncludeRemovedNodeOperators() (gas: 38714) -CapabilitiesRegistry_GetNodesTest:test_CorrectlyFetchesNodes() (gas: 69770) -CapabilitiesRegistry_GetNodesTest:test_DoesNotIncludeRemovedNodes() (gas: 79302) -CapabilitiesRegistry_RemoveDONsTest:test_RemovesDON() (gas: 55004) -CapabilitiesRegistry_RemoveDONsTest:test_RevertWhen_CalledByNonAdmin() (gas: 15625) -CapabilitiesRegistry_RemoveDONsTest:test_RevertWhen_DONDoesNotExist() (gas: 16528) -CapabilitiesRegistry_RemoveNodeOperatorsTest:test_RemovesNodeOperator() (gas: 36122) +CapabilitiesRegistry_GetNodesTest:test_CorrectlyFetchesNodes() (gas: 69748) +CapabilitiesRegistry_GetNodesTest:test_CorrectlyFetchesSpecificNodes() (gas: 32177) +CapabilitiesRegistry_GetNodesTest:test_DoesNotIncludeRemovedNodes() (gas: 79284) +CapabilitiesRegistry_GetNodesTest:test_GetNodesByP2PIdsInvalidNode_Revers() (gas: 26249) +CapabilitiesRegistry_RemoveDONsTest:test_RemovesDON() (gas: 55026) +CapabilitiesRegistry_RemoveDONsTest:test_RevertWhen_CalledByNonAdmin() (gas: 15647) +CapabilitiesRegistry_RemoveDONsTest:test_RevertWhen_DONDoesNotExist() (gas: 16561) +CapabilitiesRegistry_RemoveNodeOperatorsTest:test_RemovesNodeOperator() (gas: 36157) CapabilitiesRegistry_RemoveNodeOperatorsTest:test_RevertWhen_CalledByNonOwner() (gas: 15816) CapabilitiesRegistry_RemoveNodesTest:test_CanAddNodeWithSameSignerAddressAfterRemoving() (gas: 117736) -CapabilitiesRegistry_RemoveNodesTest:test_CanRemoveWhenDONDeleted() (gas: 288096) -CapabilitiesRegistry_RemoveNodesTest:test_CanRemoveWhenNodeNoLongerPartOfDON() (gas: 561442) +CapabilitiesRegistry_RemoveNodesTest:test_CanRemoveWhenDONDeleted() (gas: 288163) +CapabilitiesRegistry_RemoveNodesTest:test_CanRemoveWhenNodeNoLongerPartOfDON() (gas: 561487) CapabilitiesRegistry_RemoveNodesTest:test_OwnerCanRemoveNodes() (gas: 77404) CapabilitiesRegistry_RemoveNodesTest:test_RemovesNode() (gas: 79239) CapabilitiesRegistry_RemoveNodesTest:test_RevertWhen_CalledByNonNodeOperatorAdminAndNonOwner() (gas: 25008) CapabilitiesRegistry_RemoveNodesTest:test_RevertWhen_NodeDoesNotExist() (gas: 18373) -CapabilitiesRegistry_RemoveNodesTest:test_RevertWhen_NodePartOfCapabilitiesDON() (gas: 385422) +CapabilitiesRegistry_RemoveNodesTest:test_RevertWhen_NodePartOfCapabilitiesDON() (gas: 385467) CapabilitiesRegistry_RemoveNodesTest:test_RevertWhen_P2PIDEmpty() (gas: 18363) -CapabilitiesRegistry_TypeAndVersionTest:test_TypeAndVersion() (gas: 9813) +CapabilitiesRegistry_TypeAndVersionTest:test_TypeAndVersion() (gas: 9768) CapabilitiesRegistry_UpdateDONTest:test_RevertWhen_CalledByNonAdmin() (gas: 19323) CapabilitiesRegistry_UpdateDONTest:test_RevertWhen_CapabilityDoesNotExist() (gas: 152958) CapabilitiesRegistry_UpdateDONTest:test_RevertWhen_DONDoesNotExist() (gas: 17749) @@ -65,11 +68,11 @@ CapabilitiesRegistry_UpdateDONTest:test_RevertWhen_DuplicateCapabilityAdded() (g CapabilitiesRegistry_UpdateDONTest:test_RevertWhen_DuplicateNodeAdded() (gas: 107687) CapabilitiesRegistry_UpdateDONTest:test_RevertWhen_NodeDoesNotSupportCapability() (gas: 163401) CapabilitiesRegistry_UpdateDONTest:test_UpdatesDON() (gas: 373535) -CapabilitiesRegistry_UpdateNodeOperatorTest:test_RevertWhen_CalledByNonAdminAndNonOwner() (gas: 20662) -CapabilitiesRegistry_UpdateNodeOperatorTest:test_RevertWhen_NodeOperatorAdminIsZeroAddress() (gas: 20031) -CapabilitiesRegistry_UpdateNodeOperatorTest:test_RevertWhen_NodeOperatorDoesNotExist() (gas: 19724) -CapabilitiesRegistry_UpdateNodeOperatorTest:test_RevertWhen_NodeOperatorIdAndParamLengthsMismatch() (gas: 15386) -CapabilitiesRegistry_UpdateNodeOperatorTest:test_UpdatesNodeOperator() (gas: 37056) +CapabilitiesRegistry_UpdateNodeOperatorTest:test_RevertWhen_CalledByNonAdminAndNonOwner() (gas: 20728) +CapabilitiesRegistry_UpdateNodeOperatorTest:test_RevertWhen_NodeOperatorAdminIsZeroAddress() (gas: 20097) +CapabilitiesRegistry_UpdateNodeOperatorTest:test_RevertWhen_NodeOperatorDoesNotExist() (gas: 19790) +CapabilitiesRegistry_UpdateNodeOperatorTest:test_RevertWhen_NodeOperatorIdAndParamLengthsMismatch() (gas: 15452) +CapabilitiesRegistry_UpdateNodeOperatorTest:test_UpdatesNodeOperator() (gas: 37144) CapabilitiesRegistry_UpdateNodesTest:test_CanUpdateParamsIfNodeSignerAddressNoLongerUsed() (gas: 261420) CapabilitiesRegistry_UpdateNodesTest:test_OwnerCanUpdateNodes() (gas: 164875) CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_AddingNodeWithInvalidCapability() (gas: 36026) @@ -79,8 +82,8 @@ CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_EncryptionPublicKeyEmpty() CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_NodeDoesNotExist() (gas: 29326) CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_NodeSignerAlreadyAssignedToAnotherNode() (gas: 31452) CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_P2PIDEmpty() (gas: 29292) -CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_RemovingCapabilityRequiredByCapabilityDON() (gas: 471157) -CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_RemovingCapabilityRequiredByWorkflowDON() (gas: 341503) +CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_RemovingCapabilityRequiredByCapabilityDON() (gas: 471202) +CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_RemovingCapabilityRequiredByWorkflowDON() (gas: 341548) CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_SignerAddressEmpty() (gas: 29184) CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_UpdatingNodeWithoutCapabilities() (gas: 27739) CapabilitiesRegistry_UpdateNodesTest:test_UpdatesNodeParams() (gas: 164929) diff --git a/contracts/src/v0.8/ccip/capability/CCIPHome.sol b/contracts/src/v0.8/ccip/capability/CCIPHome.sol index e66e2f56ec7..c343e0200ec 100644 --- a/contracts/src/v0.8/ccip/capability/CCIPHome.sol +++ b/contracts/src/v0.8/ccip/capability/CCIPHome.sol @@ -2,8 +2,9 @@ pragma solidity 0.8.24; import {ICapabilityConfiguration} from "../../keystone/interfaces/ICapabilityConfiguration.sol"; + +import {INodeInfoProvider} from "../../keystone/interfaces/INodeInfoProvider.sol"; import {ITypeAndVersion} from "../../shared/interfaces/ITypeAndVersion.sol"; -import {ICapabilitiesRegistry} from "../interfaces/ICapabilitiesRegistry.sol"; import {OwnerIsCreator} from "../../shared/access/OwnerIsCreator.sol"; import {Internal} from "../libraries/Internal.sol"; @@ -73,7 +74,6 @@ contract CCIPHome is OwnerIsCreator, ITypeAndVersion, ICapabilityConfiguration, event CandidateConfigRevoked(bytes32 indexed configDigest); event ConfigPromoted(bytes32 indexed configDigest); - error NodeNotInRegistry(bytes32 p2pId); error ChainSelectorNotFound(uint64 chainSelector); error FChainMustBePositive(); error ChainSelectorNotSet(); @@ -614,11 +614,8 @@ contract CCIPHome is OwnerIsCreator, ITypeAndVersion, ICapabilityConfiguration, function _ensureInRegistry( bytes32[] memory p2pIds ) internal view { - for (uint256 i = 0; i < p2pIds.length; ++i) { - // TODO add a method that does the validation in the ICapabilitiesRegistry contract - if (ICapabilitiesRegistry(i_capabilitiesRegistry).getNode(p2pIds[i]).p2pId == bytes32("")) { - revert NodeNotInRegistry(p2pIds[i]); - } + if (p2pIds.length != 0) { + INodeInfoProvider(i_capabilitiesRegistry).getNodesByP2PIds(p2pIds); } } } diff --git a/contracts/src/v0.8/ccip/test/capability/CCIPHome.t.sol b/contracts/src/v0.8/ccip/test/capability/CCIPHome.t.sol index b03081b4be6..d142e5fbfed 100644 --- a/contracts/src/v0.8/ccip/test/capability/CCIPHome.t.sol +++ b/contracts/src/v0.8/ccip/test/capability/CCIPHome.t.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.24; import {ICapabilityConfiguration} from "../../../keystone/interfaces/ICapabilityConfiguration.sol"; -import {ICapabilitiesRegistry} from "../../interfaces/ICapabilitiesRegistry.sol"; +import {INodeInfoProvider} from "../../../keystone/interfaces/INodeInfoProvider.sol"; import {CCIPHome} from "../../capability/CCIPHome.sol"; import {Internal} from "../../libraries/Internal.sol"; @@ -29,22 +29,6 @@ contract CCIPHomeTest is Test { function setUp() public virtual { s_ccipHome = new CCIPHomeHelper(CAPABILITIES_REGISTRY); s_ccipHome.applyChainConfigUpdates(new uint64[](0), _getBaseChainConfigs()); - - ICapabilitiesRegistry.NodeInfo memory nodeInfo = ICapabilitiesRegistry.NodeInfo({ - p2pId: keccak256("p2pId"), - signer: keccak256("signer"), - nodeOperatorId: 1, - configCount: 1, - workflowDONId: 1, - encryptionPublicKey: keccak256("encryptionPublicKey"), - hashedCapabilityIds: new bytes32[](0), - capabilitiesDONIds: new uint256[](0) - }); - - vm.mockCall( - CAPABILITIES_REGISTRY, abi.encodeWithSelector(ICapabilitiesRegistry.getNode.selector), abi.encode(nodeInfo) - ); - vm.startPrank(address(s_ccipHome)); } @@ -79,9 +63,11 @@ contract CCIPHomeTest is Test { function _getBaseConfig( Internal.OCRPluginType pluginType - ) internal pure returns (CCIPHome.OCR3Config memory) { + ) internal returns (CCIPHome.OCR3Config memory) { CCIPHome.OCR3Node[] memory nodes = new CCIPHome.OCR3Node[](4); + bytes32[] memory p2pIds = new bytes32[](4); for (uint256 i = 0; i < nodes.length; i++) { + p2pIds[i] = keccak256(abi.encode("p2pId", i)); nodes[i] = CCIPHome.OCR3Node({ p2pId: keccak256(abi.encode("p2pId", i)), signerKey: abi.encode("signerKey"), @@ -89,6 +75,14 @@ contract CCIPHomeTest is Test { }); } + // This is a work-around for not calling mockCall / expectCall with each scenario using _getBaseConfig + INodeInfoProvider.NodeInfo[] memory nodeInfos = new INodeInfoProvider.NodeInfo[](4); + vm.mockCall( + CAPABILITIES_REGISTRY, + abi.encodeWithSelector(INodeInfoProvider.getNodesByP2PIds.selector, p2pIds), + abi.encode(nodeInfos) + ); + return CCIPHome.OCR3Config({ pluginType: pluginType, chainSelector: DEFAULT_CHAIN_SELECTOR, @@ -506,27 +500,25 @@ contract CCIPHome__validateConfig is CCIPHomeTest { bytes[] memory transmitters = _makeBytesArray(numNodes, 20); nodes = new CCIPHome.OCR3Node[](numNodes); - + INodeInfoProvider.NodeInfo[] memory nodeInfos = new INodeInfoProvider.NodeInfo[](numNodes); for (uint256 i = 0; i < numNodes; i++) { nodes[i] = CCIPHome.OCR3Node({p2pId: p2pIds[i], signerKey: signers[i], transmitterKey: transmitters[i]}); - - vm.mockCall( - CAPABILITIES_REGISTRY, - abi.encodeWithSelector(ICapabilitiesRegistry.getNode.selector, p2pIds[i]), - abi.encode( - ICapabilitiesRegistry.NodeInfo({ - nodeOperatorId: 1, - signer: bytes32(signers[i]), - p2pId: p2pIds[i], - encryptionPublicKey: keccak256("encryptionPublicKey"), - hashedCapabilityIds: new bytes32[](0), - configCount: uint32(1), - workflowDONId: uint32(1), - capabilitiesDONIds: new uint256[](0) - }) - ) - ); + nodeInfos[i] = INodeInfoProvider.NodeInfo({ + nodeOperatorId: 1, + signer: bytes32(signers[i]), + p2pId: p2pIds[i], + encryptionPublicKey: keccak256("encryptionPublicKey"), + hashedCapabilityIds: new bytes32[](0), + configCount: uint32(1), + workflowDONId: uint32(1), + capabilitiesDONIds: new uint256[](0) + }); } + vm.mockCall( + CAPABILITIES_REGISTRY, + abi.encodeWithSelector(INodeInfoProvider.getNodesByP2PIds.selector, p2pIds), + abi.encode(nodeInfos) + ); // Add chain selector for chain 1. CCIPHome.ChainConfigArgs[] memory adds = new CCIPHome.ChainConfigArgs[](1); adds[0] = CCIPHome.ChainConfigArgs({ @@ -717,34 +709,6 @@ contract CCIPHome__validateConfig is CCIPHomeTest { vm.expectRevert(abi.encodeWithSelector(CCIPHome.InvalidNode.selector, config.nodes[2])); s_ccipHome.validateConfig(config); } - - function test__validateConfig_NodeNotInRegistry_Reverts() public { - CCIPHome.OCR3Node[] memory nodes = _addChainConfig(4); - bytes32 nonExistentP2PId = keccak256("notInRegistry"); - nodes[0].p2pId = nonExistentP2PId; - - vm.mockCall( - CAPABILITIES_REGISTRY, - abi.encodeWithSelector(ICapabilitiesRegistry.getNode.selector, nonExistentP2PId), - abi.encode( - ICapabilitiesRegistry.NodeInfo({ - nodeOperatorId: 0, - signer: bytes32(0), - p2pId: bytes32(uint256(0)), - encryptionPublicKey: keccak256("encryptionPublicKey"), - hashedCapabilityIds: new bytes32[](0), - configCount: uint32(1), - workflowDONId: uint32(1), - capabilitiesDONIds: new uint256[](0) - }) - ) - ); - CCIPHome.OCR3Config memory config = _getCorrectOCR3Config(); - config.nodes = nodes; - - vm.expectRevert(abi.encodeWithSelector(CCIPHome.NodeNotInRegistry.selector, nonExistentP2PId)); - s_ccipHome.validateConfig(config); - } } contract CCIPHome_applyChainConfigUpdates is CCIPHomeTest { @@ -764,21 +728,21 @@ contract CCIPHome_applyChainConfigUpdates is CCIPHomeTest { chainSelector: 2, chainConfig: CCIPHome.ChainConfig({readers: chainReaders, fChain: 1, config: bytes("config2")}) }); + INodeInfoProvider.NodeInfo[] memory nodeInfos = new INodeInfoProvider.NodeInfo[](1); + nodeInfos[0] = INodeInfoProvider.NodeInfo({ + nodeOperatorId: 1, + signer: bytes32(uint256(1)), + p2pId: chainReaders[0], + encryptionPublicKey: keccak256("encryptionPublicKey"), + hashedCapabilityIds: new bytes32[](0), + configCount: uint32(1), + workflowDONId: uint32(1), + capabilitiesDONIds: new uint256[](0) + }); vm.mockCall( CAPABILITIES_REGISTRY, - abi.encodeWithSelector(ICapabilitiesRegistry.getNode.selector, chainReaders[0]), - abi.encode( - ICapabilitiesRegistry.NodeInfo({ - nodeOperatorId: 1, - signer: bytes32(uint256(1)), - p2pId: chainReaders[0], - encryptionPublicKey: keccak256("encryptionPublicKey"), - hashedCapabilityIds: new bytes32[](0), - configCount: uint32(1), - workflowDONId: uint32(1), - capabilitiesDONIds: new uint256[](0) - }) - ) + abi.encodeWithSelector(INodeInfoProvider.getNodesByP2PIds.selector, chainReaders), + abi.encode(nodeInfos) ); vm.expectEmit(); emit CCIPHome.ChainConfigSet(1, adds[0].chainConfig); @@ -805,21 +769,21 @@ contract CCIPHome_applyChainConfigUpdates is CCIPHomeTest { chainSelector: 2, chainConfig: CCIPHome.ChainConfig({readers: chainReaders, fChain: 1, config: bytes("config2")}) }); + INodeInfoProvider.NodeInfo[] memory nodeInfos = new INodeInfoProvider.NodeInfo[](1); + nodeInfos[0] = INodeInfoProvider.NodeInfo({ + nodeOperatorId: 1, + signer: bytes32(uint256(1)), + p2pId: chainReaders[0], + encryptionPublicKey: keccak256("encryptionPublicKey"), + hashedCapabilityIds: new bytes32[](0), + configCount: uint32(1), + workflowDONId: uint32(1), + capabilitiesDONIds: new uint256[](0) + }); vm.mockCall( CAPABILITIES_REGISTRY, - abi.encodeWithSelector(ICapabilitiesRegistry.getNode.selector, chainReaders[0]), - abi.encode( - ICapabilitiesRegistry.NodeInfo({ - nodeOperatorId: 1, - signer: bytes32(uint256(1)), - p2pId: chainReaders[0], - encryptionPublicKey: keccak256("encryptionPublicKey"), - hashedCapabilityIds: new bytes32[](0), - configCount: uint32(1), - workflowDONId: uint32(1), - capabilitiesDONIds: new uint256[](0) - }) - ) + abi.encodeWithSelector(INodeInfoProvider.getNodesByP2PIds.selector, chainReaders), + abi.encode(nodeInfos) ); s_ccipHome.applyChainConfigUpdates(new uint64[](0), adds); @@ -858,21 +822,21 @@ contract CCIPHome_applyChainConfigUpdates is CCIPHomeTest { chainConfig: CCIPHome.ChainConfig({readers: chainReaders, fChain: 1, config: bytes("config2")}) }); + INodeInfoProvider.NodeInfo[] memory nodeInfos = new INodeInfoProvider.NodeInfo[](1); + nodeInfos[0] = INodeInfoProvider.NodeInfo({ + nodeOperatorId: 1, + signer: bytes32(uint256(1)), + p2pId: chainReaders[0], + encryptionPublicKey: keccak256("encryptionPublicKey"), + hashedCapabilityIds: new bytes32[](0), + configCount: uint32(1), + workflowDONId: uint32(1), + capabilitiesDONIds: new uint256[](0) + }); vm.mockCall( CAPABILITIES_REGISTRY, - abi.encodeWithSelector(ICapabilitiesRegistry.getNode.selector, chainReaders[0]), - abi.encode( - ICapabilitiesRegistry.NodeInfo({ - nodeOperatorId: 1, - signer: bytes32(uint256(1)), - p2pId: chainReaders[0], - encryptionPublicKey: keccak256("encryptionPublicKey"), - hashedCapabilityIds: new bytes32[](0), - configCount: uint32(1), - workflowDONId: uint32(1), - capabilitiesDONIds: new uint256[](0) - }) - ) + abi.encodeWithSelector(INodeInfoProvider.getNodesByP2PIds.selector, chainReaders), + abi.encode(nodeInfos) ); vm.expectEmit(); @@ -912,24 +876,13 @@ contract CCIPHome_applyChainConfigUpdates is CCIPHomeTest { chainConfig: CCIPHome.ChainConfig({readers: chainReaders, fChain: 1, config: abi.encode(1, 2, 3)}) }); - vm.mockCall( + vm.mockCallRevert( CAPABILITIES_REGISTRY, - abi.encodeWithSelector(ICapabilitiesRegistry.getNode.selector, chainReaders[0]), - abi.encode( - ICapabilitiesRegistry.NodeInfo({ - nodeOperatorId: 0, - signer: bytes32(0), - p2pId: bytes32(uint256(0)), - encryptionPublicKey: keccak256("encryptionPublicKey"), - hashedCapabilityIds: new bytes32[](0), - configCount: uint32(1), - workflowDONId: uint32(1), - capabilitiesDONIds: new uint256[](0) - }) - ) + abi.encodeWithSelector(INodeInfoProvider.getNodesByP2PIds.selector, chainReaders), + abi.encodeWithSelector(INodeInfoProvider.NodeDoesNotExist.selector, chainReaders[0]) ); - vm.expectRevert(abi.encodeWithSelector(CCIPHome.NodeNotInRegistry.selector, chainReaders[0])); + vm.expectRevert(abi.encodeWithSelector(INodeInfoProvider.NodeDoesNotExist.selector, chainReaders[0])); s_ccipHome.applyChainConfigUpdates(new uint64[](0), adds); } @@ -945,22 +898,21 @@ contract CCIPHome_applyChainConfigUpdates is CCIPHomeTest { chainSelector: 2, chainConfig: CCIPHome.ChainConfig({readers: chainReaders, fChain: 0, config: bytes("config2")}) // bad fChain }); - + INodeInfoProvider.NodeInfo[] memory nodeInfos = new INodeInfoProvider.NodeInfo[](1); + nodeInfos[0] = INodeInfoProvider.NodeInfo({ + nodeOperatorId: 1, + signer: bytes32(uint256(1)), + p2pId: chainReaders[0], + encryptionPublicKey: keccak256("encryptionPublicKey"), + hashedCapabilityIds: new bytes32[](0), + configCount: uint32(1), + workflowDONId: uint32(1), + capabilitiesDONIds: new uint256[](0) + }); vm.mockCall( CAPABILITIES_REGISTRY, - abi.encodeWithSelector(ICapabilitiesRegistry.getNode.selector, chainReaders[0]), - abi.encode( - ICapabilitiesRegistry.NodeInfo({ - nodeOperatorId: 1, - signer: bytes32(uint256(1)), - p2pId: chainReaders[0], - encryptionPublicKey: keccak256("encryptionPublicKey"), - hashedCapabilityIds: new bytes32[](0), - configCount: uint32(1), - workflowDONId: uint32(1), - capabilitiesDONIds: new uint256[](0) - }) - ) + abi.encodeWithSelector(INodeInfoProvider.getNodesByP2PIds.selector, chainReaders), + abi.encode(nodeInfos) ); vm.expectRevert(CCIPHome.FChainMustBePositive.selector); diff --git a/contracts/src/v0.8/keystone/CapabilitiesRegistry.sol b/contracts/src/v0.8/keystone/CapabilitiesRegistry.sol index 2e9211f983a..2dd707672da 100644 --- a/contracts/src/v0.8/keystone/CapabilitiesRegistry.sol +++ b/contracts/src/v0.8/keystone/CapabilitiesRegistry.sol @@ -8,13 +8,15 @@ import {OwnerIsCreator} from "../shared/access/OwnerIsCreator.sol"; import {EnumerableSet} from "../vendor/openzeppelin-solidity/v4.8.3/contracts/utils/structs/EnumerableSet.sol"; import {ERC165Checker} from "../vendor/openzeppelin-solidity/v4.8.3/contracts/utils/introspection/ERC165Checker.sol"; +import {ICapabilityConfiguration} from "./interfaces/ICapabilityConfiguration.sol"; +import {INodeInfoProvider} from "./interfaces/INodeInfoProvider.sol"; /// @notice CapabilitiesRegistry is used to manage Nodes (including their links to Node Operators), Capabilities, /// and DONs (Decentralized Oracle Networks) which are sets of nodes that support those Capabilities. /// @dev The contract currently stores the entire state of Node Operators, Nodes, Capabilities and DONs in the /// contract and requires a full state migration if an upgrade is ever required. The team acknowledges this and is /// fine reconfiguring the upgraded contract in the future so as to not add extra complexity to this current version. -contract CapabilitiesRegistry is OwnerIsCreator, ITypeAndVersion { +contract CapabilitiesRegistry is INodeInfoProvider, OwnerIsCreator, ITypeAndVersion { // Add the library methods using EnumerableSet for EnumerableSet.Bytes32Set; using EnumerableSet for EnumerableSet.UintSet; @@ -42,28 +44,6 @@ contract CapabilitiesRegistry is OwnerIsCreator, ITypeAndVersion { bytes32[] hashedCapabilityIds; } - struct NodeInfo { - /// @notice The id of the node operator that manages this node - uint32 nodeOperatorId; - /// @notice The number of times the node's configuration has been updated - uint32 configCount; - /// @notice The ID of the Workflow DON that the node belongs to. A node can - /// only belong to one DON that accepts Workflows. - uint32 workflowDONId; - /// @notice The signer address for application-layer message verification. - bytes32 signer; - /// @notice This is an Ed25519 public key that is used to identify a node. This key is guaranteed - /// to be unique in the CapabilitiesRegistry. It is used to identify a node in the the P2P network. - bytes32 p2pId; - /// @notice Public key used to encrypt secrets for this node - bytes32 encryptionPublicKey; - /// @notice The list of hashed capability IDs supported by the node - bytes32[] hashedCapabilityIds; - /// @notice The list of capabilities DON Ids supported by the node. A node can belong to multiple - /// capabilities DONs. This list does not include a Workflow DON id if the node belongs to one. - uint256[] capabilitiesDONIds; - } - struct Node { /// @notice The node's parameters /// @notice The id of the node operator that manages this node @@ -332,11 +312,6 @@ contract CapabilitiesRegistry is OwnerIsCreator, ITypeAndVersion { /// @param hashedCapabilityId The hashed ID of the capability that is deprecated. error CapabilityIsDeprecated(bytes32 hashedCapabilityId); - /// @notice This error is thrown when a node with the provided P2P ID is - /// not found. - /// @param nodeP2PId The node P2P ID used for the lookup. - error NodeDoesNotExist(bytes32 nodeP2PId); - /// @notice This error is thrown when a node operator does not exist /// @param nodeOperatorId The ID of the node operator that does not exist error NodeOperatorDoesNotExist(uint32 nodeOperatorId); @@ -414,7 +389,7 @@ contract CapabilitiesRegistry is OwnerIsCreator, ITypeAndVersion { /// @param hashedCapabilityId The hashed ID of the deprecated capability event CapabilityDeprecated(bytes32 indexed hashedCapabilityId); - string public constant override typeAndVersion = "CapabilitiesRegistry 1.0.0"; + string public constant override typeAndVersion = "CapabilitiesRegistry 1.0.1"; /// @notice Mapping of capabilities mapping(bytes32 hashedCapabilityId => Capability capability) private s_capabilities; @@ -449,7 +424,6 @@ contract CapabilitiesRegistry is OwnerIsCreator, ITypeAndVersion { /// @notice The next ID to assign a new DON to /// @dev Starting with 1 to avoid confusion with the zero value - /// @dev No getter for this as this is an implementation detail uint32 private s_nextDONId = 1; /// @notice Adds a list of node operators @@ -532,6 +506,12 @@ contract CapabilitiesRegistry is OwnerIsCreator, ITypeAndVersion { return nodeOperators; } + /// @notice Gets the next node DON ID + /// @return uint32 The next node DON ID + function getNextDONId() external view returns (uint32) { + return s_nextDONId; + } + /// @notice Adds nodes. Nodes can be added with deprecated capabilities to /// avoid breaking changes when deprecating capabilities. /// @param nodes The nodes to add @@ -694,6 +674,19 @@ contract CapabilitiesRegistry is OwnerIsCreator, ITypeAndVersion { return nodesInfo; } + /// @notice Gets nodes by their P2P IDs + /// @param p2pIds The P2P IDs of the nodes to query for + /// @return NodeInfo[] The nodes data + function getNodesByP2PIds(bytes32[] calldata p2pIds) external view returns (NodeInfo[] memory) { + NodeInfo[] memory nodesInfo = new NodeInfo[](p2pIds.length); + + for (uint256 i; i < p2pIds.length; ++i) { + nodesInfo[i] = getNode(p2pIds[i]); + if (nodesInfo[i].p2pId == bytes32("")) revert NodeDoesNotExist(p2pIds[i]); + } + return nodesInfo; + } + /// @notice Adds a new capability to the capability registry /// @param capabilities The capabilities being added /// @dev There is no function to update capabilities as this would require diff --git a/contracts/src/v0.8/ccip/interfaces/ICapabilitiesRegistry.sol b/contracts/src/v0.8/keystone/interfaces/INodeInfoProvider.sol similarity index 52% rename from contracts/src/v0.8/ccip/interfaces/ICapabilitiesRegistry.sol rename to contracts/src/v0.8/keystone/interfaces/INodeInfoProvider.sol index d0366421299..47b4b2065fc 100644 --- a/contracts/src/v0.8/ccip/interfaces/ICapabilitiesRegistry.sol +++ b/contracts/src/v0.8/keystone/interfaces/INodeInfoProvider.sol @@ -1,7 +1,14 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.0; +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.4; + +/// @title INodeInfoProvider +/// @notice Interface for retrieving node information. +interface INodeInfoProvider { + /// @notice This error is thrown when a node with the provided P2P ID is + /// not found. + /// @param nodeP2PId The node P2P ID used for the lookup. + error NodeDoesNotExist(bytes32 nodeP2PId); -interface ICapabilitiesRegistry { struct NodeInfo { /// @notice The id of the node operator that manages this node uint32 nodeOperatorId; @@ -26,10 +33,17 @@ interface ICapabilitiesRegistry { uint256[] capabilitiesDONIds; } - /// @notice Gets a node's data - /// @param p2pId The P2P ID of the node to query for - /// @return NodeInfo The node data - function getNode( - bytes32 p2pId - ) external view returns (NodeInfo memory); + /// @notice Retrieves node information by its P2P ID. + /// @param p2pId The P2P ID of the node to query for. + /// @return nodeInfo The node data. + function getNode(bytes32 p2pId) external view returns (NodeInfo memory nodeInfo); + + /// @notice Retrieves all node information. + /// @return NodeInfo[] Array of all nodes in the registry. + function getNodes() external view returns (NodeInfo[] memory); + + /// @notice Retrieves nodes by their P2P IDs. + /// @param p2pIds Array of P2P IDs to query for. + /// @return NodeInfo[] Array of node data corresponding to the provided P2P IDs. + function getNodesByP2PIds(bytes32[] calldata p2pIds) external view returns (NodeInfo[] memory); } diff --git a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_GetNextDONIdTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_GetNextDONIdTest.t.sol new file mode 100644 index 00000000000..0c6c74c204f --- /dev/null +++ b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_GetNextDONIdTest.t.sol @@ -0,0 +1,92 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.24; + +import {BaseTest} from "./BaseTest.t.sol"; +import {CapabilitiesRegistry} from "../CapabilitiesRegistry.sol"; +import {ICapabilityConfiguration} from "../interfaces/ICapabilityConfiguration.sol"; + +contract CapabilitiesRegistry_GetNextDONIdTest is BaseTest { + function setUp() public override { + BaseTest.setUp(); + CapabilitiesRegistry.Capability[] memory capabilities = new CapabilitiesRegistry.Capability[](2); + capabilities[0] = s_basicCapability; + capabilities[1] = s_capabilityWithConfigurationContract; + + s_CapabilitiesRegistry.addNodeOperators(_getNodeOperators()); + s_CapabilitiesRegistry.addCapabilities(capabilities); + + CapabilitiesRegistry.NodeParams[] memory nodes = new CapabilitiesRegistry.NodeParams[](3); + bytes32[] memory capabilityIds = new bytes32[](2); + capabilityIds[0] = s_basicHashedCapabilityId; + capabilityIds[1] = s_capabilityWithConfigurationContractId; + + nodes[0] = CapabilitiesRegistry.NodeParams({ + nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, + p2pId: P2P_ID, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, + signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + hashedCapabilityIds: capabilityIds + }); + + bytes32[] memory nodeTwoCapabilityIds = new bytes32[](1); + nodeTwoCapabilityIds[0] = s_basicHashedCapabilityId; + + nodes[1] = CapabilitiesRegistry.NodeParams({ + nodeOperatorId: TEST_NODE_OPERATOR_TWO_ID, + p2pId: P2P_ID_TWO, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY_TWO, + signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, + hashedCapabilityIds: nodeTwoCapabilityIds + }); + + nodes[2] = CapabilitiesRegistry.NodeParams({ + nodeOperatorId: TEST_NODE_OPERATOR_THREE_ID, + p2pId: P2P_ID_THREE, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY_THREE, + signer: NODE_OPERATOR_THREE_SIGNER_ADDRESS, + hashedCapabilityIds: capabilityIds + }); + + s_CapabilitiesRegistry.addNodes(nodes); + + changePrank(ADMIN); + } + + function test_CorrectlyFetchesNextDONId() public { + uint32 nextDONId = s_CapabilitiesRegistry.getNextDONId(); + assertEq(nextDONId, 1); // Expecting the first DON ID since no DONs have been added yet + + bytes32[] memory nodes = new bytes32[](2); + nodes[0] = P2P_ID; + nodes[1] = P2P_ID_THREE; + + CapabilitiesRegistry.CapabilityConfiguration[] + memory capabilityConfigs = new CapabilitiesRegistry.CapabilityConfiguration[](2); + capabilityConfigs[0] = CapabilitiesRegistry.CapabilityConfiguration({ + capabilityId: s_basicHashedCapabilityId, + config: BASIC_CAPABILITY_CONFIG + }); + capabilityConfigs[1] = CapabilitiesRegistry.CapabilityConfiguration({ + capabilityId: s_capabilityWithConfigurationContractId, + config: CONFIG_CAPABILITY_CONFIG + }); + + vm.expectEmit(true, true, true, true, address(s_CapabilitiesRegistry)); + emit CapabilitiesRegistry.ConfigSet(DON_ID, 1); + vm.expectCall( + address(s_capabilityConfigurationContract), + abi.encodeWithSelector( + ICapabilityConfiguration.beforeCapabilityConfigSet.selector, + nodes, + CONFIG_CAPABILITY_CONFIG, + 1, + DON_ID + ), + 1 + ); + s_CapabilitiesRegistry.addDON(nodes, capabilityConfigs, true, true, F_VALUE); + + nextDONId = s_CapabilitiesRegistry.getNextDONId(); + assertEq(nextDONId, 2); // After adding one DON, the next DON ID should be 2 + } +} diff --git a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_GetNodesTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_GetNodesTest.t.sol index 4fc150e29b1..e01747877e7 100644 --- a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_GetNodesTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_GetNodesTest.t.sol @@ -3,6 +3,7 @@ pragma solidity 0.8.24; import {BaseTest} from "./BaseTest.t.sol"; import {CapabilitiesRegistry} from "../CapabilitiesRegistry.sol"; +import {INodeInfoProvider} from "../interfaces/INodeInfoProvider.sol"; contract CapabilitiesRegistry_GetNodesTest is BaseTest { function setUp() public override { @@ -63,6 +64,24 @@ contract CapabilitiesRegistry_GetNodesTest is BaseTest { assertEq(nodes[1].configCount, 1); } + function test_CorrectlyFetchesSpecificNodes() public view { + bytes32[] memory p2pIds = new bytes32[](1); + p2pIds[0] = P2P_ID; + + CapabilitiesRegistry.NodeInfo[] memory nodes = s_CapabilitiesRegistry.getNodesByP2PIds(p2pIds); + assertEq(nodes.length, 1); + assertEq(nodes[0].p2pId, P2P_ID); + assertEq(nodes[0].signer, NODE_OPERATOR_ONE_SIGNER_ADDRESS); + } + + function test_GetNodesByP2PIdsInvalidNode_Revers() public { + bytes32[] memory p2pIds = new bytes32[](1); + p2pIds[0] = keccak256(abi.encodePacked("invalid")); + + vm.expectRevert(abi.encodeWithSelector(INodeInfoProvider.NodeDoesNotExist.selector, p2pIds[0])); + CapabilitiesRegistry.NodeInfo[] memory nodes = s_CapabilitiesRegistry.getNodesByP2PIds(p2pIds); + } + function test_DoesNotIncludeRemovedNodes() public { changePrank(ADMIN); bytes32[] memory nodesToRemove = new bytes32[](1); diff --git a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_RemoveNodesTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_RemoveNodesTest.t.sol index dfe63e21925..c9f5e61b4f4 100644 --- a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_RemoveNodesTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_RemoveNodesTest.t.sol @@ -3,6 +3,7 @@ pragma solidity 0.8.24; import {BaseTest} from "./BaseTest.t.sol"; import {CapabilitiesRegistry} from "../CapabilitiesRegistry.sol"; +import {INodeInfoProvider} from "../interfaces/INodeInfoProvider.sol"; contract CapabilitiesRegistry_RemoveNodesTest is BaseTest { function setUp() public override { @@ -63,7 +64,7 @@ contract CapabilitiesRegistry_RemoveNodesTest is BaseTest { bytes32[] memory nodes = new bytes32[](1); nodes[0] = INVALID_P2P_ID; - vm.expectRevert(abi.encodeWithSelector(CapabilitiesRegistry.NodeDoesNotExist.selector, INVALID_P2P_ID)); + vm.expectRevert(abi.encodeWithSelector(INodeInfoProvider.NodeDoesNotExist.selector, INVALID_P2P_ID)); s_CapabilitiesRegistry.removeNodes(nodes); } @@ -72,7 +73,7 @@ contract CapabilitiesRegistry_RemoveNodesTest is BaseTest { bytes32[] memory nodes = new bytes32[](1); nodes[0] = bytes32(""); - vm.expectRevert(abi.encodeWithSelector(CapabilitiesRegistry.NodeDoesNotExist.selector, bytes32(""))); + vm.expectRevert(abi.encodeWithSelector(INodeInfoProvider.NodeDoesNotExist.selector, bytes32(""))); s_CapabilitiesRegistry.removeNodes(nodes); } diff --git a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_TypeAndVersionTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_TypeAndVersionTest.t.sol index 00ce88f54f0..52ac0c15c73 100644 --- a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_TypeAndVersionTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_TypeAndVersionTest.t.sol @@ -5,6 +5,6 @@ import {BaseTest} from "./BaseTest.t.sol"; contract CapabilitiesRegistry_TypeAndVersionTest is BaseTest { function test_TypeAndVersion() public view { - assertEq(s_CapabilitiesRegistry.typeAndVersion(), "CapabilitiesRegistry 1.0.0"); + assertEq(s_CapabilitiesRegistry.typeAndVersion(), "CapabilitiesRegistry 1.0.1"); } } diff --git a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_UpdateNodesTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_UpdateNodesTest.t.sol index 218161f3b2c..d872bdf68c0 100644 --- a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_UpdateNodesTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_UpdateNodesTest.t.sol @@ -3,6 +3,7 @@ pragma solidity 0.8.24; import {BaseTest} from "./BaseTest.t.sol"; import {CapabilitiesRegistry} from "../CapabilitiesRegistry.sol"; +import {INodeInfoProvider} from "../interfaces/INodeInfoProvider.sol"; contract CapabilitiesRegistry_UpdateNodesTest is BaseTest { function setUp() public override { @@ -96,7 +97,7 @@ contract CapabilitiesRegistry_UpdateNodesTest is BaseTest { hashedCapabilityIds: hashedCapabilityIds }); - vm.expectRevert(abi.encodeWithSelector(CapabilitiesRegistry.NodeDoesNotExist.selector, INVALID_P2P_ID)); + vm.expectRevert(abi.encodeWithSelector(INodeInfoProvider.NodeDoesNotExist.selector, INVALID_P2P_ID)); s_CapabilitiesRegistry.updateNodes(nodes); } @@ -115,7 +116,7 @@ contract CapabilitiesRegistry_UpdateNodesTest is BaseTest { hashedCapabilityIds: hashedCapabilityIds }); - vm.expectRevert(abi.encodeWithSelector(CapabilitiesRegistry.NodeDoesNotExist.selector, bytes32(""))); + vm.expectRevert(abi.encodeWithSelector(INodeInfoProvider.NodeDoesNotExist.selector, bytes32(""))); s_CapabilitiesRegistry.updateNodes(nodes); } diff --git a/core/capabilities/ccip/launcher/diff_test.go b/core/capabilities/ccip/launcher/diff_test.go index 3b168d91488..a098bf816ab 100644 --- a/core/capabilities/ccip/launcher/diff_test.go +++ b/core/capabilities/ccip/launcher/diff_test.go @@ -38,7 +38,7 @@ func Test_diff(t *testing.T) { IDsToDONs: map[registrysyncer.DonID]registrysyncer.DON{ 1: defaultRegistryDon, }, - IDsToNodes: map[types.PeerID]kcr.CapabilitiesRegistryNodeInfo{}, + IDsToNodes: map[types.PeerID]kcr.INodeInfoProviderNodeInfo{}, }, newState: registrysyncer.LocalRegistry{ IDsToCapabilities: map[string]registrysyncer.Capability{ @@ -47,7 +47,7 @@ func Test_diff(t *testing.T) { IDsToDONs: map[registrysyncer.DonID]registrysyncer.DON{ 1: defaultRegistryDon, }, - IDsToNodes: map[types.PeerID]kcr.CapabilitiesRegistryNodeInfo{}, + IDsToNodes: map[types.PeerID]kcr.INodeInfoProviderNodeInfo{}, }, }, want: diffResult{ diff --git a/core/capabilities/ccip/launcher/launcher.go b/core/capabilities/ccip/launcher/launcher.go index 9e6e67d5f99..bc351291dc0 100644 --- a/core/capabilities/ccip/launcher/launcher.go +++ b/core/capabilities/ccip/launcher/launcher.go @@ -43,7 +43,7 @@ func New( homeChainReader: homeChainReader, regState: registrysyncer.LocalRegistry{ IDsToDONs: make(map[registrysyncer.DonID]registrysyncer.DON), - IDsToNodes: make(map[p2ptypes.PeerID]kcr.CapabilitiesRegistryNodeInfo), + IDsToNodes: make(map[p2ptypes.PeerID]kcr.INodeInfoProviderNodeInfo), IDsToCapabilities: make(map[string]registrysyncer.Capability), }, dons: make(map[registrysyncer.DonID]*ccipDeployment), diff --git a/core/capabilities/launcher_test.go b/core/capabilities/launcher_test.go index d01e2f8f006..11482b0dd30 100644 --- a/core/capabilities/launcher_test.go +++ b/core/capabilities/launcher_test.go @@ -145,7 +145,7 @@ func TestLauncher_WiresUpExternalCapabilities(t *testing.T) { CapabilityType: capabilities.CapabilityTypeTarget, }, }, - IDsToNodes: map[p2ptypes.PeerID]kcr.CapabilitiesRegistryNodeInfo{ + IDsToNodes: map[p2ptypes.PeerID]kcr.INodeInfoProviderNodeInfo{ nodes[0]: { NodeOperatorId: 1, Signer: randomWord(), @@ -312,7 +312,7 @@ func TestLauncher_RemoteTriggerModeAggregatorShim(t *testing.T) { CapabilityType: capabilities.CapabilityTypeTarget, }, }, - IDsToNodes: map[p2ptypes.PeerID]kcr.CapabilitiesRegistryNodeInfo{ + IDsToNodes: map[p2ptypes.PeerID]kcr.INodeInfoProviderNodeInfo{ capabilityDonNodes[0]: { NodeOperatorId: 1, Signer: randomWord(), @@ -487,7 +487,7 @@ func TestSyncer_IgnoresCapabilitiesForPrivateDON(t *testing.T) { CapabilityType: capabilities.CapabilityTypeTarget, }, }, - IDsToNodes: map[p2ptypes.PeerID]kcr.CapabilitiesRegistryNodeInfo{ + IDsToNodes: map[p2ptypes.PeerID]kcr.INodeInfoProviderNodeInfo{ nodes[0]: { NodeOperatorId: 1, Signer: randomWord(), @@ -628,7 +628,7 @@ func TestLauncher_WiresUpClientsForPublicWorkflowDON(t *testing.T) { CapabilityType: capabilities.CapabilityTypeTarget, }, }, - IDsToNodes: map[p2ptypes.PeerID]kcr.CapabilitiesRegistryNodeInfo{ + IDsToNodes: map[p2ptypes.PeerID]kcr.INodeInfoProviderNodeInfo{ capabilityDonNodes[0]: { NodeOperatorId: 1, Signer: randomWord(), @@ -793,7 +793,7 @@ func TestLauncher_WiresUpClientsForPublicWorkflowDONButIgnoresPrivateCapabilitie CapabilityType: capabilities.CapabilityTypeTarget, }, }, - IDsToNodes: map[p2ptypes.PeerID]kcr.CapabilitiesRegistryNodeInfo{ + IDsToNodes: map[p2ptypes.PeerID]kcr.INodeInfoProviderNodeInfo{ capabilityDonNodes[0]: { NodeOperatorId: 1, Signer: randomWord(), @@ -941,7 +941,7 @@ func TestLauncher_SucceedsEvenIfDispatcherAlreadyHasReceiver(t *testing.T) { CapabilityType: capabilities.CapabilityTypeTrigger, }, }, - IDsToNodes: map[p2ptypes.PeerID]kcr.CapabilitiesRegistryNodeInfo{ + IDsToNodes: map[p2ptypes.PeerID]kcr.INodeInfoProviderNodeInfo{ capabilityDonNodes[0]: { NodeOperatorId: 1, Signer: randomWord(), diff --git a/core/gethwrappers/ccip/generated/ccip_home/ccip_home.go b/core/gethwrappers/ccip/generated/ccip_home/ccip_home.go index cdc77007655..64e2fbd98bc 100644 --- a/core/gethwrappers/ccip/generated/ccip_home/ccip_home.go +++ b/core/gethwrappers/ccip/generated/ccip_home/ccip_home.go @@ -65,8 +65,8 @@ type CCIPHomeVersionedConfig struct { } var CCIPHomeMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"capabilitiesRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ChainSelectorNotSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expectedConfigDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"gotConfigDigest\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"callDonId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"capabilityRegistryDonId\",\"type\":\"uint32\"}],\"name\":\"DONIdMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FChainMustBePositive\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fChain\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"FRoleDON\",\"type\":\"uint256\"}],\"name\":\"FChainTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node\",\"name\":\"node\",\"type\":\"tuple\"}],\"name\":\"InvalidNode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPluginType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"InvalidSelector\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"currentActiveDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"currentCandidateDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"proposedActiveDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"proposedCandidateDigest\",\"type\":\"bytes32\"}],\"name\":\"InvalidStateTransition\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoOpStateTransitionNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"NodeNotInRegistry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimum\",\"type\":\"uint256\"}],\"name\":\"NotEnoughTransmitters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OfframpAddressCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCapabilitiesRegistryCanCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RMNHomeAddressCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RevokingZeroDigestNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManySigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"ActiveConfigRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"CandidateConfigRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"CapabilityConfigurationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainConfigRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structCCIPHome.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"ConfigPromoted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structCCIPHome.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"chainSelectorRemoves\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPHome.ChainConfigArgs[]\",\"name\":\"chainConfigAdds\",\"type\":\"tuple[]\"}],\"name\":\"applyChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"update\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"beforeCapabilityConfigSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"}],\"name\":\"getActiveDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pageIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllChainConfigs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPHome.ChainConfigArgs[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"}],\"name\":\"getAllConfigs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPHome.VersionedConfig\",\"name\":\"activeConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPHome.VersionedConfig\",\"name\":\"candidateConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"}],\"name\":\"getCandidateDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"getCapabilityConfiguration\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"configuration\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCapabilityRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPHome.VersionedConfig\",\"name\":\"versionedConfig\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"ok\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"}],\"name\":\"getConfigDigests\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"activeConfigDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"candidateConfigDigest\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNumChainConfigurations\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"digestToPromote\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digestToRevoke\",\"type\":\"bytes32\"}],\"name\":\"promoteCandidateAndRevokeActive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"revokeCandidate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"digestToOverwrite\",\"type\":\"bytes32\"}],\"name\":\"setCandidate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"newConfigDigest\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040526006805463ffffffff191690553480156200001e57600080fd5b5060405162004f1138038062004f118339810160408190526200004191620001b3565b3380600081620000985760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000cb57620000cb8162000108565b5050506001600160a01b038116620000f6576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0316608052620001e5565b336001600160a01b03821603620001625760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200008f565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001c657600080fd5b81516001600160a01b0381168114620001de57600080fd5b9392505050565b608051614d026200020f60003960008181610180015281816122360152612cfd0152614d026000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806379ba5097116100cd578063b74b235611610081578063f2fde38b11610066578063f2fde38b14610356578063f442c89a14610369578063fba64a7c1461037c57600080fd5b8063b74b235614610323578063bae4e0fa1461034357600080fd5b80638318ed5d116100b25780638318ed5d146102d15780638da5cb5b146102f2578063922ea4061461031057600080fd5b806379ba5097146102c15780637ac0d41e146102c957600080fd5b80633df45a72116101245780635a837f97116101095780635a837f97146102785780635f1edd9c1461028d5780637524051a146102ae57600080fd5b80633df45a721461022f5780634851d5491461025057600080fd5b806301ffc9a714610156578063020330e61461017e578063181f5a77146101c557806333d9704a1461020e575b600080fd5b610169610164366004613157565b61038f565b60405190151581526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6102016040518060400160405280601281526020017f43434950486f6d6520312e362e302d646576000000000000000000000000000081525081565b6040516101759190613207565b61022161021c366004613254565b610428565b6040516101759291906134ac565b61024261023d3660046134d0565b610922565b604051610175929190613509565b61026361025e3660046134d0565b611222565b60408051928352602083019190915201610175565b61028b61028636600461352e565b611318565b005b6102a061029b3660046134d0565b61162b565b604051908152602001610175565b61028b6102bc366004613254565b6116a2565b61028b61188d565b6102a061198a565b6102016102df366004613574565b5060408051602081019091526000815290565b60005473ffffffffffffffffffffffffffffffffffffffff166101a0565b6102a061031e3660046134d0565b61199b565b610336610331366004613591565b6119ec565b6040516101759190613621565b6102a06103513660046136bf565b611c6d565b61028b61036436600461372f565b611e6b565b61028b6103773660046137aa565b611e7f565b61028b61038a366004613837565b61221e565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f78bea72100000000000000000000000000000000000000000000000000000000148061042257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b610430612fe0565b6000805b60028110156109145763ffffffff86166000908152600560205260408120859187600181111561046657610466613295565b600181111561047757610477613295565b81526020019081526020016000208260028110610496576104966138f4565b60070201600101541480156104aa57508315155b1561090c5763ffffffff86166000908152600560205260408120908660018111156104d7576104d7613295565b60018111156104e8576104e8613295565b81526020019081526020016000208160028110610507576105076138f4565b6040805160608101825260079290920292909201805463ffffffff1682526001808201546020840152835161010081018552600283018054939592949386938501929190829060ff168781111561056057610560613295565b600181111561057157610571613295565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a01000000000000000000009091041660608201526001820180546080909201916105c990613923565b80601f01602080910402602001604051908101604052809291908181526020018280546105f590613923565b80156106425780601f1061061757610100808354040283529160200191610642565b820191906000526020600020905b81548152906001019060200180831161062557829003601f168201915b5050505050815260200160028201805461065b90613923565b80601f016020809104026020016040519081016040528092919081815260200182805461068790613923565b80156106d45780601f106106a9576101008083540402835291602001916106d4565b820191906000526020600020905b8154815290600101906020018083116106b757829003601f168201915b5050505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b8282101561086257838290600052602060002090600302016040518060600160405290816000820154815260200160018201805461073f90613923565b80601f016020809104026020016040519081016040528092919081815260200182805461076b90613923565b80156107b85780601f1061078d576101008083540402835291602001916107b8565b820191906000526020600020905b81548152906001019060200180831161079b57829003601f168201915b505050505081526020016002820180546107d190613923565b80601f01602080910402602001604051908101604052809291908181526020018280546107fd90613923565b801561084a5780601f1061081f5761010080835404028352916020019161084a565b820191906000526020600020905b81548152906001019060200180831161082d57829003601f168201915b50505050508152505081526020019060010190610702565b50505050815260200160048201805461087a90613923565b80601f01602080910402602001604051908101604052809291908181526020018280546108a690613923565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b505050505081525050815250509150925092505061091a565b600101610434565b50600090505b935093915050565b61092a612fe0565b610932612fe0565b63ffffffff841660009081526005602052604081208185600181111561095a5761095a613295565b600181111561096b5761096b613295565b815260200190815260200160002061098386866124db565b63ffffffff1660028110610999576109996138f4565b6040805160608101825260079290920292909201805463ffffffff1682526001808201546020840152835161010081018552600283018054949593949386019391929091839160ff909116908111156109f4576109f4613295565b6001811115610a0557610a05613295565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a0100000000000000000000909104166060820152600182018054608090920191610a5d90613923565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8990613923565b8015610ad65780601f10610aab57610100808354040283529160200191610ad6565b820191906000526020600020905b815481529060010190602001808311610ab957829003601f168201915b50505050508152602001600282018054610aef90613923565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1b90613923565b8015610b685780601f10610b3d57610100808354040283529160200191610b68565b820191906000526020600020905b815481529060010190602001808311610b4b57829003601f168201915b5050505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015610cf6578382906000526020600020906003020160405180606001604052908160008201548152602001600182018054610bd390613923565b80601f0160208091040260200160405190810160405280929190818152602001828054610bff90613923565b8015610c4c5780601f10610c2157610100808354040283529160200191610c4c565b820191906000526020600020905b815481529060010190602001808311610c2f57829003601f168201915b50505050508152602001600282018054610c6590613923565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9190613923565b8015610cde5780601f10610cb357610100808354040283529160200191610cde565b820191906000526020600020905b815481529060010190602001808311610cc157829003601f168201915b50505050508152505081526020019060010190610b96565b505050508152602001600482018054610d0e90613923565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3a90613923565b8015610d875780601f10610d5c57610100808354040283529160200191610d87565b820191906000526020600020905b815481529060010190602001808311610d6a57829003601f168201915b50505091909252505050905250602081015190915015610da5578092505b63ffffffff8516600090815260056020526040812081866001811115610dcd57610dcd613295565b6001811115610dde57610dde613295565b8152602001908152602001600020610df68787612532565b63ffffffff1660028110610e0c57610e0c6138f4565b6040805160608101825260079290920292909201805463ffffffff1682526001808201546020840152835161010081018552600283018054949593949386019391929091839160ff90911690811115610e6757610e67613295565b6001811115610e7857610e78613295565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a0100000000000000000000909104166060820152600182018054608090920191610ed090613923565b80601f0160208091040260200160405190810160405280929190818152602001828054610efc90613923565b8015610f495780601f10610f1e57610100808354040283529160200191610f49565b820191906000526020600020905b815481529060010190602001808311610f2c57829003601f168201915b50505050508152602001600282018054610f6290613923565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8e90613923565b8015610fdb5780601f10610fb057610100808354040283529160200191610fdb565b820191906000526020600020905b815481529060010190602001808311610fbe57829003601f168201915b5050505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b8282101561116957838290600052602060002090600302016040518060600160405290816000820154815260200160018201805461104690613923565b80601f016020809104026020016040519081016040528092919081815260200182805461107290613923565b80156110bf5780601f10611094576101008083540402835291602001916110bf565b820191906000526020600020905b8154815290600101906020018083116110a257829003601f168201915b505050505081526020016002820180546110d890613923565b80601f016020809104026020016040519081016040528092919081815260200182805461110490613923565b80156111515780601f1061112657610100808354040283529160200191611151565b820191906000526020600020905b81548152906001019060200180831161113457829003601f168201915b50505050508152505081526020019060010190611009565b50505050815260200160048201805461118190613923565b80601f01602080910402602001604051908101604052809291908181526020018280546111ad90613923565b80156111fa5780601f106111cf576101008083540402835291602001916111fa565b820191906000526020600020905b8154815290600101906020018083116111dd57829003601f168201915b50505091909252505050905250602081015190915015611218578092505b50505b9250929050565b63ffffffff8216600090815260056020526040812081908184600181111561124c5761124c613295565b600181111561125d5761125d613295565b815260200190815260200160002061127585856124db565b63ffffffff166002811061128b5761128b6138f4565b6007020160010154600560008663ffffffff1663ffffffff16815260200190815260200160002060008560018111156112c6576112c6613295565b60018111156112d7576112d7613295565b81526020019081526020016000206112ef8686612532565b63ffffffff1660028110611305576113056138f4565b6007020160010154915091509250929050565b61132061258d565b8115801561132c575080155b15611363576040517f7b4d1e4f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061136f8585612532565b63ffffffff86811660009081526005602052604081209290911692508491908660018111156113a0576113a0613295565b60018111156113b1576113b1613295565b815260200190815260200160002082600281106113d0576113d06138f4565b6007020160010154146114845763ffffffff851660009081526005602052604081209085600181111561140557611405613295565b600181111561141657611416613295565b81526020019081526020016000208160028110611435576114356138f4565b6007020160010154836040517f93df584c00000000000000000000000000000000000000000000000000000000815260040161147b929190918252602082015260400190565b60405180910390fd5b63ffffffff85166000908152600560205260408120818660018111156114ac576114ac613295565b60018111156114bd576114bd613295565b81526020019081526020016000206114d587876124db565b63ffffffff16600281106114eb576114eb6138f4565b6007020190508281600101541461153e5760018101546040517f93df584c00000000000000000000000000000000000000000000000000000000815260048101919091526024810184905260440161147b565b6000600180830182905563ffffffff881682526007602052604082209091878381111561156d5761156d613295565b600181111561157e5761157e613295565b8152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000811663ffffffff918216939093181691909117905582156115f85760405183907f0b31c0055e2d464bef7781994b98c4ff9ef4ae0d05f59feb6a68c42de5e201b890600090a25b60405184907ffc3e98dbbd47c3fa7c1c05b6ec711caeaf70eca4554192b9ada8fc11a37f298e90600090a2505050505050565b63ffffffff821660009081526005602052604081208183600181111561165357611653613295565b600181111561166457611664613295565b815260200190815260200160002061167c84846124db565b63ffffffff1660028110611692576116926138f4565b6007020160010154905092915050565b6116aa61258d565b806116e1576040517f0849d8cc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116ed8484612532565b63ffffffff858116600090815260056020526040812092909116925083919085600181111561171e5761171e613295565b600181111561172f5761172f613295565b8152602001908152602001600020826002811061174e5761174e6138f4565b6007020160010154146117f95763ffffffff841660009081526005602052604081209084600181111561178357611783613295565b600181111561179457611794613295565b815260200190815260200160002081600281106117b3576117b36138f4565b6007020160010154826040517f93df584c00000000000000000000000000000000000000000000000000000000815260040161147b929190918252602082015260400190565b60405182907f53f5d9228f0a4173bea6e5931c9b3afe6eeb6692ede1d182952970f152534e3b90600090a263ffffffff841660009081526005602052604081209084600181111561184c5761184c613295565b600181111561185d5761185d613295565b8152602001908152602001600020816002811061187c5761187c6138f4565b600702016001016000905550505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161147b565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b600061199660036125c8565b905090565b63ffffffff82166000908152600560205260408120818360018111156119c3576119c3613295565b60018111156119d4576119d4613295565b815260200190815260200160002061167c8484612532565b606060006119fa60036125c8565b90506000611a0884866139a5565b9050831580611a175750818110155b15611a57576040805160008082526020820190925290611a4d565b611a3a61305c565b815260200190600190039081611a325790505b5092505050610422565b6000611a6385836139eb565b905082811115611a705750815b6000611a7c83836139fe565b67ffffffffffffffff811115611a9457611a946139bc565b604051908082528060200260200182016040528015611acd57816020015b611aba61305c565b815260200190600190039081611ab25790505b5090506000611adc60036125d2565b9050835b83811015611c60576000828281518110611afc57611afc6138f4565b60209081029190910181015160408051808201825267ffffffffffffffff831680825260009081526002855282902082518154608081880283018101909552606082018181529597509295860194909391928492849190840182828015611b8257602002820191906000526020600020905b815481526020019060010190808311611b6e575b5050509183525050600182015460ff166020820152600282018054604090920191611bac90613923565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd890613923565b8015611c255780601f10611bfa57610100808354040283529160200191611c25565b820191906000526020600020905b815481529060010190602001808311611c0857829003601f168201915b50505091909252505050905284611c3c88856139fe565b81518110611c4c57611c4c6138f4565b602090810291909101015250600101611ae0565b5090979650505050505050565b6000611c7761258d565b611c88611c8384613c91565b6125e6565b6000611c94868661199b565b9050828114611cd9576040517f93df584c000000000000000000000000000000000000000000000000000000008152600481018290526024810184905260440161147b565b8015611d0b5760405183907f53f5d9228f0a4173bea6e5931c9b3afe6eeb6692ede1d182952970f152534e3b90600090a25b60068054600091908290611d249063ffffffff16613d8d565b91906101000a81548163ffffffff021916908363ffffffff16021790559050611d6e878787604051602001611d59919061409b565b60405160208183030381529060405284612a54565b63ffffffff881660009081526005602052604081209194509081886001811115611d9a57611d9a613295565b6001811115611dab57611dab613295565b8152602001908152602001600020611dc38989612532565b63ffffffff1660028110611dd957611dd96138f4565b600702016001810185905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff841617815590508560028201611e2382826145bd565b905050837f94f085b7c57ec2a270befd0b7b2ec7452580040edee8bb0fb04609c81f0359c68388604051611e58929190614784565b60405180910390a2505050949350505050565b611e73612b50565b611e7c81612bd1565b50565b611e87612b50565b60005b8381101561206d57611ece858583818110611ea757611ea76138f4565b9050602002016020810190611ebc91906147ab565b60039067ffffffffffffffff16612cc6565b611f3857848482818110611ee457611ee46138f4565b9050602002016020810190611ef991906147ab565b6040517f1bd4d2d200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161147b565b60026000868684818110611f4e57611f4e6138f4565b9050602002016020810190611f6391906147ab565b67ffffffffffffffff1681526020810191909152604001600090812090611f8a828261309f565b6001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055611fc26002830160006130bd565b5050612000858583818110611fd957611fd96138f4565b9050602002016020810190611fee91906147ab565b60039067ffffffffffffffff16612cde565b507f2a680691fef3b2d105196805935232c661ce703e92d464ef0b94a7bc62d714f0858583818110612034576120346138f4565b905060200201602081019061204991906147ab565b60405167ffffffffffffffff909116815260200160405180910390a1600101611e8a565b5060005b8181101561221757600083838381811061208d5761208d6138f4565b905060200281019061209f91906147c8565b6120ad906020810190614302565b6120b6906147fc565b905060008484848181106120cc576120cc6138f4565b90506020028101906120de91906147c8565b6120ec9060208101906147ab565b90506120fb8260000151612cea565b816020015160ff1660000361213c576040517fa9b3766e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8116600090815260026020908152604090912083518051859361216c9284929101906130f7565b5060208201516001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff909216919091179055604082015160028201906121b990826148ce565b506121d391506003905067ffffffffffffffff8316612e36565b507f05dd57854af2c291a94ea52e7c43d80bc3be7fa73022f98b735dea86642fa5e081836040516122059291906149e8565b60405180910390a15050600101612071565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461228d576040517fac7a7efd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061229c6004828688614a0b565b6122a591614a35565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fbae4e0fa000000000000000000000000000000000000000000000000000000001480159061233b57507fffffffff0000000000000000000000000000000000000000000000000000000081167f7524051a0000000000000000000000000000000000000000000000000000000014155b801561238957507fffffffff0000000000000000000000000000000000000000000000000000000081167f5a837f970000000000000000000000000000000000000000000000000000000014155b156123e4576040517f12ba286f0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008216600482015260240161147b565b60006123f4602460048789614a0b565b8101906124019190614a7d565b90508263ffffffff168114612452576040517f8a6e4ce800000000000000000000000000000000000000000000000000000000815263ffffffff80831660048301528416602482015260440161147b565b6000803073ffffffffffffffffffffffffffffffffffffffff16888860405161247c929190614a96565b6000604051808303816000865af19150503d80600081146124b9576040519150601f19603f3d011682016040523d82523d6000602084013e6124be565b606091505b5091509150816124cf573d60208201fd5b50505050505050505050565b63ffffffff821660009081526007602052604081208183600181111561250357612503613295565b600181111561251457612514613295565b815260208101919091526040016000205463ffffffff169392505050565b63ffffffff821660009081526007602052604081208183600181111561255a5761255a613295565b600181111561256b5761256b613295565b815260208101919091526040016000205463ffffffff16600118905092915050565b3330146125c6576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610422825490565b606060006125df83612e42565b9392505050565b806020015167ffffffffffffffff1660000361262e576040517f698cf8e000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008151600181111561264357612643613295565b14158015612664575060018151600181111561266157612661613295565b14155b1561269b576040517f3302dbd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60808101515115806126d8575060408051600060208201520160405160208183030381529060405280519060200120816080015180519060200120145b1561270f576040517f358c192700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a081015151158061274c5750604080516000602082015201604051602081830303815290604052805190602001208160a0015180519060200120145b15612783576040517fdee9857400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015161279e9060039067ffffffffffffffff16612cc6565b6127e65760208101516040517f1bd4d2d200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161147b565b60408082015160208084015167ffffffffffffffff1660009081526002909152919091206001015460ff918216911681811115612859576040517f2db22040000000000000000000000000000000000000000000000000000000008152600481018290526024810183905260440161147b565b60c08301515161010081111561289b576040517f1b925da600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128a68360036139a5565b81116128de576040517f4856694e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808267ffffffffffffffff8111156128fa576128fa6139bc565b604051908082528060200260200182016040528015612923578160200160208202803683370190505b50905060005b838110156129e35760008760c001518281518110612949576129496138f4565b6020026020010151905080604001515160001461296e578361296a81614aa6565b9450505b602081015151158061297f57508051155b156129b857806040517f9fa4031400000000000000000000000000000000000000000000000000000000815260040161147b9190614ade565b80600001518383815181106129cf576129cf6138f4565b602090810291909101015250600101612929565b5060006129f18560036139a5565b6129fc9060016139eb565b905080831015612a42576040517f548dd21f000000000000000000000000000000000000000000000000000000008152600481018490526024810182905260440161147b565b612a4b82612cea565b50505050505050565b6040516000907dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90612ab2907f45564d000000000000000000000000000000000000000000000000000000000090469030908a908a908990602001614af1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052612aef918690602001614b4a565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529190528051602090910120167e0a0000000000000000000000000000000000000000000000000000000000001795945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146125c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161147b565b3373ffffffffffffffffffffffffffffffffffffffff821603612c50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161147b565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600081815260018301602052604081205415156125df565b60006125df8383612e9e565b60005b8151811015612e325760008019167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166350c946fe848481518110612d4957612d496138f4565b60200260200101516040518263ffffffff1660e01b8152600401612d6f91815260200190565b600060405180830381865afa158015612d8c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612dd29190810190614be3565b6080015103612e2a57818181518110612ded57612ded6138f4565b60200260200101516040517f8907a4fa00000000000000000000000000000000000000000000000000000000815260040161147b91815260200190565b600101612ced565b5050565b60006125df8383612f91565b606081600001805480602002602001604051908101604052809291908181526020018280548015612e9257602002820191906000526020600020905b815481526020019060010190808311612e7e575b50505050509050919050565b60008181526001830160205260408120548015612f87576000612ec26001836139fe565b8554909150600090612ed6906001906139fe565b9050808214612f3b576000866000018281548110612ef657612ef66138f4565b9060005260206000200154905080876000018481548110612f1957612f196138f4565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612f4c57612f4c614cc6565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610422565b6000915050610422565b6000818152600183016020526040812054612fd857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610422565b506000610422565b60408051606081018252600080825260208201529081016130576040805161010081019091528060008152602001600067ffffffffffffffff168152602001600060ff168152602001600067ffffffffffffffff168152602001606081526020016060815260200160608152602001606081525090565b905290565b6040518060400160405280600067ffffffffffffffff168152602001613057604051806060016040528060608152602001600060ff168152602001606081525090565b5080546000825590600052602060002090810190611e7c9190613142565b5080546130c990613923565b6000825580601f106130d9575050565b601f016020900490600052602060002090810190611e7c9190613142565b828054828255906000526020600020908101928215613132579160200282015b82811115613132578251825591602001919060010190613117565b5061313e929150613142565b5090565b5b8082111561313e5760008155600101613143565b60006020828403121561316957600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146125df57600080fd5b60005b838110156131b457818101518382015260200161319c565b50506000910152565b600081518084526131d5816020860160208601613199565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006125df60208301846131bd565b63ffffffff81168114611e7c57600080fd5b80356132378161321a565b919050565b60028110611e7c57600080fd5b80356132378161323c565b60008060006060848603121561326957600080fd5b83356132748161321a565b925060208401356132848161323c565b929592945050506040919091013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600281106132fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b80518252600060208201516060602085015261331e60608501826131bd565b90506040830151848203604086015261333782826131bd565b95945050505050565b60008282518085526020808601955060208260051b8401016020860160005b84811015611c60577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08684030189526133998383516132ff565b9884019892509083019060010161335f565b63ffffffff81511682526020810151602083015260006040820151606060408501526133db6060850182516132c4565b602081015167ffffffffffffffff8116608086015250604081015160ff811660a086015250606081015167ffffffffffffffff811660c08601525060808101516101008060e08701526134326101608701836131bd565b915060a08301517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa080888503018389015261346d84836131bd565b935060c08501519250808885030161012089015261348b8484613340565b935060e08501519450808885030161014089015250505061333781836131bd565b6040815260006134bf60408301856133ab565b905082151560208301529392505050565b600080604083850312156134e357600080fd5b82356134ee8161321a565b915060208301356134fe8161323c565b809150509250929050565b60408152600061351c60408301856133ab565b828103602084015261333781856133ab565b6000806000806080858703121561354457600080fd5b843561354f8161321a565b9350602085013561355f8161323c565b93969395505050506040820135916060013590565b60006020828403121561358657600080fd5b81356125df8161321a565b600080604083850312156135a457600080fd5b50508035926020909101359150565b805160608084528151908401819052600091602091908201906080860190845b818110156135ef578351835292840192918401916001016135d3565b505060ff602086015116602087015260408501519250858103604087015261361781846131bd565b9695505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156136b1578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805167ffffffffffffffff16845287015187840187905261369e878501826135b3565b958801959350509086019060010161364a565b509098975050505050505050565b600080600080608085870312156136d557600080fd5b84356136e08161321a565b935060208501356136f08161323c565b9250604085013567ffffffffffffffff81111561370c57600080fd5b8501610100818803121561371f57600080fd5b9396929550929360600135925050565b60006020828403121561374157600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146125df57600080fd5b60008083601f84011261377757600080fd5b50813567ffffffffffffffff81111561378f57600080fd5b6020830191508360208260051b850101111561121b57600080fd5b600080600080604085870312156137c057600080fd5b843567ffffffffffffffff808211156137d857600080fd5b6137e488838901613765565b909650945060208701359150808211156137fd57600080fd5b5061380a87828801613765565b95989497509550505050565b67ffffffffffffffff81168114611e7c57600080fd5b803561323781613816565b6000806000806000806080878903121561385057600080fd5b863567ffffffffffffffff8082111561386857600080fd5b6138748a838b01613765565b9098509650602089013591508082111561388d57600080fd5b818901915089601f8301126138a157600080fd5b8135818111156138b057600080fd5b8a60208285010111156138c257600080fd5b6020830196508095505050506138da6040880161382c565b91506138e86060880161322c565b90509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c9082168061393757607f821691505b602082108103613970577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761042257610422613976565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8082018082111561042257610422613976565b8181038181111561042257610422613976565b6040516060810167ffffffffffffffff81118282101715613a3457613a346139bc565b60405290565b604051610100810167ffffffffffffffff81118282101715613a3457613a346139bc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613aa557613aa56139bc565b604052919050565b60ff81168114611e7c57600080fd5b803561323781613aad565b600082601f830112613ad857600080fd5b813567ffffffffffffffff811115613af257613af26139bc565b613b2360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613a5e565b818152846020838601011115613b3857600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff821115613b6f57613b6f6139bc565b5060051b60200190565b600082601f830112613b8a57600080fd5b81356020613b9f613b9a83613b55565b613a5e565b82815260059290921b84018101918181019086841115613bbe57600080fd5b8286015b84811015613c8657803567ffffffffffffffff80821115613be35760008081fd5b81890191506060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d03011215613c1c5760008081fd5b613c24613a11565b87840135815260408085013584811115613c3e5760008081fd5b613c4c8e8b83890101613ac7565b838b015250918401359183831115613c645760008081fd5b613c728d8a85880101613ac7565b908201528652505050918301918301613bc2565b509695505050505050565b60006101008236031215613ca457600080fd5b613cac613a3a565b613cb583613249565b8152613cc36020840161382c565b6020820152613cd460408401613abc565b6040820152613ce56060840161382c565b6060820152608083013567ffffffffffffffff80821115613d0557600080fd5b613d1136838701613ac7565b608084015260a0850135915080821115613d2a57600080fd5b613d3636838701613ac7565b60a084015260c0850135915080821115613d4f57600080fd5b613d5b36838701613b79565b60c084015260e0850135915080821115613d7457600080fd5b50613d8136828601613ac7565b60e08301525092915050565b600063ffffffff808316818103613da657613da6613976565b6001019392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613de557600080fd5b830160208101925035905067ffffffffffffffff811115613e0557600080fd5b80360382131561121b57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613e9257600080fd5b830160208101925035905067ffffffffffffffff811115613eb257600080fd5b8060051b360382131561121b57600080fd5b60008383855260208086019550808560051b830101846000805b88811015613fa0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868503018a5282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1893603018112613f3e578283fd5b8801803585526060613f5287830183613db0565b8289890152613f648389018284613e14565b925050506040613f7681840184613db0565b935087830382890152613f8a838583613e14565b9d89019d97505050938601935050600101613ede565b509198975050505050505050565b6000610100613fc584613fc085613249565b6132c4565b613fd16020840161382c565b67ffffffffffffffff166020850152613fec60408401613abc565b60ff1660408501526140006060840161382c565b67ffffffffffffffff16606085015261401c6080840184613db0565b82608087015261402f8387018284613e14565b9250505061404060a0840184613db0565b85830360a0870152614053838284613e14565b9250505061406460c0840184613e5d565b85830360c0870152614077838284613ec4565b9250505061408860e0840184613db0565b85830360e0870152613617838284613e14565b6020815260006125df6020830184613fae565b6000813561042281613816565b6000813561042281613aad565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126140fd57600080fd5b83018035915067ffffffffffffffff82111561411857600080fd5b60200191503681900382131561121b57600080fd5b5b81811015612e32576000815560010161412e565b601f82111561417b57806000526020600020601f840160051c810160208510156141695750805b612217601f850160051c83018261412d565b505050565b67ffffffffffffffff831115614198576141986139bc565b6141ac836141a68354613923565b83614142565b6000601f8411600181146141fe57600085156141c85750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355612217565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561424d578685013582556020948501946001909201910161422d565b5086821015614288577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126142cf57600080fd5b83018035915067ffffffffffffffff8211156142ea57600080fd5b6020019150600581901b360382131561121b57600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261433657600080fd5b9190910192915050565b61434a8154613923565b8015612e3257601f81116001811461436457505060009055565b826000526020600020614382601f840160051c82016001830161412d565b60008085559055505050565b81358155600180820160206143a660208601866140c8565b67ffffffffffffffff8111156143be576143be6139bc565b6143d2816143cc8654613923565b86614142565b6000601f82116001811461442457600083156143ee5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b1786556144b7565b6000868152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0841690835b828110156144705786850135825593870193908901908701614453565b50848210156144ab577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88660031b161c19848701351681555b505060018360011b0186555b505050505050506144cb60408301836140c8565b6144d9818360028601614180565b50505050565b680100000000000000008311156144f8576144f86139bc565b8054838255808410156145775760038160030260038104831461451d5761451d613976565b8560030260038104871461453357614533613976565b6000858152602081209283019291909101905b828210156145725780825561455d60018301614340565b61456960028301614340565b90830190614546565b505050505b5060008181526020812083915b858110156145b55761459f6145998487614302565b8361438e565b6020929092019160039190910190600101614584565b505050505050565b81356145c88161323c565b600281106145ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541660ff821681178355505061467661463c602084016140ae565b82547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff1660089190911b68ffffffffffffffff0016178255565b6146c0614685604084016140bb565b82547fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff1660489190911b69ff00000000000000000016178255565b6147126146cf606084016140ae565b82547fffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffff1660509190911b71ffffffffffffffff0000000000000000000016178255565b61471f60808301836140c8565b61472d818360018601614180565b505061473c60a08301836140c8565b61474a818360028601614180565b505061475960c083018361429a565b6147678183600386016144df565b505061477660e08301836140c8565b6144d9818360048601614180565b63ffffffff831681526040602082015260006147a36040830184613fae565b949350505050565b6000602082840312156147bd57600080fd5b81356125df81613816565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261433657600080fd5b60006060823603121561480e57600080fd5b614816613a11565b823567ffffffffffffffff8082111561482e57600080fd5b9084019036601f83011261484157600080fd5b81356020614851613b9a83613b55565b82815260059290921b8401810191818101903684111561487057600080fd5b948201945b8386101561488e57853582529482019490820190614875565b86525061489c878201613abc565b908501525060408501359150808211156148b557600080fd5b506148c236828601613ac7565b60408301525092915050565b815167ffffffffffffffff8111156148e8576148e86139bc565b6148fc816148f68454613923565b84614142565b602080601f83116001811461494f57600084156149195750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556145b5565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561499c5788860151825594840194600190910190840161497d565b50858210156149d857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff831681526040602082015260006147a360408301846135b3565b60008085851115614a1b57600080fd5b83861115614a2857600080fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015614a755780818660040360031b1b83161692505b505092915050565b600060208284031215614a8f57600080fd5b5035919050565b8183823760009101908152919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614ad757614ad7613976565b5060010190565b6020815260006125df60208301846132ff565b8681526020810186905273ffffffffffffffffffffffffffffffffffffffff8516604082015263ffffffff848116606083015260c0820190614b3660808401866132c4565b80841660a084015250979650505050505050565b60008351614b5c818460208801613199565b835190830190614b70818360208801613199565b01949350505050565b80516132378161321a565b600082601f830112614b9557600080fd5b81516020614ba5613b9a83613b55565b8083825260208201915060208460051b870101935086841115614bc757600080fd5b602086015b84811015613c865780518352918301918301614bcc565b600060208284031215614bf557600080fd5b815167ffffffffffffffff80821115614c0d57600080fd5b908301906101008286031215614c2257600080fd5b614c2a613a3a565b614c3383614b79565b8152614c4160208401614b79565b6020820152614c5260408401614b79565b6040820152606083015160608201526080830151608082015260a083015160a082015260c083015182811115614c8757600080fd5b614c9387828601614b84565b60c08301525060e083015182811115614cab57600080fd5b614cb787828601614b84565b60e08301525095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"capabilitiesRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ChainSelectorNotSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expectedConfigDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"gotConfigDigest\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"callDonId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"capabilityRegistryDonId\",\"type\":\"uint32\"}],\"name\":\"DONIdMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FChainMustBePositive\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fChain\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"FRoleDON\",\"type\":\"uint256\"}],\"name\":\"FChainTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node\",\"name\":\"node\",\"type\":\"tuple\"}],\"name\":\"InvalidNode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPluginType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"InvalidSelector\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"currentActiveDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"currentCandidateDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"proposedActiveDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"proposedCandidateDigest\",\"type\":\"bytes32\"}],\"name\":\"InvalidStateTransition\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoOpStateTransitionNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimum\",\"type\":\"uint256\"}],\"name\":\"NotEnoughTransmitters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OfframpAddressCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCapabilitiesRegistryCanCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RMNHomeAddressCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RevokingZeroDigestNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManySigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"ActiveConfigRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"CandidateConfigRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"CapabilityConfigurationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainConfigRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structCCIPHome.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"ConfigPromoted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structCCIPHome.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"chainSelectorRemoves\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPHome.ChainConfigArgs[]\",\"name\":\"chainConfigAdds\",\"type\":\"tuple[]\"}],\"name\":\"applyChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"update\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"beforeCapabilityConfigSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"}],\"name\":\"getActiveDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pageIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllChainConfigs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPHome.ChainConfigArgs[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"}],\"name\":\"getAllConfigs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPHome.VersionedConfig\",\"name\":\"activeConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPHome.VersionedConfig\",\"name\":\"candidateConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"}],\"name\":\"getCandidateDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"getCapabilityConfiguration\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"configuration\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCapabilityRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPHome.VersionedConfig\",\"name\":\"versionedConfig\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"ok\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"}],\"name\":\"getConfigDigests\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"activeConfigDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"candidateConfigDigest\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNumChainConfigurations\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"digestToPromote\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digestToRevoke\",\"type\":\"bytes32\"}],\"name\":\"promoteCandidateAndRevokeActive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"revokeCandidate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"digestToOverwrite\",\"type\":\"bytes32\"}],\"name\":\"setCandidate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"newConfigDigest\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a06040526006805463ffffffff191690553480156200001e57600080fd5b5060405162004dbe38038062004dbe8339810160408190526200004191620001b3565b3380600081620000985760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000cb57620000cb8162000108565b5050506001600160a01b038116620000f6576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0316608052620001e5565b336001600160a01b03821603620001625760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200008f565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001c657600080fd5b81516001600160a01b0381168114620001de57600080fd5b9392505050565b608051614baf6200020f60003960008181610180015281816122360152612cf20152614baf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806379ba5097116100cd578063b74b235611610081578063f2fde38b11610066578063f2fde38b14610356578063f442c89a14610369578063fba64a7c1461037c57600080fd5b8063b74b235614610323578063bae4e0fa1461034357600080fd5b80638318ed5d116100b25780638318ed5d146102d15780638da5cb5b146102f2578063922ea4061461031057600080fd5b806379ba5097146102c15780637ac0d41e146102c957600080fd5b80633df45a72116101245780635a837f97116101095780635a837f97146102785780635f1edd9c1461028d5780637524051a146102ae57600080fd5b80633df45a721461022f5780634851d5491461025057600080fd5b806301ffc9a714610156578063020330e61461017e578063181f5a77146101c557806333d9704a1461020e575b600080fd5b610169610164366004613091565b61038f565b60405190151581526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6102016040518060400160405280601281526020017f43434950486f6d6520312e362e302d646576000000000000000000000000000081525081565b6040516101759190613123565b61022161021c366004613170565b610428565b6040516101759291906133aa565b61024261023d3660046133ce565b610922565b604051610175929190613407565b61026361025e3660046133ce565b611222565b60408051928352602083019190915201610175565b61028b61028636600461342c565b611318565b005b6102a061029b3660046133ce565b61162b565b604051908152602001610175565b61028b6102bc366004613170565b6116a2565b61028b61188d565b6102a061198a565b6102016102df366004613472565b5060408051602081019091526000815290565b60005473ffffffffffffffffffffffffffffffffffffffff166101a0565b6102a061031e3660046133ce565b61199b565b61033661033136600461348f565b6119ec565b6040516101759190613528565b6102a06103513660046135c6565b611c6d565b61028b610364366004613636565b611e6b565b61028b6103773660046136b1565b611e7f565b61028b61038a36600461373e565b61221e565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f78bea72100000000000000000000000000000000000000000000000000000000148061042257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b610430612f1a565b6000805b60028110156109145763ffffffff861660009081526005602052604081208591876001811115610466576104666131b1565b6001811115610477576104776131b1565b81526020019081526020016000208260028110610496576104966137fb565b60070201600101541480156104aa57508315155b1561090c5763ffffffff86166000908152600560205260408120908660018111156104d7576104d76131b1565b60018111156104e8576104e86131b1565b81526020019081526020016000208160028110610507576105076137fb565b6040805160608101825260079290920292909201805463ffffffff1682526001808201546020840152835161010081018552600283018054939592949386938501929190829060ff1687811115610560576105606131b1565b6001811115610571576105716131b1565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a01000000000000000000009091041660608201526001820180546080909201916105c99061382a565b80601f01602080910402602001604051908101604052809291908181526020018280546105f59061382a565b80156106425780601f1061061757610100808354040283529160200191610642565b820191906000526020600020905b81548152906001019060200180831161062557829003601f168201915b5050505050815260200160028201805461065b9061382a565b80601f01602080910402602001604051908101604052809291908181526020018280546106879061382a565b80156106d45780601f106106a9576101008083540402835291602001916106d4565b820191906000526020600020905b8154815290600101906020018083116106b757829003601f168201915b5050505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b8282101561086257838290600052602060002090600302016040518060600160405290816000820154815260200160018201805461073f9061382a565b80601f016020809104026020016040519081016040528092919081815260200182805461076b9061382a565b80156107b85780601f1061078d576101008083540402835291602001916107b8565b820191906000526020600020905b81548152906001019060200180831161079b57829003601f168201915b505050505081526020016002820180546107d19061382a565b80601f01602080910402602001604051908101604052809291908181526020018280546107fd9061382a565b801561084a5780601f1061081f5761010080835404028352916020019161084a565b820191906000526020600020905b81548152906001019060200180831161082d57829003601f168201915b50505050508152505081526020019060010190610702565b50505050815260200160048201805461087a9061382a565b80601f01602080910402602001604051908101604052809291908181526020018280546108a69061382a565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b505050505081525050815250509150925092505061091a565b600101610434565b50600090505b935093915050565b61092a612f1a565b610932612f1a565b63ffffffff841660009081526005602052604081208185600181111561095a5761095a6131b1565b600181111561096b5761096b6131b1565b815260200190815260200160002061098386866124db565b63ffffffff1660028110610999576109996137fb565b6040805160608101825260079290920292909201805463ffffffff1682526001808201546020840152835161010081018552600283018054949593949386019391929091839160ff909116908111156109f4576109f46131b1565b6001811115610a0557610a056131b1565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a0100000000000000000000909104166060820152600182018054608090920191610a5d9061382a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a899061382a565b8015610ad65780601f10610aab57610100808354040283529160200191610ad6565b820191906000526020600020905b815481529060010190602001808311610ab957829003601f168201915b50505050508152602001600282018054610aef9061382a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1b9061382a565b8015610b685780601f10610b3d57610100808354040283529160200191610b68565b820191906000526020600020905b815481529060010190602001808311610b4b57829003601f168201915b5050505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015610cf6578382906000526020600020906003020160405180606001604052908160008201548152602001600182018054610bd39061382a565b80601f0160208091040260200160405190810160405280929190818152602001828054610bff9061382a565b8015610c4c5780601f10610c2157610100808354040283529160200191610c4c565b820191906000526020600020905b815481529060010190602001808311610c2f57829003601f168201915b50505050508152602001600282018054610c659061382a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c919061382a565b8015610cde5780601f10610cb357610100808354040283529160200191610cde565b820191906000526020600020905b815481529060010190602001808311610cc157829003601f168201915b50505050508152505081526020019060010190610b96565b505050508152602001600482018054610d0e9061382a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3a9061382a565b8015610d875780601f10610d5c57610100808354040283529160200191610d87565b820191906000526020600020905b815481529060010190602001808311610d6a57829003601f168201915b50505091909252505050905250602081015190915015610da5578092505b63ffffffff8516600090815260056020526040812081866001811115610dcd57610dcd6131b1565b6001811115610dde57610dde6131b1565b8152602001908152602001600020610df68787612532565b63ffffffff1660028110610e0c57610e0c6137fb565b6040805160608101825260079290920292909201805463ffffffff1682526001808201546020840152835161010081018552600283018054949593949386019391929091839160ff90911690811115610e6757610e676131b1565b6001811115610e7857610e786131b1565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a0100000000000000000000909104166060820152600182018054608090920191610ed09061382a565b80601f0160208091040260200160405190810160405280929190818152602001828054610efc9061382a565b8015610f495780601f10610f1e57610100808354040283529160200191610f49565b820191906000526020600020905b815481529060010190602001808311610f2c57829003601f168201915b50505050508152602001600282018054610f629061382a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8e9061382a565b8015610fdb5780601f10610fb057610100808354040283529160200191610fdb565b820191906000526020600020905b815481529060010190602001808311610fbe57829003601f168201915b5050505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b828210156111695783829060005260206000209060030201604051806060016040529081600082015481526020016001820180546110469061382a565b80601f01602080910402602001604051908101604052809291908181526020018280546110729061382a565b80156110bf5780601f10611094576101008083540402835291602001916110bf565b820191906000526020600020905b8154815290600101906020018083116110a257829003601f168201915b505050505081526020016002820180546110d89061382a565b80601f01602080910402602001604051908101604052809291908181526020018280546111049061382a565b80156111515780601f1061112657610100808354040283529160200191611151565b820191906000526020600020905b81548152906001019060200180831161113457829003601f168201915b50505050508152505081526020019060010190611009565b5050505081526020016004820180546111819061382a565b80601f01602080910402602001604051908101604052809291908181526020018280546111ad9061382a565b80156111fa5780601f106111cf576101008083540402835291602001916111fa565b820191906000526020600020905b8154815290600101906020018083116111dd57829003601f168201915b50505091909252505050905250602081015190915015611218578092505b50505b9250929050565b63ffffffff8216600090815260056020526040812081908184600181111561124c5761124c6131b1565b600181111561125d5761125d6131b1565b815260200190815260200160002061127585856124db565b63ffffffff166002811061128b5761128b6137fb565b6007020160010154600560008663ffffffff1663ffffffff16815260200190815260200160002060008560018111156112c6576112c66131b1565b60018111156112d7576112d76131b1565b81526020019081526020016000206112ef8686612532565b63ffffffff1660028110611305576113056137fb565b6007020160010154915091509250929050565b61132061258d565b8115801561132c575080155b15611363576040517f7b4d1e4f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061136f8585612532565b63ffffffff86811660009081526005602052604081209290911692508491908660018111156113a0576113a06131b1565b60018111156113b1576113b16131b1565b815260200190815260200160002082600281106113d0576113d06137fb565b6007020160010154146114845763ffffffff8516600090815260056020526040812090856001811115611405576114056131b1565b6001811115611416576114166131b1565b81526020019081526020016000208160028110611435576114356137fb565b6007020160010154836040517f93df584c00000000000000000000000000000000000000000000000000000000815260040161147b929190918252602082015260400190565b60405180910390fd5b63ffffffff85166000908152600560205260408120818660018111156114ac576114ac6131b1565b60018111156114bd576114bd6131b1565b81526020019081526020016000206114d587876124db565b63ffffffff16600281106114eb576114eb6137fb565b6007020190508281600101541461153e5760018101546040517f93df584c00000000000000000000000000000000000000000000000000000000815260048101919091526024810184905260440161147b565b6000600180830182905563ffffffff881682526007602052604082209091878381111561156d5761156d6131b1565b600181111561157e5761157e6131b1565b8152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000811663ffffffff918216939093181691909117905582156115f85760405183907f0b31c0055e2d464bef7781994b98c4ff9ef4ae0d05f59feb6a68c42de5e201b890600090a25b60405184907ffc3e98dbbd47c3fa7c1c05b6ec711caeaf70eca4554192b9ada8fc11a37f298e90600090a2505050505050565b63ffffffff8216600090815260056020526040812081836001811115611653576116536131b1565b6001811115611664576116646131b1565b815260200190815260200160002061167c84846124db565b63ffffffff1660028110611692576116926137fb565b6007020160010154905092915050565b6116aa61258d565b806116e1576040517f0849d8cc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116ed8484612532565b63ffffffff858116600090815260056020526040812092909116925083919085600181111561171e5761171e6131b1565b600181111561172f5761172f6131b1565b8152602001908152602001600020826002811061174e5761174e6137fb565b6007020160010154146117f95763ffffffff8416600090815260056020526040812090846001811115611783576117836131b1565b6001811115611794576117946131b1565b815260200190815260200160002081600281106117b3576117b36137fb565b6007020160010154826040517f93df584c00000000000000000000000000000000000000000000000000000000815260040161147b929190918252602082015260400190565b60405182907f53f5d9228f0a4173bea6e5931c9b3afe6eeb6692ede1d182952970f152534e3b90600090a263ffffffff841660009081526005602052604081209084600181111561184c5761184c6131b1565b600181111561185d5761185d6131b1565b8152602001908152602001600020816002811061187c5761187c6137fb565b600702016001016000905550505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161147b565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b600061199660036125c8565b905090565b63ffffffff82166000908152600560205260408120818360018111156119c3576119c36131b1565b60018111156119d4576119d46131b1565b815260200190815260200160002061167c8484612532565b606060006119fa60036125c8565b90506000611a0884866138ac565b9050831580611a175750818110155b15611a57576040805160008082526020820190925290611a4d565b611a3a612f96565b815260200190600190039081611a325790505b5092505050610422565b6000611a6385836138f2565b905082811115611a705750815b6000611a7c8383613905565b67ffffffffffffffff811115611a9457611a946138c3565b604051908082528060200260200182016040528015611acd57816020015b611aba612f96565b815260200190600190039081611ab25790505b5090506000611adc60036125d2565b9050835b83811015611c60576000828281518110611afc57611afc6137fb565b60209081029190910181015160408051808201825267ffffffffffffffff831680825260009081526002855282902082518154608081880283018101909552606082018181529597509295860194909391928492849190840182828015611b8257602002820191906000526020600020905b815481526020019060010190808311611b6e575b5050509183525050600182015460ff166020820152600282018054604090920191611bac9061382a565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd89061382a565b8015611c255780601f10611bfa57610100808354040283529160200191611c25565b820191906000526020600020905b815481529060010190602001808311611c0857829003601f168201915b50505091909252505050905284611c3c8885613905565b81518110611c4c57611c4c6137fb565b602090810291909101015250600101611ae0565b5090979650505050505050565b6000611c7761258d565b611c88611c8384613b3e565b6125e6565b6000611c94868661199b565b9050828114611cd9576040517f93df584c000000000000000000000000000000000000000000000000000000008152600481018290526024810184905260440161147b565b8015611d0b5760405183907f53f5d9228f0a4173bea6e5931c9b3afe6eeb6692ede1d182952970f152534e3b90600090a25b60068054600091908290611d249063ffffffff16613c3a565b91906101000a81548163ffffffff021916908363ffffffff16021790559050611d6e878787604051602001611d599190613f16565b60405160208183030381529060405284612a54565b63ffffffff881660009081526005602052604081209194509081886001811115611d9a57611d9a6131b1565b6001811115611dab57611dab6131b1565b8152602001908152602001600020611dc38989612532565b63ffffffff1660028110611dd957611dd96137fb565b600702016001810185905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff841617815590508560028201611e2382826143fc565b905050837f94f085b7c57ec2a270befd0b7b2ec7452580040edee8bb0fb04609c81f0359c68388604051611e589291906145c3565b60405180910390a2505050949350505050565b611e73612b14565b611e7c81612b95565b50565b611e87612b14565b60005b8381101561206d57611ece858583818110611ea757611ea76137fb565b9050602002016020810190611ebc91906145ea565b60039067ffffffffffffffff16612c8a565b611f3857848482818110611ee457611ee46137fb565b9050602002016020810190611ef991906145ea565b6040517f1bd4d2d200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161147b565b60026000868684818110611f4e57611f4e6137fb565b9050602002016020810190611f6391906145ea565b67ffffffffffffffff1681526020810191909152604001600090812090611f8a8282612fd9565b6001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055611fc2600283016000612ff7565b5050612000858583818110611fd957611fd96137fb565b9050602002016020810190611fee91906145ea565b60039067ffffffffffffffff16612ca2565b507f2a680691fef3b2d105196805935232c661ce703e92d464ef0b94a7bc62d714f0858583818110612034576120346137fb565b905060200201602081019061204991906145ea565b60405167ffffffffffffffff909116815260200160405180910390a1600101611e8a565b5060005b8181101561221757600083838381811061208d5761208d6137fb565b905060200281019061209f9190614607565b6120ad90602081019061415f565b6120b69061463b565b905060008484848181106120cc576120cc6137fb565b90506020028101906120de9190614607565b6120ec9060208101906145ea565b90506120fb8260000151612cae565b816020015160ff1660000361213c576040517fa9b3766e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8116600090815260026020908152604090912083518051859361216c928492910190613031565b5060208201516001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff909216919091179055604082015160028201906121b9908261470d565b506121d391506003905067ffffffffffffffff8316612d70565b507f05dd57854af2c291a94ea52e7c43d80bc3be7fa73022f98b735dea86642fa5e08183604051612205929190614809565b60405180910390a15050600101612071565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461228d576040517fac7a7efd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061229c600482868861482c565b6122a591614856565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fbae4e0fa000000000000000000000000000000000000000000000000000000001480159061233b57507fffffffff0000000000000000000000000000000000000000000000000000000081167f7524051a0000000000000000000000000000000000000000000000000000000014155b801561238957507fffffffff0000000000000000000000000000000000000000000000000000000081167f5a837f970000000000000000000000000000000000000000000000000000000014155b156123e4576040517f12ba286f0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008216600482015260240161147b565b60006123f460246004878961482c565b810190612401919061489e565b90508263ffffffff168114612452576040517f8a6e4ce800000000000000000000000000000000000000000000000000000000815263ffffffff80831660048301528416602482015260440161147b565b6000803073ffffffffffffffffffffffffffffffffffffffff16888860405161247c9291906148b7565b6000604051808303816000865af19150503d80600081146124b9576040519150601f19603f3d011682016040523d82523d6000602084013e6124be565b606091505b5091509150816124cf573d60208201fd5b50505050505050505050565b63ffffffff8216600090815260076020526040812081836001811115612503576125036131b1565b6001811115612514576125146131b1565b815260208101919091526040016000205463ffffffff169392505050565b63ffffffff821660009081526007602052604081208183600181111561255a5761255a6131b1565b600181111561256b5761256b6131b1565b815260208101919091526040016000205463ffffffff16600118905092915050565b3330146125c6576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610422825490565b606060006125df83612d7c565b9392505050565b806020015167ffffffffffffffff1660000361262e576040517f698cf8e000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081516001811115612643576126436131b1565b141580156126645750600181516001811115612661576126616131b1565b14155b1561269b576040517f3302dbd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60808101515115806126d8575060408051600060208201520160405160208183030381529060405280519060200120816080015180519060200120145b1561270f576040517f358c192700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a081015151158061274c5750604080516000602082015201604051602081830303815290604052805190602001208160a0015180519060200120145b15612783576040517fdee9857400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015161279e9060039067ffffffffffffffff16612c8a565b6127e65760208101516040517f1bd4d2d200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161147b565b60408082015160208084015167ffffffffffffffff1660009081526002909152919091206001015460ff918216911681811115612859576040517f2db22040000000000000000000000000000000000000000000000000000000008152600481018290526024810183905260440161147b565b60c08301515161010081111561289b576040517f1b925da600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128a68360036138ac565b81116128de576040517f4856694e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808267ffffffffffffffff8111156128fa576128fa6138c3565b604051908082528060200260200182016040528015612923578160200160208202803683370190505b50905060005b838110156129e35760008760c001518281518110612949576129496137fb565b6020026020010151905080604001515160001461296e578361296a816148c7565b9450505b602081015151158061297f57508051155b156129b857806040517f9fa4031400000000000000000000000000000000000000000000000000000000815260040161147b91906148ff565b80600001518383815181106129cf576129cf6137fb565b602090810291909101015250600101612929565b5060006129f18560036138ac565b6129fc9060016138f2565b905080831015612a42576040517f548dd21f000000000000000000000000000000000000000000000000000000008152600481018490526024810182905260440161147b565b612a4b82612cae565b50505050505050565b6040516000907dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90612ab2907f45564d000000000000000000000000000000000000000000000000000000000090469030908a908a908990602001614912565b60408051601f1981840301815290829052612ad191869060200161496b565b60408051808303601f190181529190528051602090910120167e0a0000000000000000000000000000000000000000000000000000000000001795945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146125c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161147b565b3373ffffffffffffffffffffffffffffffffffffffff821603612c14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161147b565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600081815260018301602052604081205415156125df565b60006125df8383612dd8565b805115611e7c576040517f05a5196600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906305a5196690612d2790849060040161499a565b600060405180830381865afa158015612d44573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d6c9190810190614a17565b5050565b60006125df8383612ecb565b606081600001805480602002602001604051908101604052809291908181526020018280548015612dcc57602002820191906000526020600020905b815481526020019060010190808311612db8575b50505050509050919050565b60008181526001830160205260408120548015612ec1576000612dfc600183613905565b8554909150600090612e1090600190613905565b9050808214612e75576000866000018281548110612e3057612e306137fb565b9060005260206000200154905080876000018481548110612e5357612e536137fb565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612e8657612e86614b73565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610422565b6000915050610422565b6000818152600183016020526040812054612f1257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610422565b506000610422565b6040805160608101825260008082526020820152908101612f916040805161010081019091528060008152602001600067ffffffffffffffff168152602001600060ff168152602001600067ffffffffffffffff168152602001606081526020016060815260200160608152602001606081525090565b905290565b6040518060400160405280600067ffffffffffffffff168152602001612f91604051806060016040528060608152602001600060ff168152602001606081525090565b5080546000825590600052602060002090810190611e7c919061307c565b5080546130039061382a565b6000825580601f10613013575050565b601f016020900490600052602060002090810190611e7c919061307c565b82805482825590600052602060002090810192821561306c579160200282015b8281111561306c578251825591602001919060010190613051565b5061307892915061307c565b5090565b5b80821115613078576000815560010161307d565b6000602082840312156130a357600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146125df57600080fd5b60005b838110156130ee5781810151838201526020016130d6565b50506000910152565b6000815180845261310f8160208601602086016130d3565b601f01601f19169290920160200192915050565b6020815260006125df60208301846130f7565b63ffffffff81168114611e7c57600080fd5b803561315381613136565b919050565b60028110611e7c57600080fd5b803561315381613158565b60008060006060848603121561318557600080fd5b833561319081613136565b925060208401356131a081613158565b929592945050506040919091013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028110613217577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b80518252600060208201516060602085015261323a60608501826130f7565b90506040830151848203604086015261325382826130f7565b95945050505050565b60008282518085526020808601955060208260051b8401016020860160005b84811015611c6057601f1986840301895261329783835161321b565b9884019892509083019060010161327b565b63ffffffff81511682526020810151602083015260006040820151606060408501526132d96060850182516131e0565b602081015167ffffffffffffffff8116608086015250604081015160ff811660a086015250606081015167ffffffffffffffff811660c08601525060808101516101008060e08701526133306101608701836130f7565b915060a08301517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa080888503018389015261336b84836130f7565b935060c085015192508088850301610120890152613389848461325c565b935060e08501519450808885030161014089015250505061325381836130f7565b6040815260006133bd60408301856132a9565b905082151560208301529392505050565b600080604083850312156133e157600080fd5b82356133ec81613136565b915060208301356133fc81613158565b809150509250929050565b60408152600061341a60408301856132a9565b828103602084015261325381856132a9565b6000806000806080858703121561344257600080fd5b843561344d81613136565b9350602085013561345d81613158565b93969395505050506040820135916060013590565b60006020828403121561348457600080fd5b81356125df81613136565b600080604083850312156134a257600080fd5b50508035926020909101359150565b60008151808452602080850194506020840160005b838110156134e2578151875295820195908201906001016134c6565b509495945050505050565b600081516060845261350260608501826134b1565b905060ff60208401511660208501526040830151848203604086015261325382826130f7565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156135b8578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805167ffffffffffffffff1684528701518784018790526135a5878501826134ed565b9588019593505090860190600101613551565b509098975050505050505050565b600080600080608085870312156135dc57600080fd5b84356135e781613136565b935060208501356135f781613158565b9250604085013567ffffffffffffffff81111561361357600080fd5b8501610100818803121561362657600080fd5b9396929550929360600135925050565b60006020828403121561364857600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146125df57600080fd5b60008083601f84011261367e57600080fd5b50813567ffffffffffffffff81111561369657600080fd5b6020830191508360208260051b850101111561121b57600080fd5b600080600080604085870312156136c757600080fd5b843567ffffffffffffffff808211156136df57600080fd5b6136eb8883890161366c565b9096509450602087013591508082111561370457600080fd5b506137118782880161366c565b95989497509550505050565b67ffffffffffffffff81168114611e7c57600080fd5b80356131538161371d565b6000806000806000806080878903121561375757600080fd5b863567ffffffffffffffff8082111561376f57600080fd5b61377b8a838b0161366c565b9098509650602089013591508082111561379457600080fd5b818901915089601f8301126137a857600080fd5b8135818111156137b757600080fd5b8a60208285010111156137c957600080fd5b6020830196508095505050506137e160408801613733565b91506137ef60608801613148565b90509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c9082168061383e57607f821691505b602082108103613877577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176104225761042261387d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b808201808211156104225761042261387d565b818103818111156104225761042261387d565b6040516060810167ffffffffffffffff8111828210171561393b5761393b6138c3565b60405290565b604051610100810167ffffffffffffffff8111828210171561393b5761393b6138c3565b604051601f8201601f1916810167ffffffffffffffff8111828210171561398e5761398e6138c3565b604052919050565b60ff81168114611e7c57600080fd5b803561315381613996565b600082601f8301126139c157600080fd5b813567ffffffffffffffff8111156139db576139db6138c3565b6139ee6020601f19601f84011601613965565b818152846020838601011115613a0357600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff821115613a3a57613a3a6138c3565b5060051b60200190565b600082601f830112613a5557600080fd5b81356020613a6a613a6583613a20565b613965565b82815260059290921b84018101918181019086841115613a8957600080fd5b8286015b84811015613b3357803567ffffffffffffffff80821115613aae5760008081fd5b8189019150606080601f19848d03011215613ac95760008081fd5b613ad1613918565b87840135815260408085013584811115613aeb5760008081fd5b613af98e8b838901016139b0565b838b015250918401359183831115613b115760008081fd5b613b1f8d8a858801016139b0565b908201528652505050918301918301613a8d565b509695505050505050565b60006101008236031215613b5157600080fd5b613b59613941565b613b6283613165565b8152613b7060208401613733565b6020820152613b81604084016139a5565b6040820152613b9260608401613733565b6060820152608083013567ffffffffffffffff80821115613bb257600080fd5b613bbe368387016139b0565b608084015260a0850135915080821115613bd757600080fd5b613be3368387016139b0565b60a084015260c0850135915080821115613bfc57600080fd5b613c0836838701613a44565b60c084015260e0850135915080821115613c2157600080fd5b50613c2e368286016139b0565b60e08301525092915050565b600063ffffffff808316818103613c5357613c5361387d565b6001019392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613c9257600080fd5b830160208101925035905067ffffffffffffffff811115613cb257600080fd5b80360382131561121b57600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613d2157600080fd5b830160208101925035905067ffffffffffffffff811115613d4157600080fd5b8060051b360382131561121b57600080fd5b60008383855260208086019550808560051b830101846000805b88811015613e1157601f19868503018a5282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1893603018112613daf578283fd5b8801803585526060613dc387830183613c5d565b8289890152613dd58389018284613cc1565b925050506040613de781840184613c5d565b935087830382890152613dfb838583613cc1565b9d89019d97505050938601935050600101613d6d565b509198975050505050505050565b6000610100613e3684613e3185613165565b6131e0565b613e4260208401613733565b67ffffffffffffffff166020850152613e5d604084016139a5565b60ff166040850152613e7160608401613733565b67ffffffffffffffff166060850152613e8d6080840184613c5d565b826080870152613ea08387018284613cc1565b92505050613eb160a0840184613c5d565b85830360a0870152613ec4838284613cc1565b92505050613ed560c0840184613cec565b85830360c0870152613ee8838284613d53565b92505050613ef960e0840184613c5d565b85830360e0870152613f0c838284613cc1565b9695505050505050565b6020815260006125df6020830184613e1f565b600081356104228161371d565b6000813561042281613996565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f7857600080fd5b83018035915067ffffffffffffffff821115613f9357600080fd5b60200191503681900382131561121b57600080fd5b5b81811015612d6c5760008155600101613fa9565b601f821115613ff657806000526020600020601f840160051c81016020851015613fe45750805b612217601f850160051c830182613fa8565b505050565b67ffffffffffffffff831115614013576140136138c3565b61402783614021835461382a565b83613fbd565b6000601f84116001811461407957600085156140435750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355612217565b600083815260209020601f19861690835b828110156140aa578685013582556020948501946001909201910161408a565b50868210156140e5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261412c57600080fd5b83018035915067ffffffffffffffff82111561414757600080fd5b6020019150600581901b360382131561121b57600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261419357600080fd5b9190910192915050565b6141a7815461382a565b8015612d6c57601f8111600181146141c157505060009055565b8260005260206000206141df601f840160051c820160018301613fa8565b60008085559055505050565b81358155600180820160206142036020860186613f43565b67ffffffffffffffff81111561421b5761421b6138c3565b61422f81614229865461382a565b86613fbd565b6000601f821160018114614281576000831561424b5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b1786556142f6565b600086815260209020601f19841690835b828110156142af5786850135825593870193908901908701614292565b50848210156142ea577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88660031b161c19848701351681555b505060018360011b0186555b5050505050505061430a6040830183613f43565b614318818360028601613ffb565b50505050565b68010000000000000000831115614337576143376138c3565b8054838255808410156143b65760038160030260038104831461435c5761435c61387d565b856003026003810487146143725761437261387d565b6000858152602081209283019291909101905b828210156143b15780825561439c6001830161419d565b6143a86002830161419d565b90830190614385565b505050505b5060008181526020812083915b858110156143f4576143de6143d8848761415f565b836141eb565b60209290920191600391909101906001016143c3565b505050505050565b813561440781613158565b6002811061443e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541660ff82168117835550506144b561447b60208401613f29565b82547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff1660089190911b68ffffffffffffffff0016178255565b6144ff6144c460408401613f36565b82547fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff1660489190911b69ff00000000000000000016178255565b61455161450e60608401613f29565b82547fffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffff1660509190911b71ffffffffffffffff0000000000000000000016178255565b61455e6080830183613f43565b61456c818360018601613ffb565b505061457b60a0830183613f43565b614589818360028601613ffb565b505061459860c08301836140f7565b6145a681836003860161431e565b50506145b560e0830183613f43565b614318818360048601613ffb565b63ffffffff831681526040602082015260006145e26040830184613e1f565b949350505050565b6000602082840312156145fc57600080fd5b81356125df8161371d565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261419357600080fd5b60006060823603121561464d57600080fd5b614655613918565b823567ffffffffffffffff8082111561466d57600080fd5b9084019036601f83011261468057600080fd5b81356020614690613a6583613a20565b82815260059290921b840181019181810190368411156146af57600080fd5b948201945b838610156146cd578535825294820194908201906146b4565b8652506146db8782016139a5565b908501525060408501359150808211156146f457600080fd5b50614701368286016139b0565b60408301525092915050565b815167ffffffffffffffff811115614727576147276138c3565b61473b81614735845461382a565b84613fbd565b602080601f83116001811461478e57600084156147585750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556143f4565b600085815260208120601f198616915b828110156147bd5788860151825594840194600190910190840161479e565b50858210156147f957878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff831681526040602082015260006145e260408301846134ed565b6000808585111561483c57600080fd5b8386111561484957600080fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156148965780818660040360031b1b83161692505b505092915050565b6000602082840312156148b057600080fd5b5035919050565b8183823760009101908152919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148f8576148f861387d565b5060010190565b6020815260006125df602083018461321b565b8681526020810186905273ffffffffffffffffffffffffffffffffffffffff8516604082015263ffffffff848116606083015260c082019061495760808401866131e0565b80841660a084015250979650505050505050565b6000835161497d8184602088016130d3565b8351908301906149918183602088016130d3565b01949350505050565b6020815260006125df60208301846134b1565b805161315381613136565b600082601f8301126149c957600080fd5b815160206149d9613a6583613a20565b8083825260208201915060208460051b8701019350868411156149fb57600080fd5b602086015b84811015613b335780518352918301918301614a00565b60006020808385031215614a2a57600080fd5b825167ffffffffffffffff80821115614a4257600080fd5b818501915085601f830112614a5657600080fd5b8151614a64613a6582613a20565b81815260059190911b83018401908481019088831115614a8357600080fd5b8585015b83811015614b6657805185811115614a9e57600080fd5b8601610100818c03601f1901811315614ab657600080fd5b614abe613941565b614ac98a84016149ad565b8152614ad7604084016149ad565b8a820152614ae7606084016149ad565b60408201526080830151606082015260a0830151608082015260c083015160a082015260e08084015189811115614b1e5760008081fd5b614b2c8f8d838801016149b8565b60c084015250918301519188831115614b455760008081fd5b614b538e8c858701016149b8565b9082015285525050918601918601614a87565b5098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", } var CCIPHomeABI = CCIPHomeMetaData.ABI diff --git a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt index 3ecf01d7612..d19b957fcb4 100644 --- a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -3,7 +3,7 @@ burn_from_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnFromMintTokenPool burn_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnMintTokenPool/BurnMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnMintTokenPool/BurnMintTokenPool.bin 3e8e3358f0bb520af069a7d37ea625940a88461a54418b1d5925eabced8c74df burn_with_from_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.bin 734c2a0ea8f1224b5f01ed849410209e74b4e3427e8bfddb8ff5dd8ead5f2d8d ccip_encoding_utils: ../../../contracts/solc/v0.8.24/ICCIPEncodingUtils/ICCIPEncodingUtils.abi ../../../contracts/solc/v0.8.24/ICCIPEncodingUtils/ICCIPEncodingUtils.bin a074f2ecf2749a1d5afc4cd9bfa48677f09c2be4e076776f87c6feb767432ecb -ccip_home: ../../../contracts/solc/v0.8.24/CCIPHome/CCIPHome.abi ../../../contracts/solc/v0.8.24/CCIPHome/CCIPHome.bin 079b70ad36b4a9522518df82f01bdb8480fb9bb8de5791ef17ea1ddf044814be +ccip_home: ../../../contracts/solc/v0.8.24/CCIPHome/CCIPHome.abi ../../../contracts/solc/v0.8.24/CCIPHome/CCIPHome.bin 8c603a0de19c4649d69bdd18774ee3b5edfd24c696aabdb7cdb982bd8e304829 ccip_reader_tester: ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.abi ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.bin 5db06eb7fad07ec0d1ae5ac8d39f61398687fe3cda8290716ce0cd8fb9dca1ab ether_sender_receiver: ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.abi ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.bin 09510a3f773f108a3c231e8d202835c845ded862d071ec54c4f89c12d868b8de fee_quoter: ../../../contracts/solc/v0.8.24/FeeQuoter/FeeQuoter.abi ../../../contracts/solc/v0.8.24/FeeQuoter/FeeQuoter.bin 6e647595433c98ccb33d27cc73a82804dbb5369a9b56fc87c43797cb9cf9a39a diff --git a/core/gethwrappers/keystone/generated/capabilities_registry/capabilities_registry.go b/core/gethwrappers/keystone/generated/capabilities_registry/capabilities_registry.go index bf8d7978a1c..91358b134ac 100644 --- a/core/gethwrappers/keystone/generated/capabilities_registry/capabilities_registry.go +++ b/core/gethwrappers/keystone/generated/capabilities_registry/capabilities_registry.go @@ -63,33 +63,33 @@ type CapabilitiesRegistryDONInfo struct { CapabilityConfigurations []CapabilitiesRegistryCapabilityConfiguration } -type CapabilitiesRegistryNodeInfo struct { +type CapabilitiesRegistryNodeOperator struct { + Admin common.Address + Name string +} + +type CapabilitiesRegistryNodeParams struct { NodeOperatorId uint32 - ConfigCount uint32 - WorkflowDONId uint32 Signer [32]byte P2pId [32]byte EncryptionPublicKey [32]byte HashedCapabilityIds [][32]byte - CapabilitiesDONIds []*big.Int -} - -type CapabilitiesRegistryNodeOperator struct { - Admin common.Address - Name string } -type CapabilitiesRegistryNodeParams struct { +type INodeInfoProviderNodeInfo struct { NodeOperatorId uint32 + ConfigCount uint32 + WorkflowDONId uint32 Signer [32]byte P2pId [32]byte EncryptionPublicKey [32]byte HashedCapabilityIds [][32]byte + CapabilitiesDONIds []*big.Int } var CapabilitiesRegistryMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AccessForbidden\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityIsDeprecated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"CapabilityRequiredByDON\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"DONDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"DuplicateDONCapability\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"DuplicateDONNode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"proposedConfigurationContract\",\"type\":\"address\"}],\"name\":\"InvalidCapabilityConfigurationContractInterface\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nodeCount\",\"type\":\"uint256\"}],\"name\":\"InvalidFaultTolerance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"name\":\"InvalidNodeCapabilities\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encryptionPublicKey\",\"type\":\"bytes32\"}],\"name\":\"InvalidNodeEncryptionPublicKey\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidNodeOperatorAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"InvalidNodeP2PId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidNodeSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"lengthOne\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lengthTwo\",\"type\":\"uint256\"}],\"name\":\"LengthMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"NodeAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"NodeDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"NodeDoesNotSupportCapability\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"}],\"name\":\"NodeOperatorDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"NodePartOfCapabilitiesDON\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"NodePartOfWorkflowDON\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityDeprecated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"}],\"name\":\"NodeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NodeOperatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"}],\"name\":\"NodeOperatorRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NodeOperatorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"NodeRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"}],\"name\":\"NodeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"labelledName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityType\",\"name\":\"capabilityType\",\"type\":\"uint8\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"}],\"internalType\":\"structCapabilitiesRegistry.Capability[]\",\"name\":\"capabilities\",\"type\":\"tuple[]\"}],\"name\":\"addCapabilities\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"nodes\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"acceptsWorkflows\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"}],\"name\":\"addDON\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilitiesRegistry.NodeOperator[]\",\"name\":\"nodeOperators\",\"type\":\"tuple[]\"}],\"name\":\"addNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"encryptionPublicKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"internalType\":\"structCapabilitiesRegistry.NodeParams[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"}],\"name\":\"addNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"name\":\"deprecateCapabilities\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCapabilities\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"hashedId\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"labelledName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityType\",\"name\":\"capabilityType\",\"type\":\"uint8\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isDeprecated\",\"type\":\"bool\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedId\",\"type\":\"bytes32\"}],\"name\":\"getCapability\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"hashedId\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"labelledName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityType\",\"name\":\"capabilityType\",\"type\":\"uint8\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isDeprecated\",\"type\":\"bool\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"getCapabilityConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"getDON\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"acceptsWorkflows\",\"type\":\"bool\"},{\"internalType\":\"bytes32[]\",\"name\":\"nodeP2PIds\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"}],\"internalType\":\"structCapabilitiesRegistry.DONInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDONs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"acceptsWorkflows\",\"type\":\"bool\"},{\"internalType\":\"bytes32[]\",\"name\":\"nodeP2PIds\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"}],\"internalType\":\"structCapabilitiesRegistry.DONInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"labelledName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"name\":\"getHashedCapabilityId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"getNode\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"workflowDONId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"encryptionPublicKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"capabilitiesDONIds\",\"type\":\"uint256[]\"}],\"internalType\":\"structCapabilitiesRegistry.NodeInfo\",\"name\":\"nodeInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"}],\"name\":\"getNodeOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilitiesRegistry.NodeOperator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodeOperators\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilitiesRegistry.NodeOperator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodes\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"workflowDONId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"encryptionPublicKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"capabilitiesDONIds\",\"type\":\"uint256[]\"}],\"internalType\":\"structCapabilitiesRegistry.NodeInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"isCapabilityDeprecated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"donIds\",\"type\":\"uint32[]\"}],\"name\":\"removeDONs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"nodeOperatorIds\",\"type\":\"uint32[]\"}],\"name\":\"removeNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"removedNodeP2PIds\",\"type\":\"bytes32[]\"}],\"name\":\"removeNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[]\",\"name\":\"nodes\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"}],\"name\":\"updateDON\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"nodeOperatorIds\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilitiesRegistry.NodeOperator[]\",\"name\":\"nodeOperators\",\"type\":\"tuple[]\"}],\"name\":\"updateNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"encryptionPublicKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"internalType\":\"structCapabilitiesRegistry.NodeParams[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"}],\"name\":\"updateNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6080604052600e80546001600160401b0319166401000000011790553480156200002857600080fd5b503380600081620000805760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000b357620000b381620000bc565b50505062000167565b336001600160a01b03821603620001165760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000077565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61519f80620001776000396000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c806350c946fe116100ee57806386fa424611610097578063d8bc7b6811610071578063d8bc7b6814610400578063ddbe4f8214610413578063e29581aa14610428578063f2fde38b1461043d57600080fd5b806386fa4246146103a55780638da5cb5b146103b85780639cb7c5f4146103e057600080fd5b8063715f5295116100c8578063715f52951461037757806379ba50971461038a57806384f5ed8a1461039257600080fd5b806350c946fe1461032f5780635d83d9671461034f57806366acaa331461036257600080fd5b8063235374051161015b5780632c01a1e8116101355780632c01a1e8146102d5578063358039f4146102e8578063398f3773146102fb5780633f2a13c91461030e57600080fd5b8063235374051461028f578063275459f2146102af5780632a852933146102c257600080fd5b80631d05394c1161018c5780631d05394c14610245578063214502431461025a57806322bdbcbc1461026f57600080fd5b80630fe5800a146101b357806312570011146101d9578063181f5a77146101fc575b600080fd5b6101c66101c1366004613fd3565b610450565b6040519081526020015b60405180910390f35b6101ec6101e7366004614037565b610484565b60405190151581526020016101d0565b6102386040518060400160405280601a81526020017f4361706162696c6974696573526567697374727920312e302e3000000000000081525081565b6040516101d091906140be565b610258610253366004614116565b610491565b005b61026261069e565b6040516101d09190614298565b61028261027d366004614333565b6107fb565b6040516101d0919061438b565b6102a261029d366004614333565b6108e8565b6040516101d0919061439e565b6102586102bd366004614116565b61092c565b6102586102d03660046143d2565b610a03565b6102586102e3366004614116565b610ae3565b6102586102f6366004614116565b610d86565b610258610309366004614116565b6114fb565b61032161031c366004614474565b6116ba565b6040516101d092919061449e565b61034261033d366004614037565b6118a6565b6040516101d0919061453b565b61025861035d366004614116565b611993565b61036a611a88565b6040516101d0919061454e565b610258610385366004614116565b611c6b565b610258611d1d565b6102586103a0366004614116565b611e1a565b6102586103b33660046145c3565b612335565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b6103f36103ee366004614037565b612675565b6040516101d09190614712565b61025861040e366004614725565b6128b0565b61041b61297a565b6040516101d091906147ab565b610430612a6e565b6040516101d09190614820565b61025861044b3660046148b9565b612b7f565b6000828260405160200161046592919061449e565b6040516020818303038152906040528051906020012090505b92915050565b600061047e600583612b93565b610499612bae565b60005b818110156106995760008383838181106104b8576104b86148d4565b90506020020160208101906104cd9190614333565b63ffffffff8181166000908152600d60209081526040808320805464010000000081049095168085526001820190935290832094955093909290916a010000000000000000000090910460ff16905b61052583612c31565b8110156105c557811561057b57600c60006105408584612c3b565b8152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff1690556105bd565b6105bb8663ffffffff16600c600061059c8588612c3b90919063ffffffff16565b8152602001908152602001600020600501612c4790919063ffffffff16565b505b60010161051c565b508354640100000000900463ffffffff1660000361061c576040517f2b62be9b00000000000000000000000000000000000000000000000000000000815263ffffffff861660048201526024015b60405180910390fd5b63ffffffff85166000818152600d6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffff0000000000000000000000169055519182527ff264aae70bf6a9d90e68e0f9b393f4e7fbea67b063b0f336e0b36c1581703651910160405180910390a2505050505080600101905061049c565b505050565b600e54606090640100000000900463ffffffff1660006106bf600183614932565b63ffffffff1667ffffffffffffffff8111156106dd576106dd613e90565b60405190808252806020026020018201604052801561076457816020015b6040805160e081018252600080825260208083018290529282018190526060808301829052608083019190915260a0820181905260c082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816106fb5790505b509050600060015b8363ffffffff168163ffffffff1610156107d85763ffffffff8082166000908152600d602052604090205416156107d0576107a681612c53565b8383815181106107b8576107b86148d4565b6020026020010181905250816107cd9061494f565b91505b60010161076c565b506107e4600184614932565b63ffffffff1681146107f4578082525b5092915050565b60408051808201909152600081526060602082015263ffffffff82166000908152600b60209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff168352600181018054919284019161085f90614987565b80601f016020809104026020016040519081016040528092919081815260200182805461088b90614987565b80156108d85780601f106108ad576101008083540402835291602001916108d8565b820191906000526020600020905b8154815290600101906020018083116108bb57829003601f168201915b5050505050815250509050919050565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c081019190915261047e82612c53565b610934612bae565b60005b63ffffffff811682111561069957600083838363ffffffff1681811061095f5761095f6148d4565b90506020020160208101906109749190614333565b63ffffffff81166000908152600b6020526040812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681559192506109bf6001830182613e23565b505060405163ffffffff8216907fa59268ca81d40429e65ccea5385b59cf2d3fc6519371dee92f8eb1dae5107a7a90600090a2506109fc816149da565b9050610937565b610a0b612bae565b63ffffffff8088166000908152600d60205260408120805490926401000000009091041690819003610a71576040517f2b62be9b00000000000000000000000000000000000000000000000000000000815263ffffffff8a166004820152602401610613565b610ad8888888886040518060a001604052808f63ffffffff16815260200187610a99906149da565b63ffffffff811682528b15156020830152895460ff6a01000000000000000000009091048116151560408401528b166060909201919091529650612f1e565b505050505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b82811015610d80576000848483818110610b1d57610b1d6148d4565b602090810292909201356000818152600c90935260409092206001810154929350919050610b7a576040517fd82f6adb00000000000000000000000000000000000000000000000000000000815260048101839052602401610613565b6000610b8882600501612c31565b1115610bdd57610b9b6005820184612c3b565b6040517f60a6d89800000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260248101839052604401610613565b805468010000000000000000900463ffffffff1615610c455780546040517f60b9df730000000000000000000000000000000000000000000000000000000081526801000000000000000090910463ffffffff16600482015260248101839052604401610613565b83158015610c7f5750805463ffffffff166000908152600b602052604090205473ffffffffffffffffffffffffffffffffffffffff163314155b15610cb8576040517f9473075d000000000000000000000000000000000000000000000000000000008152336004820152602401610613565b6001810154610cc990600790612c47565b506002810154610cdb90600990612c47565b506000828152600c6020526040812080547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001681556001810182905560028101829055600381018290559060058201818181610d378282613e5d565b5050505050507f5254e609a97bab37b7cc79fe128f85c097bd6015c6e1624ae0ba392eb975320582604051610d6e91815260200190565b60405180910390a15050600101610b01565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b82811015610d80576000848483818110610dc057610dc06148d4565b9050602002810190610dd291906149fd565b610ddb90614a3b565b6040808201516000908152600c6020908152828220805463ffffffff168352600b82528383208451808601909552805473ffffffffffffffffffffffffffffffffffffffff1685526001810180549697509195939493909284019190610e4090614987565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6c90614987565b8015610eb95780601f10610e8e57610100808354040283529160200191610eb9565b820191906000526020600020905b815481529060010190602001808311610e9c57829003601f168201915b505050919092525050506001830154909150610f095782604001516040517fd82f6adb00000000000000000000000000000000000000000000000000000000815260040161061391815260200190565b84158015610f2e5750805173ffffffffffffffffffffffffffffffffffffffff163314155b15610f67576040517f9473075d000000000000000000000000000000000000000000000000000000008152336004820152602401610613565b6020830151610fa2576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600182015460208401518114611023576020840151610fc390600790612b93565b15610ffa576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151600184015561100f600782612c47565b50602084015161102190600790613735565b505b60608401516110665783606001516040517f37d8976500000000000000000000000000000000000000000000000000000000815260040161061391815260200190565b608084015180516000036110a857806040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016106139190614b18565b835460009085906004906110c990640100000000900463ffffffff166149da565b91906101000a81548163ffffffff021916908363ffffffff1602179055905060005b82518110156111ae57611121838281518110611109576111096148d4565b60200260200101516003612b9390919063ffffffff16565b61115957826040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016106139190614b18565b6111a583828151811061116e5761116e6148d4565b60200260200101518760040160008563ffffffff1663ffffffff16815260200190815260200160002061373590919063ffffffff16565b506001016110eb565b50845468010000000000000000900463ffffffff16801561130f5763ffffffff8082166000908152600d60209081526040808320805464010000000090049094168352600190930181528282206002018054845181840281018401909552808552929392909183018282801561124357602002820191906000526020600020905b81548152602001906001019080831161122f575b5050505050905060005b815181101561130c576112a282828151811061126b5761126b6148d4565b60200260200101518960040160008763ffffffff1663ffffffff168152602001908152602001600020612b9390919063ffffffff16565b611304578181815181106112b8576112b86148d4565b6020026020010151836040517f03dcd86200000000000000000000000000000000000000000000000000000000815260040161061392919091825263ffffffff16602082015260400190565b60010161124d565b50505b600061131d87600501613741565b905060005b81518163ffffffff161015611463576000828263ffffffff168151811061134b5761134b6148d4565b60209081029190910181015163ffffffff8082166000908152600d845260408082208054640100000000900490931682526001909201845281812060020180548351818702810187019094528084529395509093919290918301828280156113d257602002820191906000526020600020905b8154815260200190600101908083116113be575b5050505050905060005b815181101561144f576114318282815181106113fa576113fa6148d4565b60200260200101518c60040160008a63ffffffff1663ffffffff168152602001908152602001600020612b9390919063ffffffff16565b611447578181815181106112b8576112b86148d4565b6001016113dc565b5050508061145c906149da565b9050611322565b50875187547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff90911690811788556040808a015160028a0181905560608b015160038b01556020808c01518351928352908201527f4b5b465e22eea0c3d40c30e936643245b80d19b2dcf75788c0699fe8d8db645b910160405180910390a25050505050505050806001019050610da4565b611503612bae565b60005b81811015610699576000838383818110611522576115226148d4565b90506020028101906115349190614b5c565b61153d90614b90565b805190915073ffffffffffffffffffffffffffffffffffffffff1661158e576040517feeacd93900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e54604080518082018252835173ffffffffffffffffffffffffffffffffffffffff908116825260208086015181840190815263ffffffff9095166000818152600b909252939020825181547fffffffffffffffffffffffff0000000000000000000000000000000000000000169216919091178155925191929091600182019061161a9082614c4a565b5050600e80549091506000906116359063ffffffff166149da565b91906101000a81548163ffffffff021916908363ffffffff160217905550816000015173ffffffffffffffffffffffffffffffffffffffff168163ffffffff167f78e94ca80be2c30abc061b99e7eb8583b1254781734b1e3ce339abb57da2fe8e84602001516040516116a891906140be565b60405180910390a35050600101611506565b63ffffffff8083166000908152600d6020908152604080832080546401000000009004909416808452600190940182528083208584526003019091528120805460609384939092909161170c90614987565b80601f016020809104026020016040519081016040528092919081815260200182805461173890614987565b80156117855780601f1061175a57610100808354040283529160200191611785565b820191906000526020600020905b81548152906001019060200180831161176857829003601f168201915b5050506000888152600260208190526040909120015492935060609262010000900473ffffffffffffffffffffffffffffffffffffffff16159150611898905057600086815260026020819052604091829020015490517f8318ed5d00000000000000000000000000000000000000000000000000000000815263ffffffff891660048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690638318ed5d90602401600060405180830381865afa15801561184f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526118959190810190614d64565b90505b9093509150505b9250929050565b604080516101008101825260008082526020820181905291810182905260608082018390526080820183905260a082019290925260c0810182905260e081019190915260408051610100810182526000848152600c6020908152838220805463ffffffff8082168652640100000000820481168487018190526801000000000000000090920416858701526001820154606086015260028201546080860152600382015460a0860152835260040190529190912060c082019061196890613741565b815260200161198b600c6000868152602001908152602001600020600501613741565b905292915050565b61199b612bae565b60005b818110156106995760008383838181106119ba576119ba6148d4565b9050602002013590506119d7816003612b9390919063ffffffff16565b611a10576040517fe181733f00000000000000000000000000000000000000000000000000000000815260048101829052602401610613565b611a1b600582613735565b611a54576040517ff7d7a29400000000000000000000000000000000000000000000000000000000815260048101829052602401610613565b60405181907fdcea1b78b6ddc31592a94607d537543fcaafda6cc52d6d5cc7bbfca1422baf2190600090a25060010161199e565b600e5460609063ffffffff166000611aa1600183614932565b63ffffffff1667ffffffffffffffff811115611abf57611abf613e90565b604051908082528060200260200182016040528015611b0557816020015b604080518082019091526000815260606020820152815260200190600190039081611add5790505b509050600060015b8363ffffffff168163ffffffff161015611c555763ffffffff81166000908152600b602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611c4d5763ffffffff81166000908152600b60209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff1683526001810180549192840191611ba190614987565b80601f0160208091040260200160405190810160405280929190818152602001828054611bcd90614987565b8015611c1a5780601f10611bef57610100808354040283529160200191611c1a565b820191906000526020600020905b815481529060010190602001808311611bfd57829003601f168201915b505050505081525050838381518110611c3557611c356148d4565b602002602001018190525081611c4a9061494f565b91505b600101611b0d565b50600e546107e49060019063ffffffff16614932565b611c73612bae565b60005b81811015610699576000838383818110611c9257611c926148d4565b9050602002810190611ca491906149fd565b611cad90614de1565b90506000611cc382600001518360200151610450565b9050611cd0600382613735565b611d09576040517febf5255100000000000000000000000000000000000000000000000000000000815260048101829052602401610613565b611d13818361374e565b5050600101611c76565b60015473ffffffffffffffffffffffffffffffffffffffff163314611d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610613565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b82811015610d80576000848483818110611e5457611e546148d4565b9050602002810190611e6691906149fd565b611e6f90614a3b565b805163ffffffff166000908152600b602090815260408083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff168252600181018054959650939491939092840191611ec590614987565b80601f0160208091040260200160405190810160405280929190818152602001828054611ef190614987565b8015611f3e5780601f10611f1357610100808354040283529160200191611f3e565b820191906000526020600020905b815481529060010190602001808311611f2157829003601f168201915b50505091909252505081519192505073ffffffffffffffffffffffffffffffffffffffff16611fa45781516040517fadd9ae1e00000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610613565b83158015611fc95750805173ffffffffffffffffffffffffffffffffffffffff163314155b15612002576040517f9473075d000000000000000000000000000000000000000000000000000000008152336004820152602401610613565b6040808301516000908152600c602052206001810154156120575782604001516040517f5461848300000000000000000000000000000000000000000000000000000000815260040161061391815260200190565b604083015161209a5782604001516040517f64e2ee9200000000000000000000000000000000000000000000000000000000815260040161061391815260200190565b602083015115806120b7575060208301516120b790600790612b93565b156120ee576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608301516121315782606001516040517f37d8976500000000000000000000000000000000000000000000000000000000815260040161061391815260200190565b6080830151805160000361217357806040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016106139190614b18565b8154829060049061219190640100000000900463ffffffff166149da565b82546101009290920a63ffffffff818102199093169183160217909155825464010000000090041660005b8251811015612267576121da838281518110611109576111096148d4565b61221257826040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016106139190614b18565b61225e838281518110612227576122276148d4565b60200260200101518560040160008563ffffffff1663ffffffff16815260200190815260200160002061373590919063ffffffff16565b506001016121bc565b5060608501516003840155845183547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff918216178455604086015160028501556020860151600185018190556122c7916007919061373516565b5060408501516122d990600990613735565b50845160408087015160208089015183519283529082015263ffffffff909216917f74becb12a5e8fd0e98077d02dfba8f647c9670c9df177e42c2418cf17a636f05910160405180910390a25050505050806001019050611e38565b828114612378576040517fab8b67c60000000000000000000000000000000000000000000000000000000081526004810184905260248101829052604401610613565b6000805473ffffffffffffffffffffffffffffffffffffffff16905b8481101561266d5760008686838181106123b0576123b06148d4565b90506020020160208101906123c59190614333565b63ffffffff81166000908152600b6020526040902080549192509073ffffffffffffffffffffffffffffffffffffffff16612434576040517fadd9ae1e00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610613565b6000868685818110612448576124486148d4565b905060200281019061245a9190614b5c565b61246390614b90565b805190915073ffffffffffffffffffffffffffffffffffffffff166124b4576040517feeacd93900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815473ffffffffffffffffffffffffffffffffffffffff1633148015906124f157503373ffffffffffffffffffffffffffffffffffffffff861614155b1561252a576040517f9473075d000000000000000000000000000000000000000000000000000000008152336004820152602401610613565b8051825473ffffffffffffffffffffffffffffffffffffffff90811691161415806125a6575060208082015160405161256392016140be565b604051602081830303815290604052805190602001208260010160405160200161258d9190614e87565b6040516020818303038152906040528051906020012014155b1561265f57805182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602081015160018301906126009082614c4a565b50806000015173ffffffffffffffffffffffffffffffffffffffff168363ffffffff167f86f41145bde5dd7f523305452e4aad3685508c181432ec733d5f345009358a28836020015160405161265691906140be565b60405180910390a35b505050806001019050612394565b505050505050565b6126b66040805160e0810182526000808252606060208301819052928201839052909182019081526020016000815260006020820181905260409091015290565b6040805160e081018252838152600084815260026020908152929020805491928301916126e290614987565b80601f016020809104026020016040519081016040528092919081815260200182805461270e90614987565b801561275b5780601f106127305761010080835404028352916020019161275b565b820191906000526020600020905b81548152906001019060200180831161273e57829003601f168201915b5050505050815260200160026000858152602001908152602001600020600101805461278690614987565b80601f01602080910402602001604051908101604052809291908181526020018280546127b290614987565b80156127ff5780601f106127d4576101008083540402835291602001916127ff565b820191906000526020600020905b8154815290600101906020018083116127e257829003601f168201915b50505091835250506000848152600260208181526040909220015491019060ff1660038111156128315761283161462f565b815260008481526002602081815260409092200154910190610100900460ff1660018111156128625761286261462f565b81526000848152600260208181526040928390209091015462010000900473ffffffffffffffffffffffffffffffffffffffff1690830152016128a6600585612b93565b1515905292915050565b6128b8612bae565b600e805460009164010000000090910463ffffffff169060046128da836149da565b82546101009290920a63ffffffff81810219909316918316021790915581166000818152600d602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001684179055815160a08101835292835260019083015286151590820152841515606082015260ff84166080820152909150612970908990899089908990612f1e565b5050505050505050565b606060006129886003613741565b90506000815167ffffffffffffffff8111156129a6576129a6613e90565b604051908082528060200260200182016040528015612a1857816020015b612a056040805160e0810182526000808252606060208301819052928201839052909182019081526020016000815260006020820181905260409091015290565b8152602001906001900390816129c45790505b50905060005b82518110156107f457612a49838281518110612a3c57612a3c6148d4565b6020026020010151612675565b828281518110612a5b57612a5b6148d4565b6020908102919091010152600101612a1e565b60606000612a7c6009613741565b90506000815167ffffffffffffffff811115612a9a57612a9a613e90565b604051908082528060200260200182016040528015612b2957816020015b60408051610100810182526000808252602080830182905292820181905260608083018290526080830182905260a083019190915260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181612ab85790505b50905060005b82518110156107f457612b5a838281518110612b4d57612b4d6148d4565b60200260200101516118a6565b828281518110612b6c57612b6c6148d4565b6020908102919091010152600101612b2f565b612b87612bae565b612b9081613936565b50565b600081815260018301602052604081205415155b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314612c2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610613565b565b600061047e825490565b6000612ba78383613a2b565b6000612ba78383613a55565b6040805160e0810182526000808252602080830182905282840182905260608084018390526080840183905260a0840181905260c084015263ffffffff8581168352600d8252848320805464010000000090049091168084526001909101825284832060028101805487518186028101860190985280885295969295919493909190830182828015612d0457602002820191906000526020600020905b815481526020019060010190808311612cf0575b505050505090506000815167ffffffffffffffff811115612d2757612d27613e90565b604051908082528060200260200182016040528015612d6d57816020015b604080518082019091526000815260606020820152815260200190600190039081612d455790505b50905060005b8151811015612e85576040518060400160405280848381518110612d9957612d996148d4565b60200260200101518152602001856003016000868581518110612dbe57612dbe6148d4565b602002602001015181526020019081526020016000208054612ddf90614987565b80601f0160208091040260200160405190810160405280929190818152602001828054612e0b90614987565b8015612e585780601f10612e2d57610100808354040283529160200191612e58565b820191906000526020600020905b815481529060010190602001808311612e3b57829003601f168201915b5050505050815250828281518110612e7257612e726148d4565b6020908102919091010152600101612d73565b506040805160e08101825263ffffffff8089166000818152600d6020818152868320548086168752948b168187015260ff680100000000000000008604811697870197909752690100000000000000000085048716151560608701529290915290526a010000000000000000000090049091161515608082015260a08101612f0c85613741565b81526020019190915295945050505050565b805163ffffffff9081166000908152600d602090815260408083208286015190941683526001909301905220608082015160ff161580612f70575060808201518590612f6b906001614f35565b60ff16115b15612fb95760808201516040517f25b4d61800000000000000000000000000000000000000000000000000000000815260ff909116600482015260248101869052604401610613565b6001826020015163ffffffff1611156130a157815163ffffffff166000908152600d602090815260408220908401516001918201918391612ffa9190614932565b63ffffffff1663ffffffff168152602001908152602001600020905060005b61302282612c31565b81101561309e57613051846000015163ffffffff16600c600061059c8587600001612c3b90919063ffffffff16565b50600c60006130608484612c3b565b8152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff169055600101613019565b50505b60005b858110156132db576130d18787838181106130c1576130c16148d4565b8592602090910201359050613735565b6131325782518787838181106130e9576130e96148d4565b6040517f636e405700000000000000000000000000000000000000000000000000000000815263ffffffff90941660048501526020029190910135602483015250604401610613565b82606001511561328957825163ffffffff16600c600089898581811061315a5761315a6148d4565b602090810292909201358352508101919091526040016000205468010000000000000000900463ffffffff16148015906131d45750600c60008888848181106131a5576131a56148d4565b602090810292909201358352508101919091526040016000205468010000000000000000900463ffffffff1615155b156132365782518787838181106131ed576131ed6148d4565b6040517f60b9df7300000000000000000000000000000000000000000000000000000000815263ffffffff90941660048501526020029190910135602483015250604401610613565b8251600c600089898581811061324e5761324e6148d4565b90506020020135815260200190815260200160002060000160086101000a81548163ffffffff021916908363ffffffff1602179055506132d3565b82516132d19063ffffffff16600c60008a8a868181106132ab576132ab6148d4565b90506020020135815260200190815260200160002060050161373590919063ffffffff16565b505b6001016130a4565b5060005b838110156136e957368585838181106132fa576132fa6148d4565b905060200281019061330c9190614b5c565b905061331a60038235612b93565b613353576040517fe181733f00000000000000000000000000000000000000000000000000000000815281356004820152602401610613565b61335f60058235612b93565b15613399576040517ff7d7a29400000000000000000000000000000000000000000000000000000000815281356004820152602401610613565b80356000908152600384016020526040812080546133b690614987565b905011156134025783516040517f3927d08000000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015281356024820152604401610613565b60005b8781101561350c576134a98235600c60008c8c86818110613428576134286148d4565b9050602002013581526020019081526020016000206004016000600c60008e8e88818110613458576134586148d4565b90506020020135815260200190815260200160002060000160049054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001908152602001600020612b9390919063ffffffff16565b613504578888828181106134bf576134bf6148d4565b6040517fa7e792500000000000000000000000000000000000000000000000000000000081526020909102929092013560048301525082356024820152604401610613565b600101613405565b506002830180546001810182556000918252602091829020833591015561353590820182614f4e565b82356000908152600386016020526040902091613553919083614fb3565b50604080850151855163ffffffff9081166000908152600d602090815284822080549415156901000000000000000000027fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff90951694909417909355606088015188518316825284822080549115156a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff9092169190911790556080880151885183168252848220805460ff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff909216919091179055828801805189518416835294909120805494909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff909416939093179055855191516136e092918435908c908c906136a690880188614f4e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613b4892505050565b506001016132df565b50815160208084015160405163ffffffff91821681529216917ff264aae70bf6a9d90e68e0f9b393f4e7fbea67b063b0f336e0b36c1581703651910160405180910390a2505050505050565b6000612ba78383613c29565b60606000612ba783613c78565b608081015173ffffffffffffffffffffffffffffffffffffffff16156137f05761379c81608001517f78bea72100000000000000000000000000000000000000000000000000000000613cd4565b6137f05760808101516040517fabb5e3fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610613565b60008281526002602052604090208151829190819061380f9082614c4a565b50602082015160018201906138249082614c4a565b5060408201516002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660018360038111156138665761386661462f565b021790555060608201516002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101008360018111156138ad576138ad61462f565b0217905550608091909101516002909101805473ffffffffffffffffffffffffffffffffffffffff90921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff90921691909117905560405182907f04f0a9bcf3f3a3b42a4d7ca081119755f82ebe43e0d30c8f7292c4fe0dc4a2ae90600090a25050565b3373ffffffffffffffffffffffffffffffffffffffff8216036139b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610613565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000826000018281548110613a4257613a426148d4565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613b3e576000613a796001836150ce565b8554909150600090613a8d906001906150ce565b9050818114613af2576000866000018281548110613aad57613aad6148d4565b9060005260206000200154905080876000018481548110613ad057613ad06148d4565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613b0357613b036150e1565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061047e565b600091505061047e565b6000848152600260208190526040909120015462010000900473ffffffffffffffffffffffffffffffffffffffff161561266d57600084815260026020819052604091829020015490517ffba64a7c0000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff169063fba64a7c90613bef908690869086908b908d90600401615110565b600060405180830381600087803b158015613c0957600080fd5b505af1158015613c1d573d6000803e3d6000fd5b50505050505050505050565b6000818152600183016020526040812054613c705750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561047e565b50600061047e565b606081600001805480602002602001604051908101604052809291908181526020018280548015613cc857602002820191906000526020600020905b815481526020019060010190808311613cb4575b50505050509050919050565b6000613cdf83613cf0565b8015612ba75750612ba78383613d54565b6000613d1c827f01ffc9a700000000000000000000000000000000000000000000000000000000613d54565b801561047e5750613d4d827fffffffff00000000000000000000000000000000000000000000000000000000613d54565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015613e0c575060208210155b8015613e185750600081115b979650505050505050565b508054613e2f90614987565b6000825580601f10613e3f575050565b601f016020900490600052602060002090810190612b909190613e77565b5080546000825590600052602060002090810190612b9091905b5b80821115613e8c5760008155600101613e78565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613ee257613ee2613e90565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613f2f57613f2f613e90565b604052919050565b600067ffffffffffffffff821115613f5157613f51613e90565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613f8e57600080fd5b8135613fa1613f9c82613f37565b613ee8565b818152846020838601011115613fb657600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215613fe657600080fd5b823567ffffffffffffffff80821115613ffe57600080fd5b61400a86838701613f7d565b9350602085013591508082111561402057600080fd5b5061402d85828601613f7d565b9150509250929050565b60006020828403121561404957600080fd5b5035919050565b60005b8381101561406b578181015183820152602001614053565b50506000910152565b6000815180845261408c816020860160208601614050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612ba76020830184614074565b60008083601f8401126140e357600080fd5b50813567ffffffffffffffff8111156140fb57600080fd5b6020830191508360208260051b850101111561189f57600080fd5b6000806020838503121561412957600080fd5b823567ffffffffffffffff81111561414057600080fd5b61414c858286016140d1565b90969095509350505050565b60008151808452602080850194506020840160005b838110156141895781518752958201959082019060010161416d565b509495945050505050565b600082825180855260208086019550808260051b84010181860160005b84811015614211578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001895281518051845284015160408585018190526141fd81860183614074565b9a86019a94505050908301906001016141b1565b5090979650505050505050565b600063ffffffff8083511684528060208401511660208501525060ff604083015116604084015260608201511515606084015260808201511515608084015260a082015160e060a085015261427660e0850182614158565b905060c083015184820360c086015261428f8282614194565b95945050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561430d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526142fb85835161421e565b945092850192908501906001016142c1565b5092979650505050505050565b803563ffffffff8116811461432e57600080fd5b919050565b60006020828403121561434557600080fd5b612ba78261431a565b73ffffffffffffffffffffffffffffffffffffffff815116825260006020820151604060208501526143836040850182614074565b949350505050565b602081526000612ba7602083018461434e565b602081526000612ba7602083018461421e565b8035801515811461432e57600080fd5b803560ff8116811461432e57600080fd5b600080600080600080600060a0888a0312156143ed57600080fd5b6143f68861431a565b9650602088013567ffffffffffffffff8082111561441357600080fd5b61441f8b838c016140d1565b909850965060408a013591508082111561443857600080fd5b506144458a828b016140d1565b90955093506144589050606089016143b1565b9150614466608089016143c1565b905092959891949750929550565b6000806040838503121561448757600080fd5b6144908361431a565b946020939093013593505050565b6040815260006144b16040830185614074565b828103602084015261428f8185614074565b600061010063ffffffff80845116855280602085015116602086015280604085015116604086015250606083015160608501526080830151608085015260a083015160a085015260c08301518160c086015261452182860182614158565b91505060e083015184820360e086015261428f8282614158565b602081526000612ba760208301846144c3565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561430d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526145b185835161434e565b94509285019290850190600101614577565b600080600080604085870312156145d957600080fd5b843567ffffffffffffffff808211156145f157600080fd5b6145fd888389016140d1565b9096509450602087013591508082111561461657600080fd5b50614623878288016140d1565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b805182526000602082015160e0602085015261467d60e0850182614074565b9050604083015184820360408601526146968282614074565b9150506060830151600481106146ae576146ae61462f565b60608501526080830151600281106146c8576146c861462f565b8060808601525060a08301516146f660a086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060c083015161470a60c086018215159052565b509392505050565b602081526000612ba7602083018461465e565b600080600080600080600060a0888a03121561474057600080fd5b873567ffffffffffffffff8082111561475857600080fd5b6147648b838c016140d1565b909950975060208a013591508082111561477d57600080fd5b5061478a8a828b016140d1565b909650945061479d9050604089016143b1565b9250614458606089016143b1565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561430d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261480e85835161465e565b945092850192908501906001016147d4565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561430d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526148838583516144c3565b94509285019290850190600101614849565b803573ffffffffffffffffffffffffffffffffffffffff8116811461432e57600080fd5b6000602082840312156148cb57600080fd5b612ba782614895565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff8281168282160390808211156107f4576107f4614903565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361498057614980614903565b5060010190565b600181811c9082168061499b57607f821691505b6020821081036149d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600063ffffffff8083168181036149f3576149f3614903565b6001019392505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112614a3157600080fd5b9190910192915050565b600060a08236031215614a4d57600080fd5b614a55613ebf565b614a5e8361431a565b8152602080840135818301526040840135604083015260608401356060830152608084013567ffffffffffffffff80821115614a9957600080fd5b9085019036601f830112614aac57600080fd5b813581811115614abe57614abe613e90565b8060051b9150614acf848301613ee8565b8181529183018401918481019036841115614ae957600080fd5b938501935b83851015614b0757843582529385019390850190614aee565b608087015250939695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015614b5057835183529284019291840191600101614b34565b50909695505050505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112614a3157600080fd5b600060408236031215614ba257600080fd5b6040516040810167ffffffffffffffff8282108183111715614bc657614bc6613e90565b81604052614bd385614895565b83526020850135915080821115614be957600080fd5b50614bf636828601613f7d565b60208301525092915050565b601f821115610699576000816000526020600020601f850160051c81016020861015614c2b5750805b601f850160051c820191505b8181101561266d57828155600101614c37565b815167ffffffffffffffff811115614c6457614c64613e90565b614c7881614c728454614987565b84614c02565b602080601f831160018114614ccb5760008415614c955750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561266d565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015614d1857888601518255948401946001909101908401614cf9565b5085821015614d5457878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215614d7657600080fd5b815167ffffffffffffffff811115614d8d57600080fd5b8201601f81018413614d9e57600080fd5b8051614dac613f9c82613f37565b818152856020838501011115614dc157600080fd5b61428f826020830160208601614050565b80356002811061432e57600080fd5b600060a08236031215614df357600080fd5b614dfb613ebf565b823567ffffffffffffffff80821115614e1357600080fd5b614e1f36838701613f7d565b83526020850135915080821115614e3557600080fd5b50614e4236828601613f7d565b602083015250604083013560048110614e5a57600080fd5b6040820152614e6b60608401614dd2565b6060820152614e7c60808401614895565b608082015292915050565b6000602080835260008454614e9b81614987565b8060208701526040600180841660008114614ebd5760018114614ef757614f27565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00851660408a0152604084151560051b8a01019550614f27565b89600052602060002060005b85811015614f1e5781548b8201860152908301908801614f03565b8a016040019650505b509398975050505050505050565b60ff818116838216019081111561047e5761047e614903565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614f8357600080fd5b83018035915067ffffffffffffffff821115614f9e57600080fd5b60200191503681900382131561189f57600080fd5b67ffffffffffffffff831115614fcb57614fcb613e90565b614fdf83614fd98354614987565b83614c02565b6000601f8411600181146150315760008515614ffb5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556150c7565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156150805786850135825560209485019460019092019101615060565b50868210156150bb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8181038181111561047e5761047e614903565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6080815284608082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561514957600080fd5b8560051b808860a0850137820182810360a0908101602085015261516f90820187614074565b91505063ffffffff8085166040840152808416606084015250969550505050505056fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AccessForbidden\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityIsDeprecated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"CapabilityRequiredByDON\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"DONDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"DuplicateDONCapability\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"DuplicateDONNode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"proposedConfigurationContract\",\"type\":\"address\"}],\"name\":\"InvalidCapabilityConfigurationContractInterface\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nodeCount\",\"type\":\"uint256\"}],\"name\":\"InvalidFaultTolerance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"name\":\"InvalidNodeCapabilities\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encryptionPublicKey\",\"type\":\"bytes32\"}],\"name\":\"InvalidNodeEncryptionPublicKey\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidNodeOperatorAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"InvalidNodeP2PId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidNodeSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"lengthOne\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lengthTwo\",\"type\":\"uint256\"}],\"name\":\"LengthMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"NodeAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"NodeDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"NodeDoesNotSupportCapability\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"}],\"name\":\"NodeOperatorDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"NodePartOfCapabilitiesDON\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"NodePartOfWorkflowDON\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityDeprecated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"}],\"name\":\"NodeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NodeOperatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"}],\"name\":\"NodeOperatorRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NodeOperatorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"NodeRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"}],\"name\":\"NodeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"labelledName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityType\",\"name\":\"capabilityType\",\"type\":\"uint8\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"}],\"internalType\":\"structCapabilitiesRegistry.Capability[]\",\"name\":\"capabilities\",\"type\":\"tuple[]\"}],\"name\":\"addCapabilities\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"nodes\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"acceptsWorkflows\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"}],\"name\":\"addDON\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilitiesRegistry.NodeOperator[]\",\"name\":\"nodeOperators\",\"type\":\"tuple[]\"}],\"name\":\"addNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"encryptionPublicKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"internalType\":\"structCapabilitiesRegistry.NodeParams[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"}],\"name\":\"addNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"name\":\"deprecateCapabilities\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCapabilities\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"hashedId\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"labelledName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityType\",\"name\":\"capabilityType\",\"type\":\"uint8\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isDeprecated\",\"type\":\"bool\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedId\",\"type\":\"bytes32\"}],\"name\":\"getCapability\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"hashedId\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"labelledName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityType\",\"name\":\"capabilityType\",\"type\":\"uint8\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isDeprecated\",\"type\":\"bool\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"getCapabilityConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"getDON\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"acceptsWorkflows\",\"type\":\"bool\"},{\"internalType\":\"bytes32[]\",\"name\":\"nodeP2PIds\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"}],\"internalType\":\"structCapabilitiesRegistry.DONInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDONs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"acceptsWorkflows\",\"type\":\"bool\"},{\"internalType\":\"bytes32[]\",\"name\":\"nodeP2PIds\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"}],\"internalType\":\"structCapabilitiesRegistry.DONInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"labelledName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"name\":\"getHashedCapabilityId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextDONId\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"getNode\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"workflowDONId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"encryptionPublicKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"capabilitiesDONIds\",\"type\":\"uint256[]\"}],\"internalType\":\"structINodeInfoProvider.NodeInfo\",\"name\":\"nodeInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"}],\"name\":\"getNodeOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilitiesRegistry.NodeOperator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodeOperators\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilitiesRegistry.NodeOperator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodes\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"workflowDONId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"encryptionPublicKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"capabilitiesDONIds\",\"type\":\"uint256[]\"}],\"internalType\":\"structINodeInfoProvider.NodeInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"p2pIds\",\"type\":\"bytes32[]\"}],\"name\":\"getNodesByP2PIds\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"workflowDONId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"encryptionPublicKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"capabilitiesDONIds\",\"type\":\"uint256[]\"}],\"internalType\":\"structINodeInfoProvider.NodeInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"isCapabilityDeprecated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"donIds\",\"type\":\"uint32[]\"}],\"name\":\"removeDONs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"nodeOperatorIds\",\"type\":\"uint32[]\"}],\"name\":\"removeNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"removedNodeP2PIds\",\"type\":\"bytes32[]\"}],\"name\":\"removeNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[]\",\"name\":\"nodes\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"}],\"name\":\"updateDON\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"nodeOperatorIds\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilitiesRegistry.NodeOperator[]\",\"name\":\"nodeOperators\",\"type\":\"tuple[]\"}],\"name\":\"updateNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"encryptionPublicKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"internalType\":\"structCapabilitiesRegistry.NodeParams[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"}],\"name\":\"updateNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x6080604052600e80546001600160401b0319166401000000011790553480156200002857600080fd5b503380600081620000805760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000b357620000b381620000bc565b50505062000167565b336001600160a01b03821603620001165760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000077565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61536d80620001776000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806350c946fe116100f95780638da5cb5b11610097578063ddbe4f8211610071578063ddbe4f821461044d578063e29581aa14610462578063f2fde38b1461046a578063fcdc8efe1461047d57600080fd5b80638da5cb5b146103f25780639cb7c5f41461041a578063d8bc7b681461043a57600080fd5b8063715f5295116100d3578063715f5295146103b157806379ba5097146103c457806384f5ed8a146103cc57806386fa4246146103df57600080fd5b806350c946fe146103695780635d83d9671461038957806366acaa331461039c57600080fd5b806323537405116101665780632c01a1e8116101405780632c01a1e81461030f578063358039f414610322578063398f3773146103355780633f2a13c91461034857600080fd5b806323537405146102c9578063275459f2146102e95780632a852933146102fc57600080fd5b8063181f5a77116101a2578063181f5a77146102365780631d05394c1461027f578063214502431461029457806322bdbcbc146102a957600080fd5b806305a51966146101c95780630fe5800a146101f25780631257001114610213575b600080fd5b6101dc6101d73660046140ab565b6104a3565b6040516101e991906141aa565b60405180910390f35b61020561020036600461436f565b61062c565b6040519081526020016101e9565b6102266102213660046143d3565b61065f565b60405190151581526020016101e9565b6102726040518060400160405280601a81526020017f4361706162696c6974696573526567697374727920312e302e3100000000000081525081565b6040516101e9919061445a565b61029261028d3660046140ab565b61066c565b005b61029c610874565b6040516101e99190614568565b6102bc6102b73660046145f6565b6109d1565b6040516101e9919061464e565b6102dc6102d73660046145f6565b610abe565b6040516101e99190614661565b6102926102f73660046140ab565b610b02565b61029261030a366004614695565b610bd9565b61029261031d3660046140ab565b610cb9565b6102926103303660046140ab565b610f5c565b6102926103433660046140ab565b6116d1565b61035b610356366004614737565b611890565b6040516101e9929190614761565b61037c6103773660046143d3565b611a7c565b6040516101e99190614786565b6102926103973660046140ab565b611b69565b6103a4611c5e565b6040516101e99190614799565b6102926103bf3660046140ab565b611e41565b610292611ef3565b6102926103da3660046140ab565b611ff0565b6102926103ed36600461480e565b61250b565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e9565b61042d6104283660046143d3565b61284b565b6040516101e99190614955565b610292610448366004614968565b612a86565b610455612b50565b6040516101e991906149ee565b6101dc612c44565b610292610478366004614a87565b612d55565b600e54640100000000900463ffffffff1660405163ffffffff90911681526020016101e9565b606060008267ffffffffffffffff8111156104c0576104c061422c565b60405190808252806020026020018201604052801561054f57816020015b60408051610100810182526000808252602080830182905292820181905260608083018290526080830182905260a083019190915260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816104de5790505b50905060005b838110156106225761057e85858381811061057257610572614aa2565b90506020020135611a7c565b82828151811061059057610590614aa2565b602002602001018190525060008019168282815181106105b2576105b2614aa2565b6020026020010151608001510361061a578484828181106105d5576105d5614aa2565b905060200201356040517fd82f6adb00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60405180910390fd5b600101610555565b5090505b92915050565b60008282604051602001610641929190614761565b60405160208183030381529060405280519060200120905092915050565b6000610626600583612d69565b610674612d84565b60005b8181101561086f57600083838381811061069357610693614aa2565b90506020020160208101906106a891906145f6565b63ffffffff8181166000908152600d60209081526040808320805464010000000081049095168085526001820190935290832094955093909290916a010000000000000000000090910460ff16905b61070083612e07565b8110156107a057811561075657600c600061071b8584612e11565b8152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff169055610798565b6107968663ffffffff16600c60006107778588612e1190919063ffffffff16565b8152602001908152602001600020600501612e1d90919063ffffffff16565b505b6001016106f7565b508354640100000000900463ffffffff166000036107f2576040517f2b62be9b00000000000000000000000000000000000000000000000000000000815263ffffffff86166004820152602401610611565b63ffffffff85166000818152600d6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffff0000000000000000000000169055519182527ff264aae70bf6a9d90e68e0f9b393f4e7fbea67b063b0f336e0b36c1581703651910160405180910390a25050505050806001019050610677565b505050565b600e54606090640100000000900463ffffffff166000610895600183614b00565b63ffffffff1667ffffffffffffffff8111156108b3576108b361422c565b60405190808252806020026020018201604052801561093a57816020015b6040805160e081018252600080825260208083018290529282018190526060808301829052608083019190915260a0820181905260c082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816108d15790505b509050600060015b8363ffffffff168163ffffffff1610156109ae5763ffffffff8082166000908152600d602052604090205416156109a65761097c81612e29565b83838151811061098e5761098e614aa2565b6020026020010181905250816109a390614b1d565b91505b600101610942565b506109ba600184614b00565b63ffffffff1681146109ca578082525b5092915050565b60408051808201909152600081526060602082015263ffffffff82166000908152600b60209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff1683526001810180549192840191610a3590614b55565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6190614b55565b8015610aae5780601f10610a8357610100808354040283529160200191610aae565b820191906000526020600020905b815481529060010190602001808311610a9157829003601f168201915b5050505050815250509050919050565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c081019190915261062682612e29565b610b0a612d84565b60005b63ffffffff811682111561086f57600083838363ffffffff16818110610b3557610b35614aa2565b9050602002016020810190610b4a91906145f6565b63ffffffff81166000908152600b6020526040812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155919250610b956001830182613ff9565b505060405163ffffffff8216907fa59268ca81d40429e65ccea5385b59cf2d3fc6519371dee92f8eb1dae5107a7a90600090a250610bd281614ba8565b9050610b0d565b610be1612d84565b63ffffffff8088166000908152600d60205260408120805490926401000000009091041690819003610c47576040517f2b62be9b00000000000000000000000000000000000000000000000000000000815263ffffffff8a166004820152602401610611565b610cae888888886040518060a001604052808f63ffffffff16815260200187610c6f90614ba8565b63ffffffff811682528b15156020830152895460ff6a01000000000000000000009091048116151560408401528b1660609092019190915296506130f4565b505050505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b82811015610f56576000848483818110610cf357610cf3614aa2565b602090810292909201356000818152600c90935260409092206001810154929350919050610d50576040517fd82f6adb00000000000000000000000000000000000000000000000000000000815260048101839052602401610611565b6000610d5e82600501612e07565b1115610db357610d716005820184612e11565b6040517f60a6d89800000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260248101839052604401610611565b805468010000000000000000900463ffffffff1615610e1b5780546040517f60b9df730000000000000000000000000000000000000000000000000000000081526801000000000000000090910463ffffffff16600482015260248101839052604401610611565b83158015610e555750805463ffffffff166000908152600b602052604090205473ffffffffffffffffffffffffffffffffffffffff163314155b15610e8e576040517f9473075d000000000000000000000000000000000000000000000000000000008152336004820152602401610611565b6001810154610e9f90600790612e1d565b506002810154610eb190600990612e1d565b506000828152600c6020526040812080547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001681556001810182905560028101829055600381018290559060058201818181610f0d8282614033565b5050505050507f5254e609a97bab37b7cc79fe128f85c097bd6015c6e1624ae0ba392eb975320582604051610f4491815260200190565b60405180910390a15050600101610cd7565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b82811015610f56576000848483818110610f9657610f96614aa2565b9050602002810190610fa89190614bcb565b610fb190614c09565b6040808201516000908152600c6020908152828220805463ffffffff168352600b82528383208451808601909552805473ffffffffffffffffffffffffffffffffffffffff168552600181018054969750919593949390928401919061101690614b55565b80601f016020809104026020016040519081016040528092919081815260200182805461104290614b55565b801561108f5780601f106110645761010080835404028352916020019161108f565b820191906000526020600020905b81548152906001019060200180831161107257829003601f168201915b5050509190925250505060018301549091506110df5782604001516040517fd82f6adb00000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b841580156111045750805173ffffffffffffffffffffffffffffffffffffffff163314155b1561113d576040517f9473075d000000000000000000000000000000000000000000000000000000008152336004820152602401610611565b6020830151611178576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001820154602084015181146111f957602084015161119990600790612d69565b156111d0576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084015160018401556111e5600782612e1d565b5060208401516111f79060079061390b565b505b606084015161123c5783606001516040517f37d8976500000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6080840151805160000361127e57806040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016106119190614ce6565b8354600090859060049061129f90640100000000900463ffffffff16614ba8565b91906101000a81548163ffffffff021916908363ffffffff1602179055905060005b8251811015611384576112f78382815181106112df576112df614aa2565b60200260200101516003612d6990919063ffffffff16565b61132f57826040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016106119190614ce6565b61137b83828151811061134457611344614aa2565b60200260200101518760040160008563ffffffff1663ffffffff16815260200190815260200160002061390b90919063ffffffff16565b506001016112c1565b50845468010000000000000000900463ffffffff1680156114e55763ffffffff8082166000908152600d60209081526040808320805464010000000090049094168352600190930181528282206002018054845181840281018401909552808552929392909183018282801561141957602002820191906000526020600020905b815481526020019060010190808311611405575b5050505050905060005b81518110156114e25761147882828151811061144157611441614aa2565b60200260200101518960040160008763ffffffff1663ffffffff168152602001908152602001600020612d6990919063ffffffff16565b6114da5781818151811061148e5761148e614aa2565b6020026020010151836040517f03dcd86200000000000000000000000000000000000000000000000000000000815260040161061192919091825263ffffffff16602082015260400190565b600101611423565b50505b60006114f387600501613917565b905060005b81518163ffffffff161015611639576000828263ffffffff168151811061152157611521614aa2565b60209081029190910181015163ffffffff8082166000908152600d845260408082208054640100000000900490931682526001909201845281812060020180548351818702810187019094528084529395509093919290918301828280156115a857602002820191906000526020600020905b815481526020019060010190808311611594575b5050505050905060005b8151811015611625576116078282815181106115d0576115d0614aa2565b60200260200101518c60040160008a63ffffffff1663ffffffff168152602001908152602001600020612d6990919063ffffffff16565b61161d5781818151811061148e5761148e614aa2565b6001016115b2565b5050508061163290614ba8565b90506114f8565b50875187547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff90911690811788556040808a015160028a0181905560608b015160038b01556020808c01518351928352908201527f4b5b465e22eea0c3d40c30e936643245b80d19b2dcf75788c0699fe8d8db645b910160405180910390a25050505050505050806001019050610f7a565b6116d9612d84565b60005b8181101561086f5760008383838181106116f8576116f8614aa2565b905060200281019061170a9190614d2a565b61171390614d5e565b805190915073ffffffffffffffffffffffffffffffffffffffff16611764576040517feeacd93900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e54604080518082018252835173ffffffffffffffffffffffffffffffffffffffff908116825260208086015181840190815263ffffffff9095166000818152600b909252939020825181547fffffffffffffffffffffffff000000000000000000000000000000000000000016921691909117815592519192909160018201906117f09082614e18565b5050600e805490915060009061180b9063ffffffff16614ba8565b91906101000a81548163ffffffff021916908363ffffffff160217905550816000015173ffffffffffffffffffffffffffffffffffffffff168163ffffffff167f78e94ca80be2c30abc061b99e7eb8583b1254781734b1e3ce339abb57da2fe8e846020015160405161187e919061445a565b60405180910390a350506001016116dc565b63ffffffff8083166000908152600d602090815260408083208054640100000000900490941680845260019094018252808320858452600301909152812080546060938493909290916118e290614b55565b80601f016020809104026020016040519081016040528092919081815260200182805461190e90614b55565b801561195b5780601f106119305761010080835404028352916020019161195b565b820191906000526020600020905b81548152906001019060200180831161193e57829003601f168201915b5050506000888152600260208190526040909120015492935060609262010000900473ffffffffffffffffffffffffffffffffffffffff16159150611a6e905057600086815260026020819052604091829020015490517f8318ed5d00000000000000000000000000000000000000000000000000000000815263ffffffff891660048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690638318ed5d90602401600060405180830381865afa158015611a25573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611a6b9190810190614f32565b90505b9093509150505b9250929050565b604080516101008101825260008082526020820181905291810182905260608082018390526080820183905260a082019290925260c0810182905260e081019190915260408051610100810182526000848152600c6020908152838220805463ffffffff8082168652640100000000820481168487018190526801000000000000000090920416858701526001820154606086015260028201546080860152600382015460a0860152835260040190529190912060c0820190611b3e90613917565b8152602001611b61600c6000868152602001908152602001600020600501613917565b905292915050565b611b71612d84565b60005b8181101561086f576000838383818110611b9057611b90614aa2565b905060200201359050611bad816003612d6990919063ffffffff16565b611be6576040517fe181733f00000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b611bf160058261390b565b611c2a576040517ff7d7a29400000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b60405181907fdcea1b78b6ddc31592a94607d537543fcaafda6cc52d6d5cc7bbfca1422baf2190600090a250600101611b74565b600e5460609063ffffffff166000611c77600183614b00565b63ffffffff1667ffffffffffffffff811115611c9557611c9561422c565b604051908082528060200260200182016040528015611cdb57816020015b604080518082019091526000815260606020820152815260200190600190039081611cb35790505b509050600060015b8363ffffffff168163ffffffff161015611e2b5763ffffffff81166000908152600b602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611e235763ffffffff81166000908152600b60209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff1683526001810180549192840191611d7790614b55565b80601f0160208091040260200160405190810160405280929190818152602001828054611da390614b55565b8015611df05780601f10611dc557610100808354040283529160200191611df0565b820191906000526020600020905b815481529060010190602001808311611dd357829003601f168201915b505050505081525050838381518110611e0b57611e0b614aa2565b602002602001018190525081611e2090614b1d565b91505b600101611ce3565b50600e546109ba9060019063ffffffff16614b00565b611e49612d84565b60005b8181101561086f576000838383818110611e6857611e68614aa2565b9050602002810190611e7a9190614bcb565b611e8390614faf565b90506000611e998260000151836020015161062c565b9050611ea660038261390b565b611edf576040517febf5255100000000000000000000000000000000000000000000000000000000815260048101829052602401610611565b611ee98183613924565b5050600101611e4c565b60015473ffffffffffffffffffffffffffffffffffffffff163314611f74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610611565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b82811015610f5657600084848381811061202a5761202a614aa2565b905060200281019061203c9190614bcb565b61204590614c09565b805163ffffffff166000908152600b602090815260408083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff16825260018101805495965093949193909284019161209b90614b55565b80601f01602080910402602001604051908101604052809291908181526020018280546120c790614b55565b80156121145780601f106120e957610100808354040283529160200191612114565b820191906000526020600020905b8154815290600101906020018083116120f757829003601f168201915b50505091909252505081519192505073ffffffffffffffffffffffffffffffffffffffff1661217a5781516040517fadd9ae1e00000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610611565b8315801561219f5750805173ffffffffffffffffffffffffffffffffffffffff163314155b156121d8576040517f9473075d000000000000000000000000000000000000000000000000000000008152336004820152602401610611565b6040808301516000908152600c6020522060018101541561222d5782604001516040517f5461848300000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b60408301516122705782604001516040517f64e2ee9200000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6020830151158061228d5750602083015161228d90600790612d69565b156122c4576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608301516123075782606001516040517f37d8976500000000000000000000000000000000000000000000000000000000815260040161061191815260200190565b6080830151805160000361234957806040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016106119190614ce6565b8154829060049061236790640100000000900463ffffffff16614ba8565b82546101009290920a63ffffffff818102199093169183160217909155825464010000000090041660005b825181101561243d576123b08382815181106112df576112df614aa2565b6123e857826040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016106119190614ce6565b6124348382815181106123fd576123fd614aa2565b60200260200101518560040160008563ffffffff1663ffffffff16815260200190815260200160002061390b90919063ffffffff16565b50600101612392565b5060608501516003840155845183547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff9182161784556040860151600285015560208601516001850181905561249d916007919061390b16565b5060408501516124af9060099061390b565b50845160408087015160208089015183519283529082015263ffffffff909216917f74becb12a5e8fd0e98077d02dfba8f647c9670c9df177e42c2418cf17a636f05910160405180910390a2505050505080600101905061200e565b82811461254e576040517fab8b67c60000000000000000000000000000000000000000000000000000000081526004810184905260248101829052604401610611565b6000805473ffffffffffffffffffffffffffffffffffffffff16905b8481101561284357600086868381811061258657612586614aa2565b905060200201602081019061259b91906145f6565b63ffffffff81166000908152600b6020526040902080549192509073ffffffffffffffffffffffffffffffffffffffff1661260a576040517fadd9ae1e00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610611565b600086868581811061261e5761261e614aa2565b90506020028101906126309190614d2a565b61263990614d5e565b805190915073ffffffffffffffffffffffffffffffffffffffff1661268a576040517feeacd93900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815473ffffffffffffffffffffffffffffffffffffffff1633148015906126c757503373ffffffffffffffffffffffffffffffffffffffff861614155b15612700576040517f9473075d000000000000000000000000000000000000000000000000000000008152336004820152602401610611565b8051825473ffffffffffffffffffffffffffffffffffffffff908116911614158061277c5750602080820151604051612739920161445a565b60405160208183030381529060405280519060200120826001016040516020016127639190615055565b6040516020818303038152906040528051906020012014155b1561283557805182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602081015160018301906127d69082614e18565b50806000015173ffffffffffffffffffffffffffffffffffffffff168363ffffffff167f86f41145bde5dd7f523305452e4aad3685508c181432ec733d5f345009358a28836020015160405161282c919061445a565b60405180910390a35b50505080600101905061256a565b505050505050565b61288c6040805160e0810182526000808252606060208301819052928201839052909182019081526020016000815260006020820181905260409091015290565b6040805160e081018252838152600084815260026020908152929020805491928301916128b890614b55565b80601f01602080910402602001604051908101604052809291908181526020018280546128e490614b55565b80156129315780601f1061290657610100808354040283529160200191612931565b820191906000526020600020905b81548152906001019060200180831161291457829003601f168201915b5050505050815260200160026000858152602001908152602001600020600101805461295c90614b55565b80601f016020809104026020016040519081016040528092919081815260200182805461298890614b55565b80156129d55780601f106129aa576101008083540402835291602001916129d5565b820191906000526020600020905b8154815290600101906020018083116129b857829003601f168201915b50505091835250506000848152600260208181526040909220015491019060ff166003811115612a0757612a0761487a565b815260008481526002602081815260409092200154910190610100900460ff166001811115612a3857612a3861487a565b81526000848152600260208181526040928390209091015462010000900473ffffffffffffffffffffffffffffffffffffffff169083015201612a7c600585612d69565b1515905292915050565b612a8e612d84565b600e805460009164010000000090910463ffffffff16906004612ab083614ba8565b82546101009290920a63ffffffff81810219909316918316021790915581166000818152600d602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001684179055815160a08101835292835260019083015286151590820152841515606082015260ff84166080820152909150612b469089908990899089906130f4565b5050505050505050565b60606000612b5e6003613917565b90506000815167ffffffffffffffff811115612b7c57612b7c61422c565b604051908082528060200260200182016040528015612bee57816020015b612bdb6040805160e0810182526000808252606060208301819052928201839052909182019081526020016000815260006020820181905260409091015290565b815260200190600190039081612b9a5790505b50905060005b82518110156109ca57612c1f838281518110612c1257612c12614aa2565b602002602001015161284b565b828281518110612c3157612c31614aa2565b6020908102919091010152600101612bf4565b60606000612c526009613917565b90506000815167ffffffffffffffff811115612c7057612c7061422c565b604051908082528060200260200182016040528015612cff57816020015b60408051610100810182526000808252602080830182905292820181905260608083018290526080830182905260a083019190915260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181612c8e5790505b50905060005b82518110156109ca57612d30838281518110612d2357612d23614aa2565b6020026020010151611a7c565b828281518110612d4257612d42614aa2565b6020908102919091010152600101612d05565b612d5d612d84565b612d6681613b0c565b50565b600081815260018301602052604081205415155b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314612e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610611565b565b6000610626825490565b6000612d7d8383613c01565b6000612d7d8383613c2b565b6040805160e0810182526000808252602080830182905282840182905260608084018390526080840183905260a0840181905260c084015263ffffffff8581168352600d8252848320805464010000000090049091168084526001909101825284832060028101805487518186028101860190985280885295969295919493909190830182828015612eda57602002820191906000526020600020905b815481526020019060010190808311612ec6575b505050505090506000815167ffffffffffffffff811115612efd57612efd61422c565b604051908082528060200260200182016040528015612f4357816020015b604080518082019091526000815260606020820152815260200190600190039081612f1b5790505b50905060005b815181101561305b576040518060400160405280848381518110612f6f57612f6f614aa2565b60200260200101518152602001856003016000868581518110612f9457612f94614aa2565b602002602001015181526020019081526020016000208054612fb590614b55565b80601f0160208091040260200160405190810160405280929190818152602001828054612fe190614b55565b801561302e5780601f106130035761010080835404028352916020019161302e565b820191906000526020600020905b81548152906001019060200180831161301157829003601f168201915b505050505081525082828151811061304857613048614aa2565b6020908102919091010152600101612f49565b506040805160e08101825263ffffffff8089166000818152600d6020818152868320548086168752948b168187015260ff680100000000000000008604811697870197909752690100000000000000000085048716151560608701529290915290526a010000000000000000000090049091161515608082015260a081016130e285613917565b81526020019190915295945050505050565b805163ffffffff9081166000908152600d602090815260408083208286015190941683526001909301905220608082015160ff161580613146575060808201518590613141906001615103565b60ff16115b1561318f5760808201516040517f25b4d61800000000000000000000000000000000000000000000000000000000815260ff909116600482015260248101869052604401610611565b6001826020015163ffffffff16111561327757815163ffffffff166000908152600d6020908152604082209084015160019182019183916131d09190614b00565b63ffffffff1663ffffffff168152602001908152602001600020905060005b6131f882612e07565b81101561327457613227846000015163ffffffff16600c60006107778587600001612e1190919063ffffffff16565b50600c60006132368484612e11565b8152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff1690556001016131ef565b50505b60005b858110156134b1576132a787878381811061329757613297614aa2565b859260209091020135905061390b565b6133085782518787838181106132bf576132bf614aa2565b6040517f636e405700000000000000000000000000000000000000000000000000000000815263ffffffff90941660048501526020029190910135602483015250604401610611565b82606001511561345f57825163ffffffff16600c600089898581811061333057613330614aa2565b602090810292909201358352508101919091526040016000205468010000000000000000900463ffffffff16148015906133aa5750600c600088888481811061337b5761337b614aa2565b602090810292909201358352508101919091526040016000205468010000000000000000900463ffffffff1615155b1561340c5782518787838181106133c3576133c3614aa2565b6040517f60b9df7300000000000000000000000000000000000000000000000000000000815263ffffffff90941660048501526020029190910135602483015250604401610611565b8251600c600089898581811061342457613424614aa2565b90506020020135815260200190815260200160002060000160086101000a81548163ffffffff021916908363ffffffff1602179055506134a9565b82516134a79063ffffffff16600c60008a8a8681811061348157613481614aa2565b90506020020135815260200190815260200160002060050161390b90919063ffffffff16565b505b60010161327a565b5060005b838110156138bf57368585838181106134d0576134d0614aa2565b90506020028101906134e29190614d2a565b90506134f060038235612d69565b613529576040517fe181733f00000000000000000000000000000000000000000000000000000000815281356004820152602401610611565b61353560058235612d69565b1561356f576040517ff7d7a29400000000000000000000000000000000000000000000000000000000815281356004820152602401610611565b803560009081526003840160205260408120805461358c90614b55565b905011156135d85783516040517f3927d08000000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015281356024820152604401610611565b60005b878110156136e25761367f8235600c60008c8c868181106135fe576135fe614aa2565b9050602002013581526020019081526020016000206004016000600c60008e8e8881811061362e5761362e614aa2565b90506020020135815260200190815260200160002060000160049054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001908152602001600020612d6990919063ffffffff16565b6136da5788888281811061369557613695614aa2565b6040517fa7e792500000000000000000000000000000000000000000000000000000000081526020909102929092013560048301525082356024820152604401610611565b6001016135db565b506002830180546001810182556000918252602091829020833591015561370b9082018261511c565b82356000908152600386016020526040902091613729919083615181565b50604080850151855163ffffffff9081166000908152600d602090815284822080549415156901000000000000000000027fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff90951694909417909355606088015188518316825284822080549115156a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff9092169190911790556080880151885183168252848220805460ff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff909216919091179055828801805189518416835294909120805494909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff909416939093179055855191516138b692918435908c908c9061387c9088018861511c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613d1e92505050565b506001016134b5565b50815160208084015160405163ffffffff91821681529216917ff264aae70bf6a9d90e68e0f9b393f4e7fbea67b063b0f336e0b36c1581703651910160405180910390a2505050505050565b6000612d7d8383613dff565b60606000612d7d83613e4e565b608081015173ffffffffffffffffffffffffffffffffffffffff16156139c65761397281608001517f78bea72100000000000000000000000000000000000000000000000000000000613eaa565b6139c65760808101516040517fabb5e3fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610611565b6000828152600260205260409020815182919081906139e59082614e18565b50602082015160018201906139fa9082614e18565b5060408201516002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001836003811115613a3c57613a3c61487a565b021790555060608201516002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100836001811115613a8357613a8361487a565b0217905550608091909101516002909101805473ffffffffffffffffffffffffffffffffffffffff90921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff90921691909117905560405182907f04f0a9bcf3f3a3b42a4d7ca081119755f82ebe43e0d30c8f7292c4fe0dc4a2ae90600090a25050565b3373ffffffffffffffffffffffffffffffffffffffff821603613b8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610611565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000826000018281548110613c1857613c18614aa2565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613d14576000613c4f60018361529c565b8554909150600090613c639060019061529c565b9050818114613cc8576000866000018281548110613c8357613c83614aa2565b9060005260206000200154905080876000018481548110613ca657613ca6614aa2565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613cd957613cd96152af565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610626565b6000915050610626565b6000848152600260208190526040909120015462010000900473ffffffffffffffffffffffffffffffffffffffff161561284357600084815260026020819052604091829020015490517ffba64a7c0000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff169063fba64a7c90613dc5908690869086908b908d906004016152de565b600060405180830381600087803b158015613ddf57600080fd5b505af1158015613df3573d6000803e3d6000fd5b50505050505050505050565b6000818152600183016020526040812054613e4657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610626565b506000610626565b606081600001805480602002602001604051908101604052809291908181526020018280548015613e9e57602002820191906000526020600020905b815481526020019060010190808311613e8a575b50505050509050919050565b6000613eb583613ec6565b8015612d7d5750612d7d8383613f2a565b6000613ef2827f01ffc9a700000000000000000000000000000000000000000000000000000000613f2a565b80156106265750613f23827fffffffff00000000000000000000000000000000000000000000000000000000613f2a565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015613fe2575060208210155b8015613fee5750600081115b979650505050505050565b50805461400590614b55565b6000825580601f10614015575050565b601f016020900490600052602060002090810190612d66919061404d565b5080546000825590600052602060002090810190612d6691905b5b80821115614062576000815560010161404e565b5090565b60008083601f84011261407857600080fd5b50813567ffffffffffffffff81111561409057600080fd5b6020830191508360208260051b8501011115611a7557600080fd5b600080602083850312156140be57600080fd5b823567ffffffffffffffff8111156140d557600080fd5b6140e185828601614066565b90969095509350505050565b60008151808452602080850194506020840160005b8381101561411e57815187529582019590820190600101614102565b509495945050505050565b600061010063ffffffff80845116855280602085015116602086015280604085015116604086015250606083015160608501526080830151608085015260a083015160a085015260c08301518160c0860152614187828601826140ed565b91505060e083015184820360e08601526141a182826140ed565b95945050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561421f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261420d858351614129565b945092850192908501906001016141d3565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561427e5761427e61422c565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156142cb576142cb61422c565b604052919050565b600067ffffffffffffffff8211156142ed576142ed61422c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011261432a57600080fd5b813561433d614338826142d3565b614284565b81815284602083860101111561435257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561438257600080fd5b823567ffffffffffffffff8082111561439a57600080fd5b6143a686838701614319565b935060208501359150808211156143bc57600080fd5b506143c985828601614319565b9150509250929050565b6000602082840312156143e557600080fd5b5035919050565b60005b838110156144075781810151838201526020016143ef565b50506000910152565b600081518084526144288160208601602086016143ec565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612d7d6020830184614410565b600082825180855260208086019550808260051b84010181860160005b848110156144ea578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001895281518051845284015160408585018190526144d681860183614410565b9a86019a945050509083019060010161448a565b5090979650505050505050565b600063ffffffff8083511684528060208401511660208501525060ff604083015116604084015260608201511515606084015260808201511515608084015260a082015160e060a085015261454f60e08501826140ed565b905060c083015184820360c08601526141a1828261446d565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561421f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526145cb8583516144f7565b94509285019290850190600101614591565b803563ffffffff811681146145f157600080fd5b919050565b60006020828403121561460857600080fd5b612d7d826145dd565b73ffffffffffffffffffffffffffffffffffffffff815116825260006020820151604060208501526146466040850182614410565b949350505050565b602081526000612d7d6020830184614611565b602081526000612d7d60208301846144f7565b803580151581146145f157600080fd5b803560ff811681146145f157600080fd5b600080600080600080600060a0888a0312156146b057600080fd5b6146b9886145dd565b9650602088013567ffffffffffffffff808211156146d657600080fd5b6146e28b838c01614066565b909850965060408a01359150808211156146fb57600080fd5b506147088a828b01614066565b909550935061471b905060608901614674565b915061472960808901614684565b905092959891949750929550565b6000806040838503121561474a57600080fd5b614753836145dd565b946020939093013593505050565b6040815260006147746040830185614410565b82810360208401526141a18185614410565b602081526000612d7d6020830184614129565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561421f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147fc858351614611565b945092850192908501906001016147c2565b6000806000806040858703121561482457600080fd5b843567ffffffffffffffff8082111561483c57600080fd5b61484888838901614066565b9096509450602087013591508082111561486157600080fd5b5061486e87828801614066565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b805182526000602082015160e060208501526148c860e0850182614410565b9050604083015184820360408601526148e18282614410565b9150506060830151600481106148f9576148f961487a565b60608501526080830151600281106149135761491361487a565b8060808601525060a083015161494160a086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060c083015161062260c086018215159052565b602081526000612d7d60208301846148a9565b600080600080600080600060a0888a03121561498357600080fd5b873567ffffffffffffffff8082111561499b57600080fd5b6149a78b838c01614066565b909950975060208a01359150808211156149c057600080fd5b506149cd8a828b01614066565b90965094506149e0905060408901614674565b925061471b60608901614674565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561421f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452614a518583516148a9565b94509285019290850190600101614a17565b803573ffffffffffffffffffffffffffffffffffffffff811681146145f157600080fd5b600060208284031215614a9957600080fd5b612d7d82614a63565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff8281168282160390808211156109ca576109ca614ad1565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614b4e57614b4e614ad1565b5060010190565b600181811c90821680614b6957607f821691505b602082108103614ba2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600063ffffffff808316818103614bc157614bc1614ad1565b6001019392505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112614bff57600080fd5b9190910192915050565b600060a08236031215614c1b57600080fd5b614c2361425b565b614c2c836145dd565b8152602080840135818301526040840135604083015260608401356060830152608084013567ffffffffffffffff80821115614c6757600080fd5b9085019036601f830112614c7a57600080fd5b813581811115614c8c57614c8c61422c565b8060051b9150614c9d848301614284565b8181529183018401918481019036841115614cb757600080fd5b938501935b83851015614cd557843582529385019390850190614cbc565b608087015250939695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015614d1e57835183529284019291840191600101614d02565b50909695505050505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112614bff57600080fd5b600060408236031215614d7057600080fd5b6040516040810167ffffffffffffffff8282108183111715614d9457614d9461422c565b81604052614da185614a63565b83526020850135915080821115614db757600080fd5b50614dc436828601614319565b60208301525092915050565b601f82111561086f576000816000526020600020601f850160051c81016020861015614df95750805b601f850160051c820191505b8181101561284357828155600101614e05565b815167ffffffffffffffff811115614e3257614e3261422c565b614e4681614e408454614b55565b84614dd0565b602080601f831160018114614e995760008415614e635750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612843565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015614ee657888601518255948401946001909101908401614ec7565b5085821015614f2257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215614f4457600080fd5b815167ffffffffffffffff811115614f5b57600080fd5b8201601f81018413614f6c57600080fd5b8051614f7a614338826142d3565b818152856020838501011115614f8f57600080fd5b6141a18260208301602086016143ec565b8035600281106145f157600080fd5b600060a08236031215614fc157600080fd5b614fc961425b565b823567ffffffffffffffff80821115614fe157600080fd5b614fed36838701614319565b8352602085013591508082111561500357600080fd5b5061501036828601614319565b60208301525060408301356004811061502857600080fd5b604082015261503960608401614fa0565b606082015261504a60808401614a63565b608082015292915050565b600060208083526000845461506981614b55565b806020870152604060018084166000811461508b57600181146150c5576150f5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00851660408a0152604084151560051b8a010195506150f5565b89600052602060002060005b858110156150ec5781548b82018601529083019088016150d1565b8a016040019650505b509398975050505050505050565b60ff818116838216019081111561062657610626614ad1565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261515157600080fd5b83018035915067ffffffffffffffff82111561516c57600080fd5b602001915036819003821315611a7557600080fd5b67ffffffffffffffff8311156151995761519961422c565b6151ad836151a78354614b55565b83614dd0565b6000601f8411600181146151ff57600085156151c95750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355615295565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561524e578685013582556020948501946001909201910161522e565b5086821015615289577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8181038181111561062657610626614ad1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6080815284608082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86111561531757600080fd5b8560051b808860a0850137820182810360a0908101602085015261533d90820187614410565b91505063ffffffff8085166040840152808416606084015250969550505050505056fea164736f6c6343000818000a", } var CapabilitiesRegistryABI = CapabilitiesRegistryMetaData.ABI @@ -361,25 +361,47 @@ func (_CapabilitiesRegistry *CapabilitiesRegistryCallerSession) GetHashedCapabil return _CapabilitiesRegistry.Contract.GetHashedCapabilityId(&_CapabilitiesRegistry.CallOpts, labelledName, version) } -func (_CapabilitiesRegistry *CapabilitiesRegistryCaller) GetNode(opts *bind.CallOpts, p2pId [32]byte) (CapabilitiesRegistryNodeInfo, error) { +func (_CapabilitiesRegistry *CapabilitiesRegistryCaller) GetNextDONId(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _CapabilitiesRegistry.contract.Call(opts, &out, "getNextDONId") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +func (_CapabilitiesRegistry *CapabilitiesRegistrySession) GetNextDONId() (uint32, error) { + return _CapabilitiesRegistry.Contract.GetNextDONId(&_CapabilitiesRegistry.CallOpts) +} + +func (_CapabilitiesRegistry *CapabilitiesRegistryCallerSession) GetNextDONId() (uint32, error) { + return _CapabilitiesRegistry.Contract.GetNextDONId(&_CapabilitiesRegistry.CallOpts) +} + +func (_CapabilitiesRegistry *CapabilitiesRegistryCaller) GetNode(opts *bind.CallOpts, p2pId [32]byte) (INodeInfoProviderNodeInfo, error) { var out []interface{} err := _CapabilitiesRegistry.contract.Call(opts, &out, "getNode", p2pId) if err != nil { - return *new(CapabilitiesRegistryNodeInfo), err + return *new(INodeInfoProviderNodeInfo), err } - out0 := *abi.ConvertType(out[0], new(CapabilitiesRegistryNodeInfo)).(*CapabilitiesRegistryNodeInfo) + out0 := *abi.ConvertType(out[0], new(INodeInfoProviderNodeInfo)).(*INodeInfoProviderNodeInfo) return out0, err } -func (_CapabilitiesRegistry *CapabilitiesRegistrySession) GetNode(p2pId [32]byte) (CapabilitiesRegistryNodeInfo, error) { +func (_CapabilitiesRegistry *CapabilitiesRegistrySession) GetNode(p2pId [32]byte) (INodeInfoProviderNodeInfo, error) { return _CapabilitiesRegistry.Contract.GetNode(&_CapabilitiesRegistry.CallOpts, p2pId) } -func (_CapabilitiesRegistry *CapabilitiesRegistryCallerSession) GetNode(p2pId [32]byte) (CapabilitiesRegistryNodeInfo, error) { +func (_CapabilitiesRegistry *CapabilitiesRegistryCallerSession) GetNode(p2pId [32]byte) (INodeInfoProviderNodeInfo, error) { return _CapabilitiesRegistry.Contract.GetNode(&_CapabilitiesRegistry.CallOpts, p2pId) } @@ -427,28 +449,50 @@ func (_CapabilitiesRegistry *CapabilitiesRegistryCallerSession) GetNodeOperators return _CapabilitiesRegistry.Contract.GetNodeOperators(&_CapabilitiesRegistry.CallOpts) } -func (_CapabilitiesRegistry *CapabilitiesRegistryCaller) GetNodes(opts *bind.CallOpts) ([]CapabilitiesRegistryNodeInfo, error) { +func (_CapabilitiesRegistry *CapabilitiesRegistryCaller) GetNodes(opts *bind.CallOpts) ([]INodeInfoProviderNodeInfo, error) { var out []interface{} err := _CapabilitiesRegistry.contract.Call(opts, &out, "getNodes") if err != nil { - return *new([]CapabilitiesRegistryNodeInfo), err + return *new([]INodeInfoProviderNodeInfo), err } - out0 := *abi.ConvertType(out[0], new([]CapabilitiesRegistryNodeInfo)).(*[]CapabilitiesRegistryNodeInfo) + out0 := *abi.ConvertType(out[0], new([]INodeInfoProviderNodeInfo)).(*[]INodeInfoProviderNodeInfo) return out0, err } -func (_CapabilitiesRegistry *CapabilitiesRegistrySession) GetNodes() ([]CapabilitiesRegistryNodeInfo, error) { +func (_CapabilitiesRegistry *CapabilitiesRegistrySession) GetNodes() ([]INodeInfoProviderNodeInfo, error) { return _CapabilitiesRegistry.Contract.GetNodes(&_CapabilitiesRegistry.CallOpts) } -func (_CapabilitiesRegistry *CapabilitiesRegistryCallerSession) GetNodes() ([]CapabilitiesRegistryNodeInfo, error) { +func (_CapabilitiesRegistry *CapabilitiesRegistryCallerSession) GetNodes() ([]INodeInfoProviderNodeInfo, error) { return _CapabilitiesRegistry.Contract.GetNodes(&_CapabilitiesRegistry.CallOpts) } +func (_CapabilitiesRegistry *CapabilitiesRegistryCaller) GetNodesByP2PIds(opts *bind.CallOpts, p2pIds [][32]byte) ([]INodeInfoProviderNodeInfo, error) { + var out []interface{} + err := _CapabilitiesRegistry.contract.Call(opts, &out, "getNodesByP2PIds", p2pIds) + + if err != nil { + return *new([]INodeInfoProviderNodeInfo), err + } + + out0 := *abi.ConvertType(out[0], new([]INodeInfoProviderNodeInfo)).(*[]INodeInfoProviderNodeInfo) + + return out0, err + +} + +func (_CapabilitiesRegistry *CapabilitiesRegistrySession) GetNodesByP2PIds(p2pIds [][32]byte) ([]INodeInfoProviderNodeInfo, error) { + return _CapabilitiesRegistry.Contract.GetNodesByP2PIds(&_CapabilitiesRegistry.CallOpts, p2pIds) +} + +func (_CapabilitiesRegistry *CapabilitiesRegistryCallerSession) GetNodesByP2PIds(p2pIds [][32]byte) ([]INodeInfoProviderNodeInfo, error) { + return _CapabilitiesRegistry.Contract.GetNodesByP2PIds(&_CapabilitiesRegistry.CallOpts, p2pIds) +} + func (_CapabilitiesRegistry *CapabilitiesRegistryCaller) IsCapabilityDeprecated(opts *bind.CallOpts, hashedCapabilityId [32]byte) (bool, error) { var out []interface{} err := _CapabilitiesRegistry.contract.Call(opts, &out, "isCapabilityDeprecated", hashedCapabilityId) @@ -2192,13 +2236,17 @@ type CapabilitiesRegistryInterface interface { GetHashedCapabilityId(opts *bind.CallOpts, labelledName string, version string) ([32]byte, error) - GetNode(opts *bind.CallOpts, p2pId [32]byte) (CapabilitiesRegistryNodeInfo, error) + GetNextDONId(opts *bind.CallOpts) (uint32, error) + + GetNode(opts *bind.CallOpts, p2pId [32]byte) (INodeInfoProviderNodeInfo, error) GetNodeOperator(opts *bind.CallOpts, nodeOperatorId uint32) (CapabilitiesRegistryNodeOperator, error) GetNodeOperators(opts *bind.CallOpts) ([]CapabilitiesRegistryNodeOperator, error) - GetNodes(opts *bind.CallOpts) ([]CapabilitiesRegistryNodeInfo, error) + GetNodes(opts *bind.CallOpts) ([]INodeInfoProviderNodeInfo, error) + + GetNodesByP2PIds(opts *bind.CallOpts, p2pIds [][32]byte) ([]INodeInfoProviderNodeInfo, error) IsCapabilityDeprecated(opts *bind.CallOpts, hashedCapabilityId [32]byte) (bool, error) diff --git a/core/gethwrappers/keystone/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/keystone/generation/generated-wrapper-dependency-versions-do-not-edit.txt index 2ef8c73a6ce..c6573ab5cb8 100644 --- a/core/gethwrappers/keystone/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/core/gethwrappers/keystone/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -1,5 +1,5 @@ GETH_VERSION: 1.13.8 -capabilities_registry: ../../../contracts/solc/v0.8.24/CapabilitiesRegistry/CapabilitiesRegistry.abi ../../../contracts/solc/v0.8.24/CapabilitiesRegistry/CapabilitiesRegistry.bin 2cd39422dd88c4b9b05f6b297739e587fcfed3b06b8929b7a489ac8f36d4fb6c +capabilities_registry: ../../../contracts/solc/v0.8.24/CapabilitiesRegistry/CapabilitiesRegistry.abi ../../../contracts/solc/v0.8.24/CapabilitiesRegistry/CapabilitiesRegistry.bin 1250614381238d54ec35070c4eaed2884d6fba28ebb75e890600c820e44fc98c feeds_consumer: ../../../contracts/solc/v0.8.24/KeystoneFeedsConsumer/KeystoneFeedsConsumer.abi ../../../contracts/solc/v0.8.24/KeystoneFeedsConsumer/KeystoneFeedsConsumer.bin 6ac5b12eff3b022a35c3c40d5ed0285bf9bfec0e3669a4b12307332a216048ca forwarder: ../../../contracts/solc/v0.8.24/KeystoneForwarder/KeystoneForwarder.abi ../../../contracts/solc/v0.8.24/KeystoneForwarder/KeystoneForwarder.bin 03911334d0c88f8ee8ee2d9832fd312bc8a48c824fcda5c807585af2d0e6a148 ocr3_capability: ../../../contracts/solc/v0.8.24/OCR3Capability/OCR3Capability.abi ../../../contracts/solc/v0.8.24/OCR3Capability/OCR3Capability.bin 509af20993cc8d7f4e84d55a3f1316d4bb9ab706f9a50a91ac72de96dbc1244e diff --git a/core/services/registrysyncer/local_registry.go b/core/services/registrysyncer/local_registry.go index d4bf4a49f53..5bec59412f4 100644 --- a/core/services/registrysyncer/local_registry.go +++ b/core/services/registrysyncer/local_registry.go @@ -32,7 +32,7 @@ type LocalRegistry struct { lggr logger.Logger getPeerID func() (p2ptypes.PeerID, error) IDsToDONs map[DonID]DON - IDsToNodes map[p2ptypes.PeerID]kcr.CapabilitiesRegistryNodeInfo + IDsToNodes map[p2ptypes.PeerID]kcr.INodeInfoProviderNodeInfo IDsToCapabilities map[string]Capability } @@ -40,7 +40,7 @@ func NewLocalRegistry( lggr logger.Logger, getPeerID func() (p2ptypes.PeerID, error), IDsToDONs map[DonID]DON, - IDsToNodes map[p2ptypes.PeerID]kcr.CapabilitiesRegistryNodeInfo, + IDsToNodes map[p2ptypes.PeerID]kcr.INodeInfoProviderNodeInfo, IDsToCapabilities map[string]Capability, ) LocalRegistry { return LocalRegistry{ diff --git a/core/services/registrysyncer/orm.go b/core/services/registrysyncer/orm.go index bd2fde73567..9c666200752 100644 --- a/core/services/registrysyncer/orm.go +++ b/core/services/registrysyncer/orm.go @@ -80,7 +80,7 @@ func (l *LocalRegistry) UnmarshalJSON(data []byte) error { l.IDsToDONs = temp.IDsToDONs - l.IDsToNodes = make(map[p2ptypes.PeerID]kcr.CapabilitiesRegistryNodeInfo) + l.IDsToNodes = make(map[p2ptypes.PeerID]kcr.INodeInfoProviderNodeInfo) for peerID, v := range temp.IDsToNodes { hashedCapabilityIds := make([][32]byte, len(v.HashedCapabilityIds)) for i, id := range v.HashedCapabilityIds { @@ -93,7 +93,7 @@ func (l *LocalRegistry) UnmarshalJSON(data []byte) error { bigInt.SetString(id, 10) capabilitiesDONIds[i] = bigInt } - l.IDsToNodes[peerID] = kcr.CapabilitiesRegistryNodeInfo{ + l.IDsToNodes[peerID] = kcr.INodeInfoProviderNodeInfo{ NodeOperatorId: v.NodeOperatorId, ConfigCount: v.ConfigCount, WorkflowDONId: v.WorkflowDONId, diff --git a/core/services/registrysyncer/orm_test.go b/core/services/registrysyncer/orm_test.go index cea20076126..429bfff664b 100644 --- a/core/services/registrysyncer/orm_test.go +++ b/core/services/registrysyncer/orm_test.go @@ -111,7 +111,7 @@ func generateState(t *testing.T) registrysyncer.LocalRegistry { CapabilityType: capabilities.CapabilityTypeConsensus, }, }, - IDsToNodes: map[types.PeerID]kcr.CapabilitiesRegistryNodeInfo{ + IDsToNodes: map[types.PeerID]kcr.INodeInfoProviderNodeInfo{ nodes[0]: { NodeOperatorId: 1, Signer: randomWord(), diff --git a/core/services/registrysyncer/syncer.go b/core/services/registrysyncer/syncer.go index bff6bd7e9ba..d4f343f12bf 100644 --- a/core/services/registrysyncer/syncer.go +++ b/core/services/registrysyncer/syncer.go @@ -249,14 +249,14 @@ func (s *registrySyncer) localRegistry(ctx context.Context) (*LocalRegistry, err } } - nodes := []kcr.CapabilitiesRegistryNodeInfo{} + nodes := []kcr.INodeInfoProviderNodeInfo{} err = s.reader.GetLatestValue(ctx, s.capabilitiesContract.ReadIdentifier("getNodes"), primitives.Unconfirmed, nil, &nodes) if err != nil { return nil, err } - idsToNodes := map[p2ptypes.PeerID]kcr.CapabilitiesRegistryNodeInfo{} + idsToNodes := map[p2ptypes.PeerID]kcr.INodeInfoProviderNodeInfo{} for _, node := range nodes { idsToNodes[node.P2pId] = node } @@ -367,9 +367,9 @@ func deepCopyLocalRegistry(lr *LocalRegistry) LocalRegistry { lrCopy.IDsToCapabilities[id] = cp } - lrCopy.IDsToNodes = make(map[p2ptypes.PeerID]kcr.CapabilitiesRegistryNodeInfo, len(lr.IDsToNodes)) + lrCopy.IDsToNodes = make(map[p2ptypes.PeerID]kcr.INodeInfoProviderNodeInfo, len(lr.IDsToNodes)) for id, node := range lr.IDsToNodes { - nodeInfo := kcr.CapabilitiesRegistryNodeInfo{ + nodeInfo := kcr.INodeInfoProviderNodeInfo{ NodeOperatorId: node.NodeOperatorId, ConfigCount: node.ConfigCount, WorkflowDONId: node.WorkflowDONId, diff --git a/core/services/registrysyncer/syncer_test.go b/core/services/registrysyncer/syncer_test.go index 03f9bffcf92..d2a6bda3880 100644 --- a/core/services/registrysyncer/syncer_test.go +++ b/core/services/registrysyncer/syncer_test.go @@ -323,7 +323,7 @@ func TestReader_Integration(t *testing.T) { assert.Equal(t, expectedDON, gotDon.DON) assert.Equal(t, configb, gotDon.CapabilityConfigurations[cid].Config) - nodesInfo := []kcr.CapabilitiesRegistryNodeInfo{ + nodesInfo := []kcr.INodeInfoProviderNodeInfo{ { // The first NodeOperatorId has id 1 since the id is auto-incrementing. NodeOperatorId: uint32(1), @@ -360,7 +360,7 @@ func TestReader_Integration(t *testing.T) { } assert.Len(t, s.IDsToNodes, 3) - assert.Equal(t, map[p2ptypes.PeerID]kcr.CapabilitiesRegistryNodeInfo{ + assert.Equal(t, map[p2ptypes.PeerID]kcr.INodeInfoProviderNodeInfo{ nodeSet[0]: nodesInfo[0], nodeSet[1]: nodesInfo[1], nodeSet[2]: nodesInfo[2], @@ -525,7 +525,7 @@ func TestSyncer_LocalNode(t *testing.T) { }, }, }, - map[p2ptypes.PeerID]kcr.CapabilitiesRegistryNodeInfo{ + map[p2ptypes.PeerID]kcr.INodeInfoProviderNodeInfo{ workflowDonNodes[0]: { NodeOperatorId: 1, Signer: randomWord(), From 5dfb13071e96f8e0cda7b79a4c1797c1f064972b Mon Sep 17 00:00:00 2001 From: nogo <110664798+0xnogo@users.noreply.github.com> Date: Mon, 21 Oct 2024 20:23:48 +0400 Subject: [PATCH 07/13] RMN home reader test (#14789) * rmn home reader test * go mod tidy * get latest ccip commit * lint * changeset * use final commit * test fixing * cleaup method * fix lint * addressing comments * using latest ccip commit * change frequency * use latest ccip commit * bump ccip * fix test * err check * tidy * increase eventually time * tidy * change chainlink-ccip * mod change * script go.mod change * fix encoding * 100ms --- .changeset/silver-pens-float.md | 5 + .../integrationhelpers/integration_helpers.go | 116 +++++++++--- .../rmn/rmn_home_test.go | 174 ++++++++++++++++++ 3 files changed, 272 insertions(+), 23 deletions(-) create mode 100644 .changeset/silver-pens-float.md create mode 100644 core/capabilities/ccip/ccip_integration_tests/rmn/rmn_home_test.go diff --git a/.changeset/silver-pens-float.md b/.changeset/silver-pens-float.md new file mode 100644 index 00000000000..e8a135b9de4 --- /dev/null +++ b/.changeset/silver-pens-float.md @@ -0,0 +1,5 @@ +--- +"chainlink": minor +--- + +#internal: Adding test for rmn home reader diff --git a/core/capabilities/ccip/ccip_integration_tests/integrationhelpers/integration_helpers.go b/core/capabilities/ccip/ccip_integration_tests/integrationhelpers/integration_helpers.go index 0674d77bfe9..fc31471c149 100644 --- a/core/capabilities/ccip/ccip_integration_tests/integrationhelpers/integration_helpers.go +++ b/core/capabilities/ccip/ccip_integration_tests/integrationhelpers/integration_helpers.go @@ -2,6 +2,8 @@ package integrationhelpers import ( "context" + "crypto/ed25519" + "encoding/hex" "encoding/json" "fmt" "math/big" @@ -9,14 +11,18 @@ import ( "testing" "time" + mapset "github.com/deckarep/golang-set/v2" + "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" + "github.com/stretchr/testify/require" + "github.com/smartcontractkit/chainlink-ccip/pkg/consts" ccipreader "github.com/smartcontractkit/chainlink-ccip/pkg/reader" + "github.com/smartcontractkit/chainlink-ccip/pkg/types/ccipocr3" "github.com/smartcontractkit/chainlink-common/pkg/types" - "github.com/stretchr/testify/require" configsevm "github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/configs/evm" cctypes "github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/types" @@ -25,6 +31,7 @@ import ( "github.com/smartcontractkit/chainlink/v2/core/chains/evm/headtracker" "github.com/smartcontractkit/chainlink/v2/core/chains/evm/logpoller" "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/ccip_home" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/rmn_home" kcr "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/keystone/generated/capabilities_registry" "github.com/smartcontractkit/chainlink/v2/core/internal/testutils" "github.com/smartcontractkit/chainlink/v2/core/internal/testutils/pgtest" @@ -80,15 +87,16 @@ const ( ) type TestUniverse struct { - Transactor *bind.TransactOpts - Backend *backends.SimulatedBackend - CapReg *kcr.CapabilitiesRegistry - CCIPHome *ccip_home.CCIPHome - TestingT *testing.T - LogPoller logpoller.LogPoller - HeadTracker logpoller.HeadTracker - SimClient client.Client - HomeChainReader ccipreader.HomeChain + Transactor *bind.TransactOpts + Backend *backends.SimulatedBackend + CapReg *kcr.CapabilitiesRegistry + CCIPHome *ccip_home.CCIPHome + TestingT *testing.T + LogPoller logpoller.LogPoller + HeadTracker logpoller.HeadTracker + SimClient client.Client + HomeChainReader ccipreader.HomeChain + HomeContractReader types.ContractReader } func NewTestUniverse(ctx context.Context, t *testing.T, lggr logger.Logger) TestUniverse { @@ -128,17 +136,19 @@ func NewTestUniverse(ctx context.Context, t *testing.T, lggr logger.Logger) Test require.NoError(t, lp.Start(ctx)) t.Cleanup(func() { require.NoError(t, lp.Close()) }) - hcr := NewHomeChainReader(t, lp, headTracker, cl, ccAddress) + cr := NewReader(t, lp, headTracker, cl, ccAddress, configsevm.HomeChainReaderConfigRaw) + hcr := NewHomeChainReader(t, cr, ccAddress) return TestUniverse{ - Transactor: transactor, - Backend: backend, - CapReg: capReg, - CCIPHome: cc, - TestingT: t, - SimClient: cl, - LogPoller: lp, - HeadTracker: headTracker, - HomeChainReader: hcr, + Transactor: transactor, + Backend: backend, + CapReg: capReg, + CCIPHome: cc, + TestingT: t, + SimClient: cl, + LogPoller: lp, + HeadTracker: headTracker, + HomeChainReader: hcr, + HomeContractReader: cr, } } @@ -227,9 +237,7 @@ func (t *TestUniverse) AddCapability(p2pIDs [][32]byte) { } } -func NewHomeChainReader(t *testing.T, logPoller logpoller.LogPoller, headTracker logpoller.HeadTracker, client client.Client, ccAddress common.Address) ccipreader.HomeChain { - cr := NewReader(t, logPoller, headTracker, client, ccAddress, configsevm.HomeChainReaderConfigRaw) - +func NewHomeChainReader(t *testing.T, cr types.ContractReader, ccAddress common.Address) ccipreader.HomeChain { hcr := ccipreader.NewHomeChainReader(cr, logger.TestLogger(t), 50*time.Millisecond, types.BoundContract{ Address: ccAddress.String(), Name: consts.ContractNameCCIPConfig, @@ -365,3 +373,65 @@ func SetupConfigInfo(chainSelector uint64, readers [][32]byte, fChain uint8, cfg }, } } + +func GenerateRMNHomeConfigs( + peerID string, + offchainPK string, + offchainCfg string, + chainSelector uint64, + minObservers uint64, + observerBitmap *big.Int) (rmn_home.RMNHomeStaticConfig, rmn_home.RMNHomeDynamicConfig, error) { + peerIDByte, _ := hex.DecodeString(peerID) + var peerIDBytes [32]byte + copy(peerIDBytes[:], peerIDByte) + + offchainPublicKey, err := hex.DecodeString(offchainPK) + + if err != nil { + return rmn_home.RMNHomeStaticConfig{}, rmn_home.RMNHomeDynamicConfig{}, fmt.Errorf("error decoding offchain public key: %w", err) + } + + var offchainPublicKeyBytes [32]byte + copy(offchainPublicKeyBytes[:], offchainPublicKey) + + staticConfig := rmn_home.RMNHomeStaticConfig{ + Nodes: []rmn_home.RMNHomeNode{ + { + PeerId: peerIDBytes, + OffchainPublicKey: offchainPublicKeyBytes, + }, + }, + OffchainConfig: []byte(offchainCfg), + } + + dynamicConfig := rmn_home.RMNHomeDynamicConfig{ + SourceChains: []rmn_home.RMNHomeSourceChain{ + { + ChainSelector: chainSelector, + MinObservers: minObservers, + ObserverNodesBitmap: observerBitmap, + }, + }, + OffchainConfig: []byte(offchainCfg), + } + return staticConfig, dynamicConfig, nil +} + +func GenerateExpectedRMNHomeNodesInfo(staticConfig rmn_home.RMNHomeStaticConfig, chainID int) []ccipreader.HomeNodeInfo { + expectedCandidateNodesInfo := make([]ccipreader.HomeNodeInfo, 0) + + supportedCandidateSourceChains := mapset.NewSet(ccipocr3.ChainSelector(chainID)) + + var counter uint32 + for _, n := range staticConfig.Nodes { + pk := ed25519.PublicKey(n.OffchainPublicKey[:]) + expectedCandidateNodesInfo = append(expectedCandidateNodesInfo, ccipreader.HomeNodeInfo{ + ID: ccipreader.NodeID(counter), + PeerID: n.PeerId, + SupportedSourceChains: supportedCandidateSourceChains, + OffchainPublicKey: &pk, + }) + counter++ + } + return expectedCandidateNodesInfo +} diff --git a/core/capabilities/ccip/ccip_integration_tests/rmn/rmn_home_test.go b/core/capabilities/ccip/ccip_integration_tests/rmn/rmn_home_test.go new file mode 100644 index 00000000000..12a207ea5b9 --- /dev/null +++ b/core/capabilities/ccip/ccip_integration_tests/rmn/rmn_home_test.go @@ -0,0 +1,174 @@ +package rmn + +import ( + "bytes" + "math/big" + "slices" + "testing" + "time" + + "github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/ccip_integration_tests/integrationhelpers" + + "github.com/smartcontractkit/chainlink-ccip/pkg/consts" + "github.com/smartcontractkit/chainlink-common/pkg/types" + + "github.com/stretchr/testify/require" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + + readerpkg "github.com/smartcontractkit/chainlink-ccip/pkg/reader" + "github.com/smartcontractkit/chainlink/v2/core/internal/testutils" + "github.com/smartcontractkit/chainlink/v2/core/logger" + + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/rmn_home" +) + +func TestRMNHomeReader_GetRMNNodesInfo(t *testing.T) { + ctx := testutils.Context(t) + lggr := logger.TestLogger(t) + uni := integrationhelpers.NewTestUniverse(ctx, t, lggr) + zeroBytes := [32]byte{0} + + const ( + chainID1 = 1 + minObservers1 = 1 + observerBitmap1 = 1 + + chainID2 = 2 + minObservers2 = 0 + observerBitmap2 = 1 + ) + + //================================Deploy and configure RMNHome=============================== + rmnHomeAddress, _, rmnHome, err := rmn_home.DeployRMNHome(uni.Transactor, uni.Backend) + require.NoError(t, err) + uni.Backend.Commit() + + staticConfig, dynamicConfig, err := integrationhelpers.GenerateRMNHomeConfigs( + "PeerID1", + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", + "This is a sample offchain configuration in the static config", + chainID1, + minObservers1, + big.NewInt(observerBitmap1), + ) + require.NoError(t, err) + + _, err = rmnHome.SetCandidate(uni.Transactor, staticConfig, dynamicConfig, zeroBytes) + require.NoError(t, err) + uni.Backend.Commit() + + configDigest, err := rmnHome.GetCandidateDigest(&bind.CallOpts{}) + require.NoError(t, err) + + _, err = rmnHome.PromoteCandidateAndRevokeActive(uni.Transactor, configDigest, zeroBytes) + require.NoError(t, err) + uni.Backend.Commit() + + rmnHomeBoundContract := types.BoundContract{ + Address: rmnHomeAddress.String(), + Name: consts.ContractNameRMNHome, + } + + err = uni.HomeContractReader.Bind(testutils.Context(t), []types.BoundContract{rmnHomeBoundContract}) + require.NoError(t, err) + + rmnHomeReader := readerpkg.NewRMNHomePoller(uni.HomeContractReader, rmnHomeBoundContract, lggr, 100*time.Millisecond) + + err = rmnHomeReader.Start(testutils.Context(t)) + require.NoError(t, err) + + t.Cleanup(func() { + err1 := rmnHomeReader.Close() + require.NoError(t, err1) + }) + + //================================Test RMNHome Reader=============================== + expectedNodesInfo := integrationhelpers.GenerateExpectedRMNHomeNodesInfo(staticConfig, chainID1) + + require.Eventually( + t, + assertRMNHomeNodesInfo(t, rmnHomeReader, configDigest, expectedNodesInfo, nil), + 5*time.Second, + 100*time.Millisecond, + ) + + // Add a new candidate config + staticConfig2, dynamicConfig2, err := integrationhelpers.GenerateRMNHomeConfigs( + "PeerID2", + "1123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", + "This is a sample offchain configuration in the static config 2", + chainID2, + minObservers2, + big.NewInt(observerBitmap2), + ) + require.NoError(t, err) + + _, err = rmnHome.SetCandidate(uni.Transactor, staticConfig2, dynamicConfig2, zeroBytes) + require.NoError(t, err) + uni.Backend.Commit() + + candidateConfigDigest, err := rmnHome.GetCandidateDigest(&bind.CallOpts{}) + require.NoError(t, err) + + expectedCandidateNodesInfo := integrationhelpers.GenerateExpectedRMNHomeNodesInfo(staticConfig2, chainID2) + + require.Eventually( + t, + assertRMNHomeNodesInfo(t, rmnHomeReader, candidateConfigDigest, expectedCandidateNodesInfo, nil), + 5*time.Second, + 100*time.Millisecond, + ) + + // Promote the candidate config + _, err = rmnHome.PromoteCandidateAndRevokeActive(uni.Transactor, candidateConfigDigest, configDigest) + require.NoError(t, err) + uni.Backend.Commit() + + require.Eventually( + t, + assertRMNHomeNodesInfo(t, rmnHomeReader, candidateConfigDigest, expectedCandidateNodesInfo, &configDigest), + 5*time.Second, + 100*time.Millisecond, + ) +} + +func assertRMNHomeNodesInfo( + t *testing.T, + rmnHomeReader readerpkg.RMNHome, + configDigest [32]byte, + expectedNodesInfo []readerpkg.HomeNodeInfo, + prevConfigDigest *[32]byte, +) func() bool { + return func() bool { + nodesInfo, err := rmnHomeReader.GetRMNNodesInfo(configDigest) + if err != nil { + t.Logf("Error getting RMN nodes info: %v", err) + return false + } + + equal := slices.EqualFunc(expectedNodesInfo, nodesInfo, func(a, b readerpkg.HomeNodeInfo) bool { + return a.ID == b.ID && + a.PeerID == b.PeerID && + bytes.Equal(*a.OffchainPublicKey, *b.OffchainPublicKey) && + a.SupportedSourceChains.Equal(b.SupportedSourceChains) + }) + + if !equal { + t.Logf("Expected nodes info doesn't match actual nodes info") + t.Logf("Expected: %+v", expectedNodesInfo) + t.Logf("Actual: %+v", nodesInfo) + return false + } + + if prevConfigDigest != nil { + isPrevConfigStillSet := rmnHomeReader.IsRMNHomeConfigDigestSet(*prevConfigDigest) + if isPrevConfigStillSet { + t.Logf("Previous config is still set") + return false + } + } + + return true + } +} From 5267320da9386de07f6072dd478814721d6233dc Mon Sep 17 00:00:00 2001 From: Chris Amora <27789416+ChrisAmora@users.noreply.github.com> Date: Mon, 21 Oct 2024 15:30:53 -0300 Subject: [PATCH 08/13] feat: consume fm protos from chainlink-protos on integration tests (#14777) --- core/scripts/go.mod | 1 + core/scripts/go.sum | 2 + .../ccip/changeset/initial_deploy_test.go | 2 +- .../deployment/ccip/test_helpers.go | 4 +- .../deployment/ccip/view/nops.go | 2 +- .../deployment/clo/offchain_client_impl.go | 6 +- .../clo/offchain_client_impl_test.go | 2 +- integration-tests/deployment/devenv/don.go | 6 +- integration-tests/deployment/devenv/jd.go | 6 +- integration-tests/deployment/environment.go | 7 +- .../deployment/jd/csa/v1/csa.pb.go | 418 --- .../deployment/jd/csa/v1/csa_grpc.pb.go | 146 - .../deployment/jd/job/v1/job.pb.go | 1994 ------------- .../deployment/jd/job/v1/job_grpc.pb.go | 384 --- .../deployment/jd/node/v1/node.pb.go | 2492 ----------------- .../deployment/jd/node/v1/node_grpc.pb.go | 343 --- .../deployment/jd/shared/ptypes/label.pb.go | 311 -- .../deployment/keystone/types.go | 4 +- .../deployment/keystone/types_test.go | 2 +- .../deployment/memory/job_client.go | 6 +- integration-tests/go.mod | 1 + integration-tests/go.sum | 2 + integration-tests/smoke/ccip_test.go | 4 +- 23 files changed, 34 insertions(+), 6111 deletions(-) delete mode 100644 integration-tests/deployment/jd/csa/v1/csa.pb.go delete mode 100644 integration-tests/deployment/jd/csa/v1/csa_grpc.pb.go delete mode 100644 integration-tests/deployment/jd/job/v1/job.pb.go delete mode 100644 integration-tests/deployment/jd/job/v1/job_grpc.pb.go delete mode 100644 integration-tests/deployment/jd/node/v1/node.pb.go delete mode 100644 integration-tests/deployment/jd/node/v1/node_grpc.pb.go delete mode 100644 integration-tests/deployment/jd/shared/ptypes/label.pb.go diff --git a/core/scripts/go.mod b/core/scripts/go.mod index 075894c7c3d..249fe66b161 100644 --- a/core/scripts/go.mod +++ b/core/scripts/go.mod @@ -291,6 +291,7 @@ require ( github.com/smartcontractkit/chainlink-cosmos v0.5.2-0.20241017133723-5277829bd53f // indirect github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20241018134907-a00ba3729b5e // indirect github.com/smartcontractkit/chainlink-feeds v0.1.1 // indirect + github.com/smartcontractkit/chainlink-protos/job-distributor v0.4.0 // indirect github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0 // indirect github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042 // indirect github.com/smartcontractkit/chainlink-starknet/relayer v0.1.1-0.20241017135645-176a23722fd8 // indirect diff --git a/core/scripts/go.sum b/core/scripts/go.sum index 461fbc8074b..6a9dba0ed66 100644 --- a/core/scripts/go.sum +++ b/core/scripts/go.sum @@ -1082,6 +1082,8 @@ github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20241018134907-a00ba github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20241018134907-a00ba3729b5e/go.mod h1:iK3BNHKCLgSgkOyiu3iE7sfZ20Qnuk7xwjV/yO/6gnQ= github.com/smartcontractkit/chainlink-feeds v0.1.1 h1:JzvUOM/OgGQA1sOqTXXl52R6AnNt+Wg64sVG+XSA49c= github.com/smartcontractkit/chainlink-feeds v0.1.1/go.mod h1:55EZ94HlKCfAsUiKUTNI7QlE/3d3IwTlsU3YNa/nBb4= +github.com/smartcontractkit/chainlink-protos/job-distributor v0.4.0 h1:1xTm8UGeDUAjvCXRh08+4xBRX33owH5MqC522JdelM0= +github.com/smartcontractkit/chainlink-protos/job-distributor v0.4.0/go.mod h1:/dVVLXrsp+V0AbcYGJo3XMzKg3CkELsweA/TTopCsKE= github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0 h1:PBUaFfPLm+Efq7H9kdfGBivH+QhJ6vB5EZTR/sCZsxI= github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0/go.mod h1:m/A3lqD7ms/RsQ9BT5P2uceYY0QX5mIt4KQxT2G6qEo= github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042 h1:R8F2tpyvN0peK0woG/Spx+IdukxlSSWDDLyFQNkLfUs= diff --git a/integration-tests/deployment/ccip/changeset/initial_deploy_test.go b/integration-tests/deployment/ccip/changeset/initial_deploy_test.go index 6cb3bc12d2f..268bbacd0f3 100644 --- a/integration-tests/deployment/ccip/changeset/initial_deploy_test.go +++ b/integration-tests/deployment/ccip/changeset/initial_deploy_test.go @@ -11,8 +11,8 @@ import ( "github.com/smartcontractkit/chainlink-testing-framework/lib/utils/testcontext" + jobv1 "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/job" ccdeploy "github.com/smartcontractkit/chainlink/integration-tests/deployment/ccip" - jobv1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/job/v1" "github.com/smartcontractkit/chainlink/v2/core/logger" ) diff --git a/integration-tests/deployment/ccip/test_helpers.go b/integration-tests/deployment/ccip/test_helpers.go index 4159a35ed65..4cbafebf755 100644 --- a/integration-tests/deployment/ccip/test_helpers.go +++ b/integration-tests/deployment/ccip/test_helpers.go @@ -28,8 +28,9 @@ import ( chainsel "github.com/smartcontractkit/chain-selectors" + jobv1 "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/job" "github.com/smartcontractkit/chainlink/integration-tests/deployment" - jobv1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/job/v1" + "github.com/smartcontractkit/chainlink/integration-tests/deployment/memory" "github.com/smartcontractkit/chainlink/integration-tests/docker/test_env" "github.com/smartcontractkit/chainlink/integration-tests/testconfig" @@ -480,7 +481,6 @@ func DeployFeeds(lggr logger.Logger, ab deployment.AddressBook, chain deployment Address: linkFeed, Contract: aggregatorCr, Tv: linkTV, Tx: tx, Err: multierr.Append(err1, err2), } }) - if err != nil { lggr.Errorw("Failed to deploy link feed", "err", err) return nil, err diff --git a/integration-tests/deployment/ccip/view/nops.go b/integration-tests/deployment/ccip/view/nops.go index 8b347390615..34298706a99 100644 --- a/integration-tests/deployment/ccip/view/nops.go +++ b/integration-tests/deployment/ccip/view/nops.go @@ -6,8 +6,8 @@ import ( chainsel "github.com/smartcontractkit/chain-selectors" + nodev1 "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/node" "github.com/smartcontractkit/chainlink/integration-tests/deployment" - nodev1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/node/v1" ) type NopsView struct { diff --git a/integration-tests/deployment/clo/offchain_client_impl.go b/integration-tests/deployment/clo/offchain_client_impl.go index c11b528a14e..f59a918a41a 100644 --- a/integration-tests/deployment/clo/offchain_client_impl.go +++ b/integration-tests/deployment/clo/offchain_client_impl.go @@ -7,10 +7,10 @@ import ( "google.golang.org/grpc" "github.com/smartcontractkit/chainlink-common/pkg/logger" + csav1 "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/csa" + jobv1 "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/job" + nodev1 "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/node" "github.com/smartcontractkit/chainlink/integration-tests/deployment/clo/models" - csav1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/csa/v1" - jobv1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/job/v1" - nodev1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/node/v1" ) type JobClient struct { diff --git a/integration-tests/deployment/clo/offchain_client_impl_test.go b/integration-tests/deployment/clo/offchain_client_impl_test.go index 863da17ffa1..640721bb486 100644 --- a/integration-tests/deployment/clo/offchain_client_impl_test.go +++ b/integration-tests/deployment/clo/offchain_client_impl_test.go @@ -9,9 +9,9 @@ import ( "github.com/test-go/testify/require" "google.golang.org/grpc" + nodev1 "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/node" "github.com/smartcontractkit/chainlink/integration-tests/deployment/clo" "github.com/smartcontractkit/chainlink/integration-tests/deployment/clo/models" - nodev1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/node/v1" "github.com/smartcontractkit/chainlink/v2/core/logger" ) diff --git a/integration-tests/deployment/devenv/don.go b/integration-tests/deployment/devenv/don.go index dce9af96e0f..88bd26b8a7a 100644 --- a/integration-tests/deployment/devenv/don.go +++ b/integration-tests/deployment/devenv/don.go @@ -13,9 +13,11 @@ import ( "github.com/sethvargo/go-retry" chainsel "github.com/smartcontractkit/chain-selectors" + nodev1 "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/node" clclient "github.com/smartcontractkit/chainlink/integration-tests/client" - nodev1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/node/v1" - "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/shared/ptypes" + + "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/shared/ptypes" + "github.com/smartcontractkit/chainlink/integration-tests/web/sdk/client" ) diff --git a/integration-tests/deployment/devenv/jd.go b/integration-tests/deployment/devenv/jd.go index f8902d7da1c..4b2307f25d9 100644 --- a/integration-tests/deployment/devenv/jd.go +++ b/integration-tests/deployment/devenv/jd.go @@ -7,10 +7,10 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/credentials" + csav1 "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/csa" + jobv1 "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/job" + nodev1 "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/node" "github.com/smartcontractkit/chainlink/integration-tests/deployment" - csav1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/csa/v1" - jobv1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/job/v1" - nodev1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/node/v1" ) type JDConfig struct { diff --git a/integration-tests/deployment/environment.go b/integration-tests/deployment/environment.go index 0b723a358d6..42ee24aea29 100644 --- a/integration-tests/deployment/environment.go +++ b/integration-tests/deployment/environment.go @@ -18,10 +18,9 @@ import ( types3 "github.com/smartcontractkit/libocr/offchainreporting2plus/types" "google.golang.org/grpc" - csav1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/csa/v1" - - jobv1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/job/v1" - nodev1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/node/v1" + csav1 "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/csa" + jobv1 "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/job" + nodev1 "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/node" "github.com/smartcontractkit/chainlink-common/pkg/logger" "github.com/smartcontractkit/chainlink/v2/core/services/keystore/keys/p2pkey" diff --git a/integration-tests/deployment/jd/csa/v1/csa.pb.go b/integration-tests/deployment/jd/csa/v1/csa.pb.go deleted file mode 100644 index 77ad4be4c0f..00000000000 --- a/integration-tests/deployment/jd/csa/v1/csa.pb.go +++ /dev/null @@ -1,418 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.29.0 -// protoc v4.25.3 -// source: csa/v1/csa.proto - -package v1 - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type Keypair struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - PublicKey string `protobuf:"bytes,2,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` - CreatedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` -} - -func (x *Keypair) Reset() { - *x = Keypair{} - if protoimpl.UnsafeEnabled { - mi := &file_csa_v1_csa_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Keypair) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Keypair) ProtoMessage() {} - -func (x *Keypair) ProtoReflect() protoreflect.Message { - mi := &file_csa_v1_csa_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Keypair.ProtoReflect.Descriptor instead. -func (*Keypair) Descriptor() ([]byte, []int) { - return file_csa_v1_csa_proto_rawDescGZIP(), []int{0} -} - -func (x *Keypair) GetId() int64 { - if x != nil { - return x.Id - } - return 0 -} - -func (x *Keypair) GetPublicKey() string { - if x != nil { - return x.PublicKey - } - return "" -} - -func (x *Keypair) GetCreatedAt() *timestamppb.Timestamp { - if x != nil { - return x.CreatedAt - } - return nil -} - -type GetKeypairRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *GetKeypairRequest) Reset() { - *x = GetKeypairRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_csa_v1_csa_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetKeypairRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetKeypairRequest) ProtoMessage() {} - -func (x *GetKeypairRequest) ProtoReflect() protoreflect.Message { - mi := &file_csa_v1_csa_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetKeypairRequest.ProtoReflect.Descriptor instead. -func (*GetKeypairRequest) Descriptor() ([]byte, []int) { - return file_csa_v1_csa_proto_rawDescGZIP(), []int{1} -} - -type GetKeypairResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Keypair *Keypair `protobuf:"bytes,1,opt,name=keypair,proto3" json:"keypair,omitempty"` -} - -func (x *GetKeypairResponse) Reset() { - *x = GetKeypairResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_csa_v1_csa_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetKeypairResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetKeypairResponse) ProtoMessage() {} - -func (x *GetKeypairResponse) ProtoReflect() protoreflect.Message { - mi := &file_csa_v1_csa_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetKeypairResponse.ProtoReflect.Descriptor instead. -func (*GetKeypairResponse) Descriptor() ([]byte, []int) { - return file_csa_v1_csa_proto_rawDescGZIP(), []int{2} -} - -func (x *GetKeypairResponse) GetKeypair() *Keypair { - if x != nil { - return x.Keypair - } - return nil -} - -type ListKeypairsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *ListKeypairsRequest) Reset() { - *x = ListKeypairsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_csa_v1_csa_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListKeypairsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListKeypairsRequest) ProtoMessage() {} - -func (x *ListKeypairsRequest) ProtoReflect() protoreflect.Message { - mi := &file_csa_v1_csa_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListKeypairsRequest.ProtoReflect.Descriptor instead. -func (*ListKeypairsRequest) Descriptor() ([]byte, []int) { - return file_csa_v1_csa_proto_rawDescGZIP(), []int{3} -} - -type ListKeypairsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Keypairs []*Keypair `protobuf:"bytes,1,rep,name=keypairs,proto3" json:"keypairs,omitempty"` -} - -func (x *ListKeypairsResponse) Reset() { - *x = ListKeypairsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_csa_v1_csa_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListKeypairsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListKeypairsResponse) ProtoMessage() {} - -func (x *ListKeypairsResponse) ProtoReflect() protoreflect.Message { - mi := &file_csa_v1_csa_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListKeypairsResponse.ProtoReflect.Descriptor instead. -func (*ListKeypairsResponse) Descriptor() ([]byte, []int) { - return file_csa_v1_csa_proto_rawDescGZIP(), []int{4} -} - -func (x *ListKeypairsResponse) GetKeypairs() []*Keypair { - if x != nil { - return x.Keypairs - } - return nil -} - -var File_csa_v1_csa_proto protoreflect.FileDescriptor - -var file_csa_v1_csa_proto_rawDesc = []byte{ - 0x0a, 0x10, 0x63, 0x73, 0x61, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x73, 0x61, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x0a, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x1a, 0x1f, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0x73, 0x0a, 0x07, 0x4b, 0x65, 0x79, 0x70, 0x61, 0x69, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x22, 0x13, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x70, 0x61, - 0x69, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x43, 0x0a, 0x12, 0x47, 0x65, 0x74, - 0x4b, 0x65, 0x79, 0x70, 0x61, 0x69, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2d, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x70, 0x61, 0x69, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, - 0x79, 0x70, 0x61, 0x69, 0x72, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x70, 0x61, 0x69, 0x72, 0x22, 0x15, - 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x70, 0x61, 0x69, 0x72, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x47, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x65, 0x79, - 0x70, 0x61, 0x69, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, - 0x08, 0x6b, 0x65, 0x79, 0x70, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x63, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, - 0x70, 0x61, 0x69, 0x72, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x70, 0x61, 0x69, 0x72, 0x73, 0x32, 0xac, - 0x01, 0x0a, 0x0a, 0x43, 0x53, 0x41, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4b, 0x0a, - 0x0a, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x70, 0x61, 0x69, 0x72, 0x12, 0x1d, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x63, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x70, - 0x61, 0x69, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x63, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x70, 0x61, - 0x69, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x4c, 0x69, - 0x73, 0x74, 0x4b, 0x65, 0x79, 0x70, 0x61, 0x69, 0x72, 0x73, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x63, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x70, - 0x61, 0x69, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x63, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x65, 0x79, - 0x70, 0x61, 0x69, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x08, 0x5a, - 0x06, 0x63, 0x73, 0x61, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_csa_v1_csa_proto_rawDescOnce sync.Once - file_csa_v1_csa_proto_rawDescData = file_csa_v1_csa_proto_rawDesc -) - -func file_csa_v1_csa_proto_rawDescGZIP() []byte { - file_csa_v1_csa_proto_rawDescOnce.Do(func() { - file_csa_v1_csa_proto_rawDescData = protoimpl.X.CompressGZIP(file_csa_v1_csa_proto_rawDescData) - }) - return file_csa_v1_csa_proto_rawDescData -} - -var file_csa_v1_csa_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_csa_v1_csa_proto_goTypes = []interface{}{ - (*Keypair)(nil), // 0: api.csa.v1.Keypair - (*GetKeypairRequest)(nil), // 1: api.csa.v1.GetKeypairRequest - (*GetKeypairResponse)(nil), // 2: api.csa.v1.GetKeypairResponse - (*ListKeypairsRequest)(nil), // 3: api.csa.v1.ListKeypairsRequest - (*ListKeypairsResponse)(nil), // 4: api.csa.v1.ListKeypairsResponse - (*timestamppb.Timestamp)(nil), // 5: google.protobuf.Timestamp -} -var file_csa_v1_csa_proto_depIdxs = []int32{ - 5, // 0: api.csa.v1.Keypair.created_at:type_name -> google.protobuf.Timestamp - 0, // 1: api.csa.v1.GetKeypairResponse.keypair:type_name -> api.csa.v1.Keypair - 0, // 2: api.csa.v1.ListKeypairsResponse.keypairs:type_name -> api.csa.v1.Keypair - 1, // 3: api.csa.v1.CSAService.GetKeypair:input_type -> api.csa.v1.GetKeypairRequest - 3, // 4: api.csa.v1.CSAService.ListKeypairs:input_type -> api.csa.v1.ListKeypairsRequest - 2, // 5: api.csa.v1.CSAService.GetKeypair:output_type -> api.csa.v1.GetKeypairResponse - 4, // 6: api.csa.v1.CSAService.ListKeypairs:output_type -> api.csa.v1.ListKeypairsResponse - 5, // [5:7] is the sub-list for method output_type - 3, // [3:5] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name -} - -func init() { file_csa_v1_csa_proto_init() } -func file_csa_v1_csa_proto_init() { - if File_csa_v1_csa_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_csa_v1_csa_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Keypair); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_csa_v1_csa_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetKeypairRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_csa_v1_csa_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetKeypairResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_csa_v1_csa_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListKeypairsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_csa_v1_csa_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListKeypairsResponse); 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_csa_v1_csa_proto_rawDesc, - NumEnums: 0, - NumMessages: 5, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_csa_v1_csa_proto_goTypes, - DependencyIndexes: file_csa_v1_csa_proto_depIdxs, - MessageInfos: file_csa_v1_csa_proto_msgTypes, - }.Build() - File_csa_v1_csa_proto = out.File - file_csa_v1_csa_proto_rawDesc = nil - file_csa_v1_csa_proto_goTypes = nil - file_csa_v1_csa_proto_depIdxs = nil -} diff --git a/integration-tests/deployment/jd/csa/v1/csa_grpc.pb.go b/integration-tests/deployment/jd/csa/v1/csa_grpc.pb.go deleted file mode 100644 index 7e058bd9fd7..00000000000 --- a/integration-tests/deployment/jd/csa/v1/csa_grpc.pb.go +++ /dev/null @@ -1,146 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.3 -// source: csa/v1/csa.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - CSAService_GetKeypair_FullMethodName = "/api.csa.v1.CSAService/GetKeypair" - CSAService_ListKeypairs_FullMethodName = "/api.csa.v1.CSAService/ListKeypairs" -) - -// CSAServiceClient is the client API for CSAService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type CSAServiceClient interface { - GetKeypair(ctx context.Context, in *GetKeypairRequest, opts ...grpc.CallOption) (*GetKeypairResponse, error) - ListKeypairs(ctx context.Context, in *ListKeypairsRequest, opts ...grpc.CallOption) (*ListKeypairsResponse, error) -} - -type cSAServiceClient struct { - cc grpc.ClientConnInterface -} - -func NewCSAServiceClient(cc grpc.ClientConnInterface) CSAServiceClient { - return &cSAServiceClient{cc} -} - -func (c *cSAServiceClient) GetKeypair(ctx context.Context, in *GetKeypairRequest, opts ...grpc.CallOption) (*GetKeypairResponse, error) { - out := new(GetKeypairResponse) - err := c.cc.Invoke(ctx, CSAService_GetKeypair_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *cSAServiceClient) ListKeypairs(ctx context.Context, in *ListKeypairsRequest, opts ...grpc.CallOption) (*ListKeypairsResponse, error) { - out := new(ListKeypairsResponse) - err := c.cc.Invoke(ctx, CSAService_ListKeypairs_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// CSAServiceServer is the server API for CSAService service. -// All implementations must embed UnimplementedCSAServiceServer -// for forward compatibility -type CSAServiceServer interface { - GetKeypair(context.Context, *GetKeypairRequest) (*GetKeypairResponse, error) - ListKeypairs(context.Context, *ListKeypairsRequest) (*ListKeypairsResponse, error) - mustEmbedUnimplementedCSAServiceServer() -} - -// UnimplementedCSAServiceServer must be embedded to have forward compatible implementations. -type UnimplementedCSAServiceServer struct { -} - -func (UnimplementedCSAServiceServer) GetKeypair(context.Context, *GetKeypairRequest) (*GetKeypairResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetKeypair not implemented") -} -func (UnimplementedCSAServiceServer) ListKeypairs(context.Context, *ListKeypairsRequest) (*ListKeypairsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListKeypairs not implemented") -} -func (UnimplementedCSAServiceServer) mustEmbedUnimplementedCSAServiceServer() {} - -// UnsafeCSAServiceServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to CSAServiceServer will -// result in compilation errors. -type UnsafeCSAServiceServer interface { - mustEmbedUnimplementedCSAServiceServer() -} - -func RegisterCSAServiceServer(s grpc.ServiceRegistrar, srv CSAServiceServer) { - s.RegisterService(&CSAService_ServiceDesc, srv) -} - -func _CSAService_GetKeypair_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetKeypairRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(CSAServiceServer).GetKeypair(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: CSAService_GetKeypair_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(CSAServiceServer).GetKeypair(ctx, req.(*GetKeypairRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _CSAService_ListKeypairs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListKeypairsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(CSAServiceServer).ListKeypairs(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: CSAService_ListKeypairs_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(CSAServiceServer).ListKeypairs(ctx, req.(*ListKeypairsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// CSAService_ServiceDesc is the grpc.ServiceDesc for CSAService service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var CSAService_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "api.csa.v1.CSAService", - HandlerType: (*CSAServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "GetKeypair", - Handler: _CSAService_GetKeypair_Handler, - }, - { - MethodName: "ListKeypairs", - Handler: _CSAService_ListKeypairs_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "csa/v1/csa.proto", -} \ No newline at end of file diff --git a/integration-tests/deployment/jd/job/v1/job.pb.go b/integration-tests/deployment/jd/job/v1/job.pb.go deleted file mode 100644 index 5544a12bdd5..00000000000 --- a/integration-tests/deployment/jd/job/v1/job.pb.go +++ /dev/null @@ -1,1994 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.29.0 -// protoc v4.25.3 -// source: job/v1/job.proto - -package v1 - -import ( - ptypes "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/shared/ptypes" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// ProposalStatus defines the possible states of a job proposal. -type ProposalStatus int32 - -const ( - ProposalStatus_PROPOSAL_STATUS_UNSPECIFIED ProposalStatus = 0 - ProposalStatus_PROPOSAL_STATUS_PROPOSED ProposalStatus = 1 // Proposal has been made but not yet decided upon. - ProposalStatus_PROPOSAL_STATUS_APPROVED ProposalStatus = 2 // Proposal has been accepted. - ProposalStatus_PROPOSAL_STATUS_REJECTED ProposalStatus = 3 // Proposal has been rejected. - ProposalStatus_PROPOSAL_STATUS_CANCELLED ProposalStatus = 4 // Proposal has been cancelled. - ProposalStatus_PROPOSAL_STATUS_PENDING ProposalStatus = 5 // Proposal is pending review. - ProposalStatus_PROPOSAL_STATUS_REVOKED ProposalStatus = 6 // Proposal has been revoked after being proposed. -) - -// Enum value maps for ProposalStatus. -var ( - ProposalStatus_name = map[int32]string{ - 0: "PROPOSAL_STATUS_UNSPECIFIED", - 1: "PROPOSAL_STATUS_PROPOSED", - 2: "PROPOSAL_STATUS_APPROVED", - 3: "PROPOSAL_STATUS_REJECTED", - 4: "PROPOSAL_STATUS_CANCELLED", - 5: "PROPOSAL_STATUS_PENDING", - 6: "PROPOSAL_STATUS_REVOKED", - } - ProposalStatus_value = map[string]int32{ - "PROPOSAL_STATUS_UNSPECIFIED": 0, - "PROPOSAL_STATUS_PROPOSED": 1, - "PROPOSAL_STATUS_APPROVED": 2, - "PROPOSAL_STATUS_REJECTED": 3, - "PROPOSAL_STATUS_CANCELLED": 4, - "PROPOSAL_STATUS_PENDING": 5, - "PROPOSAL_STATUS_REVOKED": 6, - } -) - -func (x ProposalStatus) Enum() *ProposalStatus { - p := new(ProposalStatus) - *p = x - return p -} - -func (x ProposalStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ProposalStatus) Descriptor() protoreflect.EnumDescriptor { - return file_job_v1_job_proto_enumTypes[0].Descriptor() -} - -func (ProposalStatus) Type() protoreflect.EnumType { - return &file_job_v1_job_proto_enumTypes[0] -} - -func (x ProposalStatus) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ProposalStatus.Descriptor instead. -func (ProposalStatus) EnumDescriptor() ([]byte, []int) { - return file_job_v1_job_proto_rawDescGZIP(), []int{0} -} - -// ProposalDeliveryStatus defines the delivery status of the proposal to the node. -type ProposalDeliveryStatus int32 - -const ( - ProposalDeliveryStatus_PROPOSAL_DELIVERY_STATUS_UNSPECIFIED ProposalDeliveryStatus = 0 - ProposalDeliveryStatus_PROPOSAL_DELIVERY_STATUS_DELIVERED ProposalDeliveryStatus = 1 // Delivered to the node. - ProposalDeliveryStatus_PROPOSAL_DELIVERY_STATUS_ACKNOWLEDGED ProposalDeliveryStatus = 2 // Acknowledged by the node. - ProposalDeliveryStatus_PROPOSAL_DELIVERY_STATUS_FAILED ProposalDeliveryStatus = 3 // Delivery failed. -) - -// Enum value maps for ProposalDeliveryStatus. -var ( - ProposalDeliveryStatus_name = map[int32]string{ - 0: "PROPOSAL_DELIVERY_STATUS_UNSPECIFIED", - 1: "PROPOSAL_DELIVERY_STATUS_DELIVERED", - 2: "PROPOSAL_DELIVERY_STATUS_ACKNOWLEDGED", - 3: "PROPOSAL_DELIVERY_STATUS_FAILED", - } - ProposalDeliveryStatus_value = map[string]int32{ - "PROPOSAL_DELIVERY_STATUS_UNSPECIFIED": 0, - "PROPOSAL_DELIVERY_STATUS_DELIVERED": 1, - "PROPOSAL_DELIVERY_STATUS_ACKNOWLEDGED": 2, - "PROPOSAL_DELIVERY_STATUS_FAILED": 3, - } -) - -func (x ProposalDeliveryStatus) Enum() *ProposalDeliveryStatus { - p := new(ProposalDeliveryStatus) - *p = x - return p -} - -func (x ProposalDeliveryStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ProposalDeliveryStatus) Descriptor() protoreflect.EnumDescriptor { - return file_job_v1_job_proto_enumTypes[1].Descriptor() -} - -func (ProposalDeliveryStatus) Type() protoreflect.EnumType { - return &file_job_v1_job_proto_enumTypes[1] -} - -func (x ProposalDeliveryStatus) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ProposalDeliveryStatus.Descriptor instead. -func (ProposalDeliveryStatus) EnumDescriptor() ([]byte, []int) { - return file_job_v1_job_proto_rawDescGZIP(), []int{1} -} - -// Job represents the structured data of a job within the system. -type Job struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique identifier for the job. - Uuid string `protobuf:"bytes,2,opt,name=uuid,proto3" json:"uuid,omitempty"` // Universally unique identifier for the job. - NodeId string `protobuf:"bytes,3,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` // ID of the node associated with this job. - ProposalIds []string `protobuf:"bytes,4,rep,name=proposal_ids,json=proposalIds,proto3" json:"proposal_ids,omitempty"` // List of proposal IDs associated with this job. - CreatedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // Timestamp when the job was created. - UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` // Timestamp when the job was last updated. - DeletedAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=deleted_at,json=deletedAt,proto3" json:"deleted_at,omitempty"` // Timestamp when the job was deleted, if applicable. - Labels []*ptypes.Label `protobuf:"bytes,8,rep,name=labels,proto3" json:"labels,omitempty"` // Set of labels associated with the job. -} - -func (x *Job) Reset() { - *x = Job{} - if protoimpl.UnsafeEnabled { - mi := &file_job_v1_job_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Job) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Job) ProtoMessage() {} - -func (x *Job) ProtoReflect() protoreflect.Message { - mi := &file_job_v1_job_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Job.ProtoReflect.Descriptor instead. -func (*Job) Descriptor() ([]byte, []int) { - return file_job_v1_job_proto_rawDescGZIP(), []int{0} -} - -func (x *Job) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Job) GetUuid() string { - if x != nil { - return x.Uuid - } - return "" -} - -func (x *Job) GetNodeId() string { - if x != nil { - return x.NodeId - } - return "" -} - -func (x *Job) GetProposalIds() []string { - if x != nil { - return x.ProposalIds - } - return nil -} - -func (x *Job) GetCreatedAt() *timestamppb.Timestamp { - if x != nil { - return x.CreatedAt - } - return nil -} - -func (x *Job) GetUpdatedAt() *timestamppb.Timestamp { - if x != nil { - return x.UpdatedAt - } - return nil -} - -func (x *Job) GetDeletedAt() *timestamppb.Timestamp { - if x != nil { - return x.DeletedAt - } - return nil -} - -func (x *Job) GetLabels() []*ptypes.Label { - if x != nil { - return x.Labels - } - return nil -} - -// Proposal represents a job proposal. -type Proposal struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique identifier for the proposal. - Revision int64 `protobuf:"varint,2,opt,name=revision,proto3" json:"revision,omitempty"` // Revision number of the proposal. Montonically increasing. - Status ProposalStatus `protobuf:"varint,3,opt,name=status,proto3,enum=api.job.v1.ProposalStatus" json:"status,omitempty"` // Current status of the proposal. - DeliveryStatus ProposalDeliveryStatus `protobuf:"varint,4,opt,name=delivery_status,json=deliveryStatus,proto3,enum=api.job.v1.ProposalDeliveryStatus" json:"delivery_status,omitempty"` // Delivery status of the proposal. - Spec string `protobuf:"bytes,5,opt,name=spec,proto3" json:"spec,omitempty"` // Specification of the job proposed. - JobId string `protobuf:"bytes,6,opt,name=job_id,json=jobId,proto3" json:"job_id,omitempty"` // ID of the job associated with this proposal. - CreatedAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // Timestamp when the proposal was created. - UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` // Timestamp when the proposal was last updated. - AckedAt *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=acked_at,json=ackedAt,proto3,oneof" json:"acked_at,omitempty"` // Timestamp when the proposal was acknowledged. - ResponseReceivedAt *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=response_received_at,json=responseReceivedAt,proto3,oneof" json:"response_received_at,omitempty"` // Timestamp when a response was received. -} - -func (x *Proposal) Reset() { - *x = Proposal{} - if protoimpl.UnsafeEnabled { - mi := &file_job_v1_job_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Proposal) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Proposal) ProtoMessage() {} - -func (x *Proposal) ProtoReflect() protoreflect.Message { - mi := &file_job_v1_job_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Proposal.ProtoReflect.Descriptor instead. -func (*Proposal) Descriptor() ([]byte, []int) { - return file_job_v1_job_proto_rawDescGZIP(), []int{1} -} - -func (x *Proposal) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Proposal) GetRevision() int64 { - if x != nil { - return x.Revision - } - return 0 -} - -func (x *Proposal) GetStatus() ProposalStatus { - if x != nil { - return x.Status - } - return ProposalStatus_PROPOSAL_STATUS_UNSPECIFIED -} - -func (x *Proposal) GetDeliveryStatus() ProposalDeliveryStatus { - if x != nil { - return x.DeliveryStatus - } - return ProposalDeliveryStatus_PROPOSAL_DELIVERY_STATUS_UNSPECIFIED -} - -func (x *Proposal) GetSpec() string { - if x != nil { - return x.Spec - } - return "" -} - -func (x *Proposal) GetJobId() string { - if x != nil { - return x.JobId - } - return "" -} - -func (x *Proposal) GetCreatedAt() *timestamppb.Timestamp { - if x != nil { - return x.CreatedAt - } - return nil -} - -func (x *Proposal) GetUpdatedAt() *timestamppb.Timestamp { - if x != nil { - return x.UpdatedAt - } - return nil -} - -func (x *Proposal) GetAckedAt() *timestamppb.Timestamp { - if x != nil { - return x.AckedAt - } - return nil -} - -func (x *Proposal) GetResponseReceivedAt() *timestamppb.Timestamp { - if x != nil { - return x.ResponseReceivedAt - } - return nil -} - -// GetJobRequest specifies the criteria for retrieving a job. -type GetJobRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to IdOneof: - // - // *GetJobRequest_Id - // *GetJobRequest_Uuid - IdOneof isGetJobRequest_IdOneof `protobuf_oneof:"id_oneof"` -} - -func (x *GetJobRequest) Reset() { - *x = GetJobRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_job_v1_job_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetJobRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetJobRequest) ProtoMessage() {} - -func (x *GetJobRequest) ProtoReflect() protoreflect.Message { - mi := &file_job_v1_job_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetJobRequest.ProtoReflect.Descriptor instead. -func (*GetJobRequest) Descriptor() ([]byte, []int) { - return file_job_v1_job_proto_rawDescGZIP(), []int{2} -} - -func (m *GetJobRequest) GetIdOneof() isGetJobRequest_IdOneof { - if m != nil { - return m.IdOneof - } - return nil -} - -func (x *GetJobRequest) GetId() string { - if x, ok := x.GetIdOneof().(*GetJobRequest_Id); ok { - return x.Id - } - return "" -} - -func (x *GetJobRequest) GetUuid() string { - if x, ok := x.GetIdOneof().(*GetJobRequest_Uuid); ok { - return x.Uuid - } - return "" -} - -type isGetJobRequest_IdOneof interface { - isGetJobRequest_IdOneof() -} - -type GetJobRequest_Id struct { - Id string `protobuf:"bytes,1,opt,name=id,proto3,oneof"` // Unique identifier of the job. -} - -type GetJobRequest_Uuid struct { - Uuid string `protobuf:"bytes,2,opt,name=uuid,proto3,oneof"` // Universally unique identifier of the job. -} - -func (*GetJobRequest_Id) isGetJobRequest_IdOneof() {} - -func (*GetJobRequest_Uuid) isGetJobRequest_IdOneof() {} - -// GetJobResponse contains the job details. -type GetJobResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Job *Job `protobuf:"bytes,1,opt,name=job,proto3" json:"job,omitempty"` // Details of the retrieved job. -} - -func (x *GetJobResponse) Reset() { - *x = GetJobResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_job_v1_job_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetJobResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetJobResponse) ProtoMessage() {} - -func (x *GetJobResponse) ProtoReflect() protoreflect.Message { - mi := &file_job_v1_job_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetJobResponse.ProtoReflect.Descriptor instead. -func (*GetJobResponse) Descriptor() ([]byte, []int) { - return file_job_v1_job_proto_rawDescGZIP(), []int{3} -} - -func (x *GetJobResponse) GetJob() *Job { - if x != nil { - return x.Job - } - return nil -} - -// GetProposalRequest specifies the criteria for retrieving a proposal. -type GetProposalRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique identifier of the proposal to retrieve. -} - -func (x *GetProposalRequest) Reset() { - *x = GetProposalRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_job_v1_job_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetProposalRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetProposalRequest) ProtoMessage() {} - -func (x *GetProposalRequest) ProtoReflect() protoreflect.Message { - mi := &file_job_v1_job_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetProposalRequest.ProtoReflect.Descriptor instead. -func (*GetProposalRequest) Descriptor() ([]byte, []int) { - return file_job_v1_job_proto_rawDescGZIP(), []int{4} -} - -func (x *GetProposalRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -// GetProposalResponse contains the proposal details. -type GetProposalResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Proposal *Proposal `protobuf:"bytes,1,opt,name=proposal,proto3" json:"proposal,omitempty"` // Details of the retrieved proposal. -} - -func (x *GetProposalResponse) Reset() { - *x = GetProposalResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_job_v1_job_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetProposalResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetProposalResponse) ProtoMessage() {} - -func (x *GetProposalResponse) ProtoReflect() protoreflect.Message { - mi := &file_job_v1_job_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetProposalResponse.ProtoReflect.Descriptor instead. -func (*GetProposalResponse) Descriptor() ([]byte, []int) { - return file_job_v1_job_proto_rawDescGZIP(), []int{5} -} - -func (x *GetProposalResponse) GetProposal() *Proposal { - if x != nil { - return x.Proposal - } - return nil -} - -// ListJobsRequest specifies filters for listing jobs. -type ListJobsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Filter *ListJobsRequest_Filter `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` // Filters applied to the job listing. -} - -func (x *ListJobsRequest) Reset() { - *x = ListJobsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_job_v1_job_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListJobsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListJobsRequest) ProtoMessage() {} - -func (x *ListJobsRequest) ProtoReflect() protoreflect.Message { - mi := &file_job_v1_job_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListJobsRequest.ProtoReflect.Descriptor instead. -func (*ListJobsRequest) Descriptor() ([]byte, []int) { - return file_job_v1_job_proto_rawDescGZIP(), []int{6} -} - -func (x *ListJobsRequest) GetFilter() *ListJobsRequest_Filter { - if x != nil { - return x.Filter - } - return nil -} - -// ListJobsResponse contains a list of jobs that match the filters. -type ListJobsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Jobs []*Job `protobuf:"bytes,1,rep,name=jobs,proto3" json:"jobs,omitempty"` // List of jobs. -} - -func (x *ListJobsResponse) Reset() { - *x = ListJobsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_job_v1_job_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListJobsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListJobsResponse) ProtoMessage() {} - -func (x *ListJobsResponse) ProtoReflect() protoreflect.Message { - mi := &file_job_v1_job_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListJobsResponse.ProtoReflect.Descriptor instead. -func (*ListJobsResponse) Descriptor() ([]byte, []int) { - return file_job_v1_job_proto_rawDescGZIP(), []int{7} -} - -func (x *ListJobsResponse) GetJobs() []*Job { - if x != nil { - return x.Jobs - } - return nil -} - -// ListProposalsRequest specifies filters for listing proposals. -type ListProposalsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Filter *ListProposalsRequest_Filter `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` // Filters applied to the proposal listing. -} - -func (x *ListProposalsRequest) Reset() { - *x = ListProposalsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_job_v1_job_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListProposalsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListProposalsRequest) ProtoMessage() {} - -func (x *ListProposalsRequest) ProtoReflect() protoreflect.Message { - mi := &file_job_v1_job_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListProposalsRequest.ProtoReflect.Descriptor instead. -func (*ListProposalsRequest) Descriptor() ([]byte, []int) { - return file_job_v1_job_proto_rawDescGZIP(), []int{8} -} - -func (x *ListProposalsRequest) GetFilter() *ListProposalsRequest_Filter { - if x != nil { - return x.Filter - } - return nil -} - -// ListProposalsResponse contains a list of proposals that match the filters. -type ListProposalsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Proposals []*Proposal `protobuf:"bytes,1,rep,name=proposals,proto3" json:"proposals,omitempty"` // List of proposals. -} - -func (x *ListProposalsResponse) Reset() { - *x = ListProposalsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_job_v1_job_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListProposalsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListProposalsResponse) ProtoMessage() {} - -func (x *ListProposalsResponse) ProtoReflect() protoreflect.Message { - mi := &file_job_v1_job_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListProposalsResponse.ProtoReflect.Descriptor instead. -func (*ListProposalsResponse) Descriptor() ([]byte, []int) { - return file_job_v1_job_proto_rawDescGZIP(), []int{9} -} - -func (x *ListProposalsResponse) GetProposals() []*Proposal { - if x != nil { - return x.Proposals - } - return nil -} - -// ProposeJobRequest contains the information needed to submit a new job proposal. -type ProposeJobRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - NodeId string `protobuf:"bytes,1,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` // ID of the node to which the job is proposed. - Spec string `protobuf:"bytes,2,opt,name=spec,proto3" json:"spec,omitempty"` // Specification of the job being proposed. - Labels []*ptypes.Label `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty"` // Labels to associate with the job. -} - -func (x *ProposeJobRequest) Reset() { - *x = ProposeJobRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_job_v1_job_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ProposeJobRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProposeJobRequest) ProtoMessage() {} - -func (x *ProposeJobRequest) ProtoReflect() protoreflect.Message { - mi := &file_job_v1_job_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) -} - -// Deprecated: Use ProposeJobRequest.ProtoReflect.Descriptor instead. -func (*ProposeJobRequest) Descriptor() ([]byte, []int) { - return file_job_v1_job_proto_rawDescGZIP(), []int{10} -} - -func (x *ProposeJobRequest) GetNodeId() string { - if x != nil { - return x.NodeId - } - return "" -} - -func (x *ProposeJobRequest) GetSpec() string { - if x != nil { - return x.Spec - } - return "" -} - -func (x *ProposeJobRequest) GetLabels() []*ptypes.Label { - if x != nil { - return x.Labels - } - return nil -} - -// ProposeJobResponse returns the newly created proposal. -type ProposeJobResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Proposal *Proposal `protobuf:"bytes,1,opt,name=proposal,proto3" json:"proposal,omitempty"` // Details of the newly created proposal. -} - -func (x *ProposeJobResponse) Reset() { - *x = ProposeJobResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_job_v1_job_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ProposeJobResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProposeJobResponse) ProtoMessage() {} - -func (x *ProposeJobResponse) ProtoReflect() protoreflect.Message { - mi := &file_job_v1_job_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) -} - -// Deprecated: Use ProposeJobResponse.ProtoReflect.Descriptor instead. -func (*ProposeJobResponse) Descriptor() ([]byte, []int) { - return file_job_v1_job_proto_rawDescGZIP(), []int{11} -} - -func (x *ProposeJobResponse) GetProposal() *Proposal { - if x != nil { - return x.Proposal - } - return nil -} - -// RevokeJobRequest specifies the criteria for revoking a job proposal. -type RevokeJobRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to IdOneof: - // - // *RevokeJobRequest_Id - // *RevokeJobRequest_Uuid - IdOneof isRevokeJobRequest_IdOneof `protobuf_oneof:"id_oneof"` -} - -func (x *RevokeJobRequest) Reset() { - *x = RevokeJobRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_job_v1_job_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RevokeJobRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RevokeJobRequest) ProtoMessage() {} - -func (x *RevokeJobRequest) ProtoReflect() protoreflect.Message { - mi := &file_job_v1_job_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RevokeJobRequest.ProtoReflect.Descriptor instead. -func (*RevokeJobRequest) Descriptor() ([]byte, []int) { - return file_job_v1_job_proto_rawDescGZIP(), []int{12} -} - -func (m *RevokeJobRequest) GetIdOneof() isRevokeJobRequest_IdOneof { - if m != nil { - return m.IdOneof - } - return nil -} - -func (x *RevokeJobRequest) GetId() string { - if x, ok := x.GetIdOneof().(*RevokeJobRequest_Id); ok { - return x.Id - } - return "" -} - -func (x *RevokeJobRequest) GetUuid() string { - if x, ok := x.GetIdOneof().(*RevokeJobRequest_Uuid); ok { - return x.Uuid - } - return "" -} - -type isRevokeJobRequest_IdOneof interface { - isRevokeJobRequest_IdOneof() -} - -type RevokeJobRequest_Id struct { - Id string `protobuf:"bytes,1,opt,name=id,proto3,oneof"` // Unique identifier of the proposal to revoke. -} - -type RevokeJobRequest_Uuid struct { - Uuid string `protobuf:"bytes,2,opt,name=uuid,proto3,oneof"` // Universally unique identifier of the proposal to revoke. -} - -func (*RevokeJobRequest_Id) isRevokeJobRequest_IdOneof() {} - -func (*RevokeJobRequest_Uuid) isRevokeJobRequest_IdOneof() {} - -// RevokeJobResponse returns the revoked proposal. -type RevokeJobResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Proposal *Proposal `protobuf:"bytes,1,opt,name=proposal,proto3" json:"proposal,omitempty"` // Details of the revoked proposal. -} - -func (x *RevokeJobResponse) Reset() { - *x = RevokeJobResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_job_v1_job_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RevokeJobResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RevokeJobResponse) ProtoMessage() {} - -func (x *RevokeJobResponse) ProtoReflect() protoreflect.Message { - mi := &file_job_v1_job_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) -} - -// Deprecated: Use RevokeJobResponse.ProtoReflect.Descriptor instead. -func (*RevokeJobResponse) Descriptor() ([]byte, []int) { - return file_job_v1_job_proto_rawDescGZIP(), []int{13} -} - -func (x *RevokeJobResponse) GetProposal() *Proposal { - if x != nil { - return x.Proposal - } - return nil -} - -// DeleteJobRequest specifies the criteria for deleting a job. -type DeleteJobRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to IdOneof: - // - // *DeleteJobRequest_Id - // *DeleteJobRequest_Uuid - IdOneof isDeleteJobRequest_IdOneof `protobuf_oneof:"id_oneof"` -} - -func (x *DeleteJobRequest) Reset() { - *x = DeleteJobRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_job_v1_job_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteJobRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteJobRequest) ProtoMessage() {} - -func (x *DeleteJobRequest) ProtoReflect() protoreflect.Message { - mi := &file_job_v1_job_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteJobRequest.ProtoReflect.Descriptor instead. -func (*DeleteJobRequest) Descriptor() ([]byte, []int) { - return file_job_v1_job_proto_rawDescGZIP(), []int{14} -} - -func (m *DeleteJobRequest) GetIdOneof() isDeleteJobRequest_IdOneof { - if m != nil { - return m.IdOneof - } - return nil -} - -func (x *DeleteJobRequest) GetId() string { - if x, ok := x.GetIdOneof().(*DeleteJobRequest_Id); ok { - return x.Id - } - return "" -} - -func (x *DeleteJobRequest) GetUuid() string { - if x, ok := x.GetIdOneof().(*DeleteJobRequest_Uuid); ok { - return x.Uuid - } - return "" -} - -type isDeleteJobRequest_IdOneof interface { - isDeleteJobRequest_IdOneof() -} - -type DeleteJobRequest_Id struct { - Id string `protobuf:"bytes,1,opt,name=id,proto3,oneof"` // Unique identifier of the job to delete. -} - -type DeleteJobRequest_Uuid struct { - Uuid string `protobuf:"bytes,2,opt,name=uuid,proto3,oneof"` // Universally unique identifier of the job to delete. -} - -func (*DeleteJobRequest_Id) isDeleteJobRequest_IdOneof() {} - -func (*DeleteJobRequest_Uuid) isDeleteJobRequest_IdOneof() {} - -// DeleteJobResponse returns details of the deleted job. -type DeleteJobResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Job *Job `protobuf:"bytes,1,opt,name=job,proto3" json:"job,omitempty"` // Details of the deleted job. -} - -func (x *DeleteJobResponse) Reset() { - *x = DeleteJobResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_job_v1_job_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteJobResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteJobResponse) ProtoMessage() {} - -func (x *DeleteJobResponse) ProtoReflect() protoreflect.Message { - mi := &file_job_v1_job_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteJobResponse.ProtoReflect.Descriptor instead. -func (*DeleteJobResponse) Descriptor() ([]byte, []int) { - return file_job_v1_job_proto_rawDescGZIP(), []int{15} -} - -func (x *DeleteJobResponse) GetJob() *Job { - if x != nil { - return x.Job - } - return nil -} - -// UpdateJobRequest specifies the criteria for updating a job. -type UpdateJobRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to IdOneof: - // - // *UpdateJobRequest_Id - // *UpdateJobRequest_Uuid - IdOneof isUpdateJobRequest_IdOneof `protobuf_oneof:"id_oneof"` - Labels []*ptypes.Label `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty"` // Set of labels associated with the job. -} - -func (x *UpdateJobRequest) Reset() { - *x = UpdateJobRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_job_v1_job_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UpdateJobRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateJobRequest) ProtoMessage() {} - -func (x *UpdateJobRequest) ProtoReflect() protoreflect.Message { - mi := &file_job_v1_job_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateJobRequest.ProtoReflect.Descriptor instead. -func (*UpdateJobRequest) Descriptor() ([]byte, []int) { - return file_job_v1_job_proto_rawDescGZIP(), []int{16} -} - -func (m *UpdateJobRequest) GetIdOneof() isUpdateJobRequest_IdOneof { - if m != nil { - return m.IdOneof - } - return nil -} - -func (x *UpdateJobRequest) GetId() string { - if x, ok := x.GetIdOneof().(*UpdateJobRequest_Id); ok { - return x.Id - } - return "" -} - -func (x *UpdateJobRequest) GetUuid() string { - if x, ok := x.GetIdOneof().(*UpdateJobRequest_Uuid); ok { - return x.Uuid - } - return "" -} - -func (x *UpdateJobRequest) GetLabels() []*ptypes.Label { - if x != nil { - return x.Labels - } - return nil -} - -type isUpdateJobRequest_IdOneof interface { - isUpdateJobRequest_IdOneof() -} - -type UpdateJobRequest_Id struct { - Id string `protobuf:"bytes,1,opt,name=id,proto3,oneof"` // Unique identifier of the job to update. -} - -type UpdateJobRequest_Uuid struct { - Uuid string `protobuf:"bytes,2,opt,name=uuid,proto3,oneof"` // Universally unique identifier of the job to update. -} - -func (*UpdateJobRequest_Id) isUpdateJobRequest_IdOneof() {} - -func (*UpdateJobRequest_Uuid) isUpdateJobRequest_IdOneof() {} - -// UpdateJobResponse returns details of the updated job. -type UpdateJobResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Job *Job `protobuf:"bytes,1,opt,name=job,proto3" json:"job,omitempty"` // Details of the updated job. -} - -func (x *UpdateJobResponse) Reset() { - *x = UpdateJobResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_job_v1_job_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UpdateJobResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateJobResponse) ProtoMessage() {} - -func (x *UpdateJobResponse) ProtoReflect() protoreflect.Message { - mi := &file_job_v1_job_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateJobResponse.ProtoReflect.Descriptor instead. -func (*UpdateJobResponse) Descriptor() ([]byte, []int) { - return file_job_v1_job_proto_rawDescGZIP(), []int{17} -} - -func (x *UpdateJobResponse) GetJob() *Job { - if x != nil { - return x.Job - } - return nil -} - -type ListJobsRequest_Filter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` // Filter by job IDs. - NodeIds []string `protobuf:"bytes,2,rep,name=node_ids,json=nodeIds,proto3" json:"node_ids,omitempty"` // Filter by node IDs. - Selectors []*ptypes.Selector `protobuf:"bytes,3,rep,name=selectors,proto3" json:"selectors,omitempty"` // Filter by selectors -} - -func (x *ListJobsRequest_Filter) Reset() { - *x = ListJobsRequest_Filter{} - if protoimpl.UnsafeEnabled { - mi := &file_job_v1_job_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListJobsRequest_Filter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListJobsRequest_Filter) ProtoMessage() {} - -func (x *ListJobsRequest_Filter) ProtoReflect() protoreflect.Message { - mi := &file_job_v1_job_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) -} - -// Deprecated: Use ListJobsRequest_Filter.ProtoReflect.Descriptor instead. -func (*ListJobsRequest_Filter) Descriptor() ([]byte, []int) { - return file_job_v1_job_proto_rawDescGZIP(), []int{6, 0} -} - -func (x *ListJobsRequest_Filter) GetIds() []string { - if x != nil { - return x.Ids - } - return nil -} - -func (x *ListJobsRequest_Filter) GetNodeIds() []string { - if x != nil { - return x.NodeIds - } - return nil -} - -func (x *ListJobsRequest_Filter) GetSelectors() []*ptypes.Selector { - if x != nil { - return x.Selectors - } - return nil -} - -type ListProposalsRequest_Filter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` // Filter by proposal IDs. - JobIds []string `protobuf:"bytes,2,rep,name=job_ids,json=jobIds,proto3" json:"job_ids,omitempty"` // Filter by job IDs. -} - -func (x *ListProposalsRequest_Filter) Reset() { - *x = ListProposalsRequest_Filter{} - if protoimpl.UnsafeEnabled { - mi := &file_job_v1_job_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListProposalsRequest_Filter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListProposalsRequest_Filter) ProtoMessage() {} - -func (x *ListProposalsRequest_Filter) ProtoReflect() protoreflect.Message { - mi := &file_job_v1_job_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListProposalsRequest_Filter.ProtoReflect.Descriptor instead. -func (*ListProposalsRequest_Filter) Descriptor() ([]byte, []int) { - return file_job_v1_job_proto_rawDescGZIP(), []int{8, 0} -} - -func (x *ListProposalsRequest_Filter) GetIds() []string { - if x != nil { - return x.Ids - } - return nil -} - -func (x *ListProposalsRequest_Filter) GetJobIds() []string { - if x != nil { - return x.JobIds - } - return nil -} - -var File_job_v1_job_proto protoreflect.FileDescriptor - -var file_job_v1_job_proto_rawDesc = []byte{ - 0x0a, 0x10, 0x6a, 0x6f, 0x62, 0x2f, 0x76, 0x31, 0x2f, 0x6a, 0x6f, 0x62, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x0a, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x1a, 0x1f, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x19, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x2f, 0x70, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc0, 0x02, 0x0a, 0x03, 0x4a, - 0x6f, 0x62, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, - 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, - 0x64, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, - 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x64, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x12, 0x28, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x08, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x2e, - 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, 0x8d, 0x04, - 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4b, 0x0a, 0x0f, 0x64, 0x65, - 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, - 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0e, 0x64, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, - 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x15, 0x0a, 0x06, 0x6a, - 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, - 0x49, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, - 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3a, 0x0a, 0x08, 0x61, 0x63, 0x6b, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x07, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x41, - 0x74, 0x88, 0x01, 0x01, 0x12, 0x51, 0x0a, 0x14, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x01, - 0x52, 0x12, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, - 0x65, 0x64, 0x41, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x61, 0x63, 0x6b, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x22, 0x43, 0x0a, - 0x0d, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x14, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x42, 0x0a, 0x0a, 0x08, 0x69, 0x64, 0x5f, 0x6f, 0x6e, 0x65, - 0x6f, 0x66, 0x22, 0x33, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x03, 0x6a, 0x6f, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x4a, - 0x6f, 0x62, 0x52, 0x03, 0x6a, 0x6f, 0x62, 0x22, 0x24, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x47, 0x0a, - 0x13, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x08, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x22, 0xb7, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x4a, - 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x06, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x68, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, - 0x64, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x73, 0x12, 0x31, 0x0a, - 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x2e, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, - 0x22, 0x37, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, - 0x4a, 0x6f, 0x62, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x22, 0x8c, 0x01, 0x0a, 0x14, 0x4c, 0x69, - 0x73, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x1a, 0x33, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, - 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, - 0x17, 0x0a, 0x07, 0x6a, 0x6f, 0x62, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x06, 0x6a, 0x6f, 0x62, 0x49, 0x64, 0x73, 0x22, 0x4b, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x32, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x61, 0x6c, 0x73, 0x22, 0x6a, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, - 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, - 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, - 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x28, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x22, 0x46, 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x4a, 0x6f, 0x62, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, - 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x22, 0x46, 0x0a, 0x10, 0x52, 0x65, 0x76, - 0x6f, 0x6b, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x14, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, - 0x04, 0x75, 0x75, 0x69, 0x64, 0x42, 0x0a, 0x0a, 0x08, 0x69, 0x64, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, - 0x66, 0x22, 0x45, 0x0a, 0x11, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, - 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x08, - 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x22, 0x46, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, - 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, - 0x75, 0x75, 0x69, 0x64, 0x42, 0x0a, 0x0a, 0x08, 0x69, 0x64, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, - 0x22, 0x36, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x03, 0x6a, 0x6f, 0x62, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, - 0x4a, 0x6f, 0x62, 0x52, 0x03, 0x6a, 0x6f, 0x62, 0x22, 0x70, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, - 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, - 0x75, 0x75, 0x69, 0x64, 0x12, 0x28, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x42, 0x0a, - 0x0a, 0x08, 0x69, 0x64, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x22, 0x36, 0x0a, 0x11, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x21, 0x0a, 0x03, 0x6a, 0x6f, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x03, 0x6a, - 0x6f, 0x62, 0x2a, 0xe4, 0x01, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x0a, 0x1b, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, - 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, - 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, - 0x45, 0x44, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, 0x4c, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x50, 0x50, 0x52, 0x4f, 0x56, 0x45, 0x44, - 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, 0x4c, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x45, 0x4a, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x03, - 0x12, 0x1d, 0x0a, 0x19, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, - 0x1b, 0x0a, 0x17, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x1b, 0x0a, 0x17, - 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x52, 0x45, 0x56, 0x4f, 0x4b, 0x45, 0x44, 0x10, 0x06, 0x2a, 0xba, 0x01, 0x0a, 0x16, 0x50, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x79, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x28, 0x0a, 0x24, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, 0x4c, - 0x5f, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x26, - 0x0a, 0x22, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, 0x4c, 0x5f, 0x44, 0x45, 0x4c, 0x49, 0x56, - 0x45, 0x52, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x49, 0x56, - 0x45, 0x52, 0x45, 0x44, 0x10, 0x01, 0x12, 0x29, 0x0a, 0x25, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, - 0x41, 0x4c, 0x5f, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x41, 0x43, 0x4b, 0x4e, 0x4f, 0x57, 0x4c, 0x45, 0x44, 0x47, 0x45, 0x44, 0x10, - 0x02, 0x12, 0x23, 0x0a, 0x1f, 0x50, 0x52, 0x4f, 0x50, 0x4f, 0x53, 0x41, 0x4c, 0x5f, 0x44, 0x45, - 0x4c, 0x49, 0x56, 0x45, 0x52, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, - 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x32, 0xf5, 0x04, 0x0a, 0x0a, 0x4a, 0x6f, 0x62, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x12, - 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, - 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, - 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x08, 0x4c, 0x69, - 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x73, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x0a, 0x50, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x4a, 0x6f, - 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, - 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x4a, 0x6f, 0x62, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x09, 0x52, 0x65, - 0x76, 0x6f, 0x6b, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, - 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x4a, 0x6f, 0x62, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x12, - 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x6a, 0x6f, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x08, - 0x5a, 0x06, 0x6a, 0x6f, 0x62, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_job_v1_job_proto_rawDescOnce sync.Once - file_job_v1_job_proto_rawDescData = file_job_v1_job_proto_rawDesc -) - -func file_job_v1_job_proto_rawDescGZIP() []byte { - file_job_v1_job_proto_rawDescOnce.Do(func() { - file_job_v1_job_proto_rawDescData = protoimpl.X.CompressGZIP(file_job_v1_job_proto_rawDescData) - }) - return file_job_v1_job_proto_rawDescData -} - -var file_job_v1_job_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_job_v1_job_proto_msgTypes = make([]protoimpl.MessageInfo, 20) -var file_job_v1_job_proto_goTypes = []interface{}{ - (ProposalStatus)(0), // 0: api.job.v1.ProposalStatus - (ProposalDeliveryStatus)(0), // 1: api.job.v1.ProposalDeliveryStatus - (*Job)(nil), // 2: api.job.v1.Job - (*Proposal)(nil), // 3: api.job.v1.Proposal - (*GetJobRequest)(nil), // 4: api.job.v1.GetJobRequest - (*GetJobResponse)(nil), // 5: api.job.v1.GetJobResponse - (*GetProposalRequest)(nil), // 6: api.job.v1.GetProposalRequest - (*GetProposalResponse)(nil), // 7: api.job.v1.GetProposalResponse - (*ListJobsRequest)(nil), // 8: api.job.v1.ListJobsRequest - (*ListJobsResponse)(nil), // 9: api.job.v1.ListJobsResponse - (*ListProposalsRequest)(nil), // 10: api.job.v1.ListProposalsRequest - (*ListProposalsResponse)(nil), // 11: api.job.v1.ListProposalsResponse - (*ProposeJobRequest)(nil), // 12: api.job.v1.ProposeJobRequest - (*ProposeJobResponse)(nil), // 13: api.job.v1.ProposeJobResponse - (*RevokeJobRequest)(nil), // 14: api.job.v1.RevokeJobRequest - (*RevokeJobResponse)(nil), // 15: api.job.v1.RevokeJobResponse - (*DeleteJobRequest)(nil), // 16: api.job.v1.DeleteJobRequest - (*DeleteJobResponse)(nil), // 17: api.job.v1.DeleteJobResponse - (*UpdateJobRequest)(nil), // 18: api.job.v1.UpdateJobRequest - (*UpdateJobResponse)(nil), // 19: api.job.v1.UpdateJobResponse - (*ListJobsRequest_Filter)(nil), // 20: api.job.v1.ListJobsRequest.Filter - (*ListProposalsRequest_Filter)(nil), // 21: api.job.v1.ListProposalsRequest.Filter - (*timestamppb.Timestamp)(nil), // 22: google.protobuf.Timestamp - (*ptypes.Label)(nil), // 23: api.label.Label - (*ptypes.Selector)(nil), // 24: api.label.Selector -} -var file_job_v1_job_proto_depIdxs = []int32{ - 22, // 0: api.job.v1.Job.created_at:type_name -> google.protobuf.Timestamp - 22, // 1: api.job.v1.Job.updated_at:type_name -> google.protobuf.Timestamp - 22, // 2: api.job.v1.Job.deleted_at:type_name -> google.protobuf.Timestamp - 23, // 3: api.job.v1.Job.labels:type_name -> api.label.Label - 0, // 4: api.job.v1.Proposal.status:type_name -> api.job.v1.ProposalStatus - 1, // 5: api.job.v1.Proposal.delivery_status:type_name -> api.job.v1.ProposalDeliveryStatus - 22, // 6: api.job.v1.Proposal.created_at:type_name -> google.protobuf.Timestamp - 22, // 7: api.job.v1.Proposal.updated_at:type_name -> google.protobuf.Timestamp - 22, // 8: api.job.v1.Proposal.acked_at:type_name -> google.protobuf.Timestamp - 22, // 9: api.job.v1.Proposal.response_received_at:type_name -> google.protobuf.Timestamp - 2, // 10: api.job.v1.GetJobResponse.job:type_name -> api.job.v1.Job - 3, // 11: api.job.v1.GetProposalResponse.proposal:type_name -> api.job.v1.Proposal - 20, // 12: api.job.v1.ListJobsRequest.filter:type_name -> api.job.v1.ListJobsRequest.Filter - 2, // 13: api.job.v1.ListJobsResponse.jobs:type_name -> api.job.v1.Job - 21, // 14: api.job.v1.ListProposalsRequest.filter:type_name -> api.job.v1.ListProposalsRequest.Filter - 3, // 15: api.job.v1.ListProposalsResponse.proposals:type_name -> api.job.v1.Proposal - 23, // 16: api.job.v1.ProposeJobRequest.labels:type_name -> api.label.Label - 3, // 17: api.job.v1.ProposeJobResponse.proposal:type_name -> api.job.v1.Proposal - 3, // 18: api.job.v1.RevokeJobResponse.proposal:type_name -> api.job.v1.Proposal - 2, // 19: api.job.v1.DeleteJobResponse.job:type_name -> api.job.v1.Job - 23, // 20: api.job.v1.UpdateJobRequest.labels:type_name -> api.label.Label - 2, // 21: api.job.v1.UpdateJobResponse.job:type_name -> api.job.v1.Job - 24, // 22: api.job.v1.ListJobsRequest.Filter.selectors:type_name -> api.label.Selector - 4, // 23: api.job.v1.JobService.GetJob:input_type -> api.job.v1.GetJobRequest - 6, // 24: api.job.v1.JobService.GetProposal:input_type -> api.job.v1.GetProposalRequest - 8, // 25: api.job.v1.JobService.ListJobs:input_type -> api.job.v1.ListJobsRequest - 10, // 26: api.job.v1.JobService.ListProposals:input_type -> api.job.v1.ListProposalsRequest - 12, // 27: api.job.v1.JobService.ProposeJob:input_type -> api.job.v1.ProposeJobRequest - 14, // 28: api.job.v1.JobService.RevokeJob:input_type -> api.job.v1.RevokeJobRequest - 16, // 29: api.job.v1.JobService.DeleteJob:input_type -> api.job.v1.DeleteJobRequest - 18, // 30: api.job.v1.JobService.UpdateJob:input_type -> api.job.v1.UpdateJobRequest - 5, // 31: api.job.v1.JobService.GetJob:output_type -> api.job.v1.GetJobResponse - 7, // 32: api.job.v1.JobService.GetProposal:output_type -> api.job.v1.GetProposalResponse - 9, // 33: api.job.v1.JobService.ListJobs:output_type -> api.job.v1.ListJobsResponse - 11, // 34: api.job.v1.JobService.ListProposals:output_type -> api.job.v1.ListProposalsResponse - 13, // 35: api.job.v1.JobService.ProposeJob:output_type -> api.job.v1.ProposeJobResponse - 15, // 36: api.job.v1.JobService.RevokeJob:output_type -> api.job.v1.RevokeJobResponse - 17, // 37: api.job.v1.JobService.DeleteJob:output_type -> api.job.v1.DeleteJobResponse - 19, // 38: api.job.v1.JobService.UpdateJob:output_type -> api.job.v1.UpdateJobResponse - 31, // [31:39] is the sub-list for method output_type - 23, // [23:31] is the sub-list for method input_type - 23, // [23:23] is the sub-list for extension type_name - 23, // [23:23] is the sub-list for extension extendee - 0, // [0:23] is the sub-list for field type_name -} - -func init() { file_job_v1_job_proto_init() } -func file_job_v1_job_proto_init() { - if File_job_v1_job_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_job_v1_job_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Job); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_job_v1_job_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Proposal); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_job_v1_job_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetJobRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_job_v1_job_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetJobResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_job_v1_job_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProposalRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_job_v1_job_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProposalResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_job_v1_job_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListJobsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_job_v1_job_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListJobsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_job_v1_job_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListProposalsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_job_v1_job_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListProposalsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_job_v1_job_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProposeJobRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_job_v1_job_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProposeJobResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_job_v1_job_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RevokeJobRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_job_v1_job_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RevokeJobResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_job_v1_job_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteJobRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_job_v1_job_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteJobResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_job_v1_job_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateJobRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_job_v1_job_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateJobResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_job_v1_job_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListJobsRequest_Filter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_job_v1_job_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListProposalsRequest_Filter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_job_v1_job_proto_msgTypes[1].OneofWrappers = []interface{}{} - file_job_v1_job_proto_msgTypes[2].OneofWrappers = []interface{}{ - (*GetJobRequest_Id)(nil), - (*GetJobRequest_Uuid)(nil), - } - file_job_v1_job_proto_msgTypes[12].OneofWrappers = []interface{}{ - (*RevokeJobRequest_Id)(nil), - (*RevokeJobRequest_Uuid)(nil), - } - file_job_v1_job_proto_msgTypes[14].OneofWrappers = []interface{}{ - (*DeleteJobRequest_Id)(nil), - (*DeleteJobRequest_Uuid)(nil), - } - file_job_v1_job_proto_msgTypes[16].OneofWrappers = []interface{}{ - (*UpdateJobRequest_Id)(nil), - (*UpdateJobRequest_Uuid)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_job_v1_job_proto_rawDesc, - NumEnums: 2, - NumMessages: 20, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_job_v1_job_proto_goTypes, - DependencyIndexes: file_job_v1_job_proto_depIdxs, - EnumInfos: file_job_v1_job_proto_enumTypes, - MessageInfos: file_job_v1_job_proto_msgTypes, - }.Build() - File_job_v1_job_proto = out.File - file_job_v1_job_proto_rawDesc = nil - file_job_v1_job_proto_goTypes = nil - file_job_v1_job_proto_depIdxs = nil -} \ No newline at end of file diff --git a/integration-tests/deployment/jd/job/v1/job_grpc.pb.go b/integration-tests/deployment/jd/job/v1/job_grpc.pb.go deleted file mode 100644 index 1ac2ca13c99..00000000000 --- a/integration-tests/deployment/jd/job/v1/job_grpc.pb.go +++ /dev/null @@ -1,384 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.3 -// source: job/v1/job.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - JobService_GetJob_FullMethodName = "/api.job.v1.JobService/GetJob" - JobService_GetProposal_FullMethodName = "/api.job.v1.JobService/GetProposal" - JobService_ListJobs_FullMethodName = "/api.job.v1.JobService/ListJobs" - JobService_ListProposals_FullMethodName = "/api.job.v1.JobService/ListProposals" - JobService_ProposeJob_FullMethodName = "/api.job.v1.JobService/ProposeJob" - JobService_RevokeJob_FullMethodName = "/api.job.v1.JobService/RevokeJob" - JobService_DeleteJob_FullMethodName = "/api.job.v1.JobService/DeleteJob" - JobService_UpdateJob_FullMethodName = "/api.job.v1.JobService/UpdateJob" -) - -// JobServiceClient is the client API for JobService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type JobServiceClient interface { - // GetJob retrieves the details of a specific job by its ID or UUID. - GetJob(ctx context.Context, in *GetJobRequest, opts ...grpc.CallOption) (*GetJobResponse, error) - // GetProposal retrieves the details of a specific proposal by its ID. - GetProposal(ctx context.Context, in *GetProposalRequest, opts ...grpc.CallOption) (*GetProposalResponse, error) - // ListJobs returns a list of jobs, optionally filtered by IDs or node IDs. - ListJobs(ctx context.Context, in *ListJobsRequest, opts ...grpc.CallOption) (*ListJobsResponse, error) - // ListProposals returns a list of proposals, optionally filtered by proposal or job IDs. - ListProposals(ctx context.Context, in *ListProposalsRequest, opts ...grpc.CallOption) (*ListProposalsResponse, error) - // ProposeJob submits a new job proposal to a node. - ProposeJob(ctx context.Context, in *ProposeJobRequest, opts ...grpc.CallOption) (*ProposeJobResponse, error) - // RevokeJob revokes an existing job proposal. - RevokeJob(ctx context.Context, in *RevokeJobRequest, opts ...grpc.CallOption) (*RevokeJobResponse, error) - // DeleteJob deletes a job from the system. - DeleteJob(ctx context.Context, in *DeleteJobRequest, opts ...grpc.CallOption) (*DeleteJobResponse, error) - // UpdateJob updates a job in the system. - UpdateJob(ctx context.Context, in *UpdateJobRequest, opts ...grpc.CallOption) (*UpdateJobResponse, error) -} - -type jobServiceClient struct { - cc grpc.ClientConnInterface -} - -func NewJobServiceClient(cc grpc.ClientConnInterface) JobServiceClient { - return &jobServiceClient{cc} -} - -func (c *jobServiceClient) GetJob(ctx context.Context, in *GetJobRequest, opts ...grpc.CallOption) (*GetJobResponse, error) { - out := new(GetJobResponse) - err := c.cc.Invoke(ctx, JobService_GetJob_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *jobServiceClient) GetProposal(ctx context.Context, in *GetProposalRequest, opts ...grpc.CallOption) (*GetProposalResponse, error) { - out := new(GetProposalResponse) - err := c.cc.Invoke(ctx, JobService_GetProposal_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *jobServiceClient) ListJobs(ctx context.Context, in *ListJobsRequest, opts ...grpc.CallOption) (*ListJobsResponse, error) { - out := new(ListJobsResponse) - err := c.cc.Invoke(ctx, JobService_ListJobs_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *jobServiceClient) ListProposals(ctx context.Context, in *ListProposalsRequest, opts ...grpc.CallOption) (*ListProposalsResponse, error) { - out := new(ListProposalsResponse) - err := c.cc.Invoke(ctx, JobService_ListProposals_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *jobServiceClient) ProposeJob(ctx context.Context, in *ProposeJobRequest, opts ...grpc.CallOption) (*ProposeJobResponse, error) { - out := new(ProposeJobResponse) - err := c.cc.Invoke(ctx, JobService_ProposeJob_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *jobServiceClient) RevokeJob(ctx context.Context, in *RevokeJobRequest, opts ...grpc.CallOption) (*RevokeJobResponse, error) { - out := new(RevokeJobResponse) - err := c.cc.Invoke(ctx, JobService_RevokeJob_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *jobServiceClient) DeleteJob(ctx context.Context, in *DeleteJobRequest, opts ...grpc.CallOption) (*DeleteJobResponse, error) { - out := new(DeleteJobResponse) - err := c.cc.Invoke(ctx, JobService_DeleteJob_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *jobServiceClient) UpdateJob(ctx context.Context, in *UpdateJobRequest, opts ...grpc.CallOption) (*UpdateJobResponse, error) { - out := new(UpdateJobResponse) - err := c.cc.Invoke(ctx, JobService_UpdateJob_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// JobServiceServer is the server API for JobService service. -// All implementations must embed UnimplementedJobServiceServer -// for forward compatibility -type JobServiceServer interface { - // GetJob retrieves the details of a specific job by its ID or UUID. - GetJob(context.Context, *GetJobRequest) (*GetJobResponse, error) - // GetProposal retrieves the details of a specific proposal by its ID. - GetProposal(context.Context, *GetProposalRequest) (*GetProposalResponse, error) - // ListJobs returns a list of jobs, optionally filtered by IDs or node IDs. - ListJobs(context.Context, *ListJobsRequest) (*ListJobsResponse, error) - // ListProposals returns a list of proposals, optionally filtered by proposal or job IDs. - ListProposals(context.Context, *ListProposalsRequest) (*ListProposalsResponse, error) - // ProposeJob submits a new job proposal to a node. - ProposeJob(context.Context, *ProposeJobRequest) (*ProposeJobResponse, error) - // RevokeJob revokes an existing job proposal. - RevokeJob(context.Context, *RevokeJobRequest) (*RevokeJobResponse, error) - // DeleteJob deletes a job from the system. - DeleteJob(context.Context, *DeleteJobRequest) (*DeleteJobResponse, error) - // UpdateJob updates a job in the system. - UpdateJob(context.Context, *UpdateJobRequest) (*UpdateJobResponse, error) - mustEmbedUnimplementedJobServiceServer() -} - -// UnimplementedJobServiceServer must be embedded to have forward compatible implementations. -type UnimplementedJobServiceServer struct { -} - -func (UnimplementedJobServiceServer) GetJob(context.Context, *GetJobRequest) (*GetJobResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetJob not implemented") -} -func (UnimplementedJobServiceServer) GetProposal(context.Context, *GetProposalRequest) (*GetProposalResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetProposal not implemented") -} -func (UnimplementedJobServiceServer) ListJobs(context.Context, *ListJobsRequest) (*ListJobsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListJobs not implemented") -} -func (UnimplementedJobServiceServer) ListProposals(context.Context, *ListProposalsRequest) (*ListProposalsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListProposals not implemented") -} -func (UnimplementedJobServiceServer) ProposeJob(context.Context, *ProposeJobRequest) (*ProposeJobResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ProposeJob not implemented") -} -func (UnimplementedJobServiceServer) RevokeJob(context.Context, *RevokeJobRequest) (*RevokeJobResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RevokeJob not implemented") -} -func (UnimplementedJobServiceServer) DeleteJob(context.Context, *DeleteJobRequest) (*DeleteJobResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteJob not implemented") -} -func (UnimplementedJobServiceServer) UpdateJob(context.Context, *UpdateJobRequest) (*UpdateJobResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateJob not implemented") -} -func (UnimplementedJobServiceServer) mustEmbedUnimplementedJobServiceServer() {} - -// UnsafeJobServiceServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to JobServiceServer will -// result in compilation errors. -type UnsafeJobServiceServer interface { - mustEmbedUnimplementedJobServiceServer() -} - -func RegisterJobServiceServer(s grpc.ServiceRegistrar, srv JobServiceServer) { - s.RegisterService(&JobService_ServiceDesc, srv) -} - -func _JobService_GetJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetJobRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(JobServiceServer).GetJob(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: JobService_GetJob_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(JobServiceServer).GetJob(ctx, req.(*GetJobRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _JobService_GetProposal_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetProposalRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(JobServiceServer).GetProposal(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: JobService_GetProposal_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(JobServiceServer).GetProposal(ctx, req.(*GetProposalRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _JobService_ListJobs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListJobsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(JobServiceServer).ListJobs(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: JobService_ListJobs_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(JobServiceServer).ListJobs(ctx, req.(*ListJobsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _JobService_ListProposals_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListProposalsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(JobServiceServer).ListProposals(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: JobService_ListProposals_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(JobServiceServer).ListProposals(ctx, req.(*ListProposalsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _JobService_ProposeJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ProposeJobRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(JobServiceServer).ProposeJob(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: JobService_ProposeJob_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(JobServiceServer).ProposeJob(ctx, req.(*ProposeJobRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _JobService_RevokeJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RevokeJobRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(JobServiceServer).RevokeJob(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: JobService_RevokeJob_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(JobServiceServer).RevokeJob(ctx, req.(*RevokeJobRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _JobService_DeleteJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteJobRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(JobServiceServer).DeleteJob(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: JobService_DeleteJob_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(JobServiceServer).DeleteJob(ctx, req.(*DeleteJobRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _JobService_UpdateJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateJobRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(JobServiceServer).UpdateJob(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: JobService_UpdateJob_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(JobServiceServer).UpdateJob(ctx, req.(*UpdateJobRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// JobService_ServiceDesc is the grpc.ServiceDesc for JobService service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var JobService_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "api.job.v1.JobService", - HandlerType: (*JobServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "GetJob", - Handler: _JobService_GetJob_Handler, - }, - { - MethodName: "GetProposal", - Handler: _JobService_GetProposal_Handler, - }, - { - MethodName: "ListJobs", - Handler: _JobService_ListJobs_Handler, - }, - { - MethodName: "ListProposals", - Handler: _JobService_ListProposals_Handler, - }, - { - MethodName: "ProposeJob", - Handler: _JobService_ProposeJob_Handler, - }, - { - MethodName: "RevokeJob", - Handler: _JobService_RevokeJob_Handler, - }, - { - MethodName: "DeleteJob", - Handler: _JobService_DeleteJob_Handler, - }, - { - MethodName: "UpdateJob", - Handler: _JobService_UpdateJob_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "job/v1/job.proto", -} \ No newline at end of file diff --git a/integration-tests/deployment/jd/node/v1/node.pb.go b/integration-tests/deployment/jd/node/v1/node.pb.go deleted file mode 100644 index 172e2856454..00000000000 --- a/integration-tests/deployment/jd/node/v1/node.pb.go +++ /dev/null @@ -1,2492 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.29.0 -// protoc v4.25.3 -// source: node/v1/node.proto - -package v1 - -import ( - ptypes "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/shared/ptypes" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type ChainType int32 - -const ( - ChainType_CHAIN_TYPE_UNSPECIFIED ChainType = 0 - ChainType_CHAIN_TYPE_EVM ChainType = 1 - ChainType_CHAIN_TYPE_SOLANA ChainType = 2 - ChainType_CHAIN_TYPE_STARKNET ChainType = 3 -) - -// Enum value maps for ChainType. -var ( - ChainType_name = map[int32]string{ - 0: "CHAIN_TYPE_UNSPECIFIED", - 1: "CHAIN_TYPE_EVM", - 2: "CHAIN_TYPE_SOLANA", - 3: "CHAIN_TYPE_STARKNET", - } - ChainType_value = map[string]int32{ - "CHAIN_TYPE_UNSPECIFIED": 0, - "CHAIN_TYPE_EVM": 1, - "CHAIN_TYPE_SOLANA": 2, - "CHAIN_TYPE_STARKNET": 3, - } -) - -func (x ChainType) Enum() *ChainType { - p := new(ChainType) - *p = x - return p -} - -func (x ChainType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ChainType) Descriptor() protoreflect.EnumDescriptor { - return file_node_v1_node_proto_enumTypes[0].Descriptor() -} - -func (ChainType) Type() protoreflect.EnumType { - return &file_node_v1_node_proto_enumTypes[0] -} - -func (x ChainType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ChainType.Descriptor instead. -func (ChainType) EnumDescriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{0} -} - -// EnableState represents the enabled state of the node. -type EnableState int32 - -const ( - EnableState_ENABLE_STATE_UNSPECIFIED EnableState = 0 - EnableState_ENABLE_STATE_ENABLED EnableState = 1 - EnableState_ENABLE_STATE_DISABLED EnableState = 2 -) - -// Enum value maps for EnableState. -var ( - EnableState_name = map[int32]string{ - 0: "ENABLE_STATE_UNSPECIFIED", - 1: "ENABLE_STATE_ENABLED", - 2: "ENABLE_STATE_DISABLED", - } - EnableState_value = map[string]int32{ - "ENABLE_STATE_UNSPECIFIED": 0, - "ENABLE_STATE_ENABLED": 1, - "ENABLE_STATE_DISABLED": 2, - } -) - -func (x EnableState) Enum() *EnableState { - p := new(EnableState) - *p = x - return p -} - -func (x EnableState) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (EnableState) Descriptor() protoreflect.EnumDescriptor { - return file_node_v1_node_proto_enumTypes[1].Descriptor() -} - -func (EnableState) Type() protoreflect.EnumType { - return &file_node_v1_node_proto_enumTypes[1] -} - -func (x EnableState) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use EnableState.Descriptor instead. -func (EnableState) EnumDescriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{1} -} - -// Node represents a node within the Job Distributor system. -type Node struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique identifier for the node. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // Human-readable name for the node. - PublicKey string `protobuf:"bytes,3,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` // Public key used for secure communications. - IsEnabled bool `protobuf:"varint,4,opt,name=is_enabled,json=isEnabled,proto3" json:"is_enabled,omitempty"` // Indicates if the node is currently enabled. - IsConnected bool `protobuf:"varint,5,opt,name=is_connected,json=isConnected,proto3" json:"is_connected,omitempty"` // Indicates if the node is currently connected to the network. - Labels []*ptypes.Label `protobuf:"bytes,6,rep,name=labels,proto3" json:"labels,omitempty"` // Set of labels associated with the node. - CreatedAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // Timestamp when the node was created. - UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` // Timestamp when the node was last updated. -} - -func (x *Node) Reset() { - *x = Node{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Node) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Node) ProtoMessage() {} - -func (x *Node) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Node.ProtoReflect.Descriptor instead. -func (*Node) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{0} -} - -func (x *Node) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Node) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Node) GetPublicKey() string { - if x != nil { - return x.PublicKey - } - return "" -} - -func (x *Node) GetIsEnabled() bool { - if x != nil { - return x.IsEnabled - } - return false -} - -func (x *Node) GetIsConnected() bool { - if x != nil { - return x.IsConnected - } - return false -} - -func (x *Node) GetLabels() []*ptypes.Label { - if x != nil { - return x.Labels - } - return nil -} - -func (x *Node) GetCreatedAt() *timestamppb.Timestamp { - if x != nil { - return x.CreatedAt - } - return nil -} - -func (x *Node) GetUpdatedAt() *timestamppb.Timestamp { - if x != nil { - return x.UpdatedAt - } - return nil -} - -type Chain struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Type ChainType `protobuf:"varint,2,opt,name=type,proto3,enum=api.node.v1.ChainType" json:"type,omitempty"` -} - -func (x *Chain) Reset() { - *x = Chain{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Chain) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Chain) ProtoMessage() {} - -func (x *Chain) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Chain.ProtoReflect.Descriptor instead. -func (*Chain) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{1} -} - -func (x *Chain) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Chain) GetType() ChainType { - if x != nil { - return x.Type - } - return ChainType_CHAIN_TYPE_UNSPECIFIED -} - -// The config for Flux Monitor on a specific chain -type FluxMonitorConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` -} - -func (x *FluxMonitorConfig) Reset() { - *x = FluxMonitorConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FluxMonitorConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FluxMonitorConfig) ProtoMessage() {} - -func (x *FluxMonitorConfig) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FluxMonitorConfig.ProtoReflect.Descriptor instead. -func (*FluxMonitorConfig) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{2} -} - -func (x *FluxMonitorConfig) GetEnabled() bool { - if x != nil { - return x.Enabled - } - return false -} - -// The config for OCR1 on a specific chain -type OCR1Config struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` - IsBootstrap bool `protobuf:"varint,2,opt,name=is_bootstrap,json=isBootstrap,proto3" json:"is_bootstrap,omitempty"` - P2PKeyBundle *OCR1Config_P2PKeyBundle `protobuf:"bytes,3,opt,name=p2p_key_bundle,json=p2pKeyBundle,proto3" json:"p2p_key_bundle,omitempty"` - OcrKeyBundle *OCR1Config_OCRKeyBundle `protobuf:"bytes,4,opt,name=ocr_key_bundle,json=ocrKeyBundle,proto3" json:"ocr_key_bundle,omitempty"` - Multiaddr string `protobuf:"bytes,5,opt,name=multiaddr,proto3" json:"multiaddr,omitempty"` -} - -func (x *OCR1Config) Reset() { - *x = OCR1Config{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *OCR1Config) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*OCR1Config) ProtoMessage() {} - -func (x *OCR1Config) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use OCR1Config.ProtoReflect.Descriptor instead. -func (*OCR1Config) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{3} -} - -func (x *OCR1Config) GetEnabled() bool { - if x != nil { - return x.Enabled - } - return false -} - -func (x *OCR1Config) GetIsBootstrap() bool { - if x != nil { - return x.IsBootstrap - } - return false -} - -func (x *OCR1Config) GetP2PKeyBundle() *OCR1Config_P2PKeyBundle { - if x != nil { - return x.P2PKeyBundle - } - return nil -} - -func (x *OCR1Config) GetOcrKeyBundle() *OCR1Config_OCRKeyBundle { - if x != nil { - return x.OcrKeyBundle - } - return nil -} - -func (x *OCR1Config) GetMultiaddr() string { - if x != nil { - return x.Multiaddr - } - return "" -} - -// The config for OCR2 on a specific chain -type OCR2Config struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` - IsBootstrap bool `protobuf:"varint,2,opt,name=is_bootstrap,json=isBootstrap,proto3" json:"is_bootstrap,omitempty"` - P2PKeyBundle *OCR2Config_P2PKeyBundle `protobuf:"bytes,3,opt,name=p2p_key_bundle,json=p2pKeyBundle,proto3" json:"p2p_key_bundle,omitempty"` - OcrKeyBundle *OCR2Config_OCRKeyBundle `protobuf:"bytes,4,opt,name=ocr_key_bundle,json=ocrKeyBundle,proto3" json:"ocr_key_bundle,omitempty"` - Multiaddr string `protobuf:"bytes,5,opt,name=multiaddr,proto3" json:"multiaddr,omitempty"` - Plugins *OCR2Config_Plugins `protobuf:"bytes,6,opt,name=plugins,proto3" json:"plugins,omitempty"` - ForwarderAddress *string `protobuf:"bytes,7,opt,name=forwarder_address,json=forwarderAddress,proto3,oneof" json:"forwarder_address,omitempty"` -} - -func (x *OCR2Config) Reset() { - *x = OCR2Config{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *OCR2Config) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*OCR2Config) ProtoMessage() {} - -func (x *OCR2Config) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use OCR2Config.ProtoReflect.Descriptor instead. -func (*OCR2Config) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{4} -} - -func (x *OCR2Config) GetEnabled() bool { - if x != nil { - return x.Enabled - } - return false -} - -func (x *OCR2Config) GetIsBootstrap() bool { - if x != nil { - return x.IsBootstrap - } - return false -} - -func (x *OCR2Config) GetP2PKeyBundle() *OCR2Config_P2PKeyBundle { - if x != nil { - return x.P2PKeyBundle - } - return nil -} - -func (x *OCR2Config) GetOcrKeyBundle() *OCR2Config_OCRKeyBundle { - if x != nil { - return x.OcrKeyBundle - } - return nil -} - -func (x *OCR2Config) GetMultiaddr() string { - if x != nil { - return x.Multiaddr - } - return "" -} - -func (x *OCR2Config) GetPlugins() *OCR2Config_Plugins { - if x != nil { - return x.Plugins - } - return nil -} - -func (x *OCR2Config) GetForwarderAddress() string { - if x != nil && x.ForwarderAddress != nil { - return *x.ForwarderAddress - } - return "" -} - -type ChainConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Chain *Chain `protobuf:"bytes,1,opt,name=chain,proto3" json:"chain,omitempty"` - AccountAddress string `protobuf:"bytes,2,opt,name=account_address,json=accountAddress,proto3" json:"account_address,omitempty"` - AdminAddress string `protobuf:"bytes,3,opt,name=admin_address,json=adminAddress,proto3" json:"admin_address,omitempty"` - FluxMonitorConfig *FluxMonitorConfig `protobuf:"bytes,4,opt,name=flux_monitor_config,json=fluxMonitorConfig,proto3" json:"flux_monitor_config,omitempty"` - Ocr1Config *OCR1Config `protobuf:"bytes,5,opt,name=ocr1_config,json=ocr1Config,proto3" json:"ocr1_config,omitempty"` - Ocr2Config *OCR2Config `protobuf:"bytes,6,opt,name=ocr2_config,json=ocr2Config,proto3" json:"ocr2_config,omitempty"` - // For EVM chains, we do not need this value and it is kept in the node's - // keystore. For starknet, because the wallet address needs to be deployed - // using this value and this pub key needs to be passed into the starknet - // relayer, we request the node to send this directly to CLO. - AccountAddressPublicKey *string `protobuf:"bytes,7,opt,name=account_address_public_key,json=accountAddressPublicKey,proto3,oneof" json:"account_address_public_key,omitempty"` -} - -func (x *ChainConfig) Reset() { - *x = ChainConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChainConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChainConfig) ProtoMessage() {} - -func (x *ChainConfig) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ChainConfig.ProtoReflect.Descriptor instead. -func (*ChainConfig) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{5} -} - -func (x *ChainConfig) GetChain() *Chain { - if x != nil { - return x.Chain - } - return nil -} - -func (x *ChainConfig) GetAccountAddress() string { - if x != nil { - return x.AccountAddress - } - return "" -} - -func (x *ChainConfig) GetAdminAddress() string { - if x != nil { - return x.AdminAddress - } - return "" -} - -func (x *ChainConfig) GetFluxMonitorConfig() *FluxMonitorConfig { - if x != nil { - return x.FluxMonitorConfig - } - return nil -} - -func (x *ChainConfig) GetOcr1Config() *OCR1Config { - if x != nil { - return x.Ocr1Config - } - return nil -} - -func (x *ChainConfig) GetOcr2Config() *OCR2Config { - if x != nil { - return x.Ocr2Config - } - return nil -} - -func (x *ChainConfig) GetAccountAddressPublicKey() string { - if x != nil && x.AccountAddressPublicKey != nil { - return *x.AccountAddressPublicKey - } - return "" -} - -// RegisterNodeRequest contains the information needed to register a new node. -type RegisterNodeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Desired name for the node. - PublicKey string `protobuf:"bytes,2,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` // Public key for the node. - Labels []*ptypes.Label `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty"` // Labels to associate with the node. -} - -func (x *RegisterNodeRequest) Reset() { - *x = RegisterNodeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RegisterNodeRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RegisterNodeRequest) ProtoMessage() {} - -func (x *RegisterNodeRequest) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RegisterNodeRequest.ProtoReflect.Descriptor instead. -func (*RegisterNodeRequest) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{6} -} - -func (x *RegisterNodeRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *RegisterNodeRequest) GetPublicKey() string { - if x != nil { - return x.PublicKey - } - return "" -} - -func (x *RegisterNodeRequest) GetLabels() []*ptypes.Label { - if x != nil { - return x.Labels - } - return nil -} - -// RegisterNodeResponse returns the newly registered node. -type RegisterNodeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Node *Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"` // Details of the newly registered node. -} - -func (x *RegisterNodeResponse) Reset() { - *x = RegisterNodeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RegisterNodeResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RegisterNodeResponse) ProtoMessage() {} - -func (x *RegisterNodeResponse) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RegisterNodeResponse.ProtoReflect.Descriptor instead. -func (*RegisterNodeResponse) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{7} -} - -func (x *RegisterNodeResponse) GetNode() *Node { - if x != nil { - return x.Node - } - return nil -} - -// GetNodeRequest is the request to retrieve a single node by its ID. -type GetNodeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique identifier of the node to retrieve. -} - -func (x *GetNodeRequest) Reset() { - *x = GetNodeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetNodeRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetNodeRequest) ProtoMessage() {} - -func (x *GetNodeRequest) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetNodeRequest.ProtoReflect.Descriptor instead. -func (*GetNodeRequest) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{8} -} - -func (x *GetNodeRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -// GetNodeResponse is the response containing the requested node. -type GetNodeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Node *Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"` // Details of the retrieved node. -} - -func (x *GetNodeResponse) Reset() { - *x = GetNodeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetNodeResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetNodeResponse) ProtoMessage() {} - -func (x *GetNodeResponse) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetNodeResponse.ProtoReflect.Descriptor instead. -func (*GetNodeResponse) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{9} -} - -func (x *GetNodeResponse) GetNode() *Node { - if x != nil { - return x.Node - } - return nil -} - -// * -// ListNodesRequest is the request object for the ListNodes method. -// -// Provide a filter to return a subset of data. Nodes can be filtered by: -// - ids - A list of node ids. -// - archived - The archived state of the node. -// - selectors - A list of selectors to filter nodes by their labels. -// -// If no filter is provided, all nodes are returned. -type ListNodesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Filter *ListNodesRequest_Filter `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` -} - -func (x *ListNodesRequest) Reset() { - *x = ListNodesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListNodesRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListNodesRequest) ProtoMessage() {} - -func (x *ListNodesRequest) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_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) -} - -// Deprecated: Use ListNodesRequest.ProtoReflect.Descriptor instead. -func (*ListNodesRequest) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{10} -} - -func (x *ListNodesRequest) GetFilter() *ListNodesRequest_Filter { - if x != nil { - return x.Filter - } - return nil -} - -// * -// ListNodesResponse is the response object for the ListNodes method. -// -// It returns a list of nodes that match the filter criteria. -type ListNodesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Nodes []*Node `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"` // List of nodes. -} - -func (x *ListNodesResponse) Reset() { - *x = ListNodesResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListNodesResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListNodesResponse) ProtoMessage() {} - -func (x *ListNodesResponse) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_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) -} - -// Deprecated: Use ListNodesResponse.ProtoReflect.Descriptor instead. -func (*ListNodesResponse) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{11} -} - -func (x *ListNodesResponse) GetNodes() []*Node { - if x != nil { - return x.Nodes - } - return nil -} - -// UpdateNodeRequest contains the information necessary to update a node. -type UpdateNodeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique identifier of the node to update. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // New name for the node, if changing. - PublicKey string `protobuf:"bytes,3,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` // New public key for the node, if changing. - Labels []*ptypes.Label `protobuf:"bytes,4,rep,name=labels,proto3" json:"labels,omitempty"` // New set of labels for the node, if changing. -} - -func (x *UpdateNodeRequest) Reset() { - *x = UpdateNodeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UpdateNodeRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateNodeRequest) ProtoMessage() {} - -func (x *UpdateNodeRequest) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateNodeRequest.ProtoReflect.Descriptor instead. -func (*UpdateNodeRequest) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{12} -} - -func (x *UpdateNodeRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *UpdateNodeRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *UpdateNodeRequest) GetPublicKey() string { - if x != nil { - return x.PublicKey - } - return "" -} - -func (x *UpdateNodeRequest) GetLabels() []*ptypes.Label { - if x != nil { - return x.Labels - } - return nil -} - -// UpdateNodeResponse returns the updated node. -type UpdateNodeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Node *Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"` // Updated node details. -} - -func (x *UpdateNodeResponse) Reset() { - *x = UpdateNodeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UpdateNodeResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateNodeResponse) ProtoMessage() {} - -func (x *UpdateNodeResponse) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_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) -} - -// Deprecated: Use UpdateNodeResponse.ProtoReflect.Descriptor instead. -func (*UpdateNodeResponse) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{13} -} - -func (x *UpdateNodeResponse) GetNode() *Node { - if x != nil { - return x.Node - } - return nil -} - -// DisableNodeRequest is used to mark a node as disabled. -type DisableNodeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique identifier of the node to disable. -} - -func (x *DisableNodeRequest) Reset() { - *x = DisableNodeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DisableNodeRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DisableNodeRequest) ProtoMessage() {} - -func (x *DisableNodeRequest) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DisableNodeRequest.ProtoReflect.Descriptor instead. -func (*DisableNodeRequest) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{14} -} - -func (x *DisableNodeRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -// DisableNodeResponse returns the disabled node. -type DisableNodeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Node *Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"` // Disabled node details. -} - -func (x *DisableNodeResponse) Reset() { - *x = DisableNodeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DisableNodeResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DisableNodeResponse) ProtoMessage() {} - -func (x *DisableNodeResponse) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DisableNodeResponse.ProtoReflect.Descriptor instead. -func (*DisableNodeResponse) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{15} -} - -func (x *DisableNodeResponse) GetNode() *Node { - if x != nil { - return x.Node - } - return nil -} - -// EnableNodeRequest is used to reactivate a disabled node. -type EnableNodeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique identifier of the node to enable. -} - -func (x *EnableNodeRequest) Reset() { - *x = EnableNodeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *EnableNodeRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EnableNodeRequest) ProtoMessage() {} - -func (x *EnableNodeRequest) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EnableNodeRequest.ProtoReflect.Descriptor instead. -func (*EnableNodeRequest) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{16} -} - -func (x *EnableNodeRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -// EnableNodeResponse returns the enabled node. -type EnableNodeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Node *Node `protobuf:"bytes,1,opt,name=node,proto3" json:"node,omitempty"` // Enabled node details. -} - -func (x *EnableNodeResponse) Reset() { - *x = EnableNodeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *EnableNodeResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EnableNodeResponse) ProtoMessage() {} - -func (x *EnableNodeResponse) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EnableNodeResponse.ProtoReflect.Descriptor instead. -func (*EnableNodeResponse) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{17} -} - -func (x *EnableNodeResponse) GetNode() *Node { - if x != nil { - return x.Node - } - return nil -} - -type ListNodeChainConfigsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Filter *ListNodeChainConfigsRequest_Filter `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` -} - -func (x *ListNodeChainConfigsRequest) Reset() { - *x = ListNodeChainConfigsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListNodeChainConfigsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListNodeChainConfigsRequest) ProtoMessage() {} - -func (x *ListNodeChainConfigsRequest) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_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) -} - -// Deprecated: Use ListNodeChainConfigsRequest.ProtoReflect.Descriptor instead. -func (*ListNodeChainConfigsRequest) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{18} -} - -func (x *ListNodeChainConfigsRequest) GetFilter() *ListNodeChainConfigsRequest_Filter { - if x != nil { - return x.Filter - } - return nil -} - -type ListNodeChainConfigsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ChainConfigs []*ChainConfig `protobuf:"bytes,1,rep,name=chain_configs,json=chainConfigs,proto3" json:"chain_configs,omitempty"` -} - -func (x *ListNodeChainConfigsResponse) Reset() { - *x = ListNodeChainConfigsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListNodeChainConfigsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListNodeChainConfigsResponse) ProtoMessage() {} - -func (x *ListNodeChainConfigsResponse) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListNodeChainConfigsResponse.ProtoReflect.Descriptor instead. -func (*ListNodeChainConfigsResponse) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{19} -} - -func (x *ListNodeChainConfigsResponse) GetChainConfigs() []*ChainConfig { - if x != nil { - return x.ChainConfigs - } - return nil -} - -type OCR1Config_P2PKeyBundle struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - PeerId string `protobuf:"bytes,1,opt,name=peer_id,json=peerId,proto3" json:"peer_id,omitempty"` - PublicKey string `protobuf:"bytes,2,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` -} - -func (x *OCR1Config_P2PKeyBundle) Reset() { - *x = OCR1Config_P2PKeyBundle{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *OCR1Config_P2PKeyBundle) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*OCR1Config_P2PKeyBundle) ProtoMessage() {} - -func (x *OCR1Config_P2PKeyBundle) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use OCR1Config_P2PKeyBundle.ProtoReflect.Descriptor instead. -func (*OCR1Config_P2PKeyBundle) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{3, 0} -} - -func (x *OCR1Config_P2PKeyBundle) GetPeerId() string { - if x != nil { - return x.PeerId - } - return "" -} - -func (x *OCR1Config_P2PKeyBundle) GetPublicKey() string { - if x != nil { - return x.PublicKey - } - return "" -} - -type OCR1Config_OCRKeyBundle struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - BundleId string `protobuf:"bytes,1,opt,name=bundle_id,json=bundleId,proto3" json:"bundle_id,omitempty"` - ConfigPublicKey string `protobuf:"bytes,2,opt,name=config_public_key,json=configPublicKey,proto3" json:"config_public_key,omitempty"` - OffchainPublicKey string `protobuf:"bytes,3,opt,name=offchain_public_key,json=offchainPublicKey,proto3" json:"offchain_public_key,omitempty"` - OnchainSigningAddress string `protobuf:"bytes,4,opt,name=onchain_signing_address,json=onchainSigningAddress,proto3" json:"onchain_signing_address,omitempty"` -} - -func (x *OCR1Config_OCRKeyBundle) Reset() { - *x = OCR1Config_OCRKeyBundle{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *OCR1Config_OCRKeyBundle) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*OCR1Config_OCRKeyBundle) ProtoMessage() {} - -func (x *OCR1Config_OCRKeyBundle) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use OCR1Config_OCRKeyBundle.ProtoReflect.Descriptor instead. -func (*OCR1Config_OCRKeyBundle) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{3, 1} -} - -func (x *OCR1Config_OCRKeyBundle) GetBundleId() string { - if x != nil { - return x.BundleId - } - return "" -} - -func (x *OCR1Config_OCRKeyBundle) GetConfigPublicKey() string { - if x != nil { - return x.ConfigPublicKey - } - return "" -} - -func (x *OCR1Config_OCRKeyBundle) GetOffchainPublicKey() string { - if x != nil { - return x.OffchainPublicKey - } - return "" -} - -func (x *OCR1Config_OCRKeyBundle) GetOnchainSigningAddress() string { - if x != nil { - return x.OnchainSigningAddress - } - return "" -} - -type OCR2Config_P2PKeyBundle struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - PeerId string `protobuf:"bytes,1,opt,name=peer_id,json=peerId,proto3" json:"peer_id,omitempty"` - PublicKey string `protobuf:"bytes,2,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` -} - -func (x *OCR2Config_P2PKeyBundle) Reset() { - *x = OCR2Config_P2PKeyBundle{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *OCR2Config_P2PKeyBundle) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*OCR2Config_P2PKeyBundle) ProtoMessage() {} - -func (x *OCR2Config_P2PKeyBundle) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use OCR2Config_P2PKeyBundle.ProtoReflect.Descriptor instead. -func (*OCR2Config_P2PKeyBundle) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{4, 0} -} - -func (x *OCR2Config_P2PKeyBundle) GetPeerId() string { - if x != nil { - return x.PeerId - } - return "" -} - -func (x *OCR2Config_P2PKeyBundle) GetPublicKey() string { - if x != nil { - return x.PublicKey - } - return "" -} - -type OCR2Config_OCRKeyBundle struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - BundleId string `protobuf:"bytes,1,opt,name=bundle_id,json=bundleId,proto3" json:"bundle_id,omitempty"` - ConfigPublicKey string `protobuf:"bytes,2,opt,name=config_public_key,json=configPublicKey,proto3" json:"config_public_key,omitempty"` - OffchainPublicKey string `protobuf:"bytes,3,opt,name=offchain_public_key,json=offchainPublicKey,proto3" json:"offchain_public_key,omitempty"` - OnchainSigningAddress string `protobuf:"bytes,4,opt,name=onchain_signing_address,json=onchainSigningAddress,proto3" json:"onchain_signing_address,omitempty"` -} - -func (x *OCR2Config_OCRKeyBundle) Reset() { - *x = OCR2Config_OCRKeyBundle{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *OCR2Config_OCRKeyBundle) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*OCR2Config_OCRKeyBundle) ProtoMessage() {} - -func (x *OCR2Config_OCRKeyBundle) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use OCR2Config_OCRKeyBundle.ProtoReflect.Descriptor instead. -func (*OCR2Config_OCRKeyBundle) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{4, 1} -} - -func (x *OCR2Config_OCRKeyBundle) GetBundleId() string { - if x != nil { - return x.BundleId - } - return "" -} - -func (x *OCR2Config_OCRKeyBundle) GetConfigPublicKey() string { - if x != nil { - return x.ConfigPublicKey - } - return "" -} - -func (x *OCR2Config_OCRKeyBundle) GetOffchainPublicKey() string { - if x != nil { - return x.OffchainPublicKey - } - return "" -} - -func (x *OCR2Config_OCRKeyBundle) GetOnchainSigningAddress() string { - if x != nil { - return x.OnchainSigningAddress - } - return "" -} - -type OCR2Config_Plugins struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Commit bool `protobuf:"varint,1,opt,name=commit,proto3" json:"commit,omitempty"` - Execute bool `protobuf:"varint,2,opt,name=execute,proto3" json:"execute,omitempty"` - Median bool `protobuf:"varint,3,opt,name=median,proto3" json:"median,omitempty"` - Mercury bool `protobuf:"varint,4,opt,name=mercury,proto3" json:"mercury,omitempty"` - Rebalancer bool `protobuf:"varint,5,opt,name=rebalancer,proto3" json:"rebalancer,omitempty"` -} - -func (x *OCR2Config_Plugins) Reset() { - *x = OCR2Config_Plugins{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *OCR2Config_Plugins) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*OCR2Config_Plugins) ProtoMessage() {} - -func (x *OCR2Config_Plugins) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use OCR2Config_Plugins.ProtoReflect.Descriptor instead. -func (*OCR2Config_Plugins) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{4, 2} -} - -func (x *OCR2Config_Plugins) GetCommit() bool { - if x != nil { - return x.Commit - } - return false -} - -func (x *OCR2Config_Plugins) GetExecute() bool { - if x != nil { - return x.Execute - } - return false -} - -func (x *OCR2Config_Plugins) GetMedian() bool { - if x != nil { - return x.Median - } - return false -} - -func (x *OCR2Config_Plugins) GetMercury() bool { - if x != nil { - return x.Mercury - } - return false -} - -func (x *OCR2Config_Plugins) GetRebalancer() bool { - if x != nil { - return x.Rebalancer - } - return false -} - -type ListNodesRequest_Filter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` - Enabled EnableState `protobuf:"varint,2,opt,name=enabled,proto3,enum=api.node.v1.EnableState" json:"enabled,omitempty"` - Selectors []*ptypes.Selector `protobuf:"bytes,3,rep,name=selectors,proto3" json:"selectors,omitempty"` -} - -func (x *ListNodesRequest_Filter) Reset() { - *x = ListNodesRequest_Filter{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListNodesRequest_Filter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListNodesRequest_Filter) ProtoMessage() {} - -func (x *ListNodesRequest_Filter) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListNodesRequest_Filter.ProtoReflect.Descriptor instead. -func (*ListNodesRequest_Filter) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{10, 0} -} - -func (x *ListNodesRequest_Filter) GetIds() []string { - if x != nil { - return x.Ids - } - return nil -} - -func (x *ListNodesRequest_Filter) GetEnabled() EnableState { - if x != nil { - return x.Enabled - } - return EnableState_ENABLE_STATE_UNSPECIFIED -} - -func (x *ListNodesRequest_Filter) GetSelectors() []*ptypes.Selector { - if x != nil { - return x.Selectors - } - return nil -} - -type ListNodeChainConfigsRequest_Filter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - NodeIds []string `protobuf:"bytes,1,rep,name=node_ids,json=nodeIds,proto3" json:"node_ids,omitempty"` -} - -func (x *ListNodeChainConfigsRequest_Filter) Reset() { - *x = ListNodeChainConfigsRequest_Filter{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v1_node_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListNodeChainConfigsRequest_Filter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListNodeChainConfigsRequest_Filter) ProtoMessage() {} - -func (x *ListNodeChainConfigsRequest_Filter) ProtoReflect() protoreflect.Message { - mi := &file_node_v1_node_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListNodeChainConfigsRequest_Filter.ProtoReflect.Descriptor instead. -func (*ListNodeChainConfigsRequest_Filter) Descriptor() ([]byte, []int) { - return file_node_v1_node_proto_rawDescGZIP(), []int{18, 0} -} - -func (x *ListNodeChainConfigsRequest_Filter) GetNodeIds() []string { - if x != nil { - return x.NodeIds - } - return nil -} - -var File_node_v1_node_proto protoreflect.FileDescriptor - -var file_node_v1_node_proto_rawDesc = []byte{ - 0x0a, 0x12, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, - 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x19, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x2f, 0x70, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xab, 0x02, - 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, - 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x43, 0x0a, 0x05, 0x43, - 0x68, 0x61, 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x2a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x22, 0x2d, 0x0a, 0x11, 0x46, 0x6c, 0x75, 0x78, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, - 0x89, 0x04, 0x0a, 0x0a, 0x4f, 0x43, 0x52, 0x31, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, - 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x62, - 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x69, 0x73, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x12, 0x4a, 0x0a, 0x0e, 0x70, - 0x32, 0x70, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x4f, 0x43, 0x52, 0x31, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x32, 0x50, - 0x4b, 0x65, 0x79, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x0c, 0x70, 0x32, 0x70, 0x4b, 0x65, - 0x79, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x4a, 0x0a, 0x0e, 0x6f, 0x63, 0x72, 0x5f, 0x6b, - 0x65, 0x79, 0x5f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x43, - 0x52, 0x31, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4f, 0x43, 0x52, 0x4b, 0x65, 0x79, 0x42, - 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x0c, 0x6f, 0x63, 0x72, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, - 0x72, 0x1a, 0x46, 0x0a, 0x0c, 0x50, 0x32, 0x50, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x6e, 0x64, 0x6c, - 0x65, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x70, 0x65, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x1a, 0xbf, 0x01, 0x0a, 0x0c, 0x4f, 0x43, - 0x52, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x75, - 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, - 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x4b, 0x65, 0x79, 0x12, 0x2e, 0x0a, 0x13, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x11, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x4b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x17, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x73, - 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x69, 0x67, - 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x9c, 0x06, 0x0a, 0x0a, - 0x4f, 0x43, 0x52, 0x32, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x62, 0x6f, 0x6f, 0x74, 0x73, - 0x74, 0x72, 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x42, 0x6f, - 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x12, 0x4a, 0x0a, 0x0e, 0x70, 0x32, 0x70, 0x5f, 0x6b, - 0x65, 0x79, 0x5f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x43, - 0x52, 0x32, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x32, 0x50, 0x4b, 0x65, 0x79, 0x42, - 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x0c, 0x70, 0x32, 0x70, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x12, 0x4a, 0x0a, 0x0e, 0x6f, 0x63, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x62, - 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x43, 0x52, 0x32, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4f, 0x43, 0x52, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x6e, 0x64, 0x6c, - 0x65, 0x52, 0x0c, 0x6f, 0x63, 0x72, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x61, 0x64, 0x64, 0x72, 0x12, 0x39, 0x0a, - 0x07, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x43, 0x52, - 0x32, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x52, - 0x07, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x11, 0x66, 0x6f, 0x72, 0x77, - 0x61, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x10, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x72, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x88, 0x01, 0x01, 0x1a, 0x46, 0x0a, 0x0c, 0x50, 0x32, - 0x50, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x65, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x65, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, - 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, - 0x65, 0x79, 0x1a, 0xbf, 0x01, 0x0a, 0x0c, 0x4f, 0x43, 0x52, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x49, 0x64, - 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x2e, 0x0a, 0x13, - 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, - 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6f, 0x66, 0x66, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x17, - 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x5f, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x6f, - 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x1a, 0x8d, 0x01, 0x0a, 0x07, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, - 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x06, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, - 0x72, 0x63, 0x75, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6d, 0x65, 0x72, - 0x63, 0x75, 0x72, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x72, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, - 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xaa, 0x03, 0x0a, 0x0b, 0x43, - 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x28, 0x0a, 0x05, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x05, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x23, 0x0a, - 0x0d, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x4e, 0x0a, 0x13, 0x66, 0x6c, 0x75, 0x78, 0x5f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, - 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6c, - 0x75, 0x78, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x11, 0x66, 0x6c, 0x75, 0x78, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x38, 0x0a, 0x0b, 0x6f, 0x63, 0x72, 0x31, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, - 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x43, 0x52, 0x31, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x0a, 0x6f, 0x63, 0x72, 0x31, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x38, 0x0a, 0x0b, - 0x6f, 0x63, 0x72, 0x32, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x4f, 0x43, 0x52, 0x32, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x6f, 0x63, 0x72, 0x32, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x1a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x17, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x4b, 0x65, 0x79, 0x88, 0x01, 0x01, 0x42, 0x1d, 0x0a, 0x1b, 0x5f, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x72, 0x0a, 0x13, 0x52, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x12, 0x28, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x2e, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, 0x3d, 0x0a, 0x14, 0x52, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x20, 0x0a, 0x0e, 0x47, 0x65, - 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x38, 0x0a, 0x0f, - 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x25, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, - 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0xd4, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x4e, - 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x06, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, - 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x81, 0x01, 0x0a, 0x06, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x32, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, - 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x31, 0x0a, 0x09, 0x73, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x52, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x22, 0x3c, 0x0a, - 0x11, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x27, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x11, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, - 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x4b, 0x65, 0x79, 0x12, 0x28, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, 0x3b, - 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x24, 0x0a, 0x12, 0x44, - 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x22, 0x3c, 0x0a, 0x13, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x22, - 0x23, 0x0a, 0x11, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x22, 0x3b, 0x0a, 0x12, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, - 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x04, 0x6e, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, - 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x64, - 0x65, 0x22, 0x8b, 0x01, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x47, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x23, 0x0a, 0x06, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x73, 0x22, - 0x5d, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3d, 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x0c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2a, 0x6b, - 0x0a, 0x09, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x43, - 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x49, 0x4e, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x56, 0x4d, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x43, - 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x4f, 0x4c, 0x41, 0x4e, 0x41, - 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x53, 0x54, 0x41, 0x52, 0x4b, 0x4e, 0x45, 0x54, 0x10, 0x03, 0x2a, 0x60, 0x0a, 0x0b, 0x45, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x45, 0x4e, - 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x45, 0x4e, 0x41, 0x42, - 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, - 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x32, 0xdf, 0x04, - 0x0a, 0x0b, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x52, 0x0a, - 0x0b, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, - 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x61, - 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x4f, 0x0a, 0x0a, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, - 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x46, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, - 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x09, 0x4c, 0x69, - 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, - 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, - 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, - 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, - 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0c, 0x52, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6e, 0x6f, - 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x6f, - 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, - 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, - 0x09, 0x5a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, -} - -var ( - file_node_v1_node_proto_rawDescOnce sync.Once - file_node_v1_node_proto_rawDescData = file_node_v1_node_proto_rawDesc -) - -func file_node_v1_node_proto_rawDescGZIP() []byte { - file_node_v1_node_proto_rawDescOnce.Do(func() { - file_node_v1_node_proto_rawDescData = protoimpl.X.CompressGZIP(file_node_v1_node_proto_rawDescData) - }) - return file_node_v1_node_proto_rawDescData -} - -var file_node_v1_node_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_node_v1_node_proto_msgTypes = make([]protoimpl.MessageInfo, 27) -var file_node_v1_node_proto_goTypes = []interface{}{ - (ChainType)(0), // 0: api.node.v1.ChainType - (EnableState)(0), // 1: api.node.v1.EnableState - (*Node)(nil), // 2: api.node.v1.Node - (*Chain)(nil), // 3: api.node.v1.Chain - (*FluxMonitorConfig)(nil), // 4: api.node.v1.FluxMonitorConfig - (*OCR1Config)(nil), // 5: api.node.v1.OCR1Config - (*OCR2Config)(nil), // 6: api.node.v1.OCR2Config - (*ChainConfig)(nil), // 7: api.node.v1.ChainConfig - (*RegisterNodeRequest)(nil), // 8: api.node.v1.RegisterNodeRequest - (*RegisterNodeResponse)(nil), // 9: api.node.v1.RegisterNodeResponse - (*GetNodeRequest)(nil), // 10: api.node.v1.GetNodeRequest - (*GetNodeResponse)(nil), // 11: api.node.v1.GetNodeResponse - (*ListNodesRequest)(nil), // 12: api.node.v1.ListNodesRequest - (*ListNodesResponse)(nil), // 13: api.node.v1.ListNodesResponse - (*UpdateNodeRequest)(nil), // 14: api.node.v1.UpdateNodeRequest - (*UpdateNodeResponse)(nil), // 15: api.node.v1.UpdateNodeResponse - (*DisableNodeRequest)(nil), // 16: api.node.v1.DisableNodeRequest - (*DisableNodeResponse)(nil), // 17: api.node.v1.DisableNodeResponse - (*EnableNodeRequest)(nil), // 18: api.node.v1.EnableNodeRequest - (*EnableNodeResponse)(nil), // 19: api.node.v1.EnableNodeResponse - (*ListNodeChainConfigsRequest)(nil), // 20: api.node.v1.ListNodeChainConfigsRequest - (*ListNodeChainConfigsResponse)(nil), // 21: api.node.v1.ListNodeChainConfigsResponse - (*OCR1Config_P2PKeyBundle)(nil), // 22: api.node.v1.OCR1Config.P2PKeyBundle - (*OCR1Config_OCRKeyBundle)(nil), // 23: api.node.v1.OCR1Config.OCRKeyBundle - (*OCR2Config_P2PKeyBundle)(nil), // 24: api.node.v1.OCR2Config.P2PKeyBundle - (*OCR2Config_OCRKeyBundle)(nil), // 25: api.node.v1.OCR2Config.OCRKeyBundle - (*OCR2Config_Plugins)(nil), // 26: api.node.v1.OCR2Config.Plugins - (*ListNodesRequest_Filter)(nil), // 27: api.node.v1.ListNodesRequest.Filter - (*ListNodeChainConfigsRequest_Filter)(nil), // 28: api.node.v1.ListNodeChainConfigsRequest.Filter - (*ptypes.Label)(nil), // 29: api.label.Label - (*timestamppb.Timestamp)(nil), // 30: google.protobuf.Timestamp - (*ptypes.Selector)(nil), // 31: api.label.Selector -} -var file_node_v1_node_proto_depIdxs = []int32{ - 29, // 0: api.node.v1.Node.labels:type_name -> api.label.Label - 30, // 1: api.node.v1.Node.created_at:type_name -> google.protobuf.Timestamp - 30, // 2: api.node.v1.Node.updated_at:type_name -> google.protobuf.Timestamp - 0, // 3: api.node.v1.Chain.type:type_name -> api.node.v1.ChainType - 22, // 4: api.node.v1.OCR1Config.p2p_key_bundle:type_name -> api.node.v1.OCR1Config.P2PKeyBundle - 23, // 5: api.node.v1.OCR1Config.ocr_key_bundle:type_name -> api.node.v1.OCR1Config.OCRKeyBundle - 24, // 6: api.node.v1.OCR2Config.p2p_key_bundle:type_name -> api.node.v1.OCR2Config.P2PKeyBundle - 25, // 7: api.node.v1.OCR2Config.ocr_key_bundle:type_name -> api.node.v1.OCR2Config.OCRKeyBundle - 26, // 8: api.node.v1.OCR2Config.plugins:type_name -> api.node.v1.OCR2Config.Plugins - 3, // 9: api.node.v1.ChainConfig.chain:type_name -> api.node.v1.Chain - 4, // 10: api.node.v1.ChainConfig.flux_monitor_config:type_name -> api.node.v1.FluxMonitorConfig - 5, // 11: api.node.v1.ChainConfig.ocr1_config:type_name -> api.node.v1.OCR1Config - 6, // 12: api.node.v1.ChainConfig.ocr2_config:type_name -> api.node.v1.OCR2Config - 29, // 13: api.node.v1.RegisterNodeRequest.labels:type_name -> api.label.Label - 2, // 14: api.node.v1.RegisterNodeResponse.node:type_name -> api.node.v1.Node - 2, // 15: api.node.v1.GetNodeResponse.node:type_name -> api.node.v1.Node - 27, // 16: api.node.v1.ListNodesRequest.filter:type_name -> api.node.v1.ListNodesRequest.Filter - 2, // 17: api.node.v1.ListNodesResponse.nodes:type_name -> api.node.v1.Node - 29, // 18: api.node.v1.UpdateNodeRequest.labels:type_name -> api.label.Label - 2, // 19: api.node.v1.UpdateNodeResponse.node:type_name -> api.node.v1.Node - 2, // 20: api.node.v1.DisableNodeResponse.node:type_name -> api.node.v1.Node - 2, // 21: api.node.v1.EnableNodeResponse.node:type_name -> api.node.v1.Node - 28, // 22: api.node.v1.ListNodeChainConfigsRequest.filter:type_name -> api.node.v1.ListNodeChainConfigsRequest.Filter - 7, // 23: api.node.v1.ListNodeChainConfigsResponse.chain_configs:type_name -> api.node.v1.ChainConfig - 1, // 24: api.node.v1.ListNodesRequest.Filter.enabled:type_name -> api.node.v1.EnableState - 31, // 25: api.node.v1.ListNodesRequest.Filter.selectors:type_name -> api.label.Selector - 16, // 26: api.node.v1.NodeService.DisableNode:input_type -> api.node.v1.DisableNodeRequest - 18, // 27: api.node.v1.NodeService.EnableNode:input_type -> api.node.v1.EnableNodeRequest - 10, // 28: api.node.v1.NodeService.GetNode:input_type -> api.node.v1.GetNodeRequest - 12, // 29: api.node.v1.NodeService.ListNodes:input_type -> api.node.v1.ListNodesRequest - 20, // 30: api.node.v1.NodeService.ListNodeChainConfigs:input_type -> api.node.v1.ListNodeChainConfigsRequest - 8, // 31: api.node.v1.NodeService.RegisterNode:input_type -> api.node.v1.RegisterNodeRequest - 14, // 32: api.node.v1.NodeService.UpdateNode:input_type -> api.node.v1.UpdateNodeRequest - 17, // 33: api.node.v1.NodeService.DisableNode:output_type -> api.node.v1.DisableNodeResponse - 19, // 34: api.node.v1.NodeService.EnableNode:output_type -> api.node.v1.EnableNodeResponse - 11, // 35: api.node.v1.NodeService.GetNode:output_type -> api.node.v1.GetNodeResponse - 13, // 36: api.node.v1.NodeService.ListNodes:output_type -> api.node.v1.ListNodesResponse - 21, // 37: api.node.v1.NodeService.ListNodeChainConfigs:output_type -> api.node.v1.ListNodeChainConfigsResponse - 9, // 38: api.node.v1.NodeService.RegisterNode:output_type -> api.node.v1.RegisterNodeResponse - 15, // 39: api.node.v1.NodeService.UpdateNode:output_type -> api.node.v1.UpdateNodeResponse - 33, // [33:40] is the sub-list for method output_type - 26, // [26:33] is the sub-list for method input_type - 26, // [26:26] is the sub-list for extension type_name - 26, // [26:26] is the sub-list for extension extendee - 0, // [0:26] is the sub-list for field type_name -} - -func init() { file_node_v1_node_proto_init() } -func file_node_v1_node_proto_init() { - if File_node_v1_node_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_node_v1_node_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Node); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Chain); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FluxMonitorConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OCR1Config); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OCR2Config); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChainConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterNodeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterNodeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetNodeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetNodeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListNodesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListNodesResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateNodeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateNodeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DisableNodeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DisableNodeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnableNodeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnableNodeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListNodeChainConfigsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListNodeChainConfigsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OCR1Config_P2PKeyBundle); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OCR1Config_OCRKeyBundle); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OCR2Config_P2PKeyBundle); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OCR2Config_OCRKeyBundle); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OCR2Config_Plugins); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListNodesRequest_Filter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v1_node_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListNodeChainConfigsRequest_Filter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_node_v1_node_proto_msgTypes[4].OneofWrappers = []interface{}{} - file_node_v1_node_proto_msgTypes[5].OneofWrappers = []interface{}{} - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_node_v1_node_proto_rawDesc, - NumEnums: 2, - NumMessages: 27, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_node_v1_node_proto_goTypes, - DependencyIndexes: file_node_v1_node_proto_depIdxs, - EnumInfos: file_node_v1_node_proto_enumTypes, - MessageInfos: file_node_v1_node_proto_msgTypes, - }.Build() - File_node_v1_node_proto = out.File - file_node_v1_node_proto_rawDesc = nil - file_node_v1_node_proto_goTypes = nil - file_node_v1_node_proto_depIdxs = nil -} \ No newline at end of file diff --git a/integration-tests/deployment/jd/node/v1/node_grpc.pb.go b/integration-tests/deployment/jd/node/v1/node_grpc.pb.go deleted file mode 100644 index 70010f3f0c6..00000000000 --- a/integration-tests/deployment/jd/node/v1/node_grpc.pb.go +++ /dev/null @@ -1,343 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.3 -// source: node/v1/node.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - NodeService_DisableNode_FullMethodName = "/api.node.v1.NodeService/DisableNode" - NodeService_EnableNode_FullMethodName = "/api.node.v1.NodeService/EnableNode" - NodeService_GetNode_FullMethodName = "/api.node.v1.NodeService/GetNode" - NodeService_ListNodes_FullMethodName = "/api.node.v1.NodeService/ListNodes" - NodeService_ListNodeChainConfigs_FullMethodName = "/api.node.v1.NodeService/ListNodeChainConfigs" - NodeService_RegisterNode_FullMethodName = "/api.node.v1.NodeService/RegisterNode" - NodeService_UpdateNode_FullMethodName = "/api.node.v1.NodeService/UpdateNode" -) - -// NodeServiceClient is the client API for NodeService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type NodeServiceClient interface { - // DisableNode marks a node as disabled, disabling any active operations on it. - DisableNode(ctx context.Context, in *DisableNodeRequest, opts ...grpc.CallOption) (*DisableNodeResponse, error) - // EnableNode enabled a disabled node, allowing operations to resume. - EnableNode(ctx context.Context, in *EnableNodeRequest, opts ...grpc.CallOption) (*EnableNodeResponse, error) - // GetNode retrieves the details of a node by its unique identifier. - GetNode(ctx context.Context, in *GetNodeRequest, opts ...grpc.CallOption) (*GetNodeResponse, error) - // ListNodes returns a list of nodes, optionally filtered by the provided criteria. - ListNodes(ctx context.Context, in *ListNodesRequest, opts ...grpc.CallOption) (*ListNodesResponse, error) - ListNodeChainConfigs(ctx context.Context, in *ListNodeChainConfigsRequest, opts ...grpc.CallOption) (*ListNodeChainConfigsResponse, error) - // RegisterNode registers a new node to the system. - RegisterNode(ctx context.Context, in *RegisterNodeRequest, opts ...grpc.CallOption) (*RegisterNodeResponse, error) - // UpdateNode updates the details of an existing node. - UpdateNode(ctx context.Context, in *UpdateNodeRequest, opts ...grpc.CallOption) (*UpdateNodeResponse, error) -} - -type nodeServiceClient struct { - cc grpc.ClientConnInterface -} - -func NewNodeServiceClient(cc grpc.ClientConnInterface) NodeServiceClient { - return &nodeServiceClient{cc} -} - -func (c *nodeServiceClient) DisableNode(ctx context.Context, in *DisableNodeRequest, opts ...grpc.CallOption) (*DisableNodeResponse, error) { - out := new(DisableNodeResponse) - err := c.cc.Invoke(ctx, NodeService_DisableNode_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *nodeServiceClient) EnableNode(ctx context.Context, in *EnableNodeRequest, opts ...grpc.CallOption) (*EnableNodeResponse, error) { - out := new(EnableNodeResponse) - err := c.cc.Invoke(ctx, NodeService_EnableNode_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *nodeServiceClient) GetNode(ctx context.Context, in *GetNodeRequest, opts ...grpc.CallOption) (*GetNodeResponse, error) { - out := new(GetNodeResponse) - err := c.cc.Invoke(ctx, NodeService_GetNode_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *nodeServiceClient) ListNodes(ctx context.Context, in *ListNodesRequest, opts ...grpc.CallOption) (*ListNodesResponse, error) { - out := new(ListNodesResponse) - err := c.cc.Invoke(ctx, NodeService_ListNodes_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *nodeServiceClient) ListNodeChainConfigs(ctx context.Context, in *ListNodeChainConfigsRequest, opts ...grpc.CallOption) (*ListNodeChainConfigsResponse, error) { - out := new(ListNodeChainConfigsResponse) - err := c.cc.Invoke(ctx, NodeService_ListNodeChainConfigs_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *nodeServiceClient) RegisterNode(ctx context.Context, in *RegisterNodeRequest, opts ...grpc.CallOption) (*RegisterNodeResponse, error) { - out := new(RegisterNodeResponse) - err := c.cc.Invoke(ctx, NodeService_RegisterNode_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *nodeServiceClient) UpdateNode(ctx context.Context, in *UpdateNodeRequest, opts ...grpc.CallOption) (*UpdateNodeResponse, error) { - out := new(UpdateNodeResponse) - err := c.cc.Invoke(ctx, NodeService_UpdateNode_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// NodeServiceServer is the server API for NodeService service. -// All implementations must embed UnimplementedNodeServiceServer -// for forward compatibility -type NodeServiceServer interface { - // DisableNode marks a node as disabled, disabling any active operations on it. - DisableNode(context.Context, *DisableNodeRequest) (*DisableNodeResponse, error) - // EnableNode enabled a disabled node, allowing operations to resume. - EnableNode(context.Context, *EnableNodeRequest) (*EnableNodeResponse, error) - // GetNode retrieves the details of a node by its unique identifier. - GetNode(context.Context, *GetNodeRequest) (*GetNodeResponse, error) - // ListNodes returns a list of nodes, optionally filtered by the provided criteria. - ListNodes(context.Context, *ListNodesRequest) (*ListNodesResponse, error) - ListNodeChainConfigs(context.Context, *ListNodeChainConfigsRequest) (*ListNodeChainConfigsResponse, error) - // RegisterNode registers a new node to the system. - RegisterNode(context.Context, *RegisterNodeRequest) (*RegisterNodeResponse, error) - // UpdateNode updates the details of an existing node. - UpdateNode(context.Context, *UpdateNodeRequest) (*UpdateNodeResponse, error) - mustEmbedUnimplementedNodeServiceServer() -} - -// UnimplementedNodeServiceServer must be embedded to have forward compatible implementations. -type UnimplementedNodeServiceServer struct { -} - -func (UnimplementedNodeServiceServer) DisableNode(context.Context, *DisableNodeRequest) (*DisableNodeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DisableNode not implemented") -} -func (UnimplementedNodeServiceServer) EnableNode(context.Context, *EnableNodeRequest) (*EnableNodeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method EnableNode not implemented") -} -func (UnimplementedNodeServiceServer) GetNode(context.Context, *GetNodeRequest) (*GetNodeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetNode not implemented") -} -func (UnimplementedNodeServiceServer) ListNodes(context.Context, *ListNodesRequest) (*ListNodesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListNodes not implemented") -} -func (UnimplementedNodeServiceServer) ListNodeChainConfigs(context.Context, *ListNodeChainConfigsRequest) (*ListNodeChainConfigsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListNodeChainConfigs not implemented") -} -func (UnimplementedNodeServiceServer) RegisterNode(context.Context, *RegisterNodeRequest) (*RegisterNodeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RegisterNode not implemented") -} -func (UnimplementedNodeServiceServer) UpdateNode(context.Context, *UpdateNodeRequest) (*UpdateNodeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateNode not implemented") -} -func (UnimplementedNodeServiceServer) mustEmbedUnimplementedNodeServiceServer() {} - -// UnsafeNodeServiceServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to NodeServiceServer will -// result in compilation errors. -type UnsafeNodeServiceServer interface { - mustEmbedUnimplementedNodeServiceServer() -} - -func RegisterNodeServiceServer(s grpc.ServiceRegistrar, srv NodeServiceServer) { - s.RegisterService(&NodeService_ServiceDesc, srv) -} - -func _NodeService_DisableNode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DisableNodeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(NodeServiceServer).DisableNode(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: NodeService_DisableNode_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(NodeServiceServer).DisableNode(ctx, req.(*DisableNodeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _NodeService_EnableNode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(EnableNodeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(NodeServiceServer).EnableNode(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: NodeService_EnableNode_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(NodeServiceServer).EnableNode(ctx, req.(*EnableNodeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _NodeService_GetNode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetNodeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(NodeServiceServer).GetNode(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: NodeService_GetNode_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(NodeServiceServer).GetNode(ctx, req.(*GetNodeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _NodeService_ListNodes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListNodesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(NodeServiceServer).ListNodes(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: NodeService_ListNodes_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(NodeServiceServer).ListNodes(ctx, req.(*ListNodesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _NodeService_ListNodeChainConfigs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListNodeChainConfigsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(NodeServiceServer).ListNodeChainConfigs(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: NodeService_ListNodeChainConfigs_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(NodeServiceServer).ListNodeChainConfigs(ctx, req.(*ListNodeChainConfigsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _NodeService_RegisterNode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RegisterNodeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(NodeServiceServer).RegisterNode(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: NodeService_RegisterNode_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(NodeServiceServer).RegisterNode(ctx, req.(*RegisterNodeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _NodeService_UpdateNode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateNodeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(NodeServiceServer).UpdateNode(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: NodeService_UpdateNode_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(NodeServiceServer).UpdateNode(ctx, req.(*UpdateNodeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// NodeService_ServiceDesc is the grpc.ServiceDesc for NodeService service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var NodeService_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "api.node.v1.NodeService", - HandlerType: (*NodeServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "DisableNode", - Handler: _NodeService_DisableNode_Handler, - }, - { - MethodName: "EnableNode", - Handler: _NodeService_EnableNode_Handler, - }, - { - MethodName: "GetNode", - Handler: _NodeService_GetNode_Handler, - }, - { - MethodName: "ListNodes", - Handler: _NodeService_ListNodes_Handler, - }, - { - MethodName: "ListNodeChainConfigs", - Handler: _NodeService_ListNodeChainConfigs_Handler, - }, - { - MethodName: "RegisterNode", - Handler: _NodeService_RegisterNode_Handler, - }, - { - MethodName: "UpdateNode", - Handler: _NodeService_UpdateNode_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "node/v1/node.proto", -} \ No newline at end of file diff --git a/integration-tests/deployment/jd/shared/ptypes/label.pb.go b/integration-tests/deployment/jd/shared/ptypes/label.pb.go deleted file mode 100644 index ab8f0db54c4..00000000000 --- a/integration-tests/deployment/jd/shared/ptypes/label.pb.go +++ /dev/null @@ -1,311 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.29.0 -// protoc v4.25.3 -// source: shared/ptypes/label.proto - -package ptypes - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// SelectorOp defines the operation to be used in a selector -type SelectorOp int32 - -const ( - SelectorOp_EQ SelectorOp = 0 - SelectorOp_NOT_EQ SelectorOp = 1 - SelectorOp_IN SelectorOp = 2 - SelectorOp_NOT_IN SelectorOp = 3 - SelectorOp_EXIST SelectorOp = 4 - SelectorOp_NOT_EXIST SelectorOp = 5 -) - -// Enum value maps for SelectorOp. -var ( - SelectorOp_name = map[int32]string{ - 0: "EQ", - 1: "NOT_EQ", - 2: "IN", - 3: "NOT_IN", - 4: "EXIST", - 5: "NOT_EXIST", - } - SelectorOp_value = map[string]int32{ - "EQ": 0, - "NOT_EQ": 1, - "IN": 2, - "NOT_IN": 3, - "EXIST": 4, - "NOT_EXIST": 5, - } -) - -func (x SelectorOp) Enum() *SelectorOp { - p := new(SelectorOp) - *p = x - return p -} - -func (x SelectorOp) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (SelectorOp) Descriptor() protoreflect.EnumDescriptor { - return file_shared_ptypes_label_proto_enumTypes[0].Descriptor() -} - -func (SelectorOp) Type() protoreflect.EnumType { - return &file_shared_ptypes_label_proto_enumTypes[0] -} - -func (x SelectorOp) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use SelectorOp.Descriptor instead. -func (SelectorOp) EnumDescriptor() ([]byte, []int) { - return file_shared_ptypes_label_proto_rawDescGZIP(), []int{0} -} - -// Label defines a label as a key value pair -type Label struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Value *string `protobuf:"bytes,2,opt,name=value,proto3,oneof" json:"value,omitempty"` -} - -func (x *Label) Reset() { - *x = Label{} - if protoimpl.UnsafeEnabled { - mi := &file_shared_ptypes_label_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Label) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Label) ProtoMessage() {} - -func (x *Label) ProtoReflect() protoreflect.Message { - mi := &file_shared_ptypes_label_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Label.ProtoReflect.Descriptor instead. -func (*Label) Descriptor() ([]byte, []int) { - return file_shared_ptypes_label_proto_rawDescGZIP(), []int{0} -} - -func (x *Label) GetKey() string { - if x != nil { - return x.Key - } - return "" -} - -func (x *Label) GetValue() string { - if x != nil && x.Value != nil { - return *x.Value - } - return "" -} - -// Selector defines a selector as a key value pair with an operation -type Selector struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Op SelectorOp `protobuf:"varint,2,opt,name=op,proto3,enum=api.label.SelectorOp" json:"op,omitempty"` - Value *string `protobuf:"bytes,3,opt,name=value,proto3,oneof" json:"value,omitempty"` -} - -func (x *Selector) Reset() { - *x = Selector{} - if protoimpl.UnsafeEnabled { - mi := &file_shared_ptypes_label_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Selector) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Selector) ProtoMessage() {} - -func (x *Selector) ProtoReflect() protoreflect.Message { - mi := &file_shared_ptypes_label_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Selector.ProtoReflect.Descriptor instead. -func (*Selector) Descriptor() ([]byte, []int) { - return file_shared_ptypes_label_proto_rawDescGZIP(), []int{1} -} - -func (x *Selector) GetKey() string { - if x != nil { - return x.Key - } - return "" -} - -func (x *Selector) GetOp() SelectorOp { - if x != nil { - return x.Op - } - return SelectorOp_EQ -} - -func (x *Selector) GetValue() string { - if x != nil && x.Value != nil { - return *x.Value - } - return "" -} - -var File_shared_ptypes_label_proto protoreflect.FileDescriptor - -var file_shared_ptypes_label_proto_rawDesc = []byte{ - 0x0a, 0x19, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x2f, 0x70, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x61, 0x70, 0x69, - 0x2e, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x3e, 0x0a, 0x05, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x19, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x68, 0x0a, 0x08, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x2e, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4f, 0x70, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x19, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x2a, 0x4e, 0x0a, 0x0a, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4f, 0x70, 0x12, 0x06, - 0x0a, 0x02, 0x45, 0x51, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x54, 0x5f, 0x45, 0x51, - 0x10, 0x01, 0x12, 0x06, 0x0a, 0x02, 0x49, 0x4e, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, - 0x54, 0x5f, 0x49, 0x4e, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, - 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x05, - 0x42, 0x47, 0x5a, 0x45, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, - 0x6d, 0x61, 0x72, 0x74, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6b, 0x69, 0x74, 0x2f, - 0x6a, 0x6f, 0x62, 0x2d, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x2f, - 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x73, 0x68, 0x61, 0x72, - 0x65, 0x64, 0x2f, 0x70, 0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, -} - -var ( - file_shared_ptypes_label_proto_rawDescOnce sync.Once - file_shared_ptypes_label_proto_rawDescData = file_shared_ptypes_label_proto_rawDesc -) - -func file_shared_ptypes_label_proto_rawDescGZIP() []byte { - file_shared_ptypes_label_proto_rawDescOnce.Do(func() { - file_shared_ptypes_label_proto_rawDescData = protoimpl.X.CompressGZIP(file_shared_ptypes_label_proto_rawDescData) - }) - return file_shared_ptypes_label_proto_rawDescData -} - -var file_shared_ptypes_label_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_shared_ptypes_label_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_shared_ptypes_label_proto_goTypes = []interface{}{ - (SelectorOp)(0), // 0: api.label.SelectorOp - (*Label)(nil), // 1: api.label.Label - (*Selector)(nil), // 2: api.label.Selector -} -var file_shared_ptypes_label_proto_depIdxs = []int32{ - 0, // 0: api.label.Selector.op:type_name -> api.label.SelectorOp - 1, // [1:1] is the sub-list for method output_type - 1, // [1:1] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name -} - -func init() { file_shared_ptypes_label_proto_init() } -func file_shared_ptypes_label_proto_init() { - if File_shared_ptypes_label_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_shared_ptypes_label_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Label); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_shared_ptypes_label_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Selector); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_shared_ptypes_label_proto_msgTypes[0].OneofWrappers = []interface{}{} - file_shared_ptypes_label_proto_msgTypes[1].OneofWrappers = []interface{}{} - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_shared_ptypes_label_proto_rawDesc, - NumEnums: 1, - NumMessages: 2, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_shared_ptypes_label_proto_goTypes, - DependencyIndexes: file_shared_ptypes_label_proto_depIdxs, - EnumInfos: file_shared_ptypes_label_proto_enumTypes, - MessageInfos: file_shared_ptypes_label_proto_msgTypes, - }.Build() - File_shared_ptypes_label_proto = out.File - file_shared_ptypes_label_proto_rawDesc = nil - file_shared_ptypes_label_proto_goTypes = nil - file_shared_ptypes_label_proto_depIdxs = nil -} \ No newline at end of file diff --git a/integration-tests/deployment/keystone/types.go b/integration-tests/deployment/keystone/types.go index 562a87de3b4..439fe4ed47d 100644 --- a/integration-tests/deployment/keystone/types.go +++ b/integration-tests/deployment/keystone/types.go @@ -14,7 +14,9 @@ import ( "github.com/smartcontractkit/chainlink/integration-tests/deployment" "github.com/smartcontractkit/chainlink/integration-tests/deployment/clo/models" - v1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/node/v1" + + v1 "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/node" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/keystone/generated/capabilities_registry" kcr "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/keystone/generated/capabilities_registry" "github.com/smartcontractkit/chainlink/v2/core/services/keystore/chaintype" diff --git a/integration-tests/deployment/keystone/types_test.go b/integration-tests/deployment/keystone/types_test.go index 052d96f05d9..612e98d3309 100644 --- a/integration-tests/deployment/keystone/types_test.go +++ b/integration-tests/deployment/keystone/types_test.go @@ -8,8 +8,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/test-go/testify/require" + v1 "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/node" "github.com/smartcontractkit/chainlink/integration-tests/deployment/clo/models" - v1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/node/v1" kcr "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/keystone/generated/capabilities_registry" "github.com/smartcontractkit/chainlink/v2/core/services/keystore/chaintype" ) diff --git a/integration-tests/deployment/memory/job_client.go b/integration-tests/deployment/memory/job_client.go index 74ba224ee19..0bd4035c78d 100644 --- a/integration-tests/deployment/memory/job_client.go +++ b/integration-tests/deployment/memory/job_client.go @@ -9,9 +9,9 @@ import ( "github.com/ethereum/go-ethereum/common" "google.golang.org/grpc" - csav1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/csa/v1" - jobv1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/job/v1" - nodev1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/node/v1" + csav1 "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/csa" + jobv1 "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/job" + nodev1 "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/node" "github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/validate" ) diff --git a/integration-tests/go.mod b/integration-tests/go.mod index fc91dd58b05..9c77293daa9 100644 --- a/integration-tests/go.mod +++ b/integration-tests/go.mod @@ -41,6 +41,7 @@ require ( github.com/smartcontractkit/chainlink-automation v0.8.0 github.com/smartcontractkit/chainlink-ccip v0.0.0-20241017140434-6757be193e1c github.com/smartcontractkit/chainlink-common v0.3.1-0.20241018143728-5248d7c4468a + github.com/smartcontractkit/chainlink-protos/job-distributor v0.4.0 github.com/smartcontractkit/chainlink-testing-framework/havoc v1.50.0 github.com/smartcontractkit/chainlink-testing-framework/lib v1.50.11-0.20241011153842-b2804aed25b4 github.com/smartcontractkit/chainlink-testing-framework/lib/grafana v1.50.0 diff --git a/integration-tests/go.sum b/integration-tests/go.sum index d9764015109..21f03ca5859 100644 --- a/integration-tests/go.sum +++ b/integration-tests/go.sum @@ -1412,6 +1412,8 @@ github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20241018134907-a00ba github.com/smartcontractkit/chainlink-data-streams v0.1.1-0.20241018134907-a00ba3729b5e/go.mod h1:iK3BNHKCLgSgkOyiu3iE7sfZ20Qnuk7xwjV/yO/6gnQ= github.com/smartcontractkit/chainlink-feeds v0.1.1 h1:JzvUOM/OgGQA1sOqTXXl52R6AnNt+Wg64sVG+XSA49c= github.com/smartcontractkit/chainlink-feeds v0.1.1/go.mod h1:55EZ94HlKCfAsUiKUTNI7QlE/3d3IwTlsU3YNa/nBb4= +github.com/smartcontractkit/chainlink-protos/job-distributor v0.4.0 h1:1xTm8UGeDUAjvCXRh08+4xBRX33owH5MqC522JdelM0= +github.com/smartcontractkit/chainlink-protos/job-distributor v0.4.0/go.mod h1:/dVVLXrsp+V0AbcYGJo3XMzKg3CkELsweA/TTopCsKE= github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0 h1:PBUaFfPLm+Efq7H9kdfGBivH+QhJ6vB5EZTR/sCZsxI= github.com/smartcontractkit/chainlink-protos/orchestrator v0.3.0/go.mod h1:m/A3lqD7ms/RsQ9BT5P2uceYY0QX5mIt4KQxT2G6qEo= github.com/smartcontractkit/chainlink-solana v1.1.1-0.20241017193838-6c937ac2d042 h1:R8F2tpyvN0peK0woG/Spx+IdukxlSSWDDLyFQNkLfUs= diff --git a/integration-tests/smoke/ccip_test.go b/integration-tests/smoke/ccip_test.go index b34876c5b2b..d7842586050 100644 --- a/integration-tests/smoke/ccip_test.go +++ b/integration-tests/smoke/ccip_test.go @@ -14,7 +14,9 @@ import ( ccdeploy "github.com/smartcontractkit/chainlink/integration-tests/deployment/ccip" "github.com/smartcontractkit/chainlink/integration-tests/deployment/ccip/changeset" - jobv1 "github.com/smartcontractkit/chainlink/integration-tests/deployment/jd/job/v1" + + jobv1 "github.com/smartcontractkit/chainlink-protos/job-distributor/v1/job" + "github.com/smartcontractkit/chainlink/v2/core/logger" ) From 6d40719bb5f858833c94144a0f7d090f5bdd190e Mon Sep 17 00:00:00 2001 From: Erik Burton Date: Mon, 21 Oct 2024 12:19:45 -0700 Subject: [PATCH 09/13] fix: flakey tests reporting (#14851) * fix: flakey tests reporting * fix: remove unused param from constructor --- .github/workflows/ci-core.yml | 87 ++++++++++++++++++++++++++++ tools/flakeytests/cmd/runner/main.go | 7 +-- tools/flakeytests/reporter.go | 6 +- tools/flakeytests/reporter_test.go | 10 ++-- 4 files changed, 95 insertions(+), 15 deletions(-) diff --git a/.github/workflows/ci-core.yml b/.github/workflows/ci-core.yml index ada0d352a98..47be06cca7f 100644 --- a/.github/workflows/ci-core.yml +++ b/.github/workflows/ci-core.yml @@ -244,6 +244,93 @@ jobs: echo "path_output=${resultsFile}" >> $GITHUB_OUTPUT fi + detect-flakey-tests: + needs: [filter, core] + name: Flakey Test Detection + runs-on: ubuntu-latest + if: ${{ always() && github.actor != 'dependabot[bot]' }} + env: + CL_DATABASE_URL: postgresql://postgres:postgres@localhost:5432/chainlink_test?sslmode=disable + permissions: + id-token: write + contents: read + steps: + - name: Checkout the repo + uses: actions/checkout@v4.2.1 + - name: Setup node + if: ${{ needs.filter.outputs.changes == 'true' }} + uses: actions/setup-node@v4.0.4 + - name: Setup NodeJS + if: ${{ needs.filter.outputs.changes == 'true' }} + uses: ./.github/actions/setup-nodejs + with: + prod: "true" + - name: Setup Go + if: ${{ needs.filter.outputs.changes == 'true' }} + uses: ./.github/actions/setup-go + - name: Setup Postgres + if: ${{ needs.filter.outputs.changes == 'true' }} + uses: ./.github/actions/setup-postgres + - name: Touching core/web/assets/index.html + if: ${{ needs.filter.outputs.changes == 'true' }} + run: mkdir -p core/web/assets && touch core/web/assets/index.html + - name: Download Go vendor packages + if: ${{ needs.filter.outputs.changes == 'true' }} + run: go mod download + - name: Replace chainlink-evm deps + if: ${{ needs.filter.outputs.changes == 'true' && inputs.evm-ref != ''}} + shell: bash + run: go get github.com/smartcontractkit/chainlink-integrations/evm/relayer@${{ inputs.evm-ref }} + - name: Build binary + if: ${{ needs.filter.outputs.changes == 'true' }} + run: go build -o chainlink.test . + - name: Setup DB + if: ${{ needs.filter.outputs.changes == 'true' }} + run: ./chainlink.test local db preparetest + - name: Load test outputs + if: ${{ needs.filter.outputs.changes == 'true' }} + uses: actions/download-artifact@v4.1.8 + with: + name: go_core_tests_logs + path: ./artifacts + - name: Delete go_core_tests_logs/coverage.txt + if: ${{ needs.filter.outputs.changes == 'true' }} + shell: bash + run: | + # Need to delete coverage.txt so the disk doesn't fill up + rm -f ./artifacts/go_core_tests_logs/coverage.txt + - name: Build flakey test runner + if: ${{ needs.filter.outputs.changes == 'true' }} + run: go build ./tools/flakeytests/cmd/runner + - name: Re-run tests + if: ${{ needs.filter.outputs.changes == 'true' }} + env: + GRAFANA_INTERNAL_BASIC_AUTH: ${{ secrets.GRAFANA_INTERNAL_BASIC_AUTH }} + GRAFANA_INTERNAL_HOST: ${{ secrets.GRAFANA_INTERNAL_HOST }} + GITHUB_EVENT_PATH: ${{ github.event_path }} + GITHUB_EVENT_NAME: ${{ github.event_name }} + GITHUB_REPO: ${{ github.repository }} + GITHUB_RUN_ID: ${{ github.run_id }} + run: | + ./runner \ + -grafana_auth=$GRAFANA_INTERNAL_BASIC_AUTH \ + -grafana_host=$GRAFANA_INTERNAL_HOST \ + -gh_sha=$GITHUB_SHA \ + -gh_event_path=$GITHUB_EVENT_PATH \ + -gh_event_name=$GITHUB_EVENT_NAME \ + -gh_run_id=$GITHUB_RUN_ID \ + -gh_repo=$GITHUB_REPO \ + -command=./tools/bin/go_core_tests \ + `ls -R ./artifacts/output.txt` + - name: Store logs artifacts + if: ${{ needs.filter.outputs.changes == 'true' && always() }} + uses: actions/upload-artifact@v4.4.3 + with: + name: flakey_test_runner_logs + path: | + ./output.txt + retention-days: 7 + scan: name: SonarQube Scan needs: [core] diff --git a/tools/flakeytests/cmd/runner/main.go b/tools/flakeytests/cmd/runner/main.go index 0e1be5e7d38..c20fef17b10 100644 --- a/tools/flakeytests/cmd/runner/main.go +++ b/tools/flakeytests/cmd/runner/main.go @@ -24,7 +24,6 @@ func main() { grafanaHost := flag.String("grafana_host", "", "grafana host URL") grafanaAuth := flag.String("grafana_auth", "", "grafana basic auth for Loki API") - grafanaOrgID := flag.String("grafana_org_id", "", "grafana org ID") command := flag.String("command", "", "test command being rerun; used to tag metrics") ghSHA := flag.String("gh_sha", "", "commit sha for which we're rerunning tests") ghEventPath := flag.String("gh_event_path", "", "path to associated gh event") @@ -46,10 +45,6 @@ func main() { log.Fatal("Error re-running flakey tests: `grafana_auth` is required") } - if *grafanaOrgID == "" { - log.Fatal("Error re-running flakey tests: `grafana_org_id` is required") - } - if *command == "" { log.Fatal("Error re-running flakey tests: `command` is required") } @@ -68,7 +63,7 @@ func main() { } meta := flakeytests.GetGithubMetadata(*ghRepo, *ghEventName, *ghSHA, *ghEventPath, *ghRunID, runAttempt) - rep := flakeytests.NewLokiReporter(*grafanaHost, *grafanaAuth, *grafanaOrgID, *command, meta) + rep := flakeytests.NewLokiReporter(*grafanaHost, *grafanaAuth, *command, meta) r := flakeytests.NewRunner(readers, rep, numReruns) err := r.Run(ctx) if err != nil { diff --git a/tools/flakeytests/reporter.go b/tools/flakeytests/reporter.go index b3c8ad6da00..b7c7f66698f 100644 --- a/tools/flakeytests/reporter.go +++ b/tools/flakeytests/reporter.go @@ -62,7 +62,6 @@ type Context struct { type LokiReporter struct { host string auth string - orgId string command string now func() time.Time ctx Context @@ -156,7 +155,6 @@ func (l *LokiReporter) makeRequest(ctx context.Context, pushReq pushRequest) err fmt.Sprintf("Basic %s", base64.StdEncoding.EncodeToString([]byte(l.auth))), ) req.Header.Add("Content-Type", "application/json") - req.Header.Add("X-Scope-OrgID", l.orgId) resp, err := http.DefaultClient.Do(req) if err != nil { return err @@ -179,6 +177,6 @@ func (l *LokiReporter) Report(ctx context.Context, report *Report) error { return l.makeRequest(ctx, pushReq) } -func NewLokiReporter(host, auth, orgId, command string, ctx Context) *LokiReporter { - return &LokiReporter{host: host, auth: auth, orgId: orgId, command: command, now: time.Now, ctx: ctx} +func NewLokiReporter(host, auth, command string, ctx Context) *LokiReporter { + return &LokiReporter{host: host, auth: auth, command: command, now: time.Now, ctx: ctx} } diff --git a/tools/flakeytests/reporter_test.go b/tools/flakeytests/reporter_test.go index c2b03e26dc3..15650fc7bd1 100644 --- a/tools/flakeytests/reporter_test.go +++ b/tools/flakeytests/reporter_test.go @@ -19,7 +19,7 @@ func TestMakeRequest_SingleTest(t *testing.T) { }, }, } - lr := &LokiReporter{auth: "bla", host: "bla", orgId: "bla", command: "go_core_tests", now: func() time.Time { return now }} + lr := &LokiReporter{auth: "bla", host: "bla", command: "go_core_tests", now: func() time.Time { return now }} pr, err := lr.createRequest(r) require.NoError(t, err) assert.Len(t, pr.Streams, 1) @@ -41,7 +41,7 @@ func TestMakeRequest_MultipleTests(t *testing.T) { }, }, } - lr := &LokiReporter{auth: "bla", host: "bla", orgId: "bla", command: "go_core_tests", now: func() time.Time { return now }} + lr := &LokiReporter{auth: "bla", host: "bla", command: "go_core_tests", now: func() time.Time { return now }} pr, err := lr.createRequest(r) require.NoError(t, err) assert.Len(t, pr.Streams, 1) @@ -58,7 +58,7 @@ func TestMakeRequest_NoTests(t *testing.T) { now := time.Now() ts := fmt.Sprintf("%d", now.UnixNano()) r := NewReport() - lr := &LokiReporter{auth: "bla", host: "bla", orgId: "bla", command: "go_core_tests", now: func() time.Time { return now }} + lr := &LokiReporter{auth: "bla", host: "bla", command: "go_core_tests", now: func() time.Time { return now }} pr, err := lr.createRequest(r) require.NoError(t, err) assert.Len(t, pr.Streams, 1) @@ -72,7 +72,7 @@ func TestMakeRequest_WithContext(t *testing.T) { now := time.Now() ts := fmt.Sprintf("%d", now.UnixNano()) r := NewReport() - lr := &LokiReporter{auth: "bla", host: "bla", orgId: "bla", command: "go_core_tests", now: func() time.Time { return now }, ctx: Context{CommitSHA: "42"}} + lr := &LokiReporter{auth: "bla", host: "bla", command: "go_core_tests", now: func() time.Time { return now }, ctx: Context{CommitSHA: "42"}} pr, err := lr.createRequest(r) require.NoError(t, err) assert.Len(t, pr.Streams, 1) @@ -95,7 +95,7 @@ func TestMakeRequest_Panics(t *testing.T) { "core/assets": 1, }, } - lr := &LokiReporter{auth: "bla", host: "bla", orgId: "bla", command: "go_core_tests", now: func() time.Time { return now }} + lr := &LokiReporter{auth: "bla", host: "bla", command: "go_core_tests", now: func() time.Time { return now }} pr, err := lr.createRequest(r) require.NoError(t, err) assert.Len(t, pr.Streams, 1) From 1d0cf6b07b410c4ae4d869a77e97a27d25ef4a69 Mon Sep 17 00:00:00 2001 From: jinhoonbang Date: Mon, 21 Oct 2024 12:32:32 -0700 Subject: [PATCH 10/13] generate workflow sdk types. small fixes (#14780) * generate workflow sdk types. small fixes * verified target is working * add default if nil function * fix linter * commit correct file * add receiver to sign and send to gateway * add test for default workflow config in target * remove fmt.print * fix linter * address comments * fix linter --- .../webapi/target/connector_handler.go | 3 +- core/capabilities/webapi/target/target.go | 55 +++++++--- .../capabilities/webapi/target/target_test.go | 68 +++++++++--- core/capabilities/webapi/target/types.go | 20 +--- .../webapicap/target_builders_generated.go | 43 ++++++++ .../webapicap/webapi_target-schema.json | 66 ++++++++++++ .../webapicap/webapi_target_generated.go | 102 ++++++++++++++++++ .../webapicaptest/target_mock_generated.go | 17 +++ .../gateway/web_api_trigger/invoke_trigger.go | 35 +++--- core/services/gateway/connector/connector.go | 5 +- .../handlers/webapicapabilities/handler.go | 5 + .../services/standardcapabilities/delegate.go | 2 +- 12 files changed, 358 insertions(+), 63 deletions(-) create mode 100644 core/capabilities/webapi/webapicap/target_builders_generated.go create mode 100644 core/capabilities/webapi/webapicap/webapi_target-schema.json create mode 100644 core/capabilities/webapi/webapicap/webapi_target_generated.go create mode 100644 core/capabilities/webapi/webapicap/webapicaptest/target_mock_generated.go diff --git a/core/capabilities/webapi/target/connector_handler.go b/core/capabilities/webapi/target/connector_handler.go index e52d2bbb2c6..11fdd115705 100644 --- a/core/capabilities/webapi/target/connector_handler.go +++ b/core/capabilities/webapi/target/connector_handler.go @@ -25,7 +25,7 @@ type ConnectorHandler struct { rateLimiter *common.RateLimiter } -func NewConnectorHandler(gc connector.GatewayConnector, config Config, lgger logger.Logger) (*ConnectorHandler, error) { +func NewConnectorHandler(gc connector.GatewayConnector, config ServiceConfig, lgger logger.Logger) (*ConnectorHandler, error) { rateLimiter, err := common.NewRateLimiter(config.RateLimiter) if err != nil { return nil, err @@ -72,6 +72,7 @@ func (c *ConnectorHandler) HandleSingleNodeRequest(ctx context.Context, messageI select { case resp := <-ch: + l.Debugw("received response from gateway") return resp, nil case <-ctx.Done(): return nil, ctx.Err() diff --git a/core/capabilities/webapi/target/target.go b/core/capabilities/webapi/target/target.go index 0723298b435..d4a66ccf391 100644 --- a/core/capabilities/webapi/target/target.go +++ b/core/capabilities/webapi/target/target.go @@ -11,6 +11,7 @@ import ( "github.com/smartcontractkit/chainlink-common/pkg/types/core" "github.com/smartcontractkit/chainlink-common/pkg/values" "github.com/smartcontractkit/chainlink/v2/core/capabilities/validation" + "github.com/smartcontractkit/chainlink/v2/core/capabilities/webapi/webapicap" "github.com/smartcontractkit/chainlink/v2/core/services/gateway/handlers/webapicapabilities" ) @@ -24,16 +25,23 @@ var capabilityInfo = capabilities.MustNewCapabilityInfo( "A target that sends HTTP requests to external clients via the Chainlink Gateway.", ) +const ( + DefaultDeliveryMode = SingleNode + DefaultHTTPMethod = "GET" + DefaultTimeoutMs = 30000 + MaxTimeoutMs = 600000 +) + // Capability is a target capability that sends HTTP requests to external clients via the Chainlink Gateway. type Capability struct { capabilityInfo capabilities.CapabilityInfo connectorHandler *ConnectorHandler lggr logger.Logger registry core.CapabilitiesRegistry - config Config + config ServiceConfig } -func NewCapability(config Config, registry core.CapabilitiesRegistry, connectorHandler *ConnectorHandler, lggr logger.Logger) (*Capability, error) { +func NewCapability(config ServiceConfig, registry core.CapabilitiesRegistry, connectorHandler *ConnectorHandler, lggr logger.Logger) (*Capability, error) { return &Capability{ capabilityInfo: capabilityInfo, config: config, @@ -69,16 +77,41 @@ func getMessageID(req capabilities.CapabilityRequest) (string, error) { return strings.Join(messageID, "/"), nil } +// defaultIfNil is a helper function to handle nil pointers and provide default values +func defaultIfNil[T any](value *T, defaultValue T) T { + if value != nil { + return *value + } + return defaultValue +} + +func getPayload(input webapicap.TargetPayload, cfg webapicap.TargetConfig) (webapicapabilities.TargetRequestPayload, error) { + method := defaultIfNil(input.Method, DefaultHTTPMethod) + body := defaultIfNil(input.Body, "") + timeoutMs := defaultIfNil(cfg.TimeoutMs, DefaultTimeoutMs) + if timeoutMs > MaxTimeoutMs { + return webapicapabilities.TargetRequestPayload{}, fmt.Errorf("timeoutMs must be between 0 and %d", MaxTimeoutMs) + } + + return webapicapabilities.TargetRequestPayload{ + URL: input.Url, + Method: method, + Headers: input.Headers, + Body: []byte(body), + TimeoutMs: timeoutMs, + }, nil +} + func (c *Capability) Execute(ctx context.Context, req capabilities.CapabilityRequest) (capabilities.CapabilityResponse, error) { c.lggr.Debugw("executing http target", "capabilityRequest", req) - var input Input + var input webapicap.TargetPayload err := req.Inputs.UnwrapTo(&input) if err != nil { return capabilities.CapabilityResponse{}, err } - var workflowCfg WorkflowConfig + var workflowCfg webapicap.TargetConfig err = req.Config.UnwrapTo(&workflowCfg) if err != nil { return capabilities.CapabilityResponse{}, err @@ -89,12 +122,9 @@ func (c *Capability) Execute(ctx context.Context, req capabilities.CapabilityReq return capabilities.CapabilityResponse{}, err } - payload := webapicapabilities.TargetRequestPayload{ - URL: input.URL, - Method: input.Method, - Headers: input.Headers, - Body: input.Body, - TimeoutMs: workflowCfg.TimeoutMs, + payload, err := getPayload(input, workflowCfg) + if err != nil { + return capabilities.CapabilityResponse{}, err } payloadBytes, err := json.Marshal(payload) @@ -103,10 +133,7 @@ func (c *Capability) Execute(ctx context.Context, req capabilities.CapabilityReq } // Default to SingleNode delivery mode - deliveryMode := SingleNode - if workflowCfg.DeliveryMode != "" { - deliveryMode = workflowCfg.DeliveryMode - } + deliveryMode := defaultIfNil(workflowCfg.DeliveryMode, SingleNode) switch deliveryMode { case SingleNode: diff --git a/core/capabilities/webapi/target/target_test.go b/core/capabilities/webapi/target/target_test.go index a4064c7e7fe..524c99cb5f0 100644 --- a/core/capabilities/webapi/target/target_test.go +++ b/core/capabilities/webapi/target/target_test.go @@ -5,7 +5,6 @@ import ( "encoding/base64" "encoding/json" "errors" - "fmt" "testing" "github.com/stretchr/testify/mock" @@ -29,7 +28,7 @@ const ( owner1 = "0x00000000000000000000000000000000000000aa" ) -var defaultConfig = Config{ +var defaultConfig = ServiceConfig{ RateLimiter: common.RateLimiterConfig{ GlobalRPS: 100.0, GlobalBurst: 100, @@ -42,12 +41,12 @@ type testHarness struct { registry *registrymock.CapabilitiesRegistry connector *gcmocks.GatewayConnector lggr logger.Logger - config Config + config ServiceConfig connectorHandler *ConnectorHandler capability *Capability } -func setup(t *testing.T, config Config) testHarness { +func setup(t *testing.T, config ServiceConfig) testHarness { registry := registrymock.NewCapabilitiesRegistry(t) connector := gcmocks.NewGatewayConnector(t) lggr := logger.Test(t) @@ -67,6 +66,12 @@ func setup(t *testing.T, config Config) testHarness { } } +func emptyWfConfig(t *testing.T) *values.Map { + wfConfig, err := values.NewMap(map[string]interface{}{}) + require.NoError(t, err) + return wfConfig +} + func inputsAndConfig(t *testing.T) (*values.Map, *values.Map) { data := map[string]string{ "key": "value", @@ -195,16 +200,7 @@ func TestCapability_Execute(t *testing.T) { resp, err := th.capability.Execute(ctx, req) require.NoError(t, err) - var values map[string]any - err = resp.Value.UnwrapTo(&values) - require.NoError(t, err) - fmt.Printf("values %+v", values) - statusCode, ok := values["statusCode"].(int64) - require.True(t, ok) - require.Equal(t, int64(200), statusCode) - respBody, ok := values["body"].([]byte) - require.True(t, ok) - require.Equal(t, "response body", string(respBody)) + verifyResp(t, resp) }) t.Run("context cancelled while waiting for gateway response", func(t *testing.T) { @@ -337,4 +333,48 @@ func TestCapability_Execute(t *testing.T) { require.Error(t, err) require.Contains(t, err.Error(), "gateway error") }) + + t.Run("empty workflow config", func(t *testing.T) { + regReq := capabilities.RegisterToWorkflowRequest{ + Metadata: capabilities.RegistrationMetadata{ + WorkflowID: workflowID1, + WorkflowOwner: owner1, + }, + } + err := th.capability.RegisterToWorkflow(ctx, regReq) + require.NoError(t, err) + + inputs, _ := inputsAndConfig(t) + req := capabilities.CapabilityRequest{ + Metadata: capabilities.RequestMetadata{ + WorkflowID: workflowID1, + WorkflowExecutionID: workflowExecutionID1, + }, + Inputs: inputs, + Config: emptyWfConfig(t), + } + + msgID, err := getMessageID(req) + require.NoError(t, err) + gatewayResp := gatewayResponse(t, msgID) + th.connector.On("SignAndSendToGateway", mock.Anything, "gateway1", mock.Anything).Return(nil).Run(func(args mock.Arguments) { + th.connectorHandler.HandleGatewayMessage(ctx, "gateway1", gatewayResp) + }).Once() + + resp, err := th.capability.Execute(ctx, req) + require.NoError(t, err) + verifyResp(t, resp) + }) +} + +func verifyResp(t *testing.T, resp capabilities.CapabilityResponse) { + var values map[string]any + err := resp.Value.UnwrapTo(&values) + require.NoError(t, err) + statusCode, ok := values["statusCode"].(int64) + require.True(t, ok) + require.Equal(t, int64(200), statusCode) + respBody, ok := values["body"].([]byte) + require.True(t, ok) + require.Equal(t, "response body", string(respBody)) } diff --git a/core/capabilities/webapi/target/types.go b/core/capabilities/webapi/target/types.go index 63356baa96c..799eb646872 100644 --- a/core/capabilities/webapi/target/types.go +++ b/core/capabilities/webapi/target/types.go @@ -8,24 +8,10 @@ const ( AllAtOnce string = "AllAtOnce" ) -type Input struct { - URL string `json:"url"` // URL to query, only http and https protocols are supported. - Method string `json:"method,omitempty"` // HTTP verb, defaults to GET. - Headers map[string]string `json:"headers,omitempty"` // HTTP headers, defaults to empty. - Body []byte `json:"body,omitempty"` // HTTP body, defaults to empty. -} - -// WorkflowConfig is the configuration of the workflow that is passed in the workflow execute request -type WorkflowConfig struct { - TimeoutMs uint32 `json:"timeoutMs,omitempty"` // Timeout in milliseconds - RetryCount uint8 `json:"retryCount,omitempty"` // Number of retries, defaults to 0. - DeliveryMode string `json:"deliveryMode,omitempty"` // DeliveryMode describes how request should be delivered to gateway nodes, defaults to SingleNode. -} - -// Config is the configuration for the Target capability and handler +// ServiceConfig is the configuration for the Target capability and handler // TODO: handle retry configurations here CM-472 // Note that workflow executions have their own internal timeouts and retries set by the user // that are separate from this configuration -type Config struct { - RateLimiter common.RateLimiterConfig `toml:"rateLimiter"` +type ServiceConfig struct { + RateLimiter common.RateLimiterConfig `toml:"rateLimiter" json:"rateLimiter" yaml:"rateLimiter" mapstructure:"rateLimiter"` } diff --git a/core/capabilities/webapi/webapicap/target_builders_generated.go b/core/capabilities/webapi/webapicap/target_builders_generated.go new file mode 100644 index 00000000000..e406018ac3a --- /dev/null +++ b/core/capabilities/webapi/webapicap/target_builders_generated.go @@ -0,0 +1,43 @@ +// Code generated by github.com/smartcontractkit/chainlink-common/pkg/capabilities/cli, DO NOT EDIT. + +package webapicap + +import ( + "github.com/smartcontractkit/chainlink-common/pkg/capabilities" + "github.com/smartcontractkit/chainlink-common/pkg/workflows/sdk" +) + +func (cfg TargetConfig) New(w *sdk.WorkflowSpecFactory, input TargetInput) { + + def := sdk.StepDefinition{ + ID: "web-api-target@1.0.0", + Inputs: input.ToSteps(), + Config: map[string]any{ + "deliveryMode": cfg.DeliveryMode, + "retryCount": cfg.RetryCount, + "timeoutMs": cfg.TimeoutMs, + }, + CapabilityType: capabilities.CapabilityTypeTarget, + } + + step := sdk.Step[struct{}]{Definition: def} + step.AddTo(w) +} + +type TargetInput struct { + Body sdk.CapDefinition[string] + Headers sdk.CapDefinition[TargetPayloadHeaders] + Method sdk.CapDefinition[string] + Url sdk.CapDefinition[string] +} + +func (input TargetInput) ToSteps() sdk.StepInputs { + return sdk.StepInputs{ + Mapping: map[string]any{ + "body": input.Body.Ref(), + "headers": input.Headers.Ref(), + "method": input.Method.Ref(), + "url": input.Url.Ref(), + }, + } +} diff --git a/core/capabilities/webapi/webapicap/webapi_target-schema.json b/core/capabilities/webapi/webapicap/webapi_target-schema.json new file mode 100644 index 00000000000..22d6a6171af --- /dev/null +++ b/core/capabilities/webapi/webapicap/webapi_target-schema.json @@ -0,0 +1,66 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://github.com/smartcontractkit/chainlink/v2/core/capabilities/webapi/webapicap/web-api-target@1.0.0", + "description": "A target that sends HTTP requests to a URL", + "$defs": { + "TargetPayload": { + "type": "object", + "properties": { + "url": { + "type": "string", + "description": "The URL to send the request to" + }, + "method": { + "type": "string", + "description": "The HTTP method to use for the request" + }, + "headers": { + "type": "object", + "description": "The headers to include in the request", + "additionalProperties" : { + "type": "string" + } + }, + "body": { + "type": "string", + "description": "The body of the request" + } + }, + "required": ["url"], + "additionalProperties": false + }, + "TargetConfig": { + "type": "object", + "properties": { + "timeoutMs": { + "type": "integer", + "description": "The timeout in milliseconds for the request. If set to 0, the default value is 30 seconds", + "minimum": 0, + "maximum": 600000 + }, + "retryCount": { + "type": "integer", + "description": "The number of times to retry the request. Defaults to 0 retries", + "minimum": 0, + "maximum": 10 + }, + "deliveryMode": { + "type": "string", + "description": "The delivery mode for the request. Defaults to SingleNode" + } + }, + "required": [], + "additionalProperties": false + } + }, + "type": "object", + "properties": { + "config": { + "$ref": "#/$defs/TargetConfig" + }, + "inputs": { + "$ref": "#/$defs/TargetPayload" + } + }, + "required": ["config","inputs"] + } \ No newline at end of file diff --git a/core/capabilities/webapi/webapicap/webapi_target_generated.go b/core/capabilities/webapi/webapicap/webapi_target_generated.go new file mode 100644 index 00000000000..470b6307514 --- /dev/null +++ b/core/capabilities/webapi/webapicap/webapi_target_generated.go @@ -0,0 +1,102 @@ +// Code generated by github.com/smartcontractkit/chainlink-common/pkg/capabilities/cli, DO NOT EDIT. + +package webapicap + +import ( + "encoding/json" + "fmt" +) + +// A target that sends HTTP requests to a URL +type Target struct { + // Config corresponds to the JSON schema field "config". + Config TargetConfig `json:"config" yaml:"config" mapstructure:"config"` + + // Inputs corresponds to the JSON schema field "inputs". + Inputs TargetPayload `json:"inputs" yaml:"inputs" mapstructure:"inputs"` +} + +type TargetConfig struct { + // The delivery mode for the request. Defaults to SingleNode + DeliveryMode *string `json:"deliveryMode,omitempty" yaml:"deliveryMode,omitempty" mapstructure:"deliveryMode,omitempty"` + + // The number of times to retry the request. Defaults to 0 retries + RetryCount *uint8 `json:"retryCount,omitempty" yaml:"retryCount,omitempty" mapstructure:"retryCount,omitempty"` + + // The timeout in milliseconds for the request. If set to 0, the default value is + // 30 seconds + TimeoutMs *uint32 `json:"timeoutMs,omitempty" yaml:"timeoutMs,omitempty" mapstructure:"timeoutMs,omitempty"` +} + +// UnmarshalJSON implements json.Unmarshaler. +func (j *TargetConfig) UnmarshalJSON(b []byte) error { + type Plain TargetConfig + var plain Plain + if err := json.Unmarshal(b, &plain); err != nil { + return err + } + if plain.RetryCount != nil && 10 < *plain.RetryCount { + return fmt.Errorf("field %s: must be <= %v", "retryCount", 10) + } + if plain.TimeoutMs != nil && 600000 < *plain.TimeoutMs { + return fmt.Errorf("field %s: must be <= %v", "timeoutMs", 600000) + } + *j = TargetConfig(plain) + return nil +} + +type TargetPayload struct { + // The body of the request + Body *string `json:"body,omitempty" yaml:"body,omitempty" mapstructure:"body,omitempty"` + + // The headers to include in the request + Headers TargetPayloadHeaders `json:"headers,omitempty" yaml:"headers,omitempty" mapstructure:"headers,omitempty"` + + // The HTTP method to use for the request + Method *string `json:"method,omitempty" yaml:"method,omitempty" mapstructure:"method,omitempty"` + + // The URL to send the request to + Url string `json:"url" yaml:"url" mapstructure:"url"` +} + +// The headers to include in the request +type TargetPayloadHeaders map[string]string + +// UnmarshalJSON implements json.Unmarshaler. +func (j *TargetPayload) UnmarshalJSON(b []byte) error { + var raw map[string]interface{} + if err := json.Unmarshal(b, &raw); err != nil { + return err + } + if _, ok := raw["url"]; raw != nil && !ok { + return fmt.Errorf("field url in TargetPayload: required") + } + type Plain TargetPayload + var plain Plain + if err := json.Unmarshal(b, &plain); err != nil { + return err + } + *j = TargetPayload(plain) + return nil +} + +// UnmarshalJSON implements json.Unmarshaler. +func (j *Target) UnmarshalJSON(b []byte) error { + var raw map[string]interface{} + if err := json.Unmarshal(b, &raw); err != nil { + return err + } + if _, ok := raw["config"]; raw != nil && !ok { + return fmt.Errorf("field config in Target: required") + } + if _, ok := raw["inputs"]; raw != nil && !ok { + return fmt.Errorf("field inputs in Target: required") + } + type Plain Target + var plain Plain + if err := json.Unmarshal(b, &plain); err != nil { + return err + } + *j = Target(plain) + return nil +} diff --git a/core/capabilities/webapi/webapicap/webapicaptest/target_mock_generated.go b/core/capabilities/webapi/webapicap/webapicaptest/target_mock_generated.go new file mode 100644 index 00000000000..99e9d1ed1c5 --- /dev/null +++ b/core/capabilities/webapi/webapicap/webapicaptest/target_mock_generated.go @@ -0,0 +1,17 @@ +// Code generated by github.com/smartcontractkit/chainlink-common/pkg/capabilities/cli, DO NOT EDIT. + +// Code generated by github.com/smartcontractkit/chainlink-common/pkg/capabilities/cli, DO NOT EDIT. + +package webapicaptest + +import ( + "github.com/smartcontractkit/chainlink-common/pkg/workflows/sdk/testutils" + "github.com/smartcontractkit/chainlink/v2/core/capabilities/webapi/webapicap" +) + +// Target registers a new capability mock with the runner +func Target(runner *testutils.Runner, fn func(input webapicap.TargetPayload) error) *testutils.TargetMock[webapicap.TargetPayload] { + mock := testutils.MockTarget[webapicap.TargetPayload]("web-api-target@1.0.0", fn) + runner.MockCapability("web-api-target@1.0.0", nil, mock) + return mock +} diff --git a/core/scripts/gateway/web_api_trigger/invoke_trigger.go b/core/scripts/gateway/web_api_trigger/invoke_trigger.go index 2885e0b6ba2..b06f4db74cf 100644 --- a/core/scripts/gateway/web_api_trigger/invoke_trigger.go +++ b/core/scripts/gateway/web_api_trigger/invoke_trigger.go @@ -9,7 +9,6 @@ import ( "io" "net/http" "os" - "strconv" "time" "github.com/ethereum/go-ethereum/crypto" @@ -77,30 +76,38 @@ func main() { return } - payload := `{ - "trigger_id": "web-api-trigger@1.0.0", - "trigger_event_id": "action_1234567890", - "timestamp": ` + strconv.Itoa(int(time.Now().Unix())) + `, - "topics": ["daily_price_update"], - "params": { - "bid": "101", - "ask": "102" - } - } -` - payloadJSON := []byte(payload) + address := crypto.PubkeyToAddress(key.PublicKey) + fmt.Printf("Public Address: %s\n", address.Hex()) + + payload := map[string]any{ + "trigger_id": "web-api-trigger@1.0.0", + "trigger_event_id": "action_1234567890", + "timestamp": int(time.Now().Unix()), + "topics": []string{"daily_price_update"}, + "params": map[string]string{ + "bid": "101", + "ask": "102", + }, + } + + payloadJSON, err := json.Marshal(payload) + if err != nil { + fmt.Println("error marshalling JSON payload", err) + return + } msg := &api.Message{ Body: api.MessageBody{ MessageId: *messageID, Method: *methodName, DonId: *donID, - Payload: json.RawMessage(payloadJSON), + Payload: payloadJSON, }, } if err = msg.Sign(key); err != nil { fmt.Println("error signing message", err) return } + codec := api.JsonRPCCodec{} rawMsg, err := codec.EncodeRequest(msg) if err != nil { diff --git a/core/services/gateway/connector/connector.go b/core/services/gateway/connector/connector.go index 7d964494e0a..18d34007c56 100644 --- a/core/services/gateway/connector/connector.go +++ b/core/services/gateway/connector/connector.go @@ -12,7 +12,7 @@ import ( "github.com/jonboulle/clockwork" "github.com/smartcontractkit/chainlink-common/pkg/services" - "github.com/smartcontractkit/chainlink-common/pkg/utils/hex" + commonhex "github.com/smartcontractkit/chainlink-common/pkg/utils/hex" "github.com/smartcontractkit/chainlink/v2/core/logger" "github.com/smartcontractkit/chainlink/v2/core/services/gateway/api" @@ -91,7 +91,7 @@ func NewGatewayConnector(config *ConnectorConfig, signer Signer, clock clockwork if len(config.DonId) == 0 || len(config.DonId) > network.HandshakeDonIdLen { return nil, errors.New("invalid DON ID") } - addressBytes, err := hex.DecodeString(config.NodeAddress) + addressBytes, err := commonhex.DecodeString(config.NodeAddress) if err != nil { return nil, err } @@ -176,6 +176,7 @@ func (c *gatewayConnector) SignAndSendToGateway(ctx context.Context, gatewayID s DonId: body.DonId, Method: body.Method, Payload: body.Payload, + Receiver: body.Receiver, Sender: utils.StringToHex(string(c.nodeAddress)), }, Signature: utils.StringToHex(string(signature)), diff --git a/core/services/gateway/handlers/webapicapabilities/handler.go b/core/services/gateway/handlers/webapicapabilities/handler.go index f6222cb68f2..aa6823e4775 100644 --- a/core/services/gateway/handlers/webapicapabilities/handler.go +++ b/core/services/gateway/handlers/webapicapabilities/handler.go @@ -152,11 +152,16 @@ func (h *handler) handleWebAPITargetMessage(ctx context.Context, msg *api.Messag }, } } + // this signature is not verified by the node because + // WS connection between gateway and node are already verified + respMsg.Signature = msg.Signature + err = h.don.SendToNode(newCtx, nodeAddr, respMsg) if err != nil { l.Errorw("failed to send to node", "err", err, "to", nodeAddr) return } + l.Debugw("sent response to node", "to", nodeAddr) }() return nil } diff --git a/core/services/standardcapabilities/delegate.go b/core/services/standardcapabilities/delegate.go index 42f915ce2cb..87d61617762 100644 --- a/core/services/standardcapabilities/delegate.go +++ b/core/services/standardcapabilities/delegate.go @@ -210,7 +210,7 @@ func (d *Delegate) ServicesForSpec(ctx context.Context, spec job.Job) ([]job.Ser if len(spec.StandardCapabilitiesSpec.Config) == 0 { return nil, errors.New("config is empty") } - var targetCfg webapitarget.Config + var targetCfg webapitarget.ServiceConfig err := toml.Unmarshal([]byte(spec.StandardCapabilitiesSpec.Config), &targetCfg) if err != nil { return nil, err From e037fa4667d409d4c277fc354e147cd11b31de61 Mon Sep 17 00:00:00 2001 From: Erik Burton Date: Mon, 21 Oct 2024 13:15:33 -0700 Subject: [PATCH 11/13] fix: only run flakey tests on cron or dispatch (#14871) --- .github/workflows/ci-core.yml | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci-core.yml b/.github/workflows/ci-core.yml index 47be06cca7f..3f6624a0668 100644 --- a/.github/workflows/ci-core.yml +++ b/.github/workflows/ci-core.yml @@ -14,7 +14,8 @@ on: merge_group: pull_request: schedule: - - cron: "0 0 * * *" + # Every 6 hours + - cron: "0 0,6,12,18 * * *" workflow_dispatch: inputs: distinct_run_name: @@ -248,7 +249,7 @@ jobs: needs: [filter, core] name: Flakey Test Detection runs-on: ubuntu-latest - if: ${{ always() && github.actor != 'dependabot[bot]' }} + if: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }} env: CL_DATABASE_URL: postgresql://postgres:postgres@localhost:5432/chainlink_test?sslmode=disable permissions: @@ -258,52 +259,40 @@ jobs: - name: Checkout the repo uses: actions/checkout@v4.2.1 - name: Setup node - if: ${{ needs.filter.outputs.changes == 'true' }} uses: actions/setup-node@v4.0.4 - name: Setup NodeJS - if: ${{ needs.filter.outputs.changes == 'true' }} uses: ./.github/actions/setup-nodejs with: prod: "true" - name: Setup Go - if: ${{ needs.filter.outputs.changes == 'true' }} uses: ./.github/actions/setup-go - name: Setup Postgres - if: ${{ needs.filter.outputs.changes == 'true' }} uses: ./.github/actions/setup-postgres - name: Touching core/web/assets/index.html - if: ${{ needs.filter.outputs.changes == 'true' }} run: mkdir -p core/web/assets && touch core/web/assets/index.html - name: Download Go vendor packages - if: ${{ needs.filter.outputs.changes == 'true' }} run: go mod download - name: Replace chainlink-evm deps - if: ${{ needs.filter.outputs.changes == 'true' && inputs.evm-ref != ''}} + if: ${{ github.event_name == 'workflow_dispatch' && inputs.evm-ref != ''}} shell: bash run: go get github.com/smartcontractkit/chainlink-integrations/evm/relayer@${{ inputs.evm-ref }} - name: Build binary - if: ${{ needs.filter.outputs.changes == 'true' }} run: go build -o chainlink.test . - name: Setup DB - if: ${{ needs.filter.outputs.changes == 'true' }} run: ./chainlink.test local db preparetest - name: Load test outputs - if: ${{ needs.filter.outputs.changes == 'true' }} uses: actions/download-artifact@v4.1.8 with: name: go_core_tests_logs path: ./artifacts - name: Delete go_core_tests_logs/coverage.txt - if: ${{ needs.filter.outputs.changes == 'true' }} shell: bash run: | # Need to delete coverage.txt so the disk doesn't fill up rm -f ./artifacts/go_core_tests_logs/coverage.txt - name: Build flakey test runner - if: ${{ needs.filter.outputs.changes == 'true' }} run: go build ./tools/flakeytests/cmd/runner - name: Re-run tests - if: ${{ needs.filter.outputs.changes == 'true' }} env: GRAFANA_INTERNAL_BASIC_AUTH: ${{ secrets.GRAFANA_INTERNAL_BASIC_AUTH }} GRAFANA_INTERNAL_HOST: ${{ secrets.GRAFANA_INTERNAL_HOST }} @@ -323,7 +312,7 @@ jobs: -command=./tools/bin/go_core_tests \ `ls -R ./artifacts/output.txt` - name: Store logs artifacts - if: ${{ needs.filter.outputs.changes == 'true' && always() }} + if: ${{ always() }} uses: actions/upload-artifact@v4.4.3 with: name: flakey_test_runner_logs From 90f318bc52715909b9109f148947962a406f5314 Mon Sep 17 00:00:00 2001 From: Jordan Krage Date: Mon, 21 Oct 2024 16:30:32 -0500 Subject: [PATCH 12/13] golangci-lint --fix (#14860) --- core/capabilities/ccip/configs/evm/contract_reader.go | 1 + .../ocr2/plugins/ccip/internal/ccipdata/v1_2_0/offramp.go | 1 - core/services/relay/evm/llo_provider.go | 1 - core/services/workflows/models_test.go | 1 - core/web/loader/chain.go | 1 + core/web/resolver/chain.go | 1 + 6 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/capabilities/ccip/configs/evm/contract_reader.go b/core/capabilities/ccip/configs/evm/contract_reader.go index f95030afc3e..31c95d98251 100644 --- a/core/capabilities/ccip/configs/evm/contract_reader.go +++ b/core/capabilities/ccip/configs/evm/contract_reader.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated/rmn_home" "github.com/smartcontractkit/chainlink-ccip/pkg/consts" diff --git a/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_2_0/offramp.go b/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_2_0/offramp.go index 7bdbd52b9ca..f2887688965 100644 --- a/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_2_0/offramp.go +++ b/core/services/ocr2/plugins/ccip/internal/ccipdata/v1_2_0/offramp.go @@ -673,5 +673,4 @@ func NewOffRamp(lggr logger.Logger, addr common.Address, ec client.Client, lp lo offchainConfig: cciptypes.ExecOffchainConfig{}, onchainConfig: cciptypes.ExecOnchainConfig{}, }, nil - } diff --git a/core/services/relay/evm/llo_provider.go b/core/services/relay/evm/llo_provider.go index c98b92582b1..1f4bdbf6e0c 100644 --- a/core/services/relay/evm/llo_provider.go +++ b/core/services/relay/evm/llo_provider.go @@ -101,7 +101,6 @@ func NewLLOProvider( }.NewServiceEngine(lggr) return p, nil - } func (p *lloProvider) start(ctx context.Context) error { diff --git a/core/services/workflows/models_test.go b/core/services/workflows/models_test.go index 93d394a5645..f7cb25f2edc 100644 --- a/core/services/workflows/models_test.go +++ b/core/services/workflows/models_test.go @@ -293,7 +293,6 @@ targets: for _, tc := range testCases { t.Run(tc.name, func(st *testing.T) { - spec, _, _, err := job.YAMLSpecFactory{}.Spec(testutils.Context(t), tc.yaml, "") require.NoError(t, err) diff --git a/core/web/loader/chain.go b/core/web/loader/chain.go index 54fccf9cf9e..c6b3206edbd 100644 --- a/core/web/loader/chain.go +++ b/core/web/loader/chain.go @@ -5,6 +5,7 @@ import ( "slices" "github.com/graph-gophers/dataloader" + "github.com/smartcontractkit/chainlink/v2/common/types" "github.com/smartcontractkit/chainlink/v2/core/chains" "github.com/smartcontractkit/chainlink/v2/core/services/chainlink" diff --git a/core/web/resolver/chain.go b/core/web/resolver/chain.go index 22dfcf39e92..9e06c5a6308 100644 --- a/core/web/resolver/chain.go +++ b/core/web/resolver/chain.go @@ -2,6 +2,7 @@ package resolver import ( "github.com/graph-gophers/graphql-go" + "github.com/smartcontractkit/chainlink/v2/common/types" ) From f3e66b2c00cbf113b4e6b9ad61eb50a636817735 Mon Sep 17 00:00:00 2001 From: ilija42 <57732589+ilija42@users.noreply.github.com> Date: Tue, 22 Oct 2024 12:33:07 +0200 Subject: [PATCH 13/13] Unblock core CI by removing Solana setup (#14878) --- .github/workflows/ci-core.yml | 6 +++--- core/cmd/solana_transaction_commands_test.go | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci-core.yml b/.github/workflows/ci-core.yml index 3f6624a0668..34c88e0e644 100644 --- a/.github/workflows/ci-core.yml +++ b/.github/workflows/ci-core.yml @@ -137,9 +137,9 @@ jobs: if: ${{ needs.filter.outputs.changes == 'true' && inputs.evm-ref != ''}} shell: bash run: go get github.com/smartcontractkit/chainlink-integrations/evm/relayer@${{ inputs.evm-ref }} - - name: Setup Solana - if: ${{ needs.filter.outputs.changes == 'true' }} - uses: ./.github/actions/setup-solana +# - name: Setup Solana +# if: ${{ needs.filter.outputs.changes == 'true' }} +# uses: ./.github/actions/setup-solana - name: Setup wasmd if: ${{ needs.filter.outputs.changes == 'true' }} uses: ./.github/actions/setup-wasmd diff --git a/core/cmd/solana_transaction_commands_test.go b/core/cmd/solana_transaction_commands_test.go index 79a5513f190..f627b6904a2 100644 --- a/core/cmd/solana_transaction_commands_test.go +++ b/core/cmd/solana_transaction_commands_test.go @@ -24,6 +24,7 @@ import ( ) func TestShell_SolanaSendSol(t *testing.T) { + t.Skip("solana setup broken due to expired ssl") ctx := testutils.Context(t) chainID := "localnet" url := solanaClient.SetupLocalSolNode(t)