mirror of
https://github.com/Xahau/xahaud.git
synced 2025-11-19 18:15:50 +00:00
Merge branch 'dev' into ExtendedHookState
This commit is contained in:
@@ -637,43 +637,55 @@ int64_t hook(uint32_t r)
|
|||||||
{
|
{
|
||||||
previous_member[0] = 'V';
|
previous_member[0] = 'V';
|
||||||
|
|
||||||
for (int i = 1; GUARD(32), i < 32; ++i)
|
for (int tbl = 1; GUARD(2), tbl <= 2; ++tbl)
|
||||||
{
|
{
|
||||||
previous_member[1] = i < 2 ? 'R' : i < 12 ? 'H' : 'S';
|
for (int i = 0; GUARD(66), i < 32; ++i)
|
||||||
previous_member[2] =
|
|
||||||
i == 0 ? 'R' :
|
|
||||||
i == 1 ? 'D' :
|
|
||||||
i < 12 ? i - 2 :
|
|
||||||
i - 12;
|
|
||||||
|
|
||||||
uint8_t vote_key[32];
|
|
||||||
if (state(SBUF(vote_key), SBUF(previous_member)) == 32)
|
|
||||||
{
|
{
|
||||||
uint8_t vote_count = 0;
|
previous_member[1] = i < 2 ? 'R' : i < 12 ? 'H' : 'S';
|
||||||
|
previous_member[2] =
|
||||||
|
i == 0 ? 'R' :
|
||||||
|
i == 1 ? 'D' :
|
||||||
|
i < 12 ? i - 2 :
|
||||||
|
i - 12;
|
||||||
|
previous_member[3] = tbl;
|
||||||
|
|
||||||
// find and decrement the vote counter
|
uint8_t vote_key[32] = {};
|
||||||
vote_key[0] = 'C';
|
uint8_t ts =
|
||||||
vote_key[1] = previous_member[1];
|
previous_member[1] == 'H' ? 32 : // hook topics are a 32 byte hook hash
|
||||||
vote_key[2] = previous_member[2];
|
previous_member[1] == 'S' ? 20 : // account topics are a 20 byte account ID
|
||||||
if (state(&vote_count, 1, SBUF(vote_key)) == 1)
|
8; // reward topics are an 8 byte le xfl
|
||||||
|
|
||||||
|
uint8_t padding = 32 - ts;
|
||||||
|
|
||||||
|
if (state(vote_key + padding, ts, SBUF(previous_member)) == ts)
|
||||||
{
|
{
|
||||||
// if we're down to 1 vote then delete state
|
uint8_t vote_count = 0;
|
||||||
if (vote_count <= 1)
|
|
||||||
{
|
|
||||||
ASSERT(state_set(0,0, SBUF(vote_key)) == 0);
|
|
||||||
trace_num(SBUF("Decrement vote count deleted"), vote_count);
|
|
||||||
}
|
|
||||||
else // otherwise decrement
|
|
||||||
{
|
|
||||||
vote_count--;
|
|
||||||
ASSERT(state_set(&vote_count, 1, SBUF(vote_key)) == 1);
|
|
||||||
trace_num(SBUF("Decrement vote count to"), vote_count);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// delete the vote entry
|
// find and decrement the vote counter
|
||||||
ASSERT(state_set(0,0, SBUF(previous_member)) == 0);
|
vote_key[0] = 'C';
|
||||||
trace(SBUF("Vote entry deleted"), vote_key, 32, 1);
|
vote_key[1] = previous_member[1];
|
||||||
|
vote_key[2] = previous_member[2];
|
||||||
|
vote_key[3] = tbl;
|
||||||
|
if (state(&vote_count, 1, SBUF(vote_key)) == 1)
|
||||||
|
{
|
||||||
|
// if we're down to 1 vote then delete state
|
||||||
|
if (vote_count <= 1)
|
||||||
|
{
|
||||||
|
ASSERT(state_set(0,0, SBUF(vote_key)) == 0);
|
||||||
|
trace_num(SBUF("Decrement vote count deleted"), vote_count);
|
||||||
|
}
|
||||||
|
else // otherwise decrement
|
||||||
|
{
|
||||||
|
vote_count--;
|
||||||
|
ASSERT(state_set(&vote_count, 1, SBUF(vote_key)) == 1);
|
||||||
|
trace_num(SBUF("Decrement vote count to"), vote_count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete the vote entry
|
||||||
|
ASSERT(state_set(0,0, SBUF(previous_member)) == 0);
|
||||||
|
trace(SBUF("Vote entry deleted"), vote_key, 32, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -923,6 +923,14 @@ struct XahauGenesis_test : public beast::unit_test::suite
|
|||||||
beast::zero));
|
beast::zero));
|
||||||
if (!shouldFail)
|
if (!shouldFail)
|
||||||
{
|
{
|
||||||
|
// Once the user is removed from the table their votes are
|
||||||
|
// also removed
|
||||||
|
if (topic1 == 'S' && actioned &&
|
||||||
|
strHex(vecFromAcc(acc)) == strHex(old_data))
|
||||||
|
{
|
||||||
|
BEAST_EXPECT(!entry);
|
||||||
|
return;
|
||||||
|
}
|
||||||
BEAST_REQUIRE(!!entry);
|
BEAST_REQUIRE(!!entry);
|
||||||
auto lgr_data = entry->getFieldVL(sfHookStateData);
|
auto lgr_data = entry->getFieldVL(sfHookStateData);
|
||||||
BEAST_EXPECT(lgr_data.size() == vote_data.size());
|
BEAST_EXPECT(lgr_data.size() == vote_data.size());
|
||||||
|
|||||||
Reference in New Issue
Block a user