@@ -56,19 +56,22 @@ pub fn check_valid_funding_account(account: &AccountInfo) -> Result<(), ProgramE
5656 )
5757}
5858
59- pub fn valid_signable_account ( program_id : & Pubkey , account : & AccountInfo ) -> bool {
60- account. is_signer
59+ pub fn valid_signable_account (
60+ program_id : & Pubkey ,
61+ account : & AccountInfo ,
62+ ) -> Result < bool , ProgramError > {
63+ Ok ( account. is_signer
6164 && account. is_writable
6265 && account. owner == program_id
63- && Rent :: default ( ) . is_exempt ( account. lamports ( ) , account. data_len ( ) )
66+ && get_rent ( ) ? . is_exempt ( account. lamports ( ) , account. data_len ( ) ) )
6467}
6568
6669pub fn check_valid_signable_account (
6770 program_id : & Pubkey ,
6871 account : & AccountInfo ,
6972) -> Result < ( ) , ProgramError > {
7073 pyth_assert (
71- valid_signable_account ( program_id, account) ,
74+ valid_signable_account ( program_id, account) ? ,
7275 OracleError :: InvalidSignableAccount . into ( ) ,
7376 )
7477}
@@ -119,18 +122,21 @@ pub fn read_pc_str_t(source: &[u8]) -> Result<&[u8], ProgramError> {
119122 }
120123}
121124
122- fn valid_writable_account ( program_id : & Pubkey , account : & AccountInfo ) -> bool {
123- account. is_writable
125+ fn valid_writable_account (
126+ program_id : & Pubkey ,
127+ account : & AccountInfo ,
128+ ) -> Result < bool , ProgramError > {
129+ Ok ( account. is_writable
124130 && account. owner == program_id
125- && Rent :: default ( ) . is_exempt ( account. lamports ( ) , account. data_len ( ) )
131+ && get_rent ( ) ? . is_exempt ( account. lamports ( ) , account. data_len ( ) ) )
126132}
127133
128134pub fn check_valid_writable_account (
129135 program_id : & Pubkey ,
130136 account : & AccountInfo ,
131137) -> Result < ( ) , ProgramError > {
132138 pyth_assert (
133- valid_writable_account ( program_id, account) ,
139+ valid_writable_account ( program_id, account) ? ,
134140 OracleError :: InvalidWritableAccount . into ( ) ,
135141 )
136142}
@@ -244,3 +250,14 @@ pub fn assign_owner<'a>(
244250 ) ?;
245251 Ok ( ( ) )
246252}
253+
254+ #[ cfg( not( test) ) ]
255+ pub fn get_rent ( ) -> Result < Rent , ProgramError > {
256+ use solana_program:: sysvar:: Sysvar ;
257+ Rent :: get ( )
258+ }
259+
260+ #[ cfg( test) ]
261+ pub fn get_rent ( ) -> Result < Rent , ProgramError > {
262+ Ok ( Rent :: default ( ) )
263+ }
0 commit comments