Skip to content
This repository was archived by the owner on Mar 11, 2025. It is now read-only.

Commit 447f098

Browse files
committed
token 2022: add InitializeMember instruction from SPL Token Group interface
1 parent 23bf435 commit 447f098

File tree

2 files changed

+7
-30
lines changed

2 files changed

+7
-30
lines changed

token/client/src/token.rs

+4-22
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ use {
6161
},
6262
state::{Account, AccountState, Mint, Multisig},
6363
},
64-
spl_token_group_interface::state::TokenGroup,
64+
spl_token_group_interface::state::{TokenGroup, TokenGroupMember},
6565
spl_token_metadata_interface::state::{Field, TokenMetadata},
6666
std::{
6767
fmt, io,
@@ -3824,26 +3824,6 @@ where
38243824
.await
38253825
}
38263826

3827-
async fn get_additional_rent_for_new_member(&self) -> TokenResult<u64> {
3828-
let account = self.get_account(self.pubkey).await?;
3829-
let account_lamports = account.lamports;
3830-
let mint_state = self.unpack_mint_info(account)?;
3831-
let new_account_len = mint_state
3832-
.try_get_account_len()?
3833-
.checked_add(ExtensionType::try_calculate_account_len::<Mint>(&[
3834-
ExtensionType::TokenGroupMember,
3835-
])?)
3836-
.ok_or(TokenError::Program(
3837-
spl_token_2022::error::TokenError::Overflow.into(),
3838-
))?;
3839-
let new_rent_exempt_minimum = self
3840-
.client
3841-
.get_minimum_balance_for_rent_exemption(new_account_len)
3842-
.await
3843-
.map_err(TokenError::Client)?;
3844-
Ok(new_rent_exempt_minimum.saturating_sub(account_lamports))
3845-
}
3846-
38473827
/// Initialize a token-group member on a mint
38483828
#[allow(clippy::too_many_arguments)]
38493829
pub async fn token_group_initialize_member_with_rent_transfer<S: Signers>(
@@ -3854,7 +3834,9 @@ where
38543834
group_update_authority: &Pubkey,
38553835
signing_keypairs: &S,
38563836
) -> TokenResult<T::Output> {
3857-
let additional_lamports = self.get_additional_rent_for_new_member().await?;
3837+
let additional_lamports = self
3838+
.get_additional_rent_for_fixed_len_extension::<TokenGroupMember>()
3839+
.await?;
38583840
let mut instructions = vec![];
38593841
if additional_lamports > 0 {
38603842
instructions.push(system_instruction::transfer(

token/program-2022-test/tests/token_group_initialize_member.rs

+3-8
Original file line numberDiff line numberDiff line change
@@ -246,24 +246,19 @@ async fn success_initialize_member() {
246246
// fail double-init
247247
let error = member1_token_context
248248
.token
249-
.token_group_initialize_member_with_rent_transfer(
250-
&payer.pubkey(),
249+
.token_group_initialize_member(
251250
&member1_token_context.mint_authority.pubkey(),
252251
&group_mint_keypair.pubkey(),
253252
&group_authority.pubkey(),
254-
&[
255-
&payer,
256-
&member1_token_context.mint_authority,
257-
&group_authority,
258-
],
253+
&[&member1_token_context.mint_authority, &group_authority],
259254
)
260255
.await
261256
.unwrap_err();
262257
assert_eq!(
263258
error,
264259
TokenClientError::Client(Box::new(TransportError::TransactionError(
265260
TransactionError::InstructionError(
266-
1,
261+
0,
267262
InstructionError::Custom(TokenError::ExtensionAlreadyInitialized as u32)
268263
)
269264
)))

0 commit comments

Comments
 (0)