Commit Graph
100 Commits
Author SHA1 Message Date
Anton KaliaevandGitHub fa51b652e8 .github: remove myself from CODEOWNERS (#6248) 2021-03-17 15:52:56 +04:00
Anton KaliaevandGitHub 00b9524168 rpc/jsonrpc/server: return an error in WriteRPCResponseHTTP(Error) (#6204)
instead of panicking
Closes #5529
2021-03-10 09:29:35 +04:00
Anton KaliaevandGitHub 4540bef665 localnet: fix localnet by excluding self from persistent peers list (#6209)
Closes #6205
2021-03-05 12:58:52 +00:00
Anton KaliaevandGitHub 36d92cd0b6 test/fuzz: fix rpc, secret_connection and pex tests (#6190)
* test/fuzz: fix rpc, secret_connection and pex tests

- ignore empty data in rpc
- provide correct IP in pex
- spawn a goroutine for Write and do multiple Read(s)

* test/fuzz: fix init in pex test

* test/fuzz: assign NewServeMux to global var

* test/fuzz: only try to Unmarshal if blob is not empty

* run fuzz tests for PRs which modify fuzz tests themselves

* test/fuzz: move MakeSwitch into init
2021-03-02 17:30:06 +04:00
Anton KaliaevandGitHub fe4e97afe0 rpc/jsonrpc: Unmarshal RPCRequest correctly (#6191)
i.e. without double pointer. With double pointer, it was possible to
submit `null` value, which will crash the server.

```
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x189ddc0]

goroutine 1 [running]:
github.com/tendermint/tendermint/rpc/jsonrpc/types.(*RPCRequest).UnmarshalJSON(0xc0000147e0, 0xc00029f201, 0x4, 0x1ff, 0x883baa0, 0xc0000147e0)
        /Users/anton/go/src/github.com/tendermint/tendermint/rpc/jsonrpc/types/types.go:70 +0x100
encoding/json.(*decodeState).literalStore(0xc000216bb0, 0xc00029f201, 0x4, 0x1ff, 0x1998800, 0xc0000147e0, 0x199, 0xc000231700, 0x10e0a5e, 0x197)
        /usr/local/Cellar/go/1.16/libexec/src/encoding/json/decode.go:860 +0x30ce
encoding/json.(*decodeState).value(0xc000216bb0, 0x1998800, 0xc0000147e0, 0x199, 0x1998800, 0xc0000147e0)
        /usr/local/Cellar/go/1.16/libexec/src/encoding/json/decode.go:384 +0x40c
encoding/json.(*decodeState).array(0xc000216bb0, 0x18df040, 0xc0001be540, 0x16, 0xc000216bd8, 0x10e405b)
        /usr/local/Cellar/go/1.16/libexec/src/encoding/json/decode.go:558 +0x365
encoding/json.(*decodeState).value(0xc000216bb0, 0x18df040, 0xc0001be540, 0x16, 0x16, 0x6e)
        /usr/local/Cellar/go/1.16/libexec/src/encoding/json/decode.go:360 +0x22f
encoding/json.(*decodeState).unmarshal(0xc000216bb0, 0x18df040, 0xc0001be540, 0xc000216bd8, 0x0)
        /usr/local/Cellar/go/1.16/libexec/src/encoding/json/decode.go:180 +0x2c9
encoding/json.Unmarshal(0xc00029f200, 0x6, 0x200, 0x18df040, 0xc0001be540, 0x0, 0x0)
        /usr/local/Cellar/go/1.16/libexec/src/encoding/json/decode.go:107 +0x15d
```
2021-03-02 10:25:52 +00:00
Anton KaliaevandGitHub 089b314bdb test/fuzz: fix PEX reactor test (#6188)
* test/fuzz: fix PEX reactor test

* .github: [fuzz] increase retention period for crashers
2021-03-01 20:18:51 +04:00
Anton KaliaevandGitHub fc5a108d53 libs/log: [JSON format] include timestamp (#6174)
Closes #6146
2021-02-25 07:06:24 +00:00
Anton KaliaevandGitHub e9e5026dac rpc/client/http: drop endpoint arg from New and add WSOptions (#6176)
also

- replace `MaxReconnectAttempts`, `ReadWait`, `WriteWait` and `PingPeriod` options with `WSOptions` in `WSClient` (rpc/jsonrpc/client/ws_client.go).
- set default write wait to 10s for `WSClient`(rpc/jsonrpc/client/ws_client.go)
- unexpose `WSEvents`(rpc/client/http.go)

Closes #6162
2021-02-25 06:57:31 +00:00
Anton KaliaevandGitHub 0f4124fb54 rpc/client/http: Do not drop events even if the out channel is full (#6163)
```
// unbuffered
out, err := httpClient.Subscribe(ctx, "event.type=NewTx and account.name=Jack", 0)

// buffered
out, err := httpClient.Subscribe(ctx, "event.type=NewTx AND account.name=Jack", 20)
```

Before: when the `out` channel is buffered and becomes full, we drop an event (+ log the error)
After: when the `out` channel is buffered and becomes full, we block

**Before it was not apparent to the app when an event was dropped (looking at the logs is manual task). After this PR, if the user does not read from `out` on 1 subscription, all other subscriptions will be stuck too.**

Closes #6161
2021-02-24 04:16:13 +00:00
Anton KaliaevandGitHub c1ca749afa rpc: change default sorting to desc for /tx_search results (#6168)
Closes #6155
2021-02-23 10:56:16 +00:00
Anton KaliaevandGitHub 98bbde5385 .github: [jepsen] archive results (#6164) 2021-02-23 14:20:37 +04:00
Anton KaliaevandGitHub 5a39f72aa8 .github: [jepsen] add more docs (#6141) 2021-02-22 11:19:47 +04:00
Anton KaliaevandGitHub 54a14cfeed .github: [jepsen] source .bashrc (#6139)
fixes https://github.com/tendermint/tendermint/runs/1926771645
```
ERROR [2021-02-18 12:16:30,492] main - jepsen.cli Oh jeez, I'm sorry,
Jepsen broke. Here's why:

clojure.lang.ExceptionInfo: throw+: {:dir "/", :private-key-path nil,
:password "root", :username "root", :type :jepsen.control/session-error,
:port 22, :strict-host-key-checking false, :host nil, :sudo nil, :dummy
false, :message "Error opening SSH session. Verify username, password,
and node hostnames are correct.", :session nil}
```
2021-02-18 16:32:00 +04:00
Anton KaliaevandGitHub a48c6bdf5e .github: [jepsen] fix directory name (#6138)
```
bash: line 0: cd: tendermint: No such file or directory
```
2021-02-18 16:10:52 +04:00
Anton KaliaevandGitHub 27b05d6b39 .github: [jepsen] cd inside the container, not outside (#6137)
fixes https://github.com/tendermint/tendermint/runs/1925580432
```
No :main namespace specified in project.clj.
```
2021-02-18 13:18:55 +04:00
Anton KaliaevandGitHub 6cb4b5d8ad .github: [jepsen] use "bash -c" to execute lein run cmd (#6136)
Fixes https://github.com/tendermint/tendermint/runs/1925329781

```
OCI runtime exec failed: exec failed: container_linux.go:370: starting
container process caused: exec: "lein run test --nemesis none --workload
cas-register --concurrency 10 --tendermint-url
https://github.com/melekes/katas/releases/download/0.2.0/tendermint.tar.gz
--merkleeyes-url
https://github.com/melekes/katas/releases/download/0.2.0/merkleeyes_0.1.7.tar.gz":
stat lein run test --nemesis none --workload cas-register --concurrency
10 --tendermint-url
https://github.com/melekes/katas/releases/download/0.2.0/tendermint.tar.gz
--merkleeyes-url
https://github.com/melekes/katas/releases/download/0.2.0/merkleeyes_0.1.7.tar.gz:
no such file or directory: unknown
```
2021-02-18 13:01:57 +04:00
Anton KaliaevandGitHub 07cf71146c .github: [jepsen] use working-directory instead of 'cd' (#6135) 2021-02-18 12:17:45 +04:00
Anton KaliaevandGitHub df0bf4b0ee .github: [jepsen] fix inputs and remove TTY from docker (#6134)
fixes https://github.com/tendermint/tendermint/runs/1924860805

```
Run docker exec -it jepsen-control 'cd tendermint && lein run test
--nemesis  --workload ' the input device is not a TTY
```
2021-02-18 11:29:54 +04:00
Anton KaliaevandGitHub 9f697db54f .github: Jepsen workflow - initial version (#6123) 2021-02-18 10:45:40 +04:00
Anton KaliaevandGitHub aaf8987257 .github: use job ID (not step ID) inside if condition (#6060)
https://stackoverflow.com/a/66073112/820520
2021-02-07 10:13:11 +04:00
Anton KaliaevandGitHub 9d1f77369f goreleaser: downcase archive and binary names (#6029)
before:

```
Tendermint_0.34.3_darwin_amd64.tar.gz

-rw-r--r--  0 runner docker 192329 Jan 19 19:30 CHANGELOG.md
-rw-r--r--  0 runner docker    321 Jan 19 19:30 CHANGELOG_PENDING.md
-rw-r--r--  0 runner docker  11382 Jan 19 19:30 LICENSE
-rw-r--r--  0 runner docker   8165 Jan 19 19:30 README.md
-rwxr-xr-x  0 runner docker 23224320 Jan 19 19:30 tendermint
```

after:

```
tendermint_0.34.3_darwin_amd64.tar.gz

-rw-r--r--  0 runner docker 192329 Jan 19 19:30 CHANGELOG.md
-rw-r--r--  0 runner docker    321 Jan 19 19:30 CHANGELOG_PENDING.md
-rw-r--r--  0 runner docker  11382 Jan 19 19:30 LICENSE
-rw-r--r--  0 runner docker   8165 Jan 19 19:30 README.md
-rwxr-xr-x  0 runner docker 23224320 Jan 19 19:30 tendermint
```
2021-02-02 08:22:56 +00:00
Anton KaliaevandGitHub 1cd9bdb80b light/provider/http: fix Validators (#6022)
Closes #6010
2021-02-01 11:32:37 +00:00
Anton KaliaevandGitHub b1646e51e2 test/e2e: enable pprof server to help debugging failures (#6003) 2021-01-28 15:21:07 +00:00
Anton KaliaevandGitHub a54f1544f8 .github: rename crashers output (fuzz-nightly-test) (#5993) 2021-01-28 19:12:48 +04:00
Anton KaliaevandGitHub 8ce254cdb7 CONTRIBUTING.md: update testing section (#5979)
[✌️ RENDERED](https://github.com/tendermint/tendermint/blob/ad5a2ec28b1f3b3ded95c7be0ea5446065199d78/CONTRIBUTING.md)

Closes #5874
2021-01-27 10:00:39 +00:00
Anton KaliaevandGitHub a2e684e51f .github: archive crashers and fix set-crashers-count step (#5992) 2021-01-27 11:35:48 +04:00
Anton KaliaevandGitHub 8718f6f5ff terminate go-fuzz gracefully (w/ SIGINT) (#5973)
and preserve exit code.

```
2021/01/26 03:34:49 workers: 2, corpus: 4 (8m28s ago), crashers: 0, restarts: 1/9976, execs: 11013732 (21596/sec), cover: 121, uptime: 8m30s
make: *** [fuzz-mempool] Terminated
Makefile:5: recipe for target 'fuzz-mempool' failed
Error: Process completed with exit code 124.
```

https://github.com/tendermint/tendermint/runs/1766661614

`continue-on-error` should make GH ignore any error codes.
2021-01-26 17:58:14 +04:00
Anton KaliaevandGitHub 680fb18414 .github: fix fuzz-nightly job (#5965)
outputs is a property of the job, not an individual step.
2021-01-25 19:48:57 +04:00
d76add65a6 libs/log: format []byte as hexidecimal string (uppercased) (#5960)
Closes: #5806 

Co-authored-by: Lanie Hei <heixx011@umn.edu>
2021-01-25 16:25:29 +04:00
Anton KaliaevandGitHub df22e7354c test/fuzz: move fuzz tests into this repo (#5918)
Co-authored-by: Emmanuel T Odeke <emmanuel@orijtech.com>

Closes #5907

- add init-corpus to blockchain reactor
- remove validator-set FromBytes test
now that we have proto, we don't need to test it! bye amino
- simplify mempool test
do we want to test remote ABCI app?
- do not recreate mux on every crash in jsonrpc test
- update p2p pex reactor test
- remove p2p/listener test
the API has changed + I did not understand what it's tested anyway
- update secretconnection test
- add readme and makefile
- list inputs in readme
- add nightly workflow
- remove blockchain fuzz test
EncodeMsg / DecodeMsg no longer exist
2021-01-25 11:41:59 +04:00
Anton KaliaevandGitHub aef1ac7ba5 modify Reactor priorities (#5826)
blockchain/vX reactor priority was decreased because during the normal operation
(i.e. when the node is not fast syncing) blockchain priority can't be
the same as consensus reactor priority. Otherwise, it's theoretically possible to
slow down consensus by constantly requesting blocks from the node.

NOTE: ideally blockchain/vX reactor priority would be dynamic. e.g. when
the node is fast syncing, the priority is 10 (max), but when it's done
fast syncing - the priority gets decreased to 5 (only to serve blocks
for other nodes). But it's not possible now, therefore I decided to
focus on the normal operation (priority = 5).

evidence and consensus critical messages are more important than
the mempool ones, hence priorities are bumped by 1 (from 5 to 6).

statesync reactor priority was changed from 1 to 5 to be the same as
blockchain/vX priority.

Refs https://github.com/tendermint/tendermint/issues/5816
2020-12-23 12:31:00 +00:00
Anton KaliaevandGitHub 77deb710fb mempool: disable MaxBatchBytes (#5800)
@p4u from vocdoni.io reported that the mempool might behave incorrectly under a
high load. The consequences can range from pauses between blocks to the peers
disconnecting from this node.

My current theory is that the flowrate lib we're using to control flow
(multiplex over a single TCP connection) was not designed w/ large blobs
(1MB batch of txs) in mind.

I've tried decreasing the Mempool reactor priority, but that did not
have any visible effect. What actually worked is adding a time.Sleep
into mempool.Reactor#broadcastTxRoutine after an each successful send ==
manual control flow of sort.

As a temporary remedy (until the mempool package
is refactored), the max-batch-bytes was disabled. Transactions will be sent
one by one without batching

Closes #5796
2020-12-21 19:17:45 +04:00
Anton KaliaevandGitHub 6a056e050c mempool: introduce KeepInvalidTxsInCache config option (#5813)
When set to true, an invalid transaction will be kept in the cache (this may help some applications to protect against spam).

NOTE: this is a temporary config option. The more correct solution would be to add a TTL to each transaction (i.e. CheckTx may return a TTL in ResponseCheckTx).

Closes: #5751
2020-12-21 15:25:14 +04:00
Anton Kaliaev ced66e4eb5 config: increase MaxPacketMsgPayloadSize to 1400
The MTU (Maximum Transmission Unit) for Ethernet is 1500 bytes.
The IP header and the TCP header take up 20 bytes each at least (unless
optional header fields are used) and thus the max for (non-Jumbo frame)
Ethernet is 1500 - 20 -20 = 1460
Source: https://stackoverflow.com/a/3074427/820520
2020-12-17 15:59:18 +04:00
Anton Kaliaev be6c016664 consensus: change log level to error when adding vote 2020-12-17 15:59:18 +04:00
Anton Kaliaev 085fd66f33 p2p: do not format raw msg bytes
While debugging the mempool issue (#5796), I've noticed we're spending
quite a bit of time encoding blobs of data, which never get printed! The
reason is filtering occurs on the level below, so Go runtime rightfully
evaluates function arguments.

I think it's okay to not format raw bytes.
2020-12-17 15:59:18 +04:00
Anton Kaliaev 2bb2af19e4 localnet: expose 6060 (pprof) and 9090 (prometheus) on node0
This removes the need to do it yourself every time you want to debug a
issue or look at Prometheus graphs.
2020-12-17 15:59:18 +04:00
Anton KaliaevandGitHub 5aa859c370 blockchain/v2: send status request when new peer joins (#5774)
Closes #5766

* memoize the scSchedulerFail error to avoid printing it every scheduleFreq
* blockchain/v2: modify switchIO funcs to accept peer instead of peerID
2020-12-14 11:25:28 +04:00
Anton KaliaevandGitHub 28e79a4d02 cmd: modify gen_node_key to print key to STDOUT (#5772)
closes: #5770
closes: #5769

also, include node ID in the output (#5769) and modify NodeKey to use
value semantics (it makes perfect sense for NodeKey to not be a
pointer).
2020-12-10 11:02:35 +04:00
Anton KaliaevandGitHub 15bf3a1509 goreleaser: lowercase binary name (#5765)
and specify files that go into an archive
2020-12-08 14:22:33 +04:00
Anton KaliaevandGitHub 89e908e340 blockchain/v0: relax termination conditions and increase sync timeout (#5741)
Closes: #5718
2020-12-08 11:33:03 +04:00
Anton KaliaevandGitHub 2c16ae99ee evidence: omit bytes field (#5745)
Follow-up to https://github.com/tendermint/tendermint/pull/5743
2020-12-04 11:33:36 +01:00
Anton KaliaevandGitHub 243ff4b43d blockchain/v1: remove in favor of v2 (#5728) 2020-12-03 09:35:47 +04:00
Anton KaliaevandGitHub 33dbff61d3 blockchain/v1: fix deadlock (#5711)
I introduced a new variable - syncEnded, which is now used to prevent
sending new events to channels (which would block otherwise) if reactor
is finished syncing

Closes #4591
2020-12-01 13:08:33 +00:00
Anton KaliaevandGitHub b1bbd37519 libs/bits: validate BitArray in FromProto (#5720)
Closes #5705
2020-12-01 12:44:56 +00:00
Anton KaliaevandGitHub e13b4386ff abci: modify Client interface and socket client (#5673)
`abci.Client`:

- Sync and Async methods now accept a context for cancellation
    * grpc client uses context to cancel both Sync and Async requests
    * local client ignores context parameter
    * socket client uses context to cancel Sync requests and to drop Async requests before sending them if context was cancelled prior to that

- Async methods return an error
    * socket client returns an error immediately if queue is full for Async requests
    * local client always returns nil error
    * grpc client returns an error if context was cancelled before we got response or the receiving queue had a space for response (do not confuse with the sending queue from the socket client)

- specify clients semantics in [doc.go](https://raw.githubusercontent.com/tendermint/tendermint/27112fffa62276bc016d56741f686f0f77931748/abci/client/doc.go)

`mempool.TxInfo`

- add optional `Context` to `TxInfo`, which can be used to cancel `CheckTx` request

Closes #5190
2020-11-30 16:46:16 +04:00
Anton KaliaevandGitHub 170cb70e19 test/e2e: enable v1 and v2 blockchains (#5702)
* test/e2e: enable v1 and v2 blockchains

* modify networks/ci.toml
2020-11-23 13:32:22 +00:00
Anton KaliaevandGitHub 3ad1157451 blockchain/v1: handle peers without blocks (#5701)
Closes #5444

Now we record the fact that a peer does not have a requested block and later use this information to make a new request for the same block from another peer.
2020-11-23 11:59:34 +00:00
Anton KaliaevandGitHub f2f6a78809 docs: warn developers about calling blocking funcs in Receive (#5679)
Refs #2888
2020-11-17 15:37:35 +00:00
Anton KaliaevandGitHub af645ac778 privval: reset pingTimer to avoid sending unnecessary pings (#5642)
Refs #5550
2020-11-10 11:43:01 +00:00
Anton KaliaevandGitHub adcfe80f09 remove Vagrantfile (#5641)
we're no longer using it for development
2020-11-10 11:33:21 +00:00
Anton KaliaevandGitHub 7041cae8e1 bump go version to 1.15 (#5639) 2020-11-10 15:19:52 +04:00
Anton KaliaevandGitHub fa522ca323 privval: increase read/write timeout to 5s and calculate ping interval based on it (#5638)
Partially closes #5550
2020-11-10 11:10:12 +00:00
Anton KaliaevandGitHub 335e97433c blockchain/v2: remove peers from the processor (#5607)
after they were pruned by the scheduler

Closes #5513
2020-11-05 12:24:48 +00:00
Anton KaliaevandGitHub 627f7b5989 light: run detector for sequentially validating light client (#5538)
Closes #5445
2020-11-02 12:42:03 +04:00
Anton KaliaevandGitHub 8e6194626e light: model-based tests (#5461)
This is the first iteration of model-based testing in Go Tendermint. The test runner is using the static JSON fixtures located under the ./json directory. In the future, the Rust tensgen binary will be used to generate those (given the static intermediate scenarios and the test seed, which will be published along with each testgen release).

Closes: #5322
2020-11-02 12:07:18 +04:00
Anton KaliaevandGitHub bcf9b0aa39 blockchain/v2: make the removal of an already removed peer a noop (#5553)
also, since multiple StopPeerForError calls may be executed in parallel,
only execute StopPeerForError once

Closes #5541
2020-10-30 10:31:22 +00:00
Anton KaliaevandGitHub b4adeab8b9 blockchain/v2: fix panic: processed height X+1 but expected height X (#5530)
Before: scheduler receives psBlockProcessed event, but does not mark block as processed because peer timed out (or was removed for other reasons) and all associated blocks were rescheduled.

After: scheduler receives psBlockProcessed event and marks block as processed in any case (even if peer who provided this block errors).

Closes #5387
2020-10-20 14:29:36 +04:00
Anton KaliaevandGitHub d785036e0b blockchain/v2: fix "panic: duplicate block enqueued by processor" (#5499)
When a peer is stopped due to some network issue, the Reactor calls scheduler#handleRemovePeer, which removes the peer from the scheduler. BUT the peer stays in the processor, which sometimes could lead to "duplicate block enqueued by processor" panic WHEN the same block is requested by the scheduler again from a different peer. The solution is to return scPeerError, which will be propagated to the processor. The processor will clean up the blocks associated with the peer in purgePeer.

Closes #5513, #5517
2020-10-20 14:19:00 +04:00
Anton KaliaevandGitHub 7121f68f25 light/rpc: fix ABCIQuery (#5375)
Closes #5106
2020-10-12 16:36:37 +04:00
Anton KaliaevandGitHub 12ebd7735a light: cross-check the very first header (#5429)
Closes #5428
2020-10-09 14:29:22 +04:00
Anton KaliaevandGitHub 01c32c62e8 docs: specify TM version in go tutorials (#5427)
Closes https://github.com/tendermint/tendermint/issues/5425
2020-09-30 09:10:34 +00:00
Anton KaliaevandGitHub 99aea7b079 mempool: fix nil pointer dereference (#5412)
previously, the second next could return nil, which would be the reason
for panic on line 275:

memTx := next.Value.(*mempoolTx)

Closes #5408
2020-09-29 12:15:54 +04:00
Anton KaliaevandGitHub 2672b91ab0 rpc/core: more docs and a test for /blockchain endpoint (#5417)
Closes #5339
2020-09-28 15:13:00 +00:00
Anton KaliaevandGitHub 1635d1339c state: more test cases for block validation (#5415)
Closes #2589
2020-09-28 11:57:35 +00:00
Anton KaliaevandGitHub 7d2b3e305e docs: minor tweaks (#5404)
* docs: fix /validators description

Refs https://github.com/tendermint/spec/pull/169

* consensus: remove nil err from logging statement

* update UPGRADING.md

* note about LightBlocks
2020-09-25 11:05:56 +04:00
Anton KaliaevandGitHub ffe2742a6c mempool: batch txs per peer in broadcastTxRoutine (#5321)
Closes #625
2020-09-23 14:13:13 +04:00
Anton KaliaevandGitHub 4b99502d5b config: set time_iota_ms to timeout_commit in test genesis (#5386)
also, document consensus parameters.
https://forum.cosmos.network/t/consensus-timeouts-explained/1421

Closes #4489
2020-09-23 12:24:45 +04:00
Anton KaliaevandGitHub 85a4be87a7 rpc/client: take context as first param (#5347)
Closes #5145

also applies to light/client
2020-09-23 09:21:57 +04:00
Anton KaliaevandGitHub 8aac1d1333 docs: document max entries for /blockchain RPC (#5356)
Closes #5339
2020-09-15 07:55:27 +00:00
Anton KaliaevandGitHub 59ec3d91e4 rpc/jsonrpc/server: ws server optimizations (#5312)
* docs: goleveldb is much more stable now

Refs https://github.com/syndtr/goleveldb/issues/226#issuecomment-682495490

* rpc/core/events: make sure WS client receives every event

previously, if the write buffer was full, the response would've been
lost without any trace (log msg, etc.)

* rpc/jsonrpc/server: set defaultWSWriteChanCapacity to 1

Refs #3905
Closes #3829

setting write buffer capacity to 1 makes transactions count per block
more stable and also reduces the pauses length by 20s.

before: https://github.com/tendermint/tendermint/issues/3905#issuecomment-681854328 net.Read - 20s
after: net.Read - 0.66s

* rpc/jsonrpc/server: buffer writes and avoid io.ReadAll during read
2020-09-04 10:58:47 +04:00
Anton KaliaevandGitHub 43c3e4265b config: rename prof_laddr to pprof_laddr and move it to rpc (#5315)
* config: rename prof_laddr to pprof_laddr and move it to rpc

also, remove `/unsafe_start_cpu_profiler`, `/unsafe_stop_cpu_profiler`
and `/unsafe_write_heap_profile` in favor of pprof server functionality.

Closes #5303

* update changelog

* log start
2020-09-01 11:54:21 +04:00
Anton KaliaevandGitHub 8a1404b70e mempool: return an error when WAL fails (#5292)
Closes #2319
2020-09-01 10:21:11 +04:00
Anton KaliaevandGitHub 4827ed121f libs/bits: inline defer and change order of mutexes (#5187)
* libs/bits: inline defer and change order of mutexes

Closes #3217

* abci/client: unexpose StopForError func

a) it's not called outside
b) the reason for exposing it in the first place is unclear
c) Stop already exist if someone from outside wants to stop the client
2020-08-26 13:18:30 +04:00
Anton KaliaevandGitHub db345066a8 rpc/client/http: log error (#5182)
Closes #3410
2020-07-31 09:36:14 +00:00
Anton KaliaevandGitHub 0d8d721999 consensus: only call privValidator.GetPubKey once per block (#5143)
Closes #4865
2020-07-30 09:44:04 +00:00
Anton KaliaevandGitHub 4d43bfe3bd state: revert event hashing (#5159)
See ADR 058

Closes #5113

Spec PR: https://github.com/tendermint/spec/pull/122
2020-07-30 09:15:08 +00:00
Anton KaliaevandGitHub 2b97e03cf6 docs: document canonical field (#5166)
Closes #2769

Spec PR: https://github.com/tendermint/spec/pull/125
2020-07-30 09:07:03 +00:00
Anton KaliaevandGitHub b5f030892d docs: document ConsensusParams (#5165)
Closes #2836
2020-07-29 11:24:01 +00:00
Anton KaliaevandGitHub 4ab7b7d7ca docs: add more details on Vote struct from /consensus_state (#5164)
Closes #2743
2020-07-29 10:20:39 +00:00
Anton KaliaevandGitHub a29fd7c699 proto: add a comment for Validator#Address (#5144)
Refs #3732
2020-07-28 12:04:44 +00:00
Anton KaliaevandGitHub 6f614119e8 docs: simplify choosing an ADR number (#5156)
Closes #2313
2020-07-27 17:36:05 +00:00
Anton KaliaevandGitHub fb4e00f7f9 docs: event hashing ADR 058 (#5134)
Refs #5113
2020-07-27 12:40:12 +04:00
Anton KaliaevandGitHub 940e68292c privval: if remote signer errors, don't retry (#5140)
Closes #5112
2020-07-22 10:12:37 +04:00
Anton KaliaevandGitHub 95fc7e58ee rpc/jsonrpc/server: merge WriteRPCResponseHTTP and WriteRPCResponseAr (#5141)
...rrayHTTP 

Closes #5135

Also, wrote a test for WriteRPCResponseHTTPError and used it with correct status codes according to https://www.jsonrpc.org/historical/json-rpc-over-http.html#response-codes
2020-07-21 13:03:02 +00:00
Anton KaliaevandGitHub 8cdb53c811 docs: EventAttribute#Index is not deterministic (#5132)
Closes #5125
2020-07-19 09:36:01 +00:00
Anton KaliaevandGitHub 5223cbac27 light: return if target header is invalid (#5124)
Closes #5120
2020-07-17 06:13:00 +00:00
Anton KaliaevandGitHub a08316f16a light: use bisection (not VerifyCommitTrusting) when verifying a head… (#5119)
Closes #4934

* light: do not compare trusted header w/ witnesses

we don't have trusted state to bisect from

* check header before checking height

otherwise you can get nil panic
2020-07-15 15:44:30 +04:00
Anton KaliaevandGitHub 0825d57cf7 proto/tendermint/abci: fix Request oneof numbers (#5116)
- the sequence does not start with 1
- RequestDeliverTx has out-of-order field number

Closes #5115
2020-07-14 08:24:08 +00:00
Anton KaliaevandGitHub 730e16566e proto: change type + a cleanup (#5107)
- drop Height & Base from StatusRequest
It does not make sense nor it's used anywhere currently. Also, there
seem to be no trace of these fields in the ADR-40 (blockchain reactor
v2).

- change PacketMsg#EOF type from int32 to bool
2020-07-13 10:24:17 +00:00
Anton KaliaevandGitHub 16216028a1 proxy: improve ABCI app connection handling (#5078)
Closes #5074 

Old code does not work when --consensus.create_empty_blocks=false
(because it only calls tmos.Kill when ApplyBlock fails). New code is
listening ABCI clients for Quit and kills TM process if there were any
errors.
2020-07-08 12:07:11 +00:00
Anton KaliaevandGitHub 6e434338ec abci/types: add comment for TotalVotingPower (#5081)
Refs #4581
2020-07-03 10:24:12 +00:00
Anton KaliaevandTess Rinearson 480b995a31 consensus: Do not allow signatures for a wrong block in commits
Closes #4926

The dump consensus state had this:

      "last_commit": {
        "votes": [
          "Vote{0:04CBBF43CA3E 385085/00/2(Precommit) 1B73DA9FC4C8 42C97B86D89D @ 2020-05-27T06:46:51.042392895Z}",
          "Vote{1:055799E028FA 385085/00/2(Precommit) 652B08AD61EA 0D507D7FA3AB @ 2020-06-28T04:57:29.20793209Z}",
          "Vote{2:056024CFA910 385085/00/2(Precommit) 652B08AD61EA C8E95532A4C3 @ 2020-06-28T04:57:29.452696998Z}",
          "Vote{3:0741C95814DA 385085/00/2(Precommit) 652B08AD61EA 36D567615F7C @ 2020-06-28T04:57:29.279788593Z}",

Note there's a precommit in there from the first val from May (2020-05-27) while the rest are from today (2020-06-28). It suggests there's a validator from an old instance of the network at this height (they're using the same chain-id!). Obviously a single bad validator shouldn't be an issue. But the Commit refactor work introduced a bug.

When we propose a block, we get the block.LastCommit by calling MakeCommit on the set of precommits we saw for the last height. This set may include precommits for a different block, and hence the block.LastCommit we propose may include precommits that aren't actually for the last block (but of course +2/3 will be). Before v0.33, we just skipped over these precommits during verification. But in v0.33, we expect all signatures for a blockID to be for the same block ID! Thus we end up proposing a block that we can't verify.
2020-07-02 15:41:49 +02:00
Anton KaliaevandTess Rinearson 42be533129 types: verify commit fully
Since the light client work introduced in v0.33 it appears full nodes
are no longer fully verifying commit signatures during block execution -
they stop after +2/3. See in VerifyCommit:
https://github.com/tendermint/tendermint/blob/0c7fd316eb006c0afc13996c00ac8bde1078b32c/types/validator_set.go#L700-L703

This means proposers can propose blocks that contain valid +2/3
signatures and then the rest of the signatures can be whatever they
want. They can claim that all the other validators signed just by
including a CommitSig with arbitrary signature data. While this doesn't
seem to impact safety of Tendermint per se, it means that Commits may
contain a lot of invalid data. This is already true of blocks, since
they can include invalid txs filled with garbage, but in that case the
application knows they they are invalid and can punish the proposer. But
since applications dont verify commit signatures directly (they trust
tendermint to do that), they won't be able to detect it.

This can impact incentivization logic in the application that depends on
the LastCommitInfo sent in BeginBlock, which includes which validators
signed. For instance, Gaia incentivizes proposers with a bonus for
including more than +2/3 of the signatures. But a proposer can now claim
that bonus just by including arbitrary data for the final -1/3 of
validators without actually waiting for their signatures. There may be
other tricks that can be played because of this.

In general, the full node should be a fully verifying machine. While
it's true that the light client can avoid verifying all signatures by
stopping after +2/3, the full node can not. Thus the light client and
full node should use distinct VerifyCommit functions if one is going to
stop after +2/3 or otherwise perform less validation (for instance light
clients can also skip verifying votes for nil while full nodes can not).

See a commit with a bad signature that verifies here: 56367fd. From what
I can tell, Tendermint will go on to think this commit is valid and
forward this data to the app, so the app will think the second validator
actually signed when it clearly did not.
2020-07-02 15:41:49 +02:00
Anton KaliaevandGitHub 9b7f260bbb types: simplify safeMul (#5061)
Refs https://github.com/tendermint/tendermint/pull/4764#discussion_r446488731

also, multiplication using * should be more efficient.
2020-06-29 16:26:14 +00:00
Anton KaliaevandGitHub 0c7fd316eb abci/example/kvstore: decrease val power by 1 upon equivocation (#5056)
in `persistent_kvstore`
2020-06-26 11:58:27 +00:00
Anton KaliaevandGitHub 659c4be60f mempool: make it clear overwriting of pre/postCheck filters is intent… (#5054)
…ional

Closes #4773
2020-06-26 08:47:48 +00:00
Anton KaliaevandGitHub 7a1ee66763 rpc: move docs from doc.go to swagger.yaml (#5044)
also,

- add an example for WS
- mention that a subscription could be terminated in /subscribe

Closes #5014
2020-06-25 05:53:18 +00:00
Anton KaliaevandGitHub 44b306b38e types: reject blocks w/ ConflictingHeadersEvidence (#5041)
* types: reject blocks w/ ConflictingHeadersEvidence

Closes #5037

* types: reject blocks w/ PotentialAmnesiaEvidence

as well

PotentialAmnesiaEvidence does not contribute anything on its own,
therefore should not be committed on chain.

* fix lint issue
2020-06-23 16:55:16 +04:00
ceac02b891 types: add AppVersion to ConsensusParams (#5031)
Co-authored-by: JamesRay <66258875@qq.com>

making it possible to change app version via EndBlock
2020-06-23 12:14:16 +04:00