Commit Graph

954 Commits

Author SHA1 Message Date
Jane Lusby b727beb778 use better generic idents 2020-06-19 01:48:56 -04:00
Jane Lusby 61489dbf5d fix debug impl 2020-06-19 01:48:56 -04:00
Jane Lusby faf36f5c04 require clone bound inner error type rather than Arcifying it ourselves 2020-06-19 01:48:56 -04:00
Jane Lusby 9db936923b use type inference 2020-06-19 01:48:56 -04:00
Jane Lusby 63ae085945 make return error type for Batch generic 2020-06-19 01:48:56 -04:00
Henry de Valence 6cc1627a5d zebrad: apply serde(default) to config sections
Each subsection has to have `serde(default)` to get the behaviour we want
(delete all fields except the ones that have been changed); otherwise, we can
delete only entire sections.
2020-06-18 17:43:36 -04:00
Henry de Valence 4b8f07ebb2 zebrad: Add reference to config docs. 2020-06-18 17:43:36 -04:00
Alfredo Garcia b8f174ee3a change config module to generate 2020-06-18 12:44:02 -07:00
dependabot[bot] 70948556cf Bump ed25519-zebra from 0.4.0 to 0.4.1
Bumps [ed25519-zebra](https://github.com/ZcashFoundation/ed25519-zebra) from 0.4.0 to 0.4.1.
- [Release notes](https://github.com/ZcashFoundation/ed25519-zebra/releases)
- [Changelog](https://github.com/ZcashFoundation/ed25519-zebra/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ZcashFoundation/ed25519-zebra/compare/0.4.0...0.4.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-06-18 03:18:56 -07:00
Jane Lusby 7f8a336b69 switch to on_disk state service for start cmd 2020-06-17 23:30:50 -07:00
Jane Lusby df18ac72c5 fix sharedpeererror to propagate tracing context 2020-06-17 14:38:26 -07:00
Jane Lusby fa6b098056
cleanup clippy warnings (#495)
Co-authored-by: Jane Lusby <jane@zfnd.org>
2020-06-16 17:51:50 -07:00
Henry de Valence a40b1a787b Clean up Ed25519 example 2020-06-16 14:35:42 -07:00
Henry de Valence b299fb7162 Remove deprecated pin_project items 2020-06-16 14:35:42 -07:00
Henry de Valence a0e0e2302b Update ed25519-zebra to 0.4 2020-06-16 14:35:42 -07:00
Henry de Valence 34ca9a7ed2 Fix Ed25519Verifier using a patched batch API.
Changing the batch API to have an explicit item type removes the lifetime
problems described in the previous commit.
2020-06-16 14:35:42 -07:00
Henry de Valence 5bcef64514 Add Ed25519 batch verification example test.
This test doesn't compile in a way that reveals a problem with the design.  The
verification service takes a `Request<'msg>` parameterized by the message
lifetime, and returns a future unconstrained by the message lifetime (it hashes
upfront to avoid requiring that `'msg` outlive `call`).  But the `Batch`
middleware has the verification service working on its own task, so how can we
ensure that the message lives long enough to be read by the worker task?
2020-06-16 14:35:42 -07:00
Henry de Valence 8f2ee22708 Add documentation. 2020-06-16 14:35:42 -07:00
Henry de Valence ee26e786f7 tower-batch: initial implementation of batching logic.
The name "Buffer" is changed to "Batch" everywhere, and the worker task is rewritten.

Instead of having Worker implement Future directly, we have a consuming async run() function.
2020-06-16 14:35:42 -07:00
Henry de Valence dcd3f7bb2d tower-batch: copy tower-buffer source code.
There's a lot of functional overlap between the batch design and tower-buffer's
existing internals, so we'll just vendor its source code and modify it.
If/when we upstream it, we can deduplicate common components.
2020-06-16 14:35:42 -07:00
Deirdre Connolly dab3eeca3c Go back to stable clippy-check
The experimental one duplicates outputs X however many github checks run, rust or not.
2020-06-16 17:14:27 -04:00
Jane Lusby 685bdaf2df don't require absense of cancel handles
Prior to this change, we required that services that are canceled do not
have a cancel handle in the `cancel_handles` list, based on the
assumption that the handle must have been removed in the process of
canceling this service.

This doesn't holding up though, because it is currently possible for us
to have the same peer connect to us multiple times, the second connect
removes the cancel handle of the original connect and inserts it's own
cancel handle in its place. In this scenario, when the first service is
polled for readiness it will see that it has been canceled and go to
clean itself up, but when it asserts that it doesn't have a cancel
handle it will see the cancel handle of the second connect event, which
uses the same key as the first connect, and fail its debug assertion.

This change removes that debug assert on the assumption that it is okay
for a peer to connect multiple times consecutively, and that the correct
behavior in that case is to just cancel the first connection and
continue as normal.
2020-06-16 13:42:31 -07:00
Jane Lusby 06fd3b2503 be more explicit with pattern in drain_requests 2020-06-16 12:04:45 -07:00
Jane Lusby b0ecd019b6 apply comments from code review 2020-06-16 12:04:45 -07:00
Jane Lusby d09c339dc5 little more cleaning 2020-06-16 12:04:45 -07:00
Jane Lusby 528fd2b5b1 add an outline of the structure of the node 2020-06-16 12:04:45 -07:00
Jane Lusby fc96a41b18 copy connect command into start command 2020-06-16 12:04:45 -07:00
dependabot[bot] 42fc386bb9 Bump thiserror from 1.0.19 to 1.0.20
Bumps [thiserror](https://github.com/dtolnay/thiserror) from 1.0.19 to 1.0.20.
- [Release notes](https://github.com/dtolnay/thiserror/releases)
- [Commits](https://github.com/dtolnay/thiserror/compare/1.0.19...1.0.20)

Signed-off-by: dependabot[bot] <support@github.com>
2020-06-16 09:51:05 -07:00
Henry de Valence 9ddcccdcb4 Update ed25519-zebra to 0.3 2020-06-16 00:42:25 -04:00
Henry de Valence a023ba9b16
Add serde bounds to zebra-chain structures. (#231) 2020-06-15 15:08:14 -07:00
Jane Lusby bb0553fab6
implement initial persistent state backend based on `sled` (#473) 2020-06-15 14:41:26 -07:00
dependabot[bot] 5afea58fe2 Bump serde from 1.0.111 to 1.0.112
Bumps [serde](https://github.com/serde-rs/serde) from 1.0.111 to 1.0.112.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.111...v1.0.112)

Signed-off-by: dependabot[bot] <support@github.com>
2020-06-15 14:11:11 -04:00
teor 210e11a86d chain: Check the maximum block size when parsing
The maximum block size is 2,000,000 bytes. This commit also limits the
maximum transaction size in parsed blocks. (See #484 for the
corresponding limit on mempool transactions.)

The proptests might test the maximum block size, but they are
randomised. So we also want to explicitly test large block sizes.
(See #482 for these test cases and tests.)

Part of #477.
2020-06-15 11:00:48 -07:00
dependabot[bot] 7710ee20dc Bump pin-project from 0.4.20 to 0.4.22
Bumps [pin-project](https://github.com/taiki-e/pin-project) from 0.4.20 to 0.4.22.
- [Release notes](https://github.com/taiki-e/pin-project/releases)
- [Changelog](https://github.com/taiki-e/pin-project/blob/master/CHANGELOG.md)
- [Commits](https://github.com/taiki-e/pin-project/compare/v0.4.20...v0.4.22)

Signed-off-by: dependabot[bot] <support@github.com>
2020-06-15 10:57:19 -07:00
teor 585fa7a1ae chain: Verify the solutionSize field in block headers
Verify the value of the equihash solution size field in block headers.

This field isn't stored in the BlockHeader struct, so we need to verify
it at parse time.

Part of #477.
2020-06-15 19:04:43 +10:00
Deirdre Connolly a577303329 Create zbot.yml 2020-06-13 06:15:20 -04:00
Jane Lusby 4b9e4520ce
cleanup API for arc based error type (#469)
Co-authored-by: Jane Lusby <jane@zfnd.org>
2020-06-12 11:29:42 -07:00
teor 334329f38a state: Move block header hashing to block_index
Only hash block headers in the lowest-level block index code.

This design has a few benefits:
  - failures are obvious, because the hash is not available,
  - get_tip() returns a smaller object,
  - we avoid re-hashing block headers multiple times.

These efficiency changes may be needed to support chain reorganisations,
multiple tips, and heavy query loads.
2020-06-12 09:46:18 -07:00
teor 26a58b23de state: Make Response::Added return the block header hash
Move block header hashing from zebra-consensus to zebra-state.
Handle zebra-state AddBlock errors in zebra-consensus BlockVerifier.
Add unit tests for BlockVerifier state error handling.

Part of #428.
2020-06-12 09:46:18 -07:00
Henry de Valence cbb50ea506 Simplify `where` bounds on services.
Placing bounds on the service's future is less ideal, because the future is
already constrained by the `Service` trait, so the bounds can be expressed more
directly and simply by bounding the service itself.

If the verification service already has to have a generic parameter for the
future (the `ZSF`), it could instead be generic over `S`, the storage service.
This has the upside that it's no longer required for the verification service
to box the storage service, so we don't add any extra layers of indirection,
and the where bounds become more straightforward, since they're centered on the
requirements for the storage service itself, not the future it returns.
Finally, we can simplify the bounds by using the request / response types
directly rather than defining wrapper types.
2020-06-12 09:46:18 -07:00
Henry de Valence adf0769ac2 Get the round trip test to pass.
The reason the test failed is that the future returned by `call` on the state
service was immediately dropped, rather than being driven to completion.
Instead, we link the state update future with the verification future by
.awaiting it in an async block.

Note that the state update future is constructed outside of the async block
returned by the verification service.  Why?  Because calling
`self.state_service.call` requires mutable access to `state_service`, which we
only have in the body of the verification service's `call` method, and not
during execution of the async block it returns (which could happen at some
later point, or never).

In Tower's model, the `call` method itself only does the work necessary to
construct a future that represents completion of the service call, and the rest
of the work is done in the future itself.  In particular, the fact that
`Service::call` takes `&mut self` means two things:

1. the service's state can be mutated while setting up the future, but not
during the future's subsequent execution,

2. any nested service calls made *by* the service *to* sub-services (e.g., the
verification service calling the state service) must either be made upfront,
while constructing the response future, or must be made to a clone of the
sub-service owned by the the response future.
2020-06-12 09:46:18 -07:00
teor 15bc64aed9 consensus: add a (failing) verify round-trip test
This test doesn't work, because the futures are not used correctly.

Part of #428.
2020-06-12 09:46:18 -07:00
teor c2590ce526 consensus: Make future handling a little nicer
Part of #428.
2020-06-12 09:46:18 -07:00
teor 7b8707be1e consensus: Add a simple block verify test
Part of #428.
2020-06-12 09:46:18 -07:00
teor d0a833f3fb consensus: Make the state service pluggable in block verification
We want to allow different state service implementations, and wrapped
state services. So we make verify::init() take a state_service, and
store that service in the BlockVerifier state_service field.

Part of #428.
2020-06-12 09:46:18 -07:00
teor 8072d5b7e8 state: Add an Error type alias to ZebraState 2020-06-12 09:46:18 -07:00
teor 4181c8a5d5 consensus: Make BlockVerifier respond with the BlockHeaderHash
Part of #428.
2020-06-12 09:46:18 -07:00
teor c019726fb1 consensus: Add a script verifier stub
Part of #428.
2020-06-12 09:46:18 -07:00
teor ba61498a7f Ignore emacs temp files 2020-06-12 09:46:18 -07:00
teor af1d64b218 consensus: Add a transaction verification stub
Part of #428.
2020-06-12 09:46:18 -07:00