1

In the code, there is this:

enum RangeProofType { RangeProofBorromean, RangeProofBulletproof, RangeProofMultiOutputBulletproof, RangeProofPaddedBulletproof };

[source]

I believe:

  • RangeProofBorromean is to prove a value is within a range, using Borromean.

  • RangeProofBulletproof is to prove one value is within a range

  • RangeProofMultiOutputBulletproof is to prove multiple values are within a range

  • RangeProofPaddedBulletproof is to prove multiple values are within a range, but the number of values needs to be padded.

My confusion is why are all of these distinctions needed? If I call bulletproofProve([]values) Proof and then just pad inside of the prove function if I need to, then this would account for all possibilities, unless I'm missing something

jtgrassie
  • 19,601
  • 4
  • 17
  • 54
WeCanBeFriends
  • 670
  • 3
  • 7

1 Answers1

1

They all essentially do the same thing, prove a value falls within a range, but have speed/optimization differences. The latter two allow aggregating multiple proofs into a single proof for example. Again for optimization purposes.

My confusion is why are all of these distinctions needed?

Every time a new type of signature is added to Monero (or an existing type modified/improved), a new type is obviously created and the old ones remain so that past transactions (using those older types) can still be validated. If they were removed, you wouldn't be able to verify the entire blockchain all the way back to the first block.

jtgrassie
  • 19,601
  • 4
  • 17
  • 54