Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/contracts/QRaffle.h
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,7 @@ struct QRAFFLE : public ContractBase
uint64 entryAmount;
uint32 numberOfMembers;
uint32 winnerIndex;
uint32 numberOfDaoMembers;
sint32 returnCode;
};

Expand Down Expand Up @@ -425,6 +426,9 @@ struct QRAFFLE : public ContractBase
id charityAddress, feeAddress, QXMRIssuer;
uint64 epochRevenue, epochQXMRRevenue, qREAmount, totalBurnAmount, totalCharityAmount, totalShareholderAmount, totalRegisterAmount, totalFeeAmount, totalWinnerAmount, largestWinnerAmount;
uint32 numberOfRegisters, numberOfQuRaffleMembers, numberOfEntryAmountSubmitted, numberOfProposals, numberOfActiveTokenRaffle, numberOfEndedTokenRaffle;

// New state variables added at the end to avoid breaking existing state
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please remove this comment. it's nice for reviewing but we don't need it once the code is merged.

Array<uint32, QRAFFLE_MAX_EPOCH> daoMemberCount; // Number of DAO members (registers) at each epoch

struct registerInSystem_locals
{
Expand Down Expand Up @@ -1109,6 +1113,7 @@ struct QRAFFLE : public ContractBase
output.entryAmount = state.QuRaffles.get(input.epoch).entryAmount;
output.numberOfMembers = state.QuRaffles.get(input.epoch).numberOfMembers;
output.winnerIndex = state.QuRaffles.get(input.epoch).winnerIndex;
output.numberOfDaoMembers = state.daoMemberCount.get(input.epoch);
output.returnCode = QRAFFLE_SUCCESS;
}

Expand Down Expand Up @@ -1311,6 +1316,7 @@ struct QRAFFLE : public ContractBase
locals.qraffle.numberOfMembers = state.numberOfQuRaffleMembers;
locals.qraffle.winnerIndex = locals.winnerIndex;
state.QuRaffles.set(qpi.epoch(), locals.qraffle);
state.daoMemberCount.set(qpi.epoch(), state.numberOfRegisters); // Store DAO member count for this epoch

// Log QuRaffle completion with detailed information
locals.endEpochLog = QRAFFLEEndEpochLogger{
Expand Down
9 changes: 7 additions & 2 deletions test/contract_qraffle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -160,13 +160,15 @@ class QRaffleChecker : public QRAFFLE
}

void quRaffleWinnerChecker(uint16 epoch, const id& expectedWinner, uint64 expectedReceived,
uint64 expectedEntryAmount, uint32 expectedMembers, uint32 expectedWinnerIndex)
uint64 expectedEntryAmount, uint32 expectedMembers, uint32 expectedWinnerIndex,
uint32 expectedDaoMembers)
{
EXPECT_EQ(QuRaffles.get(epoch).epochWinner, expectedWinner);
EXPECT_EQ(QuRaffles.get(epoch).receivedAmount, expectedReceived);
EXPECT_EQ(QuRaffles.get(epoch).entryAmount, expectedEntryAmount);
EXPECT_EQ(QuRaffles.get(epoch).numberOfMembers, expectedMembers);
EXPECT_EQ(QuRaffles.get(epoch).winnerIndex, expectedWinnerIndex);
EXPECT_EQ(daoMemberCount.get(epoch), expectedDaoMembers);
}

uint64 getQuRaffleEntryAmount()
Expand Down Expand Up @@ -1053,6 +1055,8 @@ TEST(ContractQraffle, GetFunctions)
EXPECT_GT(endedQuRaffle.receivedAmount, 0);
EXPECT_EQ(endedQuRaffle.entryAmount, 10000000);
EXPECT_EQ(endedQuRaffle.numberOfMembers, memberCount);
EXPECT_GT(endedQuRaffle.numberOfDaoMembers, 0u); // NEW: Verify DAO members stored
EXPECT_EQ(endedQuRaffle.numberOfDaoMembers, qraffle.getState()->getNumberOfRegisters()); // NEW: Match current count

// Test with future epoch
auto futureQuRaffle = qraffle.getEndedQuRaffle(1);
Expand Down Expand Up @@ -1167,7 +1171,8 @@ TEST(ContractQraffle, EndEpoch)
auto quRaffle = qraffle.getEndedQuRaffle(0);
EXPECT_EQ(quRaffle.returnCode, QRAFFLE_SUCCESS);
qraffle.getState()->quRaffleWinnerChecker(0, quRaffle.epochWinner, quRaffle.receivedAmount,
quRaffle.entryAmount, quRaffle.numberOfMembers, quRaffle.winnerIndex);
quRaffle.entryAmount, quRaffle.numberOfMembers, quRaffle.winnerIndex,
quRaffle.numberOfDaoMembers);

qraffle.endEpoch();
// Check that token raffles were processed
Expand Down
Loading