Deirdre Connolly
c027cfc0d2
Rename SaplingShieldedAddress to Address, make address & commitment private, export their structs
2020-08-28 04:46:31 -04:00
Deirdre Connolly
df89a049cb
Rename EncryptedCiphertext to EncryptedNote
2020-08-28 04:46:31 -04:00
dependabot[bot]
8e9019a847
build(deps): bump jubjub from 0.3.0 to 0.4.0
...
Bumps [jubjub](https://github.com/zkcrypto/jubjub ) from 0.3.0 to 0.4.0.
- [Release notes](https://github.com/zkcrypto/jubjub/releases )
- [Changelog](https://github.com/zkcrypto/jubjub/blob/master/RELEASES.md )
- [Commits](https://github.com/zkcrypto/jubjub/commits )
Signed-off-by: dependabot[bot] <support@github.com>
2020-08-25 17:35:54 -04:00
Ramana Venkata
e90137e79b
Update sha2@0.9.1 ( #938 )
...
* Update sha2@0.9.1
Fixes #915
* Update zebra-chain/src/sprout/keys.rs
Co-authored-by: Jane Lusby <jlusby42@gmail.com>
* Update zebra-chain/src/sprout/note/nullifiers.rs
Co-authored-by: Jane Lusby <jlusby42@gmail.com>
2020-08-21 16:26:14 -07:00
teor
9a8af731b1
fix: Remove redundant ConsensusBranchId constants
2020-08-20 14:52:09 -04:00
Jane Lusby
1d6183ef84
Make zebra-script wrap the C++ script implementation in zcashconsensus ( #708 )
...
* attempt to use zcashconsensus crate in zebra-script
* boop
* update verify fn to use zebra types
* a bit more cleanup
* cleanup
* more
* beep boop
* fix renamed member
* cleaning
* get a real branch id
* remove as of yet unneeded api
* Update zebra-chain/src/transaction.rs
* Update zebra-chain/src/transaction.rs
* more cleanup
* oops wrong dep section
* use a tuple to communicate arg association
* update to use published version of zcash_script
* fix new compiler error
* install llvm on windows
* fix bindgen bug????
* try to get docker file to win
* okay try everything
* fix windows build maybe
* always download choco
* fix paths for moved types
* try a different error message
* try convenience script
* try installing just llvm
* add back one more
* try installing some headers
* try a diff package
* try everything
* remove the minimum
* try newer docker builder image
* cleanup docker image
* cleanup extra ci step
2020-08-18 11:08:53 -07:00
Alfredo Garcia
4dac4d4df7
move `is_coinbase_first` from chain to consensus
2020-08-18 11:03:40 -07:00
Henry de Valence
d63562994d
deps: Update x25519-dalek, ed25519-zebra
2020-08-17 20:47:48 -07:00
Henry de Valence
8e15c16b42
chain: TransparentAddress -> transparent::Address
2020-08-17 11:46:34 -07:00
Henry de Valence
ebdceb5197
chain: rename TransactionHash to transaction::Hash
2020-08-17 11:46:34 -07:00
Henry de Valence
d49d3d2b30
chain: tweak docs for JoinSplitData, ShieldedData
2020-08-17 11:46:34 -07:00
Henry de Valence
5c176d2f96
chain: move JoinSplit to sprout
2020-08-17 11:46:34 -07:00
Henry de Valence
1fc859d0c5
chain: move Spend, Output into sapling
...
The ShieldedData container for the spend and output descriptions of a
transaction does *not* move, because it's encoding transaction
structure. A good sign that this is the right factoring is that the
transaction module now only needs to pull in sapling::{Spend, Output}
and not all the internals.
2020-08-17 11:46:34 -07:00
Henry de Valence
d945cd28e8
chain: move Transparent{Input,Output} to transparent
...
Also bring the `Script` type there too.
2020-08-17 11:46:34 -07:00
Deirdre Connolly
25f63518f4
Allow clippy::unit_arg because of derive(Arbitrary)
2020-08-17 11:46:34 -07:00
Henry de Valence
d57390d265
chain: doc tweaks (mostly block::)
2020-08-17 11:46:34 -07:00
Henry de Valence
94d6d448bb
chain: rename to block::merkle::{Root, Tree}.
2020-08-17 11:46:34 -07:00
Henry de Valence
2712c4b72a
chain: rename BlockHeader to block::Header
2020-08-17 11:46:34 -07:00
Henry de Valence
103b663c40
chain: rename BlockHeight to block::Height
2020-08-17 11:46:34 -07:00
Henry de Valence
61dea90e2f
chain: rename BlockHeaderHash to block::Hash
...
This is the first in a sequence of changes that change the block:: items
to not include Block as a prefix in their name, in accordance with the
Rust API guidelines.
2020-08-17 11:46:34 -07:00
Henry de Valence
04ba696515
chain: remove block::block
2020-08-17 11:46:34 -07:00
Henry de Valence
9766d32fa6
chain: touch up amount docs
2020-08-17 11:46:34 -07:00
Henry de Valence
d0ee7a9961
chain: amount::AmountConstraint -> amount::Constraint
2020-08-17 11:46:34 -07:00
Henry de Valence
fd548592bf
chain: remove clippy::try_error annotation
2020-08-17 11:46:34 -07:00
Henry de Valence
dcc1e19129
chain: touch up docs
2020-08-17 11:46:34 -07:00
Henry de Valence
ce1e81b274
chain: move merkle_tree to block::merkle.
...
This Merkle tree is the SHA256d one used only for including transactions
in a block, so it should be kept there in order to not be confused with
other Merkle trees (like the note commitment trees).
2020-08-17 11:46:34 -07:00
Henry de Valence
7298e7c636
chain: create a transparent module.
2020-08-17 11:46:34 -07:00
Henry de Valence
e8f923ec86
chain: move Memo into transaction
2020-08-17 11:46:34 -07:00
Henry de Valence
312c66264a
chain: extract sprout code into sprout module.
2020-08-17 11:46:34 -07:00
Henry de Valence
e06f59ee21
chain: extract sapling code to sapling module
2020-08-17 11:46:34 -07:00
Henry de Valence
c5a8cb0c91
chain: create primitives module.
...
This contains definitions of primitive types used in other structures
and re-exports of component libraries.
2020-08-17 11:46:34 -07:00
Henry de Valence
196e841cd9
chain: rename LightClientRootHash to RootHash
...
It's not accurate to call it a LightClientRootHash, because it's not
always a root has for a light client -- sometimes it's a different kind
of root hash.
2020-08-17 11:46:34 -07:00
Henry de Valence
b296d1e2a3
chain: move Block into a leaf module.
...
This might make things a little easier to rearrange. In the future it
would probably be good to change to block::Hash, block::Header, etc.
2020-08-17 11:46:34 -07:00
Henry de Valence
948b067808
chain: move Network, NetworkUpgrade to parameters
...
Also, avoid using star-imports of the enum variants, which pollutes the
namespace.
2020-08-17 11:46:34 -07:00
Henry de Valence
64d9d55992
chain: organize block tests
...
This moves the tests::generate module into the block tests. Because
this whole set of changes is just focused on reorganization, the
generate code is unchanged, but in the future, the code should be
rewritten as a collection of proptest strategies.
2020-08-17 11:46:34 -07:00
Henry de Valence
855b89dec4
chain: create a new work module for proof-of-work
...
This extracts the `difficulty` module from `block` and the
`equihash_solution` module from the crate root. The PoW calculations
are significantly more complicated than the other block code and pretty
dissimilar from it, so it makes more sense to create a common proof of
work module.
The `EquihashSolution` and `EQUIHASH_SOLUTION_SIZE` are renamed to
`equihash::Solution` and `equihash::SOLUTION_SIZE` and imported that
way, except in `block/header.rs`, to avoid a conflict with the
`equihash` crate. In the future it would be better to encapsulate the
equihash solution check into the `equihash::Solution` type so that
callers only need to import our `work::equihash`.
The test organization leaves a little to be desired but I think that
this can be improved as we fill out the proof of work implementation.
2020-08-17 11:46:34 -07:00
Henry de Valence
dad6340cd3
chain: move BlockHeight into block
2020-08-17 11:46:34 -07:00
Henry de Valence
5f71bcd0d1
chain: move LockTime into transaction
2020-08-17 11:46:34 -07:00
Henry de Valence
8e9a239687
chain: clean transaction tests module.
...
This moves the transaction strategies to `arbitrary`, to live with the
other strategy impls (`Arbitrary` is just a default type-associated
strategy), splits the proptests into a new `prop` module, and splits the
test vector checks into a `vector`s module.
This ensures that we keep code in leaf modules and only have
organization (use statements) in non-leaf modules.
2020-08-17 11:46:34 -07:00
Henry de Valence
a35604aef3
chain: move amount to a top-level module.
2020-08-17 11:46:34 -07:00
Henry de Valence
cee7d0b8eb
chain: move serde_helpers into serialization.
2020-08-17 11:46:34 -07:00
Henry de Valence
b36fe8f937
chain: move sha256d to serialization module.
...
This extracts the SHA256d code from being split across two modules and puts it
in one module, under serialization.
The code is unchanged except for three deleted tests:
* `sha256d_flush` in `sha256d_writer` (not a meaningful test);
* `transactionhash_debug` (constructs an invalid transaction hash, and the
behavior is tested in the next test);
* `decode_state_debug` (we do not need to test the Debug output of
DecodeState);
2020-08-17 11:46:34 -07:00
Henry de Valence
9f31e551c9
chain: split serialization.rs into files
...
The code is unchanged except for removing an unneeded clippy annotation in proptests.rs.
2020-08-17 11:46:34 -07:00
Henry de Valence
0d1f56ad2f
chain: remove utils module
...
A catch-all utils module can really easily slip into being a place to stash
miscellaneous functions that don't really belong anywhere in particular.
2020-08-17 11:46:34 -07:00
teor
4bbefeb68e
Implement Add for Work ( #894 )
...
* feature: Implement CompactDifficulty to Work
* fix: Test Work on all difficulty test cases
* fix: Add Bitcoin test vectors for difficulty
* feature: Cumulative Work
* impl Add, AddAssign for Work
* derive Default for Work
* test cumulative work
* fix: comments
* fix: More comments
* Fix comment links
* Remove unused import
Co-authored-by: Deirdre Connolly <durumcrustulum@gmail.com>
2020-08-14 20:48:56 -04:00
Deirdre Connolly
616d82faaf
Use the jubjub::AffinePoint in the canonical, encoded little-endian byte form in
...
Pedersen tests
Keeps the librustzcash test vectors with their big-endian byte order
as comments, for greppability.
2020-08-14 02:04:12 -04:00
Deirdre Connolly
a2c9011e06
Impl ZcashDeserialize for jubjub::Fq, use in transaction deserialization
2020-08-14 02:04:12 -04:00
Deirdre Connolly
1255cec6a4
Serialize Amount to bytes using byteorder::LittleEndian
2020-08-14 02:04:12 -04:00
Deirdre Connolly
646b506e7a
Whoops forgot to add sprout::NoteTreeRootHash
2020-08-14 02:04:12 -04:00
Deirdre Connolly
4914b80cdb
Add a TODO about caching Pedersen hash generator points
2020-08-14 02:04:12 -04:00
Deirdre Connolly
f753e63f3b
Clarify docstring on NoteCommitment::new()
2020-08-14 02:04:12 -04:00
Deirdre Connolly
437f40d3c8
Refine JoinSplit::anchor to be a sprout::NoteTreeRootHash type
2020-08-14 02:04:12 -04:00
Deirdre Connolly
5a5882700c
Tidy JoinSplit nullifiers deserialization
2020-08-14 02:04:12 -04:00
Deirdre Connolly
6b13ce3e83
Add Sapling EphemeralPublicKey type that wraps jubjub::AffinePoint
2020-08-14 02:04:12 -04:00
Deirdre Connolly
52a10d2837
Add note about whether sign checks in Amount -> Fr conversion matter
...
Co-authored-by: Henry de Valence <hdevalence@hdevalence.ca>
2020-08-14 02:04:12 -04:00
Deirdre Connolly
75cad3bb0a
Impl TryFrom's for Diversifier and use those to construct Sapling NoteCommitments
2020-08-14 02:04:12 -04:00
Deirdre Connolly
c8771ef620
Defer to From/Into [u8; 32] vs Zcash(De)Serialize for sprout::NoteCommitments
2020-08-14 02:04:12 -04:00
Deirdre Connolly
619afffa16
Use convenience Reader/Writer methods to only use From/Into for nullifer serialization
...
And thus remove duplicative Zcash(De)Serialization impls
2020-08-14 02:04:12 -04:00
Deirdre Connolly
13b6ff1c65
Add 32byte and 64 bytes convenience writer methods to WriteExt
2020-08-14 02:04:12 -04:00
Deirdre Connolly
e8fdd0e1f3
Impl TryFrom for Commitments, call from impl ZcashDeserialize
2020-08-14 02:04:12 -04:00
Deirdre Connolly
5d13880461
Remove Zcash(De)Serialize impls for *Commitments
2020-08-14 02:04:12 -04:00
Deirdre Connolly
014afd8e4a
Move Pedersen hash functions to their own submodule
2020-08-14 02:04:12 -04:00
Deirdre Connolly
be7ea200c8
Accept an Amount<NonNegative> for the value arg of a ValueCommitment constructor
2020-08-14 02:04:12 -04:00
Deirdre Connolly
e024e43896
Support nullifier derivation from borrowed Spending, NullifierDeriving keys
2020-08-14 02:04:12 -04:00
Deirdre Connolly
40b5a73a15
impl From<&NullifierDerivingKey>, use that to derive Sapling Nullifier
2020-08-14 02:04:12 -04:00
Deirdre Connolly
a8625b7b84
Remove empty doc comment
2020-08-14 02:04:12 -04:00
Deirdre Connolly
a3530b0eed
Move pedersen_hash() to go with the other Sapling hash functions, for now
2020-08-14 02:04:12 -04:00
Deirdre Connolly
0242df30cb
A space
2020-08-14 02:04:12 -04:00
Deirdre Connolly
9d9491c4e8
Index at 1, not 0, the main loop of PedersenHashToPoint, to match spec math
2020-08-14 02:04:12 -04:00
Deirdre Connolly
e5c07721b4
Typo fix
...
Co-authored-by: Henry de Valence <hdevalence@hdevalence.ca>
2020-08-14 02:04:12 -04:00
Deirdre Connolly
ca81e48843
Remove an extra line
2020-08-14 02:04:12 -04:00
Deirdre Connolly
60ae9d74e7
Typo
...
Co-authored-by: Henry de Valence <hdevalence@hdevalence.ca>
2020-08-14 02:04:12 -04:00
Deirdre Connolly
fe45c6402a
Remove clippy::unit_arg allowance
2020-08-14 02:04:12 -04:00
Deirdre Connolly
2942bad6ff
Make diversify_hash() private again
2020-08-14 02:04:12 -04:00
Deirdre Connolly
5a249f8da5
A space
...
Co-authored-by: Henry de Valence <hdevalence@hdevalence.ca>
2020-08-14 02:04:12 -04:00
Deirdre Connolly
5ba453c2a1
Remove unused SaplingNoteTreeRootHash types re: Heartwood
2020-08-14 02:04:12 -04:00
Deirdre Connolly
68871c5bd4
From<Nullifier> for [u8; 32]
2020-08-14 02:04:12 -04:00
Deirdre Connolly
b2584c4a8f
A space
2020-08-14 02:04:12 -04:00
Deirdre Connolly
0c299972ec
Clarify docstring about the Jubjub prime-order subgroup on generate_trapdoor()
2020-08-14 02:04:12 -04:00
Deirdre Connolly
f816761a5c
The pedersen hash to point test vectors now pass
2020-08-14 02:04:12 -04:00
Deirdre Connolly
425275ad35
Fix exclusive range, shift up enumerate() indexes with map()
2020-08-14 02:04:12 -04:00
Deirdre Connolly
be22ef64e5
At least fewer M_i() rounds for test cases
2020-08-14 02:04:12 -04:00
Deirdre Connolly
41c8076dab
Add test vectors that aren't being consumed right now
2020-08-14 02:04:12 -04:00
Deirdre Connolly
14d502a54b
Compute pedersen hash to point in scalar field
2020-08-14 02:04:12 -04:00
Deirdre Connolly
8ececebea7
A space
...
Co-authored-by: teor <teor@riseup.net>
2020-08-14 02:04:12 -04:00
Deirdre Connolly
3b01dc50ef
Use unicode scalar field characters instead of LaTeX
...
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2020-08-14 02:04:12 -04:00
Deirdre Connolly
1d494a2b7a
Docstring wrap
2020-08-14 02:04:12 -04:00
Deirdre Connolly
e22afa3c8f
Generate uniformly random scalar w/ Fr::from_bytes_wide()
...
Which reduces mod r always.
2020-08-14 02:04:12 -04:00
Deirdre Connolly
c46cda920f
Add primitive merkle_crh_sapling function
2020-08-14 02:04:12 -04:00
Deirdre Connolly
10a9aa5844
Add prf_nf and use in From impl to derive Sapling Nullifier
2020-08-14 02:04:12 -04:00
Deirdre Connolly
eb731a6e2f
Add note commitment tree Position type
2020-08-14 02:04:12 -04:00
Deirdre Connolly
65f8f2c613
Add mixing_pedersen_hash
...
Tidy constructors for NoteCommitment
2020-08-14 02:04:12 -04:00
Deirdre Connolly
ed888b38ef
Correctly generate a sapling NoteCommitment from the NoteCommitmentRandomness
2020-08-14 02:04:12 -04:00
Deirdre Connolly
b6385ca36f
Move commitment types into commitments module
...
Docs, tidy
2020-08-14 02:04:12 -04:00
Deirdre Connolly
4ccec84768
Add explicit pedersen_hash function
2020-08-14 02:04:12 -04:00
Deirdre Connolly
83c41869e1
Improve docs
2020-08-14 02:04:12 -04:00
Deirdre Connolly
caef323f9b
pedersen_hash_to_point() works, with submethods using bitvec
...
Also tidy, document
2020-08-14 02:04:12 -04:00
Deirdre Connolly
919557c20c
My BitSlice doesn't have a known size at compile time?
...
error[E0277]: the size for values of type cannot be known at compilation time
2020-08-14 02:04:12 -04:00
Deirdre Connolly
579f1ed134
Flesh out windowed_pedersen_commitment_r
2020-08-14 02:04:12 -04:00
Deirdre Connolly
9d87f30d18
Start of, but currently unfinished, Sapling note commitment / Windowed Pedersen Commitment
2020-08-14 02:04:12 -04:00