|
18 | 18 | spl_token_2022::{
|
19 | 19 | extension::{
|
20 | 20 | confidential_transfer::{ConfidentialTransferAccount, ConfidentialTransferMint},
|
| 21 | + confidential_transfer_fee::ConfidentialTransferFeeConfig, |
21 | 22 | cpi_guard::CpiGuard,
|
22 | 23 | default_account_state::DefaultAccountState,
|
23 | 24 | group_member_pointer::GroupMemberPointer,
|
@@ -130,6 +131,7 @@ async fn main() {
|
130 | 131 | async_trial!(group_member_pointer, test_validator, payer),
|
131 | 132 | async_trial!(transfer_hook, test_validator, payer),
|
132 | 133 | async_trial!(metadata, test_validator, payer),
|
| 134 | + async_trial!(confidential_transfer_with_fee, test_validator, payer), |
133 | 135 | // GC messes with every other test, so have it on its own test validator
|
134 | 136 | async_trial!(gc, gc_test_validator, gc_payer),
|
135 | 137 | ];
|
@@ -2721,6 +2723,62 @@ async fn confidential_transfer(test_validator: &TestValidator, payer: &Keypair)
|
2721 | 2723 | .unwrap();
|
2722 | 2724 | }
|
2723 | 2725 |
|
| 2726 | +async fn confidential_transfer_with_fee(test_validator: &TestValidator, payer: &Keypair) { |
| 2727 | + let config = test_config_with_default_signer(test_validator, payer, &spl_token_2022::id()); |
| 2728 | + |
| 2729 | + // create token with confidential transfers enabled |
| 2730 | + let auto_approve = true; |
| 2731 | + let confidential_transfer_mint_authority = payer.pubkey(); |
| 2732 | + |
| 2733 | + let token = Keypair::new(); |
| 2734 | + let token_keypair_file = NamedTempFile::new().unwrap(); |
| 2735 | + write_keypair_file(&token, &token_keypair_file).unwrap(); |
| 2736 | + let token_pubkey = token.pubkey(); |
| 2737 | + process_test_command( |
| 2738 | + &config, |
| 2739 | + payer, |
| 2740 | + &[ |
| 2741 | + "spl-token", |
| 2742 | + CommandName::CreateToken.into(), |
| 2743 | + token_keypair_file.path().to_str().unwrap(), |
| 2744 | + "--enable-confidential-transfers", |
| 2745 | + "auto", |
| 2746 | + "--transfer-fee", |
| 2747 | + "100", |
| 2748 | + "1000000000", |
| 2749 | + ], |
| 2750 | + ) |
| 2751 | + .await |
| 2752 | + .unwrap(); |
| 2753 | + |
| 2754 | + let account = config.rpc_client.get_account(&token_pubkey).await.unwrap(); |
| 2755 | + let test_mint = StateWithExtensionsOwned::<Mint>::unpack(account.data).unwrap(); |
| 2756 | + let extension = test_mint |
| 2757 | + .get_extension::<ConfidentialTransferMint>() |
| 2758 | + .unwrap(); |
| 2759 | + |
| 2760 | + assert_eq!( |
| 2761 | + Option::<Pubkey>::from(extension.authority), |
| 2762 | + Some(confidential_transfer_mint_authority), |
| 2763 | + ); |
| 2764 | + assert_eq!( |
| 2765 | + bool::from(extension.auto_approve_new_accounts), |
| 2766 | + auto_approve, |
| 2767 | + ); |
| 2768 | + assert_eq!( |
| 2769 | + Option::<ElGamalPubkey>::from(extension.auditor_elgamal_pubkey), |
| 2770 | + None, |
| 2771 | + ); |
| 2772 | + |
| 2773 | + let extension = test_mint |
| 2774 | + .get_extension::<ConfidentialTransferFeeConfig>() |
| 2775 | + .unwrap(); |
| 2776 | + assert_eq!( |
| 2777 | + Option::<Pubkey>::from(extension.authority), |
| 2778 | + Some(confidential_transfer_mint_authority), |
| 2779 | + ); |
| 2780 | +} |
| 2781 | + |
2724 | 2782 | async fn multisig_transfer(test_validator: &TestValidator, payer: &Keypair) {
|
2725 | 2783 | let m = 3;
|
2726 | 2784 | let n = 5u8;
|
|
0 commit comments