uint256_mod_inv standard function with a hint #144
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
It would be awesome if we could get this method included in the standard library and whitelisted for usage in starknet since it uses a hint and immediately checks it with this part of the code:
Modular inversion is one of the essential elliptic curve computations. And here we have a nice trick to calculate it in the hint and check if after the hint.
For comparison to the EVM: EVM has a precompiled expmod link but implementing expmod in cairo and starknet is another story because of the current state of sequencers on starknet(expmod is computationally heavy computation(~500k steps in cairo for an exponent of 256-bit). And if it is computed in the hint, I currently can't think of any way to check if it is correctly computed in the hint since that would require something like
assert quotient*modulus + remainder = base^exponent
which is also very expensive for cairo and starknet.But at least having
uint256_mod_inv
makes senseThis change is