This is my understanding how it should work for 1 commitment and 1 leaf:
update_commitment(commitment, newValue-oldValue, index)
So those are 2 32byte and 1 byte values. Total 65bytes. Rust can easily process that.
Then rust takes the commitment (which is a banderwagon element) and we do new_commitment = commitment + (newValue-oldValue)*CRS[index]
Where newValue
and oldValue
are Fr
s.
Reg updating multiple values in one commitment:
It can be done for multiple values in the same commitment, just we would need to pass multiple Bytes32 (commitment, (newValue_1-oldValue_1), (newValue_2-oldValue_2) ...., index_1, index_2...)
Rust part:
(newValue_i-oldValue_i)
parametersindex_i