mirror of
https://github.com/logos-blockchain/logos-execution-zone.git
synced 2026-06-26 00:49:27 +00:00
208 lines
6.5 KiB
Rust
208 lines
6.5 KiB
Rust
#![expect(
|
|
clippy::tests_outside_test_module,
|
|
reason = "We don't care about these in tests"
|
|
)]
|
|
|
|
use anyhow::{Context as _, Result};
|
|
use integration_tests::{TestContext, private_mention, public_mention};
|
|
use sequencer_service_rpc::RpcClient as _;
|
|
use tokio::test;
|
|
use wallet::cli::{Command, SubcommandReturnValue, programs::vault::VaultSubcommand};
|
|
|
|
#[test]
|
|
async fn public_transfer_and_public_claim() -> Result<()> {
|
|
let mut ctx = TestContext::new().await?;
|
|
|
|
let amount: u128 = 100;
|
|
let sender = ctx.existing_public_accounts()[0];
|
|
let recipient = ctx.existing_public_accounts()[1];
|
|
|
|
let vault_program_id = programs::vault().id();
|
|
let recipient_vault_id = vault_core::compute_vault_account_id(vault_program_id, recipient);
|
|
|
|
let sender_balance_before = ctx.sequencer_client().get_account_balance(sender).await?;
|
|
let recipient_balance_before = ctx
|
|
.sequencer_client()
|
|
.get_account_balance(recipient)
|
|
.await?;
|
|
let recipient_vault_balance_before = ctx
|
|
.sequencer_client()
|
|
.get_account_balance(recipient_vault_id)
|
|
.await?;
|
|
|
|
let transfer_result = wallet::cli::execute_subcommand(
|
|
ctx.wallet_mut(),
|
|
Command::Vault(VaultSubcommand::Transfer {
|
|
from: public_mention(sender),
|
|
to: public_mention(recipient),
|
|
amount,
|
|
}),
|
|
)
|
|
.await?;
|
|
assert!(
|
|
matches!(transfer_result, SubcommandReturnValue::Empty),
|
|
"Expected Empty return value for public vault transfer"
|
|
);
|
|
|
|
let sender_balance_after_transfer = ctx.sequencer_client().get_account_balance(sender).await?;
|
|
let recipient_balance_after_transfer = ctx
|
|
.sequencer_client()
|
|
.get_account_balance(recipient)
|
|
.await?;
|
|
let recipient_vault_balance_after_transfer = ctx
|
|
.sequencer_client()
|
|
.get_account_balance(recipient_vault_id)
|
|
.await?;
|
|
|
|
assert_eq!(
|
|
sender_balance_after_transfer,
|
|
sender_balance_before - amount
|
|
);
|
|
assert_eq!(recipient_balance_after_transfer, recipient_balance_before);
|
|
assert_eq!(
|
|
recipient_vault_balance_after_transfer,
|
|
recipient_vault_balance_before + amount
|
|
);
|
|
|
|
let claim_result = wallet::cli::execute_subcommand(
|
|
ctx.wallet_mut(),
|
|
Command::Vault(VaultSubcommand::Claim {
|
|
account_id: public_mention(recipient),
|
|
amount,
|
|
}),
|
|
)
|
|
.await?;
|
|
assert!(
|
|
matches!(claim_result, SubcommandReturnValue::Empty),
|
|
"Expected Empty return value for public vault claim"
|
|
);
|
|
|
|
let sender_balance_after_claim = ctx.sequencer_client().get_account_balance(sender).await?;
|
|
let recipient_balance_after_claim = ctx
|
|
.sequencer_client()
|
|
.get_account_balance(recipient)
|
|
.await?;
|
|
let recipient_vault_balance_after_claim = ctx
|
|
.sequencer_client()
|
|
.get_account_balance(recipient_vault_id)
|
|
.await?;
|
|
|
|
assert_eq!(sender_balance_after_claim, sender_balance_before - amount);
|
|
assert_eq!(
|
|
recipient_balance_after_claim,
|
|
recipient_balance_before + amount
|
|
);
|
|
assert_eq!(
|
|
recipient_vault_balance_after_claim,
|
|
recipient_vault_balance_before
|
|
);
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[test]
|
|
async fn private_transfer_and_private_claim() -> Result<()> {
|
|
let mut ctx = TestContext::new().await?;
|
|
|
|
let amount: u128 = 100;
|
|
let sender = ctx.existing_private_accounts()[0];
|
|
let owner = ctx.existing_private_accounts()[1];
|
|
|
|
let vault_program_id = programs::vault().id();
|
|
let owner_vault_id = vault_core::compute_vault_account_id(vault_program_id, owner);
|
|
|
|
let sender_balance_before = ctx
|
|
.wallet()
|
|
.get_account_private(sender)
|
|
.context("Failed to load sender private account")?
|
|
.balance;
|
|
let owner_balance_before = ctx
|
|
.wallet()
|
|
.get_account_private(owner)
|
|
.context("Failed to load owner private account")?
|
|
.balance;
|
|
let owner_vault_balance_before = ctx
|
|
.sequencer_client()
|
|
.get_account_balance(owner_vault_id)
|
|
.await?;
|
|
|
|
let transfer_result = wallet::cli::execute_subcommand(
|
|
ctx.wallet_mut(),
|
|
Command::Vault(VaultSubcommand::Transfer {
|
|
from: private_mention(sender),
|
|
to: private_mention(owner),
|
|
amount,
|
|
}),
|
|
)
|
|
.await?;
|
|
assert!(
|
|
matches!(
|
|
transfer_result,
|
|
SubcommandReturnValue::PrivacyPreservingTransfer { .. }
|
|
),
|
|
"Expected PrivacyPreservingTransfer return value for private vault transfer"
|
|
);
|
|
|
|
let sender_balance_after_transfer = ctx
|
|
.wallet()
|
|
.get_account_private(sender)
|
|
.context("Failed to load sender private account after transfer")?
|
|
.balance;
|
|
let owner_balance_after_transfer = ctx
|
|
.wallet()
|
|
.get_account_private(owner)
|
|
.context("Failed to load owner private account after transfer")?
|
|
.balance;
|
|
let owner_vault_balance_after_transfer = ctx
|
|
.sequencer_client()
|
|
.get_account_balance(owner_vault_id)
|
|
.await?;
|
|
|
|
assert_eq!(
|
|
sender_balance_after_transfer,
|
|
sender_balance_before - amount
|
|
);
|
|
assert_eq!(owner_balance_after_transfer, owner_balance_before);
|
|
assert_eq!(
|
|
owner_vault_balance_after_transfer,
|
|
owner_vault_balance_before + amount
|
|
);
|
|
|
|
let claim_result = wallet::cli::execute_subcommand(
|
|
ctx.wallet_mut(),
|
|
Command::Vault(VaultSubcommand::Claim {
|
|
account_id: private_mention(owner),
|
|
amount,
|
|
}),
|
|
)
|
|
.await?;
|
|
assert!(
|
|
matches!(
|
|
claim_result,
|
|
SubcommandReturnValue::PrivacyPreservingTransfer { .. }
|
|
),
|
|
"Expected PrivacyPreservingTransfer return value for private vault claim"
|
|
);
|
|
|
|
let sender_balance_after_claim = ctx
|
|
.wallet()
|
|
.get_account_private(sender)
|
|
.context("Failed to load sender private account after claim")?
|
|
.balance;
|
|
let owner_balance_after_claim = ctx
|
|
.wallet()
|
|
.get_account_private(owner)
|
|
.context("Failed to load owner private account after claim")?
|
|
.balance;
|
|
let owner_vault_balance_after_claim = ctx
|
|
.sequencer_client()
|
|
.get_account_balance(owner_vault_id)
|
|
.await?;
|
|
|
|
assert_eq!(sender_balance_after_claim, sender_balance_before - amount);
|
|
assert_eq!(owner_balance_after_claim, owner_balance_before + amount);
|
|
assert_eq!(owner_vault_balance_after_claim, owner_vault_balance_before);
|
|
|
|
Ok(())
|
|
}
|