lang: Use associated discriminator constants instead of hardcoding in #[account]
#3144
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.
Problem
The
#[account]
attribute generates uses hardcoded values for discriminators multiple times:anchor/lang/attribute/account/src/lib.rs
Lines 165 to 169 in 56af130
This expands to:
The discriminators were being hardcoded before, but getting the length dynamically (rather than hardcoding as 8) in #3101 made the problem more obvious.
Additionally, this makes overriding discriminators via argument e.g.
discriminator = DISC
ordiscriminator = &[1]
unreliable because appending.len()
to these expressions sometimes result in&usize
type which causes compile errors.Summary of changes
Use the associated discriminator constant instead of hardcoding the value. This is functionally idential as the same code now expands to:
Note: This PR is part of a greater effort explained in #3097.