Code simplification: inline CTxInWitness inside CTxIn #8452
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Based on #8451.
This is a code change that was suggested early on, but not included in the segwit PR to not invalidate review. It turns out to be simpler than what I had expected, and actually shortens the code.
Instead of a structure where all
CTransaction's witness data was encapsulated underCTransaction::wit, it is now inlined insideCTransaction::vin[x]. This also reduces memory usage for witness-bearing transactions (as no separate vector for allCTxInWitnesses is needed) and serialization/deserialization time as a result. For non-witness transactions with more than 1 input, it increases memory usage.I think it's neat that it changes the verbose and often-repeated
tx.wit.vtxinwit.size() > i ? &tx.wit.vtxinwit[i].scriptWitness : NULLpattern inVerifyScriptcalls to just&tx.vin[i].scriptWitness.This should have no effect on behaviour.