15
15
pub struct TokenGroup {
16
16
/// The authority that can sign to update the group
17
17
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 ,
18
21
/// The current number of group members
19
22
pub size : PodU32 ,
20
23
/// The maximum number of group members
@@ -23,8 +26,9 @@ pub struct TokenGroup {
23
26
24
27
impl TokenGroup {
25
28
/// 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 {
27
30
Self {
31
+ mint : * mint,
28
32
update_authority,
29
33
size : PodU32 :: default ( ) , // [0, 0, 0, 0]
30
34
max_size : max_size. into ( ) ,
@@ -60,16 +64,20 @@ impl TokenGroup {
60
64
#[ derive( Clone , Copy , Debug , Default , PartialEq , Pod , Zeroable , SplDiscriminate ) ]
61
65
#[ discriminator_hash_input( "spl_token_group_interface:member" ) ]
62
66
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 ,
63
70
/// The pubkey of the `TokenGroup`
64
71
pub group : Pubkey ,
65
72
/// The member number
66
73
pub member_number : PodU32 ,
67
74
}
68
75
impl TokenGroupMember {
69
76
/// 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 {
71
78
Self {
72
- group,
79
+ mint : * mint,
80
+ group : * group,
73
81
member_number : member_number. into ( ) ,
74
82
}
75
83
}
@@ -103,12 +111,14 @@ mod tests {
103
111
fn tlv_state_pack ( ) {
104
112
// Make sure we can pack more than one instance of each type
105
113
let group = TokenGroup {
114
+ mint : Pubkey :: new_unique ( ) ,
106
115
update_authority : OptionalNonZeroPubkey :: try_from ( Some ( Pubkey :: new_unique ( ) ) ) . unwrap ( ) ,
107
116
size : 10 . into ( ) ,
108
117
max_size : 20 . into ( ) ,
109
118
} ;
110
119
111
120
let member = TokenGroupMember {
121
+ mint : Pubkey :: new_unique ( ) ,
112
122
group : Pubkey :: new_unique ( ) ,
113
123
member_number : 0 . into ( ) ,
114
124
} ;
@@ -138,6 +148,7 @@ mod tests {
138
148
// Test with a `Some` max size
139
149
let max_size = 10 ;
140
150
let mut group = TokenGroup {
151
+ mint : Pubkey :: new_unique ( ) ,
141
152
update_authority : OptionalNonZeroPubkey :: try_from ( Some ( Pubkey :: new_unique ( ) ) ) . unwrap ( ) ,
142
153
size : 0 . into ( ) ,
143
154
max_size : max_size. into ( ) ,
@@ -165,6 +176,7 @@ mod tests {
165
176
#[ test]
166
177
fn increment_current_size ( ) {
167
178
let mut group = TokenGroup {
179
+ mint : Pubkey :: new_unique ( ) ,
168
180
update_authority : OptionalNonZeroPubkey :: try_from ( Some ( Pubkey :: new_unique ( ) ) ) . unwrap ( ) ,
169
181
size : 0 . into ( ) ,
170
182
max_size : 1 . into ( ) ,
0 commit comments