Zebra/zebra-state/src
Janito Vaqueiro Ferreira Filho ec2c980bb1
Validate transaction lock times (#3060)
* Create a `LockTime::unlocked` helper constructor

Returns a `LockTime` that is unlocked at the genesis block.

* Return `Option<LockTime>` from `lock_time` method

Prepare to return `None` for when a transaction has its lock time
disabled.

* Return `None` instead of zero `LockTime`

Because a zero lock time means that the transaction was unlocked at the
genesis block, so it was never actually locked.

* Rephrase zero lock time check comment

Clarify that the check is not redundant, and is necessary for the
genesis transaction.

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

* Add a `transparent::Input::sequence` getter method

Retrieve a transparent input's sequence number.

* Check if lock time is enabled by a sequence number

Validate the consensus rule that the lock time is only enabled if at
least one transparent input has a value different from `u32::MAX` as its
sequence number.

* Add more Zcash specific details to comment

Explain the Zcash specific lock time behaviors.

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

* Add `time` field to `Request::Block` variant

The block time to use to check if the transaction was unlocked and
allowed to be included in the block.

* Add `Request::block_time` getter

Returns the block time for the block that owns the transaction being
validated or the current time plus a tolerance for mempool transactions.

* Validate transaction lock times

If they are enabled by a transaction's transparent input sequence
numbers, make sure that they are in the past.

* Add comments with consensus rule parts

Make it easier to map what part of the consensus rule each match arm is
responsible for.

Co-authored-by: teor <teor@riseup.net>
2021-11-23 05:53:53 +00:00
..
service Check MAX_BLOCK_SIGOPS in the block verifier (#3049) 2021-11-15 20:55:32 +00:00
tests Validate transaction lock times (#3060) 2021-11-23 05:53:53 +00:00
arbitrary.rs Reset `ChainTipChange`s on chain fork and network upgrade activation (#2721) 2021-09-02 12:25:42 +10:00
config.rs Construct structs with ..default() to avoid a lint 2021-01-19 11:02:20 -05:00
constants.rs Add value pools to FinalizedState (#2599) 2021-08-19 13:55:36 -03:00
error.rs Add value pool/balances to non-finalized state (#2656) 2021-08-25 10:57:07 -03:00
lib.rs Test if the mempool storage is cleared (#2815) 2021-10-01 14:44:25 +00:00
request.rs Stop calculating transaction hashes twice in the checkpoint verifier (#2696) 2021-08-31 10:55:39 +10:00
response.rs move `Utxo` type to zebra-chain (#2481) 2021-07-12 12:49:33 +10:00
service.rs Fix verbose add_initial_peers logs (#3019) 2021-11-07 22:21:51 +00:00
tests.rs ZIP-221 and ZIP-244 commitment validation in non-finalized state (#2609) 2021-08-17 11:49:27 -03:00
util.rs swap best_chain_len and related constants to u32 for consistency (#1257) 2020-11-06 14:00:10 +10:00