Skip to content

Commit 94c1711

Browse files
[rust-legacy-client] Add test for pausable extension and confidential mint and burn (#177)
1 parent a46685f commit 94c1711

File tree

1 file changed

+135
-0
lines changed

1 file changed

+135
-0
lines changed

clients/rust-legacy/tests/confidential_mint_burn.rs

+135
Original file line numberDiff line numberDiff line change
@@ -1209,3 +1209,138 @@ async fn confidential_mint_burn_with_option(option: ConfidentialTransferOption)
12091209
0,
12101210
);
12111211
}
1212+
1213+
#[tokio::test]
1214+
async fn pause_confidential_mint_burn() {
1215+
let pausable_authority = Keypair::new();
1216+
1217+
let confidential_transfer_authority = Keypair::new();
1218+
let auto_approve_new_accounts = true;
1219+
let auditor_elgamal_keypair = ElGamalKeypair::new_rand();
1220+
let auditor_elgamal_pubkey = (*auditor_elgamal_keypair.pubkey()).into();
1221+
1222+
let supply_elgamal_keypair = ElGamalKeypair::new_rand();
1223+
let supply_elgamal_pubkey = (*supply_elgamal_keypair.pubkey()).into();
1224+
let supply_aes_key = AeKey::new_rand();
1225+
let decryptable_supply = supply_aes_key.encrypt(0).into();
1226+
1227+
let mut context = TestContext::new().await;
1228+
context
1229+
.init_token_with_mint(vec![
1230+
ExtensionInitializationParams::ConfidentialTransferMint {
1231+
authority: Some(confidential_transfer_authority.pubkey()),
1232+
auto_approve_new_accounts,
1233+
auditor_elgamal_pubkey: Some(auditor_elgamal_pubkey),
1234+
},
1235+
ExtensionInitializationParams::ConfidentialMintBurn {
1236+
supply_elgamal_pubkey,
1237+
decryptable_supply,
1238+
},
1239+
ExtensionInitializationParams::PausableConfig {
1240+
authority: pausable_authority.pubkey(),
1241+
},
1242+
])
1243+
.await
1244+
.unwrap();
1245+
1246+
let TokenContext {
1247+
token,
1248+
mint_authority,
1249+
alice,
1250+
..
1251+
} = context.token_context.unwrap();
1252+
1253+
let alice_meta = ConfidentialTokenAccountMeta::new(&token, &alice).await;
1254+
1255+
// add some token in advance to try burning later
1256+
token
1257+
.confidential_transfer_mint(
1258+
&mint_authority.pubkey(),
1259+
&alice_meta.token_account,
1260+
None,
1261+
None,
1262+
None,
1263+
120,
1264+
&supply_elgamal_keypair,
1265+
alice_meta.elgamal_keypair.pubkey(),
1266+
Some(auditor_elgamal_keypair.pubkey()),
1267+
&supply_aes_key,
1268+
None,
1269+
&[&mint_authority],
1270+
)
1271+
.await
1272+
.unwrap();
1273+
1274+
token
1275+
.confidential_transfer_apply_pending_balance(
1276+
&alice_meta.token_account,
1277+
&alice.pubkey(),
1278+
None,
1279+
alice_meta.elgamal_keypair.secret(),
1280+
&alice_meta.aes_key,
1281+
&[&alice],
1282+
)
1283+
.await
1284+
.unwrap();
1285+
1286+
token
1287+
.pause(&pausable_authority.pubkey(), &[&pausable_authority])
1288+
.await
1289+
.unwrap();
1290+
1291+
let error = token
1292+
.confidential_transfer_mint(
1293+
&mint_authority.pubkey(),
1294+
&alice_meta.token_account,
1295+
None,
1296+
None,
1297+
None,
1298+
10,
1299+
&supply_elgamal_keypair,
1300+
alice_meta.elgamal_keypair.pubkey(),
1301+
Some(auditor_elgamal_keypair.pubkey()),
1302+
&supply_aes_key,
1303+
None,
1304+
&[&mint_authority],
1305+
)
1306+
.await
1307+
.unwrap_err();
1308+
1309+
assert_eq!(
1310+
error,
1311+
TokenClientError::Client(Box::new(TransportError::TransactionError(
1312+
TransactionError::InstructionError(
1313+
0,
1314+
InstructionError::Custom(TokenError::MintPaused as u32)
1315+
)
1316+
)))
1317+
);
1318+
1319+
let error = token
1320+
.confidential_transfer_burn(
1321+
&alice.pubkey(),
1322+
&alice_meta.token_account,
1323+
None,
1324+
None,
1325+
None,
1326+
10,
1327+
&alice_meta.elgamal_keypair,
1328+
supply_elgamal_keypair.pubkey(),
1329+
Some(auditor_elgamal_keypair.pubkey()),
1330+
&alice_meta.aes_key,
1331+
None,
1332+
&[&alice],
1333+
)
1334+
.await
1335+
.unwrap_err();
1336+
1337+
assert_eq!(
1338+
error,
1339+
TokenClientError::Client(Box::new(TransportError::TransactionError(
1340+
TransactionError::InstructionError(
1341+
0,
1342+
InstructionError::Custom(TokenError::MintPaused as u32)
1343+
)
1344+
)))
1345+
);
1346+
}

0 commit comments

Comments
 (0)