mirror of
https://github.com/monero-project/monero.git
synced 2025-12-12 00:02:05 -05:00
store outPk/8 in the tx for speed
It avoids dividing by 8 when deserializing a tx, which is a slow operation, and multiplies by 8 when verifying and extracing the amount, which is much faster as well as less frequent
This commit is contained in:
parent
a345060ace
commit
4c94cfecfc
5 changed files with 31 additions and 7 deletions
|
|
@ -1205,7 +1205,7 @@ namespace rct {
|
|||
rv.p.bulletproofs_plus.clear();
|
||||
if (bulletproof_or_plus)
|
||||
{
|
||||
const bool plus = rv.type == RCTTypeBulletproofPlus;
|
||||
const bool plus = is_rct_bulletproof_plus(rv.type);
|
||||
size_t n_amounts = outamounts.size();
|
||||
size_t amounts_proved = 0;
|
||||
if (rct_config.range_proof_type == RangeProofPaddedBulletproof)
|
||||
|
|
@ -1235,7 +1235,10 @@ namespace rct {
|
|||
}
|
||||
for (i = 0; i < outamounts.size(); ++i)
|
||||
{
|
||||
rv.outPk[i].mask = rct::scalarmult8(C[i]);
|
||||
if (plus)
|
||||
rv.outPk[i].mask = C[i];
|
||||
else
|
||||
rv.outPk[i].mask = rct::scalarmult8(C[i]);
|
||||
outSk[i].mask = masks[i];
|
||||
}
|
||||
}
|
||||
|
|
@ -1273,7 +1276,10 @@ namespace rct {
|
|||
}
|
||||
for (i = 0; i < batch_size; ++i)
|
||||
{
|
||||
rv.outPk[i + amounts_proved].mask = rct::scalarmult8(C[i]);
|
||||
if (plus)
|
||||
rv.outPk[i + amounts_proved].mask = C[i];
|
||||
else
|
||||
rv.outPk[i + amounts_proved].mask = rct::scalarmult8(C[i]);
|
||||
outSk[i + amounts_proved].mask = masks[i];
|
||||
}
|
||||
amounts_proved += batch_size;
|
||||
|
|
@ -1480,7 +1486,10 @@ namespace rct {
|
|||
|
||||
rct::keyV masks(rv.outPk.size());
|
||||
for (size_t i = 0; i < rv.outPk.size(); i++) {
|
||||
masks[i] = rv.outPk[i].mask;
|
||||
if (bulletproof_plus)
|
||||
masks[i] = rct::scalarmult8(rv.outPk[i].mask);
|
||||
else
|
||||
masks[i] = rv.outPk[i].mask;
|
||||
}
|
||||
key sumOutpks = addKeys(masks);
|
||||
DP(sumOutpks);
|
||||
|
|
@ -1640,6 +1649,8 @@ namespace rct {
|
|||
mask = ecdh_info.mask;
|
||||
key amount = ecdh_info.amount;
|
||||
key C = rv.outPk[i].mask;
|
||||
if (is_rct_bulletproof_plus(rv.type))
|
||||
C = scalarmult8(C);
|
||||
DP("C");
|
||||
DP(C);
|
||||
key Ctmp;
|
||||
|
|
@ -1671,6 +1682,8 @@ namespace rct {
|
|||
mask = ecdh_info.mask;
|
||||
key amount = ecdh_info.amount;
|
||||
key C = rv.outPk[i].mask;
|
||||
if (is_rct_bulletproof_plus(rv.type))
|
||||
C = scalarmult8(C);
|
||||
DP("C");
|
||||
DP(C);
|
||||
key Ctmp;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue