rct: add a zeroCommit cache for common pre-rct case

This is called for every pre-rct output at blockchain sync time,
and a lot of them wil hit the cache, saving a scalarmult each.
This commit is contained in:
moneromooo-monero 2018-11-04 15:38:59 +00:00
parent 963d247154
commit 5d7c231604
No known key found for this signature in database
GPG key ID: 686F07454D6CEFC3
4 changed files with 211 additions and 0 deletions

View file

@ -1086,6 +1086,25 @@ TEST(ringct, zeroCommmit)
ASSERT_EQ(z, manual);
}
static rct::key uncachedZeroCommit(uint64_t amount)
{
const rct::key am = rct::d2h(amount);
const rct::key bH = rct::scalarmultH(am);
return rct::addKeys(rct::G, bH);
}
TEST(ringct, zeroCommitCache)
{
ASSERT_EQ(rct::zeroCommit(0), uncachedZeroCommit(0));
ASSERT_EQ(rct::zeroCommit(1), uncachedZeroCommit(1));
ASSERT_EQ(rct::zeroCommit(2), uncachedZeroCommit(2));
ASSERT_EQ(rct::zeroCommit(10), uncachedZeroCommit(10));
ASSERT_EQ(rct::zeroCommit(200), uncachedZeroCommit(200));
ASSERT_EQ(rct::zeroCommit(1000000000), uncachedZeroCommit(1000000000));
ASSERT_EQ(rct::zeroCommit(3000000000000), uncachedZeroCommit(3000000000000));
ASSERT_EQ(rct::zeroCommit(900000000000000), uncachedZeroCommit(900000000000000));
}
TEST(ringct, H)
{
ge_p3 p3;