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

Commit 700ee29

Browse files
author
Joe C
authored
token group: add mint to interface (#5616)
1 parent 2f87825 commit 700ee29

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

token-group/interface/src/state.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ use {
1515
pub struct TokenGroup {
1616
/// The authority that can sign to update the group
1717
pub update_authority: OptionalNonZeroPubkey,
18+
/// The associated mint, used to counter spoofing to be sure that group
19+
/// belongs to a particular mint
20+
pub mint: Pubkey,
1821
/// The current number of group members
1922
pub size: PodU32,
2023
/// The maximum number of group members
@@ -23,8 +26,9 @@ pub struct TokenGroup {
2326

2427
impl TokenGroup {
2528
/// Creates a new `TokenGroup` state
26-
pub fn new(update_authority: OptionalNonZeroPubkey, max_size: u32) -> Self {
29+
pub fn new(mint: &Pubkey, update_authority: OptionalNonZeroPubkey, max_size: u32) -> Self {
2730
Self {
31+
mint: *mint,
2832
update_authority,
2933
size: PodU32::default(), // [0, 0, 0, 0]
3034
max_size: max_size.into(),
@@ -60,16 +64,20 @@ impl TokenGroup {
6064
#[derive(Clone, Copy, Debug, Default, PartialEq, Pod, Zeroable, SplDiscriminate)]
6165
#[discriminator_hash_input("spl_token_group_interface:member")]
6266
pub struct TokenGroupMember {
67+
/// The associated mint, used to counter spoofing to be sure that member
68+
/// belongs to a particular mint
69+
pub mint: Pubkey,
6370
/// The pubkey of the `TokenGroup`
6471
pub group: Pubkey,
6572
/// The member number
6673
pub member_number: PodU32,
6774
}
6875
impl TokenGroupMember {
6976
/// Creates a new `TokenGroupMember` state
70-
pub fn new(group: Pubkey, member_number: u32) -> Self {
77+
pub fn new(mint: &Pubkey, group: &Pubkey, member_number: u32) -> Self {
7178
Self {
72-
group,
79+
mint: *mint,
80+
group: *group,
7381
member_number: member_number.into(),
7482
}
7583
}
@@ -103,12 +111,14 @@ mod tests {
103111
fn tlv_state_pack() {
104112
// Make sure we can pack more than one instance of each type
105113
let group = TokenGroup {
114+
mint: Pubkey::new_unique(),
106115
update_authority: OptionalNonZeroPubkey::try_from(Some(Pubkey::new_unique())).unwrap(),
107116
size: 10.into(),
108117
max_size: 20.into(),
109118
};
110119

111120
let member = TokenGroupMember {
121+
mint: Pubkey::new_unique(),
112122
group: Pubkey::new_unique(),
113123
member_number: 0.into(),
114124
};
@@ -138,6 +148,7 @@ mod tests {
138148
// Test with a `Some` max size
139149
let max_size = 10;
140150
let mut group = TokenGroup {
151+
mint: Pubkey::new_unique(),
141152
update_authority: OptionalNonZeroPubkey::try_from(Some(Pubkey::new_unique())).unwrap(),
142153
size: 0.into(),
143154
max_size: max_size.into(),
@@ -165,6 +176,7 @@ mod tests {
165176
#[test]
166177
fn increment_current_size() {
167178
let mut group = TokenGroup {
179+
mint: Pubkey::new_unique(),
168180
update_authority: OptionalNonZeroPubkey::try_from(Some(Pubkey::new_unique())).unwrap(),
169181
size: 0.into(),
170182
max_size: 1.into(),

0 commit comments

Comments
 (0)