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

Commit 7e3a624

Browse files
committed
token-client: convert extended functions to new interface
covers all extensions except confidential transfers
1 parent 96ce922 commit 7e3a624

File tree

6 files changed

+257
-90
lines changed

6 files changed

+257
-90
lines changed

token/client/src/token.rs

Lines changed: 72 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,43 +1008,51 @@ where
10081008
}
10091009

10101010
/// Set transfer fee
1011-
pub async fn set_transfer_fee<S: Signer>(
1011+
pub async fn set_transfer_fee<S: Signers>(
10121012
&self,
1013-
authority: &S,
1013+
authority: &Pubkey,
10141014
transfer_fee_basis_points: u16,
10151015
maximum_fee: u64,
1016+
signing_keypairs: &S,
10161017
) -> TokenResult<T::Output> {
1018+
let signing_pubkeys = signing_keypairs.pubkeys();
1019+
let multisig_signers = self.get_multisig_signers(authority, &signing_pubkeys);
1020+
10171021
self.process_ixs(
10181022
&[transfer_fee::instruction::set_transfer_fee(
10191023
&self.program_id,
10201024
&self.pubkey,
1021-
&authority.pubkey(),
1022-
&[],
1025+
authority,
1026+
&multisig_signers,
10231027
transfer_fee_basis_points,
10241028
maximum_fee,
10251029
)?],
1026-
&[authority],
1030+
signing_keypairs,
10271031
)
10281032
.await
10291033
}
10301034

10311035
/// Set default account state on mint
1032-
pub async fn set_default_account_state<S: Signer>(
1036+
pub async fn set_default_account_state<S: Signers>(
10331037
&self,
1034-
authority: &S,
1038+
authority: &Pubkey,
10351039
state: &AccountState,
1040+
signing_keypairs: &S,
10361041
) -> TokenResult<T::Output> {
1042+
let signing_pubkeys = signing_keypairs.pubkeys();
1043+
let multisig_signers = self.get_multisig_signers(authority, &signing_pubkeys);
1044+
10371045
self.process_ixs(
10381046
&[
10391047
default_account_state::instruction::update_default_account_state(
10401048
&self.program_id,
10411049
&self.pubkey,
1042-
&authority.pubkey(),
1043-
&[],
1050+
authority,
1051+
&multisig_signers,
10441052
state,
10451053
)?,
10461054
],
1047-
&[authority],
1055+
signing_keypairs,
10481056
)
10491057
.await
10501058
}
@@ -1066,121 +1074,145 @@ where
10661074
}
10671075

10681076
/// Withdraw withheld tokens from mint
1069-
pub async fn withdraw_withheld_tokens_from_mint<S: Signer>(
1077+
pub async fn withdraw_withheld_tokens_from_mint<S: Signers>(
10701078
&self,
10711079
destination: &Pubkey,
1072-
authority: &S,
1080+
authority: &Pubkey,
1081+
signing_keypairs: &S,
10731082
) -> TokenResult<T::Output> {
1083+
let signing_pubkeys = signing_keypairs.pubkeys();
1084+
let multisig_signers = self.get_multisig_signers(authority, &signing_pubkeys);
1085+
10741086
self.process_ixs(
10751087
&[
10761088
transfer_fee::instruction::withdraw_withheld_tokens_from_mint(
10771089
&self.program_id,
10781090
&self.pubkey,
10791091
destination,
1080-
&authority.pubkey(),
1081-
&[],
1092+
authority,
1093+
&multisig_signers,
10821094
)?,
10831095
],
1084-
&[authority],
1096+
signing_keypairs,
10851097
)
10861098
.await
10871099
}
10881100

10891101
/// Withdraw withheld tokens from accounts
1090-
pub async fn withdraw_withheld_tokens_from_accounts<S: Signer>(
1102+
pub async fn withdraw_withheld_tokens_from_accounts<S: Signers>(
10911103
&self,
10921104
destination: &Pubkey,
1093-
authority: &S,
1105+
authority: &Pubkey,
10941106
sources: &[&Pubkey],
1107+
signing_keypairs: &S,
10951108
) -> TokenResult<T::Output> {
1109+
let signing_pubkeys = signing_keypairs.pubkeys();
1110+
let multisig_signers = self.get_multisig_signers(authority, &signing_pubkeys);
1111+
10961112
self.process_ixs(
10971113
&[
10981114
transfer_fee::instruction::withdraw_withheld_tokens_from_accounts(
10991115
&self.program_id,
11001116
&self.pubkey,
11011117
destination,
1102-
&authority.pubkey(),
1103-
&[],
1118+
authority,
1119+
&multisig_signers,
11041120
sources,
11051121
)?,
11061122
],
1107-
&[authority],
1123+
signing_keypairs,
11081124
)
11091125
.await
11101126
}
11111127

11121128
/// Reallocate a token account to be large enough for a set of ExtensionTypes
1113-
pub async fn reallocate<S: Signer>(
1129+
pub async fn reallocate<S: Signers>(
11141130
&self,
11151131
account: &Pubkey,
1116-
authority: &S,
1132+
authority: &Pubkey,
11171133
extension_types: &[ExtensionType],
1134+
signing_keypairs: &S,
11181135
) -> TokenResult<T::Output> {
1136+
let signing_pubkeys = signing_keypairs.pubkeys();
1137+
let multisig_signers = self.get_multisig_signers(authority, &signing_pubkeys);
1138+
11191139
self.process_ixs(
11201140
&[instruction::reallocate(
11211141
&self.program_id,
11221142
account,
11231143
&self.payer.pubkey(),
1124-
&authority.pubkey(),
1125-
&[],
1144+
authority,
1145+
&multisig_signers,
11261146
extension_types,
11271147
)?],
1128-
&[authority],
1148+
signing_keypairs,
11291149
)
11301150
.await
11311151
}
11321152

11331153
/// Require memos on transfers into this account
1134-
pub async fn enable_required_transfer_memos<S: Signer>(
1154+
pub async fn enable_required_transfer_memos<S: Signers>(
11351155
&self,
11361156
account: &Pubkey,
1137-
authority: &S,
1157+
authority: &Pubkey,
1158+
signing_keypairs: &S,
11381159
) -> TokenResult<T::Output> {
1160+
let signing_pubkeys = signing_keypairs.pubkeys();
1161+
let multisig_signers = self.get_multisig_signers(authority, &signing_pubkeys);
1162+
11391163
self.process_ixs(
11401164
&[memo_transfer::instruction::enable_required_transfer_memos(
11411165
&self.program_id,
11421166
account,
1143-
&authority.pubkey(),
1144-
&[],
1167+
authority,
1168+
&multisig_signers,
11451169
)?],
1146-
&[authority],
1170+
signing_keypairs,
11471171
)
11481172
.await
11491173
}
11501174

11511175
/// Stop requiring memos on transfers into this account
1152-
pub async fn disable_required_transfer_memos<S: Signer>(
1176+
pub async fn disable_required_transfer_memos<S: Signers>(
11531177
&self,
11541178
account: &Pubkey,
1155-
authority: &S,
1179+
authority: &Pubkey,
1180+
signing_keypairs: &S,
11561181
) -> TokenResult<T::Output> {
1182+
let signing_pubkeys = signing_keypairs.pubkeys();
1183+
let multisig_signers = self.get_multisig_signers(authority, &signing_pubkeys);
1184+
11571185
self.process_ixs(
11581186
&[memo_transfer::instruction::disable_required_transfer_memos(
11591187
&self.program_id,
11601188
account,
1161-
&authority.pubkey(),
1162-
&[],
1189+
authority,
1190+
&multisig_signers,
11631191
)?],
1164-
&[authority],
1192+
signing_keypairs,
11651193
)
11661194
.await
11671195
}
11681196

11691197
/// Update interest rate
1170-
pub async fn update_interest_rate<S: Signer>(
1198+
pub async fn update_interest_rate<S: Signers>(
11711199
&self,
1172-
authority: &S,
1200+
authority: &Pubkey,
11731201
new_rate: i16,
1202+
signing_keypairs: &S,
11741203
) -> TokenResult<T::Output> {
1204+
let signing_pubkeys = signing_keypairs.pubkeys();
1205+
let multisig_signers = self.get_multisig_signers(authority, &signing_pubkeys);
1206+
11751207
self.process_ixs(
11761208
&[interest_bearing_mint::instruction::update_rate(
11771209
&self.program_id,
11781210
self.get_address(),
1179-
&authority.pubkey(),
1180-
&[],
1211+
authority,
1212+
&multisig_signers,
11811213
new_rate,
11821214
)?],
1183-
&[authority],
1215+
signing_keypairs,
11841216
)
11851217
.await
11861218
}

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

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,11 @@ async fn end_to_end_default_account_state() {
197197

198198
// Invalid default state
199199
let err = token
200-
.set_default_account_state(&mint_authority, &AccountState::Uninitialized)
200+
.set_default_account_state(
201+
&mint_authority.pubkey(),
202+
&AccountState::Uninitialized,
203+
&vec![&mint_authority],
204+
)
201205
.await
202206
.unwrap_err();
203207
assert_eq!(
@@ -211,7 +215,11 @@ async fn end_to_end_default_account_state() {
211215
);
212216

213217
token
214-
.set_default_account_state(&freeze_authority, &AccountState::Initialized)
218+
.set_default_account_state(
219+
&freeze_authority.pubkey(),
220+
&AccountState::Initialized,
221+
&vec![&freeze_authority],
222+
)
215223
.await
216224
.unwrap();
217225
let state = token.get_mint_info().await.unwrap();
@@ -245,7 +253,11 @@ async fn end_to_end_default_account_state() {
245253
.unwrap();
246254

247255
let err = token
248-
.set_default_account_state(&mint_authority, &AccountState::Frozen)
256+
.set_default_account_state(
257+
&mint_authority.pubkey(),
258+
&AccountState::Frozen,
259+
&vec![&mint_authority],
260+
)
249261
.await
250262
.unwrap_err();
251263
assert_eq!(
@@ -259,7 +271,11 @@ async fn end_to_end_default_account_state() {
259271
);
260272

261273
token
262-
.set_default_account_state(&new_authority, &AccountState::Frozen)
274+
.set_default_account_state(
275+
&new_authority.pubkey(),
276+
&AccountState::Frozen,
277+
&vec![&new_authority],
278+
)
263279
.await
264280
.unwrap();
265281
let state = token.get_mint_info().await.unwrap();
@@ -281,7 +297,11 @@ async fn end_to_end_default_account_state() {
281297
.unwrap();
282298

283299
let err = token
284-
.set_default_account_state(&new_authority, &AccountState::Initialized)
300+
.set_default_account_state(
301+
&new_authority.pubkey(),
302+
&AccountState::Initialized,
303+
&vec![&new_authority],
304+
)
285305
.await
286306
.unwrap_err();
287307
assert_eq!(

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

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,11 @@ async fn update_rate() {
9494
// correct
9595
let middle_rate = 1_000;
9696
token
97-
.update_interest_rate(&rate_authority, middle_rate)
97+
.update_interest_rate(
98+
&rate_authority.pubkey(),
99+
middle_rate,
100+
&vec![&rate_authority],
101+
)
98102
.await
99103
.unwrap();
100104
let state = token.get_mint_info().await.unwrap();
@@ -118,7 +122,7 @@ async fn update_rate() {
118122
// update again, pre_update_average_rate is between the two previous
119123
let new_rate = 2_000;
120124
token
121-
.update_interest_rate(&rate_authority, new_rate)
125+
.update_interest_rate(&rate_authority.pubkey(), new_rate, &vec![&rate_authority])
122126
.await
123127
.unwrap();
124128
let state = token.get_mint_info().await.unwrap();
@@ -131,8 +135,9 @@ async fn update_rate() {
131135
assert!(final_update_timestamp > last_update_timestamp);
132136

133137
// wrong signer
138+
let wrong_signer = Keypair::new();
134139
let err = token
135-
.update_interest_rate(&Keypair::new(), 0)
140+
.update_interest_rate(&wrong_signer.pubkey(), 0, &vec![&wrong_signer])
136141
.await
137142
.unwrap_err();
138143
assert_eq!(
@@ -179,11 +184,11 @@ async fn set_authority() {
179184
Some(new_rate_authority.pubkey()).try_into().unwrap(),
180185
);
181186
token
182-
.update_interest_rate(&new_rate_authority, 10)
187+
.update_interest_rate(&new_rate_authority.pubkey(), 10, &vec![&new_rate_authority])
183188
.await
184189
.unwrap();
185190
let err = token
186-
.update_interest_rate(&rate_authority, 100)
191+
.update_interest_rate(&rate_authority.pubkey(), 100, &vec![&rate_authority])
187192
.await
188193
.unwrap_err();
189194
assert_eq!(
@@ -213,7 +218,7 @@ async fn set_authority() {
213218

214219
// now all fail
215220
let err = token
216-
.update_interest_rate(&new_rate_authority, 50)
221+
.update_interest_rate(&new_rate_authority.pubkey(), 50, &vec![&new_rate_authority])
217222
.await
218223
.unwrap_err();
219224
assert_eq!(
@@ -226,7 +231,7 @@ async fn set_authority() {
226231
)))
227232
);
228233
let err = token
229-
.update_interest_rate(&rate_authority, 5)
234+
.update_interest_rate(&rate_authority.pubkey(), 5, &vec![&rate_authority])
230235
.await
231236
.unwrap_err();
232237
assert_eq!(

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ async fn test_memo_transfers(
5252

5353
// require memo transfers into bob_account
5454
token
55-
.enable_required_transfer_memos(&bob_account, &bob)
55+
.enable_required_transfer_memos(&bob_account, &bob.pubkey(), &vec![&bob])
5656
.await
5757
.unwrap();
5858

@@ -174,7 +174,7 @@ async fn test_memo_transfers(
174174

175175
// stop requiring memo transfers into bob_account
176176
token
177-
.disable_required_transfer_memos(&bob_account, &bob)
177+
.disable_required_transfer_memos(&bob_account, &bob.pubkey(), &vec![&bob])
178178
.await
179179
.unwrap();
180180

@@ -244,8 +244,9 @@ async fn require_memo_transfers_with_realloc() {
244244
.token
245245
.reallocate(
246246
&token_context.bob.pubkey(),
247-
&token_context.bob,
247+
&token_context.bob.pubkey(),
248248
&[ExtensionType::MemoTransfer],
249+
&vec![&token_context.bob],
249250
)
250251
.await
251252
.unwrap();

0 commit comments

Comments
 (0)