1515pub 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
2427impl 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" ) ]
6266pub 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}
6875impl 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