@@ -34,6 +34,7 @@ The minor version will be incremented upon a breaking change and the patch versi
- lang: Add `discriminator` argument to `#[account]` attribute ([#3149](https://github.com/coral-xyz/anchor/pull/3149)).
- lang: Add `discriminator` argument to `#[event]` attribute ([#3152](https://github.com/coral-xyz/anchor/pull/3152)).
- idl: Check ambiguous discriminators ([#3157](https://github.com/coral-xyz/anchor/pull/3157)).
+- idl: Disallow all zero account discriminators ([#3159](https://github.com/coral-xyz/anchor/pull/3159)).
### Fixes
@@ -317,5 +317,17 @@ fn verify(idl: &Idl) -> Result<()> {
check_discriminator_collision!(events);
check_discriminator_collision!(instructions);
+ // Disallow all zero account discriminators
+ if let Some(account) = idl
+ .accounts
+ .iter()
+ .find(|acc| acc.discriminator.iter().all(|b| *b == 0))
+ {
+ return Err(anyhow!(
+ "All zero account discriminators are not allowed (account: `{}`)",
+ account.name
+ ));
+ }
+
Ok(())
}
@@ -42,7 +42,7 @@ mod id;
///
/// **Examples:**
-/// - `discriminator = 0` (shortcut for `[0]`)
+/// - `discriminator = 1` (shortcut for `[1]`)
/// - `discriminator = [1, 2, 3, 4]`
/// - `discriminator = b"hi"`
/// - `discriminator = MY_DISC`
@@ -21,7 +21,7 @@ use syn::parse_macro_input;
@@ -116,7 +116,7 @@ pub fn interface(