Commit Graph

1186 Commits

Author SHA1 Message Date
Deirdre Connolly 9d87f30d18 Start of, but currently unfinished, Sapling note commitment / Windowed Pedersen Commitment 2020-08-14 02:04:12 -04:00
Deirdre Connolly f64e0c4bc5 Sapling value commitment, half done Sapling note commitment 2020-08-14 02:04:12 -04:00
Deirdre Connolly 823b06b219 Break out subtypes into modules, including arbitrary's 2020-08-14 02:04:12 -04:00
Deirdre Connolly 006137dae1 Increase timeout on coverage job, reorg config 2020-08-14 02:04:12 -04:00
Deirdre Connolly dfb10ab10f Add NoteCommitment.extract_u() 2020-08-14 02:04:12 -04:00
Deirdre Connolly 33730a05cb Do not confuse a NoteCommitment for U(NoteCommitment) 2020-08-14 02:04:12 -04:00
Deirdre Connolly 0f46a9b6a8 NoteCommitments, renames, ValueCommitment, strategies, stub commit() 2020-08-14 02:04:12 -04:00
Deirdre Connolly fa053e2b0b Derive a Sprout nullifier from a nullifier seed (rho) and spending key 2020-08-14 02:04:12 -04:00
Deirdre Connolly 0d618a3abf Start treestate module 2020-08-14 02:04:12 -04:00
Deirdre Connolly 28a7420079 Remove unused imports 2020-08-14 02:04:12 -04:00
Deirdre Connolly 15899bc6d3 More Note refinements 2020-08-14 02:04:12 -04:00
Deirdre Connolly 2c285985c8 Move nullifiers to respective note modules, pull in existing types from keys 2020-08-14 02:04:12 -04:00
Jane Lusby 8b78a55c71 Start work implementing sprout note commitment function 2020-08-14 02:04:12 -04:00
teor 0e21a70b88
feature: Implement CompactDifficulty to Work (#838)
* Implement CompactDifficulty to Work
* Add Bitcoin test vectors for difficulty
2020-08-14 09:48:15 +10:00
Henry de Valence 07917421cb
Correct coinbase check (#898)
* chain: add Transaction::is_coinbase()

This matches the check in zcashd/src/primitives/transaction.h:682
(CTransaction::IsCoinBase).

* chain: correct Block::is_coinbase_first

This matches zcashd/src/main.cpp:3968-3974 in CheckBlock.

Previously, the check allowed the first transaction to have multiple coinbase inputs.

* chain: return slices from Transaction::inputs()/outputs()

They're slices internally so we might as well just expose them that way.
2020-08-13 14:04:43 -07:00
Alfredo Garcia e73f976194
Valid generated config acceptance test (#859)
* add valid generated config test

* change to pathbuf

* use -c to make sure we are using the generated file

* add and use a ZebraTestDir type

* change approach to generate tempdir in top of each test

* pass tempdir to test_cmd and set current dir to it

* add and use a `generated_config_path` variable in tests
2020-08-13 13:31:13 -07:00
Deirdre Connolly b4245f4d01
Fix healthcheck (tracing) endpoint (#895)
* Switch to n1-highcpu-2

* Add tracing.endpoint_addr config to release docker image
2020-08-13 03:31:09 -04:00
Deirdre Connolly 250e1af4f1
Use an n1-standard-2 machine for node deployments (#893)
We don't load the entire blockchain into memory anymore. 😂

Resolves #892
2020-08-12 20:08:19 -07:00
teor 82b0db3b41 fix: Rename ChainVerifier test variables
We removed the ready checks, but forgot to rename the variables.
2020-08-13 11:28:44 +10:00
Henry de Valence a79ce97957
Fix sync algorithm. (#887)
* checkpoint: reject older of duplicate verification requests.

If we get a duplicate block verification request, we should drop the older one
in favor of the newer one, because the older request is likely to have been
canceled.  Previously, this code would accept up to four duplicate verification
requests, then fail all subsequent ones.

* sync: add a timeout layer to block requests.

Note that if this timeout is too short, we'll bring down the peer set in a
retry storm.

* sync: restart syncing on error

Restart the syncing process when an error occurs, rather than ignoring it.
Restarting means we discard all tips and start over with a new block locator,
so we can have another chance to "unstuck" ourselves.

* sync: additional debug info

* sync: handle lookahead limit correctly.

Instead of extracting all the completed task results, the previous code pulled
results out until there were fewer tasks than the lookahead limit, then
stopped.  This meant that completed tasks could be left until the limit was
exceeded again.  Instead, extract all completed results, and use the number of
pending tasks to decide whether to extend the tip or wait for blocks to finish.

* network: add debug instrumentation to retry policy

* sync: instrument the spawned task

* sync: streamline ObtainTips/ExtendTips logic & tracing

This change does three things:

1.  It aligns the implementation of ObtainTips and ExtendTips so that they use
the same deduplication method.  This means that when debugging we only have one
deduplication algorithm to focus on.

2.  It streamlines the tracing output to not include information already
included in spans. Both obtain_tips and extend_tips have their own spans
attached to the events, so it's not necessary to add Scope: prefixes in
messages.

3.  It changes the messages to be focused on reporting the actual
events rather than the interpretation of the events (e.g., "got genesis hash in
response" rather than "peer could not extend tip").  The motivation for this
change is that when debugging, the interpretation of events is already known to
be incorrect, in the sense that the mental model of the code (no bug) does not
match its behavior (has bug), so presenting minimally-interpreted events forces
interpretation relative to the actual code.

* sync: hack to work around zcashd behavior

* sync: localize debug statement in extend_tips

* sync: change algorithm to define tips as pairs of hashes.

This is different enough from the existing description that its comments no
longer apply, so I removed them.  A further chunk of work is to change the sync
RFC to document this algorithm.

* sync: reduce block timeout

* state: add resource limits for sled

Closes #888

* sync: add a restart timeout constant

* sync: de-pub constants
2020-08-12 16:48:01 -07:00
Alfredo Garcia 0aea09c1ac
Use transcript in consensus chain tests (#858)
* change several tests to transcript in consensus chain tests

* rename transcripts

* rename state transcript

* fix spandocs

* add timeout layer to tests

* run transcripts on the wrapped timeout service, remove ready calls
2020-08-12 16:28:30 -07:00
teor 109666cc48
fix: Tweak the the network listener log (#886) 2020-08-12 14:22:54 -07:00
Deirdre Connolly 7541c1334a
s/infrastructure/A-infrastructure (#883)
* s/infrastructure/A-infrastructure

* Add A-dependencies, A-rust labels

* Rearrange
2020-08-11 16:41:29 -07:00
Henry de Valence 36093b4721 Tweak light client root hash definition.
This changes the `light_client_root_hash` field to `light_client_root_bytes` to
hint that it's unparsed, and makes it public to match the rest of the
`BlockHeader` fields.  The `LightClientRootHash` serialization methods are
hidden from the public API, so that the `LightClientRootHash` has to be
constructed by the method on the `Block`.
2020-08-11 19:13:50 -04:00
teor aa922564b4
rfc: Update the RFC template to talk about testing and maintenance (#875) 2020-08-11 13:26:35 -07:00
Jane Lusby 3655581888
box the state service (#879)
* box the state service

* cleanup
2020-08-11 13:25:40 -07:00
Henry de Valence 299afe13df
zebra-network tweaks. (#877)
* network: move gossiped peer selection logic into address book.

* network: return BoxService from init.

* zebrad: add note on why we truncate thegossiped peer list

Co-authored-by: Jane Lusby <jlusby42@gmail.com>

* Remove unused .rustfmt.toml

Many of these options are never actually loaded by our CI because of a channel
mismatch, where they're not applied on stable but only on nightly (see the logs
from a rustfmt job).  This means that we can get different settings when
running `cargo fmt` on the nightly and stable channels, which was causing a CI
failure on this PR.  Reverting back to the default rustfmt settings avoids this
problem and keeps us in line with upstream rustfmt.  There's no loss to us
since we were using the defaults anyways.

Co-authored-by: Jane Lusby <jlusby42@gmail.com>
2020-08-11 13:07:44 -07:00
dependabot[bot] 945b019739
build(deps): bump tracing-subscriber from 0.2.10 to 0.2.11 (#873)
Bumps [tracing-subscriber](https://github.com/tokio-rs/tracing) from 0.2.10 to 0.2.11.
- [Release notes](https://github.com/tokio-rs/tracing/releases)
- [Commits](https://github.com/tokio-rs/tracing/compare/tracing-subscriber-0.2.10...tracing-subscriber-0.2.11)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-11 10:30:50 -07:00
dependabot[bot] 69ab12a4bb
build(deps): bump serde from 1.0.114 to 1.0.115 (#874)
Bumps [serde](https://github.com/serde-rs/serde) from 1.0.114 to 1.0.115.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.114...v1.0.115)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-11 10:20:02 -07:00
dependabot[bot] 5cb61136c9
build(deps): bump tracing from 0.1.18 to 0.1.19 (#872)
Bumps [tracing](https://github.com/tokio-rs/tracing) from 0.1.18 to 0.1.19.
- [Release notes](https://github.com/tokio-rs/tracing/releases)
- [Commits](https://github.com/tokio-rs/tracing/compare/tracing-0.1.18...tracing-0.1.19)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-11 10:18:54 -07:00
teor 2550c44d48
Make sync ignore known hashes (#853)
* fix: Handle known ObtainTips correctly

enumerate never returns a value beyond the end of the vector.

* fix: Ignore known tips in ExtendTips

Some peers send us known tips when we try to extend.

* fix: Ignore known hashes when downloading

Despite all our other checks, we still end up downloading some hashes
multiple times.

* fix: Increase the number of retries

The old sync code relied on duplicate block fetches to make progress,
but the last few commits have removed some of those duplicates.

Instead, just retry the fetches that fail.

* fix: Tweak comments

Co-authored-by: Jane Lusby <jlusby42@gmail.com>

* fix: Cleanup the state_contains interface in Sync

* Fix brackets

Oops

Co-authored-by: Jane Lusby <jlusby42@gmail.com>
2020-08-10 16:17:50 -07:00
Alfredo Garcia c9093e4d59
Make more checks in non server acceptance tests (#860)
* make sure no info is printed in non server tests

* check exact full output for validity instead of log msgs

* add end of output character to version regex

* use coercions, use equality operator

Co-authored-by: Jane Lusby <jlusby42@gmail.com>

Co-authored-by: Jane Lusby <jlusby42@gmail.com>
2020-08-10 12:50:48 -07:00
Alfredo Garcia 9c387521bd
Print endpoint addresses at startup (#867)
* print tracing and metrics endpoints in startup

* print network address in startup
2020-08-10 12:47:26 -07:00
Henry de Valence f8a24f9c11
Rename script fields to lock/unlock scripts. (#866)
This is slightly clearer and more correct than the previous pk_script.
2020-08-10 11:49:38 -07:00
dependabot[bot] 4ec011f32d build(deps): bump indexmap from 1.5.0 to 1.5.1
Bumps [indexmap](https://github.com/bluss/indexmap) from 1.5.0 to 1.5.1.
- [Release notes](https://github.com/bluss/indexmap/releases)
- [Commits](https://github.com/bluss/indexmap/compare/1.5.0...1.5.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-08-10 06:06:00 -04:00
teor 98659ac565 fix: Stop duplicating genesis hashes in the block locator
And add some tests to avoid future bugs.
2020-08-10 18:58:21 +10:00
teor e95358dbe3 fix: Increase the number of retries
The old sync code relied on duplicate block fetches to make progress,
but the last few commits have removed some of those duplicates.

Instead, just retry the fetches that fail.
2020-08-10 18:58:21 +10:00
teor 23469b2347 fix: Only ask for blocks within the reorg limit
Instead of creating a block locator all the way back to the genesis
block, only ask for blocks within the reorg limit (99 blocks).

Use the reorg limit as the final locator. (Or if the chain is less
than 99 blocks, use the genesis block.)

Fixes some instances of #818 at very small block heights.
2020-08-10 18:58:21 +10:00
teor 1d3dd35175 fix: Include the current tip in the block locator
The state service was providing block locators starting at the parent of
the current tip. Instead, include the current tip in the block locator.

Also handle an edge case where we could include the genesis block twice,
if the current tip height was a power of two.

Fixes an instance of #818 where we re-download the current tip.
2020-08-10 18:58:21 +10:00
teor 7afd76f5fb feature: Add light_client_root_hash(network) to Block
* use the right variant in LightClientRootHash::from_bytes()
* make block.header.light_client_root_hash pub(super)
* add tests for LightClientRootHash and block.light_client_root_hash
2020-08-10 18:54:42 +10:00
teor ee6f0de14d refactor: Move NetworkUpgrade to zebra-chain 2020-08-10 18:54:42 +10:00
teor c4eb136426 feature: Add a LightClientRootHash type 2020-08-10 18:54:42 +10:00
teor 53ce01fd23 fix: Rename the light client hash field 2020-08-10 18:54:42 +10:00
teor faac50697c feature: Add a verified blocks metrics counter
We have a counter for pending "download and verify" futures. But these
futures are spawned, so they can complete in any order. They can also
complete before we receive their results.
2020-08-10 15:12:08 +10:00
teor 6aeefcee8b fix: Improve sync diagnostics 2020-08-10 15:12:08 +10:00
teor 65c3c503d5 fix: Improve verifier diagnostics
Log a message with the height when we get duplicate blocks.

Downgrade some verifier errors and warnings to info and debug, because
some peers on mainnet consistently provide bad blocks.
2020-08-10 15:12:08 +10:00
Jane Lusby a6b9de6938
Add a definitions section to our RFC template (#846)
* Add a definitions section to our RFC template

* Update 0000-template.md
2020-08-07 13:29:00 -04:00
teor 62225653f0 fix: Reduce the previous block waiting time
Reduce the amount of time that the block verifier waits for the previous
block, before polling again.

(Waiting for 2 seconds resulted in some apparent block verifier hangs.)

This is a temporary fix, until the state layer handles context checks.
2020-08-07 13:28:02 -04:00
dependabot[bot] 3de99bd360
build(deps): bump color-eyre from 0.5.0 to 0.5.1 (#855)
Bumps [color-eyre](https://github.com/yaahc/color-eyre) from 0.5.0 to 0.5.1.
- [Release notes](https://github.com/yaahc/color-eyre/releases)
- [Commits](https://github.com/yaahc/color-eyre/commits)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-07 10:12:50 -07:00
Henry de Valence 6d1a4b2218
Load config after initializing the Terminal (#848) 2020-08-06 17:22:40 -07:00