diff --git a/src/lelantus.cpp b/src/lelantus.cpp index 7b6df0a744..95e45e2fab 100644 --- a/src/lelantus.cpp +++ b/src/lelantus.cpp @@ -553,6 +553,13 @@ bool CheckLelantusJoinSplitTransaction( anonymity_sets[idAndHash.first] = anonymity_set; } + const std::vector& ids = joinsplit->getCoinGroupIds(); + for (const auto& id: ids) { + if (!anonymity_sets.count(id)) + return state.DoS(100, + error("CheckLelantusJoinSplitTransaction: No anonymity set found.")); + } + BatchProofContainer* batchProofContainer = BatchProofContainer::get_instance(); bool useBatching = batchProofContainer->fCollectProofs && !isVerifyDB && !isCheckWallet && lelantusTxInfo && !lelantusTxInfo->fInfoIsComplete; @@ -941,15 +948,17 @@ bool ConnectBlockLelantus( )) { return false; } + } - if (!fJustCheck) { + if (!fJustCheck) { + BOOST_FOREACH(auto& serial, pblock->lelantusTxInfo->spentSerials) { pindexNew->lelantusSpentSerials.insert(serial); lelantusState.AddSpend(serial.first, serial.second); } } - - if (fJustCheck) + else { return true; + } const auto& params = ::Params().GetConsensus(); CHash256 hash; @@ -1359,9 +1368,8 @@ void CLelantusState::RemoveBlock(CBlockIndex *index) { // roll back coin group updates for (auto &coins : index->lelantusMintedPubCoins) { - if (coinGroups.count(coins.first) == 0) { - throw std::invalid_argument("Group Id does not exist"); - } + if (coinGroups.count(coins.first) == 0) + continue; LelantusCoinGroupInfo& coinGroup = coinGroups[coins.first]; auto nMintsToForget = coins.second.size(); diff --git a/src/sigma.cpp b/src/sigma.cpp index 23236241e6..36c9a1e044 100644 --- a/src/sigma.cpp +++ b/src/sigma.cpp @@ -643,15 +643,17 @@ bool ConnectBlockSigma( )) { return false; } + } - if (!fJustCheck) { + if (!fJustCheck) { + BOOST_FOREACH(auto& serial, pblock->sigmaTxInfo->spentSerials) { pindexNew->sigmaSpentSerials.insert(serial); sigmaState.AddSpend(serial.first, serial.second.denomination, serial.second.coinGroupId); } } - - if (fJustCheck) + else { return true; + } sigmaState.AddMintsToStateAndBlockIndex(pindexNew, pblock); }