Skip to content

Commit

Permalink
wip: implement automatic detection of clsigs in blocks and process them
Browse files Browse the repository at this point in the history
  • Loading branch information
PastaPastaPasta committed Aug 28, 2024
1 parent f675fcb commit 1dd9573
Showing 1 changed file with 25 additions and 15 deletions.
40 changes: 25 additions & 15 deletions src/llmq/chainlocks.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include <llmq/quorums.h>
#include <llmq/instantsend.h>
#include <llmq/signing_shares.h>
#include <evo/cbtx.h>

#include <chain.h>
#include <chainparams.h>
Expand Down Expand Up @@ -373,27 +374,36 @@ void CChainLocksHandler::BlockConnected(const std::shared_ptr<const CBlock>& pbl
// We need this information later when we try to sign a new tip, so that we can determine if all included TXs are
// safe.

LOCK(cs);
{
LOCK(cs);

auto it = blockTxs.find(pindex->GetBlockHash());
if (it == blockTxs.end()) {
// we must create this entry even if there are no lockable transactions in the block, so that TrySignChainTip
// later knows about this block
it = blockTxs.emplace(pindex->GetBlockHash(), std::make_shared<std::unordered_set<uint256, StaticSaltedHasher>>()).first;
}
auto& txids = *it->second;
auto it = blockTxs.find(pindex->GetBlockHash());
if (it == blockTxs.end()) {
// we must create this entry even if there are no lockable transactions in the block, so that TrySignChainTip later knows about this block
it = blockTxs
.emplace(pindex->GetBlockHash(), std::make_shared<std::unordered_set<uint256, StaticSaltedHasher>>())
.first;
}
auto& txids = *it->second;

int64_t curTime = GetTime<std::chrono::seconds>().count();
int64_t curTime = GetTime<std::chrono::seconds>().count();

for (const auto& tx : pblock->vtx) {
if (tx->IsCoinBase() || tx->vin.empty()) {
continue;
}
for (const auto& tx : pblock->vtx) {
if (tx->IsCoinBase() || tx->vin.empty()) {
continue;
}

txids.emplace(tx->GetHash());
txFirstSeenTime.emplace(tx->GetHash(), curTime);
txids.emplace(tx->GetHash());
txFirstSeenTime.emplace(tx->GetHash(), curTime);
}
}
auto cbtx = GetCoinbaseTx(pindex);
auto clsig_height = pindex->nHeight - cbtx->bestCLHeightDiff;

if (clsig_height > uint32_t(WITH_LOCK(cs, return bestChainLock.getHeight()))) {
auto clsig = CChainLockSig(clsig_height, pindex->GetAncestor(clsig_height)->GetBlockHash(), cbtx->bestCLSignature);
ProcessNewChainLock(-1, clsig, ::SerializeHash(clsig));
}
}

void CChainLocksHandler::BlockDisconnected(const std::shared_ptr<const CBlock>& pblock, gsl::not_null<const CBlockIndex*> pindexDisconnected)
Expand Down

0 comments on commit 1dd9573

Please sign in to comment.