Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Switch default bits of hiding to 52 #834

Merged
merged 3 commits into from
Mar 17, 2020

Conversation

stevenroose
Copy link
Member

Replaces #793 and is basically that MR but rebased. (I can't rebase on Greg's branch.)

@@ -178,8 +178,11 @@ bool GenerateRangeproof(std::vector<unsigned char>& rangeproof, const std::vecto
memcpy(asset_message+32, asset_blindptrs[asset_blindptrs.size()-1], 32);

// Sign rangeproof
int ct_exponent = std::min(std::max((int)gArgs.GetArg("-ct_exponent", 0), -1), 18);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

heh concept ACK

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's just taking the arguments out of the giant line. Nothing else changed. I don't fully understand the strange min max thing there. I suppose it's to get the values between -1 and 18.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ct_bits was also previously limited via this min/max construction. It was changed to just 52, I don't see why ct_exponent in this line could not be changed to just 0. The min/max limit for ct_bits was removed in #793 without any explanation, was it deemed useless ?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I ask because I'll need to adjust my lib accordingly, but I hesitate to remove the limitations without fully understanding the consequences. Changing the number of bits result in the change in the size of the proof, and it looks like this only affects the tx size and therefore fee estimation. Setting ct_bits outside sane range would mean the blinding will just not work and fail with error, is this change (removing min/max limitation) added to help detect incorrect settings rather than work with limited settings ? If this is the logic behind this change, then ct_exponent should not be min/max restricted, too, and then secp256k1_rangeproof_sign_impl will just return 0 if incorrect exp was supplied

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know if your reference to #793 was a typo, but that PR was superseded with this one and it just sets the default number of bits from 38 to 52. We did this because the 38 bits covered only up to 10^-3 BTC or something. Because some assets are issuing assets using the BTC amounts instead of satoshi, we did this to increase the default blinding about up to 45*10^6 BTC.

It's true that it will about double the tx size. But given that we're also reducing the tx fee rate for Liquid to 0.1 sat/byte, that more than compensates for that increase in tx size.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah you're probably right about the min(max( construction of ct_exponent. Any wrong number will result in a failure on the secp side. It might be worth it to remove that construction, yes.

Copy link
Contributor

@dgpv dgpv Mar 23, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

reference to #793 was not a typo, the change of the value of ct_bits was not that my question was about. I asked why the std::min(std::max(... is still applied to ct_exponent, but not to ct_bits anymore. If there was certain logic behind removing this for ct_bits, the same logic should apply to ct_exponent. I don't see why this min/max thing is needed for either of these two parameters, but I might be missing something, and it would be good to know the reasoning why min/max was there in the first place. I have this code ported to python, and I will need to sync the code, but I would like the code to be consistent, and having different approaches to ct_exponent and ct_bits does not seem consistent to me.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed that construction in followup PR. You were right that it was not needed in either position and it's actually a bit annoying.

@stevenroose stevenroose changed the title Switch default bits of hiding to 51 Switch default bits of hiding to 52 Mar 16, 2020
@apoelstra
Copy link
Member

utACK

Copy link
Contributor

@jonasnick jonasnick left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Didn't check DEFAULT_RANGEPROOF_SIZE, otherwise ACK mod nit.

src/test/blind_tests.cpp Outdated Show resolved Hide resolved
src/blind.cpp Show resolved Hide resolved
@jonasnick
Copy link
Contributor

Note that we should urge users to update. With this change and the default minfee/fallbackfee changes, wallet fingerprinting is trivial.

@stevenroose
Copy link
Member Author

Yeah I'm sure Allen is taking care of that. Plus we're coordinating with Green to update at the same time.

@stevenroose
Copy link
Member Author

stevenroose commented Mar 25, 2020 via email

@dgpv
Copy link
Contributor

dgpv commented Mar 25, 2020

I removed it because I got an answer (for a related question) from @instagibbs here: ElementsProject/elementsproject.github.io#127 (comment)

@dgpv
Copy link
Contributor

dgpv commented Mar 25, 2020

Thanks for an explanation of the reasoning behind the decision!

stevenroose added a commit that referenced this pull request Mar 25, 2020
…ment

edfa40e Remove the min(max( construction for the ct_exponent argument (Steven Roose)

Pull request description:

  As per @dgpv's suggestion here: #834 (comment)

  @dgpv could you review?

Tree-SHA512: 6c91a0a86a593f22ff42fb617aa96aeb97e2e5225e2b5b6980aa470f45ee613dab53de49dbbae20aecf7a4bf21cc005839be770917d55cfb2c9afd821c2d0231
greenaddress pushed a commit to Blockstream/gdk that referenced this pull request Mar 27, 2020
In line with elements update

ElementsProject/elements#834

Also removed the min/max construct, again in line with elements
stevenroose pushed a commit that referenced this pull request Mar 17, 2021
Hadta bump the fee test in feature_confidential_transactions.py since our default
rangeproofs are now bigger.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants