Zebra/zebra-chain/src
Janito Vaqueiro Ferreira Filho 410133435e
Add some proptests for lock time validation (#3089)
* Create a strategy for block heights after Sapling

Provides an arbitrary network (mainnet or testnet) and a block height
between the Sapling activation height on that network and the maximum
block height.

* Create a helper function to select block heights

Allows generating block heights inside a range using a scale factor
between 0 and 1.

* Allow specifying the outpoint index for mock UTXOs

Avoid creating multiple transparent transfers in the same transaction
with the same source UTXO, which would lead to a double spend.

* Create helper function to mock multiple transfers

Given relative block height scale factors, create a mock transparent
transfer for each one of them.

Also add a constant that serves as a guideline for the maximum number of
transparent transfers to mock.

* Create helper function to sanitize tx. version

Make sure the arbitrary transaction version is valid for the network
(testnet or mainnet) at the specified block height.

* Create `mock_transparent_transaction` helper func.

Creates a V4 or V5 mock transaction that only includes transparent
inputs and outputs.

* Create helper function for transaction validation

Performs the actual tested action of verifying a transaction. It sets up
the verifier and uses it to obtain the verification result.

* Test if zero lock time means unlocked

Generate arbitrary transactions with zero lock time, and check that they
are accepted by the transaction verifier.

* Allow changing the sequence number of an input

Add a setter method for a `transparent::Input`'s sequence number. This
setter is only available for testing.

* Test if sequence numbers can disable lock time

Create arbitrary transactions and set the sequence numbers of all of its
inputs to `u32::MAX` to see if that disables the lock time and the
transactions are accepted by the verifier.

* Test block height lock times

Make sure that the transaction verifier rejects transactions that are
still locked at a certain block height.

* Test block time lock times

Test that the transaction verifier rejects a transaction that is
validated at a block time that's before the transaction's lock time.

* Test unlocking by block height

Test that transactions unlocked at an earlier block height are accepted
by the transaction verifier.

* Test transactions unlocked by the block time

Test that transactions that were unlocked at a previous block time are
accepted by the transaction verifier.

* Fix an incorrect method comment

Co-authored-by: teor <teor@riseup.net>
2021-12-19 23:44:12 +00:00
..
amount Check remaining transaction value & make value balance signs match the spec (#2566) 2021-08-09 14:22:26 -03:00
block Fix new clippy lints in clippy nightly (#3176) 2021-12-09 14:19:14 +00:00
history_tree Refactor HistoryTree into NonEmptyHistoryTree and HistoryTree (#2582) 2021-08-10 09:51:50 -03:00
orchard Check nSpendsSapling, nOutputsSapling, and nActionsOrchard 2^16 limit (#3069) 2021-11-18 15:06:07 -03:00
parameters Fix task handling bugs, so peers are more likely to be available (#3191) 2021-12-20 09:02:31 +10:00
primitives Fix new clippy lints in clippy nightly (#3176) 2021-12-09 14:19:14 +00:00
sapling Validate JoinSplit proofs (#3128) 2021-12-10 16:33:15 +00:00
serialization Stop doing thousands of time checks each time we connect to a peer (#3106) 2021-12-03 15:09:43 -03:00
sprout Validate JoinSplit proofs (#3128) 2021-12-10 16:33:15 +00:00
transaction Fix new clippy lints in clippy nightly (#3176) 2021-12-09 14:19:14 +00:00
transparent Fix new clippy lints in clippy nightly (#3176) 2021-12-09 14:19:14 +00:00
value_balance Split ValueBalance methods into NegativeAllowed and NonNegative (#2649) 2021-08-20 13:30:38 +00:00
work Replace read_compactsize and write_compactsize with CompactSizeMessage (#3014) 2021-11-05 15:24:24 -03:00
amount.rs Check remaining transaction value & make value balance signs match the spec (#2566) 2021-08-09 14:22:26 -03:00
block.rs Fix new clippy lints in clippy nightly (#3176) 2021-12-09 14:19:14 +00:00
chain_tip.rs Add a `ChainTipChange` type to `await` chain tip changes (#2715) 2021-09-01 22:31:16 +00:00
fmt.rs Add a TypeNameToDebug formatter to zebra_chain (#2466) 2021-07-09 12:40:19 +10:00
history_tree.rs Tweak some assertions to better match their error messages (#2822) 2021-10-04 10:31:56 -03:00
lib.rs Refactor BestTipHeight into a generic ChainTip sender and receiver (#2676) 2021-08-27 11:34:33 +10:00
orchard.rs ZIP 212: validate Sapling and Orchard output of coinbase transactions (#3029) 2021-11-11 22:18:37 +00:00
parameters.rs Cleanup a few arbitrary impls (#2222) 2021-05-28 09:49:28 -03:00
primitives.rs ZIP 212: validate Sapling and Orchard output of coinbase transactions (#3029) 2021-11-11 22:18:37 +00:00
sapling.rs Update multiple crates to ensure bitvec 0.22.3 is being used (#2351) 2021-06-23 13:16:22 +10:00
serialization.rs Refactor addr v1 serialization using a separate AddrV1 type (#3021) 2021-11-10 06:47:50 +10:00
shutdown.rs Fix shutdown panics (#1637) 2021-02-03 19:03:28 +10:00
sprout.rs Validate JoinSplit proofs (#3128) 2021-12-10 16:33:15 +00:00
transaction.rs Integrate JoinSplit verifier (#3180) 2021-12-13 14:50:49 -05:00
transparent.rs Add some proptests for lock time validation (#3089) 2021-12-19 23:44:12 +00:00
value_balance.rs Add value pool/balances to non-finalized state (#2656) 2021-08-25 10:57:07 -03:00
work.rs Replace primitives_types with uint (#2350) 2021-06-18 15:35:05 -03:00