Skip to content

Commit 38223c1

Browse files
authored
Improve errors (#293)
1 parent 41a529e commit 38223c1

File tree

8 files changed

+26
-22
lines changed

8 files changed

+26
-22
lines changed

program/rust/src/deserialize.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ pub fn load_checked<'a, T: PythAccount>(
8989
account_header.magic_number == PC_MAGIC
9090
&& account_header.version == version
9191
&& account_header.account_type == T::ACCOUNT_TYPE,
92-
ProgramError::InvalidArgument,
92+
OracleError::InvalidAccountHeader.into(),
9393
)?;
9494
}
9595

program/rust/src/error.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ pub enum OracleError {
4040
InvalidUpgradeAuthority = 614,
4141
#[error("FailedPdaVerification")]
4242
InvalidPda = 615,
43+
#[error("InvalidAccountHeader")]
44+
InvalidAccountHeader = 616,
45+
#[error("InvalidNumberOfAccounts")]
46+
InvalidNumberOfAccounts = 617,
4347
}
4448

4549
impl From<OracleError> for ProgramError {

program/rust/src/rust_oracle.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ pub fn resize_price_account(
9191
) -> ProgramResult {
9292
let [funding_account_info, price_account_info, system_program] = match accounts {
9393
[x, y, z] => Ok([x, y, z]),
94-
_ => Err(ProgramError::InvalidArgument),
94+
_ => Err(OracleError::InvalidNumberOfAccounts),
9595
}?;
9696

9797
check_valid_funding_account(funding_account_info)?;
@@ -148,7 +148,7 @@ pub fn init_mapping(
148148
) -> ProgramResult {
149149
let [funding_account, fresh_mapping_account] = match accounts {
150150
[x, y] => Ok([x, y]),
151-
_ => Err(ProgramError::InvalidArgument),
151+
_ => Err(OracleError::InvalidNumberOfAccounts),
152152
}?;
153153

154154
check_valid_funding_account(funding_account)?;
@@ -168,7 +168,7 @@ pub fn add_mapping(
168168
) -> ProgramResult {
169169
let [funding_account, cur_mapping, next_mapping] = match accounts {
170170
[x, y, z] => Ok([x, y, z]),
171-
_ => Err(ProgramError::InvalidArgument),
171+
_ => Err(OracleError::InvalidNumberOfAccounts),
172172
}?;
173173

174174
check_valid_funding_account(funding_account)?;
@@ -203,7 +203,7 @@ pub fn upd_price(
203203
let [funding_account, price_account, clock_account] = match accounts {
204204
[x, y, z] => Ok([x, y, z]),
205205
[x, y, _, z] => Ok([x, y, z]),
206-
_ => Err(ProgramError::InvalidArgument),
206+
_ => Err(OracleError::InvalidNumberOfAccounts),
207207
}?;
208208

209209
check_valid_funding_account(funding_account)?;
@@ -319,7 +319,7 @@ pub fn add_price(
319319

320320
let [funding_account, product_account, price_account] = match accounts {
321321
[x, y, z] => Ok([x, y, z]),
322-
_ => Err(ProgramError::InvalidArgument),
322+
_ => Err(OracleError::InvalidNumberOfAccounts),
323323
}?;
324324

325325
check_valid_funding_account(funding_account)?;
@@ -354,7 +354,7 @@ pub fn del_price(
354354
) -> ProgramResult {
355355
let [funding_account, product_account, price_account] = match accounts {
356356
[w, x, y] => Ok([w, x, y]),
357-
_ => Err(ProgramError::InvalidArgument),
357+
_ => Err(OracleError::InvalidNumberOfAccounts),
358358
}?;
359359

360360
check_valid_funding_account(funding_account)?;
@@ -399,7 +399,7 @@ pub fn init_price(
399399

400400
let [funding_account, price_account] = match accounts {
401401
[x, y] => Ok([x, y]),
402-
_ => Err(ProgramError::InvalidArgument),
402+
_ => Err(OracleError::InvalidNumberOfAccounts),
403403
}?;
404404

405405
check_valid_funding_account(funding_account)?;
@@ -469,7 +469,7 @@ pub fn add_publisher(
469469

470470
let [funding_account, price_account] = match accounts {
471471
[x, y] => Ok([x, y]),
472-
_ => Err(ProgramError::InvalidArgument),
472+
_ => Err(OracleError::InvalidNumberOfAccounts),
473473
}?;
474474

475475
check_valid_funding_account(funding_account)?;
@@ -519,7 +519,7 @@ pub fn del_publisher(
519519

520520
let [funding_account, price_account] = match accounts {
521521
[x, y] => Ok([x, y]),
522-
_ => Err(ProgramError::InvalidArgument),
522+
_ => Err(OracleError::InvalidNumberOfAccounts),
523523
}?;
524524

525525
check_valid_funding_account(funding_account)?;
@@ -555,7 +555,7 @@ pub fn add_product(
555555
) -> ProgramResult {
556556
let [funding_account, tail_mapping_account, new_product_account] = match accounts {
557557
[x, y, z] => Ok([x, y, z]),
558-
_ => Err(ProgramError::InvalidArgument),
558+
_ => Err(OracleError::InvalidNumberOfAccounts),
559559
}?;
560560

561561
check_valid_funding_account(funding_account)?;
@@ -592,7 +592,7 @@ pub fn upd_product(
592592
) -> ProgramResult {
593593
let [funding_account, product_account] = match accounts {
594594
[x, y] => Ok([x, y]),
595-
_ => Err(ProgramError::InvalidArgument),
595+
_ => Err(OracleError::InvalidNumberOfAccounts),
596596
}?;
597597

598598
check_valid_funding_account(funding_account)?;
@@ -657,7 +657,7 @@ pub fn set_min_pub(
657657

658658
let [funding_account, price_account] = match accounts {
659659
[x, y] => Ok([x, y]),
660-
_ => Err(ProgramError::InvalidArgument),
660+
_ => Err(OracleError::InvalidNumberOfAccounts),
661661
}?;
662662

663663
check_valid_funding_account(funding_account)?;
@@ -683,7 +683,7 @@ pub fn del_product(
683683
) -> ProgramResult {
684684
let [funding_account, mapping_account, product_account] = match accounts {
685685
[w, x, y] => Ok([w, x, y]),
686-
_ => Err(ProgramError::InvalidArgument),
686+
_ => Err(OracleError::InvalidNumberOfAccounts),
687687
}?;
688688

689689
check_valid_funding_account(funding_account)?;
@@ -751,7 +751,7 @@ pub fn upd_permissions(
751751
let [funding_account, program_account, programdata_account, permissions_account, system_program] =
752752
match accounts {
753753
[v, w, x, y, z] => Ok([v, w, x, y, z]),
754-
_ => Err(ProgramError::InvalidArgument),
754+
_ => Err(OracleError::InvalidNumberOfAccounts),
755755
}?;
756756

757757
let cmd_args = load::<UpdPermissionsArgs>(instruction_data)?;

program/rust/src/tests/test_add_mapping.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use crate::deserialize::{
99
load_account_as_mut,
1010
load_checked,
1111
};
12+
use crate::error::OracleError;
1213
use crate::instruction::{
1314
CommandHeader,
1415
OracleCommand,
@@ -98,7 +99,7 @@ fn test_add_mapping() {
9899
],
99100
instruction_data
100101
),
101-
Err(ProgramError::InvalidArgument)
102+
Err(OracleError::InvalidAccountHeader.into())
102103
);
103104

104105
{

program/rust/src/tests/test_add_price.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ fn test_add_price() {
111111
&[funding_account.clone(), product_account.clone()],
112112
instruction_data_add_price
113113
),
114-
Err(ProgramError::InvalidArgument)
114+
Err(OracleError::InvalidNumberOfAccounts.into())
115115
);
116116

117117
// Price account is already initialized
@@ -191,6 +191,6 @@ fn test_add_price() {
191191
],
192192
instruction_data_add_price
193193
),
194-
Err(ProgramError::InvalidArgument)
194+
Err(OracleError::InvalidAccountHeader.into())
195195
);
196196
}

program/rust/src/tests/test_add_publisher.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ fn test_add_publisher() {
9595
&[funding_account.clone(), price_account.clone(),],
9696
instruction_data
9797
),
98-
Err(ProgramError::InvalidArgument)
98+
Err(OracleError::InvalidAccountHeader.into())
9999
);
100100

101101
initialize_pyth_account_checked::<PriceAccount>(&price_account, PC_VERSION).unwrap();

program/rust/src/tests/test_init_mapping.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ use crate::processor::process_instruction;
1414
use crate::tests::test_utils::AccountSetup;
1515
use crate::utils::clear_account;
1616
use bytemuck::bytes_of;
17-
use solana_program::program_error::ProgramError;
1817
use solana_program::pubkey::Pubkey;
1918
use std::cell::RefCell;
2019
use std::rc::Rc;
@@ -62,7 +61,7 @@ fn test_init_mapping() {
6261

6362
assert_eq!(
6463
process_instruction(&program_id, &[funding_account.clone()], instruction_data),
65-
Err(ProgramError::InvalidArgument)
64+
Err(OracleError::InvalidNumberOfAccounts.into())
6665
);
6766

6867
funding_account.is_signer = false;

program/rust/src/tests/test_init_price.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ fn test_init_price() {
5050
&[funding_account.clone(), price_account.clone()],
5151
instruction_data
5252
),
53-
Err(ProgramError::InvalidArgument)
53+
Err(OracleError::InvalidAccountHeader.into())
5454
);
5555

5656
initialize_pyth_account_checked::<PriceAccount>(&price_account, PC_VERSION).unwrap();

0 commit comments

Comments
 (0)