Commit Graph

962 Commits

Author SHA1 Message Date
Janito Vaqueiro Ferreira Filho b44d81669f
Move the check in `transaction::check::sapling_balances_match` to `V4` deserialization (#2234)
* Implement `PartialEq<i64>` for `Amount`

Allows to compare an `Amount` instance directly to an integer.

* Add `SerializationError::BadTransactionBalance`

Error variant representing deserialization of a transaction that doesn't
conform to the Sapling consensus rule where the balance MUST be zero if
there aren't any shielded spends and outputs.

* Validate consensus rule when deserializing

Return an error if the deserialized V4 transaction has a non-zero value
balance but doesn't have any Sapling shielded spends nor outputs.

* Add consensus rule link to field documentation

Describe how the consensus rule is validated structurally by
`ShieldedData`.

* Clarify that `value_balance` is zero

Make the description more concise and objective.

Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>

* Update field documentation

Include information about how the consensus rule is guaranteed during
serialization.

Co-authored-by: teor <teor@riseup.net>

* Remove `check::sapling_balances_match` function

The check is redundant because the respective consensus rule is
validated structurally by `ShieldedData`.

* Test deserialization of invalid V4 transaction

A transaction with no Sapling shielded spends and no outputs but with a
non-zero balance value should fail to deserialize.

* Change least-significant byte of the value balance

State how the byte index is calculated, and change the least
significant-byte to be non-zero.

Co-authored-by: teor <teor@riseup.net>
2021-06-04 08:53:00 +10:00
teor 2f0f379a9e
Standardise clippy lints and require docs (#2238)
* Standardise lints across Zebra crates, and add missing docs

The only remaining module with missing docs is `zebra_test::command`

* Todo -> TODO

* Clarify what a transcript ErrorChecker does

Also change `Error` -> `BoxError`

* TransError -> ExpectedTranscriptError

* Output Descriptions -> Output descriptions
2021-06-04 08:48:40 +10:00
Janito Vaqueiro Ferreira Filho 9416b5d5cd
Update `transaction::check::coinbase_tx_no_joinsplit_or_spend` to validate V5 coinbase transactions with Orchard shielded data (#2236)
* Add a `Transaction::orchard_shielded_data` getter

Allows accessing the Orchard shielded data if it is present in the
transaction, regardless of the transaction version.

* Refactor `orchard_nullifiers` to use new getter

Allows making the method more concise.

* Add `CoinbaseHasEnableSpendsOrchard` error variant

Used when the validation rule is not met.

* Implement `enableSpendsOrchard` in coinbase check

The flag must not be set for the coinbase transaction.

* Refactor `Transaction::orchard_*` getters

Use the fact that `Option<T>` implements `Iterator<T>` to simplify the
code and remove the need for boxing the iterators.

Co-authored-by: teor <teor@riseup.net>
2021-06-03 01:54:08 +00:00
Alfredo Garcia a9fe0d9d3e
Make sure the mandatory checkpoint includes Canopy activation (#2235)
* Make sure the Canopy activation block is a finalized checkpoint block

This enables ZIP-221 chain history from Canopy activation onwards.

* Clarify that the mandatory checkpoint test includes Canopy activation

The test was correct, but the docs and assertion message did not include activation.

* Document that the mandatory checkpoint includes Canopy activation

Co-authored-by: teor <teor@riseup.net>
2021-06-03 10:24:08 +10:00
teor 81f2df9f36
Adjust the benchmark sample size so all benchmarks finish successfully (#2237)
This works on my machine.
2021-06-03 09:35:42 +10:00
teor 35f097995b
Make debugging easier on proptests with large vectors (#2232)
* Restore SummaryDebug on arbitrary chains

And also add it to some more proptest vectors.

* Reduce most arbitrary vectors from 10 to 4

This makes debugging easier

* Make SummaryDebug generic over collections and exact size iterators

* Document DisplayToDebug
2021-06-02 10:18:04 -03:00
Janito Vaqueiro Ferreira Filho db0cdb74ff
Update `has_inputs_and_outputs` to check V5 transactions (#2229)
* Fix documentation comment

Was missing a slash to become documentation.

* Add documentation link to type reference

Just to help navigation a bit.

* Implement `Transaction::orchard_actions()` getter

Returns an iterator to iterator over the actions in the Orchard shielded
data (if there is one, otherwise it returns an empty iterator).

* Add V5 support for `has_inputs_and_outputs`

Checks if the transaction has Orchard actions. If it does, it is
considered to have inputs and outputs.

* Refactor transaction test vectors

Make it easier to reuse the fake V5 transaction converter in other test
vectors.

* Move helper function to `zebra-chain` crate

Place it together with some other helper functions, including the one
that actually creates the fake V5 transaction.

* Test transaction with no inputs

`check::has_inputs_and_outputs` should return an error indicating that
the transaction has no inputs.

* Test transaction with no outputs

`check::has_inputs_and_outputs` should return an error indicating that
the transaction has no outputs.

* Note that transaction is fake in `expect` message

Should make the message easier to find, and also gives emphasis to the
fact that the transaction is a fake conversion to V5.

Co-authored-by: teor <teor@riseup.net>

Co-authored-by: teor <teor@riseup.net>
2021-06-02 11:32:52 +10:00
Alfredo Garcia 1685611592
Store orchard nullifiers into the state (#2185)
* add nullifier methods to orchard
* store orchard nullifiers
* bump database version
* update `IntoDisk`
* support V5 in `UpdateWith`
* add a test for finalized state
* Use the latest network upgrade in state proptests
2021-06-01 17:53:13 +10:00
Deirdre Connolly 4e8efd0cec
Split out parsing & validation of test VerificationKey from checking of the signature (#2228)
Now that we always generate an extra proper VerificationKey for each
Tweak::ChangePubkey case, this /should/ never fail: it also helps split out the
actual verification of the signature from the parsing and validation of the key
itself.
2021-06-01 15:59:34 +10:00
teor ebe1c9f88e
Add a DateTime32 type for 32-bit serialized times (#2210)
* Add a DateTime32 type for 32-bit serialized times
* Use DateTime32 for MetaAddr.last_seen
* Create and use a `DateTime32::now` method
2021-05-31 12:52:34 +10:00
teor 4c276dae64
Cleanup a few arbitrary impls (#2222) 2021-05-28 09:49:28 -03:00
teor 0b611eb770
Generate test chains that pass basic chain consistency tests (#2221)
* Set the tip height and previous hash for arbitrary genesis blocks

And cleanup the ledger strategy interface.

* Generate partial chains with correct previous block hashes

* Provide the network value from the PreparedChain strategy
2021-05-28 09:48:27 -03:00
Deirdre Connolly a5f5913d5f
Get redpallas tweak proptests working again (#2219)
Instead of creating an invalid verification key for a particular signature by tweaking its bytes,
create another verification key and when the ChangePubkey tweak is applied, just swap out the correct
SignatureCase::pk_bytes for SignatureCase::invalid_pk_bytes and check that trying to verify the signature
using that wrong key fails, as expected.

Resolves #2170
2021-05-27 21:59:14 +00:00
teor f94033df08
Make arbitrary block chains pass some genesis checks (#2208)
* Clarify the finalized state assertion that checks the genesis block

* Make arbitrary block chains pass some genesis checks

Use the genesis previous block hash for
- the first arbitrary block in each chain, and
- individual arbitrary blocks.

This setting can be adjusted by individual proptests as needed.
2021-05-27 12:41:20 -03:00
teor f0c271bcfe
Doc: shielded data always contains at least one action (#2218)
Remove an incorrect part of a comment
2021-05-27 12:06:08 -03:00
Conrado Gouvea f77441d49c
Fix scriptCode serialization and sighash test vectors (#2198)
* Fix scriptCode serialization and sighash test vectors

The scriptCode was being serialized without the compact size prefix, and the test vectors included the prefix in the script, which cancelled each other
2021-05-27 10:04:10 -03:00
teor 078385ae00 Canonicalise arbitrary IP addresses in proptests
This makes round-trip serialization tests work.
2021-05-26 18:13:35 -04:00
teor 6fb94baeb9 Stop converting IPv6-compatible IPv4 addresses to IPv4
Zcash only uses IPv6-mapped IPv4 addresses in its network protocol.
2021-05-26 18:13:35 -04:00
Deirdre Connolly 7894cec814
Test Eq/PartialEq for orchard keys (#2187)
* Add ConstantTimeEq's for Orchard FullViewingKey and DiversifierKey and affirmatively test

* Fix orchard::keys doc comments with links to make them automatic links

* Exercise ConstantTimeEq for FullViewingKey with a cheap clone

* Allow some clippy lints to pass for somewhat contrived tests

Co-authored-by: teor <teor@riseup.net>
2021-05-27 07:46:05 +10:00
Pili Guerra e3d2ae0a8a
Update versions for zebra v1.0.0-alpha.9 release (#2196)
* Update versions for zebra v1.0.0-alpha.9 release

* Update Cargo.lock
2021-05-26 13:01:39 +02:00
Alfredo Garcia c3820b44eb
Add action methods (#2199)
* add action methods

Co-authored-by: teor <teor@riseup.net>
Co-authored-by: Janito Vaqueiro Ferreira Filho <janito.vff@gmail.com>
2021-05-26 02:02:42 +00:00
Deirdre Connolly 896565377a Fix hyperlinks in doc 2021-05-25 14:12:36 -04:00
teor be7d69c3cb Try arbitrary leap seconds 2021-05-25 14:12:36 -04:00
teor f0549b2f7c
Derive Arbitrary impls for a bunch of chain and network types (#2179)
Enable proptests for internal and external network protocol messages,
using times with the correct protocol-specific ranges. (4 or 8 bytes.)
2021-05-24 11:10:07 -04:00
teor 6797f4167d Add another regression test case 2021-05-24 11:08:05 -04:00
teor 5e80d3ffd0 Add proptest regressions for redpallas::prop::tweak_signature
These regressions make `spendauth.check()` fail.
2021-05-24 11:08:05 -04:00
teor 5ac72f1184 Log instead of failing the redpallas::prop::tweak_signature test 2021-05-24 11:08:05 -04:00
teor d4f3ecd755
Remove redundant cmp_owned and comments (#2186)
* Remove redundant cmp_owned and comments

This is a cleanup after PR #2184.
2021-05-23 21:40:47 +00:00
Deirdre Connolly ad7a29517c
Fix clippy::cmp_owned for (sapling, orchard)::keys with `ConstantTimeEq` (#2184)
* Impl subtle::ConstantTimeEq for orchard SpendingKey, use that in Eq/PartialEq

* Use constant time comparisons for secret key data where applicable

This also makes Clippy happier so that we aren't creating types just to compare.

* Fix clippy::cmp_owned for orchard::keys Eq/PartialEq

By impl'ing ConstantTimeEq for those types where leaks of the value
would compromise access or privacy.

* Make clippy::cmp_owned happy for some sapling::keys
2021-05-22 09:40:49 -03:00
teor 57fb5c028c
Fix up some doc links (#2180) 2021-05-21 12:06:31 -03:00
Alfredo Garcia a57c09a3b8
Orchard data in V5 parsing (#2116)
* initialize the work on parsing orchard data in V5
* add the rest of orchard serialization
* fix serialization according to spec
* fix arbitrary for Signature<SpendAuth>
* move deserialization of AuthorizedAction to shielded_data module
* use `from_bits_truncate` to generate valid arbitrary flags
* change panic message
* fix serialization/deserialization when nActionsOrchard is empty
* fix Halo2Proof deserialization
* implement ZcashSerialize and ZcashDeserialize for flags
* implement ZcashSerialize and ZcashDeserialize for orchard::tree::Root
* use ZcashSerialize and ZcashDeserialize for binding_sig
* implement from_parts()
* implement Arbitrary for  Signature<Binding>
* add trusted preallocate with tests
* fix Arbitrary for orchard Nullifier
* Use zcash_serialize_bytes instead of write_compactsize

Co-authored-by: teor <teor@riseup.net>
2021-05-21 00:42:06 +00:00
teor eb2e58ba53
Security: reject compact sizes greater than the protocol message limit (#2155)
These sizes should be impossible in valid messages.
So they likely represent a memory preallocation attack.
2021-05-17 18:23:06 -04:00
teor b600e82d6e
Security: Avoid silently corrupting invalid times during serialization (#2149)
* Security: panic if an internally generated time is out of range

If Zebra has a bug where it generates blocks, transactions, or meta
addresses with bad times, panic. This avoids sending bad data onto the
network.

(Previously, Zebra would truncate some of these times, silently
corrupting the underlying data.)

Make it clear that deserialization of these objects is infalliable.
2021-05-17 16:53:10 -04:00
Alfredo Garcia 1f25d84273
correct some docs (#2157) 2021-05-14 16:35:10 -03:00
teor c0326677a4
Add a new `zcash_serialize_bytes` utility function (#2150) 2021-05-14 12:23:02 +10:00
dependabot[bot] b8fe6617b8
build(deps): bump sha2 from 0.9.4 to 0.9.5 (#2147)
Bumps [sha2](https://github.com/RustCrypto/hashes) from 0.9.4 to 0.9.5.
- [Release notes](https://github.com/RustCrypto/hashes/releases)
- [Commits](https://github.com/RustCrypto/hashes/compare/sha2-v0.9.4...sha2-v0.9.5)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-13 07:58:48 +10:00
Pili Guerra 500dc2e511
Update version strings for Zebra v1.0.0-alpha.8 release (#2136)
* Update versions for zebra v1.0.0-alpha.8 release

* Update tower-batch and tower-fallback version strings

* Update Cargo.lock
2021-05-12 14:27:36 +02:00
teor 2827f6a7e6
Orchard: disable clippy warnings about comparing a newly created struct (#2117)
In Orchard, we compare canonical Pallas bytes with a supplied byte array.

Since we need to perform calculations to get it into canonical form, we
need to create a newly owned object.
2021-05-10 19:16:21 -03:00
Alfredo Garcia 29893f2b9b
Validate nConsensusBranchId (#2100)
* validate nConsensusBranchId
* add tests

* fix bug in transaction_to_fake_v5

Co-authored-by: teor <teor@riseup.net>
2021-05-10 01:31:45 +00:00
Deirdre Connolly 3901dc9adc
Merge pull request #2099 from ZcashFoundation/redpallas-sig-stub
Flesh out redpallas, direct port of redjubjub
2021-05-06 10:56:00 -04:00
dependabot[bot] c2706f448a build(deps): bump sha2 from 0.9.3 to 0.9.4
Bumps [sha2](https://github.com/RustCrypto/hashes) from 0.9.3 to 0.9.4.
- [Release notes](https://github.com/RustCrypto/hashes/releases)
- [Commits](https://github.com/RustCrypto/hashes/compare/sha2-v0.9.3...sha2-v0.9.4)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-06 08:58:07 -04:00
dependabot[bot] 84aca7e78b build(deps): bump tracing from 0.1.25 to 0.1.26
Bumps [tracing](https://github.com/tokio-rs/tracing) from 0.1.25 to 0.1.26.
- [Release notes](https://github.com/tokio-rs/tracing/releases)
- [Commits](https://github.com/tokio-rs/tracing/compare/tracing-0.1.25...tracing-0.1.26)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-03 17:05:49 -04:00
dependabot[bot] 72547cafff build(deps): bump secp256k1 from 0.20.1 to 0.20.2
Bumps [secp256k1](https://github.com/rust-bitcoin/rust-secp256k1) from 0.20.1 to 0.20.2.
- [Release notes](https://github.com/rust-bitcoin/rust-secp256k1/releases)
- [Changelog](https://github.com/rust-bitcoin/rust-secp256k1/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-bitcoin/rust-secp256k1/commits)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-30 11:22:35 -04:00
Deirdre Connolly 566a10151c Rebase tidies 2021-04-30 00:48:23 -04:00
Deirdre Connolly d0180423c1 Tidy up sinsemilla_hash_to_point() with bitvec 2021-04-30 00:48:23 -04:00
Deirdre Connolly 42999b2112 Remove FromStr impls for orchard keys for now, pending Unifed versions of those
Also modify the string encoding/decoding rountrip proptest to be just an exerciser of the keygen
for now.
2021-04-30 00:48:23 -04:00
Deirdre Connolly 6d4ecff24b Pin halo2 commit and update usage of pasta_curves accordingly 2021-04-30 00:48:23 -04:00
Deirdre Connolly 9b6339bb9c Add link to funty pin removal issue 2021-04-30 00:48:23 -04:00
Deirdre Connolly f5206af470 Rename all Orchard spec references to nu5.pdf 2021-04-30 00:48:23 -04:00
Deirdre Connolly 26fc6b1908 Doing math in u16 collector obviates passing of Bit(Slice/Vector)
But I added a max 10-bit value check in S() on j.
2021-04-30 00:48:23 -04:00
Deirdre Connolly af32851aa1 Add TODO to fill in the Sinsemilla test vectors from zcash-hackworks 2021-04-30 00:48:23 -04:00
Deirdre Connolly aa81876e32 Move Value Commitment generator points into static via lazy_static 2021-04-30 00:48:23 -04:00
Deirdre Connolly 39b8e9859f Do not derive Hash for orchard::Nullifier as pallas::Base doesn't have it
If we need Hash, we may need to replace the inner type with bytes.
2021-04-30 00:48:23 -04:00
Deirdre Connolly 70bf4f80fb Add TODO for Poseidon hash implementation 2021-04-30 00:48:23 -04:00
Deirdre Connolly d7d8986849 Tidy up network handling for Orchard keys/addresses 2021-04-30 00:48:23 -04:00
Deirdre Connolly ee2c3af937 Remove Copy on ZkSnarkProof trait 2021-04-30 00:48:23 -04:00
Deirdre Connolly a1a59a7f76 Clean up orchard::tree tests for now 2021-04-30 00:48:23 -04:00
Deirdre Connolly 6efe558675 Clean up Arbitray impl for Halo2Proof 2021-04-30 00:48:23 -04:00
Deirdre Connolly 32480ab3d9 Add redpallas TODO 2021-04-30 00:48:23 -04:00
Deirdre Connolly 86c3b69720 IncomingViewingKey inherits network when derived from FullViewingKey 2021-04-30 00:48:23 -04:00
Deirdre Connolly 5159046578 Add link to redpallas follow-up 2021-04-30 00:48:23 -04:00
Deirdre Connolly d33947b331 Impl FullViewingKey::from_spending_key(SpendingKey, Network)
Remove From impl
2021-04-30 00:48:23 -04:00
Deirdre Connolly 4fd98f6eb1 Link to redpallas TODO 2021-04-30 00:48:23 -04:00
Deirdre Connolly 1ff84c3d43 Refer to const generics issue 2021-04-30 00:48:23 -04:00
Deirdre Connolly d8d25d1a82 Add TODO 2021-04-30 00:48:23 -04:00
Deirdre Connolly 698f9620da Clippy +nightly 2021-04-30 00:48:23 -04:00
Deirdre Connolly 4ee12d1170 Clippy lint to align order of members of redpallas::VerificationKey 2021-04-30 00:48:23 -04:00
Deirdre Connolly 48674a9749 Remove standalone Orchard address Display, FromStr impls and related parts
NU5 proposes Unified Addresses, which would supplant any classic standalone pool address for Orchard.
https://github.com/ZcashFoundation/zebra/pull/1885#discussion_r607000460
2021-04-30 00:48:23 -04:00
Deirdre Connolly 72491df4ff orchard: move IncomingViewingKey::from([u8; 32]) to a ::from_bytes([u8; 32], Newtwork) 2021-04-30 00:48:23 -04:00
Deirdre Connolly 8d357faf73 Tried and discarded lazy_static! of value commitment generator points 2021-04-30 00:48:23 -04:00
Deirdre Connolly 638ff8d7f8 Bump redjubjub 2021-04-30 00:48:23 -04:00
Deirdre Connolly 81038e0fcb orchard: ValueCommit ops implementation tests 2021-04-30 00:48:23 -04:00
Deirdre Connolly db8f9cb81a orchard: Better Debug impls for some keys 2021-04-30 00:48:23 -04:00
Deirdre Connolly eb68caf14c Orchard: update Debug impl for commitments 2021-04-30 00:48:23 -04:00
Deirdre Connolly cc2e58fade Remove done TODO 2021-04-30 00:48:23 -04:00
Deirdre Connolly 376603d4c0 Flesh out Orchard note and nullifier derivation 2021-04-30 00:48:23 -04:00
Deirdre Connolly 37c32e9c94 Apply docstring suggestions from code review
Co-authored-by: teor <teor@riseup.net>
2021-04-30 00:48:23 -04:00
Deirdre Connolly 195d3f106c Revert making sapling::note::Nullifier inner value private 2021-04-30 00:48:23 -04:00
Deirdre Connolly 44966326c1 Orchard: turns out you can't store 10 bits in a u8 2021-04-30 00:48:23 -04:00
Deirdre Connolly 5e95d11fd9 Orchard: fix typos 2021-04-30 00:48:23 -04:00
Deirdre Connolly 34fe78bd0c Fix str match for key and addr decoding 2021-04-30 00:48:23 -04:00
Deirdre Connolly ec5d3a647f Remove commented out orchard::Address FromStr/Display test vector test for now 2021-04-30 00:48:23 -04:00
Deirdre Connolly f067a25d50 Update zebra-chain/src/orchard/address.rs
Co-authored-by: teor <teor@riseup.net>
2021-04-30 00:48:23 -04:00
Deirdre Connolly f577cb8eb4 Update zebra-chain/src/orchard/address.rs
Co-authored-by: teor <teor@riseup.net>
2021-04-30 00:48:23 -04:00
Deirdre Connolly b23093ca66 Update zebra-chain/src/orchard/keys.rs
Co-authored-by: teor <teor@riseup.net>
2021-04-30 00:48:23 -04:00
Deirdre Connolly bbb6b341ae Update zebra-chain/src/orchard/keys.rs
Co-authored-by: teor <teor@riseup.net>
2021-04-30 00:48:23 -04:00
Deirdre Connolly a73914a838 Update zebra-chain/src/orchard/keys.rs
Co-authored-by: teor <teor@riseup.net>
2021-04-30 00:48:23 -04:00
Deirdre Connolly bba99098f3 Update zebra-chain/src/orchard/keys.rs
Co-authored-by: teor <teor@riseup.net>
2021-04-30 00:48:23 -04:00
Deirdre Connolly e2989e3edf Update zebra-chain/src/orchard/keys.rs
Co-authored-by: teor <teor@riseup.net>
2021-04-30 00:48:23 -04:00
Deirdre Connolly e4fe8bb320 Update zebra-chain/src/orchard/note/nullifiers.rs
Co-authored-by: teor <teor@riseup.net>
2021-04-30 00:48:23 -04:00
Deirdre Connolly 81da8363a8 Update zebra-chain/src/orchard/sinsemilla.rs
Co-authored-by: teor <teor@riseup.net>
2021-04-30 00:48:23 -04:00
Deirdre Connolly dbd2ce6dd8 Update zebra-chain/src/orchard/sinsemilla.rs
Co-authored-by: teor <teor@riseup.net>
2021-04-30 00:48:23 -04:00
Deirdre Connolly ebe0c002a9 Update zebra-chain/src/orchard/sinsemilla.rs
Co-authored-by: teor <teor@riseup.net>
2021-04-30 00:48:23 -04:00
Deirdre Connolly 8461c2153e Update diversify_hash and its use to match spec updates 2021-04-30 00:48:23 -04:00
Deirdre Connolly 73e0f4f98a Orchard: fix some tests, etc 2021-04-30 00:48:23 -04:00
Deirdre Connolly 87f65b8b01 Orchard: update merkle_crh_orchard to use the appropriate l=10 bits, not 6 2021-04-30 00:48:23 -04:00
Deirdre Connolly 1ff8874b8d Orchard: remove unused imports, more warn(missing_docs) lint to orchard for now 2021-04-30 00:48:23 -04:00
Deirdre Connolly 5ede33b231 Orchard: update nullifiers 2021-04-30 00:48:23 -04:00
Deirdre Connolly c892b93f61 Orchard: update merkle_crh_orchard correctly 2021-04-30 00:48:23 -04:00
Deirdre Connolly 218bb9b7c2 Orchard: remove unused imports 2021-04-30 00:48:23 -04:00
Deirdre Connolly f3501333b7 Orchard: tidy 2021-04-30 00:48:23 -04:00
Deirdre Connolly 1c903cab0f Orchard: fix into() call inside extract_x 2021-04-30 00:48:23 -04:00
Deirdre Connolly 94edc90975 Orchard: derive serde::{Deserialize, Serialize} by default on redpallas::VerificationKeyBytes 2021-04-30 00:48:23 -04:00
Deirdre Connolly d11a4419ac Orchard: add a serde helper for pallas::Base 2021-04-30 00:48:23 -04:00
Deirdre Connolly 41a41db923 Sapling: use try_from turbofish inside prf_ock 2021-04-30 00:48:23 -04:00
Deirdre Connolly 0351e6481d Orchard: tidy keys 2021-04-30 00:48:23 -04:00
Deirdre Connolly e85359c756 Orchard: tidy 2021-04-30 00:48:23 -04:00
Deirdre Connolly d3f0b226e6 Orchard: tidy nullifiers 2021-04-30 00:48:23 -04:00
Deirdre Connolly b93a71c779 Orchard: borrow local.bytes for pallas::Affine serde helper 2021-04-30 00:48:23 -04:00
Deirdre Connolly 009e1dd37e Orchard: some Action (de)serialization fixes 2021-04-30 00:48:23 -04:00
Deirdre Connolly f3cf6966a5 Orchard: tidy commitments etc 2021-04-30 00:48:23 -04:00
Deirdre Connolly cb9d6956d7 Orchard: Fix trait imports and Arbitrary for Action 2021-04-30 00:48:23 -04:00
Deirdre Connolly 981080f049 Orchard: Tidy Debug impl's for keys, cast a pallas::Base into a pallas::Scalar 2021-04-30 00:48:23 -04:00
Deirdre Connolly 6e51671c93 Tidy prf's 2021-04-30 00:48:23 -04:00
Deirdre Connolly 120b065a94 Action should use VerificationKeyBytes 2021-04-30 00:48:23 -04:00
Deirdre Connolly 570ad6e914 Add redpallas::signing_key::SigningKey stub 2021-04-30 00:48:23 -04:00
Deirdre Connolly 01fed3e0f3 Tidy impl From<SpendingKey> for IvkCommitRandomness 2021-04-30 00:48:23 -04:00
Deirdre Connolly bd4e5e1f38 Cleanup 2021-04-30 00:48:23 -04:00
Deirdre Connolly df1ecc72b1 Most things are filled in, including a guess at Pallas-based Mixing Pedersen Hash 2021-04-30 00:48:23 -04:00
Deirdre Connolly 23e391894b Tidy 2021-04-30 00:48:23 -04:00
Deirdre Connolly de051c727c orchard: DiversifierKey is a newtype refinement of 32 bytes 2021-04-30 00:48:23 -04:00
Deirdre Connolly fd29708ecc orchard: derive IncomingViewingKey from FullViewingKey
Includes sinsemilla commit and short commit
2021-04-30 00:48:23 -04:00
Deirdre Connolly 6e1d2f1fb1 orchard: impl From<SpendingKey> for NullifierDerivingKey 2021-04-30 00:48:23 -04:00
Deirdre Connolly f50d8697d4 impl orchard SpendingKey::new() 2021-04-30 00:48:23 -04:00
Deirdre Connolly 20abeda04b Add sapling prf_ock and generate_trapdoor 2021-04-30 00:48:23 -04:00
Deirdre Connolly c3e40d73cf Bunch more work implementing orchard, porting from sapling where applicable 2021-04-30 00:48:23 -04:00
Deirdre Connolly 40383b2741 Partway done with typing out Orchard chain types 2021-04-30 00:48:23 -04:00
teor b52fbae30f
Fix a bad merge in #2075 (#2085)
Also tweak a constant name, an import, and a comment.
2021-04-29 17:47:10 +10:00
Alfredo Garcia 9fc2388fbc
Parse ConsensusBranchId into NetworkUpgrade for transaction v5 (#2075)
* add consensus_branch_id field to transaction v5

* clippy

* rustfmt

* replace consensus_branch_id with network_upgrade

* remove unintended test files

* change method name

* some clanups

* add network_upgrade as a constant in tests

* use std in created function

* add comment to manual arbitrary impl

* create custom strategy to deal with NetworkUpgrade

* Add a missing TODO comment

Co-authored-by: teor <teor@riseup.net>
2021-04-29 01:55:29 +00:00
Alfredo Garcia 75d29aca24
Add V5 transparent and sapling to transaction::check, add missing coinbase PrevOut check (#2070)
* validate sapling v5 tx

* Make itertools dependency optional

We only need itertools when the `proptest-impl` feature is enabled.

* Check if V4 and V5 coinbase transactions contain PrevOut transparent inputs

This is a bugfix on V4 transaction validation. The PrevOut consensus
rule was not explicitly stated in the Zcash spec until April 2021.
(But it was implied by Bitcoin, and partially implemented by Zebra.)

Also do the shielded sapling input check for V5 transactions.

* Add spec and orchard TODOs to has_inputs_and_outputs

Also make the variable names match the spec.

* Sort transaction functions to match v5 data order

* Simplify transaction input and output checks

Move counts or iterators into `Transaction` methods, so we can remove
duplicate code, and make the consensus rule logic clearer.

* Update sapling_balances_match for Transaction v5

- Quote from the spec
- Explain why the function is redunant for v5
- Rename the function so it's clear that it is sapling-specific

Co-authored-by: teor <teor@riseup.net>
2021-04-28 10:43:00 +10:00
teor 247620320e
Rename shielded_data to sapling_shielded_data as needed (#2072)
This change help avoid bugs that confuse sapling with orchard (or sprout).

```sh
fastmod shielded_data sapling_shielded_data
```
2021-04-27 10:37:53 -03:00
teor 1f40498fcf
Clippy nightly: disable owned cmp, stop comparing bool using assert_eq (#2073)
* Disable clippy warnings about comparing a newly created struct

In Sapling, we compare canonical JubJub bytes with a supplied byte array.

Since we need to perform calculations to get it into canonical form, we
need to create a newly owned object.

* Clippy: use assert rather than assert_eq on a bool
2021-04-27 09:57:45 -03:00
Alfredo Garcia a49b9d44f6
Enable more Transaction v5 tests (#2063)
* Use NU5 and Transaction v5 in most proptests

* Stop skipping post-Canopy blocks in the block subsidy tests

Co-authored-by: teor <teor@riseup.net>
2021-04-26 08:32:21 +10:00
teor 0d8ffc367e Move LedgerState into the block module 2021-04-23 09:34:13 -04:00
teor 9b3d56db0c
Update network_upgrade.rs (#2058) 2021-04-23 10:23:43 -03:00
Pili Guerra ea1446ee92
Update version strings for Zebra v1.0.0-alpha.7 release (#2056)
* Update version strings for Zebra v1.0.0-alpha.7 release
2021-04-23 12:56:25 +00:00
Alfredo Garcia e730e84a09
remove the `rest` field of v5 transaction (#2057) 2021-04-23 16:25:44 +10:00
teor 7b13d5573a Make String Zcash serialization consistent with deserialization
After recent changes, serialization was `write_string`, but
deserialization was `zcash_deserialize`.
2021-04-21 23:58:48 -04:00
teor 96b3c94dbc
Add the new commit count and git hash to the version (#2038)
* Use the git version + new commit count + hash for the app version

This helps diagnose bugs in versions of Zebra built from git branches,
rather than git version tags.

* Fill in assert

* Also log semver string

* Fix syntax

* Handle vergen using the cargo package version or raw git tag

* s/Semver/SemVer/

Co-authored-by: Deirdre Connolly <durumcrustulum@gmail.com>
2021-04-21 22:14:36 +00:00
teor d3836e6fd8 Move spends_per_anchor to TransferData
And update its docs for ZIP-244
2021-04-21 01:32:00 -04:00
teor 53779d2a3c
Redesign Sapling data model for V5 shared anchor and spends (#2021)
* Redesign Sapling data model for V5 shared anchor and spends

The shared anchor is only present if there are any spends.

As part of this change, delete the manual PartialEq impl and its tests,
because we can derive PartialEq now.

* Stop creating a temporary Vec for the spend and output iterators

* Rename TransferData variants

Interactive rename using the following commands:
```sh
fastmod Spends SpendsAndMaybeOutputs
fastmod NoSpends JustOutputs
```

* Refactor out common sprout nullifier code

* Implement the AtLeastOne constrained vector type

This vector wrapper ensures that it always contains at least one element.

* Simplify Sapling TransferData using AtLeastOne

Also update the RFC to use AtLeastOne for Orchard.
2021-04-20 16:22:25 +10:00
Kirill Fomichev 43e792b9a4
Update to vergen 5, add branch, commit time, and build target to the panic metadata, automatically update app version from crate version (#2029)
* build(deps): bump vergen from 3.2.0 to 5.1.1

* fix hardcoded version for Tracing struct

* add additional metadata

* remove extra allocations for metadata

* Remove zebrad code version from release checklist

The zebrad code automatically uses the crate version now.

* Sort panic metadata into rough categories

Co-authored-by: teor <teor@riseup.net>
2021-04-20 06:48:14 +10:00
Kirill Fomichev b636cf8ac1
Benchmark Block struct serialization code (#2018)
* Benchmark Block struct serialization code

* benchmark generated block

* add deserialize benchmark

* Fix block/tests.rs conditional module imports

* add large_single_transaction_block

* Fix name for deserialise benchmark

Co-authored-by: teor <teor@riseup.net>
2021-04-19 12:15:02 +00:00
Kirill Fomichev 5f36be7223
build(deps): bump ripemd160 from 0.8.0 to 0.9.1 (#2027) 2021-04-19 20:43:38 +10:00
teor b9ac221ad4
Implement Sapling serialization in Transaction V5 (#2020)
* serialize/deserialize spaling shielded data in v5 transaction

* fix serialize/deserialize fields order according to spec

* remove extra clone calls

* more serialize fixes

* clippy: fix empty array

* tidy comments

* Add v4 and v5 transaction tests

Also make sure that serialized bytes match if structs match.

* Test fake v5 blocks made out of pre-NU5 block test vectors

* Add outputs-only tests for v5 shared anchor serialization

* Refactor sapling::ShieldedData V5 serialization into its own impl

* Fix spec name typos

* Simplify sapling shielded data parsing

* Delete redundant V5 transaction wrappers in tests

And split out sapling ShieldedData serialization.

Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>
2021-04-19 08:09:57 +10:00
Kirill Fomichev 32285faf56
Speedup proptests for Chain struct in zebra-state (#2012)
* Speedup proptests for Chain struct in zebra-state

* Add teor2345 requested changes

* Fix type for DEFAULT_PARTIAL_CHAIN_PROPTEST_CASES

* More costs for PROPTEST_CASES
2021-04-17 21:00:20 +10:00
teor 0def12f825
Add split array serialization functions for Transaction::V5 (#2017)
* Add functions for serializing and deserializing split arrays

In Transaction::V5, Zcash splits some types into multiple arrays, with a
single prefix count before the first array.

Add utility functions for serializing and deserializing the subsequent
arrays, with a paramater for the original array's length.

* Use zcash_deserialize_bytes_external_count in zebra-network

* Move some preallocate proptests to their own file

And fix the test module structure so it is consistent with the rest of
zebra-chain.

* Add a convenience alias zcash_serialize_external_count

* Explain why u64::MAX items will never be reached
2021-04-16 08:23:00 +10:00
Alfredo Garcia e42442d48b
Redesign Transaction V5 serialization, impl trusted vector security, nullifier utility functions (#1996)
* add sapling shielded data to transaction V5

* implement nullifiers

* test v5 in shielded_data_roundtrip

* Explicitly design serialization for Transaction V5

Implement serialization for V4 and V5 spends and outputs, to make sure
that the design works.

* Test serialization for v5 spends and outputs

Also add a few missing v4 tests.

* Delete a disabled proptest

* Make v5 transactions a top-level heading

And add a missing serialized type.

* Fix a comment typo

* v5 transaction RFC: split array serialization

Based on #2017

* RFC: explicitly describe serialized field order

And link to the spec

* RFC: add the shared anchor serialization rule test

Co-authored-by: teor <teor@riseup.net>
2021-04-16 08:19:28 +10:00
teor 15843cfd6e Fix a test failure due to ' debug format changes in Rust
In general, tests shouldn't depend on debug formatting. But for now,
removing the ' fixes the issue.
2021-04-14 23:45:36 -04:00
dependabot[bot] 7d36a5e2c3 build(deps): bump color-eyre from 0.5.10 to 0.5.11
Bumps [color-eyre](https://github.com/yaahc/color-eyre) from 0.5.10 to 0.5.11.
- [Release notes](https://github.com/yaahc/color-eyre/releases)
- [Changelog](https://github.com/yaahc/color-eyre/blob/v0.5.11/CHANGELOG.md)
- [Commits](https://github.com/yaahc/color-eyre/compare/v0.5.10...v0.5.11)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-14 09:22:27 -04:00
teor e8e6d292c5 clippy: make to_* methods take self by value 2021-04-13 23:36:23 -04:00
Alfredo Garcia 5ec05e91e1 update version strings for v1.0.0-alpha.6 2021-04-08 18:48:34 -04:00
teor f8094cdf5c
Test the manual eq impl on sapling::ShieldedData<PerSpend> (#1989) 2021-04-07 12:30:50 -03:00
teor 418575458e
Rename the () placeholder to FieldNotPresent (#1987)
* Rename the () placeholder to FieldNotPresent

* Use a unit struct

* Update the RFC
2021-04-07 09:34:58 -03:00
teor 2ace597da1
Clean up use statements in `arbitrary` modules (#1984)
* Clean up use statements in `arbitrary` modules

Co-authored-by: Deirdre Connolly <durumcrustulum@gmail.com>
2021-04-07 18:08:02 +10:00
teor db87a8410e Update tower-batch tests to rand 0.8
And move the ed25519-zebra patch to the workspace Cargo.toml.

This fix helps avoid Cargo.lock instability.
2021-04-07 01:46:22 -04:00
teor 7cb7b6143c Rename the NU5 block commitment variant based on what it commits to
This change helps avoid confusion with block commitment variants in
future network upgrades, which may add more hashes to the commitment
list.
2021-04-07 01:33:18 -04:00
teor 64662a758d
Move the preallocate tests into their own files (#1977)
* Move the preallocate tests into their own files

And move the MetaAddr proptest into its own file.

Also do some minor formatting and cleanups.

Co-authored-by: Deirdre Connolly <durumcrustulum@gmail.com>
2021-04-07 12:32:27 +10:00
teor 05b60db993
Clean up block commitment enum and parsing (#1978)
* Rename RootHash to Commitment based on ZIP-244

Interactive replace using:
```sh
fastmod RootHash Commitment
fastmod root_hash commitment
fastmod root_bytes commitment_bytes
git mv zebra-chain/src/block/root_hash.rs zebra-chain/src/block/commitment.rs
```

All replacements were accepted.

* rustfmt

* Comment and format cleanups after interactive replace

* Distinguish Sapling tree roots from other tree roots

* Add the NU5 BlockCommitmentsHash variant to block::Commitment

This change parses the hash, but does not perform validation.

* Validate reserved values in Block::commitment

- change Block::commitment to return a Result rather than an Option
- enforce the all-zeroes reserved value consensus rules
- change `PreSaplingReserved([u8; 32])` to `PreSaplingReserved`
- change `ChainHistoryActivationReserved([u8; 32])` to `ChainHistoryActivationReserved`
- update the function comments to describe when each variant is verified

* Fix comment whitespace
2021-04-06 20:19:28 +10:00
Preston Evans 0daaf582e2
Implement Trusted Vector Preallocation (#1920)
* Implement SafePreallocate. Resolves #1880

* Add proptests for SafePreallocate

* Apply suggestions from code review

Comments which did not include replacement code will be addressed in a follow-up commit.

Co-authored-by: teor <teor@riseup.net>

* Rename [Safe-> Trusted]Allocate. Add doc and tests

Add tests to show that the largest allowed vec under TrustedPreallocate
is small enough to fit in a Zcash block/message (depending on type).
Add doc comments to all TrustedPreallocate test cases.
Tighten bounds on max_trusted_alloc for some types.

Note - this commit does NOT include TrustedPreallocate
impls for JoinSplitData, String, and Script.
These impls will be added in a follow up commit

* Implement SafePreallocate. Resolves #1880

* Add proptests for SafePreallocate

* Apply suggestions from code review

Comments which did not include replacement code will be addressed in a follow-up commit.

Co-authored-by: teor <teor@riseup.net>

* Rename [Safe-> Trusted]Allocate. Add doc and tests

Add tests to show that the largest allowed vec under TrustedPreallocate
is small enough to fit in a Zcash block/message (depending on type).
Add doc comments to all TrustedPreallocate test cases.
Tighten bounds on max_trusted_alloc for some types.

Note - this commit does NOT include TrustedPreallocate
impls for JoinSplitData, String, and Script.
These impls will be added in a follow up commit

* Impl TrustedPreallocate for Joinsplit

* Impl ZcashDeserialize for Vec<u8>

* Arbitrary, TrustedPreallocate, Serialize, and tests for Spend<SharedAnchor>

Co-authored-by: teor <teor@riseup.net>
2021-04-06 09:49:42 +10:00
Deirdre Connolly 6bb5220b13
Bump redjubjub to 0.4.0 (#1975) 2021-04-03 11:09:14 -04:00
Alfredo Garcia 48a8a7b851
Refactor Sapling data and use it in V4 (#1946)
* start refactoring transaction v4 for transaction v5
- move ShieldedData to sapling
- add AnchorVariant
- rename shielded_data to sapling_shielded data in V4
- move value_balance into ShieldedData
- update prop tests for new structure

* add AnchorVariant to Spend
- make anchor types available from sapling crate
- update serialize

* change shielded_balances_match() arguments
* change variable name anchor to shared_anchor in ShieldedData
* fix empty value balance serialization
* use AnchorV in shielded spends
* Rename anchor to per_spend_anchor

* Use nullifiers function directly in non-finalized state
* Use self.value_balance instead of passing it as an argument

* Add missing fields to ShieldedData PartialEq
* Derive Copy for tag types

* Add doc comments for ShieldedData refactor
* Implement a per-spend anchor compatibility iterator

Co-authored-by: teor <teor@riseup.net>
2021-04-01 07:34:25 +10:00
teor 29163cd0b4
Rename RootHash to Commitment based on ZIP-244 (#1957)
* Rename RootHash to Commitment based on ZIP-244

Interactive replace using:
```sh
fastmod RootHash Commitment
fastmod root_hash commitment
fastmod root_bytes commitment_bytes
git mv zebra-chain/src/block/root_hash.rs zebra-chain/src/block/commitment.rs
```

All replacements were accepted.

* rustfmt
2021-03-31 09:51:42 +10:00
Deirdre Connolly 0ffab6d589
Ed25519 async batch verification for JoinSplit signatures (#1952)
* Ed25519 async batch verification for JoinSplit signatures

We've been verifying JoinSplitSigs one-by-one pre-ZIP-215. Now as we're post-ZIP-215,
we can take advantage of the batch math to validate this signatures.

I would have pumped all the joinsplits in our MAINNET_BLOCKS test vectors but these
signatures are over the sighash, which needs the NU code to compute, and once we're
doing all that set up, we're basically doing transaction validation, so.

Resolves #1944

* Repoint to latest ed25519-zebra commit with note to point at 3.0 when released

Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>
Co-authored-by: teor <teor@riseup.net>
2021-03-31 09:08:19 +10:00
dependabot[bot] 562c141ee1
build(deps): bump displaydoc from 0.2.0 to 0.2.1 (#1959)
Bumps [displaydoc](https://github.com/yaahc/displaydoc) from 0.2.0 to 0.2.1.
- [Release notes](https://github.com/yaahc/displaydoc/releases)
- [Changelog](https://github.com/yaahc/displaydoc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yaahc/displaydoc/compare/v0.2.0...v0.2.1)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-03-30 09:27:00 +10:00
Deirdre Connolly c5bad9fac2
Rename NU5 to Nu5 to appease newly stable clippy::upper-case-acronyms (#1945) 2021-03-26 07:22:50 +10:00
Deirdre Connolly 7efc700aca
Merge pull request #1713 from ZcashFoundation/use-groth16-batch-math
Use batch optimizations, load params in groth16::Verifier, verify Spend & Output descriptions in transaction verifier
2021-03-24 12:28:25 -04:00
Deirdre Connolly ca1d2de87d
Bump versions for v1.0.0-alpha.5 (#1932)
Zebra's latest alpha checkpoints on Canopy activation, continues our work on NU5, and fixes a security issue.

Some notable changes include:

## Added
- Log address book metrics when PeerSet or CandidateSet don't have many peers (#1906)
- Document test coverage workflow (#1919)
- Add a final job to CI, so we can easily require all the CI jobs to pass (#1927)

## Changed
- Zebra has moved its mandatory checkpoint from Sapling to Canopy (#1898, #1926)
  - This is a breaking change for users that depend on the exact height of the mandatory checkpoint.

## Fixed
- tower-batch: wake waiting workers on close to avoid hangs (#1908)
- Assert that pre-Canopy blocks use checkpointing (#1909)
- Fix CI disk space usage by disabling incremental compilation in coverage builds (#1923)

## Security
- Stop relying on unchecked length fields when preallocating vectors (#1925)
2021-03-22 22:05:01 -04:00
teor 0eeb77a44c Remove unused import
Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com>
2021-03-22 11:54:31 -04:00
teor b623acc945 Add memory DoS prevention comments 2021-03-22 11:54:31 -04:00
Alfredo Garcia 35fc683868 fix import 2021-03-22 11:54:31 -04:00
Alfredo Garcia d7b83b7b2a remove unused import 2021-03-22 11:54:31 -04:00
teor 8e18c99cdc Avoid risky use of Read::take with untrusted lengths
Zebra already uses `Read::take` to enforce message, body, and block
maximum sizes.

So using `Read::take` on untrusted sizes can result in short reads,
without a corresponding `UnexpectedEof` error. (The old code was
correct, but copying it elsewhere would have been risky.)
2021-03-22 11:54:31 -04:00
teor 5c55f7210c Stop untrusted preallocation during script deserialization
This is an easy memory denial of service attack.
2021-03-22 11:54:31 -04:00
teor 609d70ae53 Stop untrusted preallocation during string deserialization
This is an easy memory denial of service attack.
2021-03-22 11:54:31 -04:00
teor db2f920d96 Stop untrusted preallocation during JoinSplit deserialization
Zebra believes the untrusted `JoinSplit` list size field when
deserializing `JoinSplit`s, and preallocates a `Vec` based on that size.

This is trivial a memory exhaustion attack.

Instead, use the current auto-growing implementation, which is limited
by the size of the message data.
2021-03-22 11:54:31 -04:00
teor d19585cfca Fix some missed Sapling to Canopy checkpoint code changes 2021-03-18 10:13:47 +10:00
Alfredo Garcia a292cbe611 change the mandatory checkpoint to Canopy 2021-03-18 10:13:47 +10:00
dependabot[bot] 97cae4b2da build(deps): bump displaydoc from 0.1.7 to 0.2.0
Bumps [displaydoc](https://github.com/yaahc/displaydoc) from 0.1.7 to 0.2.0.
- [Release notes](https://github.com/yaahc/displaydoc/releases)
- [Changelog](https://github.com/yaahc/displaydoc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yaahc/displaydoc/commits/v0.2.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-03-17 15:50:40 -04:00
Alfredo Garcia d49eaab68e
Bump versions for zebrad 1.0.0-alpha.4 (#1913)
* Bump versions for zebrad 1.0.0-alpha.4

* add Cargo.lock
2021-03-16 21:12:37 -03:00
teor 873127aac1 Replace smart quotes with ascii quotes
Some tools don't deal well with unicode text. And we're not using it
consistently in Zebra anyway.
2021-03-15 03:18:10 -04:00
dependabot[bot] 7f9d66a4af build(deps): bump serde-big-array from 0.3.1 to 0.3.2
Bumps [serde-big-array](https://github.com/est31/serde-big-array) from 0.3.1 to 0.3.2.
- [Release notes](https://github.com/est31/serde-big-array/releases)
- [Commits](https://github.com/est31/serde-big-array/commits/v0.3.2)

Signed-off-by: dependabot[bot] <support@github.com>
2021-03-13 05:50:01 -05:00
Alfredo Garcia 8883543a85
Add transaction version 5 stubs (#1824)
* add transaction V5 stub
* add v5_strategy
* deduplicate version group ids
* Update comment for V5 transactions
* Add V5 transactions to non_finalized_state

Currently these are all `unimplemented!(...)`

* Fix struct matches
* Apply trivial panic message changes
* add zcash_deserialize for V5
* make all tx versions explicit in sprout and sapling nullifier functions
* match exhaustively in sprout and sapling nullifier functions
* fix matches in zebra-consensus
* fix NU5 strategy
* We're still deciding if v5 transactions support Sprout

Co-authored-by: teor <teor@riseup.net>
2021-03-04 07:56:41 +10:00
Jane Lusby e541746a50
Add initial support for NU5 to zebra (#1823)
* Add NU5 variant to NetworkUpgrade
* Add consensus branch ID for NU5
* Add network protocol versions for NU5
* Add NU5 to the protocol::version_consistent test
* Make unimplemented panic messages more specific
* Block target spacing doesn't change in NU5
* add comments for future updates for NU5

Co-authored-by: teor <teor@riseup.net>
2021-03-03 06:22:11 +10:00
Alfredo Garcia ca44fbd7b8
upgrade ed25519-zebra to v2 (#1811)
This implements ZIP-215
2021-03-02 17:45:55 +10:00
teor f2bdebee07 Clippy: Use Option::map instead of a manual impl 2021-03-01 23:31:18 -05:00
teor 0ed372703d Fix a typo in Transaction
We parse v1, v2, and v3 transactions, but we don't validate them,
due to the Sapling checkpoint.
2021-02-25 20:42:25 -05:00
dependabot[bot] bf1e2bd3b8
build(deps): bump tracing from 0.1.24 to 0.1.25 (#1815)
Bumps [tracing](https://github.com/tokio-rs/tracing) from 0.1.24 to 0.1.25.
- [Release notes](https://github.com/tokio-rs/tracing/releases)
- [Commits](https://github.com/tokio-rs/tracing/compare/tracing-0.1.24...tracing-0.1.25)

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

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-02-25 09:28:26 +10:00
teor 7558f74c78 Bump versions for zebrad 1.0.0-alpha.3 2021-02-23 10:39:13 -05:00
dependabot[bot] b578d1ff2e build(deps): bump proptest-derive from 0.2.0 to 0.3.0
Bumps [proptest-derive](https://github.com/AltSysrq/proptest) from 0.2.0 to 0.3.0.
- [Release notes](https://github.com/AltSysrq/proptest/releases)
- [Changelog](https://github.com/AltSysrq/proptest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/AltSysrq/proptest/compare/proptest-derive-0.2.0...proptest-derive-0.3.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-02-22 01:33:54 -05:00
Deirdre Connolly 1fa41ff199 Use new bech32 methods that expect a Variant enum variant 2021-02-21 20:51:43 -05:00
dependabot[bot] dd940f7dbf build(deps): bump bech32 from 0.7.2 to 0.8.0
Bumps [bech32](https://github.com/rust-bitcoin/rust-bech32) from 0.7.2 to 0.8.0.
- [Release notes](https://github.com/rust-bitcoin/rust-bech32/releases)
- [Commits](https://github.com/rust-bitcoin/rust-bech32/compare/v0.7.2...v0.8.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-02-21 20:51:43 -05:00
dependabot[bot] f19ef44493 build(deps): bump tracing from 0.1.23 to 0.1.24
Bumps [tracing](https://github.com/tokio-rs/tracing) from 0.1.23 to 0.1.24.
- [Release notes](https://github.com/tokio-rs/tracing/releases)
- [Commits](https://github.com/tokio-rs/tracing/compare/tracing-0.1.23...tracing-0.1.24)

Signed-off-by: dependabot[bot] <support@github.com>
2021-02-18 22:21:49 -05:00
teor 55613db846 Fix a clippy redundant range lint 2021-02-17 12:47:56 +10:00
teor df59468085 Fix clippy uppercase acronym lint 2021-02-17 12:47:56 +10:00
Alfredo Garcia 21dbf5cb69
fix rust beta panic string warnings (#1731) 2021-02-15 07:00:02 +10:00
Deirdre Connolly 0c5daa8410 Bump versions for zebrad 1.0.0-alpha.2
Including tower-batch bump to 0.2.0, tower-fallback to 0.2.0, zebra-script to 1.0.0-alpha.3
2021-02-09 16:14:29 -05:00
dependabot[bot] b3a3b8f7c7 build(deps): bump tracing from 0.1.22 to 0.1.23
Bumps [tracing](https://github.com/tokio-rs/tracing) from 0.1.22 to 0.1.23.
- [Release notes](https://github.com/tokio-rs/tracing/releases)
- [Commits](https://github.com/tokio-rs/tracing/compare/tracing-0.1.22...tracing-0.1.23)

Signed-off-by: dependabot[bot] <support@github.com>
2021-02-05 12:26:52 -05:00
Alfredo Garcia d7c40af2a8
Fix shutdown panics (#1637)
* add a shutdown flag in zebra_chain::shutdown
* fix network panic on shutdown
* fix checkpoint panic on shutdown
2021-02-03 19:03:28 +10:00
dependabot[bot] 25b6491929 build(deps): bump sha2 from 0.9.2 to 0.9.3
Bumps [sha2](https://github.com/RustCrypto/hashes) from 0.9.2 to 0.9.3.
- [Release notes](https://github.com/RustCrypto/hashes/releases)
- [Commits](https://github.com/RustCrypto/hashes/compare/sha2-v0.9.2...sha2-v0.9.3)

Signed-off-by: dependabot[bot] <support@github.com>
2021-02-01 19:14:15 -05:00