Commit Graph

90 Commits

Author SHA1 Message Date
Deirdre Connolly f379b36208 Add v4 transaction proptest shrinkage 2020-01-28 03:48:23 -05:00
Deirdre Connolly a259a6b4b1 Add and use v4_strategy() 2020-01-28 03:48:23 -05:00
Deirdre Connolly a93e2db44b Add and use OutCiphertext
Instead of [u64; 10].
2020-01-28 03:48:23 -05:00
Deirdre Connolly 289f8ec9ca impl Arbitrary for SpendDescription and refine impl for ShieldedData 2020-01-28 03:48:23 -05:00
Deirdre Connolly f8781c3415 Refine Arbitrary impl for JoinSplitData<P> 2020-01-28 03:48:23 -05:00
Deirdre Connolly 90086d4d2d derive(Arbitrary) on Sapling*Note*Tree types 2020-01-28 03:48:23 -05:00
Deirdre Connolly 100c5b15ec Impl Arbitrary for ShieldedData and derive it for other types
Wraps the construction of redjubjub Signature so we don't
need an explicit impl for it.
2020-01-28 03:48:23 -05:00
Deirdre Connolly 7632863454 Impl Arbitrary for JoinSplitData<P>
Wraps the construction of ed25519 PublicKeyBytes and Signature so we don't
need an explicit impl for ed25519 types.
2020-01-28 03:48:23 -05:00
Deirdre Connolly 7e34a543ff Impl Arbitrary for Groth16Proof 2020-01-28 03:48:23 -05:00
Deirdre Connolly b47e886eed Add transaction v3 proptest strategy 2020-01-28 03:48:23 -05:00
Deirdre Connolly b786e1e19c derive Arbitrary on BlockHeight 2020-01-28 03:48:23 -05:00
Deirdre Connolly 9cbc60a2d7 Proptest v1 and v2 transaction variants 2020-01-28 03:48:23 -05:00
Deirdre Connolly 31b759a924 Update (de)serialization to use EncryptedCiphertext types 2020-01-28 03:48:23 -05:00
Deirdre Connolly ffd64d4b71 Add shielded_data::EncryptedCiphertext 2020-01-28 03:48:23 -05:00
Deirdre Connolly 95f3c61e53 Add joinsplit::EncryptedCiphertext and derive(Arbitrary) on JoinSplit* 2020-01-28 03:48:23 -05:00
Deirdre Connolly 7d520f8133 Impl Arbitrary for Bctv14Proof 2020-01-28 03:48:23 -05:00
Deirdre Connolly f4df61eb47 Remove commented out extra Arbitrary impl for Locktime 2020-01-28 03:48:23 -05:00
Deirdre Connolly b0c0055915 Transaction::V1 round trip proptest 2020-01-28 03:48:23 -05:00
Deirdre Connolly dfb28b7854 Stubbing out an Arbitrary impl for variant V1 of the Transaction enum 2020-01-28 03:48:23 -05:00
Deirdre Connolly 1ee79b79d3 Add proptest-regressions for transaction/tests.rs 2020-01-28 03:48:23 -05:00
Deirdre Connolly eb5b3dfefc Add zcash_[de]serialize roundtrip proptest for Script type 2020-01-28 03:48:23 -05:00
Deirdre Connolly 86f631f9b7 Truncate LockTime::Time datetimes to only seconds for proptests 2020-01-28 03:48:23 -05:00
Deirdre Connolly 71d5571e39 Add roundtrip proptest for LockTime serialization/deserialization
Relates to #150
2020-01-28 03:48:23 -05:00
Henry de Valence 60f3f35d89 Refine Ed25519 byte arrays to ed25519-zebra types. 2020-01-24 16:43:31 -05:00
Henry de Valence 2e04610be3 Fix doc errors (missing links, etc). 2020-01-24 13:38:23 -08:00
Henry de Valence 4d5c8c7940 Clarify Transaction docs to point to iterator methods.
Closes #191.
2020-01-24 13:38:23 -08:00
Henry de Valence 41021c65ad Implement transaction (de)serialization. 2019-12-31 02:46:39 -05:00
Henry de Valence 53cae4647e Make invalid ShieldedData unrepresentable.
ShieldedData objects must have at least one spend or output; using Either
ensures that at least one must be present.  This is similar to the
JoinSplitData case, but slightly more complicated: rather than enforcing that
one list has at least one element (which can be done as `(first, rest)`), here
we need to use Either.   This has the downside that it is possible to construct
multiple equivalent internal representations (choosing whether a spend or
output goes in the `first` slot), but this easily fixed with a custom PartialEq
implementation.
2019-12-31 02:46:39 -05:00
Henry de Valence 3a7ddbad2d Add another convenience method for arrays, this time 64 bytes. 2019-12-31 02:46:39 -05:00
Henry de Valence 049998c751 Fix publicity for SaplingNoteTreeRootHash 2019-12-31 02:46:39 -05:00
Henry de Valence 8ff4139c1f Use Groth16Proof in ShieldedData, not just JoinSplits. 2019-12-31 02:46:39 -05:00
Henry de Valence 92ddf0542f Provide impl Zcash[De]Serialize for Vec<T: Zcash[De]Serialize>.
This replaces the read_list function and makes the code significantly cleaner.

The only downside is that it loses exact preallocation, but this is probably not a big deal.
2019-12-31 02:46:39 -05:00
Henry de Valence 1199cfa23e impl Zcash[De]Serialize for Script 2019-12-31 02:46:39 -05:00
Henry de Valence 392825c4cb Add Zcash[De]Serialize bound to ZkSnarkProof. 2019-12-31 02:46:39 -05:00
Henry de Valence fa1e168fb5 Ensure that invalid JoinSplitDatas are unrepresentable.
All JoinSplitDatas must contain at least one JoinSplit.
2019-12-31 02:46:39 -05:00
Henry de Valence c26304d983 Correct an error in transaction modeling.
In the previous transaction modeling I defined the structs so that the number
of old and new commitments for a JoinSplit were variable, when in fact the
Sprout design fixes both to be 2.  So now they are hardcoded as 2 in the source
code as well.  This commit also fixes some missing `pub` fields on the
`JoinSplit` struct.
2019-12-31 02:46:39 -05:00
Henry de Valence 056127dc94 Copy a transaction test vector from librustzcash. 2019-12-31 02:46:39 -05:00
Henry de Valence 2965187b91 Upgrade tokio, futures, hyper to released versions. 2019-12-13 17:42:15 -05:00
Henry de Valence 4315235d52 Use RedJubjub types in zebra-chain. (#142) 2019-12-12 14:23:19 -05:00
Henry de Valence c013895cd7 Update Transaction definition. (#105)
* Added a few more top-level fields for the Transaction struct

* Add a placeholder Script type.

This could alternately use bytes::Bytes to save some allocations
but I don't think this is important to get perfectly now.  In the future, we
will want to have all of the script handling code in the zebra-script crate,
but we will need to have a container type for an encoded script in zebra-chain,
because otherwise zebra-chain would depend on zebra-script and not the other
way around.

* Rename Transaction{Input,Output} -> Transparent{Input,Output}.

These are only *transparent* inputs and outputs, so by putting Transparent in
the name (instead of Transaction) it's more clear that a transaction's inputs
or outputs can also be shielded.

* Add a LockTime enum.

* First attempt at a Transaction enum.

This attempts to map the versioning and field presence rules into an ADT, so
that structurally invalid transactions (e.g., a BCTV14 proof in a Sapling
transaction) are unrepresentable.

* Update zebra-chain/src/transaction.rs

Co-Authored-By: Daira Hopwood <daira@jacaranda.org>

* Add fixme note on type refinement.

* Rename Transaction variants according to version.

* Split transaction.rs into submodules.

* Start filling in spend, output descriptions.

* Progress on JoinSplit data structures.

This has a lot of duplication and should really use generics to abstract over
Sprout-on-BCTV14 or Sprout-on-Groth16.

* Add data types for Bctv14 and Groth16 proofs.

This also adds a trait to abstract over them.

* Make JoinSplit descriptions generic over the proof system.

* Update zebra-chain/src/transaction/joinsplit.rs
2019-12-05 15:56:58 -05:00
Deirdre Connolly 51b888c0ff Impl custom Debug for TransactionHash
Resolves #104
2019-12-05 10:07:47 -08:00
Henry de Valence f00c16a624 Require that compactsize encodings are canonical. 2019-11-20 11:59:54 -05:00
Henry de Valence 68a6837cc1 Add a bytes round-trip test for compactsize encoding. 2019-11-20 11:59:54 -05:00
Henry de Valence 986b5ee46b Fix overlapping range in compactsize encoding. 2019-11-20 11:59:54 -05:00
Henry de Valence ca24aaf58e Add the seed for the failing proptest case. 2019-11-20 11:59:54 -05:00
Henry de Valence 2b9991e4e7 Add a basic proptest for compactsize encodings.
There's a compiler warning about overlapping ranges so this test should catch the bug.
2019-11-20 11:59:54 -05:00
Henry de Valence 5b801400c1 Update zebra-chain/Cargo.toml 2019-10-17 09:33:10 -07:00
Deirdre Connolly 96ad551681 Remove unnecessary write_all impl 2019-10-17 09:33:10 -07:00
Deirdre Connolly 65d988471a Implement custom Debug for Sha256dChecksum
Relates to #63
2019-10-17 09:33:10 -07:00
Deirdre Connolly 539a16979b Implement custom Debug impl for BlockHeaderHash
Includes a testcase and write_all implementation for Sha256dWriter.

Related to #63
2019-10-17 09:33:10 -07:00