token-2022: check pending and available balance on confidential token tests (#3145)
* token-2022: check pending and available balance on confidential token tests * token-2022: cargo fmt
This commit is contained in:
parent
219b6a1b78
commit
b6eb64b0b4
|
@ -150,6 +150,46 @@ impl ConfidentialTokenAccountMeta {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
meta
|
meta
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn check_balances<T>(
|
||||||
|
&self,
|
||||||
|
token: &Token<T, Keypair>,
|
||||||
|
expected: ConfidentialTokenAccountBalances,
|
||||||
|
) where
|
||||||
|
T: SendTransaction,
|
||||||
|
{
|
||||||
|
let state = token.get_account_info(&self.token_account).await.unwrap();
|
||||||
|
let extension = state
|
||||||
|
.get_extension::<ConfidentialTransferAccount>()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
extension
|
||||||
|
.pending_balance
|
||||||
|
.decrypt(&self.elgamal_keypair.secret)
|
||||||
|
.unwrap(),
|
||||||
|
expected.pending_balance,
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
extension
|
||||||
|
.available_balance
|
||||||
|
.decrypt(&self.elgamal_keypair.secret)
|
||||||
|
.unwrap(),
|
||||||
|
expected.available_balance,
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
self.ae_key
|
||||||
|
.decrypt(&extension.decryptable_available_balance.try_into().unwrap())
|
||||||
|
.unwrap(),
|
||||||
|
expected.decryptable_available_balance,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct ConfidentialTokenAccountBalances {
|
||||||
|
pending_balance: u64,
|
||||||
|
available_balance: u64,
|
||||||
|
decryptable_available_balance: u64,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
|
@ -411,14 +451,17 @@ async fn ct_deposit() {
|
||||||
assert_eq!(extension.pending_balance_credit_counter, 1.into());
|
assert_eq!(extension.pending_balance_credit_counter, 1.into());
|
||||||
assert_eq!(extension.expected_pending_balance_credit_counter, 0.into());
|
assert_eq!(extension.expected_pending_balance_credit_counter, 0.into());
|
||||||
assert_eq!(extension.actual_pending_balance_credit_counter, 0.into());
|
assert_eq!(extension.actual_pending_balance_credit_counter, 0.into());
|
||||||
assert_ne!(
|
|
||||||
extension.pending_balance,
|
alice_meta
|
||||||
zk_token_elgamal::pod::ElGamalCiphertext::zeroed()
|
.check_balances(
|
||||||
);
|
&token,
|
||||||
assert_eq!(
|
ConfidentialTokenAccountBalances {
|
||||||
extension.available_balance,
|
pending_balance: 42,
|
||||||
zk_token_elgamal::pod::ElGamalCiphertext::zeroed()
|
available_balance: 0,
|
||||||
);
|
decryptable_available_balance: 0,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.await;
|
||||||
|
|
||||||
let new_decryptable_available_balance = alice_meta.ae_key.encrypt(42_u64);
|
let new_decryptable_available_balance = alice_meta.ae_key.encrypt(42_u64);
|
||||||
token
|
token
|
||||||
|
@ -445,14 +488,17 @@ async fn ct_deposit() {
|
||||||
assert_eq!(extension.pending_balance_credit_counter, 1.into());
|
assert_eq!(extension.pending_balance_credit_counter, 1.into());
|
||||||
assert_eq!(extension.expected_pending_balance_credit_counter, 1.into());
|
assert_eq!(extension.expected_pending_balance_credit_counter, 1.into());
|
||||||
assert_eq!(extension.actual_pending_balance_credit_counter, 1.into());
|
assert_eq!(extension.actual_pending_balance_credit_counter, 1.into());
|
||||||
assert_eq!(
|
|
||||||
extension.pending_balance,
|
alice_meta
|
||||||
zk_token_elgamal::pod::ElGamalCiphertext::zeroed()
|
.check_balances(
|
||||||
);
|
&token,
|
||||||
assert_ne!(
|
ConfidentialTokenAccountBalances {
|
||||||
extension.available_balance,
|
pending_balance: 0,
|
||||||
zk_token_elgamal::pod::ElGamalCiphertext::zeroed()
|
available_balance: 42,
|
||||||
);
|
decryptable_available_balance: 42,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.await;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
|
@ -474,6 +520,7 @@ async fn ct_withdraw() {
|
||||||
decimals,
|
decimals,
|
||||||
..
|
..
|
||||||
} = context.token_context.unwrap();
|
} = context.token_context.unwrap();
|
||||||
|
|
||||||
let alice_meta =
|
let alice_meta =
|
||||||
ConfidentialTokenAccountMeta::with_tokens(&token, &alice, &mint_authority, 42, decimals)
|
ConfidentialTokenAccountMeta::with_tokens(&token, &alice, &mint_authority, 42, decimals)
|
||||||
.await;
|
.await;
|
||||||
|
@ -503,15 +550,17 @@ async fn ct_withdraw() {
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert_eq!(state.base.amount, 21);
|
assert_eq!(state.base.amount, 21);
|
||||||
let extension = state
|
|
||||||
.get_extension::<ConfidentialTransferAccount>()
|
alice_meta
|
||||||
.unwrap();
|
.check_balances(
|
||||||
assert_eq!(
|
&token,
|
||||||
alice_meta
|
ConfidentialTokenAccountBalances {
|
||||||
.ae_key
|
pending_balance: 0,
|
||||||
.decrypt(&extension.decryptable_available_balance.try_into().unwrap()),
|
available_balance: 21,
|
||||||
Some(21),
|
decryptable_available_balance: 21,
|
||||||
);
|
},
|
||||||
|
)
|
||||||
|
.await;
|
||||||
|
|
||||||
token
|
token
|
||||||
.confidential_transfer_withdraw(
|
.confidential_transfer_withdraw(
|
||||||
|
@ -532,15 +581,17 @@ async fn ct_withdraw() {
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert_eq!(state.base.amount, 42);
|
assert_eq!(state.base.amount, 42);
|
||||||
let extension = state
|
|
||||||
.get_extension::<ConfidentialTransferAccount>()
|
alice_meta
|
||||||
.unwrap();
|
.check_balances(
|
||||||
assert_eq!(
|
&token,
|
||||||
alice_meta
|
ConfidentialTokenAccountBalances {
|
||||||
.ae_key
|
pending_balance: 0,
|
||||||
.decrypt(&extension.decryptable_available_balance.try_into().unwrap()),
|
available_balance: 0,
|
||||||
Some(0),
|
decryptable_available_balance: 0,
|
||||||
);
|
},
|
||||||
|
)
|
||||||
|
.await;
|
||||||
|
|
||||||
token
|
token
|
||||||
.confidential_transfer_empty_account(
|
.confidential_transfer_empty_account(
|
||||||
|
@ -591,6 +642,17 @@ async fn ct_transfer() {
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
alice_meta
|
||||||
|
.check_balances(
|
||||||
|
&token,
|
||||||
|
ConfidentialTokenAccountBalances {
|
||||||
|
pending_balance: 0,
|
||||||
|
available_balance: 42,
|
||||||
|
decryptable_available_balance: 42,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.await;
|
||||||
|
|
||||||
// Self-transfer of N tokens
|
// Self-transfer of N tokens
|
||||||
token
|
token
|
||||||
.confidential_transfer_transfer(
|
.confidential_transfer_transfer(
|
||||||
|
@ -600,11 +662,22 @@ async fn ct_transfer() {
|
||||||
42, // amount
|
42, // amount
|
||||||
42, // available balance
|
42, // available balance
|
||||||
&alice_meta.elgamal_keypair,
|
&alice_meta.elgamal_keypair,
|
||||||
alice_meta.ae_key.encrypt(42_u64),
|
alice_meta.ae_key.encrypt(0_u64),
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
alice_meta
|
||||||
|
.check_balances(
|
||||||
|
&token,
|
||||||
|
ConfidentialTokenAccountBalances {
|
||||||
|
pending_balance: 42,
|
||||||
|
available_balance: 0,
|
||||||
|
decryptable_available_balance: 0,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.await;
|
||||||
|
|
||||||
token
|
token
|
||||||
.confidential_transfer_apply_pending_balance(
|
.confidential_transfer_apply_pending_balance(
|
||||||
&alice_meta.token_account,
|
&alice_meta.token_account,
|
||||||
|
@ -615,19 +688,16 @@ async fn ct_transfer() {
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let state = token
|
alice_meta
|
||||||
.get_account_info(&alice_meta.token_account)
|
.check_balances(
|
||||||
.await
|
&token,
|
||||||
.unwrap();
|
ConfidentialTokenAccountBalances {
|
||||||
let extension = state
|
pending_balance: 0,
|
||||||
.get_extension::<ConfidentialTransferAccount>()
|
available_balance: 42,
|
||||||
.unwrap();
|
decryptable_available_balance: 42,
|
||||||
assert_eq!(
|
},
|
||||||
alice_meta
|
)
|
||||||
.ae_key
|
.await;
|
||||||
.decrypt(&extension.decryptable_available_balance.try_into().unwrap()),
|
|
||||||
Some(42),
|
|
||||||
);
|
|
||||||
|
|
||||||
token
|
token
|
||||||
.confidential_transfer_transfer(
|
.confidential_transfer_transfer(
|
||||||
|
@ -642,19 +712,16 @@ async fn ct_transfer() {
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let state = token
|
alice_meta
|
||||||
.get_account_info(&alice_meta.token_account)
|
.check_balances(
|
||||||
.await
|
&token,
|
||||||
.unwrap();
|
ConfidentialTokenAccountBalances {
|
||||||
let extension = state
|
pending_balance: 0,
|
||||||
.get_extension::<ConfidentialTransferAccount>()
|
available_balance: 0,
|
||||||
.unwrap();
|
decryptable_available_balance: 0,
|
||||||
assert_eq!(
|
},
|
||||||
alice_meta
|
)
|
||||||
.ae_key
|
.await;
|
||||||
.decrypt(&extension.decryptable_available_balance.try_into().unwrap()),
|
|
||||||
Some(0),
|
|
||||||
);
|
|
||||||
|
|
||||||
token
|
token
|
||||||
.confidential_transfer_empty_account(
|
.confidential_transfer_empty_account(
|
||||||
|
@ -687,6 +754,8 @@ async fn ct_transfer() {
|
||||||
let extension = state
|
let extension = state
|
||||||
.get_extension::<ConfidentialTransferAccount>()
|
.get_extension::<ConfidentialTransferAccount>()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
// TODO: verify bob_meta pending and available balance once syscall lands
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
bob_meta
|
bob_meta
|
||||||
.ae_key
|
.ae_key
|
||||||
|
@ -711,6 +780,8 @@ async fn ct_transfer() {
|
||||||
let extension = state
|
let extension = state
|
||||||
.get_extension::<ConfidentialTransferAccount>()
|
.get_extension::<ConfidentialTransferAccount>()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
// TODO: verify bob_meta pending and available balance once syscall lands
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
bob_meta
|
bob_meta
|
||||||
.ae_key
|
.ae_key
|
||||||
|
@ -769,7 +840,20 @@ async fn ct_transfer_with_fee() {
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
// Self-transfer of N tokens
|
alice_meta
|
||||||
|
.check_balances(
|
||||||
|
&token,
|
||||||
|
ConfidentialTokenAccountBalances {
|
||||||
|
pending_balance: 0,
|
||||||
|
available_balance: 100,
|
||||||
|
decryptable_available_balance: 100,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.await;
|
||||||
|
|
||||||
|
// Fee is 2.5%, so what is left is 97 in Alice account
|
||||||
|
//
|
||||||
|
// TODO: make self transfers not not take fees
|
||||||
token
|
token
|
||||||
.confidential_transfer_transfer_with_fee(
|
.confidential_transfer_transfer_with_fee(
|
||||||
&alice_meta.token_account,
|
&alice_meta.token_account,
|
||||||
|
@ -778,13 +862,23 @@ async fn ct_transfer_with_fee() {
|
||||||
100, // amount
|
100, // amount
|
||||||
100, // available balance
|
100, // available balance
|
||||||
&alice_meta.elgamal_keypair,
|
&alice_meta.elgamal_keypair,
|
||||||
alice_meta.ae_key.encrypt(100_u64),
|
alice_meta.ae_key.encrypt(0_u64),
|
||||||
&epoch_info,
|
&epoch_info,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
// Fee is 2.5%, so what is left in 97 in Alice account
|
alice_meta
|
||||||
|
.check_balances(
|
||||||
|
&token,
|
||||||
|
ConfidentialTokenAccountBalances {
|
||||||
|
pending_balance: 97,
|
||||||
|
available_balance: 0,
|
||||||
|
decryptable_available_balance: 0,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.await;
|
||||||
|
|
||||||
token
|
token
|
||||||
.confidential_transfer_apply_pending_balance(
|
.confidential_transfer_apply_pending_balance(
|
||||||
&alice_meta.token_account,
|
&alice_meta.token_account,
|
||||||
|
@ -795,19 +889,16 @@ async fn ct_transfer_with_fee() {
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let state = token
|
alice_meta
|
||||||
.get_account_info(&alice_meta.token_account)
|
.check_balances(
|
||||||
.await
|
&token,
|
||||||
.unwrap();
|
ConfidentialTokenAccountBalances {
|
||||||
let extension = state
|
pending_balance: 0,
|
||||||
.get_extension::<ConfidentialTransferAccount>()
|
available_balance: 97,
|
||||||
.unwrap();
|
decryptable_available_balance: 97,
|
||||||
assert_eq!(
|
},
|
||||||
alice_meta
|
)
|
||||||
.ae_key
|
.await;
|
||||||
.decrypt(&extension.decryptable_available_balance.try_into().unwrap()),
|
|
||||||
Some(97),
|
|
||||||
);
|
|
||||||
|
|
||||||
token
|
token
|
||||||
.confidential_transfer_transfer_with_fee(
|
.confidential_transfer_transfer_with_fee(
|
||||||
|
@ -823,6 +914,17 @@ async fn ct_transfer_with_fee() {
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
alice_meta
|
||||||
|
.check_balances(
|
||||||
|
&token,
|
||||||
|
ConfidentialTokenAccountBalances {
|
||||||
|
pending_balance: 0,
|
||||||
|
available_balance: 0,
|
||||||
|
decryptable_available_balance: 0,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.await;
|
||||||
|
|
||||||
let state = token
|
let state = token
|
||||||
.get_account_info(&alice_meta.token_account)
|
.get_account_info(&alice_meta.token_account)
|
||||||
.await
|
.await
|
||||||
|
@ -878,6 +980,8 @@ async fn ct_transfer_with_fee() {
|
||||||
let extension = state
|
let extension = state
|
||||||
.get_extension::<ConfidentialTransferAccount>()
|
.get_extension::<ConfidentialTransferAccount>()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
// TODO: check pending and available balance once curve syscall lands
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
bob_meta
|
bob_meta
|
||||||
.ae_key
|
.ae_key
|
||||||
|
@ -902,6 +1006,8 @@ async fn ct_transfer_with_fee() {
|
||||||
let extension = state
|
let extension = state
|
||||||
.get_extension::<ConfidentialTransferAccount>()
|
.get_extension::<ConfidentialTransferAccount>()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
// TODO: check pending and available balance once curve syscall lands
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
bob_meta
|
bob_meta
|
||||||
.ae_key
|
.ae_key
|
||||||
|
|
Loading…
Reference in New Issue