diff --git a/programs/bpf/rust/dup_accounts/src/lib.rs b/programs/bpf/rust/dup_accounts/src/lib.rs index d04f460c3..23848d865 100644 --- a/programs/bpf/rust/dup_accounts/src/lib.rs +++ b/programs/bpf/rust/dup_accounts/src/lib.rs @@ -16,32 +16,32 @@ fn process_instruction( match instruction_data[0] { 1 => { info!("modify first account data"); - accounts[2].m.borrow_mut().data[0] = 1; + accounts[2].borrow_mut().data[0] = 1; } 2 => { info!("modify first account data"); - accounts[3].m.borrow_mut().data[0] = 2; + accounts[3].borrow_mut().data[0] = 2; } 3 => { info!("modify both account data"); - accounts[2].m.borrow_mut().data[0] += 1; - accounts[3].m.borrow_mut().data[0] += 2; + accounts[2].borrow_mut().data[0] += 1; + accounts[3].borrow_mut().data[0] += 2; } 4 => { info!("modify first account lamports"); - *accounts[1].m.borrow_mut().lamports -= 1; - *accounts[2].m.borrow_mut().lamports += 1; + *accounts[1].borrow_mut().lamports -= 1; + *accounts[2].borrow_mut().lamports += 1; } 5 => { info!("modify first account lamports"); - *accounts[1].m.borrow_mut().lamports -= 2; - *accounts[3].m.borrow_mut().lamports += 2; + *accounts[1].borrow_mut().lamports -= 2; + *accounts[3].borrow_mut().lamports += 2; } 6 => { info!("modify both account lamports"); - *accounts[1].m.borrow_mut().lamports -= 3; - *accounts[2].m.borrow_mut().lamports += 1; - *accounts[3].m.borrow_mut().lamports += 2; + *accounts[1].borrow_mut().lamports -= 3; + *accounts[2].borrow_mut().lamports += 1; + *accounts[3].borrow_mut().lamports += 2; } _ => { info!("Unrecognized command"); diff --git a/programs/bpf/rust/external_spend/src/lib.rs b/programs/bpf/rust/external_spend/src/lib.rs index 1fbb67812..16301148f 100644 --- a/programs/bpf/rust/external_spend/src/lib.rs +++ b/programs/bpf/rust/external_spend/src/lib.rs @@ -12,7 +12,7 @@ fn process_instruction( // account 0 is the mint and not owned by this program, any debit of its lamports // should result in a failed program execution. Test to ensure that this debit // is seen by the runtime and fails as expected - *accounts[0].m.borrow_mut().lamports -= 1; + *accounts[0].borrow_mut().lamports -= 1; SUCCESS } diff --git a/sdk/src/account_info.rs b/sdk/src/account_info.rs index 468439eee..ff4bfd9b1 100644 --- a/sdk/src/account_info.rs +++ b/sdk/src/account_info.rs @@ -27,11 +27,11 @@ pub struct AccountInfo<'a> { impl<'a> fmt::Debug for AccountInfo<'a> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - let data_len = cmp::min(64, self.m.borrow().data.len()); + let data_len = cmp::min(64, self.data_len()); let data_str = if data_len > 0 { format!( " data: {}", - hex::encode(self.m.borrow().data[..data_len].to_vec()) + hex::encode(self.borrow().data[..data_len].to_vec()) ) } else { "".to_string() @@ -39,8 +39,8 @@ impl<'a> fmt::Debug for AccountInfo<'a> { write!( f, "AccountInfo {{ lamports: {} data.len: {} owner: {} {} }}", - self.m.borrow().lamports, - self.m.borrow().data.len(), + self.lamports(), + self.data_len(), self.owner, data_str, ) @@ -60,20 +60,24 @@ impl<'a> AccountInfo<'a> { self.key } - pub fn try_account_ref(&'a self) -> Result, u32> { - self.try_borrow() + pub fn lamports(&self) -> u64 { + *self.borrow().lamports } - pub fn try_account_ref_mut(&'a self) -> Result, u32> { - self.try_borrow_mut() + pub fn data_len(&self) -> usize { + self.borrow().data.len() } - fn try_borrow(&self) -> Result, u32> { - self.m.try_borrow().map_err(|_| std::u32::MAX) + pub fn data_is_empty(&self) -> bool { + self.borrow().data.is_empty() } - fn try_borrow_mut(&self) -> Result, u32> { - self.m.try_borrow_mut().map_err(|_| std::u32::MAX) + pub fn borrow(&self) -> Ref { + self.m.borrow() + } + + pub fn borrow_mut(&self) -> RefMut> { + self.m.borrow_mut() } pub fn new( @@ -92,14 +96,14 @@ impl<'a> AccountInfo<'a> { } pub fn deserialize_data(&self) -> Result { - bincode::deserialize(&self.m.borrow().data) + bincode::deserialize(&self.borrow().data) } pub fn serialize_data(&mut self, state: &T) -> Result<(), bincode::Error> { - if bincode::serialized_size(state)? > self.m.borrow().data.len() as u64 { + if bincode::serialized_size(state)? > self.data_len() as u64 { return Err(Box::new(bincode::ErrorKind::SizeLimit)); } - bincode::serialize_into(&mut self.m.borrow_mut().data[..], state) + bincode::serialize_into(&mut self.borrow_mut().data[..], state) } } diff --git a/sdk/src/log.rs b/sdk/src/log.rs index ddbcf0b4b..d9b7b5b8a 100644 --- a/sdk/src/log.rs +++ b/sdk/src/log.rs @@ -89,9 +89,9 @@ pub fn sol_log_params(accounts: &[AccountInfo], data: &[u8]) { info!("- Key"); account.key.log(); info!("- Lamports"); - info!(0, 0, 0, 0, *account.m.borrow().lamports); + info!(0, 0, 0, 0, account.lamports()); info!("- Account data length"); - info!(0, 0, 0, 0, account.m.borrow().data.len()); + info!(0, 0, 0, 0, account.data_len()); info!("- Owner"); account.owner.log(); }