From 4cbaf70d1fe5f0a9ee32efcdf6a6d13dde4924f1 Mon Sep 17 00:00:00 2001 From: "M. J. Fromberger" Date: Tue, 3 Aug 2021 12:08:23 -0700 Subject: [PATCH 01/39] docs: fix a typo in the genesis_chunked description (#6792) --- rpc/openapi/openapi.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rpc/openapi/openapi.yaml b/rpc/openapi/openapi.yaml index bb35d34ac..bfd49b461 100644 --- a/rpc/openapi/openapi.yaml +++ b/rpc/openapi/openapi.yaml @@ -837,7 +837,7 @@ paths: - Info description: | Get genesis document in a paginated/chunked format to make it - easier to iterate through larger gensis structures. + easier to iterate through larger genesis structures. parameters: - in: query name: chunkID @@ -1946,14 +1946,14 @@ components: - "chunk" - "total" - "data" - properties: + properties: chunk: type: integer example: 0 total: type: integer example: 1 - data: + data: type: string example: "Z2VuZXNpcwo=" From e8013281281985e3ada7819f42502b09623d24a0 Mon Sep 17 00:00:00 2001 From: William Banfield <4561443+williambanfield@users.noreply.github.com> Date: Tue, 3 Aug 2021 15:30:05 -0400 Subject: [PATCH 02/39] clist: add simple property tests (#6791) Adds a simple property test to the `clist` package. This test uses the [rapid](https://github.com/flyingmutant/rapid) library and works by modeling the internal clist as a simple array. Follow up from this mornings workshop with the Regen team. --- go.mod | 1 + go.sum | 2 + internal/libs/clist/clist_property_test.go | 72 ++++++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 internal/libs/clist/clist_property_test.go diff --git a/go.mod b/go.mod index b6e0fea38..d13c9ea4b 100644 --- a/go.mod +++ b/go.mod @@ -39,4 +39,5 @@ require ( golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 google.golang.org/grpc v1.39.0 gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect + pgregory.net/rapid v0.4.7 // indirect ) diff --git a/go.sum b/go.sum index 55e08e088..ed2f127b2 100644 --- a/go.sum +++ b/go.sum @@ -1437,6 +1437,8 @@ mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphD mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= mvdan.cc/unparam v0.0.0-20210104141923-aac4ce9116a7 h1:HT3e4Krq+IE44tiN36RvVEb6tvqeIdtsVSsxmNPqlFU= mvdan.cc/unparam v0.0.0-20210104141923-aac4ce9116a7/go.mod h1:hBpJkZE8H/sb+VRFvw2+rBpHNsTBcvSpk61hr8mzXZE= +pgregory.net/rapid v0.4.7 h1:MTNRktPuv5FNqOO151TM9mDTa+XHcX6ypYeISDVD14g= +pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/internal/libs/clist/clist_property_test.go b/internal/libs/clist/clist_property_test.go new file mode 100644 index 000000000..cdc173ee5 --- /dev/null +++ b/internal/libs/clist/clist_property_test.go @@ -0,0 +1,72 @@ +package clist_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + "pgregory.net/rapid" + + "github.com/tendermint/tendermint/internal/libs/clist" +) + +func TestCListProperties(t *testing.T) { + rapid.Check(t, rapid.Run(&clistModel{})) +} + +// clistModel is used by the rapid state machine testing framework. +// clistModel contains both the clist that is being tested and a slice of *clist.CElements +// that will be used to model the expected clist behavior. +type clistModel struct { + clist *clist.CList + + model []*clist.CElement +} + +// Init is a method used by the rapid state machine testing library. +// Init is called when the test starts to initialize the data that will be used +// in the state machine test. +func (m *clistModel) Init(t *rapid.T) { + m.clist = clist.New() + m.model = []*clist.CElement{} +} + +// PushBack defines an action that will be randomly selected across by the rapid state +// machines testing library. Every call to PushBack calls PushBack on the clist and +// performs a similar action on the model data. +func (m *clistModel) PushBack(t *rapid.T) { + value := rapid.String().Draw(t, "value").(string) + el := m.clist.PushBack(value) + m.model = append(m.model, el) +} + +// Remove defines an action that will be randomly selected across by the rapid state +// machine testing library. Every call to Remove selects an element from the model +// and calls Remove on the CList with that element. The same element is removed from +// the model to keep the objects in sync. +func (m *clistModel) Remove(t *rapid.T) { + if len(m.model) == 0 { + return + } + ix := rapid.IntRange(0, len(m.model)-1).Draw(t, "index").(int) + value := m.model[ix] + m.model = append(m.model[:ix], m.model[ix+1:]...) + m.clist.Remove(value) +} + +// Check is a method required by the rapid state machine testing library. +// Check is run after each action and is used to verify that the state of the object, +// in this case a clist.CList matches the state of the objec. +func (m *clistModel) Check(t *rapid.T) { + require.Equal(t, len(m.model), m.clist.Len()) + if len(m.model) == 0 { + return + } + require.Equal(t, m.model[0], m.clist.Front()) + require.Equal(t, m.model[len(m.model)-1], m.clist.Back()) + + iter := m.clist.Front() + for _, val := range m.model { + require.Equal(t, val, iter) + iter = iter.Next() + } +} From 4db71da68e82d5cb732b235eeb2fd69d62114b45 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Aug 2021 10:08:49 -0400 Subject: [PATCH 03/39] build(deps): Bump github.com/BurntSushi/toml from 0.3.1 to 0.4.1 (#6796) Bumps [github.com/BurntSushi/toml](https://github.com/BurntSushi/toml) from 0.3.1 to 0.4.1. - [Release notes](https://github.com/BurntSushi/toml/releases) - [Commits](https://github.com/BurntSushi/toml/compare/v0.3.1...v0.4.1) --- updated-dependencies: - dependency-name: github.com/BurntSushi/toml dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 4 ++-- go.sum | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index d13c9ea4b..cb49f948e 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/tendermint/tendermint go 1.16 require ( - github.com/BurntSushi/toml v0.3.1 + github.com/BurntSushi/toml v0.4.1 github.com/Masterminds/squirrel v1.5.0 github.com/Workiva/go-datastructures v1.0.53 github.com/adlio/schema v1.1.13 @@ -39,5 +39,5 @@ require ( golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 google.golang.org/grpc v1.39.0 gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect - pgregory.net/rapid v0.4.7 // indirect + pgregory.net/rapid v0.4.7 ) diff --git a/go.sum b/go.sum index ed2f127b2..0bbb1f3e6 100644 --- a/go.sum +++ b/go.sum @@ -46,8 +46,9 @@ contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EU dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v0.4.1 h1:GaI7EiDXDRfa8VshkTj7Fym7ha+y8/XxIgD2okUIjLw= +github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DataDog/zstd v1.4.1 h1:3oxKN3wbHibqx897utPC2LTQU4J+IHWWJO+glkAkpFM= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= From e5312942e30331e7c42b75426da2c6c9c00ae476 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 6 Aug 2021 14:28:58 +0000 Subject: [PATCH 04/39] build(deps): Bump google.golang.org/grpc from 1.39.0 to 1.39.1 (#6801) Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.39.0 to 1.39.1.
Release notes

Sourced from google.golang.org/grpc's releases.

Release 1.39.1

  • server: fix bug that net.Conn is leaked if the connection is closed (io.EOF) immediately with no traffic (#4642)
  • transport: fix race in transport stream accessing s.recvCompress (#4627)
Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=google.golang.org/grpc&package-manager=go_modules&previous-version=1.39.0&new-version=1.39.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
--- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index cb49f948e..a23bc5167 100644 --- a/go.mod +++ b/go.mod @@ -37,7 +37,7 @@ require ( github.com/vektra/mockery/v2 v2.9.0 golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 - google.golang.org/grpc v1.39.0 + google.golang.org/grpc v1.39.1 gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect pgregory.net/rapid v0.4.7 ) diff --git a/go.sum b/go.sum index 0bbb1f3e6..3e20b60ab 100644 --- a/go.sum +++ b/go.sum @@ -1368,8 +1368,8 @@ google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0 h1:Klz8I9kdtkIN6EpHHUOMLCYhTn/2WAe5a0s1hcBkdTI= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1 h1:f37vZbBVTiJ6jKG5mWz8ySOBxNqy6ViPgyhSdVnxF3E= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= From 31994cadc0f89d8cd57c23cd5400a6ed039b8acc Mon Sep 17 00:00:00 2001 From: Sam Kleinman Date: Fri, 6 Aug 2021 15:51:07 -0400 Subject: [PATCH 05/39] docs: upgrade documentation for custom mempools (#6794) This is proposed language for the upgrade process about the new custom reactor/mempool support. --- UPGRADING.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/UPGRADING.md b/UPGRADING.md index ef0a29fb4..82b792515 100644 --- a/UPGRADING.md +++ b/UPGRADING.md @@ -81,6 +81,16 @@ will need to change to accommodate these changes. Most notably: Mark gRPC in the RPC layer as deprecated and to be removed in 0.36. +### Support for Custom Reactor and Mempool Implementations + +The changes to p2p layer removed existing support for custom +reactors. Based on our understanding of how this functionality was +used, the introduction of the prioritized mempool covers nearly all of +the use cases for custom reactors. If you are currently running custom +reactors and mempools and are having trouble seeing the migration path +for your project please feel free to reach out to the Tendermint Core +development team directly. + ## v0.34.0 **Upgrading to Tendermint 0.34 requires a blockchain restart.** From a7ecf49c10bd67b3738dd4bb5138b657ef9844f8 Mon Sep 17 00:00:00 2001 From: "M. J. Fromberger" Date: Mon, 9 Aug 2021 20:30:58 -0700 Subject: [PATCH 06/39] Add new team member to CODEOWNERS. (#6811) --- .github/CODEOWNERS | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 30218e098..7993419e8 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -7,5 +7,4 @@ # global owners are only requested if there isn't a more specific # codeowner specified below. For this reason, the global codeowners # are often repeated in package-level definitions. -* @alexanderbez @ebuchman @cmwaters @tessr @tychoish @williambanfield - +* @alexanderbez @ebuchman @cmwaters @tessr @tychoish @williambanfield @creachadair From 53d53e62052f7ab0d6473a84ca7ed726e4bd6dba Mon Sep 17 00:00:00 2001 From: "M. J. Fromberger" Date: Tue, 10 Aug 2021 06:58:18 -0700 Subject: [PATCH 07/39] bytes: clean up and simplify encoding of HexBytes (#6810) As written, the encoding step unnecessarily made and moved multiple copies of the encoded representation. Reduce this to a single allocation and encode the data in-place so that a shift is no longer required. Also: Add a test to ensure letter digits are capitalized, which was previously not verified but was expected downstream. No functional changes. --- libs/bytes/bytes.go | 23 +++++++++++++++-------- libs/bytes/bytes_test.go | 1 + 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/libs/bytes/bytes.go b/libs/bytes/bytes.go index cfb7a8db2..dd8e39737 100644 --- a/libs/bytes/bytes.go +++ b/libs/bytes/bytes.go @@ -27,15 +27,22 @@ func (bz *HexBytes) Unmarshal(data []byte) error { return nil } -// MarshalJSON implements the json.Marshaler interface. The hex bytes is a -// quoted hexadecimal encoded string. +// MarshalJSON implements the json.Marshaler interface. The encoding is a JSON +// quoted string of hexadecimal digits. func (bz HexBytes) MarshalJSON() ([]byte, error) { - s := strings.ToUpper(hex.EncodeToString(bz)) - jbz := make([]byte, len(s)+2) - jbz[0] = '"' - copy(jbz[1:], s) - jbz[len(jbz)-1] = '"' - return jbz, nil + size := hex.EncodedLen(len(bz)) + 2 // +2 for quotation marks + buf := make([]byte, size) + hex.Encode(buf[1:], []byte(bz)) + buf[0] = '"' + buf[size-1] = '"' + + // Ensure letter digits are capitalized. + for i := 1; i < size-1; i++ { + if buf[i] >= 'a' && buf[i] <= 'f' { + buf[i] = 'A' + (buf[i] - 'a') + } + } + return buf, nil } // UnmarshalJSON implements the json.Umarshaler interface. diff --git a/libs/bytes/bytes_test.go b/libs/bytes/bytes_test.go index db882f1c1..6a9ca7c3d 100644 --- a/libs/bytes/bytes_test.go +++ b/libs/bytes/bytes_test.go @@ -37,6 +37,7 @@ func TestJSONMarshal(t *testing.T) { {[]byte(``), `{"B1":"","B2":""}`}, {[]byte(`a`), `{"B1":"YQ==","B2":"61"}`}, {[]byte(`abc`), `{"B1":"YWJj","B2":"616263"}`}, + {[]byte("\x1a\x2b\x3c"), `{"B1":"Gis8","B2":"1A2B3C"}`}, } for i, tc := range cases { From 66084a01dc6ecb9ad4692adaa6cfc3677899d8b6 Mon Sep 17 00:00:00 2001 From: Sam Kleinman Date: Tue, 10 Aug 2021 14:58:21 -0400 Subject: [PATCH 08/39] commands: add key migration cli (#6790) --- UPGRADING.md | 77 ++++++++++++++++---------- cmd/tendermint/commands/key_migrate.go | 64 +++++++++++++++++++++ cmd/tendermint/commands/run_node.go | 5 +- cmd/tendermint/main.go | 1 + 4 files changed, 118 insertions(+), 29 deletions(-) create mode 100644 cmd/tendermint/commands/key_migrate.go diff --git a/UPGRADING.md b/UPGRADING.md index 82b792515..e53c34c29 100644 --- a/UPGRADING.md +++ b/UPGRADING.md @@ -24,10 +24,10 @@ This guide provides instructions for upgrading to specific versions of Tendermin * Added `--mode` flag and `mode` config variable on `config.toml` for setting Mode of the Node: `full` | `validator` | `seed` (default: `full`) [ADR-52](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-052-tendermint-mode.md) - + * `BootstrapPeers` has been added as part of the new p2p stack. This will eventually replace `Seeds`. Bootstrap peers are connected with on startup if needed for peer discovery. Unlike - persistent peers, there's no guarantee that the node will remain connected with these peers. + persistent peers, there's no gaurantee that the node will remain connected with these peers. * configuration values starting with `priv-validator-` have moved to the new `priv-validator` section, without the `priv-validator-` prefix. @@ -35,6 +35,27 @@ This guide provides instructions for upgrading to specific versions of Tendermin * The fast sync process as well as the blockchain package and service has all been renamed to block sync +### Key Format Changes + +The format of all tendermint on-disk database keys changes in +0.35. Upgrading nodes must either re-sync all data or run a migration +script provided in this release. The script located in +`github.com/tendermint/tendermint/scripts/keymigrate/migrate.go` +provides the function `Migrate(context.Context, db.DB)` which you can +operationalize as makes sense for your deployment. + +For ease of use the `tendermint` command includes a CLI version of the +migration script, which you can invoke, as in: + + tendermint key-migrate + +This reads the configuration file as normal and allows the +`--db-backend` and `--db-dir` flags to change database operations as +needed. + +The migration operation is idempotent and can be run more than once, +if needed. + ### CLI Changes * You must now specify the node mode (validator|full|seed) in `tendermint init [mode]` @@ -66,7 +87,7 @@ are: - `blockchain` - `evidence` -Accordingly, the space `node` package was changed to reduce access to +Accordingly, the `node` package was changed to reduce access to tendermint internals: applications that use tendermint as a library will need to change to accommodate these changes. Most notably: @@ -244,8 +265,8 @@ Other user-relevant changes include: * The old `lite` package was removed; the new light client uses the `light` package. * The `Verifier` was broken up into two pieces: - * Core verification logic (pure `VerifyX` functions) - * `Client` object, which represents the complete light client + * Core verification logic (pure `VerifyX` functions) + * `Client` object, which represents the complete light client * The new light clients stores headers & validator sets as `LightBlock`s * The RPC client can be found in the `/rpc` directory. * The HTTP(S) proxy is located in the `/proxy` directory. @@ -377,12 +398,12 @@ Evidence Params has been changed to include duration. ### Go API * `libs/common` has been removed in favor of specific pkgs. - * `async` - * `service` - * `rand` - * `net` - * `strings` - * `cmap` + * `async` + * `service` + * `rand` + * `net` + * `strings` + * `cmap` * removal of `errors` pkg ### RPC Changes @@ -451,9 +472,9 @@ Prior to the update, suppose your `ResponseDeliverTx` look like: ```go abci.ResponseDeliverTx{ Tags: []kv.Pair{ - {Key: []byte("sender"), Value: []byte("foo")}, - {Key: []byte("recipient"), Value: []byte("bar")}, - {Key: []byte("amount"), Value: []byte("35")}, + {Key: []byte("sender"), Value: []byte("foo")}, + {Key: []byte("recipient"), Value: []byte("bar")}, + {Key: []byte("amount"), Value: []byte("35")}, } } ``` @@ -472,14 +493,14 @@ the following `Events`: ```go abci.ResponseDeliverTx{ Events: []abci.Event{ - { - Type: "transfer", - Attributes: kv.Pairs{ - {Key: []byte("sender"), Value: []byte("foo")}, - {Key: []byte("recipient"), Value: []byte("bar")}, - {Key: []byte("amount"), Value: []byte("35")}, - }, - } + { + Type: "transfer", + Attributes: kv.Pairs{ + {Key: []byte("sender"), Value: []byte("foo")}, + {Key: []byte("recipient"), Value: []byte("bar")}, + {Key: []byte("amount"), Value: []byte("35")}, + }, + } } ``` @@ -527,9 +548,9 @@ In this case, the WS client will receive an error with description: "jsonrpc": "2.0", "id": "{ID}#event", "error": { - "code": -32000, - "msg": "Server error", - "data": "subscription was canceled (reason: client is not pulling messages fast enough)" // or "subscription was canceled (reason: Tendermint exited)" + "code": -32000, + "msg": "Server error", + "data": "subscription was canceled (reason: client is not pulling messages fast enough)" // or "subscription was canceled (reason: Tendermint exited)" } } @@ -735,9 +756,9 @@ just the `Data` field set: ```go []ProofOp{ - ProofOp{ - Data: , - } + ProofOp{ + Data: , + } } ``` diff --git a/cmd/tendermint/commands/key_migrate.go b/cmd/tendermint/commands/key_migrate.go new file mode 100644 index 000000000..739af4a7d --- /dev/null +++ b/cmd/tendermint/commands/key_migrate.go @@ -0,0 +1,64 @@ +package commands + +import ( + "context" + "fmt" + + "github.com/spf13/cobra" + cfg "github.com/tendermint/tendermint/config" + "github.com/tendermint/tendermint/scripts/keymigrate" +) + +func MakeKeyMigrateCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "key-migrate", + Short: "Run Database key migration", + RunE: func(cmd *cobra.Command, args []string) error { + ctx, cancel := context.WithCancel(cmd.Context()) + defer cancel() + + contexts := []string{ + // this is ordered to put the + // (presumably) biggest/most important + // subsets first. + "blockstore", + "state", + "peerstore", + "tx_index", + "evidence", + "light", + } + + for idx, dbctx := range contexts { + logger.Info("beginning a key migration", + "dbctx", dbctx, + "num", idx+1, + "total", len(contexts), + ) + + db, err := cfg.DefaultDBProvider(&cfg.DBContext{ + ID: dbctx, + Config: config, + }) + + if err != nil { + return fmt.Errorf("constructing database handle: %w", err) + } + + if err = keymigrate.Migrate(ctx, db); err != nil { + return fmt.Errorf("running migration for context %q: %w", + dbctx, err) + } + } + + logger.Info("completed database migration successfully") + + return nil + }, + } + + // allow database info to be overridden via cli + addDBFlags(cmd) + + return cmd +} diff --git a/cmd/tendermint/commands/run_node.go b/cmd/tendermint/commands/run_node.go index 1c68fcffe..97d6197a2 100644 --- a/cmd/tendermint/commands/run_node.go +++ b/cmd/tendermint/commands/run_node.go @@ -83,7 +83,10 @@ func AddNodeFlags(cmd *cobra.Command) { config.Consensus.CreateEmptyBlocksInterval.String(), "the possible interval between empty blocks") - // db flags + addDBFlags(cmd) +} + +func addDBFlags(cmd *cobra.Command) { cmd.Flags().String( "db-backend", config.DBBackend, diff --git a/cmd/tendermint/main.go b/cmd/tendermint/main.go index b40624cc3..b092f5645 100644 --- a/cmd/tendermint/main.go +++ b/cmd/tendermint/main.go @@ -28,6 +28,7 @@ func main() { cmd.ShowNodeIDCmd, cmd.GenNodeKeyCmd, cmd.VersionCmd, + cmd.MakeKeyMigrateCommand(), debug.DebugCmd, cli.NewCompletionCmd(rootCmd, true), ) From 97435139ade70d17f85384a7873c82c2dc750c0f Mon Sep 17 00:00:00 2001 From: Sam Kleinman Date: Wed, 11 Aug 2021 10:34:45 -0400 Subject: [PATCH 09/39] adr: node initialization (#6562) --- docs/architecture/README.md | 1 + .../adr-069-flexible-node-intitalization.md | 273 ++++++++++++++++++ .../architecture/img/consensus_blockchain.png | Bin 0 -> 687838 bytes 3 files changed, 274 insertions(+) create mode 100644 docs/architecture/adr-069-flexible-node-intitalization.md create mode 100644 docs/architecture/img/consensus_blockchain.png diff --git a/docs/architecture/README.md b/docs/architecture/README.md index a4e326274..7025a72f6 100644 --- a/docs/architecture/README.md +++ b/docs/architecture/README.md @@ -97,3 +97,4 @@ Note the context/background should be written in the present tense. - [ADR-041: Proposer-Selection-via-ABCI](./adr-041-proposer-selection-via-abci.md) - [ADR-045: ABCI-Evidence](./adr-045-abci-evidence.md) - [ADR-057: RPC](./adr-057-RPC.md) +- [ADR-069: Node Initialization](./adr-069-flexible-node-initialization.md) diff --git a/docs/architecture/adr-069-flexible-node-intitalization.md b/docs/architecture/adr-069-flexible-node-intitalization.md new file mode 100644 index 000000000..ec66725be --- /dev/null +++ b/docs/architecture/adr-069-flexible-node-intitalization.md @@ -0,0 +1,273 @@ +# ADR 069: Flexible Node Initialization + +## Changlog + +- 2021-06-09: Initial Draft (@tychoish) + +- 2021-07-21: Major Revision (@tychoish) + +## Status + +Proposed. + +## Context + +In an effort to support [Go-API-Stability](./adr-060-go-api-stability.md), +during the 0.35 development cycle, we have attempted to reduce the the API +surface area by moving most of the interface of the `node` package into +unexported functions, as well as moving the reactors to an `internal` +package. Having this coincide with the 0.35 release made a lot of sense +because these interfaces were _already_ changing as a result of the `p2p` +[refactor](./adr-061-p2p-refactor-scope.md), so it made sense to think a bit +more about how tendermint exposes this API. + +While the interfaces of the P2P layer and most of the node package are already +internalized, this precludes some operational patterns that are important to +users who use tendermint as a library. Specifically, introspecting the +tendermint node service and replacing components is not supported in the latest +version of the code, and some of these use cases would require maintaining a +vendor copy of the code. Adding these features requires rather extensive +(internal/implementation) changes to the `node` and `rpc` packages, and this +ADR describes a model for changing the way that tendermint nodes initialize, in +service of providing this kind of functionality. + +We consider node initialization, because the current implemention +provides strong connections between all components, as well as between +the components of the node and the RPC layer, and being able to think +about the interactions of these components will help enable these +features and help define the requirements of the node package. + +## Alternative Approaches + +These alternatives are presented to frame the design space and to +contextualize the decision in terms of product requirements. These +ideas are not inherently bad, and may even be possible or desireable +in the (distant) future, and merely provide additional context for how +we, in the moment came to our decision(s). + +### Do Nothing + +The current implementation is functional and sufficient for the vast +majority of use cases (e.g., all users of the Cosmos-SDK as well as +anyone who runs tendermint and the ABCI application in separate +processes). In the current implementation, and even previous versions, +modifying node initialization or injecting custom components required +copying most of the `node` package, which required such users +to maintain a vendored copy of tendermint. + +While this is (likely) not tenable in the long term, as users do want +more modularity, and the current service implementation is brittle and +difficult to maintain, in the short term it may be possible to delay +implementation somewhat. Eventually, however, we will need to make the +`node` package easier to maintain and reason about. + +### Generic Service Pluggability + +One possible system design would export interfaces (in the Golang +sense) for all components of the system, to permit runtime dependency +injection of all components in the system, so that users can compose +tendermint nodes of arbitrary user-supplied components. + +Although this level of customization would provide benefits, it would be a huge +undertaking (particularly with regards to API design work) that we do not have +scope for at the moment. Eventually providing support for some kinds of +pluggability may be useful, so the current solution does not explicitly +foreclose the possibility of this alternative. + +### Abstract Dependency Based Startup and Shutdown + +The main proposal in this document makes tendermint node initialization simpler +and more abstract, but the system lacks a number of +features which daemon/service initialization could provide, such as a +system allowing the authors of services to control initialization and shutdown order +of components using dependency relationships. + +Such a system could work by allowing services to declare +initialization order dependencies to other reactors (by ID, perhaps) +so that the node could decide the initialization based on the +dependencies declared by services rather than requiring the node to +encode this logic directly. + +This level of configuration is probably more complicated than is needed. Given +that the authors of components in the current implementation of tendermint +already *do* need to know about other components, a dependency-based system +would probably be overly-abstract at this stage. + +## Decisions + +- To the greatest extent possible, factor the code base so that + packages are responsible for their own initialization, and minimize + the amount of code in the `node` package itself. + +- As a design goal, reduce direct coupling and dependencies between + components in the implementation of `node`. + +- Begin iterating on a more-flexible internal framework for + initializing tendermint nodes to make the initatilization process + less hard-coded by the implementation of the node objects. + + - Reactors should not need to expose their interfaces *within* the + implementation of the node type + + - This refactoring should be entirely opaque to users. + + - These node initialization changes should not require a + reevaluation of the `service.Service` or a generic initialization + orchestration framework. + +- Do not proactively provide a system for injecting + components/services within a tendtermint node, though make it + possible to retrofit this kind of plugability in the future if + needed. + +- Prioritize implementation of p2p-based statesync reactor to obviate + need for users to inject a custom state-sync provider. + +## Detailed Design + +The [current +nodeImpl](https://github.com/tendermint/tendermint/blob/master/node/node.go#L47) +includes direct references to the implementations of each of the +reactors, which should be replaced by references to `service.Service` +objects. This will require moving construction of the [rpc +service](https://github.com/tendermint/tendermint/blob/master/node/node.go#L771) +into the constructor of +[makeNode](https://github.com/tendermint/tendermint/blob/master/node/node.go#L126). One +possible implementation of this would be to eliminate the current +`ConfigureRPC` method on the node package and instead [configure it +here](https://github.com/tendermint/tendermint/pull/6798/files#diff-375d57e386f20eaa5f09f02bb9d28bfc48ac3dca18d0325f59492208219e5618R441). + +To avoid adding complexity to the `node` package, we will add a +composite service implementation to the `service` package +that implements `service.Service` and is composed of a sequence of +underlying `service.Service` objects and handles their +startup/shutdown in the specified sequential order. + +Consensus, blocksync (*née* fast sync), and statesync all depend on +each other, and have significant initialization dependencies that are +presently encoded in the `node` package. As part of this change, a +new package/component (likely named `blocks` located at +`internal/blocks`) will encapsulate the initialization of these block +management areas of the code. + +### Injectable Component Option + +This section briefly describes a possible implementation for +user-supplied services running within a node. This should not be +implemented unless user-supplied components are a hard requirement for +a user. + +In order to allow components to be replaced, a new public function +will be added to the public interface of `node` with a signature that +resembles the following: + +```go +func NewWithServices(conf *config.Config, + logger log.Logger, + cf proxy.ClientCreator, + gen *types.GenesisDoc, + srvs []service.Service, +) (service.Service, error) { +``` + +The `service.Service` objects will be initialized in the order supplied, after +all pre-configured/default services have started (and shut down in reverse +order). The given services may implement additional interfaces, allowing them +to replace specific default services. `NewWithServices` will validate input +service lists with the following rules: + +- None of the services may already be running. +- The caller may not supply more than one replacement reactor for a given + default service type. + +If callers violate any of these rules, `NewWithServices` will return +an error. To retract support for this kind of operation in the future, +the function can be modified to *always* return an error. + +## Consequences + +### Positive + +- The node package will become easier to maintain. + +- It will become easier to add additional services within tendermint + nodes. + +- It will become possible to replace default components in the node + package without vendoring the tendermint repo and modifying internal + code. + +- The current end-to-end (e2e) test suite will be able to prevent any + regressions, and the new functionality can be thoroughly unit tested. + +- The scope of this project is very narrow, which minimizes risk. + +### Negative + +- This increases our reliance on the `service.Service` interface which + is probably not an interface that we want to fully commit to. + +- This proposal implements a fairly minimal set of functionality and + leaves open the possibility for many additional features which are + not included in the scope of this proposal. + +### Neutral + +N/A + +## Open Questions + +- To what extent does this new initialization framework need to accommodate + the legacy p2p stack? Would it be possible to delay a great deal of this + work to the 0.36 cycle to avoid this complexity? + + - Answer: _depends on timing_, and the requirement to ship pluggable reactors in 0.35. + +- Where should additional public types be exported for the 0.35 + release? + + Related to the general project of API stabilization we want to deprecate + the `types` package, and move its contents into a new `pkg` hierarchy; + however, the design of the `pkg` interface is currently underspecified. + If `types` is going to remain for the 0.35 release, then we should consider + the impact of using multiple organizing modalities for this code within a + single release. + +## Future Work + +- Improve or simplify the `service.Service` interface. There are some + pretty clear limitations with this interface as written (there's no + way to timeout slow startup or shut down, the cycle between the + `service.BaseService` and `service.Service` implementations is + troubling, the default panic in `OnReset` seems troubling.) + +- As part of the refactor of `service.Service` have all services/nodes + respect the lifetime of a `context.Context` object, and avoid the + current practice of creating `context.Context` objects in p2p and + reactor code. This would be required for in-process multi-tenancy. + +- Support explicit dependencies between components and allow for + parallel startup, so that different reactors can startup at the same + time, where possible. + +## References + +- [this + branch](https://github.com/tendermint/tendermint/tree/tychoish/scratch-node-minimize) + contains experimental work in the implementation of the node package + to unwind some of the hard dependencies between components. + +- [the component + graph](https://peter.bourgon.org/go-for-industrial-programming/#the-component-graph) + as a framing for internal service construction. + +## Appendix + +### Dependencies + +There's a relationship between the blockchain and consensus reactor +described by the following dependency graph makes replacing some of +these components more difficult relative to other reactors or +components. + +![consensus blockchain dependency graph](./img/consensus_blockchain.png) diff --git a/docs/architecture/img/consensus_blockchain.png b/docs/architecture/img/consensus_blockchain.png new file mode 100644 index 0000000000000000000000000000000000000000..dd0f4daa83a3dd2e2d1490d7b3c26a77ebfe4d5d GIT binary patch literal 687838 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≫M?HPJVNYAHMb2hRMy> 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≫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
0K*h!lbw<@=MCZqOMv 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
GWAC0_|AAt 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%0ARHVI&*dBKnfuvD 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� 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

Q-sPLcLEDq=LUd$do;k51Ejo%_yP% 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

Cd`*CJst9qNkR*iNrtt2Z0w)$fI#cB zJB>TX26G*t{(+UXuH(ujn&tccF1~72zStC9p-OTpPiw;R_}L`QvlF@OU0z#7PU!h+&x`$s_zz=olNZGXL8jSce^gW=Sm)w_ z0uZF|-w2Wq8BIamKf)O6=+PdrlY)QLeB`=^fFT%sd|pOE$b9_v3C7#PFs$&(L6td3 zn#h*|%Uf&myPpl`oT+p|XUz2*DVnXth1bg2GckKwqAm|Sk2g|Blz7_YoP8IZ7s=<# z*P0G;Ihos7es&0p7|2rPKa4=nS}(zd*=A($%9WsKRmlDoz=48M-1O124>bldb`-KN zJcbKWLD2iLGrm7&@}*(Xxg$r$;>=XO{+Yr=XCW{6dxwGeQ8}pXYrho`PqEVw7)Nk( zti0{0MV}|3rucvUMl#d(`duXTro=mL+Q5FSp|kUuo4al>D>Alo>8gH3J70Db+XJFp z&2umY^!-nAB4_0t`~)mV!sF?kN2?oCOmtE&4M!q~42)emc)J|H!DPcZ`|vC*E?#3& zmWhe!S<1KG1;;lB#)#y6?d>J^U_GSqIbQCSG{tW*HbcRJ?F47n%pO)-+F)KubMHn7 z*0wLQ@XQdD$A<|46s;vY@|MTFi}efE-=5}cZ)=hg5C&Q~LX!^1@N%R(9u^aJo{@q;3fI|9^Lm(vKr=_mjkvjK37@v*ajute^Q zJoW3@AjFwg>*chKa*{@o)h+gSM9`?Z#&*ybdK4#N4Xsr==p1m=Ay&E-vjfi(+L{hi zPH+Xk7_mRNCgyZQ9sO27>?>+o+1KNSiLV~B*OHW$C+av8v%Yd0nFXa`cxZJ~bd5me z8om-^etNf0G3-40T-Bv^eRUS3z;zDS*r2`fi$L~<3_#u`_PQy~b6jpmOIY2QtEy1f z-r&=7pMNtN?DsyOE1`={E%M=F{%ee~JAB;cf z%!dCm_l(ozWn5W_OqsCZaHQ?yV$@)#Cqeqk?X9eo25~?(L_s(ulp_5sJrdr7X7RKAj~`@k(IPbwg1vUUtjol4A(fwRklzRz=D-o_}r>IZ(`6N!H&6l@}A6T~}EygzFUm?ARfagub| zwrELejix*{+I;gs6)~+hVgJ1iUAQ$rftUAt)InYvP{gX;9Lq%FB9MG?^oqL88Wk0L z3BgYrphj;{0!zrT!Umq}=b02&6CKN=a}CeAcGN}^L~D9K<2dS9tkR>Di(n7$%+Li#E*&^TUi=aH7P z%`&oxx4U9xKPf&Zs?T?_3G3ry_>eW(cZFd%;Rev$V`CSM5}#Xfbe7|GESrWK(#tD~ zlEV|`q)}qU3I?dG#xK{|g)_oCmmOD9av{I{s~5xf)+gJaf(DBB?PeDdVR@%23?35q zMFdtxpwk%#ev=UO-ruzPY?l8C_=o+_<~%j;t{&^T)!i6F&ClEcGq&udO?K%NZ7*{={7WIT#0_;UoM={uAGB_REXz z@`NU;&g~Y-s7G!OS~x<)y4g0`iR@NG)L0p8ZCo?n8@fpo_BrXk#P-FQD z2wS7J#dSF{QQBBbTEq*@-6#!^)ZO!N8$-E>-u4KK$Vsdg75NLPJ**7fb@r9Uq0);) zD;xzr7TvsM<;WiYzVbA=uP6Ygo_frtv2(0Q3aNc8s226xV{UhInypXedCooevs|Gr zY}+w|#$+*IQxo3MN(X(4`25pS&u_8rpi{f;&#yOQ03`!WP%tB!G$VTUelnGr zpM>~lPyqO`ggd32U`PE1_!f{`qILy-(gDf%q1BgaJSx1`m=)=;JX3L1vflo;OS_*3 zDyIUe#QDBGBg+F5b8NTeH$JQ@X!=>N22y{`<}HqSLqRdyp^yJ+7SGW}sBT@0yEXd! zOO`Kv7TJ3WVf4|ixV}&9s2NjF+0Fa{eZ3cQu+zR?eFvt!)nv%o8k?z&S%k!uq3Byo z^ua^+Q`Cw5tAT|9;(G&Ph6A0fkK0TfCJ+LADSZc6yjl}L?`g?sk2-boL=-Vd_yy)S z&nvXMP%y`#{~HdwJo(?qPcv@?vBN;dGOw~2=txx7t7a!`*>iXzj#lE2RMI|#mm z4}DU|(4*<83`7&>W;6X*hRC_+kxg3l2yp;F3{Vc$_1=q%+V)G(9rST;6Ui4FW+QYb zXJbrX{~3`Ls2w+2Ym+;Z1SXSq!NA07u?3Qv`;@#5aSiN{+aai#!Ru% zj?a*MdMI8TgVkCm!ti#B@533r5bJ_Ir)WP50CXx*D!eP(f`T|>a3D*cfBLy97&Jh5 z`Gm}`e98C+6^=%k+%%CXQoY|lWb&eSHM;lTEP&>08UZ!d!`fwP&dVCJl=$nW zRBTKH230s~=Z`Vzywr{|?{ltgv7Q(%L=aJ`Vn{9vKl^O7M^L2`cY^+--T0m|H3v`_kP&T6%(j{OPw*2tXE{B z=xap;W`aox0=E#TtMuf3kQD?eec$-$i}a(`Q-yjktAjU%Pu9h)NPV`S$j5R((9!ixMfm{S8qI3|8(fw!OUr7hf( z4CYaKywcf^nzjucjgm|G)HlQ(9@P)+iPX`|?zV*;{dDWSG0tW)|` z&&|I$3S$l?k^9*J&fznuINqeEC__KdqaZQHSc%w*FheqqYtOoNBM7-kxmG#YNktn% zS8P2V);n;!9C8XgIF4KjCHYR9+QovbfdTBfN@|oNE7^5xC+AK@rHbvM6p~(1kwUINc-;z*85w?(lVCJpBv}GWQjDlVcBQUG^c?IsNU=@+ zzB@58<46Iyp>kDeTJBIP+(5w`pq@M=DOySsI_Gm+Fg%0a#uIpMDFsw~U#}>H^{`aI zI7>!+pGMv)AoRooEw3HL1S(;Yxe~By37Q!jUlP@e%!YEpDJ!h`tEL8WH)0M=$n}e+ zci!Ro3K^iM^=FEm$tzb=i437XlHR6OASk2sHP|RO(Ta$}j);2=+?ig|9o4H*mH_|M z2Ar;+5xdgfkGjexB9Xfi$Z`$XDyYVtCwS;XtOtot2CK??*b0o(qAqYzWE~LIvQ0cf ze>rUky{@IK{R}Yam`Y)R4YrE#4=@@bG$?R~>gKYv)VO z1=J6FNd0JbFa)YTnx`R`OmI0L>~P4>seXQiTSLljZ;t96GC^IuHXT6Iu$J|lU zHpBkxyqlZLd5$wiFr3|dbxcK34VbJwW;qoJq!T;}=f6AiAkVZrinOJ9b;wK9F}5MI zenE~$hdjtpn^Ds^u~Rs{A;0d#iAPnmvQ{}{OZ zBs@Rb7}II6&n z*1k3XdmQrh3>x=kw-31O5e}x3mwGk6Ppu8+@Q!vO6YOq&9E^XClQQRQnHkwIfVopf z=I<%fRhw(NatF&eCDrN@1IM^D)4ufX)b=OBbsS1 znY6XT6#AZ~?SVnin-u11WN6rA%GOR;*!%lrX+uilNkp^*6J7R0ZiNx{7UI2rUyr^q ziGuO706=M*6LQp}uBmfp#0>G%w)!{S65Rd<)F}Sj!Z1v3;KHxY-F{nuG%O7Yu^JS@ znq*n)F4R=Ur6s2*s-~}JxPEDZBa!iO~gEV)|kGp!4MAm^uel9s=>EuJ%^n3~(x{xH zzdLI+kvDbH;|W!cvqwJr*?1oda&+-?o!+t8+^RSS}Z2KW|&0>Y3!vey| z=`fFuYr64Hq4hxs`6j#AJx`LI3nl*15%8U<)8{7q==SP1qHU$iOKayE3H0hU zr%zp8WpXxk026Ebea#Sgr(8a|QJa0@5`!?u*N`B*FdS8;w86k4 zjL+S)Z!e;X4I#aW73V#i%gYn{2N!_vys_%G=f6fZp`gPG#(nRBQ5&jMw?qG$8rLg+ zB|1u*-9IJJk9pNh4gw6*$r5lZI_TV*mbNoYCJhR6Ra_JlLbmpy=}2I*sQRMn7R3+G zZKni^a@X6Uc!0NkX_s=2=>;4cRB9n|ONQB;_+4`0%$!4J!E#4&|1++B1ossE~!clI^Io zcjPH?(A@utbk%Hu@8Z$^-4cZj;USwwWp*+3IAg!vrZMWZuK1T z>&NX6LaYuVU#QVYtzoyO=f%i`r3|Oj@k`xAGmp@{jUd2Sq1rrS)7aG@KV_g5p^v{-u=Fk}hh%{;p^=MK8PndQ* zVa!WY8e#o>s}WO&DhpbC<9myf@&1Mt^HX}tw0sL!s>{hl5E-H3aKqbm*P{>7|JW7q zd&{d=f_FB@b#4c@vMh3>a9`Qy2Vo;T8WrpMgnq0;ctHUSAO6BMIAaeXna0ET!K2*P z3{K?ek&IOu?+o9zv8YTnuq!t?`5j*8sN^|TimJVzJzcsBw_-zlu@9yKC!6*Y{#s1@ z*ra4=28L%0v(Sw_{{sBt>36=1l~}j9&;nB^tkU;M_K!s}St4nVL}-5wZ0AW9y7z*b zG^0c2Em6aH@sk&_X9ELWT}8{_e9as@vK_a5Q`Y>&jEJnJYevM>jpV=Y=nvbQH*|LA zMdx=4hsoMje^SeR(3rR&2F4Mgu<<^mKc$fB^lbB zb)}|AkLlr>581=}HCmJ;prNKUOS?k%z4phPc5pn0CO_s?QNfap-&c3V;E_P1$3g1F z4U*6Rs8cof9x{aC zO3GJUAc$S)?-($KUR5ZK_kza6<-{Dimy*5H@!p-((sB1+-mdfjHCp`Q06ukf8>ulc z9HUuEakf){`4UrrvG2EZJH-D;xBtlfnFc2Q8{amdO7m{!&Ia~J*81gEueXcT9b9iB zhazv0m@4{tD=tEr)1YhIaB>6DP8*)rjB9DLf8W#Ux_BRJ{^lmU*t49#%Z|Foa>0fG z)()gJaDw@Bm83r|uUV}3`=!7YCdwz?s8rIr#&q{L;GV0?e8F(}s=xRd*a<}!T(=sf z3T>H){8~<{?r^0nXAoXEJ9+yHUE1%sIm0s5f3KR#Xkez!%k;m818sbUX1MewtcFm8 z+6$yC;(iO6`;U-|OH7CsFqYGMid)7_!V$6&LnKX3_M2nSC-(}CFy==^<`D`K_J@2U8?tThGl>ItLxElO~ z+*+< z+0Bw7Zb62L+C>aW6UwQY^1a z#u*^RZQel2#7d4qela!mJR2^DTD9c;jLV+Xr5cg0@j05<${5-&_&mq#?@mGgYVpFN)gV zA|U$06=y82DhGKqc@=BPq}tlE7vy;b2tmp7E4rwbp zLP%xMDP6E?|I6do#PBcd=QMhAt0;7T(kaT>5gPK_;AscWL7r$fjV7{e*d|UYJ7SPbew<-<4+nW8V@4iZzx*E;zLP zDZ~q>-?~#EzMZ1?hLu%EXE)8qo1h{K+vcuKJeif(kEyvnvl|ROVt7pKRZ4NBd^GFo z^g)vF-`y`Dd@F}$gk?=!M=OmFb*z`dN07yK9N|#tzv?yi2$K;JQBBu-`_D5*GUc}# zbg(>XHtSp}JTR9HlfM6mpBEA0svy9Wmoay996<6)#E2il_pq^L*P2}T=PgzY<^WN+ z`ic}Gqe?^QeyWSO)Q^AXy8{At%1VvM96fjw$2zv}A(tZj%4->QUOnauMB7}4Zit9{ zOk=oSmWU6@BzNe-n{?JmXa>-WUXfQV$BRJG`iOVoY>RE zc3VS1iPUU)A#plNO7ri3gq=IC-L>SPONeRo;H$N!{>Zlg+2bbyvZL8?{qHZ-hcEoJXH$F_rW?I&4L zbrC6q3%V9X?8qU=OUL4c zl-eSikex9!x2prvXIy)yf8DyP)4bZ*a>g_6;sj@PY!x1ph;VRU{5l~%!-A5HW%l=* zi~lWq-KvYvTxhY5Q+8!NuU;v?i&|;@tm9V1r{jEL5t&2nKmmxje^mTb>kF$H7;MHS z?cTV`inLkRf_w;dP!!|}7tqW<`|JL@Wm$z0S53}-cYQaItgidb2fi<_otGIpvqFB^ z+EG&ei2O_4#-?}UAUL$MVt9V{9xT09?!WgYELcJ?f93i*vb+@mBjd;=zs85qjB$BTz$DaJE54=Xh88Q z_L8$8b3wxhuSuSau((B&170ENFY&8pIlgvgC+FW&MGa|-`HFjpJb|t=x2y@CuI=)nMFqa(PU?!#lx@{JRkWC^T_hP7xO;5j-#66qzmQhW)Kuwp z6>}F^Wh>OaW)086;PJ>ao+sGWHS`Q71DpCM{|hU@xg|3YWG-%<#TLkCs&^QCOv_*O zMmm?b&^Kpv(Dh!VzJ^Sa*_+KA>HC+@#2@o|;_8xLQoyx(-+Q9m7>I{)jbo}3`nSm^ z%~-)qZnok2wZqRH#QHH2&nN*O|E^gXH={GE@<)`EbnJiP>Dvl)%Tgmq#XK4!wdgle zhYv55Sz1Q4AwLP^?Ue7}ucT?4u@Ra(lY{H;*|8qB{UEwqwfF55hnI^|>Ys3IdU=7pYpVhB=-HeGqSL?$^SJcT2omwBIq@E)~Pg1=8^R@MV+gyojtOo|m82n<(qmuaE zbO_ed63EZpr(G=1X>-`ApCpv8TF)zQp-icr>VkKl5;+YrY-Q)h^VAkBmVi- zA&4!{<9pfz

9k^Jle8O(Dg;8|Z;lT+c&SCtuGG*XT~w`_CFBylG7n^zoI7_{t-{{8qN1pCH(u@ea!pA%6{K8QN6SY^A~Pk z`d7{oeNW+xv-Yg^I}q7-9ws{37!J(wubrb zae2F$2G7-71spsq-i|-3jgmX1r1F!6RLcoR+=pRKjbAX=v3}oYdHT8(J@mWb@{?Ne z6Szl32P7sWL44&mgHLKL*$i(tmA-{gAbWMK8H^@MDc`K}P3CRg{B>{6P$v4K{M5b- z`qZp%BUcw1c5>8BB&Sk)6gO%*!nGGL@Oa4mN84XkTs;e}ogIrCnD@Lzx?k}@h2s%J zT*M^ueodVu9|wL^kBGxUAA|)JgXBnXYxtBe4?sw<>svOzn>_*qUxa&dzuFuct8XlK zZftyDVeDU^RH$Qr=(2Zh!xikvd{$t_&gD$aoOJWV@QlB0Xe2N|!Z7Vmm^Zp(JC;%6 zG^ocDhKE;`!M`7{l?-_ytW86nRVTc%naK9ByI2HLxu@bcrZJYb>u4Y_G-z;5;klWp zY3LJb&+O5T;i(ajF}MZ8O#fV~dJ5)6YaRBMzkY7reV^UBsb>`Ahyf-)*#DLr3lDb* ziYzMfjs5MPh%3K+%p|;Tr=ZKaFNI%G-uP2qp2CtXqib#N;QPiKT6WFDN7Wx+c{L%xQVUl-PNS$FHmKP{N8_wn7yjP!o^%M$2t+E|n;p=uU)%UF%Gb=Z)y zp8ik9LMxvF!&&&XBYs=rpu`_blnb>ax+G?x-50uJT+db<3Y3w3Zsnn2?ceof>WUQj z-3NKRbwX|H*_#J~&)IFgKHXyNQmcLz1!S?-p7RU6na4DhWWE!3bSS+f} z@^~$uDgukgT(>K>jWzp>xm5(0Fx~&>+GOx}*0(fRWWes(N0~&vZ|DYJcLrrP6zJ!K zXQCS>U4*H}s@~T>I-1?G*{;jOf=Z7c6%Ua@9jBrWhHGr^n4bGiXd&z0g{Sp^vM#l% zHhX48OL$(KY`&|9I@1$l(Criv@oo$H+fXVBA}sgZgMq&KHq^GjV8_2#ll+XSv-Mme zf92NwAd+5405a-|l26vrdG(#RiC*b%HHivrR0V+wcKx`oqAv4c&xFB%9lz{B8+K^h zN~gI~ah&Syo>5if>n}wMpJtZQEo6D$x??}*uk6==9*&-V0wS8KKVmPv(s*TLCGCG^ zTgsx+|4rSAI56X~?66|!>4i3*pLX$CAKI7vd9lvp2j7x~9!9NoFI*H1Fw^8tL>8$C zkL0L~D2RyE!@crG4huYRB&4MKS!q6VP39dCAWebA9avu)S9*rAUvq_452?TUBGm&QT&*k|-9$TUKW+-2tG zZIaNqxEf00k|{i8JCE64C-Wdg_59qqsO)u#S-3%jFB0%CN0BwHDAI3oUvolzDIy|+ z-J^@dVzRz=i!QwC+uPlJ;D`*wyvt?3B|q;BCG+%uOef)?ey`}7BbHIYxzYUf(&6l9 z0iT^}1|cz!IMeYl3N!y+8Ok3WPN?v8U7>yI!d_D$9eR|_I|Z{-8+Mg07FD-MF@?Fk zbFQ;G{afzjSZRmgOnT$JV?T~eMD7O zxSD6rtV3uqZswe5`({$}zgYlVu|a-|n`E<7<~OMvv{40jw+YwG<38GQK)dlU1|Azr z)2b+?i0Uz0wifiQKk__$P8{^?uzGg&+LXv5&!?Y$$fP2*`zO!mPQ8?X#~={U74J6S z-J-v2-$z6xY}SueU*Bf|K74w$hc5Nl5!uE&pGjkAJMs37vF<0!nXi+m7Cns#Ujn`< z4gv>f%=agfu`0$^xnu*$zxWzI+-#M!E(bB&8;=4*D3^5a<==|m%s)&z;ew-j6(*H* z^L|K2cb@W@i9>1GftuuxstCf2_70yCyo!b&^^6frb_nF%J;?{G`^gQ(TArv4*jV$~t7D)Sy z-t!t&2&H-AwU-w7#i{-(Up$-P;V>iBr}Stw(5u+m6>Z0m;**I?;4yDT6;!+6f#h)y zEu~v~^2oR+&r-f$A>=%=>7Cf8HXJ07-+$7|f+{&~ma*z@t}JEBGE0tH<)2+Hvh_hg5{n?b%pzRj;Tx;GqqEWpZuxSr_TO zd`aYT@4#woewxy9_R9D|4-*q#=!2omw~ZbIytXlK8#0j9^vTd@#^SspCZD`oNiRk~ zde_hpv1R_r>tn`zZ}*)eZ_FciTj+?)1Kw3ny5n(2+4tT&%oRq82-%+rMJ=H(;=uv`# zpZ06k>U;<9^tNJOgo{%o-}^XG(Lr5H-)#CcBq#Q?#wcz>^G5c%vj2m|GK^fY$siTC z?TQUAEi}V{7(~UR{1{v>g7UWjgwp2QGxQd0lFoTy8vbt%XU7^ULuXOtIOiPPBcdZh zDTiEcPUPY>`B5NeUc)zUL}s@TJAE`NOsN_YLhgiC7p$~o#aU`G19y4GA3VGmw=!+0 zRJ_s_4IVSeUQvhb9mWg=CMYK5r^v7GeFx78x`Hz*wud}(aqx^D0m}aYxu05uhzoc{ zYnq7*rlqTH3mfyZ9IKL-UEeN#M-se0ktCS6ywpf%@}u6{#5(hy^f{zcy)N+uc)1ei zA!}KDG_<|W;oI1<=Y~u&vC*70mh9Ramf@zUbbO}HjG_x`Kjh@^BmP{A)j==U0$-&F zTId|Q=*3#-#h8&llBciPp4pyx!Q5Q&)atwca0IUdU#{cPW#+}I;@*LIFzQ1?)lSh5 z5e}8l0)Yu>{*}`jgDB@*A1w;sZ-9-i>epBhEn0^maX;z-s!z}xSBa*L@)hju7R0PO z@7cNF98(5usarP0<9O*0b_*->`#mNTSumRgRUYIJWZ-*NtZRUzs>vKeYTftMEm-QI zgiILGHLlh(r1H?c$JSrgmHrjrw+#7dlk=w8Pi{4iG=57rFFJKftvsehG7Yc2L4EbN z31_kWRXyZ7!Hw`<;8o#%~s7!2z#WGL(ef|Z2O z2;GiG^FFXGg~v&+uT1avJgZjYai|VnJ`{ZVsb-;pqmYlRAlxHiS$AqLrVeCp{#+2CVC-CzHEh{#< zPN<6f9R92rcNlY*v{iigd1I1BMn}=CfDf{7yQpa}T@+T)HL^_vBp;-GvCPmm3?Vbe z4`kl~$q*m}vL4`^ursPlvw|~9(XUuGq zCodSBe7f%V#Q4dPxfHtW;?})bHZJFHumFK&Ecu=HUt!h8xn$vmYj^0dVG+c5b?DJD zG+()osQNby?6#wCt+}e#7z127^_d-UK|<>VGQ`y8E*w#<Xg0>nIlkCGKUY_K#l zJ8no})kOp^+O=k)rZ96;SiSsEF<;qQ+S>lh*}QA`OCQ90Z@L`v5z$E{TwI>3Rhn%U zb79zTR2aXp)g7HgvNw_z=krgv3rqI=ZAg(}+d%uXK5RFb&h)C(E$ zKPi%QMFkvi;L>&&CyMZ)=%=)rtX{M@I(J)|+&pn!lz0jY@vX)Jgy5!`}54>v*&|T(cRQt;YU? zdYe5Q>7nX?7iIXD;JF9?e(r`c>;qc3i_fAy^*vskTxy9k4}u=j)XKs^)<_%xlprHD z?gQXlvZ`Ai^6O!fw&i9m&Uh7v<>rs?v-T6}vw%q9gVWNd{!}3fFNHisKwlx}$Yn9R!RI-WF8aa!WbA|US~M;`J{*hTAn714loV2FHq{!+J>Lyf zc8{-X1Umx$qdTH5HDGwn=fTUf{AAfo~cCa23BJVN^d`W*fF&o%T<{5xZ3Rp z3_0Mi7cL?x+g(O*E7;!x3Z~zTH-J>9{OPT5(Hm21PH_It9N#IRMhF0(9@|Ck8uIjg zrWN2*`7t~^Z05$x%gZ?LIB+uhqa@)D9A=YoM`T$blr`D|-l+O&udW8LGCg5rG@o$e znvgLaDvtq62Cm2`|G8bQrPHB{xl(cEdRJcZwkwq>fICx?40l?$w5QVPh`uKa_(P1&EyD%V(L=x` zCRSxJ7qYcw(#C?S3lz9h&9Y%_MhH+2=+4(WgFA}7eH)2IN;OSHvYLDH$@5$W8L{ zPTmO;$%K%al9G`)HvJ%0({TpaYXXB6b91YID=)7Ho|XSqmk*1}c64Jas90NWcE zV857HKgVd~D(D!SwI7{q(5+G}K-7{4q-;#FeSo^i&l(V)a2q>%x&g)qlfy>7@>Ht1 z446t-4h=a;-829Si%#%K7T^Z?A8LL~Hn=+0t(Vm}sJdoyI@Sx3?jC7=qrZpR9QWKl zw@DbNh%x)k#Tc&>YIq5U=O^nG&wW;=D=-o1$<6HCto*jRb72W!rt&eqT-Se#@IN{@ zp65bXw9{SVs@OJe^*03kUM7z&<#D)BKWO_gdD!v{((5rTDs9kf9Z>E3x&(f6;m8d1 zl``g4JGYW*Ldbq?8LDU<60NVmYR&gc@Ol8{+l*r&qwms0t_^?UP-VT!(N^Xuf-gje^gh zwK1Ib!MX!aL{#(;u(jP}L&5q0asV~b_qJWX+o=-Jsz&};PYaLOWKLJN8A`ae>ih*g zCh04pmoYDd#6V-w#_ms>rDHN_UJtLVM?^Y+TN}E#I!v5cFwm3Es*)4u19!ml;mb{V zREY7)bHPQ$B-RbYhrQ#YT8xHAg+mhCtTCV{O~--wvAkqDS}~cQ3m)QI;cxd%N^^Db{NA2C@EX3P;b)0)*DTCl?U!VmN*^{onJsxhk)gG zz>o)E?YaOGo94V-pC)3_YJN-R*-2zrUL%CX`?cNzqXg?|oV0hZlF1~ za^PDRqwEbAKo;>3Of7(tzqwEq6&NjG6}(z^-$!k{J*4?yG4mkwWjz}kTO5lvT!ZVG z0pP*=_We7jYf_IMXi9Na5Mg3^b*;4QI#3)=0=6bUaKPT=X^Rh1nZ?}m4@^o?yFQ3$ zINi)8MQkt0By0 z1H|b*HGU63nWkrG$X!=dakV$>p~|Ot*fJY!}|rOBq~g= z2P#IV*$Zk`M8CP?7u}ICdwK}msoy1P=v+mvC=pYcv`i8W~p&^N-^0fAcY$Mf3K#;Q9I!8np2pFVw(S5hhioQ?U4 z^sKC`0D4%#qVUOtW>jh_#tRJ%a&&*6*49^mF|$x0nm~!utkPt;1%Ve!Ry<%Rpw>KPk{_Mg+0{|9y zl4Trrr#nDkAKDnna6huzm}IJ6gaZmuef&epdGmYhIbb952DFz$DFThGfKcxt3JPH2 zYcnVV#;v4Pq73{s;t>B4DxlQ)T3?^k+1ZIdGb02BDQlegQ@FZ30fuBO6z<9_p&-2S zpzt_LTWte(0Cxz5CG41YXBve3_cOk@bdU_pFHNF5SzFGhx?>9_!@5B(g zZU&xlxbVWPFnK)1cz}$Va#zWeQGXyzv|sJ;Q4wQZv}I*~M!H8)Q`@iL&!4dYZ;`CK zyL;JH)5SW89~z0n&)vq8aW$AX>LQ+hy_+7)q_a0$)AfCqO1)}O-&cofschxAaJsPwFLg3bE~@|5%NNUi>UxM7^5jAr>9sD~^G822 zY&#c8o-nA%W;6taI#Z1DS#y9WBI`t&mAkQFlqntG3Sa=*3k3x{?s+FFXp$|uOjZmHwugu18n5>FY;0`0`}@Du z)+PYnLtPkNGO$2t#Z+!PNmi^$MWe`Lm^OTqu zu*ZQTf5gljo}2qj@M?#>wXMzl&=Zio0j=5E-mY2wECm62l$oCH4ND@vetiT3rqZ-g zmgL^v-U%TCIwi$UhdKZzh?$!+!Xu(S;^Bz{XlNmhgoMOh0h@%FI3P514dhn3N9zL! z_wOIVn6Cf=d9SG{3%qXGE(m2MdOg@?TqI1fc>{;B(Vz^#B_6cBSklqeWx9jJnmC}R zuRk(5*$o(?5@vxm5#ZwfTy}TdAWe|Y#19{9n6SGIKQ*kcxZSHil7T%5kSKV~$6Q?a ziy$U_cTjc7tgx#OC=VZdEABjJ0mqmo?}z_RF?PsNjUWPZ%s>Cj1HBVMaXV%2rZ)b^ zwT}CPfS6Nifqi)85Jr+^FqGonZ%%Q^zt{iVX7-9~=#au?PSut}ca+~QKWyv$#P{7B zyVYt{lWiwK?zPp`U)2{nLsj+3SC2Wvo-dsG7AwQj`oNs5RC!NYP=P2H`{SJ?qATDq z=6jK_T38!*N8UUOCZA(#ixgNvmf8{1ea%TDWY)zJf^+-W*-DFA*Z(?!#x$jch2O1a z?>J!r$gAtmi^{^(D)OG`(0^|=OcDNgGxw3x%% zyjIi3S@$pj{c@2;gWDCrDd>EjO^=2BIGj@x5+qGbwzRvxXJt`T7F5Jt9&e7Cd0vt6 za~<5mu~B6h!=0p+kUcjD?)b49=j#jK!!S_cXjH!&D#XfKGFFXFKI3%{9-Z$_p1iJW za}0+=oMLXJ5d+P#y0JK6?xtS z|N3P!C~)?nw5)6f*YxGfdla76toHWy$6I5;AoAUtmmIhQM3dkYF97XEi!_BG8ZMjv zN7Yw=Rn=`>qX-xXDheVX3JB6E9V#VK3P^W%cdE3Mh;&JVAl=>F-QC?C|2*FB-uL~_ zb3{GQW}m%k&N0WBYt0vLd3kX;tf?T%C54Xh#v`A5Up9)&w=P7b z)|tREPagt564U_7Q=N4pR7Sm<8XE>3NWJy;HeSS zaYZ7T{R#|*%=<)HcHrC8i^fWhXMIkFsxBK+KPIql34eOEIc7p z+oPXfSTLKg8rlK>Q!uP!YPzj9cL`r)H|tGyjQDM^v|&(+aLW12D1As3DmE+HOjwm) zU7o>%yNYw4)DH;?Z`>v1jzW+OP_bM3k9@<$(bQCO4!+|Az*>1<1MpfM%90(tZF@-F zun0Db=P-cSc?1Thc>3!d1hkrK^y8o!gtF8l)FsyWWx_2!Q zj0X|)C*bN}s3=`7dMk>$z$$TRu>xFCzf(&~L$xaZ3}$=V#rJp* z3&pp{{+rHlMg^PPKWy(E@-*7R3V%*r+|$%)RiN~Z>n!@)x{*oNg|Sgy%H>Vaf_{y# zu|HZB^`CqjE?l}}Pl`@f(PUdyZ%)zD-mVFpN#zkB!EnNa`)oN77SN$zk>Yq;<`0B? z$~fN+WF|1UPDN_M|Dvt3^*weFicbrujg5v38uSX~W9^GhW5_p|6mHU?t)F$x8t~4` zK9X9zjuz8K+U|yCL(Ex>hx+u1Q9=J0#mn?DQMn1@x32N21tEcUg(v}cL?#Ne&AMFbM5DjLzRAKT$~25eUK zhV>p)dQ>YKJAru#n8mZBsb**zh}K1zg+!E;cYd|t7Y-^zXp70YjR3u1L~|xI^vE+8 zGt(AlnrG+cPDZ+%QLCYFX&s_mJRo5Vp93hrY_K!Qncqb`(Ns#)l$o?7251_pMZ$5T zz^2%U7!hQYto6lI&d=}gwxCWK#S*?e{q8@3=lQ=ysHks^ z=2L5~LHwexH9y=#8W1dj+`94U$s2C=U9`%17sFpUQLlyE>wMzOK^k;K>}N7~Z;O(QLBDSRWs;$56OMp=B`cQBZkI(I1d0aHbLM|PEHPU z;VzIk5DX7za*L8mmQ~&e{P~m5&hF%XKwDQA8Tm>zPTL`EkJ5(^uMG_|OdP=JqM)F3 z6q;?9=Ue$>d{R_wM+CLJm|XR90X+VFDE&2chFF!k&&)CjnLc^P13&QogVsmrWOxPAB(_>V zGh?7gbO>_#_@+i`4C)XO2u@_Ob-z`#Cj2I2l*F8MLqUt{`2?{)+vMRpuNF<&EAou7 zQY6p3FIg^*;deT1ADX<+h`JfcY(&JxRnbEGY;SirH6w$BlCrJHZQ2>?)5oQzdO;Ow ztjEhrv%~rYx%vaY>qddf?TftNPafOQUh0glbaUn17%vIR&(CKzDH_{AKnPf1U=MC$ z7+2=XTFkX}bR1mdvQbcc1Lk_#l3gxG9R&&2+cRQfSdY_6Um0G!a96Ide>E2B)$IL4 zeP5GrlwY*45h!G6L2Kny9B_V&Y>DUZPi5ZdD}{ zAR8l_B4J$b_`-+6e@{gV^UZ&A0dOC_k@~>eQxjP4W|`n%%5?wDOxXU?1-Z#W;nB?0jf})fa%Hl*#+y@1Qy3* z(?(z1I-aW&@!Hy2*%I>?z;rc@Z}yP*Z%&jA6>&Nl*dMM7DJxH^jY&#MMv~|UhlKoy zh!{Oo4Uhny2sp(XH}WrJ;=n;dbz>`8hv+YhHR;gHlNAmuWm~$N9sZ?Y_D2_|m;4*l z)jFft{?D@lkgJ_<2^t$148%83=`AtLnrt}#L%0VEdx|-zr5;y^xR_$?fju9|-}IG0 ztSo~IzmI>V0LW^T(Mm_HcJprjl}dUR@9G+dp+EW&V8}|o^TVvsZ)%Sb`7~QXbpbF@ zo&?hSRV1ywOrI1}J3$>Zw)4Cn-gklBm8J>hKYgEaMZ`LvwuBbjfvbj8ntHvI=tcyW z2X&QYrp#TsxX-8%yvTU58Nw%10XJS>&v*Ow?c$Tg$Vd|NOsM$#N1=#$Yzso(H)du# zYAx}=5Fkp>L+l&k;o(7SjCQ=!LIMcbP3Z#8nlkcCzU1Fn%{HLue9m(e;;ja7dS+LF~Otu%M7J0}w#TqLBjc-?yqYHP+W>YqeoZXDLt2h8i9U3k%PI`_}{oW!SK=?)T;^ zW@ZUxIFX3U;TTYpY_aLgeT|EWE$600p`gc1y7%flF;ifEF?MkVA)o`8oIr>KFg)vO zAPjAbVzcl!CXzQ>F3zgDv`4Tk$2)T^t*}8T?n|FIPsIRpCVXyOd7>@g_k`cn)HLW@ z;D%mS0zP|TSXdY{p~LS^v6^wzH< zyY_53IrqDHGZc#a5gi8W8t`fz(3n6UkOTP_pPcN02r(%$i@yTeGcMl|2%%AG1*sq{ zBV!&qZ2{^~H|ZCcLu|RzOdNoSmpWPJ(4iVNj*{iaJSU#3^S$#$mMXT4>&w89iWwSG z0Y#)am?0-PzPV%jm*WD$n+Ir}E*Oop)KpdA$3;htj1<+>)H37?zIk|{8keq+A}Kqc zXxSgEHW(F62*}Dl{=CInHqogOz}1+oRtHi51>gln5H3i;&~{kR67}96Jv%q?yM+aO zb1ib67luC(cRmOCeW67DBa(Cn9*;&$Rm)zw#+0bWl8Q!)kEd)R9mU`8^tv>Tq@^&D z>al{>ohW!j@|?=Q`Ijlk*~~=*UC$q3PI!3gJ5Zlkxf}i-ZnfbzIB`50DlgjLag@vc zK`6`;s3P;OA}{d!XI1!8c1>R}UgLSbxuZ%twXIh}hj}iKHSCWz{aQ5RkJV32qv%gPtjy6qC7khxt(A%S~@$EU9K+O+}%IQ%D#ixCf4PW zO;1lROoSB3dOcm;>KRiy{r;Es`^#^nrLj4z*H!Di?xR1Z`#e!*!)U*+dwR4b4m=`a zGJxL2d3ii%^t&|_2&#O&J_y2|laYCXKuL0INj^57QKPsg4p z;bdKOr4w*ie~*st0Nc@%7<&yFHUD^A=-oS2D3XqlUdK$TCXP@lLiV8$Mnj?h{`mM+ zyODuPlY-9i-kRnQnV_z8yv5zFj;)WfDzjrT0~NG3=v7}RPgP!vH0Q`HAp#R2BW7G9 zC6)hXS+G}(U0HBVVH=XN(tU9t+@oEaRrg2;=@A z&8j<3r>kz%&`1#pv`Iqv%yGL0tsLrT_YV&40)KOvZH>W=QLSI_02j9XkOh6<- zfLHTQ@8nVy&*R6CEAujgHaR=ajmwJvVLy(ftP1SF%oR1_L-pvRO~zd5saVFFh^(Bj z$08iPU=^fk8Y_Q<8K`i4*II@+5ReUu+XLJug3^T|T_#o?GQAK`dUy6rDLU+QF89(IN96K6PZV%+N;SFAQmQo@6Zd$+aTu8@ zH7Z}i@eAfZ6ij#j6#Q4G?trvh`7)NA4nqvGZcV*h9-95v>N+I_IZ7?@EjpSKm1-;= zO~3X%H}=oNU0kjO4Qfy!Q-aDxbOerbtt&{|KAyr7_fnr7<=K!+Jn4c2fn zt;wYC*v8_P%M}MWp>hB+BC*`j9Gk@n9dqo%<#v0v>p4vkqMs+SKn?)D?8oV;{bE;a z7cwU2FTRiW1BvO>h?o=ca-L5-eh@mK8QWo$@+&i};-F#jMz2##BLCeN#hk`dW>%f3 zgTcn?N-LyOh0DL*om#JnLMEA}rMSlHBWE`hx0q}*p(d}JD`JYOw5O#0M8qfP@E2#= z)nzD9e!jSj5fh;h(}2dgHuz_5J+CVn92EjsfuBFSA-H0dC|f39745fJv-WQ9gRE?` zcSdO9+N>4P(i;n!vyI;qZRgZJ$CdLbq&!Es^ec!Yk(pbrf0LTtEhYSuW**-o7tm*f zR;`Xf+}*p6vzYT7?ZNZbKYkml#C9U6c$Ybk(Ou)W3Xi$u9;&wgS|dlCtswf8{}G;C zk<~R~hLkgo44MWAi6Kv78zN`?!mbrdNQd~`pdMFP7y>f=@87>2&oGoF2GnyPTEH}z zYrs*NXQ?_7^|^34p7E?qI`R(&qX}F{*=FgT&vCq-<^Vd(01ci|6yobCp8bI&8Ho7Q zm?KL7>ewC($V6`R&6s{rRt95>po`8ypj{~6>(r=qyG6i23j1tCyqaD=2I?*7;zFid=d`O!0Eo z&0o-8tSYhZao-igX+370V{>SNm^93nzgF=AL>)Q+&g2Nytfr<$(dFX6)9K3+ADcvm z(x0hLfxYR0QO@ECV{;3O6W~ib(Fh%@lR}kOhit`OkeNSaTFNae{ES#dzmJ}sN3G^O&ClKF(?D6-8jw-Hg`!~aq^_spR+ZIDMwhc0$J<=4Ol_$qTngN<7*Y~VAprpa6BE<+9N|^ihbalOC zsRTqtJBBaMwyLha9vygCtqtx#@5g{gi-s(dF9`gna=DCXw8!z@z$DP*{NE`Ci(a;i zhC{sR4HlC-5#RFEdfrjkHS94NDs)x{GKRSm%|thaT^+uX;T+UVv-B)BtJ~V^->hn4 z5{;QSx|+^Xd|gnKGoI9OYsNGTk+bA-R^)>Geu8ZaINZwJ;H>VxKHg{d9&;3BX8Lb# z8vp7q*u$GTZXC`zJhUDJdeeB_8D+^Cx{cK6mi=eQkLvB|c|#ghvts$< zeG)MBOYR?OtyN62N8Y>0L(qula=GNv351*(SX>c{y<;((s??mEz%O5}iS+gR$Py7r zw(HC4{WeTY%MFZ-D7^Naa*>VA@>^Zb9R4~_>&)dGiMdW$rf1Oon0ErU@q2biPb!`d z4rFR-Oy~~|(xlYNPqMTkk_XBM@&(3@XL1Bb2#xTHs**~>RpfS_G7tQrmW1+VM0x)l zZ)CyeNWxrbR1iam{l}6uHGA|i`TR;%EtHV;8n{U74sm&+*P*tr?dXV-+ z>yY5=T8ZPgCL1Vinm^|=Y_ut?LWOe>oaLxBu8}p=R#bIi1W@AZfc}Dk%Gs#w@h%9~ zGaDu@97ur3(5AcNco7ia#Cb3BymRZkbC|V6(LeTlo{SS{7o4aw=pXvnv+*U;4P|U< z`Fcd`jp*&2oB$_Z2n?ejZwe>9Am4Wbau(zY4RHZ|)S+w{5XD~Zry!`O6U5wwj1UfN zk_-M8%^xmTM=nbjTP{^!fnd^7FB+CzRj8MkBHEO9q$DL(;+;VBZQL+D#sQ%Q9V3&q zvkj4m4N-fS7`N*{b}mtOt;aM4^9`At;UXmD3kO7T0)`P05#=?fXf*#TUkzlkMgoOJ zm3A)Ssg~r@0()anW_C&cclZy3U_GO&#+dZnIULsF*VYhTPZwyZUpp6C_enuWb-_{H zQ|!Lo1xa`fiP%*Ao@h}ACHFg*^BXCr)>z_}d+n1hvmqTW@i-WyBmM*&rX`9~<2Z)2%)xyQ{OQE+Ec1m^%?PZWH%mPR_4I zK1eZav^qZL=Q*yyWHp^e0`x!aqjFA!$6`DW$%Ylv&Yw-3))dY+rY@-w=nd8b&b}o|y3DCZrPm{l(L)D|W;$BF2-=eEudZ zFh!asldD4$jl7Y^xVST!Wt+1aglEG8j(1>1Kfry=B-4>lqW^SD-VzH*=RpPjDo-N} zhCHzmy5{U_J-IX23qiJFm!Bp@7h(E3FV+lXaw{_*K0V+_Z?mI>u^`G*uA$nl4Oikc zJ=ckP^0cb9sdV%a!f<4y$tfqpu{M0#EOktxdE@+ul>x8jfwRjRmnA_@m+GDx=fwf% zpW?=)evuK_0US%TDt0jyfy(RHccv=#LbHl7rI+R$^e#p^jojF`3+xfGL?peQ00l^3)Y2j+lV1Uttd8 z_b9Y1KLC7jP6#tiYvFJoXAJ7u=J-b0~$l zSBM?UPeeWU`{7A%W1bb+e;pq!cNKZw_GS70AwNbAt+^MY_hinV7@0k*Q@JN0fs5~J z{#TK2lctxU+gbnkGfaL#^l|&o<|KrLdb(<>pApINc_4eY&@R$$>IaAJZ$l~#cNjPe z&)Rsz0K&_nUX>m7bHnU)jajV<-pstV22aTrN(`UTibwrMihNt0bLjYNyty_=;uTll z8Y6CVZ*dwAZ=Z3NtZmVY1}z<4-1!uP`n57?fkqTD-fSrYHObxb%rgRC8_N?NM3tPyMsj7CcIVT9-{7@ncndO0O ziJeMye>ymd3+&KF-uk=dB&@F+X^BrcpGsUHY5K5PdmiO+ltXDY8(FD=`jBq+%s*4r z@vF%UQ-3>spN+k{Mw}yNJ~*c0VaM#SbLgM1V-Y6PnIQ_>uwGLg`97it3YNiZ1U^4)qxXwdP;4+6?f-5 zYh5O~)1qM`nZb{+5s`0R9bcLQ&ozDIvEp6F@1_j3nUxpo>rTlbCUN9llJrb3fP>8D|8`xOEB{Y7l7Af<{kyW@IE@LG)odmQN{Ml*NEOP00E ztuHFz5>1K~T8#h96e5e)$#id%>8^inScS9ppBF&^13J;5NzK{ci}~yuOvWm2hJvz! z)(KRnxAm^4Yb)zyY#4BhagK-uAb${nuyvQYh!e{3XjY@;Z@bPdJE~% zfhFmqaxJ2JMP_~HMw)ln4h6@CagDWPj;+**&5$Hcm}sL$8t&*=tG&v|$dqdhIXzHR zsEYZOp4@JO*t}|PN3`-dAlfm6tTaZ4H4=Z!L^Yc{Kcr0FSWUEJmq8lN_t_mx{9ly; ze7c`(c-RGUH02}jAMoVAXj}ToRuwYS_t9S2SfiuKq+!uq@t`=UV;o?d&#w`VVw7rVES{aa=09#)F)$ik-@z`^<(frq*a4KUo#gmxJ&5ocCU@U#= z;JQkFg?~B7I4@{!S=Hb8)h46t_fGQr;FK5};|qLffX@6bx%`-mZ`+E7QJd0#jLYO~ z1O?v7Yb|0z*+b(~iI3JE3U+^vtN=XV-H~?-y8o1WhY2&*HUeQ4d6WDT4D>_hvPat- z(V**hrGr~j><;(SIn8I6qJ;MSIixpI=l$JT%$sV9BsVgsBoTIT7xf>Q`^6kLa z=}&%a!B6xDP3t_S=9U~TS(5d39oJ;iOr`szY()Pq(fhbf1~z#WYFJ}<%paM2@Nt)? zlQt({{6lq1`{lS5+C_^MFJP8u+@@;K&Ivi8foZ0hNk>02P!{Vc&e?EzNgS5UX5DU_ zlk*}!#)j4zjq*CRR)z#zM#J~dM0pktn{e%S#Nzfim)!V+>TuZhcBzZ4kl|^sEuW7l z4_+P`1u<+&>4n=Mhbw*yJ-ni9P>&(AaSr4tyrhLD{4C4Y`}DZw$GUfL89GeW5_Igk z+Scj^(x@TZIj;zR5l=RBno^e4o#_#-*C#$4WVI==FY0IjOQhLp5{A`t#5e&t%ss{NM~u?p5hk6@M?O0ULqwgo10rtN>@PcnRh)k+k~`>$36 z3;P=>P~mJ*J=wL*R-l^y#@|UoN=7ALRf1xp^eU~AH6>=Gt5v1qe&pF|NKveQI`-rn zcE;+-gsGGd?YqP2D%1XJn+cWLpGt%ynVlR)?d-c`+LSzCh!wvy4BU}btoV#c<-o!_ zas%x&AUnM%SZPN3LCHg;G{=b0Qky-ABV#1M4Qu)`+1$lH4hqt@hm{t}-E$H2s~!CL zd#h$&85qZ9p4K_C*tvm8r-$ve#d9zy#hK2?(!9~_;AFLt|Gf~jZz4rD_^S@P351vKD^Ba zYgnZ6`%KQzWdujj6+(5=2&y7hqs(SrA za;cuUOs~?3*h3AhsiaX`s|s_+%o>AKe65lI=pzJ5p7Uw2~5&FJw4lf9)5#)y0fzY)6}cS;cu;LEhd<8+RlAs zH&xnOBa)~NsOz=T!xq26!)a0!U|R2L4*77pEWVOB*)P`M)_G(STNSK;T`sD`2Uje5 zY^CR=!mZ)ejQ_nogxyD)olmhoCl7Sw4ag9-6k?>s!_+Y#++>3CgL(3Q7AWt zK3TYlrD>rjwqIWVj=7VV*2Uk(_>A+_r#o#*F^HQb($OIn4XmBxq!&e!ba$eBW0PNv zHm(Ko;(sF`<~iliq=?m4nZI{Nl*IB_4*iZ_%sonjknGy2+6O9(qQQO(tA&$|tuyVMw9OP@3ra(K=KNeinsIR3_Q_lmvQch-8pH;^?`^&ruYCm6l1wj=V= zOXp~W&G}SLAeWc(yw|CGue9sIJ}tG49b%Y+I)Sg)dDS;-u(rre(S5N9XO6N%dnXU!R#UZ-kxNa z=77@`;~WfhN0_h5=R&~39k8fMR_yhag7!Sr5$@mae@AGBFZ7;}pycfnRStb*E98-( zQr?b04Zukmc%S@XTGP=~VomNmhI;)X#gop5lmK%>{XlSvK5b6?MP0V(oCi;J_4M$H zPV?dq&eK(u?an{3FP0@$5r--+G6QOc$jlJq5ArjG=ANfpiPVE)W7TH<_3V$IZ0KTk z^Ds2~OqAK?IN*F(9aP@J$W8t2-B5|55u4t1LV!TT$%2_-I^t8;Vz@4DgS~Hg)KryL zT)Q}5dU|)9)rE4+m6D#WRVodJNaUZ>Pqj<>b!9$&rdS%Gi3vY<=kSq7cRiV;7@b27 z8U>*%PCxOBi@w|%iA|mkR zOAe^h*U^FwM;87(cI_q^G0eCWfa7DYIS6)WMDqHh+nGe|e>m-voY|)791XKN>%0;T zzRUE9ITygJuwzI25wq&!+ewHgEj+9di($LCO>4PD5`+8HroCF#PL&=4qsFmCqZ+OB zmy*FSAtW&VcT{e>xp#Z_uyvY&BT#aW@cot@pvQaJI7lSxnQLuqR4z>-59(cTzlS?yk9jp-uX;cWc)jJ)r84rQB(bFt>Q;)Eo!)M-ed)OR<$3 zqGxJrm>vvQS~|OdKVst==N&R-fflmQDrw#+$*};C5C0pTi(c|uDJTo)8THPeB+#rZ z`hpUCx8F{`fG^X_>!zxDFSfxF0xCh1E(2@!I@7F9N-~{^Sy+s8K3YlQ{)P>df#CxG zb5nAgfR&X6Uq}vR9@8D1VxnP&%%6y!#hFGWxJD` zekKZRdUN80u4_Y=G@IX$9Q+*v)akprj?Rfk6n{MGC<-oPg;g7f+oF}us&jJsLy=y5 zs2f)dJvyG)`CDHd7l2@f@7}RCPDG*cu*wuNoW`9!8^kJ#{MlvhzOlJmbDIZ#T5Uf0 zn)$@B^EY`F3*60|Jc1vi!GA~M=&AC?2*=D7Z#qG+p;5U9fuDjbuIyK}Wl?PCO7oEa z@e6s16ruQIhpZH4@E%D9iloz5-SUp!MNl|mYa7U%%YFFou{>s6J(sYj;>t7n})*@qe84>JkLwVqvaqJP=~ zs%izRpP7YcYA*nyB8(W@uo)>r7NtEGjiOIK|1*Ycu*Y>( zAT&&cP?2pjOfLdm)59zAY(@A0OXvs-1j%F#J_-8Sk>|7FdmLF6&x6H-o`_jQ#P|$; zP_uZD`qEv{KZ@^14M0l~&gMY%Bmf7b~v8B$(&kdiPm02xr z_c5{2GgX(4b|(%lMyv2%guK|VwD$d?F~O%GE>UJY1Fm2Ko7r#y(EA)zaUcm2?tV1c zQb#-0v@zt28rrAwAFH{@Sx0wMN(w7ARlCGx$8Bl;n;ohE>IxxlA`e%yDybL~*K1A= zDf=h_qL8N~!8}z8V|W6)xTRQXrMFb_pT_3(d*?SUBqXad@yX8+FJs&@Jx#SjGnHMJ zvFZZjRRjUNQI55>`%xa_Is1gS_mxVY)JQWBRfWukiAkk$*FM6kDWUkc8STkVotUjQ zwwlfliP_ZgS+a>c<`+KylCyDG(*os2s2r{i+-#nLbmM<9og_zyjiQ?hKyvbsh4XS$ zh5jcx7J=asS(i(MLe_<({%`D%{|ssoXIXqQR zC1|V1#rI~k6l1wkVG6@lr(@(3EMNP&B*o5o9L@bT6X{xL!02tBf=nc<%?OE5iBQ6H zwTjs@I8Pv)He5KbXzN+onfwTZ3p0kh0{ujPz zm$d7$B;Jm^gH+aV{q-e7ZM;vq)8o%V-J>#~xaI;Nd6DJdjw9yYg=b_>R?Oos#7g`|7dX<>NfgDE<$H6N|O z1EkiaHx?IdAg!jI^%f77k4>)DK$hA^o0kZ)$_8fjKK@-(WiP#mq=gMZ)D>~e2ck`l zZxaKhd}Wg#GIU^@FRA#jJz*zE^gF!O1Qgv|X`qJyM@r?+h=xq@JHEtm26rj|qQiJ> z&6Uk@cW7vNx)i!#A~Jgp<`8v%g=*IpNzj42(*IChRH5WQYvVC|us+{bSXpsS4y(#o z3q3*JC-Gbneu3NUJ8dH^V(<6mlW2dY!n^zfk_)s_ug$GQYoooyE=de&AJ<5h3rzVj zoV@gnD*6thGY;qXhRY-@MyJFS_@5SN{^qJCe^GmU96bQUJgctfO@5Yv>+DK$gh;}PU-VP|$zh$SN<}jC2hV9wFO@0KagLBbO zHnmOWp8;2C&T8#g%Yp*IYPx<%E?a&Gb=*O}ft?-nCHX%=w04OIH{>!(-?p<~$3V(; zzh0t#t!!a-f;#lf!1mCR3`tP^!q6y;<%Lz|`2e2Xj5s@x>vdE19z_=uf^ZJN`^5-j zi2a;f&QkZN=h7xr)JgD`MDl|Px%Y%7D|ax%aTHZHA0T2uO^;M-X^D-D#0D0#UrY+^ z_k|9yL@|Bc-xIG~_H@yo_T}6PEfb%YAekix&?d^7IVH#Sg!E6`q@-X4*}DpkcNJt_ z@KM^)OCpBQ7Z!T*37#WkHs75BUHSU3vic=9QZ;!eD1f!kp)Zyv_yu2?xc)C!IJr!< znh)NeW^Ba&O`2njep6Ciya_8itCiZvsUN6chp3WGY&cw-9K6<7ei=)){cQh4bGN{t z_{^hf$vfIbkZDqkow2z~`9hePrYzJ?c&nj1*Br6j%x_`%MB7c;FWRlq+KLf{5=Hsm z6BE2emav~pln`*{ovi+_eXlMNIh+;Vf@tiW9NI<0H;d2R6koYAu zWi9jbQqQ8Ybr~Y#MrX>G4**ve8#4Eva2n+-_dmLwaavH+SCoP*62uFGS89M=hrdE| ziW-m}a#X%?r`&ORN_WlidLLEpQuEQW_tWW(A;$;e{2fVXFkQep-^`lu8yezNv+4aR z_bkHyzSu!u=(h)A{42unhJUZ>Jj3GIicq9ixgAMLe9s8ard>NnVktAJMp96B-vUO@ zHN~IZhPqHVL-QFC10H`L^7@uZ!YlJIr$Any*s)@8EK!C(6h-*e3}oENtTvK7`T*Y> zUh>ZfHhk0mGOIiE%+ucg2EE+g-_K{{Rd1f@-CZ*gY0i3?y7a0y_QlaXOzS$RjQ=Bzs zXcK~t-g%>!R>TMW56lO8r~gRmzUR~SgJle24Z_JoXtm)QjTN($Jt{Y2qUL1!2*HIx zG}Vajfc1AYmHrt`brZ`+D5j(D3HT-o^Tdy6$pEl$ez@%eq=i^Ln(Sh1>1Jq~ixwJJ z7JdyNQ=qqQDV06+F*3F$mIoR&3QKxCcN1c8yTBH>GKrPNPF zdY4ICZ^du*s!MJ)6jgZ<_Tt~|ZN5X;gla+n?8My|_9*ElyCoklkx(h_j+#r2d;yF+ z9(y-QZ)1_ZsO@pM62{grL!o0eLhJNM7%YM|^*_!qC(zN}a7+z8;aZ~Nh;7!UHHcbR za^oFSzmR-_ebAW|w*nh@xdz_n+I;S8I?P?}?2u$uDX~*}Gih<5lC#u&QSN+x4W@{s zQ`yN3qf7nR;04AVyh1StQ8;-Z@{kQ&*j@-S`_QQfI_n}ui3~>naM8x>z%Nqcg>^2>C z1VV8S(eHv~N<3W_y% z#R=}l+$+f3wOqsr9MK_(of)3K1?tA!>#L9c7?vW#1h~Hd6^L$_L&k}Y(Z=mXyMZrC zFv5$Z|7xqq%(&LFu-eCfi*<9|mhlBE?1NDPs*FQ3BJSom*&A4Nqy@b@6xWsICmjd` zE03<1)Zg6Tv3Cz9EYZ8I6NP*IQ%CvIX_eYm&sNXqC6-9uI~iLXt_!r`?0x0If^wX? zY!L-6N}0@g$X<;pJV7AnOUOJZ1v0c5f6+#I&PFTB*Q-c(p-9RpGXo(3eao*Vau*PwPa+sD4Tlgxs-DySI6oGSb28;5p#CF3t z1;>; zmlZ3S9idCr$j{SF>SHT3IcDJSc}q@p`k{#)3FA;OnUhNYPj=q9jCJ?vK|7hogeI149+VaF4NmBu{nF&MJ+f2Ug%Gk$Y>qEz1TCJAN@pFvk-MQBZqKI zb_VHICqQAyN#;3@Uw)PQMLVE!JAky-lI(05cjMhC4+EgZxlY1X(#Nf&tPI`s##LY5 z{Gp`7eip4VLWfQA#|oui^n)h$%LslkjOazvb=#GMD{$1uC|!UbGcx3AAz=-eGTB*$ z)b3(v5Z6*7jfWLwnO}g%F4HZKaK}mPglH8-4>PVzX*~?`(w9)hWT}9Ib zYiv8)#vWxvmQ|) zYgD}nbU+-=sjUp4FWNzx1n7m6*}QZhP1%=iv;XL+!EchV|@7 zdn6p5*gK=DRuF)-^9G}VD2#4__RnK%*H=|17|NIDHrH6U51LAL+N!+O3Pg6=8HJO| z{5cBYJmyImyMt*Lx~SVhZ7H_!uWk@F6r|57Iu3@^9^+j4N3Gkr7j}{rZ;Xm-!@!&aK;M62^a4VcR)A-5ILgFx!}#^^{|?3-l5Z~ByG z2F;o%Hl9Lm+~TLfzGb$u3@2AIH;Bn)`AOR#5ZXBw^2dysAAY^Er>edDbqUX-hEtpi z!MQVJyA8Y&zE!H9oP%JS14o3rG{LkXUfMY#mteo`#9n9jetg3j`8=lN94Ji#{Z-cc zgqp083qU!yhQ_0%DiwYA089exSY1kdl%pZ7&t!pK>r%8g_MnQOg)XC~*ro4;(bV%u z@%xbAHJ?fQV4qqIWS#`rMD8~9lzr!BMNS>(`R-Ej#VAig?Z;Og2oV<2QdE*A>dddy zL(Xsl#!S=^;n4NO6ilXiH z3FZx#v~^eY$UXekI&(wySkw~I79{cJYy1m}h>I-Litc z>^6SvKUy=i)O&-L=jyu=VO9^Dqesw=PxH4UDn{!w=HmiyacO(Gn{!AT}>fAsFi^#rmJL2)1$bHS+* z&PdIdKhvwBx+lgDti?TC9?ya72bO5MrlDUG_sS3Y9lpAa7l2yMnz8zhf{~Y#qdhIo zxRb=5jovZ>ICYp7b?+{F(c0&ry3LoZ-=1)`h)^NTp zyP8sPjV!ovEOyS{A66UKgtEu}B@b>%9dFA>VVMswWaY-(UR&Uq!YaYf2|QlzGSW1> zbpr8DQf5i0>Z=SU+f~^QBkv?X5&NWLXZKg#i_O!2LV-xW3H14g`@yDsxTi5TXi*z~ zE!4r#;aN~}TJC9X)3~fmmyQ3=Qkl(-wdg`fc?F`fU!}-*QYL_5{88KmSys-xlR}Eo z<;XAceDCCLQhN>05v%zsHY}qCHH#qV2Prsg82fAGi~3oz6+Bk49NFm|(Cs1riNxng zVQ85n0ty5c-S``%iuh#NjXPrny`vB?p#ZYD?$fmq&*6&k0a16w2MOx>1|f7 zy}XE`&G@TSVt-=E$u{Q(J$9I?FYhfPrN*nA&0ZUkQUxytpGWO^v?TJrd9;nkQI9mn zasu}wpX4>*{2E;$iD}8EeNcHyG?i#o<-~D;#@_OR5&vXz4?5=IR(XV8mPT?qW`^dc zy^W}K=kVcfq4Lbp9N32D`g(vU0~@c$7R_DVKgGr+d~JwSuE)_JobvDSRCa3&bd6u5 z*PP>sS7=d%&Ll4Olj8T2fUds4Szl%StA1H%{+c^KK}W92TP?q*_lNTJpEmJdwE<0= z5kDM)cPS$HPX$qzMFnoA#P5?5?WEI8P&J{P>QD(`jziHCPT=|_JFmyFWd zg83;|#__h_`qfYq`Qq(-=MDP8iv~0(a5btQMvY;~DUu`mOr=?3 zs>ctZ?Er;aO@9}O{Dq!g%?*lF?{0smo)@S~xPZncb*(tpw)8I5w0GMLg(V9al86~< z&eD;8?pyuUxBz+!LTrKY_iGaubtiP;KUiL($nYqI#283g8E$@dvGPVe{LN_}GML5( zVgk#e{9cJb{1Yi^)TSyN?v*gF#*HH{$(UjYDbc045iP83#aS~ z8QUW_Ad08&uf8*pf;5bC%R*sqHa&H>L&5e8j_r5x8lLIfCtRQ1XGGI2)!WD)r0e5H z8-tl%Yg!7z;0yW(4eB{+HQyTa>-2NfR2!6L(9lt_QeI-;fuL6~V?=wVx~)OD^FQ0k z7(q|can?fKqr@ZSjG?9uLi_RGT!6)8VS%n&fdbx%8X7ab-nEHH;cr7W`NB5q8)QOK z&27`nrNGpYeE8^OJ+_k2x{@^d(Ho?w;5whVsHK$M#l&5`*>E+F+*_yuv%n!YaYG^! zDuWqJm&YwSnY!nY-}c<*J1_&_Ne(uj?Ug?VQp{|Gf`;qwQSa^Y|L&k3tz~Kt6xY0H zmWxL;=+*NbHrOb`_t5>6s`82)M(g4qqptDnh{aqaxTJ*9nlAIiBpcTeMLBQn57N65 zaPHjX&w~VFwc!b0&Dn?FP(&ETcdk!pJXqld4j`le8($2$jxMD{A2BfZ!znP@wA_Rw zKi0Oq?6LIy(tZyVs~V9gT{tGa8L4I5J(dSU3kzKf3(^u4bFotfz6@OXZ`B=MK=Q)U2hQI^G<(JvO%}^2rs&i2fh2tYW1`{%?n~-6|{}G zDybuO(1V*Y(9oFwuln8$t7?kYO+CYXQZo2VlLDvIiiPR*+03V9SwxX6(HHz@Ea{5mnb?q2rzC4p z%kz?yP1^WZf)mY<&Eau+bN;SudrS+5f8BXS0H5^3ztS!Jr0?@Np$+Yawa+kk^p<*@ zi4im(J$2a5V6J`YG;tsN5f0Cl*h(-4xD~VW#XP{H{+@n%!N)ecVco7$vq8` zO*GeF*Ar2i%uU?mhS_?-T)w=z|$b(3q=rL)34yk<;@|T}--8 z6hr!fmYj|9oVG{BW{l`a&N88>uc1H(X}3lABwp~`%jAG6nj@E#u-)T(2Y{5|7; zkUgr`2>mr_|MJI+Vc{h+oPeGOcvPTq4s=ngHlD0I4SZZ!R{h*O`eJY7{;Nj#gLHLo`c^=D+yhZiiWb!uJ+q$;oTu_t zmo!-@cwxKn=4WVg_r?Em_38=gny<(7)!X@0 zmslMATCZ*p7(Gzt85>cYx{#4!wx--2e8bqe)Hl&g|9XY3|#a=78*Ni?ILn|8s&LvP6Z z{lad-MbCf3!ou{;)(~ZH7<2DhC2PgHb!}XPs?mYvO-*cwD#-s!6Y=e(B zA+L1%%I2UB942|RGXRnkjMyucO~7~+^p^bVSj5P(G!<3OVQDk?b?3DVpv|6Ip1`J5 z)1wXWGU-$lHSIb+U{Ecb8R-}>rmg_V`@a>Ms-Y?9k@!qLducgp+B2QnKNHu+?T~pp zfPc{T>hl4&3XPSTeWH76Up{FLuAOt<7@;~jxti}vibTnZ5~(6Kg1o z-1Ul@g9;3f#Z`Y%uPH7sT;Dp|CX0jp{U4JTy(Rc5fuN#$c(^6JdW%Nab6bUoO0cy# zlrcRsbE;zeh(+&sBOLfzD}nFT1Sro92E5_I6jgK&kp9K4diVm#);bVUh20SkT&trx zeg}*$cEH(;`=m${gJR`@t5cXe$Uvf2lXW1S*2BN{88=4IGYT$7uaqybz->(t5fRKE zw{~|69G6rv93wawM%bO@p*owRew%fmZ8XSJ|M5*+@JkD8O)D_mVaQzJf?Umf%#~4R zJv}N6RaT_*>)pyZ0VdtbAINc^+S-SdE)%B`yXfEse*F~B-1wXG4eoHeehBCjy!X?* zn}fWz?%m3TE7(U^D zq%F5q;128(wj8?6kM-g)_o;!o=2Cn|qs{TG&Bk`FH$`+?!|Ku4>eC`k+N^E6lM0vl z1mD3D8!8NU1P~-;=~hKKS8vAJWK?s({nd3UNE^y|e81wcovCN!;t~P(BJBoroY#Sx zejPJ$al4hiz(ueIq{;dAbF!yj;7}c}`MQG8_5(`Y0vU*6a>M@UpgMWu- z$73(;>gI`W6<<(JM&+*1F%M7VoGYb-#LHHtcMpY?vp$HDGb=LUt7j7P(PbYmD(9ul z7kyN*s7mp1>l@Z8;=b8{|L<*|R*~E9&iwV_pSOmx-=4i5r|PP^8QIZ<_+`-A=WuWwN0j+sCyMU7BOm3}{D*$>z5EOhLeXo~N{UD2%4Qtqn##Y{J_ zI@Ac@SLnC#KF~sR!<~O+C8Z>w=$o!|t*WeK2i|u9Anef0(--yC07_O4Ag15j-!}&$ z3kGIp6(^@+V8-7ut~rCkDgwH_!Zkq*8)%9-Jog+3g=v)KkS~|6A!$hASLC0S32S*BI@4Lmqa(XKfrDNmFsg}qhvsJvRT<- zQ#y%v77vf%!2>0zq!8P@Fgck3)fyy_VXS&NK&Y|+l!@lMQO;wo;-^lXisEz5pOfM}h z9ku$*TDc13KYG9}^3%C^m z@o854(Xt6Xk>K!NS$39Uqs6r=SMH=2b@uo5sX!{P2Z$-RKI2|=pw|;8zkYoiZmK>4 zV(Pc2adBx7cf{Uy0ukpnlsQ-g9`Qaf#o1>skVqgwV?)Ek)0&$lnKkmi?nFB5kU7oH zeHmEoWz4PYMlb)IO&nnpc_w_!qp(oFu1VM5tW;&!2=djlM_EWhlj#-mP|t45Aq$H> zeon7XWV^<`GRCuSxggZ5tdeW6x+*{augj|-n~HBl?Ni^s-_GnqO}dJ_CU~Ejnd!7L zlAfGQjULPs0ruCG{un%;1SNZ2IyN>%SVt6b&fmYDha!Eb;~RhfeG|dJ#H0+2^ytmC zwP(a6B)Sf7FASsgaH+H~PwZj?KBK>-N z0jS`h(~cVAc>Cr}9Ha+lwk|+B>QIG()Qq}Z4)?dNp zY9R#Dx@uc>W_H#bIO1S=cL7!7PCyy&fqiX#y(lcs(RQL=qw9b-+=+{M?2PwRx#O1C zo+#$?ur^K?nVkQCa5PR|S-tc$KR-1>OE$Jp>V=w|%b9)CR=L~);nEtpeJ&4(bd+DfveFw0UZVg1|5u? z%wXp%EiLEjoD>WVlR@_w)YR05g-8#0p5i!=$rTu6^NZSZ?lkb-b~1>gVWuI7w8$ig|kO zwY>DGw741Zs0QU%ot1DRb+>?h%mOI;Nd*RAo?*pOd2YQ2a^GQ!f$?!YusUu)Xj=q1 zLn9-j*j*@wpkQm8CmY8P9MxW$K$-l+SEHw=M@3C74XEUlG0Pp8B{7R=Ys(>)*HIF< z3zUqEQsO*!G?;bD3pf2cUtCyq2kt&_Dt-AzEg_MS=`zur=|J`~dLP3Vh90d@^9F|h zLZCcG50`Z8=r}hNgy--p^(Uz4>nDQ0y5b3}G$h(wO2$NjZF^uJD~34>nGEET7El?+>H044Rw>)ri&$dQ3H#I3ZI1~cUUMkcF z0f*1X%c}{|MHdk019?^o7)+f4^$%F&S#2OyWp%*v8J*j){ej*bRqHdY%O8)o%S z!a$zc4Vxwh2!9#Dg&_+;jWEK5g!Eu%f~xVZIXpU=SzXPA7@0v(P!~c0axQD_=*{wq zig@R71qB7o(q{=!W5983;vrZsi?xYbw4e`=`-c^ueX;DzW@IH zdr}G;U|yD#k?DJXN1PqF%8U#R9Ts(=m`%I8wN{C>)dMvNiEpmEB*1&l>+p#PqV$l8 ziV8nJzmT{%mVzPRMdAXw;>tFR%W*#1-<~rfARw@`*Oim&@XzT03M%Jcv6F(rtp!Wc zHVD8E6E${M$H&t-Zg7}~#JPMw57h%qfe%vi(~}oaVvG^d{O#MjE>mSIt89IJeUyh6 zdJhPQfL5Q{zdjLKnUSBb2$l!tQcYPoB)LC66#PNgxA%9f2I?Cc%t6xrR*xJeRBDSC zI=Q}T0x@mH&uGKL)3YL`itonuCe=?p#PJ+^=o4Ce{pT-RT5^`FnYWyH&N%05mXet+# z)CLkVZGx!EW#d5*Xf@PL!HvfeOSUm>Yh^h%O`A2s?#cOX>Jb#Yk3Elvs z;!xJ;tymH!-1+qBUI5vH)bL;^Zup^Xc;FLJw#&tu^a_EC`x^qkOfOE=8~tD5-2QzZ zO}>9L9M*3~(Zv^t2G?&p3Pde!44%nu5xR@mFT7bJchz4~v9&iLgJ1bW<=av79P7>; zp~@us7Mu6}76W{pwfEt@7_Rg~FK~xoVtRmSgCV#n8PvfXjVh8|&>dFjf5B;^SI1lU zU4Y*LblMGwvTg6vpP=6+6I|2QQkO&G4E zve$U8=thRcQwX`!Ff4%FuSFX(=DaFrUI+ zPxC(3KIz zX{|Gv?QyC)l?5LiiYrWQMLPUMX%_rS&kV1pemSHJGLh3w@FK5q$RS|K)(T%e=+RW6 zSl~OG{i|v4Z~LP>x}U!sMfjt}U+W?hJv?X-p)vvH?2&HldLcpaNL(KpM1`cE@^JS^ z()u#9L+?$(GS_nIrf$pboHW(U^o+5l^gr@q{Qt~2smM|dDw=tgv*XQ%HJZu1NK>V^ zE_*(uU{q9w#J@O>cW4U4?Y&0$MG9&o9a1Y*`A#f~n3%0{eCY-;N{VGB{lff~oJipNZ72P$ea>dItiC;vs zA|q}jBHe&$*};zCkGQ%2O+jD14AL;au+UZZt<7`LCkhFo|#Z!)Zp1Bnt zsa?qW$VPQ&5a;yv9@p~)aq|#kr3tSlVJCEXNnar|i%pAlOs99$R5>C%hHT;z_<`7BU z)H|4nZW&khv`qG${L=8NTXb@l%X$T#iA`hBN9~Pt0LhVAv z;UH`#wdJaFy#zwhzKzW41RZUjVg2lXgZO;x;h*MZu3P4r`j?fpZR#JLwrr#|UoIf_ z{5LJULHscSna?OUY^5!J?-~Jlm0|Ih25L#xogdd$Nlp0#6|{^>_DmXRP=OCNf>1w&>4fZLt~LqX0_EGEK%hO3abXZ?X@7+) zAo3a0pT3T?g92N*U*G2*#~~xkuEFEhRWd8t>$#moJUPXP*x#DA?c*#N9W7*iw!PE& zRon)t7Ewc;Zo2do?QWZ$rHU_x9l_6^|2HL>EkpVW!DV2eos$$41ig^UT1@8e*copj zkeD!Ns%gsU`mh4Ok0;0aq^sTLb_g}GWo!53fRO$F#t^5`*3s!#|2sYBU|p%BRu?0$ z{+;}?+&nbaOdf2C$LPqgKuv*h1MPwy&$&KRHZv>Toa*S1+oV3VECzgjdL9vX1$gze zs1EcZuWLC>$Ffe(E~QUzA=(4`Ga=p$iH=@czJ?v+&$VY>>t$C^|Z|@$1smp#cM5&xcVO(Wt-4titms=w&%t$xp*JmX91Oy;ILrwzwaA-O^JEmbFbE^82v7>o=B$-nY9ar z6mtWrLmZ9H!HR}IGNR{w8-oTNEyeLEB0t#f>azOyKUB?BiS*tJlC|PlURK9Q`1#`` z`um7s|Ncca)?wR%^t@5~;L{?OjjkM_PHmT#mU1uMdfLpy+V^5Zk+`>yu76-W$DUiV zcls8&XGan0B<-S6k$TbG5OCb8bSe4r@In4`V@mhCCoz+BjqrNYj60HNJ=h)Dt-+jRmX4Sv$_VX9$&D4;7*IoOA`a~rA zw;D&r{otZL^SlUjl+mNdA^Jy}6>q$pHcFd2V)B-L1akh^m*Vi~3Pn<94keBAu7t{z?c->`~Z9JV#_6IJr5vuqU4 zkR28XiuU)>@n!~F_};juD8&-t3CFY^L+DGJy8S&D;Y!<}4C z`q%eyoG-p|KafD$QOGkfAPVpZ!%8xvsTX_<%FH>VDcFLNQrhD)LR`ZUNG9fN3b6}9 zLi7LWrp_OC6%pN~lf#nzDl#DTwX9C?jm~o7qx5~vz7qCffnX2`i%}Ap5k$we<}&5~W?qkUBZ&nHVYGyk|)wsCBH@;_@KRt#%@ zM+WK>x0z!ZNo3CB=TXe5@)|Sl%d^_(kPV=83YVpQIOAIFzwuWYb!OR;A8f8RKXG{9 zXWkc{>yapu>$&(}k$(b;n3CvR>hy$^YNff0LCz(GpK2CJi|EFqpcDPoQkodry#?`~sQ0+-#>oQ7G#1F+4oytqqz*6ZY~luV`)p~j_&&%j#!aTx6_MUL0^jqQV_!`g|Ni3o|psUgBo|5V-ZbjVtol3^gX+`l@~ z{?oWKX=w7d^G)Sj@1wy^(jyp#Tpw$(RPA7~0K=4?A~K<|jQxMwKX3J?{d=VcgMoY% z#78s_pB7Jvq*0U*d;VFYM#7!vAx!(>~BP?xa1e-LtU7avr~c!i3L-asTE;Ii2u` z+lUM^>+UFnGNRbr5(tzq3s}Lq16ez`zZCXTuAp%5q$&gT(vCLmkK-SA`ZKzF?s%v` zi|7nq&(Y2aFj#tVPRpuW$dEYx$6nSe$mHEX!_18Iu1Wiy;(sz5O;N!mO?>>qNM-kY z?P#xUKUqueiT`Qa#PD0}F!NBA6byF`I3^UBzRj(9$us=lraNh?N%PVnCW_=L_sD%&r!G0BDtc~n`aceS(Q9}jWCH!%NbFO+q+MZajLd8GY2lcMKDHAwdHfQH+Fz0v;pFa`Q-`Dk8<_G)O1M*UGPNaO1P+q$x|G+%Q8&) zlVA@0pg@{dFvvf$@srix6{9x1Q zIHSdMedk8N@j}stKg8$K7391QA0gcVTUDI>04Tr4jg40D=>81up#YrtlVoZTrtkh)HSD|2~ag>}Ry+3wCySewX>+ z#fA_nQzX|aBt1_wlqYR#FIQKgxw3^Ff{vN*#tzVoYxnj4@q#2UAI$C6_20`4=d%Jf z);o2x^TD8#wqt6d)IcCXK<9v`#O`)Cth}o$=%m%VsS?PH=;$rg_5|JN;UNM%AG|io zG_sD-giZw?YQ(H@Fj38VBS;)z%mbPf_ZnaYVnUP62m@+!|l2El~&KM;!`8ARO zt+|&|e6k|bN9=^w_!B&76Z{TP2yoycLpFcU_UXFyOZSnuycPiShQ z$M!|o8|%DrKbOUdW=5A66IM|NTnH+rSfv**3YU)MxWoDI&Z9aSMC42gO4%h}ZElru z0q#L#5B+#Gh(0*!?*1(DA^q$fKe>7du+d;}U*veNTOEY?HHQ0i&AHkmF3kAwj;W z;@pKXT{*c$CY40>dwUkLiW$`D8R-f(H`*8b_72EF<3G}en>N@B^}pLw0^JIs<_J+; z`Yc6-8MM^k>knucMU$`{`e5)|(e4SKalu0%Gsr8(G?bAIyta&Ph$tb$(l1q>)Cejn zp^W9`mC;7w?~4nmy?aWIGw~~mU-}FT?-d_2q~%N$?o@qJjUU~;NNgp*^k4B5{}b=_ z8Z@-sp{n2`bpT-yvPDg+c6DVYd!DAL&a^k^bxmZF+sq9P^gR1)HG}d2M|;j3o-?;aWhKHUGZVXD(HI?h zR&gFq)65)N6hviSkBRxyv#qm#2Jj!3SHppFTpD}PXx(Gd`5skO7CsxK zLny*IFzF6D70@e@CIUg{^=CQRuwr^_yOw#2@* zQwqDBo^zJ~d^d81*k7`HdL9n`l7^CTXX*vo`zY{y9y$lf28U;6QZIO4G)n(i-A}Kv ze9GL=t4Lib;6}V>*m++{_oNa$W{#P&i#@9FK=>ku%~~Qf3b)!+tRI%Oc_e{t2;}+xygf1 zacMP6>rdpTBaFo#ypvz;&z^5ts;B|0D&yxDOx;(^z928UTM@Do@~~SVsj;QbG=#d! zi(84-JTo>dO=$DYU%fOX+BumgZb5fh4_+juYU?xNb8xUPK=Uw%9mfSfTrsCi#H;+b zVb`6H+i1k0(W|VJ8&)nB>h1a{lt&b`GbrS^=FQox&&IdcjvYN=ajfRxoZm5LCdsx* z?;}$ZDQVm*hX|}VhPP`bA_2rj`B6;xJ(8p^ONoGpZC6K!o$%aJW0Hm3w!PbKT@wOjFX3Gv6+@(aL3a?G*;G%FY9$aIhnv) zyUm?<-X0%MBk%NS>*V%m&|*&YJdZzTHfvQ#sb==Qah~GF6rJaAS$i@Z4>?OaIGXA?ucVbc`0b;{#d5Hj_GQ{uzHTRNMYWHm&%as+ z7~H$Y&T;qQ>J6TcsM)&|bgccQYo_k?%c^niVsf3`9fGPxN=f}UTDnUAl?cEOnE#>g z;HRhk@o-j7W$`dQLqH=3HXtFplPnrhGHj)#-|l>FbjmS#mpkHF1l9g8 zHQ8!SD@o)B1*^PhO2NZ55e(izXs=0btM(k#H~lM0I^Yr9vN~@%Lw#-$(UOUC$KyE9z(?f z1}-kOn!Pp~00L!Wpn6g4X2_h%4M_wNl5%2VuK_xRNfhcpwbt134nPfI^2Q8wbn<`! zz<}?d)?qqix-!*r`xkoBFt8{cry(O`GKWRKDU?*&2TW%c)K+Z<97D;dQ#9yQDsUf~ zbtfaD*o-7A>~)u`p)gsI+qO9e2ZtGCz9AX8xJIU|qGE=55i9Ee)VG_NvfrsHA9S(k z&+3AzTH8>rY%$h(OhH8@6#jSK%J2*ETJB{ix6~|=;ia1hsL4Y;vx z!m8bU{Z(sO*>+d5iVeyYRFM?m^^_oCPQs%75rfKs^y~m3*9eql=ZCbq9Dtg7pyU$= zRPAev6Q~$<3`^c#8n6IN9zGFKKQQOt*3%nzdhpwI9-RfwB#iD~6TW?!C@4OwbkwyvzYp+1zZ7Hs%8yTV$K@5o90xX~MPj zuVbo-gYIB5Y#DQL?y^XBDAaufls;;Z6yWj3yowUEd?=)AnR&8N!j%kCAW1mWtfO~POTzn4bpi}%q z9i3Q!bbWyQHo%V_Lut<9^do+xC1?P)2#VCUg;l zf!OL*k}Ilc2hgErk$ETvi3+1geD$hB#P2lYJnQ@~)YE62%PaQ92PTNobjkpZZ$c7z z)u$LfX7=xVKMmg2&iVchyMEAHLjPXp%gC+xDRIa0^|#0FC)T6!oI~l6c=_E`u54V< z)IQTIb5;i<=EcqCoGto!-`a+iz?x&sNRM8eGNf2^3@RU=W3IQ$Kq+#m(_Ghx7qj&ijhl|O)j$#bspG z@I7y6PhFkJ1LM|r)EI0fpar|3UTNRZz1v3XBouKOVR&WtW7!d-r5%WgajON@=o==9K^j7l*1V05lOO5BHxj zUy95pLW8;J0en>I^0Fm`fLrg5tJW`ok#@v=Iy#BXxsCy-HkL4cwBqar;B3bh=8_oa zHbBfV0$hn%t5{kpjHwF>EOpNE0@#a@l~oRa6`J{mi17U1%h{6x8+G4|%hBD~{Yz0s zDMfP0T@_ZQlELLI@1b)J4ZVpFJVsrnu<;EMD1be(QCRq*vQBm}F)`hp)qjm?@AC2W zKQ}NpRji*p%`w0(p}MdYzLy`t3?DZ2;p&_fc$&r@xcV%-EE?`tDkndu_)g z2K81H`$>1AMr}R!?wvWv z+#?j9K1~2Lm1R5__smb9))Ec0OIc!d((Ix3r3F+1bc52E)Cdgr?QMe%NpL)$lb2U@ zVp39#t*l9-JwTU;FYIjTmfLrXws}r^;6A13&(=!wrSej@sW~bJ6iEA0gnN$t_)_uM zXk0lUX&eE&vgBNI5DP2R0p?G4s}j&O@G>cL_t-Y$0x-fHP{S}KIe8ufS(KK3t7G@u z)3!HoZv6}w2<}Y^Dj<`;qx?zz9P4NDAd%XZ7P#xe@4j}A-0|c`Q!z_g?u`))6jWB0 zV=V;EbTWr-C;3)*-1eC!ro0I|kF$408SZgN)`}Pqv)$HBNV|shAJ}>*Euaa0i}`!<d@a{2KNRv zSAFN84DZ5Vp27GJeooGvN_{|4DFW!kNzjrM&Z-vYyOQj{`yN4PfU3I7&#w*mT&L@~ ztUro#>HuDZ>3Mx)qh2BRj>TN{fK^q6fa5|+IK#br@>CvcFYpM-duLtYD}efZ*So_D z@D|g0KVrasD1mF$b(uU{G57meIp)>xvqZcIiJE>E(|}aGK6aID)2zR2^azP8(W<3s zTOo^DQSLDvl$Q^23r&BR{@gYREsv$5W~<*@eV`i}Ezfok)-Qb|*1&k1S>t}sYx+q( z19q2{$24hjip{%ercidkv^RFVDW>4J^v^=GaA z2;l%7BjZx#Dl>^c_#4NKX@me&rEvp{Jzr~7TwD&6TN8k9qN?0WIITxMf*(#vOIrdQ zDyrBjnt_pV8&E;!01=GU`-e!|WgHxef|*%*7_(MtYpXN{{@g}!NKpwM4`T+Q$dh*u zU>6H*#s!C+N69*L%QpZ!tNP~68;m>K0)U?dpgQL~2Yy1LErQ;{HI@>uB0!DK|QSf)T%ld#ttJpHKK;+l&2lP42 zy^|aLvVlpr@6vtc%MzdBh?GI8sZtm8Wjtf0qB-~4!9#&nf`~xXR-_7Wa4O^7iC^|L zWdZ`1f^~lEC;hwb!!bQ;Cb@Tfl`xJ^;Y~p!<8g+9UnHkA>~ySRAB%{6WrS$q)SF8i z0q4UY`+Pi}@7wp0gph(m8*HvpuF)}Ef(VU?$pU=^n7`?Gwdcn6wu+)65)fs>mF)m! zjEs!LzhH4xq4@tHasMwMam!o#-m$g-$ZKwG?S*hrpKrjBZQ%`VocyClFN)fH4)tucN!K^Ukz!~z6_kL0O>stBri;}D+1&d_6m{yUR>5A++`IN7690 zg@x=#a9^blY@s`2YI0zKE>xkzH6N>f?P%IJK30bb>mELQ2yHJ%7eKu;h_;#x*_uq* zd8u>nY!$`-&f{FWH)iMP^veM}(Yqvgzj*3<`AfI5kBnXnz=Kwu}9ktyrly z96Rn742eIfMwxCOEkOl1e^w(}Q8SnSgv1?Q`PbKm3Vr}aIgvPi_RN`iu;I$GvVmYd z0o94wO#s#y6AV_x6i#K~TK#IN-dG(5mkSYUKNNT0{ℑdyCf%dkC71-FZJhzxgI4 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 z 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 literal 0 HcmV?d00001 From a6d20a6660b8c17bf66822c05bb7bc66490d03fe Mon Sep 17 00:00:00 2001 From: Sam Kleinman Date: Wed, 11 Aug 2021 11:37:05 -0400 Subject: [PATCH 10/39] pubsub: unsubscribe locking handling (#6816) --- libs/pubsub/pubsub.go | 46 +++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/libs/pubsub/pubsub.go b/libs/pubsub/pubsub.go index 54a030fe8..7548470b5 100644 --- a/libs/pubsub/pubsub.go +++ b/libs/pubsub/pubsub.go @@ -231,34 +231,45 @@ func (s *Server) Unsubscribe(ctx context.Context, args UnsubscribeArgs) error { return err } var qs string + if args.Query != nil { qs = args.Query.String() } - s.mtx.RLock() - clientSubscriptions, ok := s.subscriptions[args.Subscriber] - if args.ID != "" { - qs, ok = clientSubscriptions[args.ID] + clientSubscriptions, err := func() (map[string]string, error) { + s.mtx.RLock() + defer s.mtx.RUnlock() - if ok && args.Query == nil { - var err error - args.Query, err = query.New(qs) - if err != nil { - return err + clientSubscriptions, ok := s.subscriptions[args.Subscriber] + if args.ID != "" { + qs, ok = clientSubscriptions[args.ID] + + if ok && args.Query == nil { + var err error + args.Query, err = query.New(qs) + if err != nil { + return nil, err + } } + } else if qs != "" { + args.ID, ok = clientSubscriptions[qs] } - } else if qs != "" { - args.ID, ok = clientSubscriptions[qs] - } - s.mtx.RUnlock() - if !ok { - return ErrSubscriptionNotFound + if !ok { + return nil, ErrSubscriptionNotFound + } + + return clientSubscriptions, nil + }() + + if err != nil { + return err } select { case s.cmds <- cmd{op: unsub, clientID: args.Subscriber, query: args.Query, subscription: &Subscription{id: args.ID}}: s.mtx.Lock() + defer s.mtx.Unlock() delete(clientSubscriptions, args.ID) delete(clientSubscriptions, qs) @@ -266,7 +277,6 @@ func (s *Server) Unsubscribe(ctx context.Context, args UnsubscribeArgs) error { if len(clientSubscriptions) == 0 { delete(s.subscriptions, args.Subscriber) } - s.mtx.Unlock() return nil case <-ctx.Done(): return ctx.Err() @@ -288,8 +298,10 @@ func (s *Server) UnsubscribeAll(ctx context.Context, clientID string) error { select { case s.cmds <- cmd{op: unsub, clientID: clientID}: s.mtx.Lock() + defer s.mtx.Unlock() + delete(s.subscriptions, clientID) - s.mtx.Unlock() + return nil case <-ctx.Done(): return ctx.Err() From cbfc04df6d48f6927f4eeec8727a1a45af98f353 Mon Sep 17 00:00:00 2001 From: Sam Kleinman Date: Wed, 11 Aug 2021 13:20:01 -0400 Subject: [PATCH 11/39] rpc: avoid panics in unsafe rpc calls with new p2p stack (#6817) --- rpc/core/net.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/rpc/core/net.go b/rpc/core/net.go index edcf8fffa..8f3e89d77 100644 --- a/rpc/core/net.go +++ b/rpc/core/net.go @@ -36,6 +36,10 @@ func (env *Environment) NetInfo(ctx *rpctypes.Context) (*ctypes.ResultNetInfo, e // UnsafeDialSeeds dials the given seeds (comma-separated id@IP:PORT). func (env *Environment) UnsafeDialSeeds(ctx *rpctypes.Context, seeds []string) (*ctypes.ResultDialSeeds, error) { + if env.P2PPeers == nil { + return nil, errors.New("peer management system does not support this operation") + } + if len(seeds) == 0 { return &ctypes.ResultDialSeeds{}, fmt.Errorf("%w: no seeds provided", ctypes.ErrInvalidRequest) } @@ -53,6 +57,10 @@ func (env *Environment) UnsafeDialPeers( peers []string, persistent, unconditional, private bool) (*ctypes.ResultDialPeers, error) { + if env.P2PPeers == nil { + return nil, errors.New("peer management system does not support this operation") + } + if len(peers) == 0 { return &ctypes.ResultDialPeers{}, fmt.Errorf("%w: no peers provided", ctypes.ErrInvalidRequest) } From d56a44b88476d4806478be66f83bbdf34d49dd4b Mon Sep 17 00:00:00 2001 From: Sam Kleinman Date: Thu, 12 Aug 2021 09:38:17 -0400 Subject: [PATCH 12/39] node: minimize hardcoded service initialization (#6798) * node: minimize hardcoded service initialization * hacking * nil safety * reduce space * remove genesis state store * fix lint * fix pex * unwind some odering effects * fix tests * remove unused experiment --- node/node.go | 270 ++++++++++++++------------------------ node/node_test.go | 82 +++++++----- node/setup.go | 2 +- rpc/client/local/local.go | 9 +- 4 files changed, 156 insertions(+), 207 deletions(-) diff --git a/node/node.go b/node/node.go index ced8af729..751c78889 100644 --- a/node/node.go +++ b/node/node.go @@ -18,7 +18,6 @@ import ( cfg "github.com/tendermint/tendermint/config" "github.com/tendermint/tendermint/crypto" cs "github.com/tendermint/tendermint/internal/consensus" - "github.com/tendermint/tendermint/internal/evidence" "github.com/tendermint/tendermint/internal/mempool" "github.com/tendermint/tendermint/internal/p2p" "github.com/tendermint/tendermint/internal/p2p/pex" @@ -37,7 +36,6 @@ import ( grpccore "github.com/tendermint/tendermint/rpc/grpc" rpcserver "github.com/tendermint/tendermint/rpc/jsonrpc/server" sm "github.com/tendermint/tendermint/state" - "github.com/tendermint/tendermint/state/indexer" "github.com/tendermint/tendermint/store" "github.com/tendermint/tendermint/types" ) @@ -71,16 +69,12 @@ type nodeImpl struct { mempool mempool.Mempool stateSync bool // whether the node should state sync on startup stateSyncReactor *statesync.Reactor // for hosting and restoring state sync snapshots - consensusState *cs.State // latest consensus state consensusReactor *cs.Reactor // for participating in the consensus - pexReactor *pex.Reactor // for exchanging peer addresses - pexReactorV2 *pex.ReactorV2 // for exchanging peer addresses - evidenceReactor *evidence.Reactor - evidencePool *evidence.Pool // tracking evidence - proxyApp proxy.AppConns // connection to the application + pexReactor service.Service // for exchanging peer addresses + evidenceReactor service.Service rpcListeners []net.Listener // rpc servers - eventSinks []indexer.EventSink - indexerService *indexer.Service + indexerService service.Service + rpcEnv *rpccore.Environment prometheusSrv *http.Server } @@ -371,46 +365,43 @@ func makeNode(config *cfg.Config, // Note we currently use the addrBook regardless at least for AddOurAddress var ( - pexReactor *pex.Reactor - pexReactorV2 *pex.ReactorV2 - sw *p2p.Switch - addrBook pex.AddrBook + pexReactor service.Service + sw *p2p.Switch + addrBook pex.AddrBook ) pexCh := pex.ChannelDescriptor() transport.AddChannelDescriptors([]*p2p.ChannelDescriptor{&pexCh}) - if config.P2P.PexReactor { - if config.P2P.DisableLegacy { - addrBook = nil - pexReactorV2, err = createPEXReactorV2(config, logger, peerManager, router) - if err != nil { - return nil, err - } - } else { - // setup Transport and Switch - sw = createSwitch( - config, transport, p2pMetrics, mpReactorShim, bcReactorForSwitch, - stateSyncReactorShim, csReactorShim, evReactorShim, proxyApp, nodeInfo, nodeKey, p2pLogger, - ) - - err = sw.AddPersistentPeers(strings.SplitAndTrimEmpty(config.P2P.PersistentPeers, ",", " ")) - if err != nil { - return nil, fmt.Errorf("could not add peers from persistent-peers field: %w", err) - } - - err = sw.AddUnconditionalPeerIDs(strings.SplitAndTrimEmpty(config.P2P.UnconditionalPeerIDs, ",", " ")) - if err != nil { - return nil, fmt.Errorf("could not add peer ids from unconditional_peer_ids field: %w", err) - } - - addrBook, err = createAddrBookAndSetOnSwitch(config, sw, p2pLogger, nodeKey) - if err != nil { - return nil, fmt.Errorf("could not create addrbook: %w", err) - } - - pexReactor = createPEXReactorAndAddToSwitch(addrBook, config, sw, logger) + if config.P2P.DisableLegacy { + addrBook = nil + pexReactor, err = createPEXReactorV2(config, logger, peerManager, router) + if err != nil { + return nil, err } + } else { + // setup Transport and Switch + sw = createSwitch( + config, transport, p2pMetrics, mpReactorShim, bcReactorForSwitch, + stateSyncReactorShim, csReactorShim, evReactorShim, proxyApp, nodeInfo, nodeKey, p2pLogger, + ) + + err = sw.AddPersistentPeers(strings.SplitAndTrimEmpty(config.P2P.PersistentPeers, ",", " ")) + if err != nil { + return nil, fmt.Errorf("could not add peers from persistent-peers field: %w", err) + } + + err = sw.AddUnconditionalPeerIDs(strings.SplitAndTrimEmpty(config.P2P.UnconditionalPeerIDs, ",", " ")) + if err != nil { + return nil, fmt.Errorf("could not add peer ids from unconditional_peer_ids field: %w", err) + } + + addrBook, err = createAddrBookAndSetOnSwitch(config, sw, p2pLogger, nodeKey) + if err != nil { + return nil, fmt.Errorf("could not create addrbook: %w", err) + } + + pexReactor = createPEXReactorAndAddToSwitch(addrBook, config, sw, logger) } if config.RPC.PprofListenAddress != "" { @@ -438,19 +429,37 @@ func makeNode(config *cfg.Config, bcReactor: bcReactor, mempoolReactor: mpReactor, mempool: mp, - consensusState: csState, consensusReactor: csReactor, stateSyncReactor: stateSyncReactor, stateSync: stateSync, pexReactor: pexReactor, - pexReactorV2: pexReactorV2, evidenceReactor: evReactor, - evidencePool: evPool, - proxyApp: proxyApp, indexerService: indexerService, eventBus: eventBus, - eventSinks: eventSinks, + + rpcEnv: &rpccore.Environment{ + ProxyAppQuery: proxyApp.Query(), + ProxyAppMempool: proxyApp.Mempool(), + + StateStore: stateStore, + BlockStore: blockStore, + EvidencePool: evPool, + ConsensusState: csState, + P2PPeers: sw, + BlockSyncReactor: bcReactor.(cs.BlockSyncReactor), + + GenDoc: genDoc, + EventSinks: eventSinks, + ConsensusReactor: csReactor, + EventBus: eventBus, + Mempool: mp, + Logger: logger.With("module", "rpc"), + Config: *config.RPC, + }, } + + node.rpcEnv.P2PTransport = node + node.BaseService = *service.NewBaseService(logger, "Node", node) return node, nil @@ -483,25 +492,6 @@ func makeSeedNode(config *cfg.Config, p2pMetrics := p2p.PrometheusMetrics(config.Instrumentation.Namespace, "chain_id", genDoc.ChainID) p2pLogger := logger.With("module", "p2p") transport := createTransport(p2pLogger, config) - sw := createSwitch( - config, transport, p2pMetrics, nil, nil, - nil, nil, nil, nil, nodeInfo, nodeKey, p2pLogger, - ) - - err = sw.AddPersistentPeers(strings.SplitAndTrimEmpty(config.P2P.PersistentPeers, ",", " ")) - if err != nil { - return nil, fmt.Errorf("could not add peers from persistent_peers field: %w", err) - } - - err = sw.AddUnconditionalPeerIDs(strings.SplitAndTrimEmpty(config.P2P.UnconditionalPeerIDs, ",", " ")) - if err != nil { - return nil, fmt.Errorf("could not add peer ids from unconditional_peer_ids field: %w", err) - } - - addrBook, err := createAddrBookAndSetOnSwitch(config, sw, p2pLogger, nodeKey) - if err != nil { - return nil, fmt.Errorf("could not create addrbook: %w", err) - } peerManager, err := createPeerManager(config, dbProvider, p2pLogger, nodeKey.ID) if err != nil { @@ -515,8 +505,9 @@ func makeSeedNode(config *cfg.Config, } var ( - pexReactor *pex.Reactor - pexReactorV2 *pex.ReactorV2 + pexReactor service.Service + sw *p2p.Switch + addrBook pex.AddrBook ) // add the pex reactor @@ -526,11 +517,31 @@ func makeSeedNode(config *cfg.Config, pexCh := pex.ChannelDescriptor() transport.AddChannelDescriptors([]*p2p.ChannelDescriptor{&pexCh}) if config.P2P.DisableLegacy { - pexReactorV2, err = createPEXReactorV2(config, logger, peerManager, router) + pexReactor, err = createPEXReactorV2(config, logger, peerManager, router) if err != nil { return nil, err } } else { + sw = createSwitch( + config, transport, p2pMetrics, nil, nil, + nil, nil, nil, nil, nodeInfo, nodeKey, p2pLogger, + ) + + err = sw.AddPersistentPeers(strings.SplitAndTrimEmpty(config.P2P.PersistentPeers, ",", " ")) + if err != nil { + return nil, fmt.Errorf("could not add peers from persistent_peers field: %w", err) + } + + err = sw.AddUnconditionalPeerIDs(strings.SplitAndTrimEmpty(config.P2P.UnconditionalPeerIDs, ",", " ")) + if err != nil { + return nil, fmt.Errorf("could not add peer ids from unconditional_peer_ids field: %w", err) + } + + addrBook, err = createAddrBookAndSetOnSwitch(config, sw, p2pLogger, nodeKey) + if err != nil { + return nil, fmt.Errorf("could not create addrbook: %w", err) + } + pexReactor = createPEXReactorAndAddToSwitch(addrBook, config, sw, logger) } @@ -553,8 +564,7 @@ func makeSeedNode(config *cfg.Config, peerManager: peerManager, router: router, - pexReactor: pexReactor, - pexReactorV2: pexReactorV2, + pexReactor: pexReactor, } node.BaseService = *service.NewBaseService(logger, "SeedNode", node) @@ -595,23 +605,22 @@ func (n *nodeImpl) OnStart() error { } n.isListening = true - n.Logger.Info("p2p service", "legacy_enabled", !n.config.P2P.DisableLegacy) if n.config.P2P.DisableLegacy { - err = n.router.Start() + if err = n.router.Start(); err != nil { + return err + } } else { // Add private IDs to addrbook to block those peers being added n.addrBook.AddPrivateIDs(strings.SplitAndTrimEmpty(n.config.P2P.PrivatePeerIDs, ",", " ")) - err = n.sw.Start() - } - if err != nil { - return err + if err = n.sw.Start(); err != nil { + return err + } } if n.config.Mode != cfg.ModeSeed { if n.config.BlockSync.Version == cfg.BlockSyncV0 { - // Start the real blockchain reactor separately since the switch uses the shim. if err := n.bcReactor.Start(); err != nil { return err } @@ -638,8 +647,8 @@ func (n *nodeImpl) OnStart() error { } } - if n.config.P2P.DisableLegacy && n.pexReactorV2 != nil { - if err := n.pexReactorV2.Start(); err != nil { + if n.config.P2P.DisableLegacy { + if err := n.pexReactor.Start(); err != nil { return err } } else { @@ -648,7 +657,6 @@ func (n *nodeImpl) OnStart() error { if err != nil { return fmt.Errorf("could not dial peers from persistent-peers field: %w", err) } - } // Run state sync @@ -723,10 +731,8 @@ func (n *nodeImpl) OnStop() { } } - if n.config.P2P.DisableLegacy && n.pexReactorV2 != nil { - if err := n.pexReactorV2.Stop(); err != nil { - n.Logger.Error("failed to stop the PEX v2 reactor", "err", err) - } + if err := n.pexReactor.Stop(); err != nil { + n.Logger.Error("failed to stop the PEX v2 reactor", "err", err) } if n.config.P2P.DisableLegacy { @@ -767,55 +773,23 @@ func (n *nodeImpl) OnStop() { } } -// ConfigureRPC makes sure RPC has all the objects it needs to operate. -func (n *nodeImpl) ConfigureRPC() (*rpccore.Environment, error) { - rpcCoreEnv := rpccore.Environment{ - ProxyAppQuery: n.proxyApp.Query(), - ProxyAppMempool: n.proxyApp.Mempool(), - - StateStore: n.stateStore, - BlockStore: n.blockStore, - EvidencePool: n.evidencePool, - ConsensusState: n.consensusState, - P2PPeers: n.sw, - P2PTransport: n, - - GenDoc: n.genesisDoc, - EventSinks: n.eventSinks, - ConsensusReactor: n.consensusReactor, - EventBus: n.eventBus, - Mempool: n.mempool, - - Logger: n.Logger.With("module", "rpc"), - - Config: *n.config.RPC, - BlockSyncReactor: n.bcReactor.(cs.BlockSyncReactor), - } +func (n *nodeImpl) startRPC() ([]net.Listener, error) { if n.config.Mode == cfg.ModeValidator { pubKey, err := n.privValidator.GetPubKey(context.TODO()) if pubKey == nil || err != nil { return nil, fmt.Errorf("can't get pubkey: %w", err) } - rpcCoreEnv.PubKey = pubKey + n.rpcEnv.PubKey = pubKey } - if err := rpcCoreEnv.InitGenesisChunks(); err != nil { - return nil, err - } - - return &rpcCoreEnv, nil -} - -func (n *nodeImpl) startRPC() ([]net.Listener, error) { - env, err := n.ConfigureRPC() - if err != nil { + if err := n.rpcEnv.InitGenesisChunks(); err != nil { return nil, err } listenAddrs := strings.SplitAndTrimEmpty(n.config.RPC.ListenAddress, ",", " ") - routes := env.GetRoutes() + routes := n.rpcEnv.GetRoutes() if n.config.RPC.Unsafe { - env.AddUnsafe(routes) + n.rpcEnv.AddUnsafe(routes) } config := rpcserver.DefaultConfig() @@ -912,7 +886,7 @@ func (n *nodeImpl) startRPC() ([]net.Listener, error) { return nil, err } go func() { - if err := grpccore.StartGRPCServer(env, listener); err != nil { + if err := grpccore.StartGRPCServer(n.rpcEnv, listener); err != nil { n.Logger.Error("Error starting gRPC server", "err", err) } }() @@ -945,46 +919,16 @@ func (n *nodeImpl) startPrometheusServer(addr string) *http.Server { return srv } -// Switch returns the Node's Switch. -func (n *nodeImpl) Switch() *p2p.Switch { - return n.sw -} - -// BlockStore returns the Node's BlockStore. -func (n *nodeImpl) BlockStore() *store.BlockStore { - return n.blockStore -} - -// ConsensusState returns the Node's ConsensusState. -func (n *nodeImpl) ConsensusState() *cs.State { - return n.consensusState -} - // ConsensusReactor returns the Node's ConsensusReactor. func (n *nodeImpl) ConsensusReactor() *cs.Reactor { return n.consensusReactor } -// MempoolReactor returns the Node's mempool reactor. -func (n *nodeImpl) MempoolReactor() service.Service { - return n.mempoolReactor -} - // Mempool returns the Node's mempool. func (n *nodeImpl) Mempool() mempool.Mempool { return n.mempool } -// PEXReactor returns the Node's PEXReactor. It returns nil if PEX is disabled. -func (n *nodeImpl) PEXReactor() *pex.Reactor { - return n.pexReactor -} - -// EvidencePool returns the Node's EvidencePool. -func (n *nodeImpl) EvidencePool() *evidence.Pool { - return n.evidencePool -} - // EventBus returns the Node's EventBus. func (n *nodeImpl) EventBus() *types.EventBus { return n.eventBus @@ -1001,19 +945,9 @@ func (n *nodeImpl) GenesisDoc() *types.GenesisDoc { return n.genesisDoc } -// ProxyApp returns the Node's AppConns, representing its connections to the ABCI application. -func (n *nodeImpl) ProxyApp() proxy.AppConns { - return n.proxyApp -} - -// Config returns the Node's config. -func (n *nodeImpl) Config() *cfg.Config { - return n.config -} - -// EventSinks returns the Node's event indexing sinks. -func (n *nodeImpl) EventSinks() []indexer.EventSink { - return n.eventSinks +// RPCEnvironment makes sure RPC has all the objects it needs to operate. +func (n *nodeImpl) RPCEnvironment() *rpccore.Environment { + return n.rpcEnv } //------------------------------------------------------------------------------ diff --git a/node/node_test.go b/node/node_test.go index 16edb4210..64b28c0bb 100644 --- a/node/node_test.go +++ b/node/node_test.go @@ -513,36 +513,50 @@ func TestNodeSetEventSink(t *testing.T) { config := cfg.ResetTestRoot("node_app_version_test") defer os.RemoveAll(config.RootDir) - n := getTestNode(t, config, log.TestingLogger()) + logger := log.TestingLogger() + setupTest := func(t *testing.T, conf *cfg.Config) []indexer.EventSink { + eventBus, err := createAndStartEventBus(logger) + require.NoError(t, err) - assert.Equal(t, 1, len(n.eventSinks)) - assert.Equal(t, indexer.KV, n.eventSinks[0].Type()) + genDoc, err := types.GenesisDocFromFile(config.GenesisFile()) + require.NoError(t, err) + + indexService, eventSinks, err := createAndStartIndexerService(config, + cfg.DefaultDBProvider, eventBus, logger, genDoc.ChainID) + require.NoError(t, err) + t.Cleanup(func() { require.NoError(t, indexService.Stop()) }) + return eventSinks + } + + eventSinks := setupTest(t, config) + assert.Equal(t, 1, len(eventSinks)) + assert.Equal(t, indexer.KV, eventSinks[0].Type()) config.TxIndex.Indexer = []string{"null"} - n = getTestNode(t, config, log.TestingLogger()) + eventSinks = setupTest(t, config) - assert.Equal(t, 1, len(n.eventSinks)) - assert.Equal(t, indexer.NULL, n.eventSinks[0].Type()) + assert.Equal(t, 1, len(eventSinks)) + assert.Equal(t, indexer.NULL, eventSinks[0].Type()) config.TxIndex.Indexer = []string{"null", "kv"} - n = getTestNode(t, config, log.TestingLogger()) + eventSinks = setupTest(t, config) - assert.Equal(t, 1, len(n.eventSinks)) - assert.Equal(t, indexer.NULL, n.eventSinks[0].Type()) + assert.Equal(t, 1, len(eventSinks)) + assert.Equal(t, indexer.NULL, eventSinks[0].Type()) config.TxIndex.Indexer = []string{"kvv"} - ns, err := newDefaultNode(config, log.TestingLogger()) + ns, err := newDefaultNode(config, logger) assert.Nil(t, ns) assert.Equal(t, errors.New("unsupported event sink type"), err) config.TxIndex.Indexer = []string{} - n = getTestNode(t, config, log.TestingLogger()) + eventSinks = setupTest(t, config) - assert.Equal(t, 1, len(n.eventSinks)) - assert.Equal(t, indexer.NULL, n.eventSinks[0].Type()) + assert.Equal(t, 1, len(eventSinks)) + assert.Equal(t, indexer.NULL, eventSinks[0].Type()) config.TxIndex.Indexer = []string{"psql"} - ns, err = newDefaultNode(config, log.TestingLogger()) + ns, err = newDefaultNode(config, logger) assert.Nil(t, ns) assert.Equal(t, errors.New("the psql connection settings cannot be empty"), err) @@ -550,46 +564,46 @@ func TestNodeSetEventSink(t *testing.T) { config.TxIndex.Indexer = []string{"psql"} config.TxIndex.PsqlConn = psqlConn - n = getTestNode(t, config, log.TestingLogger()) - assert.Equal(t, 1, len(n.eventSinks)) - assert.Equal(t, indexer.PSQL, n.eventSinks[0].Type()) - n.OnStop() + eventSinks = setupTest(t, config) + + assert.Equal(t, 1, len(eventSinks)) + assert.Equal(t, indexer.PSQL, eventSinks[0].Type()) config.TxIndex.Indexer = []string{"psql", "kv"} config.TxIndex.PsqlConn = psqlConn - n = getTestNode(t, config, log.TestingLogger()) - assert.Equal(t, 2, len(n.eventSinks)) + eventSinks = setupTest(t, config) + + assert.Equal(t, 2, len(eventSinks)) // we use map to filter the duplicated sinks, so it's not guarantee the order when append sinks. - if n.eventSinks[0].Type() == indexer.KV { - assert.Equal(t, indexer.PSQL, n.eventSinks[1].Type()) + if eventSinks[0].Type() == indexer.KV { + assert.Equal(t, indexer.PSQL, eventSinks[1].Type()) } else { - assert.Equal(t, indexer.PSQL, n.eventSinks[0].Type()) - assert.Equal(t, indexer.KV, n.eventSinks[1].Type()) + assert.Equal(t, indexer.PSQL, eventSinks[0].Type()) + assert.Equal(t, indexer.KV, eventSinks[1].Type()) } - n.OnStop() config.TxIndex.Indexer = []string{"kv", "psql"} config.TxIndex.PsqlConn = psqlConn - n = getTestNode(t, config, log.TestingLogger()) - assert.Equal(t, 2, len(n.eventSinks)) - if n.eventSinks[0].Type() == indexer.KV { - assert.Equal(t, indexer.PSQL, n.eventSinks[1].Type()) + eventSinks = setupTest(t, config) + + assert.Equal(t, 2, len(eventSinks)) + if eventSinks[0].Type() == indexer.KV { + assert.Equal(t, indexer.PSQL, eventSinks[1].Type()) } else { - assert.Equal(t, indexer.PSQL, n.eventSinks[0].Type()) - assert.Equal(t, indexer.KV, n.eventSinks[1].Type()) + assert.Equal(t, indexer.PSQL, eventSinks[0].Type()) + assert.Equal(t, indexer.KV, eventSinks[1].Type()) } - n.OnStop() var e = errors.New("found duplicated sinks, please check the tx-index section in the config.toml") config.TxIndex.Indexer = []string{"psql", "kv", "Kv"} config.TxIndex.PsqlConn = psqlConn - _, err = newDefaultNode(config, log.TestingLogger()) + _, err = newDefaultNode(config, logger) require.Error(t, err) assert.Equal(t, e, err) config.TxIndex.Indexer = []string{"Psql", "kV", "kv", "pSql"} config.TxIndex.PsqlConn = psqlConn - _, err = newDefaultNode(config, log.TestingLogger()) + _, err = newDefaultNode(config, logger) require.Error(t, err) assert.Equal(t, e, err) } diff --git a/node/setup.go b/node/setup.go index af48fb382..ceadcd688 100644 --- a/node/setup.go +++ b/node/setup.go @@ -700,7 +700,7 @@ func createPEXReactorV2( logger log.Logger, peerManager *p2p.PeerManager, router *p2p.Router, -) (*pex.ReactorV2, error) { +) (service.Service, error) { channel, err := router.OpenChannel(pex.ChannelDescriptor(), &protop2p.PexMessage{}, 128) if err != nil { diff --git a/rpc/client/local/local.go b/rpc/client/local/local.go index 0663ebf67..d752e6a93 100644 --- a/rpc/client/local/local.go +++ b/rpc/client/local/local.go @@ -2,6 +2,7 @@ package local import ( "context" + "errors" "fmt" "time" @@ -46,15 +47,15 @@ type Local struct { // NodeService describes the portion of the node interface that the // local RPC client constructor needs to build a local client. type NodeService interface { - ConfigureRPC() (*rpccore.Environment, error) + RPCEnvironment() *rpccore.Environment EventBus() *types.EventBus } // New configures a client that calls the Node directly. func New(node NodeService) (*Local, error) { - env, err := node.ConfigureRPC() - if err != nil { - return nil, err + env := node.RPCEnvironment() + if env == nil { + return nil, errors.New("rpc is nil") } return &Local{ EventBus: node.EventBus(), From 1f76cb154603282c098263ef730836134cf1d00b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Aug 2021 15:23:37 +0000 Subject: [PATCH 13/39] build(deps): Bump google.golang.org/grpc from 1.39.1 to 1.40.0 (#6819) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.39.1 to 1.40.0.

Commits
  • 41e044e server: fix leaked net.Conn (#4644) (#4670)
  • 1634fd3 Change version to 1.40.0 (#4623)
  • b1a15ac server: fix leaked net.Conn (#4644)
  • 00edd8c Add xDS k8s url-map test Kokoro job (#4614)
  • 1ddab33 client: fix detection of whether IO was performed in NewStream (#4611)
  • 582ef45 cluster_resolver: move balancer config types into cluster_resolver package an...
  • c513103 Add extra layer on top of RBAC Engine (#4576)
  • a0bed72 xds: add http filters to FilterChain matching (#4595)
  • 0a8c637 grpclb: propagate the most recent connection error when grpclb enters transie...
  • 8332d5b test: fix possible goroutine leaks in unit tests (#4570)
  • Additional commits viewable in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=google.golang.org/grpc&package-manager=go_modules&previous-version=1.39.1&new-version=1.40.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
--- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index a23bc5167..84c6f43ac 100644 --- a/go.mod +++ b/go.mod @@ -37,7 +37,7 @@ require ( github.com/vektra/mockery/v2 v2.9.0 golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 - google.golang.org/grpc v1.39.1 + google.golang.org/grpc v1.40.0 gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect pgregory.net/rapid v0.4.7 ) diff --git a/go.sum b/go.sum index 3e20b60ab..81abd8a00 100644 --- a/go.sum +++ b/go.sum @@ -1368,8 +1368,8 @@ google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.1 h1:f37vZbBVTiJ6jKG5mWz8ySOBxNqy6ViPgyhSdVnxF3E= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= From 511e52c2fcb39cd437c871d08b4c43387dc3901d Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Fri, 13 Aug 2021 17:02:30 +0200 Subject: [PATCH 14/39] doc: fix typos in /tx_search and /tx. (#6823) Just a few small typos in the descriptions of the /tx_search and /tx endpoints. --- rpc/openapi/openapi.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rpc/openapi/openapi.yaml b/rpc/openapi/openapi.yaml index bfd49b461..0d8f8ac4a 100644 --- a/rpc/openapi/openapi.yaml +++ b/rpc/openapi/openapi.yaml @@ -1042,7 +1042,7 @@ paths: - Info responses: "200": - description: List of unconfirmed transactions + description: List of transactions content: application/json: schema: @@ -1132,10 +1132,10 @@ paths: tags: - Info description: | - Get a trasasction + Get a transaction responses: "200": - description: Get a transaction` + description: Get a transaction content: application/json: schema: From bf77c0c5443646db5128bb94199113c5336eaab0 Mon Sep 17 00:00:00 2001 From: Sam Kleinman Date: Fri, 13 Aug 2021 15:39:07 -0400 Subject: [PATCH 15/39] rpc: support new p2p infrastructure (#6820) --- CHANGELOG_PENDING.md | 19 ++++++----- UPGRADING.md | 16 ++++++++- crypto/secp256k1/secp256k1.go | 2 +- node/node.go | 4 ++- rpc/core/consensus.go | 64 +++++++++++++++++++++++++++-------- rpc/core/env.go | 16 +++++++-- rpc/core/net.go | 40 +++++++++++++++------- rpc/core/types/responses.go | 7 ++-- rpc/openapi/openapi.yaml | 14 +++----- test/e2e/tests/net_test.go | 11 +++--- 10 files changed, 132 insertions(+), 61 deletions(-) diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index 9de5b8bcb..a0a47de34 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -25,6 +25,7 @@ Friendly reminder: We have a [bug bounty program](https://hackerone.com/tendermi - [rpc/grpc] \#6725 Mark gRPC in the RPC layer as deprecated. - [blockchain/v2] \#6730 Fast Sync v2 is deprecated, please use v0 - [rpc] Add genesis_chunked method to support paginated and parallel fetching of large genesis documents. + - [rpc] \#6820 Update RPC methods to reflect changes in the p2p layer, disabling support for `UnsafeDialPeers` and `UnsafeDialPeers` when used with the new p2p layer, and changing the response format of the peer list in `NetInfo` for all users. - Apps - [ABCI] \#6408 Change the `key` and `value` fields from `[]byte` to `string` in the `EventAttribute` type. (@alexanderbez) @@ -33,7 +34,7 @@ Friendly reminder: We have a [bug bounty program](https://hackerone.com/tendermi - [ABCI] \#5818 Use protoio for msg length delimitation. Migrates from int64 to uint64 length delimiters. - [ABCI] \#3546 Add `mempool_error` field to `ResponseCheckTx`. This field will contain an error string if Tendermint encountered an error while adding a transaction to the mempool. (@williambanfield) - [Version] \#6494 `TMCoreSemVer` has been renamed to `TMVersion`. - - It is not required any longer to set ldflags to set version strings + - It is not required any longer to set ldflags to set version strings - [abci/counter] \#6684 Delete counter example app - P2P Protocol @@ -56,25 +57,25 @@ Friendly reminder: We have a [bug bounty program](https://hackerone.com/tendermi - [store] \#5848 Remove block store state in favor of using the db iterators directly (@cmwaters) - [state] \#5864 Use an iterator when pruning state (@cmwaters) - [types] \#6023 Remove `tm2pb.Header`, `tm2pb.BlockID`, `tm2pb.PartSetHeader` and `tm2pb.NewValidatorUpdate`. - - Each of the above types has a `ToProto` and `FromProto` method or function which replaced this logic. + - Each of the above types has a `ToProto` and `FromProto` method or function which replaced this logic. - [light] \#6054 Move `MaxRetryAttempt` option from client to provider. - - `NewWithOptions` now sets the max retry attempts and timeouts (@cmwaters) + - `NewWithOptions` now sets the max retry attempts and timeouts (@cmwaters) - [all] \#6077 Change spelling from British English to American (@cmwaters) - - Rename "Subscription.Cancelled()" to "Subscription.Canceled()" in libs/pubsub - - Rename "behaviour" pkg to "behavior" and internalized it in blockchain v2 + - Rename "Subscription.Cancelled()" to "Subscription.Canceled()" in libs/pubsub + - Rename "behaviour" pkg to "behavior" and internalized it in blockchain v2 - [rpc/client/http] \#6176 Remove `endpoint` arg from `New`, `NewWithTimeout` and `NewWithClient` (@melekes) - [rpc/client/http] \#6176 Unexpose `WSEvents` (@melekes) - [rpc/jsonrpc/client/ws_client] \#6176 `NewWS` no longer accepts options (use `NewWSWithOptions` and `OnReconnect` funcs to configure the client) (@melekes) - [internal/libs] \#6366 Move `autofile`, `clist`,`fail`,`flowrate`, `protoio`, `sync`, `tempfile`, `test` and `timer` lib packages to an internal folder - [libs/rand] \#6364 Remove most of libs/rand in favour of standard lib's `math/rand` (@liamsi) - [mempool] \#6466 The original mempool reactor has been versioned as `v0` and moved to a sub-package under the root `mempool` package. - Some core types have been kept in the `mempool` package such as `TxCache` and it's implementations, the `Mempool` interface itself - and `TxInfo`. (@alexanderbez) + Some core types have been kept in the `mempool` package such as `TxCache` and it's implementations, the `Mempool` interface itself + and `TxInfo`. (@alexanderbez) - [crypto/sr25519] \#6526 Do not re-execute the Ed25519-style key derivation step when doing signing and verification. The derivation is now done once and only once. This breaks `sr25519.GenPrivKeyFromSecret` output compatibility. (@Yawning) - - [types] \#6627 Move `NodeKey` to types to make the type public. + - [types] \#6627 Move `NodeKey` to types to make the type public. - [config] \#6627 Extend `config` to contain methods `LoadNodeKeyID` and `LoadorGenNodeKeyID` - [blocksync] \#6755 Rename `FastSync` and `Blockchain` package to `BlockSync` - (@cmwaters) + (@cmwaters) - Blockchain Protocol diff --git a/UPGRADING.md b/UPGRADING.md index e53c34c29..9d1a426ea 100644 --- a/UPGRADING.md +++ b/UPGRADING.md @@ -100,8 +100,22 @@ will need to change to accommodate these changes. Most notably: ### RPC changes +#### gRPC Support + Mark gRPC in the RPC layer as deprecated and to be removed in 0.36. +#### Peer Management Interface + +When running with the new P2P Layer, the methods `UnsafeDialSeeds` and +`UnsafeDialPeers` RPC methods will always return an error. They are +deprecated and will be removed in 0.36 when the legacy peer stack is +removed. + +Additionally the format of the Peer list returned in the `NetInfo` +method changes in this release to accommodate the different way that +the new stack tracks data about peers. This change affects users of +both stacks. + ### Support for Custom Reactor and Mempool Implementations The changes to p2p layer removed existing support for custom @@ -110,7 +124,7 @@ used, the introduction of the prioritized mempool covers nearly all of the use cases for custom reactors. If you are currently running custom reactors and mempools and are having trouble seeing the migration path for your project please feel free to reach out to the Tendermint Core -development team directly. +development team directly. ## v0.34.0 diff --git a/crypto/secp256k1/secp256k1.go b/crypto/secp256k1/secp256k1.go index dfe34ae10..c2c0c6017 100644 --- a/crypto/secp256k1/secp256k1.go +++ b/crypto/secp256k1/secp256k1.go @@ -13,7 +13,7 @@ import ( tmjson "github.com/tendermint/tendermint/libs/json" // necessary for Bitcoin address format - "golang.org/x/crypto/ripemd160" // nolint: staticcheck + "golang.org/x/crypto/ripemd160" // nolint ) //------------------------------------- diff --git a/node/node.go b/node/node.go index 751c78889..a31362b49 100644 --- a/node/node.go +++ b/node/node.go @@ -445,9 +445,11 @@ func makeNode(config *cfg.Config, BlockStore: blockStore, EvidencePool: evPool, ConsensusState: csState, - P2PPeers: sw, BlockSyncReactor: bcReactor.(cs.BlockSyncReactor), + P2PPeers: sw, + PeerManager: peerManager, + GenDoc: genDoc, EventSinks: eventSinks, ConsensusReactor: csReactor, diff --git a/rpc/core/consensus.go b/rpc/core/consensus.go index 1767c4b35..b067e1063 100644 --- a/rpc/core/consensus.go +++ b/rpc/core/consensus.go @@ -1,6 +1,8 @@ package core import ( + "errors" + cm "github.com/tendermint/tendermint/internal/consensus" tmmath "github.com/tendermint/tendermint/libs/math" ctypes "github.com/tendermint/tendermint/rpc/core/types" @@ -54,24 +56,56 @@ func (env *Environment) Validators( // More: https://docs.tendermint.com/master/rpc/#/Info/dump_consensus_state func (env *Environment) DumpConsensusState(ctx *rpctypes.Context) (*ctypes.ResultDumpConsensusState, error) { // Get Peer consensus states. - peers := env.P2PPeers.Peers().List() - peerStates := make([]ctypes.PeerStateInfo, len(peers)) - for i, peer := range peers { - peerState, ok := peer.Get(types.PeerStateKey).(*cm.PeerState) - if !ok { // peer does not have a state yet - continue + + var peerStates []ctypes.PeerStateInfo + switch { + case env.P2PPeers != nil: + peers := env.P2PPeers.Peers().List() + peerStates = make([]ctypes.PeerStateInfo, 0, len(peers)) + for _, peer := range peers { + peerState, ok := peer.Get(types.PeerStateKey).(*cm.PeerState) + if !ok { // peer does not have a state yet + continue + } + peerStateJSON, err := peerState.ToJSON() + if err != nil { + return nil, err + } + peerStates = append(peerStates, ctypes.PeerStateInfo{ + // Peer basic info. + NodeAddress: peer.SocketAddr().String(), + // Peer consensus state. + PeerState: peerStateJSON, + }) } - peerStateJSON, err := peerState.ToJSON() - if err != nil { - return nil, err - } - peerStates[i] = ctypes.PeerStateInfo{ - // Peer basic info. - NodeAddress: peer.SocketAddr().String(), - // Peer consensus state. - PeerState: peerStateJSON, + case env.PeerManager != nil: + peers := env.PeerManager.Peers() + peerStates = make([]ctypes.PeerStateInfo, 0, len(peers)) + for _, pid := range peers { + peerState, ok := env.ConsensusReactor.GetPeerState(pid) + if !ok { + continue + } + + peerStateJSON, err := peerState.ToJSON() + if err != nil { + return nil, err + } + + addr := env.PeerManager.Addresses(pid) + if len(addr) >= 1 { + peerStates = append(peerStates, ctypes.PeerStateInfo{ + // Peer basic info. + NodeAddress: addr[0].String(), + // Peer consensus state. + PeerState: peerStateJSON, + }) + } } + default: + return nil, errors.New("no peer system configured") } + // Get self round state. roundState, err := env.ConsensusState.GetRoundStateJSON() if err != nil { diff --git a/rpc/core/env.go b/rpc/core/env.go index eb7232c01..c35b8229c 100644 --- a/rpc/core/env.go +++ b/rpc/core/env.go @@ -36,7 +36,7 @@ const ( //---------------------------------------------- // These interfaces are used by RPC and must be thread safe -type Consensus interface { +type consensusState interface { GetState() sm.State GetValidators() (int64, []*types.Validator) GetLastHeight() int64 @@ -58,6 +58,11 @@ type peers interface { Peers() p2p.IPeerSet } +type peerManager interface { + Peers() []types.NodeID + Addresses(types.NodeID) []p2p.NodeAddress +} + //---------------------------------------------- // Environment contains objects and interfaces used by the RPC. It is expected // to be setup once during startup. @@ -70,9 +75,14 @@ type Environment struct { StateStore sm.Store BlockStore sm.BlockStore EvidencePool sm.EvidencePool - ConsensusState Consensus + ConsensusState consensusState P2PPeers peers - P2PTransport transport + + // Legacy p2p stack + P2PTransport transport + + // interfaces for new p2p interfaces + PeerManager peerManager // objects PubKey crypto.PubKey diff --git a/rpc/core/net.go b/rpc/core/net.go index 8f3e89d77..5b1672e26 100644 --- a/rpc/core/net.go +++ b/rpc/core/net.go @@ -13,19 +13,35 @@ import ( // NetInfo returns network info. // More: https://docs.tendermint.com/master/rpc/#/Info/net_info func (env *Environment) NetInfo(ctx *rpctypes.Context) (*ctypes.ResultNetInfo, error) { - peersList := env.P2PPeers.Peers().List() - peers := make([]ctypes.Peer, 0, len(peersList)) - for _, peer := range peersList { - peers = append(peers, ctypes.Peer{ - NodeInfo: peer.NodeInfo(), - IsOutbound: peer.IsOutbound(), - ConnectionStatus: peer.Status(), - RemoteIP: peer.RemoteIP().String(), - }) + var peers []ctypes.Peer + + switch { + case env.P2PPeers != nil: + peersList := env.P2PPeers.Peers().List() + peers = make([]ctypes.Peer, 0, len(peersList)) + for _, peer := range peersList { + peers = append(peers, ctypes.Peer{ + ID: peer.ID(), + URL: peer.SocketAddr().String(), + }) + } + case env.PeerManager != nil: + peerList := env.PeerManager.Peers() + for _, peer := range peerList { + addrs := env.PeerManager.Addresses(peer) + if len(addrs) == 0 { + continue + } + + peers = append(peers, ctypes.Peer{ + ID: peer, + URL: addrs[0].String(), + }) + } + default: + return nil, errors.New("peer management system does not support NetInfo responses") } - // TODO: Should we include PersistentPeers and Seeds in here? - // PRO: useful info - // CON: privacy + return &ctypes.ResultNetInfo{ Listening: env.P2PTransport.IsListening(), Listeners: env.P2PTransport.Listeners(), diff --git a/rpc/core/types/responses.go b/rpc/core/types/responses.go index a49e3c0d9..caa9b8732 100644 --- a/rpc/core/types/responses.go +++ b/rpc/core/types/responses.go @@ -7,7 +7,6 @@ import ( abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto" - "github.com/tendermint/tendermint/internal/p2p" "github.com/tendermint/tendermint/libs/bytes" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/tendermint/tendermint/types" @@ -145,10 +144,8 @@ type ResultDialPeers struct { // A peer type Peer struct { - NodeInfo types.NodeInfo `json:"node_info"` - IsOutbound bool `json:"is_outbound"` - ConnectionStatus p2p.ConnectionStatus `json:"connection_status"` - RemoteIP string `json:"remote_ip"` + ID types.NodeID `json:"node_id"` + URL string `json:"url"` } // Validators for a height. diff --git a/rpc/openapi/openapi.yaml b/rpc/openapi/openapi.yaml index 0d8f8ac4a..535320b3f 100644 --- a/rpc/openapi/openapi.yaml +++ b/rpc/openapi/openapi.yaml @@ -1476,16 +1476,12 @@ components: Peer: type: object properties: - node_info: - $ref: "#/components/schemas/NodeInfo" - is_outbound: - type: boolean - example: true - connection_status: - $ref: "#/components/schemas/ConnectionStatus" - remote_ip: + node_id: type: string - example: "95.179.155.35" + example: "" + url: + type: string + example: "@95.179.155.35:2385>" NetInfo: type: object properties: diff --git a/test/e2e/tests/net_test.go b/test/e2e/tests/net_test.go index 1ca43fa05..8d331aff9 100644 --- a/test/e2e/tests/net_test.go +++ b/test/e2e/tests/net_test.go @@ -32,11 +32,12 @@ func TestNet_Peers(t *testing.T) { seen[n.Name] = (n.Name == node.Name) // we've clearly seen ourself } for _, peerInfo := range netInfo.Peers { - peer := node.Testnet.LookupNode(peerInfo.NodeInfo.Moniker) - require.NotNil(t, peer, "unknown node %v", peerInfo.NodeInfo.Moniker) - require.Equal(t, peer.IP.String(), peerInfo.RemoteIP, - "unexpected IP address for peer %v", peer.Name) - seen[peerInfo.NodeInfo.Moniker] = true + id := peerInfo.ID + peer := node.Testnet.LookupNode(string(id)) + require.NotNil(t, peer, "unknown node %v", id) + require.Contains(t, peerInfo.URL, peer.IP.String(), + "unexpected IP address for peer %v", id) + seen[string(id)] = true } for name := range seen { From 393a02a729e9845adf092f053678d426cdd79a22 Mon Sep 17 00:00:00 2001 From: Aleksandr Bezobchuk Date: Fri, 13 Aug 2021 21:40:14 -0400 Subject: [PATCH 16/39] rpc: log update (#6825) We INFO log every `ABCIQuery`. This can output a tremendous amount of noise in the logs, can cause cosmovisor to completely crash and slows down the node due to I/O. This log is completely unnecessary. Let's get this backported into v0.43 and get that into v0.43 and v0.42 releases of the SDK /cc @marbar3778 --- CHANGELOG_PENDING.md | 2 ++ rpc/core/abci.go | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index a0a47de34..e8d687f1c 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -108,6 +108,8 @@ Friendly reminder: We have a [bug bounty program](https://hackerone.com/tendermi - [statesync/event] \#6700 Emit statesync status start/end event (@JayT106) ### IMPROVEMENTS + +- [rpc] \#6825 Remove egregious INFO log from `ABCI#Query` RPC. (@alexanderbez) - [libs/log] Console log formatting changes as a result of \#6534 and \#6589. (@tychoish) - [statesync] \#6566 Allow state sync fetchers and request timeout to be configurable. (@alexanderbez) - [types] \#6478 Add `block_id` to `newblock` event (@jeebster) diff --git a/rpc/core/abci.go b/rpc/core/abci.go index 613eaec8b..ce705ba90 100644 --- a/rpc/core/abci.go +++ b/rpc/core/abci.go @@ -26,7 +26,7 @@ func (env *Environment) ABCIQuery( if err != nil { return nil, err } - env.Logger.Info("ABCIQuery", "path", path, "data", data, "result", resQuery) + return &ctypes.ResultABCIQuery{Response: *resQuery}, nil } @@ -37,5 +37,6 @@ func (env *Environment) ABCIInfo(ctx *rpctypes.Context) (*ctypes.ResultABCIInfo, if err != nil { return nil, err } + return &ctypes.ResultABCIInfo{Response: *resInfo}, nil } From 471f83d557f5e501ed45ff5d0eb7014277221a85 Mon Sep 17 00:00:00 2001 From: Tess Rinearson Date: Tue, 17 Aug 2021 15:28:20 +0200 Subject: [PATCH 17/39] contributing: update release instructions to use backport branches (#6827) --- CONTRIBUTING.md | 167 ++++++++++++++++++++++++++++-------------------- 1 file changed, 97 insertions(+), 70 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a8bc8aa8f..79729cc1b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -227,16 +227,96 @@ Fixes #nnnn Each PR should have one commit once it lands on `master`; this can be accomplished by using the "squash and merge" button on Github. Be sure to edit your commit message, though! -### Release Procedure +### Release procedure -#### Major Release +#### A note about backport branches +Tendermint's `master` branch is under active development. +Releases are specified using tags and are built from long-lived "backport" branches. +Each release "line" (e.g. 0.34 or 0.33) has its own long-lived backport branch, +and the backport branches have names like `v0.34.x` or `v0.33.x` +(literally, `x`; it is not a placeholder in this case). + +As non-breaking changes land on `master`, they should also be backported (cherry-picked) +to these backport branches. + +We use Mergify's [backport feature](https://mergify.io/features/backports) to automatically backport +to the needed branch. There should be a label for any backport branch that you'll be targeting. +To notify the bot to backport a pull request, mark the pull request with +the label `S:backport-to-`. +Once the original pull request is merged, the bot will try to cherry-pick the pull request +to the backport branch. If the bot fails to backport, it will open a pull request. +The author of the original pull request is responsible for solving the conflicts and +merging the pull request. + +#### Creating a backport branch +If this is the first release candidate for a major release, you get to have the honor of creating +the backport branch! + +Note that, after creating the backport branch, you'll also need to update the tags on `master` +so that `go mod` is able to order the branches correctly. You should tag `master` with a "dev" tag +that is "greater than" the backport branches tags. See #6072 for more context. + +In the following example, we'll assume that we're making a backport branch for +the 0.35.x line. + +1. Start on `master` +2. Create the backport branch: + `git checkout -b v0.35.x` +3. Go back to master and tag it as the dev branch for the _next_ major release and push it back up: + `git tag -a v0.36.0-dev; git push v0.36.0-dev` +4. Create a new workflow to run the e2e nightlies for this backport branch. + (See https://github.com/tendermint/tendermint/blob/master/.github/workflows/e2e-nightly-34x.yml + for an example.) + +#### Release candidates + +Before creating an official release, especially a major release, we may want to create a +release candidate (RC) for our friends and partners to test out. We use git tags to +create RCs, and we build them off of backport branches. + +Tags for RCs should follow the "standard" release naming conventions, with `-rcX` at the end +(for example, `v0.35.0-rc0`). + +(Note that branches and tags _cannot_ have the same names, so it's important that these branches +have distinct names from the tags/release names.) + +If this is the first RC for a major release, you'll have to make a new backport branch (see above). +Otherwise: + +1. Start from the backport branch (e.g. `v0.35.x`). +1. Run the integration tests and the e2e nightlies + (which can be triggered from the Github UI; + e.g., https://github.com/tendermint/tendermint/actions/workflows/e2e-nightly-34x.yml). +1. Prepare the changelog: + - Move the changes included in `CHANGELOG_PENDING.md` into `CHANGELOG.md`. + - Run `python ./scripts/linkify_changelog.py CHANGELOG.md` to add links for + all PRs + - Ensure that UPGRADING.md is up-to-date and includes notes on any breaking changes + or other upgrading flows. + - Bump TMVersionDefault version in `version.go` + - Bump P2P and block protocol versions in `version.go`, if necessary + - Bump ABCI protocol version in `version.go`, if necessary +1. Open a PR with these changes against the backport branch. +1. Once these changes have landed on the backport branch, be sure to pull them back down locally. +2. Once you have the changes locally, create the new tag, specifying a name and a tag "message": + `git tag -a v0.35.0-rc0 -m "Release Candidate v0.35.0-rc0` +3. Push the tag back up to origin: + `git push origin v0.35.0-rc0` + Now the tag should be available on the repo's releases page. +4. Future RCs will continue to be built off of this branch. + +Note that this process should only be used for "true" RCs-- +release candidates that, if successful, will be the next release. +For more experimental "RCs," create a new, short-lived branch and tag that instead. + +#### Major release This major release process assumes that this release was preceded by release candidates. -If there were no release candidates, and you'd like to cut a major release directly from master, see below. +If there were no release candidates, begin by creating a backport branch, as described above. -1. Start on the latest RC branch (`RCx/vX.X.0`). -2. Run integration tests. -3. Branch off of the RC branch (`git checkout -b release-prep`) and prepare the release: +1. Start on the backport branch (e.g. `v0.35.x`) +2. Run integration tests and the e2e nightlies. +3. Prepare the release: - "Squash" changes from the changelog entries for the RCs into a single entry, and add all changes included in `CHANGELOG_PENDING.md`. (Squashing includes both combining all entries, as well as removing or simplifying @@ -249,57 +329,24 @@ If there were no release candidates, and you'd like to cut a major release direc - Bump P2P and block protocol versions in `version.go`, if necessary - Bump ABCI protocol version in `version.go`, if necessary - Add any release notes you would like to be added to the body of the release to `release_notes.md`. -4. Open a PR with these changes against the RC branch (`RCx/vX.X.0`). -5. Once these changes are on the RC branch, branch off of the RC branch again to create a release branch: - - `git checkout RCx/vX.X.0` - - `git checkout -b release/vX.X.0` -6. Push a tag with prepared release details. This will trigger the actual release `vX.X.0`. - - `git tag -a vX.X.0 -m 'Release vX.X.0'` - - `git push origin vX.X.0` +4. Open a PR with these changes against the backport branch. +5. Once these changes are on the backport branch, push a tag with prepared release details. + This will trigger the actual release `v0.35.0`. + - `git tag -a v0.35.0 -m 'Release v0.35.0'` + - `git push origin v0.35.0` 7. Make sure that `master` is updated with the latest `CHANGELOG.md`, `CHANGELOG_PENDING.md`, and `UPGRADING.md`. -8. Create the long-lived minor release branch `RC0/vX.X.1` for the next point release on this - new major release series. -##### Major Release (from `master`) - -1. Start on `master` -2. Run integration tests (see `test_integrations` in Makefile) -3. Prepare release in a pull request against `master` (to be squash merged): - - Copy `CHANGELOG_PENDING.md` to top of `CHANGELOG.md`; if this release - had release candidates, squash all the RC updates into one - - Run `python ./scripts/linkify_changelog.py CHANGELOG.md` to add links for - all issues - - Run `bash ./scripts/authors.sh` to get a list of authors since the latest - release, and add the github aliases of external contributors to the top of - the changelog. To lookup an alias from an email, try `bash ./scripts/authors.sh ` - - Reset the `CHANGELOG_PENDING.md` - - Bump TMVersionDefault version in `version.go` - - Bump P2P and block protocol versions in `version.go`, if necessary - - Bump ABCI protocol version in `version.go`, if necessary - - Make sure all significant breaking changes are covered in `UPGRADING.md` - - Add any release notes you would like to be added to the body of the release to `release_notes.md`. -4. Push a tag with prepared release details (this will trigger the release `vX.X.0`) - - `git tag -a vX.X.x -m 'Release vX.X.x'` - - `git push origin vX.X.x` -5. Update the `CHANGELOG.md` file on master with the releases changelog. -6. Delete any RC branches and tags for this release (if applicable) - -#### Minor Release (Point Releases) +#### Minor release (point releases) Minor releases are done differently from major releases: They are built off of long-lived backport branches, rather than from master. -Each release "line" (e.g. 0.34 or 0.33) has its own long-lived backport branch, and -the backport branches have names like `v0.34.x` or `v0.33.x` (literally, `x`; it is not a placeholder in this case). - As non-breaking changes land on `master`, they should also be backported (cherry-picked) to these backport branches. -We use Mergify's [backport feature](https://mergify.io/features/backports) to automatically backport to the needed branch. Depending on which backport branch you need to backport to there will be labels for them. To notify the bot to backport a pull request, mark the pull request with the label `backport-to-`. Once the original pull request is merged, the bot will try to cherry-pick the pull request to the backport branch. If the bot fails to backport, it will open a pull request. The author of the original pull request is responsible for solving the conflicts and merging the pull request. - Minor releases don't have release candidates by default, although any tricky changes may merit a release candidate. To create a minor release: -1. Checkout the long-lived backport branch: `git checkout vX.X.x` -2. Run integration tests: `make test_integrations` +1. Checkout the long-lived backport branch: `git checkout v0.35.x` +2. Run integration tests (`make test_integrations`) and the nightlies. 3. Check out a new branch and prepare the release: - Copy `CHANGELOG_PENDING.md` to top of `CHANGELOG.md` - Run `python ./scripts/linkify_changelog.py CHANGELOG.md` to add links for all issues @@ -309,34 +356,14 @@ To create a minor release: (Note that ABCI follows semver, and that ABCI versions are the only versions which can change during minor releases, and only field additions are valid minor changes.) - Add any release notes you would like to be added to the body of the release to `release_notes.md`. -4. Open a PR with these changes that will land them back on `vX.X.x` +4. Open a PR with these changes that will land them back on `v0.35.x` 5. Once this change has landed on the backport branch, make sure to pull it locally, then push a tag. - - `git tag -a vX.X.x -m 'Release vX.X.x'` - - `git push origin vX.X.x` + - `git tag -a v0.35.1 -m 'Release v0.35.1'` + - `git push origin v0.35.1` 6. Create a pull request back to master with the CHANGELOG & version changes from the latest release. - Remove all `R:minor` labels from the pull requests that were included in the release. - Do not merge the backport branch into master. -#### Release Candidates - -Before creating an official release, especially a major release, we may want to create a -release candidate (RC) for our friends and partners to test out. We use git tags to -create RCs, and we build them off of RC branches. RC branches typically have names formatted -like `RCX/vX.X.X` (or, concretely, `RC0/v0.34.0`), while the tags themselves follow -the "standard" release naming conventions, with `-rcX` at the end (`vX.X.X-rcX`). - -(Note that branches and tags _cannot_ have the same names, so it's important that these branches -have distinct names from the tags/release names.) - -1. Start from the RC branch (e.g. `RC0/v0.34.0`). -2. Create the new tag, specifying a name and a tag "message": - `git tag -a v0.34.0-rc0 -m "Release Candidate v0.34.0-rc0` -3. Push the tag back up to origin: - `git push origin v0.34.0-rc4` - Now the tag should be available on the repo's releases page. -4. Create a new release candidate branch for any possible updates to the RC: - `git checkout -b RC1/v0.34.0; git push origin RC1/v0.34.0` - ## Testing ### Unit tests From 267aac2e9095cbae113ed6ee55e34d4bf8367ae8 Mon Sep 17 00:00:00 2001 From: Tess Rinearson Date: Tue, 17 Aug 2021 15:45:14 +0200 Subject: [PATCH 18/39] changelog_pending: add missing item (#6829) --- CHANGELOG_PENDING.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index e8d687f1c..28a983b06 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -157,8 +157,9 @@ Friendly reminder: We have a [bug bounty program](https://hackerone.com/tendermi - [blockchain/v1] [\#5701](https://github.com/tendermint/tendermint/pull/5701) Handle peers without blocks (@melekes) - [blockchain/v1] \#5711 Fix deadlock (@melekes) - [evidence] \#6375 Fix bug with inconsistent LightClientAttackEvidence hashing (cmwaters) -- [rpc] \#6507 fix RPC client doesn't handle url's without ports (@JayT106) +- [rpc] \#6507 Ensure RPC client can handle URLs without ports (@JayT106) - [statesync] \#6463 Adds Reverse Sync feature to fetch historical light blocks after state sync in order to verify any evidence (@cmwaters) - [fastsync] \#6590 Update the metrics during fast-sync (@JayT106) - [gitignore] \#6668 Fix gitignore of abci-cli (@tanyabouman) -- [light] \#6687 Fix bug with incorrecly handled contexts in the light client (@cmwaters) +- [light] \#6687 Fix bug with incorrectly handled contexts in the light client (@cmwaters) +- [privval] \#6748 Fix vote timestamp to prevent chain halt (@JayT106) \ No newline at end of file From 0ed3ba6279c4ee328934753b6614753adb8be43f Mon Sep 17 00:00:00 2001 From: Tess Rinearson Date: Wed, 18 Aug 2021 11:55:57 +0200 Subject: [PATCH 19/39] changelog: update to reflect 0.34.12 release (#6833) --- CHANGELOG.md | 53 +++++++++++++++++++++++++++++++------------- CHANGELOG_PENDING.md | 6 +---- 2 files changed, 38 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cbda6a678..7a4d706e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,27 @@ Friendly reminder, we have a [bug bounty program](https://hackerone.com/tendermint). +## v0.34.12 + +*August 17, 2021* + +Special thanks to external contributors on this release: @JayT106. + +### FEATURES + +- [rpc] [\#6717](https://github.com/tendermint/tendermint/pull/6717) introduce + `/genesis_chunked` rpc endpoint for handling large genesis files by chunking them (@tychoish) + +### IMPROVEMENTS + +- [rpc] [\#6825](https://github.com/tendermint/tendermint/issues/6825) Remove egregious INFO log from `ABCI#Query` RPC. (@alexanderbez) + +### BUG FIXES + +- [light] [\#6685](https://github.com/tendermint/tendermint/pull/6685) fix bug + with incorrectly handling contexts that would occasionally freeze state sync. (@cmwaters) +- [privval] [\#6748](https://github.com/tendermint/tendermint/issues/6748) Fix vote timestamp to prevent chain halt (@JayT106) + ## v0.34.11 *June 18, 2021* @@ -28,9 +49,9 @@ adding two new parameters to the state sync config. *April 14, 2021* -This release fixes a bug where peers would sometimes try to send messages +This release fixes a bug where peers would sometimes try to send messages on incorrect channels. Special thanks to our friends at Oasis Labs for surfacing -this issue! +this issue! - [p2p/node] [\#6339](https://github.com/tendermint/tendermint/issues/6339) Fix bug with using custom channels (@cmwaters) - [light] [\#6346](https://github.com/tendermint/tendermint/issues/6346) Correctly handle too high errors to improve client robustness (@cmwaters) @@ -39,7 +60,7 @@ this issue! *April 8, 2021* -This release fixes a moderate severity security issue, Security Advisory Alderfly, +This release fixes a moderate severity security issue, Security Advisory Alderfly, which impacts all networks that rely on Tendermint light clients. Further details will be released once networks have upgraded. @@ -112,7 +133,7 @@ shout-out to @marbar3778 for diagnosing it quickly. ## v0.34.6 -*February 18, 2021* +*February 18, 2021* _Tendermint Core v0.34.5 and v0.34.6 have been recalled due to release tooling problems._ @@ -120,9 +141,9 @@ _Tendermint Core v0.34.5 and v0.34.6 have been recalled due to release tooling p *February 11, 2021* -This release includes a fix for a memory leak in the evidence reactor (see #6068, below). -All Tendermint clients are recommended to upgrade. -Thank you to our friends at Crypto.com for the initial report of this memory leak! +This release includes a fix for a memory leak in the evidence reactor (see #6068, below). +All Tendermint clients are recommended to upgrade. +Thank you to our friends at Crypto.com for the initial report of this memory leak! Special thanks to other external contributors on this release: @yayajacky, @odidev, @laniehei, and @c29r3! @@ -132,17 +153,17 @@ Special thanks to other external contributors on this release: @yayajacky, @odid - [light] [\#6026](https://github.com/tendermint/tendermint/pull/6026) Fix a bug when height isn't provided for the rpc calls: `/commit` and `/validators` (@cmwaters) - [evidence] [\#6068](https://github.com/tendermint/tendermint/pull/6068) Terminate broadcastEvidenceRoutine when peer is stopped (@melekes) -## v0.34.3 +## v0.34.3 *January 19, 2021* -This release includes a fix for a high-severity security vulnerability, +This release includes a fix for a high-severity security vulnerability, a DoS-vector that impacted Tendermint Core v0.34.0-v0.34.2. For more details, see -[Security Advisory Mulberry](https://github.com/tendermint/tendermint/security/advisories/GHSA-p658-8693-mhvg) -or https://nvd.nist.gov/vuln/detail/CVE-2021-21271. +[Security Advisory Mulberry](https://github.com/tendermint/tendermint/security/advisories/GHSA-p658-8693-mhvg) +or https://nvd.nist.gov/vuln/detail/CVE-2021-21271. Tendermint Core v0.34.3 also updates GoGo Protobuf to 1.3.2 in order to pick up the fix for -https://nvd.nist.gov/vuln/detail/CVE-2021-3121. +https://nvd.nist.gov/vuln/detail/CVE-2021-3121. ### BUG FIXES @@ -234,14 +255,14 @@ Special thanks to external contributors on this release: @james-ray, @fedekunze, - [blockchain] [\#4637](https://github.com/tendermint/tendermint/pull/4637) Migrate blockchain reactor(s) to Protobuf encoding (@marbar3778) - [evidence] [\#4949](https://github.com/tendermint/tendermint/pull/4949) Migrate evidence reactor to Protobuf encoding (@marbar3778) - [mempool] [\#4940](https://github.com/tendermint/tendermint/pull/4940) Migrate mempool from to Protobuf encoding (@marbar3778) - - [mempool] [\#5321](https://github.com/tendermint/tendermint/pull/5321) Batch transactions when broadcasting them to peers (@melekes) + - [mempool] [\#5321](https://github.com/tendermint/tendermint/pull/5321) Batch transactions when broadcasting them to peers (@melekes) - `MaxBatchBytes` new config setting defines the max size of one batch. - [p2p/pex] [\#4973](https://github.com/tendermint/tendermint/pull/4973) Migrate `p2p/pex` reactor to Protobuf encoding (@marbar3778) - [statesync] [\#4943](https://github.com/tendermint/tendermint/pull/4943) Migrate state sync reactor to Protobuf encoding (@marbar3778) - Blockchain Protocol - - [evidence] [\#4725](https://github.com/tendermint/tendermint/pull/4725) Remove `Pubkey` from `DuplicateVoteEvidence` (@marbar3778) + - [evidence] [\#4725](https://github.com/tendermint/tendermint/pull/4725) Remove `Pubkey` from `DuplicateVoteEvidence` (@marbar3778) - [evidence] [\#5499](https://github.com/tendermint/tendermint/pull/5449) Cap evidence to a maximum number of bytes (supercedes [\#4780](https://github.com/tendermint/tendermint/pull/4780)) (@cmwaters) - [merkle] [\#5193](https://github.com/tendermint/tendermint/pull/5193) Header hashes are no longer empty for empty inputs, notably `DataHash`, `EvidenceHash`, and `LastResultsHash` (@erikgrinaker) - [state] [\#4845](https://github.com/tendermint/tendermint/pull/4845) Include `GasWanted` and `GasUsed` into `LastResultsHash` (@melekes) @@ -300,7 +321,7 @@ Special thanks to external contributors on this release: @james-ray, @fedekunze, - [types] [\#4852](https://github.com/tendermint/tendermint/pull/4852) Vote & Proposal `SignBytes` is now func `VoteSignBytes` & `ProposalSignBytes` (@marbar3778) - [types] [\#4798](https://github.com/tendermint/tendermint/pull/4798) Simplify `VerifyCommitTrusting` func + remove extra validation (@melekes) - [types] [\#4845](https://github.com/tendermint/tendermint/pull/4845) Remove `ABCIResult` (@melekes) - - [types] [\#5029](https://github.com/tendermint/tendermint/pull/5029) Rename all values from `PartsHeader` to `PartSetHeader` to have consistency (@marbar3778) + - [types] [\#5029](https://github.com/tendermint/tendermint/pull/5029) Rename all values from `PartsHeader` to `PartSetHeader` to have consistency (@marbar3778) - [types] [\#4939](https://github.com/tendermint/tendermint/pull/4939) `Total` in `Parts` & `PartSetHeader` has been changed from a `int` to a `uint32` (@marbar3778) - [types] [\#4939](https://github.com/tendermint/tendermint/pull/4939) Vote: `ValidatorIndex` & `Round` are now `int32` (@marbar3778) - [types] [\#4939](https://github.com/tendermint/tendermint/pull/4939) Proposal: `POLRound` & `Round` are now `int32` (@marbar3778) @@ -338,7 +359,7 @@ Special thanks to external contributors on this release: @james-ray, @fedekunze, - [evidence] [\#4722](https://github.com/tendermint/tendermint/pull/4722) Consolidate evidence store and pool types to improve evidence DB (@cmwaters) - [evidence] [\#4839](https://github.com/tendermint/tendermint/pull/4839) Reject duplicate evidence from being proposed (@cmwaters) - [evidence] [\#5219](https://github.com/tendermint/tendermint/pull/5219) Change the source of evidence time to block time (@cmwaters) -- [libs] [\#5126](https://github.com/tendermint/tendermint/pull/5126) Add a sync package which wraps sync.(RW)Mutex & deadlock.(RW)Mutex and use a build flag (deadlock) in order to enable deadlock checking (@marbar3778) +- [libs] [\#5126](https://github.com/tendermint/tendermint/pull/5126) Add a sync package which wraps sync.(RW)Mutex & deadlock.(RW)Mutex and use a build flag (deadlock) in order to enable deadlock checking (@marbar3778) - [light] [\#4935](https://github.com/tendermint/tendermint/pull/4935) Fetch and compare a new header with witnesses in parallel (@melekes) - [light] [\#4929](https://github.com/tendermint/tendermint/pull/4929) Compare header with witnesses only when doing bisection (@melekes) - [light] [\#4916](https://github.com/tendermint/tendermint/pull/4916) Validate basic for inbound validator sets and headers before further processing them (@cmwaters) diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index 28a983b06..bb5221bb5 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -24,7 +24,6 @@ Friendly reminder: We have a [bug bounty program](https://hackerone.com/tendermi - [fastsync/rpc] \#6620 Add TotalSyncedTime & RemainingTime to SyncInfo in /status RPC (@JayT106) - [rpc/grpc] \#6725 Mark gRPC in the RPC layer as deprecated. - [blockchain/v2] \#6730 Fast Sync v2 is deprecated, please use v0 - - [rpc] Add genesis_chunked method to support paginated and parallel fetching of large genesis documents. - [rpc] \#6820 Update RPC methods to reflect changes in the p2p layer, disabling support for `UnsafeDialPeers` and `UnsafeDialPeers` when used with the new p2p layer, and changing the response format of the peer list in `NetInfo` for all users. - Apps @@ -109,7 +108,6 @@ Friendly reminder: We have a [bug bounty program](https://hackerone.com/tendermi ### IMPROVEMENTS -- [rpc] \#6825 Remove egregious INFO log from `ABCI#Query` RPC. (@alexanderbez) - [libs/log] Console log formatting changes as a result of \#6534 and \#6589. (@tychoish) - [statesync] \#6566 Allow state sync fetchers and request timeout to be configurable. (@alexanderbez) - [types] \#6478 Add `block_id` to `newblock` event (@jeebster) @@ -160,6 +158,4 @@ Friendly reminder: We have a [bug bounty program](https://hackerone.com/tendermi - [rpc] \#6507 Ensure RPC client can handle URLs without ports (@JayT106) - [statesync] \#6463 Adds Reverse Sync feature to fetch historical light blocks after state sync in order to verify any evidence (@cmwaters) - [fastsync] \#6590 Update the metrics during fast-sync (@JayT106) -- [gitignore] \#6668 Fix gitignore of abci-cli (@tanyabouman) -- [light] \#6687 Fix bug with incorrectly handled contexts in the light client (@cmwaters) -- [privval] \#6748 Fix vote timestamp to prevent chain halt (@JayT106) \ No newline at end of file +- [gitignore] \#6668 Fix gitignore of abci-cli (@tanyabouman) \ No newline at end of file From afb6af8bc30ea1013f575826396a781230f8b1d3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Aug 2021 08:02:16 -0400 Subject: [PATCH 20/39] build(deps): Bump github.com/golangci/golangci-lint (#6837) Bumps [github.com/golangci/golangci-lint](https://github.com/golangci/golangci-lint) from 1.41.1 to 1.42.0. - [Release notes](https://github.com/golangci/golangci-lint/releases) - [Changelog](https://github.com/golangci/golangci-lint/blob/master/CHANGELOG.md) - [Commits](https://github.com/golangci/golangci-lint/compare/v1.41.1...v1.42.0) --- updated-dependencies: - dependency-name: github.com/golangci/golangci-lint dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 6 ++-- go.sum | 94 +++++++++++++++++++++++++++++++--------------------------- 2 files changed, 54 insertions(+), 46 deletions(-) diff --git a/go.mod b/go.mod index 84c6f43ac..35272bea1 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/go-kit/kit v0.11.0 github.com/gogo/protobuf v1.3.2 github.com/golang/protobuf v1.5.2 - github.com/golangci/golangci-lint v1.41.1 + github.com/golangci/golangci-lint v1.42.0 github.com/google/orderedcode v0.0.1 github.com/google/uuid v1.3.0 github.com/gorilla/websocket v1.4.2 @@ -35,8 +35,8 @@ require ( github.com/stretchr/testify v1.7.0 github.com/tendermint/tm-db v0.6.4 github.com/vektra/mockery/v2 v2.9.0 - golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b - golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 + golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a + golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 google.golang.org/grpc v1.40.0 gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect pgregory.net/rapid v0.4.7 diff --git a/go.sum b/go.sum index 81abd8a00..74f189d5c 100644 --- a/go.sum +++ b/go.sum @@ -44,6 +44,8 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/Antonboom/errname v0.1.3 h1:qKV8gSzPzBqrG/q0dgraZXJCymWt6KuD9+Y7K7xtzN8= +github.com/Antonboom/errname v0.1.3/go.mod h1:jRXo3m0E0EuCnK3wbsSVH3X55Z4iTDLl6ZfCxwFj4TM= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -73,7 +75,7 @@ github.com/OpenPeeDeeP/depguard v1.0.1 h1:VlW4R6jmBIv3/u1JNlawEvJMM4J+dPORPaZasQ github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= @@ -176,8 +178,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:ma github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/daixiang0/gci v0.2.8 h1:1mrIGMBQsBu0P7j7m1M8Lb+ZeZxsZL+jyGX4YoMJJpg= -github.com/daixiang0/gci v0.2.8/go.mod h1:+4dZ7TISfSmqfAGv59ePaHfNzgGtIkHAhhdKggP1JAc= +github.com/daixiang0/gci v0.2.9 h1:iwJvwQpBZmMg31w+QQ6jsyZ54KEATn6/nfARbBNW294= +github.com/daixiang0/gci v0.2.9/go.mod h1:+4dZ7TISfSmqfAGv59ePaHfNzgGtIkHAhhdKggP1JAc= github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -257,7 +259,7 @@ github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vb github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= +github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM= github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY= github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= @@ -289,8 +291,8 @@ github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/flock v0.8.0 h1:MSdYClljsF3PbENUUEx85nkWfJSGfzYI9yEBZOJz6CY= -github.com/gofrs/flock v0.8.0/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= +github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= @@ -341,8 +343,8 @@ github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613 h1:9kfjN3AdxcbsZB github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a h1:iR3fYXUjHCR97qWS8ch1y9zPNsgXThGwjKPrYfqMPks= github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= -github.com/golangci/golangci-lint v1.41.1 h1:KH28pTSqRu6DTXIAANl1sPXNCmqg4VEH21z6G9Wj4SM= -github.com/golangci/golangci-lint v1.41.1/go.mod h1:LPtcY3aAAU8wydHrKpnanx9Og8K/cblZSyGmI5CJZUk= +github.com/golangci/golangci-lint v1.42.0 h1:hqf1zo6zY3GKGjjBk3ttdH22tGwF6ZRpk6j6xyJmE8I= +github.com/golangci/golangci-lint v1.42.0/go.mod h1:wgkGQnU9lOUFvTFo5QBSOvaSSddEV21Z1zYkJSbppZA= github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= @@ -394,6 +396,7 @@ github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4Mgqvf github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= @@ -549,8 +552,8 @@ github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o= github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhRWSsG5rVo6hYhAB/ADZrk= github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6FmdpVm2joNMFikkuWg0EoCKLGUMNw= -github.com/ldez/gomoddirectives v0.2.1 h1:9pAcW9KRZW7HQjFwbozNvFMcNVwdCBufU7os5QUwLIY= -github.com/ldez/gomoddirectives v0.2.1/go.mod h1:sGicqkRgBOg//JfpXwkB9Hj0X5RyJ7mlACM5B9f6Me4= +github.com/ldez/gomoddirectives v0.2.2 h1:p9/sXuNFArS2RLc+UpYZSI4KQwGMEDWC/LbtF5OPFVg= +github.com/ldez/gomoddirectives v0.2.2/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= github.com/ldez/tagliatelle v0.2.0 h1:693V8Bf1NdShJ8eu/s84QySA0J2VWBanVBa2WwXD/Wk= github.com/ldez/tagliatelle v0.2.0/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw= @@ -598,8 +601,8 @@ github.com/mbilski/exhaustivestruct v1.2.0 h1:wCBmUnSYufAHO6J4AVWY6ff+oxWxsVFrwg github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= github.com/mgechev/dots v0.0.0-20190921121421-c36f7dcfbb81 h1:QASJXOGm2RZ5Ardbc86qNFvby9AqkLDibfChMtAg5QM= github.com/mgechev/dots v0.0.0-20190921121421-c36f7dcfbb81/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= -github.com/mgechev/revive v1.0.7 h1:5kEWTY/W5a0Eiqnkn2BAWsRZpxbs1ft15PsyNC7Rml8= -github.com/mgechev/revive v1.0.7/go.mod h1:vuE5ox/4L/HDd63MCcCk3H6wTLQ6XXezRphJ8cJJOxY= +github.com/mgechev/revive v1.1.0 h1:TvabpsolbtlzZTyJcgMRN38MHrgi8C0DhmGE5dhscGY= +github.com/mgechev/revive v1.1.0/go.mod h1:PKqk4L74K6wVNwY2b6fr+9Qqr/3hIsHVfZCJdbvozrY= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= @@ -632,7 +635,7 @@ github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwd github.com/moricho/tparallel v0.2.1 h1:95FytivzT6rYzdJLdtfn6m1bfFJylOJK41+lgv/EHf4= github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= -github.com/mozilla/tls-observatory v0.0.0-20210209181001-cf43108d6880/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= +github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= @@ -650,8 +653,8 @@ github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6Fx github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nishanths/exhaustive v0.1.0 h1:kVlMw8h2LHPMGUVqUj6230oQjjTMFjwcZrnkhXzFfl8= -github.com/nishanths/exhaustive v0.1.0/go.mod h1:S1j9110vxV1ECdCudXRkeMnFQ/DQk9ajLT0Uf2MYZQQ= +github.com/nishanths/exhaustive v0.2.3 h1:+ANTMqRNrqwInnP9aszg/0jDo+zbXa4x66U19Bx/oTk= +github.com/nishanths/exhaustive v0.2.3/go.mod h1:bhIX678Nx8inLM9PbpvK1yv6oGtoP8BfaIeMzgBNKvc= github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= github.com/nishanths/predeclared v0.2.1 h1:1TXtjmy4f3YCFjTxRd8zcFHOmoUir+gp0ESzjFzG2sw= github.com/nishanths/predeclared v0.2.1/go.mod h1:HvkGJcA3naj4lOwnFXFDkFxVtSqQMB9sbB1usJ+xjQE= @@ -671,14 +674,15 @@ github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.1 h1:foqVmeWDD6yYpK+Yz3fHyNIxFYNxswxqNFjSKe+vI54= -github.com/onsi/ginkgo v1.16.1/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= +github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= +github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.11.0 h1:+CqWgvj0OZycCaqclBD1pxKHAU+tOkHmQIWvDHq2aug= -github.com/onsi/gomega v1.11.0/go.mod h1:azGKhqFUon9Vuj0YmTfLSmx0FUwqXYSTl5re8lQLTUg= +github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak= +github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= @@ -769,8 +773,8 @@ github.com/rs/zerolog v1.23.0 h1:UskrK+saS9P9Y789yNNulYKdARjPZuS35B8gJF2x60g= github.com/rs/zerolog v1.23.0/go.mod h1:6c7hFfxPOy7TacJc4Fcdi24/J0NKYGzjG8FWRI916Qo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryancurrah/gomodguard v1.2.2 h1:ZJQeYHZ2kaJpojoQBaGqpsn5g7GMcePY36uUGW1umbs= -github.com/ryancurrah/gomodguard v1.2.2/go.mod h1:tpI+C/nzvfUR3bF28b5QHpTn/jM/zlGniI++6ZlIWeE= +github.com/ryancurrah/gomodguard v1.2.3 h1:ww2fsjqocGCAFamzvv/b8IsRduuHHeK2MHTcTxZTQX8= +github.com/ryancurrah/gomodguard v1.2.3/go.mod h1:rYbA/4Tg5c54mV1sv4sQTP5WOPBcoLtnBZ7/TEhXAbg= github.com/ryanrolds/sqlclosecheck v0.3.0 h1:AZx+Bixh8zdUBxUA1NxbxVAS78vTPq4rCb8OUZI9xFw= github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= @@ -779,12 +783,12 @@ github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dms github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa h1:0U2s5loxrTy6/VgfVoLuVLFJcURKLH49ie0zSch7gh4= github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/securego/gosec/v2 v2.8.0 h1:iHg9cVmHWf5n6/ijUJ4F10h5bKlNtvXmcWzRw0lxiKE= -github.com/securego/gosec/v2 v2.8.0/go.mod h1:hJZ6NT5TqoY+jmOsaxAV4cXoEdrMRLVaNPnSpUCvCZs= +github.com/securego/gosec/v2 v2.8.1 h1:Tyy/nsH39TYCOkqf5HAgRE+7B5D8sHDwPdXRgFWokh8= +github.com/securego/gosec/v2 v2.8.1/go.mod h1:pUmsq6+VyFEElJMUX+QB3p3LWNHXg1R3xh2ssVJPs8Q= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= -github.com/shirou/gopsutil/v3 v3.21.5/go.mod h1:ghfMypLDrFSWN2c9cDYFLHyynQ+QUht0cv/18ZqVczw= +github.com/shirou/gopsutil/v3 v3.21.7/go.mod h1:RGl11Y7XMTQPmHh8F0ayC6haKNBgH4PXMJuTAcMOlz4= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= @@ -819,7 +823,6 @@ github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= -github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= @@ -862,18 +865,18 @@ github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzH github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/tendermint/tm-db v0.6.4 h1:3N2jlnYQkXNQclQwd/eKV/NzlqPlfK21cpRRIx80XXQ= github.com/tendermint/tm-db v0.6.4/go.mod h1:dptYhIpJ2M5kUuenLr+Yyf3zQOv1SgBZcl8/BmWlMBw= -github.com/tetafro/godot v1.4.7 h1:zBaoSY4JRVVz33y/qnODsdaKj2yAaMr91HCbqHCifVc= -github.com/tetafro/godot v1.4.7/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= +github.com/tetafro/godot v1.4.8 h1:rhuUH+tBrx24yVAr6Ox3/UxcsiUPPJcGhinfLdbdew0= +github.com/tetafro/godot v1.4.8/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94 h1:ig99OeTyDwQWhPe2iw9lwfQVF1KB3Q4fpP3X7/2VBG8= github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= -github.com/tklauser/go-sysconf v0.3.4/go.mod h1:Cl2c8ZRWfHD5IrfHo9VN+FX9kCFjIOyVklgXycLB6ek= -github.com/tklauser/numcpus v0.2.1/go.mod h1:9aU+wOc6WjUIZEwWMP62PL/41d65P+iks1gBkr4QyP8= +github.com/tklauser/go-sysconf v0.3.7/go.mod h1:JZIdXh4RmBvZDBZ41ld2bGxRV3n4daiiqA3skYhAoQ4= +github.com/tklauser/numcpus v0.2.3/go.mod h1:vpEPS/JC+oZGGQ/My/vJnNsvMDQL6PwOqt8dsCw5j+E= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tomarrell/wrapcheck/v2 v2.1.0 h1:LTzwrYlgBUwi9JldazhbJN84fN9nS2UNGrZIo2syqxE= -github.com/tomarrell/wrapcheck/v2 v2.1.0/go.mod h1:crK5eI4RGSUrb9duDTQ5GqcukbKZvi85vX6nbhsBAeI= +github.com/tomarrell/wrapcheck/v2 v2.3.0 h1:i3DNjtyyL1xwaBQOsPPk8LAcpayWfQv2rxNi9b/eEx4= +github.com/tomarrell/wrapcheck/v2 v2.3.0/go.mod h1:aF5rnkdtqNWP/gC7vPUO5pKsB0Oac2FDTQP4F+dpZMU= github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= github.com/tommy-muehle/go-mnd/v2 v2.4.0 h1:1t0f8Uiaq+fqKteUR4N9Umr6E99R+lDnLnq7PwX2PPE= github.com/tommy-muehle/go-mnd/v2 v2.4.0/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= @@ -888,8 +891,8 @@ github.com/ultraware/whitespace v0.0.4 h1:If7Va4cM03mpgrNH9k49/VOicWpGoG70XPBFFO github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/uudashr/gocognit v1.0.1 h1:MoG2fZ0b/Eo7NXoIwCVFLG5JED3qgQz5/NEE+rOsjPs= -github.com/uudashr/gocognit v1.0.1/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= +github.com/uudashr/gocognit v1.0.5 h1:rrSex7oHr3/pPLQ0xoWq108XMU8s678FJcQ+aSfOHa4= +github.com/uudashr/gocognit v1.0.5/go.mod h1:wgYz0mitoKOTysqxTDMOUXg+Jb5SvtihkfmugIZYpEA= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.16.0/go.mod h1:YOKImeEosDdBPnxc0gy7INqi3m1zK6A+xl6TwOBhHCA= github.com/valyala/quicktemplate v1.6.3/go.mod h1:fwPzK2fHuYEODzJ9pkw0ipCPNHZ2tD5KW4lOuSdPKzY= @@ -958,8 +961,9 @@ golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b h1:wSOdpTq0/eI46Ez/LkDwIsAKA71YP2SRKBODiRWM0as= golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a h1:kr2P4QFmQr29mSLA43kwrOcgcReGTfbE9N577tCTuBc= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1041,13 +1045,13 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1095,6 +1099,7 @@ golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1134,16 +1139,17 @@ golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210217105451-b926d437f341/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40 h1:JWgyZ1qgdTaF3N3oxC+MdTV7qvEEgHo3otj+HB5CM7Q= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -1153,8 +1159,9 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1240,7 +1247,6 @@ golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82u golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201011145850-ed2f50202694/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -1257,8 +1263,10 @@ golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3 h1:L69ShwSZEyCsLKoAxDKeMvLDZkumEe8gXUZAjab0tX8= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1428,8 +1436,8 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.2.0 h1:ws8AfbgTX3oIczLPNPCu5166oBg9ST2vNs0rcht+mDE= -honnef.co/go/tools v0.2.0/go.mod h1:lPVVZ2BS5TfnjLyizF7o7hv7j9/L+8cZY2hLyjP9cGY= +honnef.co/go/tools v0.2.1 h1:/EPr//+UMMXwMTkXvCCoaJDq8cpjMO80Ou+L4PDo2mY= +honnef.co/go/tools v0.2.1/go.mod h1:lPVVZ2BS5TfnjLyizF7o7hv7j9/L+8cZY2hLyjP9cGY= mvdan.cc/gofumpt v0.1.1 h1:bi/1aS/5W00E2ny5q65w9SnKpWEF/UIOqDYBILpo9rA= mvdan.cc/gofumpt v0.1.1/go.mod h1:yXG1r1WqZVKWbVRtBWKWX9+CxGYfA51nSomhM0woR48= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= From 69f6eee2e4c1f8ebb43bc1fc5e2b91434ece1c10 Mon Sep 17 00:00:00 2001 From: Tess Rinearson Date: Wed, 18 Aug 2021 14:06:13 +0200 Subject: [PATCH 21/39] changelog: linkify the 0.34.11 release notes (#6836) Co-authored-by: Aleksandr Bezobchuk --- CHANGELOG.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a4d706e0..df18653c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,17 +33,17 @@ adding two new parameters to the state sync config. ### BREAKING CHANGES - Apps - - [Version] \#6494 `TMCoreSemVer` is not required to be set as a ldflag any longer. + - [Version] [\#6494](https://github.com/tendermint/tendermint/pull/6494) `TMCoreSemVer` is not required to be set as a ldflag any longer. ### IMPROVEMENTS -- [statesync] \#6566 Allow state sync fetchers and request timeout to be configurable. (@alexanderbez) -- [statesync] \#6378 Retry requests for snapshots and add a minimum discovery time (5s) for new snapshots. (@tychoish) -- [statesync] \#6582 Increase chunk priority and add multiple retry chunk requests (@cmwaters) +- [statesync] [\#6566](https://github.com/tendermint/tendermint/pull/6566) Allow state sync fetchers and request timeout to be configurable. (@alexanderbez) +- [statesync] [\#6378](https://github.com/tendermint/tendermint/pull/6378) Retry requests for snapshots and add a minimum discovery time (5s) for new snapshots. (@tychoish) +- [statesync] [\#6582](https://github.com/tendermint/tendermint/pull/6582) Increase chunk priority and add multiple retry chunk requests (@cmwaters) ### BUG FIXES -- [evidence] \#6375 Fix bug with inconsistent LightClientAttackEvidence hashing (@cmwaters) +- [evidence] [\#6375](https://github.com/tendermint/tendermint/pull/6375) Fix bug with inconsistent LightClientAttackEvidence hashing (@cmwaters) ## v0.34.10 From a4cc8317da47ba92d1a97460a953d0e687a46cfb Mon Sep 17 00:00:00 2001 From: Sam Kleinman Date: Wed, 18 Aug 2021 14:33:28 -0400 Subject: [PATCH 22/39] e2e: avoid starting nodes from the future (#6835) --- test/e2e/runner/start.go | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/test/e2e/runner/start.go b/test/e2e/runner/start.go index 70e496af3..ca3ebfcbd 100644 --- a/test/e2e/runner/start.go +++ b/test/e2e/runner/start.go @@ -25,6 +25,7 @@ func Start(testnet *e2e.Testnet) error { } return false }) + sort.SliceStable(nodeQueue, func(i, j int) bool { return nodeQueue[i].StartAt < nodeQueue[j].StartAt }) @@ -49,9 +50,15 @@ func Start(testnet *e2e.Testnet) error { logger.Info(fmt.Sprintf("Node %v up on http://127.0.0.1:%v", node.Name, node.ProxyPort)) } + networkHeight := testnet.InitialHeight + // Wait for initial height - logger.Info(fmt.Sprintf("Waiting for initial height %v...", testnet.InitialHeight)) - block, blockID, err := waitForHeight(testnet, testnet.InitialHeight) + logger.Info("Waiting for initial height", + "height", networkHeight, + "nodes", len(testnet.Nodes)-len(nodeQueue), + "pending", len(nodeQueue)) + + block, blockID, err := waitForHeight(testnet, networkHeight) if err != nil { return err } @@ -66,8 +73,26 @@ func Start(testnet *e2e.Testnet) error { } } - // Start up remaining nodes for _, node := range nodeQueue { + if node.StartAt > networkHeight { + // if we're starting a node that's ahead of + // the last known height of the network, then + // we should make sure that the rest of the + // network has reached at least the height + // that this node will start at before we + // start the node. + + networkHeight = node.StartAt + + logger.Info("Waiting for network to advance before starting catch up node", + "node", node.Name, + "height", networkHeight) + + if _, _, err := waitForHeight(testnet, networkHeight); err != nil { + return err + } + } + logger.Info(fmt.Sprintf("Starting node %v at height %v...", node.Name, node.StartAt)) if _, _, err := waitForHeight(testnet, node.StartAt); err != nil { return err From cce0a3c17145e10b4a73e3b564ecfd789c308acf Mon Sep 17 00:00:00 2001 From: Aleksandr Bezobchuk Date: Thu, 19 Aug 2021 16:25:17 -0400 Subject: [PATCH 23/39] docs: add package godoc for indexer (#6839) * docs: add indexer godoc * docs++ * docs++ * docs++ * docs++ * docs++ * Update state/indexer/doc.go Co-authored-by: M. J. Fromberger * Update state/indexer/doc.go Co-authored-by: M. J. Fromberger * Update state/indexer/doc.go Co-authored-by: M. J. Fromberger * Update state/indexer/doc.go Co-authored-by: M. J. Fromberger * Update state/indexer/doc.go Co-authored-by: M. J. Fromberger * Update state/indexer/doc.go Co-authored-by: M. J. Fromberger * docs++ Co-authored-by: M. J. Fromberger --- state/indexer/doc.go | 72 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 state/indexer/doc.go diff --git a/state/indexer/doc.go b/state/indexer/doc.go new file mode 100644 index 000000000..61adbabac --- /dev/null +++ b/state/indexer/doc.go @@ -0,0 +1,72 @@ +/* +Package indexer defines Tendermint's block and transaction event indexing logic. + +Tendermint supports two primary means of block and transaction event indexing: + +1. A key-value sink via an embedded database with a proprietary query language. +2. A Postgres-based sink. + +An ABCI application can emit events during block and transaction execution in the form + + .= + +for example "transfer.amount=10000". + +An operator can enable one or both of the supported indexing sinks via the +'tx-index.indexer' Tendermint configuration. + +Example: + + [tx-index] + indexer = ["kv", "psql"] + +If an operator wants to completely disable indexing, they may simply just provide +the "null" sink option in the configuration. All other sinks will be ignored if +"null" is provided. + +If indexing is enabled, the indexer.Service will iterate over all enabled sinks +and invoke block and transaction indexing via the appropriate IndexBlockEvents +and IndexTxEvents methods. + +Note, the "kv" sink is considered deprecated and its query functionality is very +limited, but does allow users to directly query for block and transaction events +against Tendermint's RPC. Instead, operators are encouraged to use the "psql" +indexing sink when more complex queries are required and for reliability purposes +as PostgreSQL can scale. + +Prior to starting Tendermint with the "psql" indexing sink enabled, operators +must ensure the following: + +1. The "psql" indexing sink is provided in Tendermint's configuration. +2. A 'tx-index.psql-conn' value is provided that contains the PostgreSQL connection URI. +3. The block and transaction event schemas have been created in the PostgreSQL database. + +Tendermint provides the block and transaction event schemas in the following +path: state/indexer/sink/psql/schema.sql + +To create the schema in a PostgreSQL database, perform the schema query +manually or invoke schema creation via the CLI: + + $ psql -f state/indexer/sink/psql/schema.sql + +The "psql" indexing sink prohibits queries via RPC. When using a PostgreSQL sink, +queries can and should be made directly against the database using SQL. + +The following are some example SQL queries against the database schema: + +* Query for all transaction events for a given transaction hash: + + SELECT * FROM tx_events WHERE hash = '3E7D1F...'; + +* Query for all transaction events for a given block height: + + SELECT * FROM tx_events WHERE height = 25; + +* Query for transaction events that have a given type (i.e. value wildcard): + + SELECT * FROM tx_events WHERE key LIKE '%transfer.recipient%'; + +Note that if a complete abci.TxResult is needed, you will need to join "tx_events" with +"tx_results" via a foreign key, to obtain contains the raw protobuf-encoded abci.TxResult. +*/ +package indexer From 3a234e1144bb22487f51235b3c49d26b981290d6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Aug 2021 13:32:11 +0200 Subject: [PATCH 24/39] build(deps): Bump docker/build-push-action from 2.6.1 to 2.7.0 (#6845) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 2.6.1 to 2.7.0. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v2.6.1...v2.7.0) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/docker.yml | 2 +- .github/workflows/proto-docker.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 009f16898..89797a581 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -50,7 +50,7 @@ jobs: password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Publish to Docker Hub - uses: docker/build-push-action@v2.6.1 + uses: docker/build-push-action@v2.7.0 with: context: . file: ./DOCKER/Dockerfile diff --git a/.github/workflows/proto-docker.yml b/.github/workflows/proto-docker.yml index 8dc612602..ed31025b9 100644 --- a/.github/workflows/proto-docker.yml +++ b/.github/workflows/proto-docker.yml @@ -43,7 +43,7 @@ jobs: password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Publish to Docker Hub - uses: docker/build-push-action@v2.6.1 + uses: docker/build-push-action@v2.7.0 with: context: ./tools/proto file: ./tools/proto/Dockerfile From a374f74f7c914a3c7640694ae80c33bf74e05688 Mon Sep 17 00:00:00 2001 From: Sam Kleinman Date: Fri, 20 Aug 2021 13:26:04 -0400 Subject: [PATCH 25/39] e2e: cleanup node start function (#6842) I realized after my last commit that my change made a following line of code a bit redundant. (alternatively my last change was redunadnt to the existing code.) I took this oppertunity to make some minor cleanups and logging changes to the node changes which I hope will make tests a bit more clear. --- test/e2e/runner/start.go | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/test/e2e/runner/start.go b/test/e2e/runner/start.go index ca3ebfcbd..c8d6163ed 100644 --- a/test/e2e/runner/start.go +++ b/test/e2e/runner/start.go @@ -9,6 +9,9 @@ import ( ) func Start(testnet *e2e.Testnet) error { + if len(testnet.Nodes) == 0 { + return fmt.Errorf("no nodes in testnet") + } // Nodes are already sorted by name. Sort them by name then startAt, // which gives the overall order startAt, mode, name. @@ -29,9 +32,7 @@ func Start(testnet *e2e.Testnet) error { sort.SliceStable(nodeQueue, func(i, j int) bool { return nodeQueue[i].StartAt < nodeQueue[j].StartAt }) - if len(nodeQueue) == 0 { - return fmt.Errorf("no nodes in testnet") - } + if nodeQueue[0].StartAt > 0 { return fmt.Errorf("no initial nodes in testnet") } @@ -93,10 +94,8 @@ func Start(testnet *e2e.Testnet) error { } } - logger.Info(fmt.Sprintf("Starting node %v at height %v...", node.Name, node.StartAt)) - if _, _, err := waitForHeight(testnet, node.StartAt); err != nil { - return err - } + logger.Info("Starting catch up node", "node", node.Name, "height", node.StartAt) + if err := execCompose(testnet.Dir, "up", "-d", node.Name); err != nil { return err } From 8700ca9d1a0c74b10386657591720953f8f9dfd9 Mon Sep 17 00:00:00 2001 From: William Banfield <4561443+williambanfield@users.noreply.github.com> Date: Fri, 20 Aug 2021 16:07:20 -0400 Subject: [PATCH 26/39] ADR 071: Proposer-based Timestamps (#6799) Architectural decision record for Proposer-based timestamps. --- .../adr-071-proposer-based-timestamps.md | 445 ++++++++++++++++++ docs/architecture/img/pbts-message.png | Bin 0 -> 32028 bytes 2 files changed, 445 insertions(+) create mode 100644 docs/architecture/adr-071-proposer-based-timestamps.md create mode 100644 docs/architecture/img/pbts-message.png diff --git a/docs/architecture/adr-071-proposer-based-timestamps.md b/docs/architecture/adr-071-proposer-based-timestamps.md new file mode 100644 index 000000000..c23488005 --- /dev/null +++ b/docs/architecture/adr-071-proposer-based-timestamps.md @@ -0,0 +1,445 @@ +# ADR 71: Proposer-Based Timestamps + +* [Changelog](#changelog) +* [Status](#status) +* [Context](#context) +* [Alternative Approaches](#alternative-approaches) + * [Remove timestamps altogether](#remove-timestamps-altogether) +* [Decision](#decision) +* [Detailed Design](#detailed-design) + * [Overview](#overview) + * [Proposal Timestamp and Block Timestamp](#proposal-timestamp-and-block-timestamp) + * [Saving the timestamp across heights](#saving-the-timestamp-across-heights) + * [Changes to `CommitSig`](#changes-to-commitsig) + * [Changes to `Commit`](#changes-to-commit) + * [Changes to `Vote` messages](#changes-to-vote-messages) + * [New consensus parameters](#new-consensus-parameters) + * [Changes to `Header`](#changes-to-header) + * [Changes to the block proposal step](#changes-to-the-block-proposal-step) + * [Proposer selects proposal timestamp](#proposer-selects-proposal-timestamp) + * [Proposer selects block timestamp](#proposer-selects-block-timestamp) + * [Proposer waits](#proposer-waits) + * [Changes to the propose step timeout](#changes-to-the-propose-step-timeout) + * [Changes to validation rules](#changes-to-validation-rules) + * [Proposal timestamp validation](#proposal-timestamp-validation) + * [Block timestamp validation](#block-timestamp-validation) + * [Changes to the prevote step](#changes-to-the-prevote-step) + * [Changes to the precommit step](#changes-to-the-precommit-step) + * [Changes to locking a block](#changes-to-locking-a-block) + * [Remove voteTime Completely](#remove-votetime-completely) +* [Future Improvements](#future-improvements) +* [Consequences](#consequences) + * [Positive](#positive) + * [Neutral](#neutral) + * [Negative](#negative) +* [References](#references) + +## Changelog + + - July 15 2021: Created by @williambanfield + - Aug 4 2021: Draft completed by @williambanfield + - Aug 5 2021: Draft updated to include data structure changes by @williambanfield + - Aug 20 2021: Language edits completed by @williambanfield + +## Status + + **Accepted** + +## Context + +Tendermint currently provides a monotonically increasing source of time known as [BFTTime](https://github.com/tendermint/spec/blob/master/spec/consensus/bft-time.md). +This mechanism for producing a source of time is reasonably simple. +Each correct validator adds a timestamp to each `Precommit` message it sends. +The timestamp it sends is either the validator's current known Unix time or one millisecond greater than the previous block time, depending on which value is greater. +When a block is produced, the proposer chooses the block timestamp as the weighted median of the times in all of the `Precommit` messages the proposer received. +The weighting is proportional to the amount of voting power, or stake, a validator has on the network. +This mechanism for producing timestamps is both deterministic and byzantine fault tolerant. + +This current mechanism for producing timestamps has a few drawbacks. +Validators do not have to agree at all on how close the selected block timestamp is to their own currently known Unix time. +Additionally, any amount of voting power `>1/3` may directly control the block timestamp. +As a result, it is quite possible that the timestamp is not particularly meaningful. + +These drawbacks present issues in the Tendermint protocol. +Timestamps are used by light clients to verify blocks. +Light clients rely on correspondence between their own currently known Unix time and the block timestamp to verify blocks they see; +However, their currently known Unix time may be greatly divergent from the block timestamp as a result of the limitations of `BFTTime`. + +The proposer-based timestamps specification suggests an alternative approach for producing block timestamps that remedies these issues. +Proposer-based timestamps alter the current mechanism for producing block timestamps in two main ways: + +1. The block proposer is amended to offer up its currently known Unix time as the timestamp for the next block. +1. Correct validators only approve the proposed block timestamp if it is close enough to their own currently known Unix time. + +The result of these changes is a more meaningful timestamp that cannot be controlled by `<= 2/3` of the validator voting power. +This document outlines the necessary code changes in Tendermint to implement the corresponding [proposer-based timestamps specification](https://github.com/tendermint/spec/tree/master/spec/consensus/proposer-based-timestamp). + +## Alternative Approaches + +### Remove timestamps altogether + +Computer clocks are bound to skew for a variety of reasons. +Using timestamps in our protocol means either accepting the timestamps as not reliable or impacting the protocol’s liveness guarantees. +This design requires impacting the protocol’s liveness in order to make the timestamps more reliable. +An alternate approach is to remove timestamps altogether from the block protocol. +`BFTTime` is deterministic but may be arbitrarily inaccurate. +However, having a reliable source of time is quite useful for applications and protocols built on top of a blockchain. + +We therefore decided not to remove the timestamp. +Applications often wish for some transactions to occur on a certain day, on a regular period, or after some time following a different event. +All of these require some meaningful representation of agreed upon time. +The following protocols and application features require a reliable source of time: +* Tendermint Light Clients [rely on correspondence between their known time](https://github.com/tendermint/spec/blob/master/spec/light-client/verification/README.md#definitions-1) and the block time for block verification. +* Tendermint Evidence validity is determined [either in terms of heights or in terms of time](https://github.com/tendermint/spec/blob/8029cf7a0fcc89a5004e173ec065aa48ad5ba3c8/spec/consensus/evidence.md#verification). +* Unbonding of staked assets in the Cosmos Hub [occurs after a period of 21 days](https://github.com/cosmos/governance/blob/ce75de4019b0129f6efcbb0e752cd2cc9e6136d3/params-change/Staking.md#unbondingtime). +* IBC packets can use either a [timestamp or a height to timeout packet delivery](https://docs.cosmos.network/v0.43/ibc/overview.html#acknowledgements). + +Finally, inflation distribution in the Cosmos Hub uses an approximation of time to calculate an annual percentage rate. +This approximation of time is calculated using [block heights with an estimated number of blocks produced in a year](https://github.com/cosmos/governance/blob/master/params-change/Mint.md#blocksperyear). +Proposer-based timestamps will allow this inflation calculation to use a more meaningful and accurate source of time. + + +## Decision + +Implement proposer-based timestamps and remove `BFTTime`. + +## Detailed Design + +### Overview + +Implementing proposer-based timestamps will require a few changes to Tendermint’s code. +These changes will be to the following components: +* The `internal/consensus/` package. +* The `state/` package. +* The `Vote`, `CommitSig`, `Commit` and `Header` types. +* The consensus parameters. + +### Proposal Timestamp and Block Timestamp + +This design discusses two timestamps: (1) The timestamp in the block and (2) the timestamp in the proposal message. +The existence and use of both of these timestamps can get a bit confusing, so some background is given here to clarify their uses. + +The [proposal message currently has a timestamp](https://github.com/tendermint/tendermint/blob/e5312942e30331e7c42b75426da2c6c9c00ae476/types/proposal.go#L31). +This timestamp is the current Unix time known to the proposer when sending the `Proposal` message. +This timestamp is not currently used as part of consensus. +The changes in this ADR will begin using the proposal message timestamp as part of consensus. +We will refer to this as the **proposal timestamp** throughout this design. + +The block has a timestamp field [in the header](https://github.com/tendermint/tendermint/blob/dc7c212c41a360bfe6eb38a6dd8c709bbc39aae7/types/block.go#L338). +This timestamp is set currently as part of Tendermint’s `BFTtime` algorithm. +It is set when a block is proposed and it is checked by the validators when they are deciding to prevote the block. +This field will continue to be used but the logic for creating and validating this timestamp will change. +We will refer to this as the **block timestamp** throughout this design. + +At a high level, the proposal timestamp from height `H` is used as the block timestamp at height `H+1`. +The following image shows this relationship. +The rest of this document describes the code changes that will make this possible. + +![](./img/pbts-message.png) + +### Saving the timestamp across heights + +Currently, `BFTtime` uses `LastCommit` to construct the block timestamp. +The `LastCommit` is created at height `H-1` and is saved in the state store to be included in the block at height `H`. +`BFTtime` takes the weighted median of the timestamps in `LastCommit.CommitSig` to build the timestamp for height `H`. + +For proposer-based timestamps, the `LastCommit.CommitSig` timestamps will no longer be used to build the timestamps for height `H`. +Instead, the proposal timestamp from height `H-1` will become the block timestamp for height `H`. +To enable this, we will add a `Timestamp` field to the `Commit` struct. +This field will be populated at each height with the proposal timestamp decided on at the previous height. +This timestamp will also be saved with the rest of the commit in the state store [when the commit is finalized](https://github.com/tendermint/tendermint/blob/e8013281281985e3ada7819f42502b09623d24a0/internal/consensus/state.go#L1611) so that it can be recovered if Tendermint crashes. +Changes to the `CommitSig` and `Commit` struct are detailed below. + +### Changes to `CommitSig` + +The [CommitSig](https://github.com/tendermint/tendermint/blob/a419f4df76fe4aed668a6c74696deabb9fe73211/types/block.go#L604) struct currently contains a timestamp. +This timestamp is the current Unix time known to the validator when it issued a `Precommit` for the block. +This timestamp is no longer used and will be removed in this change. + +`CommitSig` will be updated as follows: + +```diff +type CommitSig struct { + BlockIDFlag BlockIDFlag `json:"block_id_flag"` + ValidatorAddress Address `json:"validator_address"` +-- Timestamp time.Time `json:"timestamp"` + Signature []byte `json:"signature"` +} +``` + +### Changes to `Commit` + +The [Commit](https://github.com/tendermint/tendermint/blob/a419f4df76fe4aed668a6c74696deabb9fe73211/types/block.go#L746) struct does not currently contain a timestamp. +The timestamps in the `Commit.CommitSig` entries are currently used to build the block timestamp. +With these timestamps removed, the commit time will instead be stored in the `Commit` struct. + +`Commit` will be updated as follows. + +```diff +type Commit struct { + Height int64 `json:"height"` + Round int32 `json:"round"` +++ Timestamp time.Time `json:"timestamp"` + BlockID BlockID `json:"block_id"` + Signatures []CommitSig `json:"signatures"` +} +``` + +### Changes to `Vote` messages + +`Precommit` and `Prevote` messages use a common [Vote struct](https://github.com/tendermint/tendermint/blob/a419f4df76fe4aed668a6c74696deabb9fe73211/types/vote.go#L50). +This struct currently contains a timestamp. +This timestamp is set using the [voteTime](https://github.com/tendermint/tendermint/blob/e8013281281985e3ada7819f42502b09623d24a0/internal/consensus/state.go#L2241) function and therefore vote times correspond to the current Unix time known to the validator. +For precommits, this timestamp is used to construct the [CommitSig that is included in the block in the LastCommit](https://github.com/tendermint/tendermint/blob/e8013281281985e3ada7819f42502b09623d24a0/types/block.go#L754) field. +For prevotes, this field is unused. +Proposer-based timestamps will use the [RoundState.Proposal](https://github.com/tendermint/tendermint/blob/c3ae6f5b58e07b29c62bfdc5715b6bf8ae5ee951/internal/consensus/types/round_state.go#L76) timestamp to construct the `signedBytes` `CommitSig`. +This timestamp is therefore no longer useful and will be dropped. + +`Vote` will be updated as follows: + +```diff +type Vote struct { + Type tmproto.SignedMsgType `json:"type"` + Height int64 `json:"height"` + Round int32 `json:"round"` + BlockID BlockID `json:"block_id"` // zero if vote is nil. +-- Timestamp time.Time `json:"timestamp"` + ValidatorAddress Address `json:"validator_address"` + ValidatorIndex int32 `json:"validator_index"` + Signature []byte `json:"signature"` +} +``` + +### New consensus parameters + +The proposer-based timestamp specification includes multiple new parameters that must be the same among all validators. +These parameters are `PRECISION`, `MSGDELAY`, and `ACCURACY`. + +The `PRECISION` and `MSGDELAY` parameters are used to determine if the proposed timestamp is acceptable. +A validator will only Prevote a proposal if the proposal timestamp is considered `timely`. +A proposal timestamp is considered `timely` if it is within `PRECISION` and `MSGDELAY` of the Unix time known to the validator. +More specifically, a proposal timestamp is `timely` if `validatorLocalTime - PRECISION < proposalTime < validatorLocalTime + PRECISION + MSGDELAY`. + +Because the `PRECISION` and `MSGDELAY` parameters must be the same across all validators, they will be added to the [consensus parameters](https://github.com/tendermint/tendermint/blob/master/proto/tendermint/types/params.proto#L13) as [durations](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Duration). + +The proposer-based timestamp specification also includes a [new ACCURACY parameter](https://github.com/tendermint/spec/blob/master/spec/consensus/proposer-based-timestamp/pbts-sysmodel_001_draft.md#pbts-clocksync-external0). +Intuitively, `ACCURACY` represents the difference between the ‘real’ time and the currently known time of correct validators. +The currently known Unix time of any validator is always somewhat different from real time. +`ACCURACY` is the largest such difference between each validator's time and real time taken as an absolute value. +This is not something a computer can determine on its own and must be specified as an estimate by community running a Tendermint-based chain. +It is used in the new algorithm to [calculate a timeout for the propose step](https://github.com/tendermint/spec/blob/master/spec/consensus/proposer-based-timestamp/pbts-algorithm_001_draft.md#pbts-alg-startround0). +`ACCURACY` is assumed to be the same across all validators and therefore should be included as a consensus parameter. + +The consensus will be updated to include this `Timestamp` field as follows: + +```diff +type ConsensusParams struct { + Block BlockParams `json:"block"` + Evidence EvidenceParams `json:"evidence"` + Validator ValidatorParams `json:"validator"` + Version VersionParams `json:"version"` +++ Timestamp TimestampParams `json:"timestamp"` +} +``` + +```go +type TimestampParams struct { + Accuracy time.Duration `json:"accuracy"` + Precision time.Duration `json:"precision"` + MsgDelay time.Duration `json:"msg_delay"` +} +``` + +### Changes to `Header` + +The [Header](https://github.com/tendermint/tendermint/blob/a419f4df76fe4aed668a6c74696deabb9fe73211/types/block.go#L338) struct currently contains a timestamp. +This timestamp is set as the `BFTtime` derived from the block's `LastCommit.CommitSig` timestamps. +This timestamp will no longer be derived from the `LastCommit.CommitSig` timestamps and will instead be included directly into the block's `LastCommit`. +This timestamp will therfore be identical in both the `Header` and the `LastCommit`. +To clarify that the timestamp in the header corresponds to the `LastCommit`'s time, we will rename this timestamp field to `last_timestamp`. + +`Header` will be updated as follows: + +```diff +type Header struct { + // basic block info + Version version.Consensus `json:"version"` + ChainID string `json:"chain_id"` + Height int64 `json:"height"` +-- Time time.Time `json:"time"` +++ LastTimestamp time.Time `json:"last_timestamp"` + + // prev block info + LastBlockID BlockID `json:"last_block_id"` + + // hashes of block data + LastCommitHash tmbytes.HexBytes `json:"last_commit_hash"` + DataHash tmbytes.HexBytes `json:"data_hash"` + + // hashes from the app output from the prev block + ValidatorsHash tmbytes.HexBytes `json:"validators_hash"` + NextValidatorsHash tmbytes.HexBytes `json:"next_validators_hash"` + ConsensusHash tmbytes.HexBytes `json:"consensus_hash"` + AppHash tmbytes.HexBytes `json:"app_hash"` + + // root hash of all results from the txs from the previous block + LastResultsHash tmbytes.HexBytes `json:"last_results_hash"` + + // consensus info + EvidenceHash tmbytes.HexBytes `json:"evidence_hash"` + ProposerAddress Address `json:"proposer_address"` +} +``` + +### Changes to the block proposal step + +#### Proposer selects proposal timestamp + +The proposal logic already [sets the Unix time known to the validator](https://github.com/tendermint/tendermint/blob/2abfe20114ee3bb3adfee817589033529a804e4d/types/proposal.go#L44) into the `Proposal` message. +This satisfies the proposer-based timestamp specification and does not need to change. + +#### Proposer selects block timestamp + +The proposal timestamp that was decided in height `H-1` will be stored in the `State` struct's in the `RoundState.LastCommit` field. +The proposer will select this timestamp to use as the block timestamp at height `H`. + +#### Proposer waits + +Block timestamps must be monotonically increasing. +In `BFTTime`, if a validator’s clock was behind, the [validator added 1 millisecond to the previous block’s time and used that in its vote messages](https://github.com/tendermint/tendermint/blob/e8013281281985e3ada7819f42502b09623d24a0/internal/consensus/state.go#L2246). +A goal of adding proposer-based timestamps is to enforce some degree of clock synchronization, so having a mechanism that completely ignores the Unix time of the validator time no longer works. + +Validator clocks will not be perfectly in sync. +Therefore, the proposer’s current known Unix time may be less than the `LastCommit.Timestamp`. +If the proposer’s current known Unix time is less than the `LastCommit.Timestamp`, the proposer will sleep until its known Unix time exceeds `LastCommit.Timestamp`. + +This change will require amending the [defaultDecideProposal](https://github.com/tendermint/tendermint/blob/822893615564cb20b002dd5cf3b42b8d364cb7d9/internal/consensus/state.go#L1180) method. +This method should now block until the proposer’s time is greater than `LastCommit.Timestamp`. + +#### Changes to the propose step timeout + +Currently, a validator waiting for a proposal will proceed past the propose step if the configured propose timeout is reached and no proposal is seen. +Proposer-based timestamps requires changing this timeout logic. + +The proposer will now wait until its current known Unix time exceeds the `LastCommit.Timestamp` to propose a block. +The validators must now take this and some other factors into account when deciding when to timeout the propose step. +Specifically, the propose step timeout must also take into account potential inaccuracy in the validator’s clock and in the clock of the proposer. +Additionally, there may be a delay communicating the proposal message from the proposer to the other validators. + +Therefore, validators waiting for a proposal must wait until after the `LastCommit.Timestamp` before timing out. +To account for possible inaccuracy in its own clock, inaccuracy in the proposer’s clock, and message delay, validators waiting for a proposal will wait until `LastCommit.Timesatmp + 2*ACCURACY + MSGDELAY`. + The spec defines this as `waitingTime`. + +The [propose step’s timeout is set in enterPropose](https://github.com/tendermint/tendermint/blob/822893615564cb20b002dd5cf3b42b8d364cb7d9/internal/consensus/state.go#L1108) in `state.go`. +`enterPropose` will be changed to calculate waiting time using the new consensus parameters. +The timeout in `enterPropose` will then be set as the maximum of `waitingTime` and the [configured proposal step timeout](https://github.com/tendermint/tendermint/blob/dc7c212c41a360bfe6eb38a6dd8c709bbc39aae7/config/config.go#L1013). + +### Changes to validation rules + +The rules for validating that a proposal is valid will need slight modification to implement proposer-based timestamps. +Specifically, we will change the validation logic to ensure that the proposal timestamp is `timely` and we will modify the way the block timestamp is validated as well. + +#### Proposal timestamp validation + +Adding proposal timestamp validation is a reasonably straightforward change. +The current Unix time known to the proposer is already included in the [Proposal message](https://github.com/tendermint/tendermint/blob/dc7c212c41a360bfe6eb38a6dd8c709bbc39aae7/types/proposal.go#L31). +Once the proposal is received, the complete message is stored in the `RoundState.Proposal` field. +The precommit and prevote validation logic does not currently use this timestamp. +This validation logic will be updated to check that the proposal timestamp is within `PRECISION` of the current Unix time known to the validators. +If the timestamp is not within `PRECISION` of the current Unix time known to the validator, the proposal will not be considered it valid. +The validator will also check that the proposal time is greater than the block timestamp from the previous height. + +If no valid proposal is received by the proposal timeout, the validator will prevote nil. +This is identical to the current logic. + +#### Block timestamp validation + +The [validBlock function](https://github.com/tendermint/tendermint/blob/c3ae6f5b58e07b29c62bfdc5715b6bf8ae5ee951/state/validation.go#L14) currently [validates the proposed block timestamp in three ways](https://github.com/tendermint/tendermint/blob/c3ae6f5b58e07b29c62bfdc5715b6bf8ae5ee951/state/validation.go#L118). +First, the validation logic checks that this timestamp is greater than the previous block’s timestamp. +Additionally, it validates that the block timestamp is correctly calculated as the weighted median of the timestamps in the [block’s LastCommit](https://github.com/tendermint/tendermint/blob/e8013281281985e3ada7819f42502b09623d24a0/types/block.go#L48). +Finally, the logic also authenticates the timestamps in the `LastCommit`. +The cryptographic signature in each `CommitSig` is created by signing a hash of fields in the block with the validator’s private key. +One of the items in this `signedBytes` hash is derived from the timestamp in the `CommitSig`. +To authenticate the `CommitSig` timestamp, the validator builds a hash of fields that includes the timestamp and checks this hash against the provided signature. +This takes place in the [VerifyCommit function](https://github.com/tendermint/tendermint/blob/e8013281281985e3ada7819f42502b09623d24a0/types/validation.go#L25). + +The logic to validate that the block timestamp is greater than the previous block’s timestamp also works for proposer-based timestamps and will not change. + +`BFTTime` validation is no longer applicable and will be removed. +Validators will no longer check that the block timestamp is a weighted median of `LastCommit` timestamps. +This will mean removing the call to [MedianTime in the validateBlock function](https://github.com/tendermint/tendermint/blob/4db71da68e82d5cb732b235eeb2fd69d62114b45/state/validation.go#L117). +The `MedianTime` function can be completely removed. +The `LastCommit` timestamps may also be removed. + +The `signedBytes` validation logic in `VerifyCommit` will be slightly altered. +The `CommitSig`s in the block’s `LastCommit` will no longer each contain a timestamp. +The validation logic will instead include the `LastCommit.Timestamp` in the hash of fields for generating the `signedBytes`. +The cryptographic signatures included in the `CommitSig`s will then be checked against this `signedBytes` hash to authenticate the timestamp. +Specifically, the `VerifyCommit` function will be updated to use this new timestamp. + +### Changes to the prevote step + +Currently, a validator will prevote a proposal in one of three cases: + +* Case 1: Validator has no locked block and receives a valid proposal. +* Case 2: Validator has a locked block and receives a valid proposal matching its locked block. +* Case 3: Validator has a locked block, sees a valid proposal not matching its locked block but sees +⅔ prevotes for the new proposal’s block. + +The only change we will make to the prevote step is to what a validator considers a valid proposal as detailed above. + +### Changes to the precommit step + +The precommit step will not require much modification. +Its proposal validation rules will change in the same ways that validation will change in the prevote step. + +### Changes to locking a block +When a validator receives a valid proposed block and +2/3 prevotes for that block, it stores the block as its ‘locked block’ in the [RoundState.ValidBlock](https://github.com/tendermint/tendermint/blob/e8013281281985e3ada7819f42502b09623d24a0/internal/consensus/types/round_state.go#L85) field. +In each subsequent round it will prevote that block. +A validator will only change which block it has locked if it sees +2/3 prevotes for a different block. + +This mechanism will remain largely unchanged. +The only difference is the addition of proposal timestamp validation. +A validator will prevote nil in a round if the proposal message it received is not `timely`. +Prevoting nil in this case will not cause a validator to ‘unlock’ its locked block. +This difference is an incidental result of the changes to prevote validation. +It is included in this design for completeness and to clarify that no additional changes will be made to block locking. + +### Remove voteTime Completely + +[voteTime](https://github.com/tendermint/tendermint/blob/822893615564cb20b002dd5cf3b42b8d364cb7d9/internal/consensus/state.go#L2229) is a mechanism for calculating the next `BFTTime` given both the validator's current known Unix time and the previous block timestamp. +If the previous block timestamp is greater than the validator's current known Unix time, then voteTime returns a value one millisecond greater than the previous block timestamp. +This logic is used in multiple places and is no longer needed for proposer-based timestamps. +It should therefore be removed completely. + +## Future Improvements + +* Implement BLS signature aggregation. +By removing fields from the `Precommit` messages, we are able to aggregate signatures. + +## Consequences + +### Positive + +* `<2/3` of validators can no longer influence block timestamps. +* Block timestamp will have stronger correspondence to real time. +* Improves the reliability of light client block verification. +* Enables BLS signature aggregation. +* Enables evidence handling to use time instead of height for evidence validity. + +### Neutral + +* Alters Tendermint’s liveness properties. +Liveness now requires that all correct validators have synchronized clocks within a bound. +Liveness will now also require that validators’ clocks move forward, which was not required under `BFTTime`. + +### Negative + +* May increase the length of the propose step if there is a large skew between the previous proposer and the current proposer’s local Unix time. +This skew will be bound by the `PRECISION` value, so it is unlikely to be too large. + +* Current chains with block timestamps far in the future will either need to pause consensus until after the erroneous block timestamp or must maintain synchronized but very inaccurate clocks. + +## References + +* [PBTS Spec](https://github.com/tendermint/spec/tree/master/spec/consensus/proposer-based-timestamp) +* [BFTTime spec](https://github.com/tendermint/spec/blob/master/spec/consensus/bft-time.md) diff --git a/docs/architecture/img/pbts-message.png b/docs/architecture/img/pbts-message.png new file mode 100644 index 0000000000000000000000000000000000000000..400f3569021ca719fe06f20e0db17940091751a1 GIT binary patch literal 32028 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 literal 0 HcmV?d00001 From d0e33b429288fb7d284205732beb82b59b4dea76 Mon Sep 17 00:00:00 2001 From: Hlib Kanunnikov Date: Mon, 23 Aug 2021 17:45:08 +0300 Subject: [PATCH 27/39] blocksync: complete transition from Blockchain to BlockSync (#6847) --- internal/blocksync/v0/reactor.go | 118 +++++++++++++------------- internal/blocksync/v0/reactor_test.go | 38 ++++----- node/setup.go | 4 +- 3 files changed, 80 insertions(+), 80 deletions(-) diff --git a/internal/blocksync/v0/reactor.go b/internal/blocksync/v0/reactor.go index c43959808..4ddfa4edc 100644 --- a/internal/blocksync/v0/reactor.go +++ b/internal/blocksync/v0/reactor.go @@ -29,10 +29,10 @@ var ( // TODO: Remove once p2p refactor is complete. // ref: https://github.com/tendermint/tendermint/issues/5670 ChannelShims = map[p2p.ChannelID]*p2p.ChannelDescriptorShim{ - BlockchainChannel: { + BlockSyncChannel: { MsgType: new(bcproto.Message), Descriptor: &p2p.ChannelDescriptor{ - ID: byte(BlockchainChannel), + ID: byte(BlockSyncChannel), Priority: 5, SendQueueCapacity: 1000, RecvBufferCapacity: 1024, @@ -44,8 +44,8 @@ var ( ) const ( - // BlockchainChannel is a channel for blocks and status updates - BlockchainChannel = p2p.ChannelID(0x40) + // BlockSyncChannel is a channel for blocks and status updates + BlockSyncChannel = p2p.ChannelID(0x40) trySyncIntervalMS = 10 @@ -60,7 +60,7 @@ const ( ) type consensusReactor interface { - // For when we switch from blockchain reactor and block sync to the consensus + // For when we switch from block sync reactor to the consensus // machine. SwitchToConsensus(state sm.State, skipWAL bool) } @@ -87,17 +87,17 @@ type Reactor struct { consReactor consensusReactor blockSync *tmSync.AtomicBool - blockchainCh *p2p.Channel - // blockchainOutBridgeCh defines a channel that acts as a bridge between sending Envelope - // messages that the reactor will consume in processBlockchainCh and receiving messages + blockSyncCh *p2p.Channel + // blockSyncOutBridgeCh defines a channel that acts as a bridge between sending Envelope + // messages that the reactor will consume in processBlockSyncCh and receiving messages // from the peer updates channel and other goroutines. We do this instead of directly - // sending on blockchainCh.Out to avoid race conditions in the case where other goroutines - // send Envelopes directly to the to blockchainCh.Out channel, since processBlockchainCh - // may close the blockchainCh.Out channel at the same time that other goroutines send to - // blockchainCh.Out. - blockchainOutBridgeCh chan p2p.Envelope - peerUpdates *p2p.PeerUpdates - closeCh chan struct{} + // sending on blockSyncCh.Out to avoid race conditions in the case where other goroutines + // send Envelopes directly to the to blockSyncCh.Out channel, since processBlockSyncCh + // may close the blockSyncCh.Out channel at the same time that other goroutines send to + // blockSyncCh.Out. + blockSyncOutBridgeCh chan p2p.Envelope + peerUpdates *p2p.PeerUpdates + closeCh chan struct{} requestsCh <-chan BlockRequest errorsCh <-chan peerError @@ -119,7 +119,7 @@ func NewReactor( blockExec *sm.BlockExecutor, store *store.BlockStore, consReactor consensusReactor, - blockchainCh *p2p.Channel, + blockSyncCh *p2p.Channel, peerUpdates *p2p.PeerUpdates, blockSync bool, metrics *cons.Metrics, @@ -137,23 +137,23 @@ func NewReactor( errorsCh := make(chan peerError, maxPeerErrBuffer) // NOTE: The capacity should be larger than the peer count. r := &Reactor{ - initialState: state, - blockExec: blockExec, - store: store, - pool: NewBlockPool(startHeight, requestsCh, errorsCh), - consReactor: consReactor, - blockSync: tmSync.NewBool(blockSync), - requestsCh: requestsCh, - errorsCh: errorsCh, - blockchainCh: blockchainCh, - blockchainOutBridgeCh: make(chan p2p.Envelope), - peerUpdates: peerUpdates, - closeCh: make(chan struct{}), - metrics: metrics, - syncStartTime: time.Time{}, + initialState: state, + blockExec: blockExec, + store: store, + pool: NewBlockPool(startHeight, requestsCh, errorsCh), + consReactor: consReactor, + blockSync: tmSync.NewBool(blockSync), + requestsCh: requestsCh, + errorsCh: errorsCh, + blockSyncCh: blockSyncCh, + blockSyncOutBridgeCh: make(chan p2p.Envelope), + peerUpdates: peerUpdates, + closeCh: make(chan struct{}), + metrics: metrics, + syncStartTime: time.Time{}, } - r.BaseService = *service.NewBaseService(logger, "Blockchain", r) + r.BaseService = *service.NewBaseService(logger, "BlockSync", r) return r, nil } @@ -174,7 +174,7 @@ func (r *Reactor) OnStart() error { go r.poolRoutine(false) } - go r.processBlockchainCh() + go r.processBlockSyncCh() go r.processPeerUpdates() return nil @@ -199,7 +199,7 @@ func (r *Reactor) OnStop() { // Wait for all p2p Channels to be closed before returning. This ensures we // can easily reason about synchronization of all p2p Channels and ensure no // panics will occur. - <-r.blockchainCh.Done() + <-r.blockSyncCh.Done() <-r.peerUpdates.Done() } @@ -214,7 +214,7 @@ func (r *Reactor) respondToPeer(msg *bcproto.BlockRequest, peerID types.NodeID) return } - r.blockchainCh.Out <- p2p.Envelope{ + r.blockSyncCh.Out <- p2p.Envelope{ To: peerID, Message: &bcproto.BlockResponse{Block: blockProto}, } @@ -223,16 +223,16 @@ func (r *Reactor) respondToPeer(msg *bcproto.BlockRequest, peerID types.NodeID) } r.Logger.Info("peer requesting a block we do not have", "peer", peerID, "height", msg.Height) - r.blockchainCh.Out <- p2p.Envelope{ + r.blockSyncCh.Out <- p2p.Envelope{ To: peerID, Message: &bcproto.NoBlockResponse{Height: msg.Height}, } } -// handleBlockchainMessage handles envelopes sent from peers on the -// BlockchainChannel. It returns an error only if the Envelope.Message is unknown +// handleBlockSyncMessage handles envelopes sent from peers on the +// BlockSyncChannel. It returns an error only if the Envelope.Message is unknown // for this channel. This should never be called outside of handleMessage. -func (r *Reactor) handleBlockchainMessage(envelope p2p.Envelope) error { +func (r *Reactor) handleBlockSyncMessage(envelope p2p.Envelope) error { logger := r.Logger.With("peer", envelope.From) switch msg := envelope.Message.(type) { @@ -249,7 +249,7 @@ func (r *Reactor) handleBlockchainMessage(envelope p2p.Envelope) error { r.pool.AddBlock(envelope.From, block, block.Size()) case *bcproto.StatusRequest: - r.blockchainCh.Out <- p2p.Envelope{ + r.blockSyncCh.Out <- p2p.Envelope{ To: envelope.From, Message: &bcproto.StatusResponse{ Height: r.store.Height(), @@ -288,8 +288,8 @@ func (r *Reactor) handleMessage(chID p2p.ChannelID, envelope p2p.Envelope) (err r.Logger.Debug("received message", "message", envelope.Message, "peer", envelope.From) switch chID { - case BlockchainChannel: - err = r.handleBlockchainMessage(envelope) + case BlockSyncChannel: + err = r.handleBlockSyncMessage(envelope) default: err = fmt.Errorf("unknown channel ID (%d) for envelope (%v)", chID, envelope) @@ -298,30 +298,30 @@ func (r *Reactor) handleMessage(chID p2p.ChannelID, envelope p2p.Envelope) (err return err } -// processBlockchainCh initiates a blocking process where we listen for and handle -// envelopes on the BlockchainChannel and blockchainOutBridgeCh. Any error encountered during -// message execution will result in a PeerError being sent on the BlockchainChannel. +// processBlockSyncCh initiates a blocking process where we listen for and handle +// envelopes on the BlockSyncChannel and blockSyncOutBridgeCh. Any error encountered during +// message execution will result in a PeerError being sent on the BlockSyncChannel. // When the reactor is stopped, we will catch the signal and close the p2p Channel // gracefully. -func (r *Reactor) processBlockchainCh() { - defer r.blockchainCh.Close() +func (r *Reactor) processBlockSyncCh() { + defer r.blockSyncCh.Close() for { select { - case envelope := <-r.blockchainCh.In: - if err := r.handleMessage(r.blockchainCh.ID, envelope); err != nil { - r.Logger.Error("failed to process message", "ch_id", r.blockchainCh.ID, "envelope", envelope, "err", err) - r.blockchainCh.Error <- p2p.PeerError{ + case envelope := <-r.blockSyncCh.In: + if err := r.handleMessage(r.blockSyncCh.ID, envelope); err != nil { + r.Logger.Error("failed to process message", "ch_id", r.blockSyncCh.ID, "envelope", envelope, "err", err) + r.blockSyncCh.Error <- p2p.PeerError{ NodeID: envelope.From, Err: err, } } - case envelope := <-r.blockchainOutBridgeCh: - r.blockchainCh.Out <- envelope + case envelope := <-r.blockSyncOutBridgeCh: + r.blockSyncCh.Out <- envelope case <-r.closeCh: - r.Logger.Debug("stopped listening on blockchain channel; closing...") + r.Logger.Debug("stopped listening on block sync channel; closing...") return } @@ -340,7 +340,7 @@ func (r *Reactor) processPeerUpdate(peerUpdate p2p.PeerUpdate) { switch peerUpdate.Status { case p2p.PeerStatusUp: // send a status update the newly added peer - r.blockchainOutBridgeCh <- p2p.Envelope{ + r.blockSyncOutBridgeCh <- p2p.Envelope{ To: peerUpdate.NodeID, Message: &bcproto.StatusResponse{ Base: r.store.Base(), @@ -406,13 +406,13 @@ func (r *Reactor) requestRoutine() { return case request := <-r.requestsCh: - r.blockchainOutBridgeCh <- p2p.Envelope{ + r.blockSyncOutBridgeCh <- p2p.Envelope{ To: request.PeerID, Message: &bcproto.BlockRequest{Height: request.Height}, } case pErr := <-r.errorsCh: - r.blockchainCh.Error <- p2p.PeerError{ + r.blockSyncCh.Error <- p2p.PeerError{ NodeID: pErr.peerID, Err: pErr.err, } @@ -423,7 +423,7 @@ func (r *Reactor) requestRoutine() { go func() { defer r.poolWG.Done() - r.blockchainOutBridgeCh <- p2p.Envelope{ + r.blockSyncOutBridgeCh <- p2p.Envelope{ Broadcast: true, Message: &bcproto.StatusRequest{}, } @@ -554,14 +554,14 @@ FOR_LOOP: // NOTE: We've already removed the peer's request, but we still need // to clean up the rest. peerID := r.pool.RedoRequest(first.Height) - r.blockchainCh.Error <- p2p.PeerError{ + r.blockSyncCh.Error <- p2p.PeerError{ NodeID: peerID, Err: err, } peerID2 := r.pool.RedoRequest(second.Height) if peerID2 != peerID { - r.blockchainCh.Error <- p2p.PeerError{ + r.blockSyncCh.Error <- p2p.PeerError{ NodeID: peerID2, Err: err, } diff --git a/internal/blocksync/v0/reactor_test.go b/internal/blocksync/v0/reactor_test.go index e038b57af..a1ddc02cd 100644 --- a/internal/blocksync/v0/reactor_test.go +++ b/internal/blocksync/v0/reactor_test.go @@ -32,9 +32,9 @@ type reactorTestSuite struct { reactors map[types.NodeID]*Reactor app map[types.NodeID]proxy.AppConns - blockchainChannels map[types.NodeID]*p2p.Channel - peerChans map[types.NodeID]chan p2p.PeerUpdate - peerUpdates map[types.NodeID]*p2p.PeerUpdates + blockSyncChannels map[types.NodeID]*p2p.Channel + peerChans map[types.NodeID]chan p2p.PeerUpdate + peerUpdates map[types.NodeID]*p2p.PeerUpdates blockSync bool } @@ -53,19 +53,19 @@ func setup( "must specify at least one block height (nodes)") rts := &reactorTestSuite{ - logger: log.TestingLogger().With("module", "blockchain", "testCase", t.Name()), - network: p2ptest.MakeNetwork(t, p2ptest.NetworkOptions{NumNodes: numNodes}), - nodes: make([]types.NodeID, 0, numNodes), - reactors: make(map[types.NodeID]*Reactor, numNodes), - app: make(map[types.NodeID]proxy.AppConns, numNodes), - blockchainChannels: make(map[types.NodeID]*p2p.Channel, numNodes), - peerChans: make(map[types.NodeID]chan p2p.PeerUpdate, numNodes), - peerUpdates: make(map[types.NodeID]*p2p.PeerUpdates, numNodes), - blockSync: true, + logger: log.TestingLogger().With("module", "block_sync", "testCase", t.Name()), + network: p2ptest.MakeNetwork(t, p2ptest.NetworkOptions{NumNodes: numNodes}), + nodes: make([]types.NodeID, 0, numNodes), + reactors: make(map[types.NodeID]*Reactor, numNodes), + app: make(map[types.NodeID]proxy.AppConns, numNodes), + blockSyncChannels: make(map[types.NodeID]*p2p.Channel, numNodes), + peerChans: make(map[types.NodeID]chan p2p.PeerUpdate, numNodes), + peerUpdates: make(map[types.NodeID]*p2p.PeerUpdates, numNodes), + blockSync: true, } - chDesc := p2p.ChannelDescriptor{ID: byte(BlockchainChannel)} - rts.blockchainChannels = rts.network.MakeChannelsNoCleanup(t, chDesc, new(bcproto.Message), int(chBuf)) + chDesc := p2p.ChannelDescriptor{ID: byte(BlockSyncChannel)} + rts.blockSyncChannels = rts.network.MakeChannelsNoCleanup(t, chDesc, new(bcproto.Message), int(chBuf)) i := 0 for nodeID := range rts.network.Nodes { @@ -161,7 +161,7 @@ func (rts *reactorTestSuite) addNode(t *testing.T, blockExec, blockStore, nil, - rts.blockchainChannels[nodeID], + rts.blockSyncChannels[nodeID], rts.peerUpdates[nodeID], rts.blockSync, cons.NopMetrics()) @@ -181,7 +181,7 @@ func (rts *reactorTestSuite) start(t *testing.T) { } func TestReactor_AbruptDisconnect(t *testing.T) { - config := cfg.ResetTestRoot("blockchain_reactor_test") + config := cfg.ResetTestRoot("block_sync_reactor_test") defer os.RemoveAll(config.RootDir) genDoc, privVals := factory.RandGenesisDoc(config, 1, false, 30) @@ -216,7 +216,7 @@ func TestReactor_AbruptDisconnect(t *testing.T) { } func TestReactor_SyncTime(t *testing.T) { - config := cfg.ResetTestRoot("blockchain_reactor_test") + config := cfg.ResetTestRoot("block_sync_reactor_test") defer os.RemoveAll(config.RootDir) genDoc, privVals := factory.RandGenesisDoc(config, 1, false, 30) @@ -239,7 +239,7 @@ func TestReactor_SyncTime(t *testing.T) { } func TestReactor_NoBlockResponse(t *testing.T) { - config := cfg.ResetTestRoot("blockchain_reactor_test") + config := cfg.ResetTestRoot("block_sync_reactor_test") defer os.RemoveAll(config.RootDir) genDoc, privVals := factory.RandGenesisDoc(config, 1, false, 30) @@ -286,7 +286,7 @@ func TestReactor_BadBlockStopsPeer(t *testing.T) { // See: https://github.com/tendermint/tendermint/issues/6005 t.SkipNow() - config := cfg.ResetTestRoot("blockchain_reactor_test") + config := cfg.ResetTestRoot("block_sync_reactor_test") defer os.RemoveAll(config.RootDir) maxBlockHeight := int64(48) diff --git a/node/setup.go b/node/setup.go index ceadcd688..e9bfb029a 100644 --- a/node/setup.go +++ b/node/setup.go @@ -362,7 +362,7 @@ func createBlockchainReactor( reactor, err := bcv0.NewReactor( logger, state.Copy(), blockExec, blockStore, csReactor, - channels[bcv0.BlockchainChannel], peerUpdates, blockSync, + channels[bcv0.BlockSyncChannel], peerUpdates, blockSync, metrics, ) if err != nil { @@ -727,7 +727,7 @@ func makeNodeInfo( var bcChannel byte switch config.BlockSync.Version { case cfg.BlockSyncV0: - bcChannel = byte(bcv0.BlockchainChannel) + bcChannel = byte(bcv0.BlockSyncChannel) case cfg.BlockSyncV2: bcChannel = bcv2.BlockchainChannel From 39dee8abc576cbf833d95b49c9de17d8c0bde288 Mon Sep 17 00:00:00 2001 From: Sam Kleinman Date: Mon, 23 Aug 2021 16:41:45 -0400 Subject: [PATCH 28/39] pubsub: improve handling of closed blocking subsciptions. (#6852) --- libs/pubsub/pubsub.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libs/pubsub/pubsub.go b/libs/pubsub/pubsub.go index 7548470b5..68d1ec941 100644 --- a/libs/pubsub/pubsub.go +++ b/libs/pubsub/pubsub.go @@ -507,7 +507,10 @@ func (state *state) send(msg interface{}, events []types.Event) error { for clientID, subscription := range clientSubscriptions { if cap(subscription.out) == 0 { // block on unbuffered channel - subscription.out <- NewMessage(subscription.id, msg, events) + select { + case subscription.out <- NewMessage(subscription.id, msg, events): + case <-subscription.canceled: + } } else { // don't block on buffered channels select { From ce3c059a0d40a1485b9aa2c87707b4f4fc8104f0 Mon Sep 17 00:00:00 2001 From: "M. J. Fromberger" Date: Mon, 23 Aug 2021 15:06:01 -0700 Subject: [PATCH 29/39] ADR 072: Re-instate a request-for-comments archive. (#6851) This ADR restores a variation of the old Request for Comments documentation that we previously used. The proposal differs from the original formulation, and does not replace ADRs. --- docs/architecture/README.md | 2 + .../adr-072-request-for-comments.md | 105 ++++++++++++++++++ docs/rfc/README.md | 40 +++++++ docs/rfc/rfc-template.md | 35 ++++++ 4 files changed, 182 insertions(+) create mode 100644 docs/architecture/adr-072-request-for-comments.md create mode 100644 docs/rfc/README.md create mode 100644 docs/rfc/rfc-template.md diff --git a/docs/architecture/README.md b/docs/architecture/README.md index 7025a72f6..f6c12996f 100644 --- a/docs/architecture/README.md +++ b/docs/architecture/README.md @@ -98,3 +98,5 @@ Note the context/background should be written in the present tense. - [ADR-045: ABCI-Evidence](./adr-045-abci-evidence.md) - [ADR-057: RPC](./adr-057-RPC.md) - [ADR-069: Node Initialization](./adr-069-flexible-node-initialization.md) +- [ADR-071: Proposer-Based Timestamps](adr-071-proposer-based-timestamps.md) +- [ADR-072: Restore Requests for Comments](./adr-072-request-for-comments.md) diff --git a/docs/architecture/adr-072-request-for-comments.md b/docs/architecture/adr-072-request-for-comments.md new file mode 100644 index 000000000..7eb22ebc9 --- /dev/null +++ b/docs/architecture/adr-072-request-for-comments.md @@ -0,0 +1,105 @@ +# ADR 72: Restore Requests for Comments + +## Changelog + +- 20-Aug-2021: Initial draft (@creachadair) + +## Status + +Proposed + +## Context + +In the past, we kept a collection of Request for Comments (RFC) documents in `docs/rfc`. +Prior to the creation of the ADR process, these documents were used to document +design and implementation decisions about Tendermint Core. The RFC directory +was removed in favor of ADRs, in commit 3761aa69 (PR +[\#6345](https://github.com/tendermint/tendermint/pull/6345)). + +For issues where an explicit design decision or implementation change is +required, an ADR is generally preferable to an open-ended RFC: An ADR is +relatively narrowly-focused, identifies a specific design or implementation +question, and documents the consensus answer to that question. + +Some discussions are more open-ended, however, or don't require a specific +decision to be made (yet). Such conversations are still valuable to document, +and several members of the Tendermint team have been doing so by writing gists +or Google docs to share them around. That works well enough in the moment, but +gists do not support any kind of collaborative editing, and both gists and docs +are hard to discover after the fact. Google docs have much better collaborative +editing, but are worse for discoverability, especially when contributors span +different Google accounts. + +Discoverability is important, because these kinds of open-ended discussions are +useful to people who come later -- either as new team members or as outside +contributors seeking to use and understand the thoughts behind our designs and +the architectural decisions that arose from those discussion. + +With these in mind, I propose that: + +- We re-create a new, initially empty `docs/rfc` directory in the repository, + and use it to capture these kinds of open-ended discussions in supplement to + ADRs. + +- Unlike in the previous RFC scheme, documents in this new directory will + _not_ be used directly for decision-making. This is the key difference + between an RFC and an ADR. + + Instead, an RFC will exist to document background, articulate general + principles, and serve as a historical record of discussion and motivation. + + In this system, an RFC may _only_ result in a decision indirectly, via ADR + documents created in response to the RFC. + + **In short:** If a decision is required, write an ADR; otherwise if a + sufficiently broad discussion is needed, write an RFC. + +Just so that there is a consistent format, I also propose that: + +- RFC files are named `rfc-XXX-title.{md,rst,txt}` and are written in plain + text, Markdown, or ReStructured Text. + +- Like an ADR, an RFC should include a high-level change log at the top of the + document, and sections for: + + * Abstract: A brief, high-level synopsis of the topic. + * Background: Any background necessary to understand the topic. + * Discussion: Detailed discussion of the issue being considered. + +- Unlike an ADR, an RFC does _not_ include sections for Decisions, Detailed + Design, or evaluation of proposed solutions. If an RFC leads to a proposal + for an actual architectural change, that must be recorded in an ADR in the + usual way, and may refer back to the RFC in its References section. + +## Alternative Approaches + +Leaving aside implementation details, the main alternative to this proposal is +to leave things as they are now, with ADRs as the only log of record and other +discussions being held informally in whatever medium is convenient at the time. + +## Decision + +(pending) + +## Detailed Design + +- Create a new `docs/rfc` directory in the `tendermint` repository. Note that + this proposal intentionally does _not_ pull back the previous contents of + that path from Git history, as those documents were appropriately merged into + the ADR process. + +- Create a `README.md` for RFCs that explains the rules and their relationship + to ADRs. + +- Create an `rfc-template.md` file for RFC files. + +## Consequences + +### Positive + +- We will have a more discoverable place to record open-ended discussions that + do not immediately result in a design change. + +### Negative + +- Potentially some people could be confused about the RFC/ADR distinction. diff --git a/docs/rfc/README.md b/docs/rfc/README.md new file mode 100644 index 000000000..c05853aca --- /dev/null +++ b/docs/rfc/README.md @@ -0,0 +1,40 @@ +--- +order: 1 +parent: + order: false +--- + +# Requests for Comments + +A Request for Comments (RFC) is a record of discussion on an open-ended topic +related to the design and implementation of Tendermint Core, for which no +immediate decision is required. + +The purpose of an RFC is to serve as a historical record of a high-level +discussion that might otherwise only be recorded in an ad hoc way (for example, +via gists or Google docs) that are difficult to discover for someone after the +fact. An RFC _may_ give rise to more specific architectural _decisions_ for +Tendermint, but those decisions must be recorded separately in [Architecture +Decision Records (ADR)](./../architecture). + +As a rule of thumb, if you can articulate a specific question that needs to be +answered, write an ADR. If you need to explore the topic and get input from +others to know what questions need to be answered, an RFC may be appropriate. + +## RFC Content + +An RFC should provide: + +- A **changelog**, documenting when and how the RFC has changed. +- An **abstract**, briefly summarizing the topic so the reader can quickly tell + whether it is relevant to their interest. +- Any **background** a reader will need to understand and participate in the + substance of the discussion (links to other documents are fine here). +- The **discussion**, the primary content of the document. + +The [rfc-template.md](./rfc-template.md) file includes placeholders for these +sections. + +## Table of Contents + + diff --git a/docs/rfc/rfc-template.md b/docs/rfc/rfc-template.md new file mode 100644 index 000000000..b3f404775 --- /dev/null +++ b/docs/rfc/rfc-template.md @@ -0,0 +1,35 @@ +# RFC {RFC-NUMBER}: {TITLE} + +## Changelog + +- {date}: {changelog} + +## Abstract + +> A brief high-level synopsis of the topic of discussion for this RFC, ideally +> just a few sentences. This should help the reader quickly decide whether the +> rest of the discussion is relevant to their interest. + +## Background + +> Any context or orientation needed for a reader to understand and participate +> in the substance of the Discussion. If necessary, this section may include +> links to other documentation or sources rather than restating existing +> material, but should provide enough detail that the reader can tell what they +> need to read to be up-to-date. + +### References + +> Links to external materials needed to follow the discussion may be added here. +> +> In addition, if the discussion in a request for comments leads to any design +> decisions, it may be helpful to add links to the ADR documents here after the +> discussion has settled. + +## Discussion + +> This section contains the core of the discussion. +> +> There is no fixed format for this section, but ideally changes to this +> section should be updated before merging to reflect any discussion that took +> place on the PR that made those changes. From d7c3a8f682d2acdcdce859d86e732d33db1c9d1e Mon Sep 17 00:00:00 2001 From: Sam Kleinman Date: Tue, 24 Aug 2021 11:43:13 -0400 Subject: [PATCH 30/39] time: make median time library type private (#6853) This is a very minor change, but I was looking through the code, and this seems like it shouldn't be exported or used more broadly, so I've moved it out. --- libs/time/time.go | 41 --------------------------- state/state.go | 7 ++--- state/time.go | 46 +++++++++++++++++++++++++++++++ {libs/time => state}/time_test.go | 39 +++++++++++++------------- 4 files changed, 69 insertions(+), 64 deletions(-) create mode 100644 state/time.go rename {libs/time => state}/time_test.go (50%) diff --git a/libs/time/time.go b/libs/time/time.go index 022bdf574..786f9bbb4 100644 --- a/libs/time/time.go +++ b/libs/time/time.go @@ -1,7 +1,6 @@ package time import ( - "sort" "time" ) @@ -16,43 +15,3 @@ func Now() time.Time { func Canonical(t time.Time) time.Time { return t.Round(0).UTC() } - -// WeightedTime for computing a median. -type WeightedTime struct { - Time time.Time - Weight int64 -} - -// NewWeightedTime with time and weight. -func NewWeightedTime(time time.Time, weight int64) *WeightedTime { - return &WeightedTime{ - Time: time, - Weight: weight, - } -} - -// WeightedMedian computes weighted median time for a given array of WeightedTime and the total voting power. -func WeightedMedian(weightedTimes []*WeightedTime, totalVotingPower int64) (res time.Time) { - median := totalVotingPower / 2 - - sort.Slice(weightedTimes, func(i, j int) bool { - if weightedTimes[i] == nil { - return false - } - if weightedTimes[j] == nil { - return true - } - return weightedTimes[i].Time.UnixNano() < weightedTimes[j].Time.UnixNano() - }) - - for _, weightedTime := range weightedTimes { - if weightedTime != nil { - if median <= weightedTime.Weight { - res = weightedTime.Time - break - } - median -= weightedTime.Weight - } - } - return -} diff --git a/state/state.go b/state/state.go index 132a86fda..5862162d1 100644 --- a/state/state.go +++ b/state/state.go @@ -9,7 +9,6 @@ import ( "github.com/gogo/protobuf/proto" - tmtime "github.com/tendermint/tendermint/libs/time" tmstate "github.com/tendermint/tendermint/proto/tendermint/state" tmversion "github.com/tendermint/tendermint/proto/tendermint/version" "github.com/tendermint/tendermint/types" @@ -287,7 +286,7 @@ func (state State) MakeBlock( // the votes sent by honest processes, i.e., a faulty processes can not arbitrarily increase or decrease the // computed value. func MedianTime(commit *types.Commit, validators *types.ValidatorSet) time.Time { - weightedTimes := make([]*tmtime.WeightedTime, len(commit.Signatures)) + weightedTimes := make([]*weightedTime, len(commit.Signatures)) totalVotingPower := int64(0) for i, commitSig := range commit.Signatures { @@ -298,11 +297,11 @@ func MedianTime(commit *types.Commit, validators *types.ValidatorSet) time.Time // If there's no condition, TestValidateBlockCommit panics; not needed normally. if validator != nil { totalVotingPower += validator.VotingPower - weightedTimes[i] = tmtime.NewWeightedTime(commitSig.Timestamp, validator.VotingPower) + weightedTimes[i] = newWeightedTime(commitSig.Timestamp, validator.VotingPower) } } - return tmtime.WeightedMedian(weightedTimes, totalVotingPower) + return weightedMedian(weightedTimes, totalVotingPower) } //------------------------------------------------------------------------ diff --git a/state/time.go b/state/time.go new file mode 100644 index 000000000..c0770b3af --- /dev/null +++ b/state/time.go @@ -0,0 +1,46 @@ +package state + +import ( + "sort" + "time" +) + +// weightedTime for computing a median. +type weightedTime struct { + Time time.Time + Weight int64 +} + +// newWeightedTime with time and weight. +func newWeightedTime(time time.Time, weight int64) *weightedTime { + return &weightedTime{ + Time: time, + Weight: weight, + } +} + +// weightedMedian computes weighted median time for a given array of WeightedTime and the total voting power. +func weightedMedian(weightedTimes []*weightedTime, totalVotingPower int64) (res time.Time) { + median := totalVotingPower / 2 + + sort.Slice(weightedTimes, func(i, j int) bool { + if weightedTimes[i] == nil { + return false + } + if weightedTimes[j] == nil { + return true + } + return weightedTimes[i].Time.UnixNano() < weightedTimes[j].Time.UnixNano() + }) + + for _, weightedTime := range weightedTimes { + if weightedTime != nil { + if median <= weightedTime.Weight { + res = weightedTime.Time + break + } + median -= weightedTime.Weight + } + } + return +} diff --git a/libs/time/time_test.go b/state/time_test.go similarity index 50% rename from libs/time/time_test.go rename to state/time_test.go index 1b1a30e50..893ade7ea 100644 --- a/libs/time/time_test.go +++ b/state/time_test.go @@ -1,54 +1,55 @@ -package time +package state import ( "testing" "time" "github.com/stretchr/testify/assert" + tmtime "github.com/tendermint/tendermint/libs/time" ) func TestWeightedMedian(t *testing.T) { - m := make([]*WeightedTime, 3) + m := make([]*weightedTime, 3) - t1 := Now() + t1 := tmtime.Now() t2 := t1.Add(5 * time.Second) t3 := t1.Add(10 * time.Second) - m[2] = NewWeightedTime(t1, 33) // faulty processes - m[0] = NewWeightedTime(t2, 40) // correct processes - m[1] = NewWeightedTime(t3, 27) // correct processes + m[2] = newWeightedTime(t1, 33) // faulty processes + m[0] = newWeightedTime(t2, 40) // correct processes + m[1] = newWeightedTime(t3, 27) // correct processes totalVotingPower := int64(100) - median := WeightedMedian(m, totalVotingPower) + median := weightedMedian(m, totalVotingPower) assert.Equal(t, t2, median) // median always returns value between values of correct processes assert.Equal(t, true, (median.After(t1) || median.Equal(t1)) && (median.Before(t3) || median.Equal(t3))) - m[1] = NewWeightedTime(t1, 40) // correct processes - m[2] = NewWeightedTime(t2, 27) // correct processes - m[0] = NewWeightedTime(t3, 33) // faulty processes + m[1] = newWeightedTime(t1, 40) // correct processes + m[2] = newWeightedTime(t2, 27) // correct processes + m[0] = newWeightedTime(t3, 33) // faulty processes totalVotingPower = int64(100) - median = WeightedMedian(m, totalVotingPower) + median = weightedMedian(m, totalVotingPower) assert.Equal(t, t2, median) // median always returns value between values of correct processes assert.Equal(t, true, (median.After(t1) || median.Equal(t1)) && (median.Before(t2) || median.Equal(t2))) - m = make([]*WeightedTime, 8) + m = make([]*weightedTime, 8) t4 := t1.Add(15 * time.Second) t5 := t1.Add(60 * time.Second) - m[3] = NewWeightedTime(t1, 10) // correct processes - m[1] = NewWeightedTime(t2, 10) // correct processes - m[5] = NewWeightedTime(t2, 10) // correct processes - m[4] = NewWeightedTime(t3, 23) // faulty processes - m[0] = NewWeightedTime(t4, 20) // correct processes - m[7] = NewWeightedTime(t5, 10) // faulty processes + m[3] = newWeightedTime(t1, 10) // correct processes + m[1] = newWeightedTime(t2, 10) // correct processes + m[5] = newWeightedTime(t2, 10) // correct processes + m[4] = newWeightedTime(t3, 23) // faulty processes + m[0] = newWeightedTime(t4, 20) // correct processes + m[7] = newWeightedTime(t5, 10) // faulty processes totalVotingPower = int64(83) - median = WeightedMedian(m, totalVotingPower) + median = weightedMedian(m, totalVotingPower) assert.Equal(t, t3, median) // median always returns value between values of correct processes assert.Equal(t, true, (median.After(t1) || median.Equal(t1)) && From d8642a941e3602d1f7c89d29c9d3e844e14e5919 Mon Sep 17 00:00:00 2001 From: Sam Kleinman Date: Tue, 24 Aug 2021 12:06:27 -0400 Subject: [PATCH 31/39] cmd: remove deprecated snakes (#6854) just following up on a deprecation. --- CHANGELOG_PENDING.md | 4 ++-- cmd/tendermint/commands/gen_node_key.go | 8 +++----- cmd/tendermint/commands/gen_validator.go | 8 +++----- cmd/tendermint/commands/probe_upnp.go | 8 +++----- cmd/tendermint/commands/replay.go | 6 ++---- cmd/tendermint/commands/reset_priv_validator.go | 16 ++++++---------- cmd/tendermint/commands/root.go | 8 -------- cmd/tendermint/commands/show_node_id.go | 8 +++----- cmd/tendermint/commands/show_validator.go | 8 +++----- 9 files changed, 25 insertions(+), 49 deletions(-) diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index bb5221bb5..233d11887 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -25,7 +25,7 @@ Friendly reminder: We have a [bug bounty program](https://hackerone.com/tendermi - [rpc/grpc] \#6725 Mark gRPC in the RPC layer as deprecated. - [blockchain/v2] \#6730 Fast Sync v2 is deprecated, please use v0 - [rpc] \#6820 Update RPC methods to reflect changes in the p2p layer, disabling support for `UnsafeDialPeers` and `UnsafeDialPeers` when used with the new p2p layer, and changing the response format of the peer list in `NetInfo` for all users. - + - [cli] \#6854 Remove deprecated snake case commands. (@tychoish) - Apps - [ABCI] \#6408 Change the `key` and `value` fields from `[]byte` to `string` in the `EventAttribute` type. (@alexanderbez) - [ABCI] \#5447 Remove `SetOption` method from `ABCI.Client` interface @@ -158,4 +158,4 @@ Friendly reminder: We have a [bug bounty program](https://hackerone.com/tendermi - [rpc] \#6507 Ensure RPC client can handle URLs without ports (@JayT106) - [statesync] \#6463 Adds Reverse Sync feature to fetch historical light blocks after state sync in order to verify any evidence (@cmwaters) - [fastsync] \#6590 Update the metrics during fast-sync (@JayT106) -- [gitignore] \#6668 Fix gitignore of abci-cli (@tanyabouman) \ No newline at end of file +- [gitignore] \#6668 Fix gitignore of abci-cli (@tanyabouman) diff --git a/cmd/tendermint/commands/gen_node_key.go b/cmd/tendermint/commands/gen_node_key.go index f796f4b7f..d8b493e3c 100644 --- a/cmd/tendermint/commands/gen_node_key.go +++ b/cmd/tendermint/commands/gen_node_key.go @@ -12,11 +12,9 @@ import ( // GenNodeKeyCmd allows the generation of a node key. It prints JSON-encoded // NodeKey to the standard output. var GenNodeKeyCmd = &cobra.Command{ - Use: "gen-node-key", - Aliases: []string{"gen_node_key"}, - Short: "Generate a new node key", - RunE: genNodeKey, - PreRun: deprecateSnakeCase, + Use: "gen-node-key", + Short: "Generate a new node key", + RunE: genNodeKey, } func genNodeKey(cmd *cobra.Command, args []string) error { diff --git a/cmd/tendermint/commands/gen_validator.go b/cmd/tendermint/commands/gen_validator.go index 09f84b09e..830518ce9 100644 --- a/cmd/tendermint/commands/gen_validator.go +++ b/cmd/tendermint/commands/gen_validator.go @@ -13,11 +13,9 @@ import ( // GenValidatorCmd allows the generation of a keypair for a // validator. var GenValidatorCmd = &cobra.Command{ - Use: "gen-validator", - Aliases: []string{"gen_validator"}, - Short: "Generate new validator keypair", - RunE: genValidator, - PreRun: deprecateSnakeCase, + Use: "gen-validator", + Short: "Generate new validator keypair", + RunE: genValidator, } func init() { diff --git a/cmd/tendermint/commands/probe_upnp.go b/cmd/tendermint/commands/probe_upnp.go index 4471024f9..4c71e099a 100644 --- a/cmd/tendermint/commands/probe_upnp.go +++ b/cmd/tendermint/commands/probe_upnp.go @@ -11,11 +11,9 @@ import ( // ProbeUpnpCmd adds capabilities to test the UPnP functionality. var ProbeUpnpCmd = &cobra.Command{ - Use: "probe-upnp", - Aliases: []string{"probe_upnp"}, - Short: "Test UPnP functionality", - RunE: probeUpnp, - PreRun: deprecateSnakeCase, + Use: "probe-upnp", + Short: "Test UPnP functionality", + RunE: probeUpnp, } func probeUpnp(cmd *cobra.Command, args []string) error { diff --git a/cmd/tendermint/commands/replay.go b/cmd/tendermint/commands/replay.go index 6e736bca2..e92274042 100644 --- a/cmd/tendermint/commands/replay.go +++ b/cmd/tendermint/commands/replay.go @@ -17,11 +17,9 @@ var ReplayCmd = &cobra.Command{ // ReplayConsoleCmd allows replaying of messages from the WAL in a // console. var ReplayConsoleCmd = &cobra.Command{ - Use: "replay-console", - Aliases: []string{"replay_console"}, - Short: "Replay messages from WAL in a console", + Use: "replay-console", + Short: "Replay messages from WAL in a console", Run: func(cmd *cobra.Command, args []string) { consensus.RunReplayFile(config.BaseConfig, config.Consensus, true) }, - PreRun: deprecateSnakeCase, } diff --git a/cmd/tendermint/commands/reset_priv_validator.go b/cmd/tendermint/commands/reset_priv_validator.go index 046780ef1..8745e55d8 100644 --- a/cmd/tendermint/commands/reset_priv_validator.go +++ b/cmd/tendermint/commands/reset_priv_validator.go @@ -14,11 +14,9 @@ import ( // ResetAllCmd removes the database of this Tendermint core // instance. var ResetAllCmd = &cobra.Command{ - Use: "unsafe-reset-all", - Aliases: []string{"unsafe_reset_all"}, - Short: "(unsafe) Remove all the data and WAL, reset this node's validator to genesis state", - RunE: resetAll, - PreRun: deprecateSnakeCase, + Use: "unsafe-reset-all", + Short: "(unsafe) Remove all the data and WAL, reset this node's validator to genesis state", + RunE: resetAll, } var keepAddrBook bool @@ -31,11 +29,9 @@ func init() { // ResetPrivValidatorCmd resets the private validator files. var ResetPrivValidatorCmd = &cobra.Command{ - Use: "unsafe-reset-priv-validator", - Aliases: []string{"unsafe_reset_priv_validator"}, - Short: "(unsafe) Reset this node's validator to genesis state", - RunE: resetPrivValidator, - PreRun: deprecateSnakeCase, + Use: "unsafe-reset-priv-validator", + Short: "(unsafe) Reset this node's validator to genesis state", + RunE: resetPrivValidator, } // XXX: this is totally unsafe. diff --git a/cmd/tendermint/commands/root.go b/cmd/tendermint/commands/root.go index 02f260de5..2289ae363 100644 --- a/cmd/tendermint/commands/root.go +++ b/cmd/tendermint/commands/root.go @@ -2,7 +2,6 @@ package commands import ( "fmt" - "strings" "time" "github.com/spf13/cobra" @@ -65,10 +64,3 @@ var RootCmd = &cobra.Command{ return nil }, } - -// deprecateSnakeCase is a util function for 0.34.1. Should be removed in 0.35 -func deprecateSnakeCase(cmd *cobra.Command, args []string) { - if strings.Contains(cmd.CalledAs(), "_") { - fmt.Println("Deprecated: snake_case commands will be replaced by hyphen-case commands in the next major release") - } -} diff --git a/cmd/tendermint/commands/show_node_id.go b/cmd/tendermint/commands/show_node_id.go index 7a5814c3b..488f4c322 100644 --- a/cmd/tendermint/commands/show_node_id.go +++ b/cmd/tendermint/commands/show_node_id.go @@ -8,11 +8,9 @@ import ( // ShowNodeIDCmd dumps node's ID to the standard output. var ShowNodeIDCmd = &cobra.Command{ - Use: "show-node-id", - Aliases: []string{"show_node_id"}, - Short: "Show this node's ID", - RunE: showNodeID, - PreRun: deprecateSnakeCase, + Use: "show-node-id", + Short: "Show this node's ID", + RunE: showNodeID, } func showNodeID(cmd *cobra.Command, args []string) error { diff --git a/cmd/tendermint/commands/show_validator.go b/cmd/tendermint/commands/show_validator.go index 240ed943f..47b372c61 100644 --- a/cmd/tendermint/commands/show_validator.go +++ b/cmd/tendermint/commands/show_validator.go @@ -16,11 +16,9 @@ import ( // ShowValidatorCmd adds capabilities for showing the validator info. var ShowValidatorCmd = &cobra.Command{ - Use: "show-validator", - Aliases: []string{"show_validator"}, - Short: "Show this node's validator info", - RunE: showValidator, - PreRun: deprecateSnakeCase, + Use: "show-validator", + Short: "Show this node's validator info", + RunE: showValidator, } func showValidator(cmd *cobra.Command, args []string) error { From 6d5ff590c384fcc9d1f32f4adef1c67670821394 Mon Sep 17 00:00:00 2001 From: Tess Rinearson Date: Tue, 24 Aug 2021 19:07:53 +0200 Subject: [PATCH 32/39] contributing: remove release_notes.md reference (#6846) --- .github/workflows/release.yml | 7 ++----- CONTRIBUTING.md | 2 -- release_notes.md | 1 - 3 files changed, 2 insertions(+), 8 deletions(-) delete mode 100644 release_notes.md diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 771b8ab7c..dd18e750b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,7 +2,7 @@ name: "Release" on: push: - branches: + branches: - "RC[0-9]/**" tags: - "v[0-9]+.[0-9]+.[0-9]+" # Push events to matching v*, i.e. v1.0, v20.15.10 @@ -20,9 +20,6 @@ jobs: with: go-version: '1.16' - - run: echo https://github.com/tendermint/tendermint/blob/${GITHUB_REF#refs/tags/}/CHANGELOG.md#${GITHUB_REF#refs/tags/} > ../release_notes.md - if: startsWith(github.ref, 'refs/tags/') - - name: Build uses: goreleaser/goreleaser-action@v2 if: ${{ github.event_name == 'pull_request' }} @@ -35,6 +32,6 @@ jobs: if: startsWith(github.ref, 'refs/tags/') with: version: latest - args: release --rm-dist --release-notes=../release_notes.md + args: release --rm-dist env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 79729cc1b..23bfafcdf 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -328,7 +328,6 @@ If there were no release candidates, begin by creating a backport branch, as des - Bump TMVersionDefault version in `version.go` - Bump P2P and block protocol versions in `version.go`, if necessary - Bump ABCI protocol version in `version.go`, if necessary - - Add any release notes you would like to be added to the body of the release to `release_notes.md`. 4. Open a PR with these changes against the backport branch. 5. Once these changes are on the backport branch, push a tag with prepared release details. This will trigger the actual release `v0.35.0`. @@ -355,7 +354,6 @@ To create a minor release: - Bump the ABCI version number, if necessary. (Note that ABCI follows semver, and that ABCI versions are the only versions which can change during minor releases, and only field additions are valid minor changes.) - - Add any release notes you would like to be added to the body of the release to `release_notes.md`. 4. Open a PR with these changes that will land them back on `v0.35.x` 5. Once this change has landed on the backport branch, make sure to pull it locally, then push a tag. - `git tag -a v0.35.1 -m 'Release v0.35.1'` diff --git a/release_notes.md b/release_notes.md deleted file mode 100644 index a537871c5..000000000 --- a/release_notes.md +++ /dev/null @@ -1 +0,0 @@ - From bc2b529b95fd74b05e7b966e007b31fee186867e Mon Sep 17 00:00:00 2001 From: William Banfield <4561443+williambanfield@users.noreply.github.com> Date: Tue, 24 Aug 2021 14:12:06 -0400 Subject: [PATCH 33/39] inspect: add inspect mode for debugging crashed tendermint node (#6785) EDIT: Updated, see [comment below]( https://github.com/tendermint/tendermint/pull/6785#issuecomment-897793175) This change adds a sketch of the `Debug` mode. This change adds a `Debug` struct to the node package. This `Debug` struct is intended to be created and started by a command in the `cmd` directory. The `Debug` struct runs the RPC server on the data directories: both the state store and the block store. This change required a good deal of refactoring. Namely, a new `rpc.go` file was added to the `node` package. This file encapsulates functions for starting RPC servers used by nodes. A potential additional change is to further factor this code into shared code _in_ the `rpc` package. Minor API tweaks were also made that seemed appropriate such as the mechanism for fetching routes from the `rpc/core` package. Additional work is required to register the `Debug` service as a command in the `cmd` directory but I am looking for feedback on if this direction seems appropriate before diving much further. closes: #5908 --- CHANGELOG_PENDING.md | 3 + cmd/tendermint/commands/inspect.go | 87 ++++ cmd/tendermint/main.go | 1 + docs/tools/debugging/README.md | 27 ++ docs/tools/debugging/pro.md | 35 +- go.mod | 1 + go.sum | 1 + inspect/doc.go | 36 ++ inspect/inspect.go | 149 +++++++ inspect/inspect_test.go | 583 +++++++++++++++++++++++++ inspect/rpc/rpc.go | 143 ++++++ light/proxy/proxy.go | 2 +- node/node.go | 27 +- node/setup.go | 58 +-- rpc/core/env.go | 17 +- rpc/jsonrpc/jsonrpc_test.go | 4 +- rpc/jsonrpc/server/http_server.go | 6 +- rpc/jsonrpc/server/http_server_test.go | 3 +- rpc/jsonrpc/test/main.go | 2 +- state/indexer/indexer_service.go | 66 +-- state/indexer/sink/sink.go | 65 +++ 21 files changed, 1200 insertions(+), 116 deletions(-) create mode 100644 cmd/tendermint/commands/inspect.go create mode 100644 inspect/doc.go create mode 100644 inspect/inspect.go create mode 100644 inspect/inspect_test.go create mode 100644 inspect/rpc/rpc.go create mode 100644 state/indexer/sink/sink.go diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index 233d11887..6c25ef89e 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -24,6 +24,8 @@ Friendly reminder: We have a [bug bounty program](https://hackerone.com/tendermi - [fastsync/rpc] \#6620 Add TotalSyncedTime & RemainingTime to SyncInfo in /status RPC (@JayT106) - [rpc/grpc] \#6725 Mark gRPC in the RPC layer as deprecated. - [blockchain/v2] \#6730 Fast Sync v2 is deprecated, please use v0 + - [rpc] Add genesis_chunked method to support paginated and parallel fetching of large genesis documents. + - [rpc/jsonrpc/server] \#6785 `Listen` function updated to take an `int` argument, `maxOpenConnections`, instead of an entire config object. (@williambanfield) - [rpc] \#6820 Update RPC methods to reflect changes in the p2p layer, disabling support for `UnsafeDialPeers` and `UnsafeDialPeers` when used with the new p2p layer, and changing the response format of the peer list in `NetInfo` for all users. - [cli] \#6854 Remove deprecated snake case commands. (@tychoish) - Apps @@ -105,6 +107,7 @@ Friendly reminder: We have a [bug bounty program](https://hackerone.com/tendermi - [config/indexer] \#6411 Introduce support for custom event indexing data sources, specifically PostgreSQL. (@JayT106) - [fastsync/event] \#6619 Emit fastsync status event when switching consensus/fastsync (@JayT106) - [statesync/event] \#6700 Emit statesync status start/end event (@JayT106) +- [inspect] \#6785 Add a new `inspect` command for introspecting the state and block store of a crashed tendermint node. (@williambanfield) ### IMPROVEMENTS diff --git a/cmd/tendermint/commands/inspect.go b/cmd/tendermint/commands/inspect.go new file mode 100644 index 000000000..de31d33d4 --- /dev/null +++ b/cmd/tendermint/commands/inspect.go @@ -0,0 +1,87 @@ +package commands + +import ( + "context" + "os" + "os/signal" + "syscall" + + "github.com/spf13/cobra" + + cfg "github.com/tendermint/tendermint/config" + "github.com/tendermint/tendermint/inspect" + "github.com/tendermint/tendermint/state" + "github.com/tendermint/tendermint/state/indexer/sink" + "github.com/tendermint/tendermint/store" + "github.com/tendermint/tendermint/types" +) + +// InspectCmd is the command for starting an inspect server. +var InspectCmd = &cobra.Command{ + Use: "inspect", + Short: "Run an inspect server for investigating Tendermint state", + Long: ` + inspect runs a subset of Tendermint's RPC endpoints that are useful for debugging + issues with Tendermint. + + When the Tendermint consensus engine detects inconsistent state, it will crash the + tendermint process. Tendermint will not start up while in this inconsistent state. + The inspect command can be used to query the block and state store using Tendermint + RPC calls to debug issues of inconsistent state. + `, + + RunE: runInspect, +} + +func init() { + InspectCmd.Flags(). + String("rpc.laddr", + config.RPC.ListenAddress, "RPC listenener address. Port required") + InspectCmd.Flags(). + String("db-backend", + config.DBBackend, "database backend: goleveldb | cleveldb | boltdb | rocksdb | badgerdb") + InspectCmd.Flags(). + String("db-dir", config.DBPath, "database directory") +} + +func runInspect(cmd *cobra.Command, args []string) error { + ctx, cancel := context.WithCancel(cmd.Context()) + defer cancel() + + c := make(chan os.Signal, 1) + signal.Notify(c, syscall.SIGTERM, syscall.SIGINT) + go func() { + <-c + cancel() + }() + + blockStoreDB, err := cfg.DefaultDBProvider(&cfg.DBContext{ID: "blockstore", Config: config}) + if err != nil { + return err + } + blockStore := store.NewBlockStore(blockStoreDB) + stateDB, err := cfg.DefaultDBProvider(&cfg.DBContext{ID: "state", Config: config}) + if err != nil { + if err := blockStoreDB.Close(); err != nil { + logger.Error("error closing block store db", "error", err) + } + return err + } + genDoc, err := types.GenesisDocFromFile(config.GenesisFile()) + if err != nil { + return err + } + sinks, err := sink.EventSinksFromConfig(config, cfg.DefaultDBProvider, genDoc.ChainID) + if err != nil { + return err + } + stateStore := state.NewStore(stateDB) + + ins := inspect.New(config.RPC, blockStore, stateStore, sinks, logger) + + logger.Info("starting inspect server") + if err := ins.Run(ctx); err != nil { + return err + } + return nil +} diff --git a/cmd/tendermint/main.go b/cmd/tendermint/main.go index b092f5645..c006c297d 100644 --- a/cmd/tendermint/main.go +++ b/cmd/tendermint/main.go @@ -28,6 +28,7 @@ func main() { cmd.ShowNodeIDCmd, cmd.GenNodeKeyCmd, cmd.VersionCmd, + cmd.InspectCmd, cmd.MakeKeyMigrateCommand(), debug.DebugCmd, cli.NewCompletionCmd(rootCmd, true), diff --git a/docs/tools/debugging/README.md b/docs/tools/debugging/README.md index 2932f6e86..053b43624 100644 --- a/docs/tools/debugging/README.md +++ b/docs/tools/debugging/README.md @@ -62,3 +62,30 @@ given destination directory. Each archive will contain: Note: goroutine.out and heap.out will only be written if a profile address is provided and is operational. This command is blocking and will log any error. + +## Tendermint Inspect + +Tendermint includes an `inspect` command for querying Tendermint's state store and block +store over Tendermint RPC. + +When the Tendermint consensus engine detects inconsistent state, it will crash the +entire Tendermint process. +While in this inconsistent state, a node running Tendermint's consensus engine will not start up. +The `inspect` command runs only a subset of Tendermint's RPC endpoints for querying the block store +and state store. +`inspect` allows operators to query a read-only view of the stage. +`inspect` does not run the consensus engine at all and can therefore be used to debug +processes that have crashed due to inconsistent state. + + +To start the `inspect` process, run +```bash +tendermint inspect +``` + +### RPC endpoints +The list of available RPC endpoints can be found by making a request to the RPC port. +For an `inspect` process running on `127.0.0.1:26657`, navigate your browser to +`http://127.0.0.1:26657/` to retrieve the list of enabled RPC endpoints. + +Additional information on the Tendermint RPC endpoints can be found in the [rpc documentation](https://docs.tendermint.com/master/rpc). diff --git a/docs/tools/debugging/pro.md b/docs/tools/debugging/pro.md index 3342deb49..b43ed5cba 100644 --- a/docs/tools/debugging/pro.md +++ b/docs/tools/debugging/pro.md @@ -64,13 +64,42 @@ It won’t kill the node, but it will gather all of the above data and package i At this point, depending on how severe the degradation is, you may want to restart the process. +## Tendermint Inspect + +What if the Tendermint node will not start up due to inconsistent consensus state? + +When a node running the Tendermint consensus engine detects an inconsistent state +it will crash the entire Tendermint process. +The Tendermint consensus engine cannot be run in this inconsistent state and the so node +will fail to start up as a result. +The Tendermint RPC server can provide valuable information for debugging in this situation. +The Tendermint `inspect` command will run a subset of the Tendermint RPC server +that is useful for debugging inconsistent state. + +### Running inspect + +Start up the `inspect` tool on the machine where Tendermint crashed using: +```bash +tendermint inspect --home= +``` + +`inspect` will use the data directory specified in your Tendermint configuration file. +`inspect` will also run the RPC server at the address specified in your Tendermint configuration file. + +### Using inspect + +With the `inspect` server running, you can access RPC endpoints that are critically important +for debugging. +Calling the `/status`, `/consensus_state` and `/dump_consensus_state` RPC endpoint +will return useful information about the Tendermint consensus state. + ## Outro -We’re hoping that the `tendermint debug` subcommand will become de facto the first response to any accidents. +We’re hoping that these Tendermint tools will become de facto the first response for any accidents. -Let us know what your experience has been so far! Have you had a chance to try `tendermint debug` yet? +Let us know what your experience has been so far! Have you had a chance to try `tendermint debug` or `tendermint inspect` yet? -Join our chat, where we discuss the current issues and future improvements. +Join our [discord chat](https://discord.gg/vcExX9T), where we discuss the current issues and future improvements. — diff --git a/go.mod b/go.mod index 35272bea1..c7723b096 100644 --- a/go.mod +++ b/go.mod @@ -37,6 +37,7 @@ require ( github.com/vektra/mockery/v2 v2.9.0 golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 + golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect google.golang.org/grpc v1.40.0 gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect pgregory.net/rapid v0.4.7 diff --git a/go.sum b/go.sum index 74f189d5c..fff11dad3 100644 --- a/go.sum +++ b/go.sum @@ -1075,6 +1075,7 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= diff --git a/inspect/doc.go b/inspect/doc.go new file mode 100644 index 000000000..c53049e1a --- /dev/null +++ b/inspect/doc.go @@ -0,0 +1,36 @@ +/* +Package inspect provides a tool for investigating the state of a +failed Tendermint node. + +This package provides the Inspector type. The Inspector type runs a subset of the Tendermint +RPC endpoints that are useful for debugging issues with Tendermint consensus. + +When a node running the Tendermint consensus engine detects an inconsistent consensus state, +the entire node will crash. The Tendermint consensus engine cannot run in this +inconsistent state so the node will not be able to start up again. + +The RPC endpoints provided by the Inspector type allow for a node operator to inspect +the block store and state store to better understand what may have caused the inconsistent state. + + +The Inspector type's lifecycle is controlled by a context.Context + ins := inspect.NewFromConfig(rpcConfig) + ctx, cancelFunc:= context.WithCancel(context.Background()) + + // Run blocks until the Inspector server is shut down. + go ins.Run(ctx) + ... + + // calling the cancel function will stop the running inspect server + cancelFunc() + +Inspector serves its RPC endpoints on the address configured in the RPC configuration + + rpcConfig.ListenAddress = "tcp://127.0.0.1:26657" + ins := inspect.NewFromConfig(rpcConfig) + go ins.Run(ctx) + +The list of available RPC endpoints can then be viewed by navigating to +http://127.0.0.1:26657/ in the web browser. +*/ +package inspect diff --git a/inspect/inspect.go b/inspect/inspect.go new file mode 100644 index 000000000..38bc9ed5d --- /dev/null +++ b/inspect/inspect.go @@ -0,0 +1,149 @@ +package inspect + +import ( + "context" + "errors" + "fmt" + "net" + + "github.com/tendermint/tendermint/config" + "github.com/tendermint/tendermint/inspect/rpc" + "github.com/tendermint/tendermint/libs/log" + tmstrings "github.com/tendermint/tendermint/libs/strings" + rpccore "github.com/tendermint/tendermint/rpc/core" + "github.com/tendermint/tendermint/state" + "github.com/tendermint/tendermint/state/indexer" + "github.com/tendermint/tendermint/state/indexer/sink" + "github.com/tendermint/tendermint/store" + "github.com/tendermint/tendermint/types" + + "golang.org/x/sync/errgroup" +) + +// Inspector manages an RPC service that exports methods to debug a failed node. +// After a node shuts down due to a consensus failure, it will no longer start +// up its state cannot easily be inspected. An Inspector value provides a similar interface +// to the node, using the underlying Tendermint data stores, without bringing up +// any other components. A caller can query the Inspector service to inspect the +// persisted state and debug the failure. +type Inspector struct { + routes rpccore.RoutesMap + + config *config.RPCConfig + + indexerService *indexer.Service + eventBus *types.EventBus + logger log.Logger +} + +// New returns an Inspector that serves RPC on the specified BlockStore and StateStore. +// The Inspector type does not modify the state or block stores. +// The sinks are used to enable block and transaction querying via the RPC server. +// The caller is responsible for starting and stopping the Inspector service. +/// +//nolint:lll +func New(cfg *config.RPCConfig, bs state.BlockStore, ss state.Store, es []indexer.EventSink, logger log.Logger) *Inspector { + routes := rpc.Routes(*cfg, ss, bs, es, logger) + eb := types.NewEventBus() + eb.SetLogger(logger.With("module", "events")) + is := indexer.NewIndexerService(es, eb) + is.SetLogger(logger.With("module", "txindex")) + return &Inspector{ + routes: routes, + config: cfg, + logger: logger, + eventBus: eb, + indexerService: is, + } +} + +// NewFromConfig constructs an Inspector using the values defined in the passed in config. +func NewFromConfig(cfg *config.Config) (*Inspector, error) { + bsDB, err := config.DefaultDBProvider(&config.DBContext{ID: "blockstore", Config: cfg}) + if err != nil { + return nil, err + } + bs := store.NewBlockStore(bsDB) + sDB, err := config.DefaultDBProvider(&config.DBContext{ID: "state", Config: cfg}) + if err != nil { + return nil, err + } + genDoc, err := types.GenesisDocFromFile(cfg.GenesisFile()) + if err != nil { + return nil, err + } + sinks, err := sink.EventSinksFromConfig(cfg, config.DefaultDBProvider, genDoc.ChainID) + if err != nil { + return nil, err + } + logger := log.MustNewDefaultLogger(log.LogFormatPlain, log.LogLevelInfo, false) + ss := state.NewStore(sDB) + return New(cfg.RPC, bs, ss, sinks, logger), nil +} + +// Run starts the Inspector servers and blocks until the servers shut down. The passed +// in context is used to control the lifecycle of the servers. +func (ins *Inspector) Run(ctx context.Context) error { + err := ins.eventBus.Start() + if err != nil { + return fmt.Errorf("error starting event bus: %s", err) + } + defer func() { + err := ins.eventBus.Stop() + if err != nil { + ins.logger.Error("event bus stopped with error", "err", err) + } + }() + err = ins.indexerService.Start() + if err != nil { + return fmt.Errorf("error starting indexer service: %s", err) + } + defer func() { + err := ins.indexerService.Stop() + if err != nil { + ins.logger.Error("indexer service stopped with error", "err", err) + } + }() + return startRPCServers(ctx, ins.config, ins.logger, ins.routes) +} + +func startRPCServers(ctx context.Context, cfg *config.RPCConfig, logger log.Logger, routes rpccore.RoutesMap) error { + g, tctx := errgroup.WithContext(ctx) + listenAddrs := tmstrings.SplitAndTrimEmpty(cfg.ListenAddress, ",", " ") + rh := rpc.Handler(cfg, routes, logger) + for _, listenerAddr := range listenAddrs { + server := rpc.Server{ + Logger: logger, + Config: cfg, + Handler: rh, + Addr: listenerAddr, + } + if cfg.IsTLSEnabled() { + keyFile := cfg.KeyFile() + certFile := cfg.CertFile() + listenerAddr := listenerAddr + g.Go(func() error { + logger.Info("RPC HTTPS server starting", "address", listenerAddr, + "certfile", certFile, "keyfile", keyFile) + err := server.ListenAndServeTLS(tctx, certFile, keyFile) + if !errors.Is(err, net.ErrClosed) { + return err + } + logger.Info("RPC HTTPS server stopped", "address", listenerAddr) + return nil + }) + } else { + listenerAddr := listenerAddr + g.Go(func() error { + logger.Info("RPC HTTP server starting", "address", listenerAddr) + err := server.ListenAndServe(tctx) + if !errors.Is(err, net.ErrClosed) { + return err + } + logger.Info("RPC HTTP server stopped", "address", listenerAddr) + return nil + }) + } + } + return g.Wait() +} diff --git a/inspect/inspect_test.go b/inspect/inspect_test.go new file mode 100644 index 000000000..c2a1df571 --- /dev/null +++ b/inspect/inspect_test.go @@ -0,0 +1,583 @@ +package inspect_test + +import ( + "context" + "fmt" + "net" + "os" + "strings" + "sync" + "testing" + "time" + + "github.com/fortytw2/leaktest" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + abcitypes "github.com/tendermint/tendermint/abci/types" + "github.com/tendermint/tendermint/config" + "github.com/tendermint/tendermint/inspect" + "github.com/tendermint/tendermint/libs/log" + "github.com/tendermint/tendermint/libs/pubsub/query" + "github.com/tendermint/tendermint/proto/tendermint/state" + httpclient "github.com/tendermint/tendermint/rpc/client/http" + "github.com/tendermint/tendermint/state/indexer" + indexermocks "github.com/tendermint/tendermint/state/indexer/mocks" + statemocks "github.com/tendermint/tendermint/state/mocks" + "github.com/tendermint/tendermint/types" +) + +func TestInspectConstructor(t *testing.T) { + cfg := config.ResetTestRoot("test") + t.Cleanup(leaktest.Check(t)) + defer func() { _ = os.RemoveAll(cfg.RootDir) }() + t.Run("from config", func(t *testing.T) { + d, err := inspect.NewFromConfig(cfg) + require.NoError(t, err) + require.NotNil(t, d) + }) + +} + +func TestInspectRun(t *testing.T) { + cfg := config.ResetTestRoot("test") + t.Cleanup(leaktest.Check(t)) + defer func() { _ = os.RemoveAll(cfg.RootDir) }() + t.Run("from config", func(t *testing.T) { + d, err := inspect.NewFromConfig(cfg) + require.NoError(t, err) + ctx, cancel := context.WithCancel(context.Background()) + stoppedWG := &sync.WaitGroup{} + stoppedWG.Add(1) + go func() { + require.NoError(t, d.Run(ctx)) + stoppedWG.Done() + }() + cancel() + stoppedWG.Wait() + }) + +} + +func TestBlock(t *testing.T) { + testHeight := int64(1) + testBlock := new(types.Block) + testBlock.Header.Height = testHeight + testBlock.Header.LastCommitHash = []byte("test hash") + stateStoreMock := &statemocks.Store{} + + blockStoreMock := &statemocks.BlockStore{} + blockStoreMock.On("Height").Return(testHeight) + blockStoreMock.On("Base").Return(int64(0)) + blockStoreMock.On("LoadBlockMeta", testHeight).Return(&types.BlockMeta{}) + blockStoreMock.On("LoadBlock", testHeight).Return(testBlock) + eventSinkMock := &indexermocks.EventSink{} + eventSinkMock.On("Stop").Return(nil) + + rpcConfig := config.TestRPCConfig() + l := log.TestingLogger() + d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}, l) + ctx, cancel := context.WithCancel(context.Background()) + wg := &sync.WaitGroup{} + wg.Add(1) + + startedWG := &sync.WaitGroup{} + startedWG.Add(1) + go func() { + startedWG.Done() + defer wg.Done() + require.NoError(t, d.Run(ctx)) + }() + // FIXME: used to induce context switch. + // Determine more deterministic method for prompting a context switch + startedWG.Wait() + requireConnect(t, rpcConfig.ListenAddress, 20) + cli, err := httpclient.New(rpcConfig.ListenAddress) + require.NoError(t, err) + resultBlock, err := cli.Block(context.Background(), &testHeight) + require.NoError(t, err) + require.Equal(t, testBlock.Height, resultBlock.Block.Height) + require.Equal(t, testBlock.LastCommitHash, resultBlock.Block.LastCommitHash) + cancel() + wg.Wait() + + blockStoreMock.AssertExpectations(t) + stateStoreMock.AssertExpectations(t) +} + +func TestTxSearch(t *testing.T) { + testHash := []byte("test") + testTx := []byte("tx") + testQuery := fmt.Sprintf("tx.hash='%s'", string(testHash)) + testTxResult := &abcitypes.TxResult{ + Height: 1, + Index: 100, + Tx: testTx, + } + + stateStoreMock := &statemocks.Store{} + blockStoreMock := &statemocks.BlockStore{} + eventSinkMock := &indexermocks.EventSink{} + eventSinkMock.On("Stop").Return(nil) + eventSinkMock.On("Type").Return(indexer.KV) + eventSinkMock.On("SearchTxEvents", mock.Anything, + mock.MatchedBy(func(q *query.Query) bool { return testQuery == q.String() })). + Return([]*abcitypes.TxResult{testTxResult}, nil) + + rpcConfig := config.TestRPCConfig() + l := log.TestingLogger() + d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}, l) + ctx, cancel := context.WithCancel(context.Background()) + wg := &sync.WaitGroup{} + wg.Add(1) + + startedWG := &sync.WaitGroup{} + startedWG.Add(1) + go func() { + startedWG.Done() + defer wg.Done() + require.NoError(t, d.Run(ctx)) + }() + // FIXME: used to induce context switch. + // Determine more deterministic method for prompting a context switch + startedWG.Wait() + requireConnect(t, rpcConfig.ListenAddress, 20) + cli, err := httpclient.New(rpcConfig.ListenAddress) + require.NoError(t, err) + + var page = 1 + resultTxSearch, err := cli.TxSearch(context.Background(), testQuery, false, &page, &page, "") + require.NoError(t, err) + require.Len(t, resultTxSearch.Txs, 1) + require.Equal(t, types.Tx(testTx), resultTxSearch.Txs[0].Tx) + + cancel() + wg.Wait() + + eventSinkMock.AssertExpectations(t) + stateStoreMock.AssertExpectations(t) + blockStoreMock.AssertExpectations(t) +} +func TestTx(t *testing.T) { + testHash := []byte("test") + testTx := []byte("tx") + + stateStoreMock := &statemocks.Store{} + blockStoreMock := &statemocks.BlockStore{} + eventSinkMock := &indexermocks.EventSink{} + eventSinkMock.On("Stop").Return(nil) + eventSinkMock.On("Type").Return(indexer.KV) + eventSinkMock.On("GetTxByHash", testHash).Return(&abcitypes.TxResult{ + Tx: testTx, + }, nil) + + rpcConfig := config.TestRPCConfig() + l := log.TestingLogger() + d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}, l) + ctx, cancel := context.WithCancel(context.Background()) + wg := &sync.WaitGroup{} + wg.Add(1) + + startedWG := &sync.WaitGroup{} + startedWG.Add(1) + go func() { + startedWG.Done() + defer wg.Done() + require.NoError(t, d.Run(ctx)) + }() + // FIXME: used to induce context switch. + // Determine more deterministic method for prompting a context switch + startedWG.Wait() + requireConnect(t, rpcConfig.ListenAddress, 20) + cli, err := httpclient.New(rpcConfig.ListenAddress) + require.NoError(t, err) + + res, err := cli.Tx(context.Background(), testHash, false) + require.NoError(t, err) + require.Equal(t, types.Tx(testTx), res.Tx) + + cancel() + wg.Wait() + + eventSinkMock.AssertExpectations(t) + stateStoreMock.AssertExpectations(t) + blockStoreMock.AssertExpectations(t) +} +func TestConsensusParams(t *testing.T) { + testHeight := int64(1) + testMaxGas := int64(55) + stateStoreMock := &statemocks.Store{} + blockStoreMock := &statemocks.BlockStore{} + blockStoreMock.On("Height").Return(testHeight) + blockStoreMock.On("Base").Return(int64(0)) + stateStoreMock.On("LoadConsensusParams", testHeight).Return(types.ConsensusParams{ + Block: types.BlockParams{ + MaxGas: testMaxGas, + }, + }, nil) + eventSinkMock := &indexermocks.EventSink{} + eventSinkMock.On("Stop").Return(nil) + rpcConfig := config.TestRPCConfig() + l := log.TestingLogger() + d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}, l) + + ctx, cancel := context.WithCancel(context.Background()) + wg := &sync.WaitGroup{} + wg.Add(1) + + startedWG := &sync.WaitGroup{} + startedWG.Add(1) + go func() { + startedWG.Done() + defer wg.Done() + require.NoError(t, d.Run(ctx)) + }() + // FIXME: used to induce context switch. + // Determine more deterministic method for prompting a context switch + startedWG.Wait() + requireConnect(t, rpcConfig.ListenAddress, 20) + cli, err := httpclient.New(rpcConfig.ListenAddress) + require.NoError(t, err) + params, err := cli.ConsensusParams(context.Background(), &testHeight) + require.NoError(t, err) + require.Equal(t, params.ConsensusParams.Block.MaxGas, testMaxGas) + + cancel() + wg.Wait() + + blockStoreMock.AssertExpectations(t) + stateStoreMock.AssertExpectations(t) +} + +func TestBlockResults(t *testing.T) { + testHeight := int64(1) + testGasUsed := int64(100) + stateStoreMock := &statemocks.Store{} + // tmstate "github.com/tendermint/tendermint/proto/tendermint/state" + stateStoreMock.On("LoadABCIResponses", testHeight).Return(&state.ABCIResponses{ + DeliverTxs: []*abcitypes.ResponseDeliverTx{ + { + GasUsed: testGasUsed, + }, + }, + EndBlock: &abcitypes.ResponseEndBlock{}, + BeginBlock: &abcitypes.ResponseBeginBlock{}, + }, nil) + blockStoreMock := &statemocks.BlockStore{} + blockStoreMock.On("Base").Return(int64(0)) + blockStoreMock.On("Height").Return(testHeight) + eventSinkMock := &indexermocks.EventSink{} + eventSinkMock.On("Stop").Return(nil) + rpcConfig := config.TestRPCConfig() + l := log.TestingLogger() + d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}, l) + + ctx, cancel := context.WithCancel(context.Background()) + wg := &sync.WaitGroup{} + wg.Add(1) + + startedWG := &sync.WaitGroup{} + startedWG.Add(1) + go func() { + startedWG.Done() + defer wg.Done() + require.NoError(t, d.Run(ctx)) + }() + // FIXME: used to induce context switch. + // Determine more deterministic method for prompting a context switch + startedWG.Wait() + requireConnect(t, rpcConfig.ListenAddress, 20) + cli, err := httpclient.New(rpcConfig.ListenAddress) + require.NoError(t, err) + res, err := cli.BlockResults(context.Background(), &testHeight) + require.NoError(t, err) + require.Equal(t, res.TotalGasUsed, testGasUsed) + + cancel() + wg.Wait() + + blockStoreMock.AssertExpectations(t) + stateStoreMock.AssertExpectations(t) +} + +func TestCommit(t *testing.T) { + testHeight := int64(1) + testRound := int32(101) + stateStoreMock := &statemocks.Store{} + blockStoreMock := &statemocks.BlockStore{} + blockStoreMock.On("Base").Return(int64(0)) + blockStoreMock.On("Height").Return(testHeight) + blockStoreMock.On("LoadBlockMeta", testHeight).Return(&types.BlockMeta{}, nil) + blockStoreMock.On("LoadSeenCommit").Return(&types.Commit{ + Height: testHeight, + Round: testRound, + }, nil) + eventSinkMock := &indexermocks.EventSink{} + eventSinkMock.On("Stop").Return(nil) + rpcConfig := config.TestRPCConfig() + l := log.TestingLogger() + d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}, l) + + ctx, cancel := context.WithCancel(context.Background()) + wg := &sync.WaitGroup{} + wg.Add(1) + + startedWG := &sync.WaitGroup{} + startedWG.Add(1) + go func() { + startedWG.Done() + defer wg.Done() + require.NoError(t, d.Run(ctx)) + }() + // FIXME: used to induce context switch. + // Determine more deterministic method for prompting a context switch + startedWG.Wait() + requireConnect(t, rpcConfig.ListenAddress, 20) + cli, err := httpclient.New(rpcConfig.ListenAddress) + require.NoError(t, err) + res, err := cli.Commit(context.Background(), &testHeight) + require.NoError(t, err) + require.NotNil(t, res) + require.Equal(t, res.SignedHeader.Commit.Round, testRound) + + cancel() + wg.Wait() + + blockStoreMock.AssertExpectations(t) + stateStoreMock.AssertExpectations(t) +} + +func TestBlockByHash(t *testing.T) { + testHeight := int64(1) + testHash := []byte("test hash") + testBlock := new(types.Block) + testBlock.Header.Height = testHeight + testBlock.Header.LastCommitHash = testHash + stateStoreMock := &statemocks.Store{} + blockStoreMock := &statemocks.BlockStore{} + blockStoreMock.On("LoadBlockMeta", testHeight).Return(&types.BlockMeta{ + BlockID: types.BlockID{ + Hash: testHash, + }, + Header: types.Header{ + Height: testHeight, + }, + }, nil) + blockStoreMock.On("LoadBlockByHash", testHash).Return(testBlock, nil) + eventSinkMock := &indexermocks.EventSink{} + eventSinkMock.On("Stop").Return(nil) + rpcConfig := config.TestRPCConfig() + l := log.TestingLogger() + d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}, l) + + ctx, cancel := context.WithCancel(context.Background()) + wg := &sync.WaitGroup{} + wg.Add(1) + + startedWG := &sync.WaitGroup{} + startedWG.Add(1) + go func() { + startedWG.Done() + defer wg.Done() + require.NoError(t, d.Run(ctx)) + }() + // FIXME: used to induce context switch. + // Determine more deterministic method for prompting a context switch + startedWG.Wait() + requireConnect(t, rpcConfig.ListenAddress, 20) + cli, err := httpclient.New(rpcConfig.ListenAddress) + require.NoError(t, err) + res, err := cli.BlockByHash(context.Background(), testHash) + require.NoError(t, err) + require.NotNil(t, res) + require.Equal(t, []byte(res.BlockID.Hash), testHash) + + cancel() + wg.Wait() + + blockStoreMock.AssertExpectations(t) + stateStoreMock.AssertExpectations(t) +} + +func TestBlockchain(t *testing.T) { + testHeight := int64(1) + testBlock := new(types.Block) + testBlockHash := []byte("test hash") + testBlock.Header.Height = testHeight + testBlock.Header.LastCommitHash = testBlockHash + stateStoreMock := &statemocks.Store{} + + blockStoreMock := &statemocks.BlockStore{} + blockStoreMock.On("Height").Return(testHeight) + blockStoreMock.On("Base").Return(int64(0)) + blockStoreMock.On("LoadBlockMeta", testHeight).Return(&types.BlockMeta{ + BlockID: types.BlockID{ + Hash: testBlockHash, + }, + }) + eventSinkMock := &indexermocks.EventSink{} + eventSinkMock.On("Stop").Return(nil) + rpcConfig := config.TestRPCConfig() + l := log.TestingLogger() + d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}, l) + + ctx, cancel := context.WithCancel(context.Background()) + wg := &sync.WaitGroup{} + wg.Add(1) + + startedWG := &sync.WaitGroup{} + startedWG.Add(1) + go func() { + startedWG.Done() + defer wg.Done() + require.NoError(t, d.Run(ctx)) + }() + // FIXME: used to induce context switch. + // Determine more deterministic method for prompting a context switch + startedWG.Wait() + requireConnect(t, rpcConfig.ListenAddress, 20) + cli, err := httpclient.New(rpcConfig.ListenAddress) + require.NoError(t, err) + res, err := cli.BlockchainInfo(context.Background(), 0, 100) + require.NoError(t, err) + require.NotNil(t, res) + require.Equal(t, testBlockHash, []byte(res.BlockMetas[0].BlockID.Hash)) + + cancel() + wg.Wait() + + blockStoreMock.AssertExpectations(t) + stateStoreMock.AssertExpectations(t) +} + +func TestValidators(t *testing.T) { + testHeight := int64(1) + testVotingPower := int64(100) + testValidators := types.ValidatorSet{ + Validators: []*types.Validator{ + { + VotingPower: testVotingPower, + }, + }, + } + stateStoreMock := &statemocks.Store{} + stateStoreMock.On("LoadValidators", testHeight).Return(&testValidators, nil) + + blockStoreMock := &statemocks.BlockStore{} + blockStoreMock.On("Height").Return(testHeight) + blockStoreMock.On("Base").Return(int64(0)) + eventSinkMock := &indexermocks.EventSink{} + eventSinkMock.On("Stop").Return(nil) + rpcConfig := config.TestRPCConfig() + l := log.TestingLogger() + d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}, l) + + ctx, cancel := context.WithCancel(context.Background()) + wg := &sync.WaitGroup{} + wg.Add(1) + + startedWG := &sync.WaitGroup{} + startedWG.Add(1) + go func() { + startedWG.Done() + defer wg.Done() + require.NoError(t, d.Run(ctx)) + }() + // FIXME: used to induce context switch. + // Determine more deterministic method for prompting a context switch + startedWG.Wait() + requireConnect(t, rpcConfig.ListenAddress, 20) + cli, err := httpclient.New(rpcConfig.ListenAddress) + require.NoError(t, err) + + testPage := 1 + testPerPage := 100 + res, err := cli.Validators(context.Background(), &testHeight, &testPage, &testPerPage) + require.NoError(t, err) + require.NotNil(t, res) + require.Equal(t, testVotingPower, res.Validators[0].VotingPower) + + cancel() + wg.Wait() + + blockStoreMock.AssertExpectations(t) + stateStoreMock.AssertExpectations(t) +} + +func TestBlockSearch(t *testing.T) { + testHeight := int64(1) + testBlockHash := []byte("test hash") + testQuery := "block.height = 1" + stateStoreMock := &statemocks.Store{} + + blockStoreMock := &statemocks.BlockStore{} + eventSinkMock := &indexermocks.EventSink{} + eventSinkMock.On("Stop").Return(nil) + eventSinkMock.On("Type").Return(indexer.KV) + blockStoreMock.On("LoadBlock", testHeight).Return(&types.Block{ + Header: types.Header{ + Height: testHeight, + }, + }, nil) + blockStoreMock.On("LoadBlockMeta", testHeight).Return(&types.BlockMeta{ + BlockID: types.BlockID{ + Hash: testBlockHash, + }, + }) + eventSinkMock.On("SearchBlockEvents", mock.Anything, + mock.MatchedBy(func(q *query.Query) bool { return testQuery == q.String() })). + Return([]int64{testHeight}, nil) + rpcConfig := config.TestRPCConfig() + l := log.TestingLogger() + d := inspect.New(rpcConfig, blockStoreMock, stateStoreMock, []indexer.EventSink{eventSinkMock}, l) + + ctx, cancel := context.WithCancel(context.Background()) + wg := &sync.WaitGroup{} + wg.Add(1) + + startedWG := &sync.WaitGroup{} + startedWG.Add(1) + go func() { + startedWG.Done() + defer wg.Done() + require.NoError(t, d.Run(ctx)) + }() + // FIXME: used to induce context switch. + // Determine more deterministic method for prompting a context switch + startedWG.Wait() + requireConnect(t, rpcConfig.ListenAddress, 20) + cli, err := httpclient.New(rpcConfig.ListenAddress) + require.NoError(t, err) + + testPage := 1 + testPerPage := 100 + testOrderBy := "desc" + res, err := cli.BlockSearch(context.Background(), testQuery, &testPage, &testPerPage, testOrderBy) + require.NoError(t, err) + require.NotNil(t, res) + require.Equal(t, testBlockHash, []byte(res.Blocks[0].BlockID.Hash)) + + cancel() + wg.Wait() + + blockStoreMock.AssertExpectations(t) + stateStoreMock.AssertExpectations(t) +} + +func requireConnect(t testing.TB, addr string, retries int) { + parts := strings.SplitN(addr, "://", 2) + if len(parts) != 2 { + t.Fatalf("malformed address to dial: %s", addr) + } + var err error + for i := 0; i < retries; i++ { + var conn net.Conn + conn, err = net.Dial(parts[0], parts[1]) + if err == nil { + conn.Close() + return + } + // FIXME attempt to yield and let the other goroutine continue execution. + time.Sleep(time.Microsecond * 100) + } + t.Fatalf("unable to connect to server %s after %d tries: %s", addr, retries, err) +} diff --git a/inspect/rpc/rpc.go b/inspect/rpc/rpc.go new file mode 100644 index 000000000..76dcda4eb --- /dev/null +++ b/inspect/rpc/rpc.go @@ -0,0 +1,143 @@ +package rpc + +import ( + "context" + "net/http" + "time" + + "github.com/rs/cors" + + "github.com/tendermint/tendermint/config" + "github.com/tendermint/tendermint/internal/consensus" + "github.com/tendermint/tendermint/libs/log" + "github.com/tendermint/tendermint/libs/pubsub" + "github.com/tendermint/tendermint/rpc/core" + "github.com/tendermint/tendermint/rpc/jsonrpc/server" + "github.com/tendermint/tendermint/state" + "github.com/tendermint/tendermint/state/indexer" + "github.com/tendermint/tendermint/types" +) + +// Server defines parameters for running an Inspector rpc server. +type Server struct { + Addr string // TCP address to listen on, ":http" if empty + Handler http.Handler + Logger log.Logger + Config *config.RPCConfig +} + +// Routes returns the set of routes used by the Inspector server. +// +//nolint: lll +func Routes(cfg config.RPCConfig, s state.Store, bs state.BlockStore, es []indexer.EventSink, logger log.Logger) core.RoutesMap { + env := &core.Environment{ + Config: cfg, + EventSinks: es, + StateStore: s, + BlockStore: bs, + ConsensusReactor: waitSyncCheckerImpl{}, + Logger: logger, + } + return core.RoutesMap{ + "blockchain": server.NewRPCFunc(env.BlockchainInfo, "minHeight,maxHeight", true), + "consensus_params": server.NewRPCFunc(env.ConsensusParams, "height", true), + "block": server.NewRPCFunc(env.Block, "height", true), + "block_by_hash": server.NewRPCFunc(env.BlockByHash, "hash", true), + "block_results": server.NewRPCFunc(env.BlockResults, "height", true), + "commit": server.NewRPCFunc(env.Commit, "height", true), + "validators": server.NewRPCFunc(env.Validators, "height,page,per_page", true), + "tx": server.NewRPCFunc(env.Tx, "hash,prove", true), + "tx_search": server.NewRPCFunc(env.TxSearch, "query,prove,page,per_page,order_by", false), + "block_search": server.NewRPCFunc(env.BlockSearch, "query,page,per_page,order_by", false), + } +} + +// Handler returns the http.Handler configured for use with an Inspector server. Handler +// registers the routes on the http.Handler and also registers the websocket handler +// and the CORS handler if specified by the configuration options. +func Handler(rpcConfig *config.RPCConfig, routes core.RoutesMap, logger log.Logger) http.Handler { + mux := http.NewServeMux() + wmLogger := logger.With("protocol", "websocket") + + var eventBus types.EventBusSubscriber + + websocketDisconnectFn := func(remoteAddr string) { + err := eventBus.UnsubscribeAll(context.Background(), remoteAddr) + if err != nil && err != pubsub.ErrSubscriptionNotFound { + wmLogger.Error("Failed to unsubscribe addr from events", "addr", remoteAddr, "err", err) + } + } + wm := server.NewWebsocketManager(routes, + server.OnDisconnect(websocketDisconnectFn), + server.ReadLimit(rpcConfig.MaxBodyBytes)) + wm.SetLogger(wmLogger) + mux.HandleFunc("/websocket", wm.WebsocketHandler) + + server.RegisterRPCFuncs(mux, routes, logger) + var rootHandler http.Handler = mux + if rpcConfig.IsCorsEnabled() { + rootHandler = addCORSHandler(rpcConfig, mux) + } + return rootHandler +} + +func addCORSHandler(rpcConfig *config.RPCConfig, h http.Handler) http.Handler { + corsMiddleware := cors.New(cors.Options{ + AllowedOrigins: rpcConfig.CORSAllowedOrigins, + AllowedMethods: rpcConfig.CORSAllowedMethods, + AllowedHeaders: rpcConfig.CORSAllowedHeaders, + }) + h = corsMiddleware.Handler(h) + return h +} + +type waitSyncCheckerImpl struct{} + +func (waitSyncCheckerImpl) WaitSync() bool { + return false +} + +func (waitSyncCheckerImpl) GetPeerState(peerID types.NodeID) (*consensus.PeerState, bool) { + return nil, false +} + +// ListenAndServe listens on the address specified in srv.Addr and handles any +// incoming requests over HTTP using the Inspector rpc handler specified on the server. +func (srv *Server) ListenAndServe(ctx context.Context) error { + listener, err := server.Listen(srv.Addr, srv.Config.MaxOpenConnections) + if err != nil { + return err + } + go func() { + <-ctx.Done() + listener.Close() + }() + return server.Serve(listener, srv.Handler, srv.Logger, serverRPCConfig(srv.Config)) +} + +// ListenAndServeTLS listens on the address specified in srv.Addr. ListenAndServeTLS handles +// incoming requests over HTTPS using the Inspector rpc handler specified on the server. +func (srv *Server) ListenAndServeTLS(ctx context.Context, certFile, keyFile string) error { + listener, err := server.Listen(srv.Addr, srv.Config.MaxOpenConnections) + if err != nil { + return err + } + go func() { + <-ctx.Done() + listener.Close() + }() + return server.ServeTLS(listener, srv.Handler, certFile, keyFile, srv.Logger, serverRPCConfig(srv.Config)) +} + +func serverRPCConfig(r *config.RPCConfig) *server.Config { + cfg := server.DefaultConfig() + cfg.MaxBodyBytes = r.MaxBodyBytes + cfg.MaxHeaderBytes = r.MaxHeaderBytes + // If necessary adjust global WriteTimeout to ensure it's greater than + // TimeoutBroadcastTxCommit. + // See https://github.com/tendermint/tendermint/issues/3435 + if cfg.WriteTimeout <= r.TimeoutBroadcastTxCommit { + cfg.WriteTimeout = r.TimeoutBroadcastTxCommit + 1*time.Second + } + return cfg +} diff --git a/light/proxy/proxy.go b/light/proxy/proxy.go index 8f1e7bf87..6f2622588 100644 --- a/light/proxy/proxy.go +++ b/light/proxy/proxy.go @@ -113,7 +113,7 @@ func (p *Proxy) listen() (net.Listener, *http.ServeMux, error) { } // 4) Start listening for new connections. - listener, err := rpcserver.Listen(p.Addr, p.Config) + listener, err := rpcserver.Listen(p.Addr, p.Config.MaxOpenConnections) if err != nil { return nil, mux, err } diff --git a/node/node.go b/node/node.go index a31362b49..9cb5315bc 100644 --- a/node/node.go +++ b/node/node.go @@ -441,22 +441,23 @@ func makeNode(config *cfg.Config, ProxyAppQuery: proxyApp.Query(), ProxyAppMempool: proxyApp.Mempool(), - StateStore: stateStore, - BlockStore: blockStore, - EvidencePool: evPool, - ConsensusState: csState, + StateStore: stateStore, + BlockStore: blockStore, + EvidencePool: evPool, + ConsensusState: csState, + + ConsensusReactor: csReactor, BlockSyncReactor: bcReactor.(cs.BlockSyncReactor), P2PPeers: sw, PeerManager: peerManager, - GenDoc: genDoc, - EventSinks: eventSinks, - ConsensusReactor: csReactor, - EventBus: eventBus, - Mempool: mp, - Logger: logger.With("module", "rpc"), - Config: *config.RPC, + GenDoc: genDoc, + EventSinks: eventSinks, + EventBus: eventBus, + Mempool: mp, + Logger: logger.With("module", "rpc"), + Config: *config.RPC, }, } @@ -825,7 +826,7 @@ func (n *nodeImpl) startRPC() ([]net.Listener, error) { rpcserver.RegisterRPCFuncs(mux, routes, rpcLogger) listener, err := rpcserver.Listen( listenAddr, - config, + config.MaxOpenConnections, ) if err != nil { return nil, err @@ -883,7 +884,7 @@ func (n *nodeImpl) startRPC() ([]net.Listener, error) { if config.WriteTimeout <= n.config.RPC.TimeoutBroadcastTxCommit { config.WriteTimeout = n.config.RPC.TimeoutBroadcastTxCommit + 1*time.Second } - listener, err := rpcserver.Listen(grpcListenAddr, config) + listener, err := rpcserver.Listen(grpcListenAddr, config.MaxOpenConnections) if err != nil { return nil, err } diff --git a/node/setup.go b/node/setup.go index e9bfb029a..6d2a7523b 100644 --- a/node/setup.go +++ b/node/setup.go @@ -8,7 +8,6 @@ import ( "math" "net" _ "net/http/pprof" // nolint: gosec // securely exposed on separate, optional port - "strings" "time" dbm "github.com/tendermint/tm-db" @@ -33,9 +32,7 @@ import ( "github.com/tendermint/tendermint/proxy" sm "github.com/tendermint/tendermint/state" "github.com/tendermint/tendermint/state/indexer" - kv "github.com/tendermint/tendermint/state/indexer/sink/kv" - null "github.com/tendermint/tendermint/state/indexer/sink/null" - psql "github.com/tendermint/tendermint/state/indexer/sink/psql" + "github.com/tendermint/tendermint/state/indexer/sink" "github.com/tendermint/tendermint/store" "github.com/tendermint/tendermint/types" "github.com/tendermint/tendermint/version" @@ -78,56 +75,9 @@ func createAndStartIndexerService( logger log.Logger, chainID string, ) (*indexer.Service, []indexer.EventSink, error) { - - eventSinks := []indexer.EventSink{} - - // check for duplicated sinks - sinks := map[string]bool{} - for _, s := range config.TxIndex.Indexer { - sl := strings.ToLower(s) - if sinks[sl] { - return nil, nil, errors.New("found duplicated sinks, please check the tx-index section in the config.toml") - } - - sinks[sl] = true - } - -loop: - for k := range sinks { - switch k { - case string(indexer.NULL): - // When we see null in the config, the eventsinks will be reset with the - // nullEventSink. - eventSinks = []indexer.EventSink{null.NewEventSink()} - break loop - - case string(indexer.KV): - store, err := dbProvider(&cfg.DBContext{ID: "tx_index", Config: config}) - if err != nil { - return nil, nil, err - } - - eventSinks = append(eventSinks, kv.NewEventSink(store)) - - case string(indexer.PSQL): - conn := config.TxIndex.PsqlConn - if conn == "" { - return nil, nil, errors.New("the psql connection settings cannot be empty") - } - - es, _, err := psql.NewEventSink(conn, chainID) - if err != nil { - return nil, nil, err - } - eventSinks = append(eventSinks, es) - - default: - return nil, nil, errors.New("unsupported event sink type") - } - } - - if len(eventSinks) == 0 { - eventSinks = []indexer.EventSink{null.NewEventSink()} + eventSinks, err := sink.EventSinksFromConfig(config, dbProvider, chainID) + if err != nil { + return nil, nil, err } indexerService := indexer.NewIndexerService(eventSinks, eventBus) diff --git a/rpc/core/env.go b/rpc/core/env.go index c35b8229c..7069bc4d4 100644 --- a/rpc/core/env.go +++ b/rpc/core/env.go @@ -58,6 +58,11 @@ type peers interface { Peers() p2p.IPeerSet } +type consensusReactor interface { + WaitSync() bool + GetPeerState(peerID types.NodeID) (*consensus.PeerState, bool) +} + type peerManager interface { Peers() []types.NodeID Addresses(types.NodeID) []p2p.NodeAddress @@ -72,11 +77,12 @@ type Environment struct { ProxyAppMempool proxy.AppConnMempool // interfaces defined in types and above - StateStore sm.Store - BlockStore sm.BlockStore - EvidencePool sm.EvidencePool - ConsensusState consensusState - P2PPeers peers + StateStore sm.Store + BlockStore sm.BlockStore + EvidencePool sm.EvidencePool + ConsensusState consensusState + ConsensusReactor consensusReactor + P2PPeers peers // Legacy p2p stack P2PTransport transport @@ -88,7 +94,6 @@ type Environment struct { PubKey crypto.PubKey GenDoc *types.GenesisDoc // cache the genesis structure EventSinks []indexer.EventSink - ConsensusReactor *consensus.Reactor EventBus *types.EventBus // thread safe Mempool mempl.Mempool BlockSyncReactor consensus.BlockSyncReactor diff --git a/rpc/jsonrpc/jsonrpc_test.go b/rpc/jsonrpc/jsonrpc_test.go index 6e0c03f00..b5e422280 100644 --- a/rpc/jsonrpc/jsonrpc_test.go +++ b/rpc/jsonrpc/jsonrpc_test.go @@ -110,7 +110,7 @@ func setup() { wm.SetLogger(tcpLogger) mux.HandleFunc(websocketEndpoint, wm.WebsocketHandler) config := server.DefaultConfig() - listener1, err := server.Listen(tcpAddr, config) + listener1, err := server.Listen(tcpAddr, config.MaxOpenConnections) if err != nil { panic(err) } @@ -126,7 +126,7 @@ func setup() { wm = server.NewWebsocketManager(Routes) wm.SetLogger(unixLogger) mux2.HandleFunc(websocketEndpoint, wm.WebsocketHandler) - listener2, err := server.Listen(unixAddr, config) + listener2, err := server.Listen(unixAddr, config.MaxOpenConnections) if err != nil { panic(err) } diff --git a/rpc/jsonrpc/server/http_server.go b/rpc/jsonrpc/server/http_server.go index c21c71c49..549671241 100644 --- a/rpc/jsonrpc/server/http_server.go +++ b/rpc/jsonrpc/server/http_server.go @@ -261,7 +261,7 @@ func (h maxBytesHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { // Listen starts a new net.Listener on the given address. // It returns an error if the address is invalid or the call to Listen() fails. -func Listen(addr string, config *Config) (listener net.Listener, err error) { +func Listen(addr string, maxOpenConnections int) (listener net.Listener, err error) { parts := strings.SplitN(addr, "://", 2) if len(parts) != 2 { return nil, fmt.Errorf( @@ -274,8 +274,8 @@ func Listen(addr string, config *Config) (listener net.Listener, err error) { if err != nil { return nil, fmt.Errorf("failed to listen on %v: %v", addr, err) } - if config.MaxOpenConnections > 0 { - listener = netutil.LimitListener(listener, config.MaxOpenConnections) + if maxOpenConnections > 0 { + listener = netutil.LimitListener(listener, maxOpenConnections) } return listener, nil diff --git a/rpc/jsonrpc/server/http_server_test.go b/rpc/jsonrpc/server/http_server_test.go index e7c517cde..823719e41 100644 --- a/rpc/jsonrpc/server/http_server_test.go +++ b/rpc/jsonrpc/server/http_server_test.go @@ -39,8 +39,7 @@ func TestMaxOpenConnections(t *testing.T) { fmt.Fprint(w, "some body") }) config := DefaultConfig() - config.MaxOpenConnections = max - l, err := Listen("tcp://127.0.0.1:0", config) + l, err := Listen("tcp://127.0.0.1:0", max) require.NoError(t, err) defer l.Close() go Serve(l, mux, log.TestingLogger(), config) //nolint:errcheck // ignore for tests diff --git a/rpc/jsonrpc/test/main.go b/rpc/jsonrpc/test/main.go index 1c949571f..d348e1639 100644 --- a/rpc/jsonrpc/test/main.go +++ b/rpc/jsonrpc/test/main.go @@ -33,7 +33,7 @@ func main() { rpcserver.RegisterRPCFuncs(mux, routes, logger) config := rpcserver.DefaultConfig() - listener, err := rpcserver.Listen("tcp://127.0.0.1:8008", config) + listener, err := rpcserver.Listen("tcp://127.0.0.1:8008", config.MaxOpenConnections) if err != nil { tmos.Exit(err.Error()) } diff --git a/state/indexer/indexer_service.go b/state/indexer/indexer_service.go index a429b66a0..39a1847f8 100644 --- a/state/indexer/indexer_service.go +++ b/state/indexer/indexer_service.go @@ -51,43 +51,47 @@ func (is *Service) OnStart() error { go func() { for { - msg := <-blockHeadersSub.Out() + select { + case <-blockHeadersSub.Canceled(): + return + case msg := <-blockHeadersSub.Out(): - eventDataHeader := msg.Data().(types.EventDataNewBlockHeader) - height := eventDataHeader.Header.Height - batch := NewBatch(eventDataHeader.NumTxs) + eventDataHeader := msg.Data().(types.EventDataNewBlockHeader) + height := eventDataHeader.Header.Height + batch := NewBatch(eventDataHeader.NumTxs) - for i := int64(0); i < eventDataHeader.NumTxs; i++ { - msg2 := <-txsSub.Out() - txResult := msg2.Data().(types.EventDataTx).TxResult + for i := int64(0); i < eventDataHeader.NumTxs; i++ { + msg2 := <-txsSub.Out() + txResult := msg2.Data().(types.EventDataTx).TxResult - if err = batch.Add(&txResult); err != nil { - is.Logger.Error( - "failed to add tx to batch", - "height", height, - "index", txResult.Index, - "err", err, - ) - } - } - - if !IndexingEnabled(is.eventSinks) { - continue - } - - for _, sink := range is.eventSinks { - if err := sink.IndexBlockEvents(eventDataHeader); err != nil { - is.Logger.Error("failed to index block", "height", height, "err", err) - } else { - is.Logger.Debug("indexed block", "height", height, "sink", sink.Type()) + if err = batch.Add(&txResult); err != nil { + is.Logger.Error( + "failed to add tx to batch", + "height", height, + "index", txResult.Index, + "err", err, + ) + } } - if len(batch.Ops) > 0 { - err := sink.IndexTxEvents(batch.Ops) - if err != nil { - is.Logger.Error("failed to index block txs", "height", height, "err", err) + if !IndexingEnabled(is.eventSinks) { + continue + } + + for _, sink := range is.eventSinks { + if err := sink.IndexBlockEvents(eventDataHeader); err != nil { + is.Logger.Error("failed to index block", "height", height, "err", err) } else { - is.Logger.Debug("indexed txs", "height", height, "sink", sink.Type()) + is.Logger.Debug("indexed block", "height", height, "sink", sink.Type()) + } + + if len(batch.Ops) > 0 { + err := sink.IndexTxEvents(batch.Ops) + if err != nil { + is.Logger.Error("failed to index block txs", "height", height, "err", err) + } else { + is.Logger.Debug("indexed txs", "height", height, "sink", sink.Type()) + } } } } diff --git a/state/indexer/sink/sink.go b/state/indexer/sink/sink.go new file mode 100644 index 000000000..1e50721c6 --- /dev/null +++ b/state/indexer/sink/sink.go @@ -0,0 +1,65 @@ +package sink + +import ( + "errors" + "strings" + + "github.com/tendermint/tendermint/config" + "github.com/tendermint/tendermint/state/indexer" + "github.com/tendermint/tendermint/state/indexer/sink/kv" + "github.com/tendermint/tendermint/state/indexer/sink/null" + "github.com/tendermint/tendermint/state/indexer/sink/psql" +) + +// EventSinksFromConfig constructs a slice of indexer.EventSink using the provided +// configuration. +// +//nolint:lll +func EventSinksFromConfig(cfg *config.Config, dbProvider config.DBProvider, chainID string) ([]indexer.EventSink, error) { + if len(cfg.TxIndex.Indexer) == 0 { + return []indexer.EventSink{null.NewEventSink()}, nil + } + + // check for duplicated sinks + sinks := map[string]struct{}{} + for _, s := range cfg.TxIndex.Indexer { + sl := strings.ToLower(s) + if _, ok := sinks[sl]; ok { + return nil, errors.New("found duplicated sinks, please check the tx-index section in the config.toml") + } + sinks[sl] = struct{}{} + } + eventSinks := []indexer.EventSink{} + for k := range sinks { + switch indexer.EventSinkType(k) { + case indexer.NULL: + // When we see null in the config, the eventsinks will be reset with the + // nullEventSink. + return []indexer.EventSink{null.NewEventSink()}, nil + + case indexer.KV: + store, err := dbProvider(&config.DBContext{ID: "tx_index", Config: cfg}) + if err != nil { + return nil, err + } + + eventSinks = append(eventSinks, kv.NewEventSink(store)) + + case indexer.PSQL: + conn := cfg.TxIndex.PsqlConn + if conn == "" { + return nil, errors.New("the psql connection settings cannot be empty") + } + + es, _, err := psql.NewEventSink(conn, chainID) + if err != nil { + return nil, err + } + eventSinks = append(eventSinks, es) + default: + return nil, errors.New("unsupported event sink type") + } + } + return eventSinks, nil + +} From 41a361ed8d9755b62972140fc3ddb7a9826e3529 Mon Sep 17 00:00:00 2001 From: "M. J. Fromberger" Date: Tue, 24 Aug 2021 14:18:27 -0700 Subject: [PATCH 34/39] psql: add documentation and simplify constructor API (#6856) Add documentation comments to the psql event sink package, and simplify the constructor function so that it does not return the SQL database handle. The handle is needed for testing, so expose that via a separate method on the concrete type. Update the tests and existing usage for the change. This change does not affect the behaviour of the sink, so there are no functional changes, only syntactic updates. --- cmd/tendermint/commands/reindex_event.go | 4 +-- state/indexer/indexer_service_test.go | 13 ++++----- state/indexer/sink/psql/psql.go | 34 +++++++++++++++++------- state/indexer/sink/psql/psql_test.go | 13 +++------ state/indexer/sink/sink.go | 2 +- 5 files changed, 36 insertions(+), 30 deletions(-) diff --git a/cmd/tendermint/commands/reindex_event.go b/cmd/tendermint/commands/reindex_event.go index ddc585c1f..1dbce2f74 100644 --- a/cmd/tendermint/commands/reindex_event.go +++ b/cmd/tendermint/commands/reindex_event.go @@ -31,7 +31,7 @@ var ReIndexEventCmd = &cobra.Command{ Long: ` reindex-event is an offline tooling to re-index block and tx events to the eventsinks, you can run this command when the event store backend dropped/disconnected or you want to replace the backend. - The default start-height is 0, meaning the tooling will start reindex from the base block height(inclusive); and the + The default start-height is 0, meaning the tooling will start reindex from the base block height(inclusive); and the default end-height is 0, meaning the tooling will reindex until the latest block height(inclusive). User can omits either or both arguments. `, @@ -106,7 +106,7 @@ func loadEventSinks(cfg *tmcfg.Config) ([]indexer.EventSink, error) { if conn == "" { return nil, errors.New("the psql connection settings cannot be empty") } - es, _, err := psql.NewEventSink(conn, chainID) + es, err := psql.NewEventSink(conn, chainID) if err != nil { return nil, err } diff --git a/state/indexer/indexer_service_test.go b/state/indexer/indexer_service_test.go index 68a00afb5..457ed065a 100644 --- a/state/indexer/indexer_service_test.go +++ b/state/indexer/indexer_service_test.go @@ -164,19 +164,16 @@ func setupDB(t *testing.T) (*dockertest.Pool, error) { conn := fmt.Sprintf(dsn, user, password, resource.GetPort(port+"/tcp"), dbName) - if err = pool.Retry(func() error { - var err error - - pSink, psqldb, err = psql.NewEventSink(conn, "test-chainID") - + assert.NoError(t, pool.Retry(func() error { + sink, err := psql.NewEventSink(conn, "test-chainID") if err != nil { return err } + pSink = sink + psqldb = sink.DB() return psqldb.Ping() - }); err != nil { - assert.Error(t, err) - } + })) resetDB(t) diff --git a/state/indexer/sink/psql/psql.go b/state/indexer/sink/psql/psql.go index efb539e0b..8bd378f4a 100644 --- a/state/indexer/sink/psql/psql.go +++ b/state/indexer/sink/psql/psql.go @@ -1,3 +1,4 @@ +// Package psql implements an event sink backed by a PostgreSQL database. package psql import ( @@ -24,28 +25,38 @@ const ( DriverName = "postgres" ) -// EventSink is an indexer backend providing the tx/block index services. +// EventSink is an indexer backend providing the tx/block index services. This +// implementation stores records in a PostgreSQL database using the schema +// defined in state/indexer/sink/psql/schema.sql. type EventSink struct { store *sql.DB chainID string } -func NewEventSink(connStr string, chainID string) (indexer.EventSink, *sql.DB, error) { +// NewEventSink constructs an event sink associated with the PostgreSQL +// database specified by connStr. Events written to the sink are attributed to +// the specified chainID. +func NewEventSink(connStr, chainID string) (*EventSink, error) { db, err := sql.Open(DriverName, connStr) if err != nil { - return nil, nil, err + return nil, err } return &EventSink{ store: db, chainID: chainID, - }, db, nil + }, nil } -func (es *EventSink) Type() indexer.EventSinkType { - return indexer.PSQL -} +// DB returns the underlying Postgres connection used by the sink. +// This is exported to support testing. +func (es *EventSink) DB() *sql.DB { return es.store } +// Type returns the structure type for this sink, which is Postgres. +func (es *EventSink) Type() indexer.EventSinkType { return indexer.PSQL } + +// IndexBlockEvents indexes the specified block header, part of the +// indexer.EventSink interface. func (es *EventSink) IndexBlockEvents(h types.EventDataNewBlockHeader) error { sqlStmt := sq. Insert(TableEventBlock). @@ -156,18 +167,22 @@ func (es *EventSink) IndexTxEvents(txr []*abci.TxResult) error { return err } +// SearchBlockEvents is not implemented by this sink, and reports an error for all queries. func (es *EventSink) SearchBlockEvents(ctx context.Context, q *query.Query) ([]int64, error) { return nil, errors.New("block search is not supported via the postgres event sink") } +// SearchTxEvents is not implemented by this sink, and reports an error for all queries. func (es *EventSink) SearchTxEvents(ctx context.Context, q *query.Query) ([]*abci.TxResult, error) { return nil, errors.New("tx search is not supported via the postgres event sink") } +// GetTxByHash is not implemented by this sink, and reports an error for all queries. func (es *EventSink) GetTxByHash(hash []byte) (*abci.TxResult, error) { return nil, errors.New("getTxByHash is not supported via the postgres event sink") } +// HasBlock is not implemented by this sink, and reports an error for all queries. func (es *EventSink) HasBlock(h int64) (bool, error) { return false, errors.New("hasBlock is not supported via the postgres event sink") } @@ -206,6 +221,5 @@ func indexBlockEvents( return sqlStmt, nil } -func (es *EventSink) Stop() error { - return es.store.Close() -} +// Stop closes the underlying PostgreSQL database. +func (es *EventSink) Stop() error { return es.store.Close() } diff --git a/state/indexer/sink/psql/psql_test.go b/state/indexer/sink/psql/psql_test.go index 0df773a53..35ad7eea3 100644 --- a/state/indexer/sink/psql/psql_test.go +++ b/state/indexer/sink/psql/psql_test.go @@ -341,19 +341,14 @@ func setupDB(t *testing.T) (*dockertest.Pool, error) { conn := fmt.Sprintf(dsn, user, password, resource.GetPort(port+"/tcp"), dbName) - if err = pool.Retry(func() error { - var err error - - _, db, err = NewEventSink(conn, chainID) - + require.NoError(t, pool.Retry(func() error { + sink, err := NewEventSink(conn, chainID) if err != nil { return err } - + db = sink.DB() // set global for test use return db.Ping() - }); err != nil { - require.NoError(t, err) - } + })) resetDB(t) diff --git a/state/indexer/sink/sink.go b/state/indexer/sink/sink.go index 1e50721c6..f9dfa54df 100644 --- a/state/indexer/sink/sink.go +++ b/state/indexer/sink/sink.go @@ -51,7 +51,7 @@ func EventSinksFromConfig(cfg *config.Config, dbProvider config.DBProvider, chai return nil, errors.New("the psql connection settings cannot be empty") } - es, _, err := psql.NewEventSink(conn, chainID) + es, err := psql.NewEventSink(conn, chainID) if err != nil { return nil, err } From e053643b957c7db08700b872e7532889b43746ba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Aug 2021 08:12:04 -0400 Subject: [PATCH 35/39] build(deps): Bump codecov/codecov-action from 2.0.2 to 2.0.3 (#6860) Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 2.0.2 to 2.0.3. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/master/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/v2.0.2...v2.0.3) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/coverage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 12dd504e3..7d312b4f8 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -121,7 +121,7 @@ jobs: - run: | cat ./*profile.out | grep -v "mode: atomic" >> coverage.txt if: env.GIT_DIFF - - uses: codecov/codecov-action@v2.0.2 + - uses: codecov/codecov-action@v2.0.3 with: file: ./coverage.txt if: env.GIT_DIFF From 9c8379ef305091f5825a4d91244c19ec2697894c Mon Sep 17 00:00:00 2001 From: Sam Kleinman Date: Wed, 25 Aug 2021 08:24:01 -0400 Subject: [PATCH 36/39] e2e: more consistent node selection during tests (#6857) In the transaction load generator, the e2e test harness previously distributed load randomly to hosts, which was a source of test non-determinism. This change distributes the load generation to the different nodes in the set in a round robin fashion, to produce more reliable results, but does not otherwise change the behavior of the test harness. --- test/e2e/pkg/testnet.go | 10 ----- test/e2e/runner/evidence.go | 17 +++++++- test/e2e/runner/load.go | 81 +++++++++++++++++++++++++------------ 3 files changed, 72 insertions(+), 36 deletions(-) diff --git a/test/e2e/pkg/testnet.go b/test/e2e/pkg/testnet.go index cfeb54bde..cec58bd20 100644 --- a/test/e2e/pkg/testnet.go +++ b/test/e2e/pkg/testnet.go @@ -417,16 +417,6 @@ func (t Testnet) ArchiveNodes() []*Node { return nodes } -// RandomNode returns a random non-seed node. -func (t Testnet) RandomNode() *Node { - for { - node := t.Nodes[rand.Intn(len(t.Nodes))] - if node.Mode != ModeSeed { - return node - } - } -} - // IPv6 returns true if the testnet is an IPv6 network. func (t Testnet) IPv6() bool { return t.IP.IP.To4() == nil diff --git a/test/e2e/runner/evidence.go b/test/e2e/runner/evidence.go index 6a246dcb5..30e8d9f0a 100644 --- a/test/e2e/runner/evidence.go +++ b/test/e2e/runner/evidence.go @@ -3,6 +3,7 @@ package main import ( "bytes" "context" + "errors" "fmt" "io/ioutil" "math/rand" @@ -29,7 +30,21 @@ const lightClientEvidenceRatio = 4 // DuplicateVoteEvidence. func InjectEvidence(testnet *e2e.Testnet, amount int) error { // select a random node - targetNode := testnet.RandomNode() + var targetNode *e2e.Node + + for i := 0; i < len(testnet.Nodes)-1; i++ { + targetNode = testnet.Nodes[rand.Intn(len(testnet.Nodes))] // nolint: gosec + if targetNode.Mode == e2e.ModeSeed { + targetNode = nil + continue + } + + break + } + + if targetNode == nil { + return errors.New("could not find node to inject evidence into") + } logger.Info(fmt.Sprintf("Injecting evidence through %v (amount: %d)...", targetNode.Name, amount)) diff --git a/test/e2e/runner/load.go b/test/e2e/runner/load.go index 518e32564..b57c96ddf 100644 --- a/test/e2e/runner/load.go +++ b/test/e2e/runner/load.go @@ -1,6 +1,7 @@ package main import ( + "container/ring" "context" "crypto/rand" "errors" @@ -93,34 +94,64 @@ func loadGenerate(ctx context.Context, chTx chan<- types.Tx, multiplier int, siz // loadProcess processes transactions func loadProcess(ctx context.Context, testnet *e2e.Testnet, chTx <-chan types.Tx, chSuccess chan<- types.Tx) { - // Each worker gets its own client to each node, which allows for some - // concurrency while still bounding it. - clients := map[string]*rpchttp.HTTP{} + // Each worker gets its own client to each usable node, which + // allows for some concurrency while still bounding it. + clients := make([]*rpchttp.HTTP, 0, len(testnet.Nodes)) - var err error - for tx := range chTx { - node := testnet.RandomNode() - - client, ok := clients[node.Name] - if !ok { - client, err = node.Client() - if err != nil { - continue - } - - // check that the node is up - _, err = client.Health(ctx) - if err != nil { - continue - } - - clients[node.Name] = client - } - - if _, err = client.BroadcastTxSync(ctx, tx); err != nil { + for idx := range testnet.Nodes { + // Construct a list of usable nodes for the creating + // load. Don't send load through seed nodes because + // they do not provide the RPC endpoints required to + // broadcast transaction. + if testnet.Nodes[idx].Mode == e2e.ModeSeed { continue } - chSuccess <- tx + client, err := testnet.Nodes[idx].Client() + if err != nil { + continue + } + + clients = append(clients, client) + } + + if len(clients) == 0 { + panic("no clients to process load") + } + + // Put the clients in a ring so they can be used in a + // round-robin fashion. + clientRing := ring.New(len(clients)) + for idx := range clients { + clientRing.Value = clients[idx] + clientRing = clientRing.Next() + } + + var err error + + for { + select { + case <-ctx.Done(): + return + case tx := <-chTx: + clientRing = clientRing.Next() + client := clientRing.Value.(*rpchttp.HTTP) + + if _, err := client.Health(ctx); err != nil { + continue + } + + if _, err = client.BroadcastTxSync(ctx, tx); err != nil { + continue + } + + select { + case chSuccess <- tx: + continue + case <-ctx.Done(): + return + } + + } } } From a0a5d45cb1b25e301c5aaa29454d2078724d1f63 Mon Sep 17 00:00:00 2001 From: Sam Kleinman Date: Wed, 25 Aug 2021 08:26:11 -0400 Subject: [PATCH 37/39] lint: change deprecated linter (#6861) This is a super minor change that silences a warning when running the linter locally. --- .golangci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.golangci.yml b/.golangci.yml index f05cde90c..574ed22b0 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -26,7 +26,7 @@ linters: # - maligned - nakedret - prealloc - - scopelint + - exportloopref - staticcheck - structcheck - stylecheck From 6e921f6644159eac604bae6032a76da7ce61aa60 Mon Sep 17 00:00:00 2001 From: Sam Kleinman Date: Wed, 25 Aug 2021 13:33:38 -0400 Subject: [PATCH 38/39] p2p: change default to use new stack (#6862) This is just a configuration change to default to using the new stack unless explicitly disabled (e.g. `UseLegacy`) this renames the configuration value and makes the configuration logic more clear. The legacy option is good to retain as a fallback if the new stack has issues operationally, but we should make sure that most of the time we're using the new stack. --- config/config.go | 10 +++-- config/toml.go | 2 +- node/node.go | 74 +++++++++++++++++++--------------- node/node_test.go | 3 +- node/setup.go | 32 +++++++-------- test/e2e/generator/generate.go | 18 ++++----- test/e2e/pkg/manifest.go | 8 ++-- test/e2e/pkg/testnet.go | 4 +- test/e2e/runner/setup.go | 24 +++++------ 9 files changed, 92 insertions(+), 83 deletions(-) diff --git a/config/config.go b/config/config.go index 7d19616aa..7e8dd5976 100644 --- a/config/config.go +++ b/config/config.go @@ -694,13 +694,14 @@ type P2PConfig struct { //nolint: maligned // Force dial to fail TestDialFail bool `mapstructure:"test-dial-fail"` - // DisableLegacy is used mostly for testing to enable or disable the legacy - // P2P stack. - DisableLegacy bool `mapstructure:"disable-legacy"` + // UseLegacy enables the "legacy" P2P implementation and + // disables the newer default implementation. This flag will + // be removed in a future release. + UseLegacy bool `mapstructure:"use-legacy"` // Makes it possible to configure which queue backend the p2p // layer uses. Options are: "fifo", "priority" and "wdrr", - // with the default being "fifo". + // with the default being "priority". QueueType string `mapstructure:"queue-type"` } @@ -732,6 +733,7 @@ func DefaultP2PConfig() *P2PConfig { DialTimeout: 3 * time.Second, TestDialFail: false, QueueType: "priority", + UseLegacy: false, } } diff --git a/config/toml.go b/config/toml.go index edb192109..76058802c 100644 --- a/config/toml.go +++ b/config/toml.go @@ -271,7 +271,7 @@ pprof-laddr = "{{ .RPC.PprofListenAddress }}" [p2p] # Enable the new p2p layer. -disable-legacy = {{ .P2P.DisableLegacy }} +use-legacy = {{ .P2P.UseLegacy }} # Select the p2p internal queue queue-type = "{{ .P2P.QueueType }}" diff --git a/node/node.go b/node/node.go index 9cb5315bc..0dedd2861 100644 --- a/node/node.go +++ b/node/node.go @@ -319,12 +319,12 @@ func makeNode(config *cfg.Config, stateSyncReactorShim = p2p.NewReactorShim(logger.With("module", "statesync"), "StateSyncShim", statesync.ChannelShims) - if config.P2P.DisableLegacy { - channels = makeChannelsFromShims(router, statesync.ChannelShims) - peerUpdates = peerManager.Subscribe() - } else { + if config.P2P.UseLegacy { channels = getChannelsFromShim(stateSyncReactorShim) peerUpdates = stateSyncReactorShim.PeerUpdates + } else { + channels = makeChannelsFromShims(router, statesync.ChannelShims) + peerUpdates = peerManager.Subscribe() } stateSyncReactor = statesync.NewReactor( @@ -373,13 +373,7 @@ func makeNode(config *cfg.Config, pexCh := pex.ChannelDescriptor() transport.AddChannelDescriptors([]*p2p.ChannelDescriptor{&pexCh}) - if config.P2P.DisableLegacy { - addrBook = nil - pexReactor, err = createPEXReactorV2(config, logger, peerManager, router) - if err != nil { - return nil, err - } - } else { + if config.P2P.UseLegacy { // setup Transport and Switch sw = createSwitch( config, transport, p2pMetrics, mpReactorShim, bcReactorForSwitch, @@ -402,6 +396,12 @@ func makeNode(config *cfg.Config, } pexReactor = createPEXReactorAndAddToSwitch(addrBook, config, sw, logger) + } else { + addrBook = nil + pexReactor, err = createPEXReactorV2(config, logger, peerManager, router) + if err != nil { + return nil, err + } } if config.RPC.PprofListenAddress != "" { @@ -461,6 +461,17 @@ func makeNode(config *cfg.Config, }, } + // this is a terrible, because typed nil interfaces are not == + // nil, so this is just cleanup to avoid having a non-nil + // value in the RPC environment that has the semantic + // properties of nil. + if sw == nil { + node.rpcEnv.P2PPeers = nil + } else if peerManager == nil { + node.rpcEnv.PeerManager = nil + } + // end hack + node.rpcEnv.P2PTransport = node node.BaseService = *service.NewBaseService(logger, "Node", node) @@ -519,12 +530,8 @@ func makeSeedNode(config *cfg.Config, // p2p stack is removed. pexCh := pex.ChannelDescriptor() transport.AddChannelDescriptors([]*p2p.ChannelDescriptor{&pexCh}) - if config.P2P.DisableLegacy { - pexReactor, err = createPEXReactorV2(config, logger, peerManager, router) - if err != nil { - return nil, err - } - } else { + + if config.P2P.UseLegacy { sw = createSwitch( config, transport, p2pMetrics, nil, nil, nil, nil, nil, nil, nodeInfo, nodeKey, p2pLogger, @@ -546,6 +553,11 @@ func makeSeedNode(config *cfg.Config, } pexReactor = createPEXReactorAndAddToSwitch(addrBook, config, sw, logger) + } else { + pexReactor, err = createPEXReactorV2(config, logger, peerManager, router) + if err != nil { + return nil, err + } } if config.RPC.PprofListenAddress != "" { @@ -608,18 +620,16 @@ func (n *nodeImpl) OnStart() error { } n.isListening = true - n.Logger.Info("p2p service", "legacy_enabled", !n.config.P2P.DisableLegacy) + n.Logger.Info("p2p service", "legacy_enabled", n.config.P2P.UseLegacy) - if n.config.P2P.DisableLegacy { - if err = n.router.Start(); err != nil { - return err - } - } else { + if n.config.P2P.UseLegacy { // Add private IDs to addrbook to block those peers being added n.addrBook.AddPrivateIDs(strings.SplitAndTrimEmpty(n.config.P2P.PrivatePeerIDs, ",", " ")) if err = n.sw.Start(); err != nil { return err } + } else if err = n.router.Start(); err != nil { + return err } if n.config.Mode != cfg.ModeSeed { @@ -650,16 +660,14 @@ func (n *nodeImpl) OnStart() error { } } - if n.config.P2P.DisableLegacy { - if err := n.pexReactor.Start(); err != nil { - return err - } - } else { + if n.config.P2P.UseLegacy { // Always connect to persistent peers err = n.sw.DialPeersAsync(strings.SplitAndTrimEmpty(n.config.P2P.PersistentPeers, ",", " ")) if err != nil { return fmt.Errorf("could not dial peers from persistent-peers field: %w", err) } + } else if err := n.pexReactor.Start(); err != nil { + return err } // Run state sync @@ -738,14 +746,14 @@ func (n *nodeImpl) OnStop() { n.Logger.Error("failed to stop the PEX v2 reactor", "err", err) } - if n.config.P2P.DisableLegacy { - if err := n.router.Stop(); err != nil { - n.Logger.Error("failed to stop router", "err", err) - } - } else { + if n.config.P2P.UseLegacy { if err := n.sw.Stop(); err != nil { n.Logger.Error("failed to stop switch", "err", err) } + } else { + if err := n.router.Stop(); err != nil { + n.Logger.Error("failed to stop router", "err", err) + } } if err := n.transport.Close(); err != nil { diff --git a/node/node_test.go b/node/node_test.go index 64b28c0bb..885bddcfc 100644 --- a/node/node_test.go +++ b/node/node_test.go @@ -43,6 +43,7 @@ import ( func TestNodeStartStop(t *testing.T) { config := cfg.ResetTestRoot("node_node_test") + defer os.RemoveAll(config.RootDir) // create & start node @@ -53,8 +54,6 @@ func TestNodeStartStop(t *testing.T) { n, ok := ns.(*nodeImpl) require.True(t, ok) - t.Logf("Started node %v", n.sw.NodeInfo()) - // wait for the node to produce a block blocksSub, err := n.EventBus().Subscribe(context.Background(), "node_test", types.EventQueryNewBlock) require.NoError(t, err) diff --git a/node/setup.go b/node/setup.go index 6d2a7523b..00f8051f0 100644 --- a/node/setup.go +++ b/node/setup.go @@ -166,12 +166,12 @@ func createMempoolReactor( peerUpdates *p2p.PeerUpdates ) - if config.P2P.DisableLegacy { - channels = makeChannelsFromShims(router, channelShims) - peerUpdates = peerManager.Subscribe() - } else { + if config.P2P.UseLegacy { channels = getChannelsFromShim(reactorShim) peerUpdates = reactorShim.PeerUpdates + } else { + channels = makeChannelsFromShims(router, channelShims) + peerUpdates = peerManager.Subscribe() } switch config.Mempool.Version { @@ -260,12 +260,12 @@ func createEvidenceReactor( peerUpdates *p2p.PeerUpdates ) - if config.P2P.DisableLegacy { - channels = makeChannelsFromShims(router, evidence.ChannelShims) - peerUpdates = peerManager.Subscribe() - } else { + if config.P2P.UseLegacy { channels = getChannelsFromShim(reactorShim) peerUpdates = reactorShim.PeerUpdates + } else { + channels = makeChannelsFromShims(router, evidence.ChannelShims) + peerUpdates = peerManager.Subscribe() } evidenceReactor := evidence.NewReactor( @@ -302,12 +302,12 @@ func createBlockchainReactor( peerUpdates *p2p.PeerUpdates ) - if config.P2P.DisableLegacy { - channels = makeChannelsFromShims(router, bcv0.ChannelShims) - peerUpdates = peerManager.Subscribe() - } else { + if config.P2P.UseLegacy { channels = getChannelsFromShim(reactorShim) peerUpdates = reactorShim.PeerUpdates + } else { + channels = makeChannelsFromShims(router, bcv0.ChannelShims) + peerUpdates = peerManager.Subscribe() } reactor, err := bcv0.NewReactor( @@ -366,12 +366,12 @@ func createConsensusReactor( peerUpdates *p2p.PeerUpdates ) - if config.P2P.DisableLegacy { - channels = makeChannelsFromShims(router, cs.ChannelShims) - peerUpdates = peerManager.Subscribe() - } else { + if config.P2P.UseLegacy { channels = getChannelsFromShim(reactorShim) peerUpdates = reactorShim.PeerUpdates + } else { + channels = makeChannelsFromShims(router, cs.ChannelShims) + peerUpdates = peerManager.Subscribe() } reactor := cs.NewReactor( diff --git a/test/e2e/generator/generate.go b/test/e2e/generator/generate.go index f699b1162..12997eb81 100644 --- a/test/e2e/generator/generate.go +++ b/test/e2e/generator/generate.go @@ -107,11 +107,11 @@ func generateTestnet(r *rand.Rand, opt map[string]interface{}) (e2e.Manifest, er switch opt["p2p"].(P2PMode) { case NewP2PMode: - manifest.DisableLegacyP2P = true + manifest.UseLegacyP2P = true case LegacyP2PMode: - manifest.DisableLegacyP2P = false + manifest.UseLegacyP2P = false case HybridP2PMode: - manifest.DisableLegacyP2P = false + manifest.UseLegacyP2P = true p2pNodeFactor = 2 default: return manifest, fmt.Errorf("unknown p2p mode %s", opt["p2p"]) @@ -138,9 +138,9 @@ func generateTestnet(r *rand.Rand, opt map[string]interface{}) (e2e.Manifest, er node := generateNode(r, e2e.ModeSeed, 0, manifest.InitialHeight, false) if p2pNodeFactor == 0 { - node.DisableLegacyP2P = manifest.DisableLegacyP2P + node.UseLegacyP2P = manifest.UseLegacyP2P } else if p2pNodeFactor%i == 0 { - node.DisableLegacyP2P = !manifest.DisableLegacyP2P + node.UseLegacyP2P = !manifest.UseLegacyP2P } manifest.Nodes[fmt.Sprintf("seed%02d", i)] = node @@ -162,9 +162,9 @@ func generateTestnet(r *rand.Rand, opt map[string]interface{}) (e2e.Manifest, er r, e2e.ModeValidator, startAt, manifest.InitialHeight, i <= 2) if p2pNodeFactor == 0 { - node.DisableLegacyP2P = manifest.DisableLegacyP2P + node.UseLegacyP2P = manifest.UseLegacyP2P } else if p2pNodeFactor%i == 0 { - node.DisableLegacyP2P = !manifest.DisableLegacyP2P + node.UseLegacyP2P = !manifest.UseLegacyP2P } manifest.Nodes[name] = node @@ -198,9 +198,9 @@ func generateTestnet(r *rand.Rand, opt map[string]interface{}) (e2e.Manifest, er node := generateNode(r, e2e.ModeFull, startAt, manifest.InitialHeight, false) if p2pNodeFactor == 0 { - node.DisableLegacyP2P = manifest.DisableLegacyP2P + node.UseLegacyP2P = manifest.UseLegacyP2P } else if p2pNodeFactor%i == 0 { - node.DisableLegacyP2P = !manifest.DisableLegacyP2P + node.UseLegacyP2P = !manifest.UseLegacyP2P } manifest.Nodes[fmt.Sprintf("full%02d", i)] = node } diff --git a/test/e2e/pkg/manifest.go b/test/e2e/pkg/manifest.go index 5711be37d..1b0fc8753 100644 --- a/test/e2e/pkg/manifest.go +++ b/test/e2e/pkg/manifest.go @@ -59,8 +59,8 @@ type Manifest struct { // by individual nodes. LogLevel string `toml:"log_level"` - // DisableLegacyP2P enables use of the new p2p layer for all nodes in a test. - DisableLegacyP2P bool `toml:"disable_legacy_p2p"` + // UseLegacyP2P uses the legacy p2p layer for all nodes in a test. + UseLegacyP2P bool `toml:"use_legacy_p2p"` // QueueType describes the type of queue that the system uses internally QueueType string `toml:"queue_type"` @@ -147,8 +147,8 @@ type ManifestNode struct { // level. LogLevel string `toml:"log_level"` - // UseNewP2P enables use of the new p2p layer for this node. - DisableLegacyP2P bool `toml:"disable_legacy_p2p"` + // UseLegacyP2P enables use of the legacy p2p layer for this node. + UseLegacyP2P bool `toml:"use_legacy_p2p"` } // Save saves the testnet manifest to a file. diff --git a/test/e2e/pkg/testnet.go b/test/e2e/pkg/testnet.go index cec58bd20..e51fa859e 100644 --- a/test/e2e/pkg/testnet.go +++ b/test/e2e/pkg/testnet.go @@ -92,7 +92,7 @@ type Node struct { PersistentPeers []*Node Perturbations []Perturbation LogLevel string - DisableLegacyP2P bool + UseLegacyP2P bool QueueType string } @@ -177,7 +177,7 @@ func LoadTestnet(file string) (*Testnet, error) { Perturbations: []Perturbation{}, LogLevel: manifest.LogLevel, QueueType: manifest.QueueType, - DisableLegacyP2P: manifest.DisableLegacyP2P || nodeManifest.DisableLegacyP2P, + UseLegacyP2P: manifest.UseLegacyP2P && nodeManifest.UseLegacyP2P, } if node.StartAt == testnet.InitialHeight { diff --git a/test/e2e/runner/setup.go b/test/e2e/runner/setup.go index c968ef306..a0bd4996a 100644 --- a/test/e2e/runner/setup.go +++ b/test/e2e/runner/setup.go @@ -238,7 +238,7 @@ func MakeConfig(node *e2e.Node) (*config.Config, error) { cfg.RPC.PprofListenAddress = ":6060" cfg.P2P.ExternalAddress = fmt.Sprintf("tcp://%v", node.AddressP2P(false)) cfg.P2P.AddrBookStrict = false - cfg.P2P.DisableLegacy = node.DisableLegacyP2P + cfg.P2P.UseLegacy = node.UseLegacyP2P cfg.P2P.QueueType = node.QueueType cfg.DBBackend = node.Database cfg.StateSync.DiscoveryTime = 5 * time.Second @@ -342,17 +342,17 @@ func MakeConfig(node *e2e.Node) (*config.Config, error) { // MakeAppConfig generates an ABCI application config for a node. func MakeAppConfig(node *e2e.Node) ([]byte, error) { cfg := map[string]interface{}{ - "chain_id": node.Testnet.Name, - "dir": "data/app", - "listen": AppAddressUNIX, - "mode": node.Mode, - "proxy_port": node.ProxyPort, - "protocol": "socket", - "persist_interval": node.PersistInterval, - "snapshot_interval": node.SnapshotInterval, - "retain_blocks": node.RetainBlocks, - "key_type": node.PrivvalKey.Type(), - "disable_legacy_p2p": node.DisableLegacyP2P, + "chain_id": node.Testnet.Name, + "dir": "data/app", + "listen": AppAddressUNIX, + "mode": node.Mode, + "proxy_port": node.ProxyPort, + "protocol": "socket", + "persist_interval": node.PersistInterval, + "snapshot_interval": node.SnapshotInterval, + "retain_blocks": node.RetainBlocks, + "key_type": node.PrivvalKey.Type(), + "use_legacy_p2p": node.UseLegacyP2P, } switch node.ABCIProtocol { case e2e.ProtocolUNIX: From 58a6cfff9a3e370e1bb5eabfd86091e0b1186a22 Mon Sep 17 00:00:00 2001 From: Aleksandr Bezobchuk Date: Wed, 25 Aug 2021 18:43:21 -0400 Subject: [PATCH 39/39] internal/consensus: update error log (#6863) Issues reported in Osmosis, where the message is extremely long. Also, there is absolutely no reason to log the message IMO. If we must, we can make the message log DEBUG. --- internal/consensus/state.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/consensus/state.go b/internal/consensus/state.go index 4da989b40..6379b71d5 100644 --- a/internal/consensus/state.go +++ b/internal/consensus/state.go @@ -916,8 +916,8 @@ func (cs *State) handleMsg(mi msgInfo) { "height", cs.Height, "round", cs.Round, "peer", peerID, + "msg_type", fmt.Sprintf("%T", msg), "err", err, - "msg", msg, ) } }
Release notes

Sourced from google.golang.org/grpc's releases.

Release 1.40.0

Behavior Changes

  • balancer: client channel no longer connects to idle subchannels that are returned by the pickers; LB policy should call SubConn.Connect instead. (#4579)
    • This change is in line with existing documentation stating the balancer must call Connect on idle SubConns in order for them to connect, and is preparation for an upcoming change that transitions SubConns to the idle state when connections are lost. See https://pkg.go.dev/google.golang.org/grpc/balancer#SubConn for more details.

Bug Fixes

  • transport: fail RPCs without HTTP status 200 (OK), according to the gRPC spec (#4474)
  • binarylog: fail the Write() method if proto marshaling fails (#4582)
  • binarylog: exit the flusher goroutine upon closing the bufferedSink (#4583)

New Features

  • metadata: add Delete method to MD to encapsulate lowercasing (#4549)
  • xds/cds: support logical DNS cluster and aggregated cluster (#4594)
  • stats: add stats.Begin.IsClientStream and IsServerStream to indicate the type of RPC invoked (#4533)

Performance Improvements

  • server: improve performance when multiple interceptors are used (#4524)