Remove early return logic from transaction parsing
This also fixes a bug in `CTransaction::SerializationOp` where `CTransaction::UpdateHash` was not being called for v5 transactions.
This commit is contained in:
parent
66832c1e54
commit
88b3c377d1
|
@ -857,32 +857,31 @@ public:
|
||||||
|
|
||||||
// Orchard Transaction Fields
|
// Orchard Transaction Fields
|
||||||
READWRITE(*const_cast<OrchardBundle*>(&orchardBundle));
|
READWRITE(*const_cast<OrchardBundle*>(&orchardBundle));
|
||||||
|
} else {
|
||||||
return;
|
// Legacy transaction formats
|
||||||
}
|
READWRITE(*const_cast<std::vector<CTxIn>*>(&vin));
|
||||||
|
READWRITE(*const_cast<std::vector<CTxOut>*>(&vout));
|
||||||
READWRITE(*const_cast<std::vector<CTxIn>*>(&vin));
|
READWRITE(*const_cast<uint32_t*>(&nLockTime));
|
||||||
READWRITE(*const_cast<std::vector<CTxOut>*>(&vout));
|
if (isOverwinterV3 || isSaplingV4 || isFuture) {
|
||||||
READWRITE(*const_cast<uint32_t*>(&nLockTime));
|
READWRITE(*const_cast<uint32_t*>(&nExpiryHeight));
|
||||||
if (isOverwinterV3 || isSaplingV4 || isFuture) {
|
}
|
||||||
READWRITE(*const_cast<uint32_t*>(&nExpiryHeight));
|
if (isSaplingV4 || isFuture) {
|
||||||
}
|
READWRITE(*const_cast<CAmount*>(&valueBalance));
|
||||||
if (isSaplingV4 || isFuture) {
|
READWRITE(*const_cast<std::vector<SpendDescription>*>(&vShieldedSpend));
|
||||||
READWRITE(*const_cast<CAmount*>(&valueBalance));
|
READWRITE(*const_cast<std::vector<OutputDescription>*>(&vShieldedOutput));
|
||||||
READWRITE(*const_cast<std::vector<SpendDescription>*>(&vShieldedSpend));
|
}
|
||||||
READWRITE(*const_cast<std::vector<OutputDescription>*>(&vShieldedOutput));
|
if (nVersion >= 2) {
|
||||||
}
|
// These fields do not depend on fOverwintered
|
||||||
if (nVersion >= 2) {
|
auto os = WithVersion(&s, static_cast<int>(header));
|
||||||
// These fields do not depend on fOverwintered
|
::SerReadWrite(os, *const_cast<std::vector<JSDescription>*>(&vJoinSplit), ser_action);
|
||||||
auto os = WithVersion(&s, static_cast<int>(header));
|
if (vJoinSplit.size() > 0) {
|
||||||
::SerReadWrite(os, *const_cast<std::vector<JSDescription>*>(&vJoinSplit), ser_action);
|
READWRITE(*const_cast<Ed25519VerificationKey*>(&joinSplitPubKey));
|
||||||
if (vJoinSplit.size() > 0) {
|
READWRITE(*const_cast<Ed25519Signature*>(&joinSplitSig));
|
||||||
READWRITE(*const_cast<Ed25519VerificationKey*>(&joinSplitPubKey));
|
}
|
||||||
READWRITE(*const_cast<Ed25519Signature*>(&joinSplitSig));
|
}
|
||||||
|
if ((isSaplingV4 || isFuture) && !(vShieldedSpend.empty() && vShieldedOutput.empty())) {
|
||||||
|
READWRITE(*const_cast<binding_sig_t*>(&bindingSig));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ((isSaplingV4 || isFuture) && !(vShieldedSpend.empty() && vShieldedOutput.empty())) {
|
|
||||||
READWRITE(*const_cast<binding_sig_t*>(&bindingSig));
|
|
||||||
}
|
}
|
||||||
if (ser_action.ForRead())
|
if (ser_action.ForRead())
|
||||||
UpdateHash();
|
UpdateHash();
|
||||||
|
@ -1049,31 +1048,30 @@ struct CMutableTransaction
|
||||||
|
|
||||||
// Orchard Transaction Fields
|
// Orchard Transaction Fields
|
||||||
READWRITE(orchardBundle);
|
READWRITE(orchardBundle);
|
||||||
|
} else {
|
||||||
return;
|
// Legacy transaction formats
|
||||||
}
|
READWRITE(vin);
|
||||||
|
READWRITE(vout);
|
||||||
READWRITE(vin);
|
READWRITE(nLockTime);
|
||||||
READWRITE(vout);
|
if (isOverwinterV3 || isSaplingV4 || isFuture) {
|
||||||
READWRITE(nLockTime);
|
READWRITE(nExpiryHeight);
|
||||||
if (isOverwinterV3 || isSaplingV4 || isFuture) {
|
}
|
||||||
READWRITE(nExpiryHeight);
|
if (isSaplingV4 || isFuture) {
|
||||||
}
|
READWRITE(valueBalance);
|
||||||
if (isSaplingV4 || isFuture) {
|
READWRITE(vShieldedSpend);
|
||||||
READWRITE(valueBalance);
|
READWRITE(vShieldedOutput);
|
||||||
READWRITE(vShieldedSpend);
|
}
|
||||||
READWRITE(vShieldedOutput);
|
if (nVersion >= 2) {
|
||||||
}
|
auto os = WithVersion(&s, static_cast<int>(header));
|
||||||
if (nVersion >= 2) {
|
::SerReadWrite(os, vJoinSplit, ser_action);
|
||||||
auto os = WithVersion(&s, static_cast<int>(header));
|
if (vJoinSplit.size() > 0) {
|
||||||
::SerReadWrite(os, vJoinSplit, ser_action);
|
READWRITE(joinSplitPubKey);
|
||||||
if (vJoinSplit.size() > 0) {
|
READWRITE(joinSplitSig);
|
||||||
READWRITE(joinSplitPubKey);
|
}
|
||||||
READWRITE(joinSplitSig);
|
}
|
||||||
|
if ((isSaplingV4 || isFuture) && !(vShieldedSpend.empty() && vShieldedOutput.empty())) {
|
||||||
|
READWRITE(bindingSig);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ((isSaplingV4 || isFuture) && !(vShieldedSpend.empty() && vShieldedOutput.empty())) {
|
|
||||||
READWRITE(bindingSig);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue