Skip to content

Commit f43be22

Browse files
committed
fix: remove incorrect request generation with bad serialization hash
We should not be generating the hash using a CTxIn, only a COutPoint
1 parent 764893d commit f43be22

File tree

4 files changed

+9
-9
lines changed

4 files changed

+9
-9
lines changed

src/instantsend/instantsend.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,11 @@ Uint256HashSet GetIdsFromLockable(const std::vector<T>& vec)
4444
if (vec.empty()) return ret;
4545
ret.reserve(vec.size());
4646
for (const auto& in : vec) {
47-
ret.emplace(instantsend::GenInputLockRequestId(in));
47+
if constexpr (std::is_same_v<T, CTxIn>) {
48+
ret.emplace(instantsend::GenInputLockRequestId(in.prevout));
49+
} else {
50+
ret.emplace(instantsend::GenInputLockRequestId(in));
51+
}
4852
}
4953
return ret;
5054
}

src/instantsend/lock.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,8 @@ bool InstantSendLock::TriviallyValid() const
3838
return inputs_set.size() == inputs.size();
3939
}
4040

41-
template <typename T>
42-
uint256 GenInputLockRequestId(const T& val)
41+
uint256 GenInputLockRequestId(const COutPoint& val)
4342
{
4443
return ::SerializeHash(std::make_pair(INPUTLOCK_REQUESTID_PREFIX, val));
4544
}
46-
template uint256 GenInputLockRequestId(const COutPoint& val);
47-
template uint256 GenInputLockRequestId(const CTxIn& val);
4845
} // namespace instantsend

src/instantsend/lock.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,7 @@ struct InstantSendLock {
4040
bool TriviallyValid() const;
4141
};
4242

43-
template <typename T>
44-
uint256 GenInputLockRequestId(const T& val);
43+
uint256 GenInputLockRequestId(const COutPoint& val);
4544

4645
using InstantSendLockPtr = std::shared_ptr<InstantSendLock>;
4746
} // namespace instantsend

src/instantsend/signing.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ bool InstantSendSigner::TrySignInputLocks(const CTransaction& tx, bool fRetroact
295295

296296
size_t alreadyVotedCount = 0;
297297
for (const auto& in : tx.vin) {
298-
auto id = GenInputLockRequestId(in);
298+
auto id = GenInputLockRequestId(in.prevout);
299299
ids.emplace_back(id);
300300

301301
uint256 otherTxHash;
@@ -344,7 +344,7 @@ void InstantSendSigner::TrySignInstantSendLock(const CTransaction& tx)
344344
const auto llmqType = Params().GetConsensus().llmqTypeDIP0024InstantSend;
345345

346346
for (const auto& in : tx.vin) {
347-
auto id = GenInputLockRequestId(in);
347+
auto id = GenInputLockRequestId(in.prevout);
348348
if (!m_sigman.HasRecoveredSig(llmqType, id, tx.GetHash())) {
349349
return;
350350
}

0 commit comments

Comments
 (0)