diff --git a/CHANGELOG.md b/CHANGELOG.md index 007a68e42f..111f5293e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,10 @@ incremented for features. * lang: Add `programdata_address: Option` field to `Program` account. Will be populated if account is a program owned by the upgradable bpf loader ([#1125](https://github.com/project-serum/anchor/pull/1125)) * lang,ts,ci,cli,docs: update solana toolchain to version 1.8.5([#1133](https://github.com/project-serum/anchor/pull/1133)) +### Breaking + +* lang, ts: Change error enum name and message for 'wrong program ownership' validation macro ([#1154](https://github.com/project-serum/anchor/pull/1154)). + ## [0.19.0] - 2021-12-08 ### Fixes diff --git a/lang/src/accounts/account.rs b/lang/src/accounts/account.rs index ec7af01501..f182d2e401 100644 --- a/lang/src/accounts/account.rs +++ b/lang/src/accounts/account.rs @@ -38,7 +38,7 @@ impl<'a, T: AccountSerialize + AccountDeserialize + Owner + Clone> Account<'a, T return Err(ErrorCode::AccountNotInitialized.into()); } if info.owner != &T::owner() { - return Err(ErrorCode::AccountNotProgramOwned.into()); + return Err(ErrorCode::AccountOwnedByWrongProgram.into()); } let mut data: &[u8] = &info.try_borrow_data()?; Ok(Account::new(info.clone(), T::try_deserialize(&mut data)?)) @@ -53,7 +53,7 @@ impl<'a, T: AccountSerialize + AccountDeserialize + Owner + Clone> Account<'a, T return Err(ErrorCode::AccountNotInitialized.into()); } if info.owner != &T::owner() { - return Err(ErrorCode::AccountNotProgramOwned.into()); + return Err(ErrorCode::AccountOwnedByWrongProgram.into()); } let mut data: &[u8] = &info.try_borrow_data()?; Ok(Account::new( diff --git a/lang/src/accounts/loader.rs b/lang/src/accounts/loader.rs index b8b38bc12a..6a3cbb5227 100644 --- a/lang/src/accounts/loader.rs +++ b/lang/src/accounts/loader.rs @@ -59,7 +59,7 @@ impl<'info, T: ZeroCopy> Loader<'info, T> { acc_info: &AccountInfo<'info>, ) -> Result, ProgramError> { if acc_info.owner != program_id { - return Err(ErrorCode::AccountNotProgramOwned.into()); + return Err(ErrorCode::AccountOwnedByWrongProgram.into()); } let data: &[u8] = &acc_info.try_borrow_data()?; // Discriminator must match. @@ -79,7 +79,7 @@ impl<'info, T: ZeroCopy> Loader<'info, T> { acc_info: &AccountInfo<'info>, ) -> Result, ProgramError> { if acc_info.owner != program_id { - return Err(ErrorCode::AccountNotProgramOwned.into()); + return Err(ErrorCode::AccountOwnedByWrongProgram.into()); } Ok(Loader::new(acc_info.clone())) } diff --git a/lang/src/accounts/loader_account.rs b/lang/src/accounts/loader_account.rs index 1b78b35ef4..effb18c167 100644 --- a/lang/src/accounts/loader_account.rs +++ b/lang/src/accounts/loader_account.rs @@ -55,7 +55,7 @@ impl<'info, T: ZeroCopy + Owner> AccountLoader<'info, T> { acc_info: &AccountInfo<'info>, ) -> Result, ProgramError> { if acc_info.owner != &T::owner() { - return Err(ErrorCode::AccountNotProgramOwned.into()); + return Err(ErrorCode::AccountOwnedByWrongProgram.into()); } let data: &[u8] = &acc_info.try_borrow_data()?; // Discriminator must match. @@ -74,7 +74,7 @@ impl<'info, T: ZeroCopy + Owner> AccountLoader<'info, T> { acc_info: &AccountInfo<'info>, ) -> Result, ProgramError> { if acc_info.owner != &T::owner() { - return Err(ErrorCode::AccountNotProgramOwned.into()); + return Err(ErrorCode::AccountOwnedByWrongProgram.into()); } Ok(AccountLoader::new(acc_info.clone())) } diff --git a/lang/src/accounts/program_account.rs b/lang/src/accounts/program_account.rs index a124e3e53a..b6733e51fc 100644 --- a/lang/src/accounts/program_account.rs +++ b/lang/src/accounts/program_account.rs @@ -41,7 +41,7 @@ impl<'a, T: AccountSerialize + AccountDeserialize + Clone> ProgramAccount<'a, T> info: &AccountInfo<'a>, ) -> Result, ProgramError> { if info.owner != program_id { - return Err(ErrorCode::AccountNotProgramOwned.into()); + return Err(ErrorCode::AccountOwnedByWrongProgram.into()); } let mut data: &[u8] = &info.try_borrow_data()?; Ok(ProgramAccount::new( @@ -59,7 +59,7 @@ impl<'a, T: AccountSerialize + AccountDeserialize + Clone> ProgramAccount<'a, T> info: &AccountInfo<'a>, ) -> Result, ProgramError> { if info.owner != program_id { - return Err(ErrorCode::AccountNotProgramOwned.into()); + return Err(ErrorCode::AccountOwnedByWrongProgram.into()); } let mut data: &[u8] = &info.try_borrow_data()?; Ok(ProgramAccount::new( diff --git a/lang/src/accounts/state.rs b/lang/src/accounts/state.rs index 1c1f744578..628953976e 100644 --- a/lang/src/accounts/state.rs +++ b/lang/src/accounts/state.rs @@ -43,7 +43,7 @@ impl<'a, T: AccountSerialize + AccountDeserialize + Clone> ProgramState<'a, T> { info: &AccountInfo<'a>, ) -> Result, ProgramError> { if info.owner != program_id { - return Err(ErrorCode::AccountNotProgramOwned.into()); + return Err(ErrorCode::AccountOwnedByWrongProgram.into()); } if info.key != &Self::address(program_id) { solana_program::msg!("Invalid state address"); diff --git a/lang/src/error.rs b/lang/src/error.rs index 3f895736fb..97b536ef23 100644 --- a/lang/src/error.rs +++ b/lang/src/error.rs @@ -77,8 +77,8 @@ pub enum ErrorCode { AccountNotEnoughKeys, #[msg("The given account is not mutable")] AccountNotMutable, - #[msg("The given account is not owned by the executing program")] - AccountNotProgramOwned, + #[msg("The given account is owned by a different program than expected")] + AccountOwnedByWrongProgram, #[msg("Program ID was not as expected")] InvalidProgramId, #[msg("Program account is not executable")] diff --git a/tests/bpf-upgradeable-state/tests/bpf-upgradable-state.ts b/tests/bpf-upgradeable-state/tests/bpf-upgradable-state.ts index 5ac8199055..11d142318a 100644 --- a/tests/bpf-upgradeable-state/tests/bpf-upgradable-state.ts +++ b/tests/bpf-upgradeable-state/tests/bpf-upgradable-state.ts @@ -122,7 +122,7 @@ describe("bpf_upgradeable_state", () => { assert.equal(err.code, 3007); assert.equal( err.msg, - "The given account is not owned by the executing program" + "The given account is owned by a different program than expected" ); } }); diff --git a/ts/src/error.ts b/ts/src/error.ts index 1ed4eca426..1a1d8fff57 100644 --- a/ts/src/error.ts +++ b/ts/src/error.ts @@ -91,7 +91,7 @@ const LangErrorCode = { AccountDidNotSerialize: 3004, AccountNotEnoughKeys: 3005, AccountNotMutable: 3006, - AccountNotProgramOwned: 3007, + AccountOwnedByWrongProgram: 3007, InvalidProgramId: 3008, InvalidProgramExecutable: 3009, AccountNotSigner: 3010, @@ -189,8 +189,8 @@ const LangErrorMessage = new Map([ ], [LangErrorCode.AccountNotMutable, "The given account is not mutable"], [ - LangErrorCode.AccountNotProgramOwned, - "The given account is not owned by the executing program", + LangErrorCode.AccountOwnedByWrongProgram, + "The given account is owned by a different program than expected", ], [LangErrorCode.InvalidProgramId, "Program ID was not as expected"], [LangErrorCode.InvalidProgramExecutable, "Program account is not executable"],