Skip to content
This repository was archived by the owner on Nov 28, 2022. It is now read-only.

Commit b864662

Browse files
authored
Merge pull request #12 from ZencashOfficial/sidechains_dev
Release v2.1.0-beta3
2 parents 302dcc8 + 0326322 commit b864662

File tree

5 files changed

+43
-44
lines changed

5 files changed

+43
-44
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Zen 2.1.0-beta2
1+
Zen 2.1.0-beta3
22
==============
33

44
What is Horizen?

configure.ac

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ AC_PREREQ([2.60])
33
define(_CLIENT_VERSION_MAJOR, 2)
44
define(_CLIENT_VERSION_MINOR, 1)
55
define(_CLIENT_VERSION_REVISION, 0)
6-
define(_CLIENT_VERSION_BUILD, 1)
6+
define(_CLIENT_VERSION_BUILD, 2)
77
define(_ZC_BUILD_VAL, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, m4_incr(_CLIENT_VERSION_BUILD), m4_eval(_CLIENT_VERSION_BUILD < 50), 1, m4_eval(_CLIENT_VERSION_BUILD - 24), m4_eval(_CLIENT_VERSION_BUILD == 50), 1, , m4_eval(_CLIENT_VERSION_BUILD - 50)))
88
define(_CLIENT_VERSION_SUFFIX, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, _CLIENT_VERSION_REVISION-beta$1, m4_eval(_CLIENT_VERSION_BUILD < 50), 1, _CLIENT_VERSION_REVISION-rc$1, m4_eval(_CLIENT_VERSION_BUILD == 50), 1, _CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION-$1)))
99
define(_CLIENT_VERSION_IS_RELEASE, true)

src/clientversion.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
#define CLIENT_VERSION_MAJOR 2
3636
#define CLIENT_VERSION_MINOR 1
3737
#define CLIENT_VERSION_REVISION 0
38-
#define CLIENT_VERSION_BUILD 1
38+
#define CLIENT_VERSION_BUILD 2
3939

4040
//! Set to true for release, false for prerelease or test build
4141
#define CLIENT_VERSION_IS_RELEASE true

src/coins.cpp

Lines changed: 38 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1324,6 +1324,11 @@ bool CCoinsViewCache::HandleSidechainEvents(int height, CBlockUndo& blockUndo, s
13241324
LogPrint("sc", "%s():%d - SIDECHAIN-EVENT: lastCertEpoch [%d], lastCertHash [%s]\n",
13251325
__func__, __LINE__, scInfo.lastEpochReferencedByCertificate, scInfo.lastCertificateHash.ToString());
13261326

1327+
blockUndo.vVoidedCertUndo.push_back(CVoidedCertUndo());
1328+
blockUndo.vVoidedCertUndo.back().voidedCertScId = ceasingScId;
1329+
LogPrint("sc", "%s():%d - set voidedCertHash[%s], ceasingScId = %s\n",
1330+
__func__, __LINE__, scInfo.lastCertificateHash.ToString(), ceasingScId.ToString());
1331+
13271332
if (scInfo.lastEpochReferencedByCertificate == CScCertificate::EPOCH_NULL) {
13281333
assert(scInfo.lastCertificateHash.IsNull());
13291334
continue;
@@ -1336,19 +1341,8 @@ bool CCoinsViewCache::HandleSidechainEvents(int height, CBlockUndo& blockUndo, s
13361341
assert(coins->nBwtMaturityHeight != 0);
13371342

13381343
//null all bwt outputs and add related txundo in block
1339-
bool foundFirstBwt = false;
1340-
13411344
for(int pos = coins->nFirstBwtPos; pos < coins->vout.size(); ++pos)
13421345
{
1343-
if (!foundFirstBwt)
1344-
{
1345-
blockUndo.vVoidedCertUndo.push_back(CVoidedCertUndo());
1346-
blockUndo.vVoidedCertUndo.back().voidedCertScId = ceasingScId;
1347-
LogPrint("sc", "%s():%d - set voidedCertHash[%s], firstBwtPos[%d]\n",
1348-
__func__, __LINE__, scInfo.lastCertificateHash.ToString(), pos);
1349-
foundFirstBwt = true;
1350-
}
1351-
13521346
blockUndo.vVoidedCertUndo.back().voidedOuts.push_back(CTxInUndo(coins->vout.at(pos)));
13531347
coins->Spend(pos);
13541348
if (coins->vout.size() == 0)
@@ -1427,42 +1421,47 @@ bool CCoinsViewCache::RevertSidechainEvents(const CBlockUndo& blockUndo, int hei
14271421

14281422
CSidechain scInfo;
14291423
assert(GetSidechain(voidedCertUndo.voidedCertScId, scInfo));
1430-
const uint256& coinHash = scInfo.lastCertificateHash;
14311424

1432-
if(coinHash.IsNull())
1433-
{
1434-
fClean = fClean && error("%s: malformed undo data, missing voided certificate hash ", __func__);
1435-
return fClean;
1436-
}
1437-
LogPrint("sc", "%s():%d - reverting voiding of bwt for certificate [%s]\n", __func__, __LINE__, coinHash.ToString());
14381425

1439-
CCoinsModifier coins = this->ModifyCoins(coinHash);
1440-
const std::vector<CTxInUndo>& voidedOuts = voidedCertUndo.voidedOuts;
1441-
for (size_t idx = voidedOuts.size(); idx-- > 0;)
1426+
if (scInfo.lastEpochReferencedByCertificate != CScCertificate::EPOCH_NULL)
14421427
{
1443-
if (voidedOuts.at(idx).nHeight != 0)
1428+
const uint256& coinHash = scInfo.lastCertificateHash;
1429+
1430+
if(coinHash.IsNull())
14441431
{
1445-
coins->fCoinBase = voidedOuts.at(idx).fCoinBase;
1446-
coins->nHeight = voidedOuts.at(idx).nHeight;
1447-
coins->nVersion = voidedOuts.at(idx).nVersion;
1448-
coins->nFirstBwtPos = voidedOuts.at(idx).nFirstBwtPos;
1449-
coins->nBwtMaturityHeight = voidedOuts.at(idx).nBwtMaturityHeight;
1450-
} else
1432+
fClean = fClean && error("%s: malformed undo data, missing voided certificate hash ", __func__);
1433+
return fClean;
1434+
}
1435+
LogPrint("sc", "%s():%d - reverting voiding of bwt for certificate [%s]\n", __func__, __LINE__, coinHash.ToString());
1436+
1437+
CCoinsModifier coins = this->ModifyCoins(coinHash);
1438+
const std::vector<CTxInUndo>& voidedOuts = voidedCertUndo.voidedOuts;
1439+
for (size_t idx = voidedOuts.size(); idx-- > 0;)
14511440
{
1452-
if (coins->IsPruned())
1453-
fClean = fClean && error("%s: undo data adding output to missing transaction", __func__);
1441+
if (voidedOuts.at(idx).nHeight != 0)
1442+
{
1443+
coins->fCoinBase = voidedOuts.at(idx).fCoinBase;
1444+
coins->nHeight = voidedOuts.at(idx).nHeight;
1445+
coins->nVersion = voidedOuts.at(idx).nVersion;
1446+
coins->nFirstBwtPos = voidedOuts.at(idx).nFirstBwtPos;
1447+
coins->nBwtMaturityHeight = voidedOuts.at(idx).nBwtMaturityHeight;
1448+
} else
1449+
{
1450+
if (coins->IsPruned())
1451+
fClean = fClean && error("%s: undo data adding output to missing transaction", __func__);
1452+
}
1453+
1454+
if(coins->IsAvailable(coins->nFirstBwtPos + idx))
1455+
fClean = fClean && error("%s: undo data overwriting existing output", __func__);
1456+
if (coins->vout.size() < (coins->nFirstBwtPos + idx+1))
1457+
coins->vout.resize(coins->nFirstBwtPos + idx+1);
1458+
coins->vout.at(coins->nFirstBwtPos + idx) = voidedOuts.at(idx).txout;
14541459
}
1455-
1456-
if(coins->IsAvailable(coins->nFirstBwtPos + idx))
1457-
fClean = fClean && error("%s: undo data overwriting existing output", __func__);
1458-
if (coins->vout.size() < (coins->nFirstBwtPos + idx+1))
1459-
coins->vout.resize(coins->nFirstBwtPos + idx+1);
1460-
coins->vout.at(coins->nFirstBwtPos + idx) = voidedOuts.at(idx).txout;
1460+
1461+
if(pVoidedCertsList != nullptr)
1462+
pVoidedCertsList->push_back(coinHash);
14611463
}
14621464

1463-
if(pVoidedCertsList != nullptr)
1464-
pVoidedCertsList->push_back(coinHash);
1465-
14661465
if (!fClean) return false;
14671466

14681467
recreatedScEvent.ceasingScs.insert(voidedCertUndo.voidedCertScId);

src/gtest/test_sidechain_events.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -744,7 +744,7 @@ TEST_F(SidechainsEventsTestSuite, RestoreNoBwtCeasedCoins) {
744744
for (unsigned int pos = 0; pos < cert.GetVout().size(); ++pos) {
745745
EXPECT_TRUE(rebuiltCoin.vout[pos] == originalCoins.vout[pos]);
746746
}
747-
EXPECT_FALSE(view->HaveSidechainEvents(minimalCeaseHeight));
747+
EXPECT_TRUE(view->HaveSidechainEvents(minimalCeaseHeight));
748748
}
749749

750750
TEST_F(SidechainsEventsTestSuite, RestoreEmptyCertCeasedCoins) {
@@ -789,7 +789,7 @@ TEST_F(SidechainsEventsTestSuite, RestoreEmptyCertCeasedCoins) {
789789
//checks
790790
EXPECT_FALSE(view->HaveCoins(cert.GetHash()));
791791

792-
EXPECT_FALSE(view->HaveSidechainEvents(minimalCeaseHeight));
792+
EXPECT_TRUE(view->HaveSidechainEvents(minimalCeaseHeight));
793793
}
794794
///////////////////////////////////////////////////////////////////////////////
795795
//////////////////////////////// UndoCeasingScs ///////////////////////////////

0 commit comments

Comments
 (0)