Skip to content

Commit

Permalink
Make shielded balance checking more robust for IBC tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
murisi committed Nov 27, 2024
1 parent bdd8e9f commit 706a143
Showing 1 changed file with 59 additions and 20 deletions.
79 changes: 59 additions & 20 deletions crates/tests/src/e2e/ibc_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ fn ibc_transfers() -> Result<()> {
None,
None,
None,
false,
)?;
wait_for_packet_relay(&port_id_namada, &channel_id_namada, &test)?;

Expand Down Expand Up @@ -206,6 +207,7 @@ fn ibc_transfers() -> Result<()> {
None,
None,
None,
false,
)?;
wait_for_packet_relay(&port_id_namada, &channel_id_namada, &test)?;

Expand Down Expand Up @@ -246,7 +248,7 @@ fn ibc_transfers() -> Result<()> {
)?;
wait_for_packet_relay(&port_id_gaia, &channel_id_gaia, &test_gaia)?;
// Check the token on Namada
check_balance(&test, AA_VIEWING_KEY, &ibc_denom_on_namada, 100)?;
check_shielded_balance(&test, AA_VIEWING_KEY, &ibc_denom_on_namada, 100)?;
check_cosmos_balance(&test_gaia, COSMOS_USER, COSMOS_COIN, 800)?;

// Shielded transfer 50 samoleans on Namada
Expand All @@ -260,8 +262,8 @@ fn ibc_transfers() -> Result<()> {
ALBERT_KEY,
&[],
)?;
check_balance(&test, AA_VIEWING_KEY, &ibc_denom_on_namada, 50)?;
check_balance(&test, AB_VIEWING_KEY, &ibc_denom_on_namada, 50)?;
check_shielded_balance(&test, AA_VIEWING_KEY, &ibc_denom_on_namada, 50)?;
check_shielded_balance(&test, AB_VIEWING_KEY, &ibc_denom_on_namada, 50)?;

// Unshielding transfer 10 samoleans from Namada to Gaia
transfer(
Expand All @@ -276,9 +278,10 @@ fn ibc_transfers() -> Result<()> {
None,
None,
None,
true,
)?;
wait_for_packet_relay(&port_id_namada, &channel_id_namada, &test)?;
check_balance(&test, AB_VIEWING_KEY, &ibc_denom_on_namada, 40)?;
check_shielded_balance(&test, AB_VIEWING_KEY, &ibc_denom_on_namada, 40)?;
check_cosmos_balance(&test_gaia, COSMOS_USER, COSMOS_COIN, 810)?;

// 4. Shielding transfer the received token back to a shielded account on
Expand All @@ -305,7 +308,7 @@ fn ibc_transfers() -> Result<()> {
)?;
wait_for_packet_relay(&port_id_gaia, &channel_id_gaia, &test)?;
// Check the token on Namada
check_balance(&test, AA_VIEWING_KEY, APFEL, 1)?;
check_shielded_balance(&test, AA_VIEWING_KEY, APFEL, 1)?;

// 5. Refunding when transfer failure

Expand All @@ -323,6 +326,7 @@ fn ibc_transfers() -> Result<()> {
None,
None,
None,
false,
)?;
wait_for_packet_relay(&port_id_namada, &channel_id_namada, &test)?;
// The balance should not be changed
Expand All @@ -345,6 +349,7 @@ fn ibc_transfers() -> Result<()> {
Some(Duration::new(10, 0)),
None,
None,
false,
)?;
// wait for the timeout
sleep(10);
Expand All @@ -371,10 +376,11 @@ fn ibc_transfers() -> Result<()> {
None,
None,
None,
true,
)?;
wait_for_packet_relay(&port_id_namada, &channel_id_namada, &test)?;
// Check the token has been refunded to the refund target
check_balance(&test, AA_VIEWING_KEY, &ibc_denom_on_namada, 40)?;
check_shielded_balance(&test, AA_VIEWING_KEY, &ibc_denom_on_namada, 40)?;
check_balance(&test, IBC_REFUND_TARGET_ALIAS, &ibc_denom_on_namada, 10)?;

// Stop Hermes for timeout test
Expand All @@ -395,6 +401,7 @@ fn ibc_transfers() -> Result<()> {
Some(Duration::new(10, 0)),
None,
None,
true,
)?;
// wait for the timeout
sleep(10);
Expand All @@ -405,13 +412,13 @@ fn ibc_transfers() -> Result<()> {

wait_for_packet_relay(&port_id_namada, &channel_id_namada, &test)?;
// Check the token has been refunded to the refund target
check_balance(&test, AA_VIEWING_KEY, APFEL, 0)?;
check_shielded_balance(&test, AA_VIEWING_KEY, APFEL, 0)?;
check_balance(&test, IBC_REFUND_TARGET_ALIAS, APFEL, 1)?;

// 6. Malformed shielded actions

// Check initial balance
check_balance(&test, AA_VIEWING_KEY, &ibc_denom_on_namada, 40)?;
check_shielded_balance(&test, AA_VIEWING_KEY, &ibc_denom_on_namada, 40)?;
check_cosmos_balance(&test_gaia, COSMOS_USER, COSMOS_COIN, 810)?;

// Missing memo
Expand All @@ -430,7 +437,7 @@ fn ibc_transfers() -> Result<()> {
)?;
wait_for_packet_relay(&port_id_namada, &channel_id_namada, &test)?;
// Check the balance didn't change
check_balance(&test, AA_VIEWING_KEY, &ibc_denom_on_namada, 40)?;
check_shielded_balance(&test, AA_VIEWING_KEY, &ibc_denom_on_namada, 40)?;
check_cosmos_balance(&test_gaia, COSMOS_USER, COSMOS_COIN, 810)?;

// Wrong memo (different amount)
Expand All @@ -457,7 +464,7 @@ fn ibc_transfers() -> Result<()> {
)?;
wait_for_packet_relay(&port_id_gaia, &channel_id_gaia, &test_gaia)?;
// Check the balances didn't change
check_balance(&test, AA_VIEWING_KEY, &ibc_denom_on_namada, 40)?;
check_shielded_balance(&test, AA_VIEWING_KEY, &ibc_denom_on_namada, 40)?;
check_cosmos_balance(&test_gaia, COSMOS_USER, COSMOS_COIN, 810)?;

Ok(())
Expand Down Expand Up @@ -533,6 +540,7 @@ fn ibc_nft_transfers() -> Result<()> {
None,
None,
None,
false,
)?;
clear_packet(&port_id_namada, &channel_id_namada, &test)?;
check_balance(&test, &namada_receiver, &ibc_trace_on_namada, 0)?;
Expand All @@ -547,10 +555,11 @@ fn ibc_nft_transfers() -> Result<()> {
&port_id_namada,
&channel_id_namada,
)?;
let masp_receiver = find_payment_address(&test, AA_PAYMENT_ADDRESS)?.to_string();
nft_transfer_from_cosmos(
&test_cosmwasm,
COSMOS_USER,
AA_PAYMENT_ADDRESS,
masp_receiver,
NFT_ID,
&cw721_contract,
&ics721_contract,
Expand All @@ -559,7 +568,7 @@ fn ibc_nft_transfers() -> Result<()> {
None,
)?;
clear_packet(&port_id_cosmwasm, &channel_id_cosmwasm, &test_cosmwasm)?;
check_balance(&test, AA_VIEWING_KEY, &ibc_trace_on_namada, 1)?;
check_shielded_balance(&test, AA_VIEWING_KEY, &ibc_trace_on_namada, 1)?;

// Shielded transfer on Namada
transfer_on_chain(
Expand All @@ -572,8 +581,8 @@ fn ibc_nft_transfers() -> Result<()> {
ALBERT_KEY,
&[],
)?;
check_balance(&test, AA_VIEWING_KEY, &ibc_trace_on_namada, 0)?;
check_balance(&test, AB_VIEWING_KEY, &ibc_trace_on_namada, 1)?;
check_shielded_balance(&test, AA_VIEWING_KEY, &ibc_trace_on_namada, 0)?;
check_shielded_balance(&test, AB_VIEWING_KEY, &ibc_trace_on_namada, 1)?;

// Unshielding transfer
transfer(
Expand All @@ -588,9 +597,10 @@ fn ibc_nft_transfers() -> Result<()> {
None,
None,
None,
true,
)?;
clear_packet(&port_id_namada, &channel_id_namada, &test)?;
check_balance(&test, AB_VIEWING_KEY, &ibc_trace_on_namada, 0)?;
check_shielded_balance(&test, AB_VIEWING_KEY, &ibc_trace_on_namada, 0)?;

Ok(())
}
Expand Down Expand Up @@ -858,7 +868,7 @@ fn ibc_token_inflation() -> Result<()> {
}

// Check the target balance is zero before the inflation
check_balance(&test, AA_VIEWING_KEY, NAM, 0)?;
check_shielded_balance(&test, AA_VIEWING_KEY, NAM, 0)?;
// Shielding transfer 1 samoleans from Gaia to Namada
let shielding_data_path = gen_ibc_shielding_data(
&test,
Expand Down Expand Up @@ -1017,6 +1027,7 @@ fn ibc_rate_limit() -> Result<()> {
None,
None,
None,
false,
)?;

// Transfer 1 NAM from Namada to Gaia again will fail
Expand All @@ -1035,6 +1046,7 @@ fn ibc_rate_limit() -> Result<()> {
Some(
"Transfer exceeding the per-epoch throughput limit is not allowed",
),
false,
)?;

// wait for the next epoch
Expand All @@ -1057,6 +1069,7 @@ fn ibc_rate_limit() -> Result<()> {
None,
None,
None,
false,
)?;

// wait for the next epoch
Expand Down Expand Up @@ -1333,6 +1346,7 @@ fn try_invalid_transfers(
None,
// the IBC denom can't be parsed when using an invalid port
Some(&format!("Invalid IBC denom: {nam_addr}")),
false,
)?;

// invalid channel
Expand All @@ -1348,6 +1362,7 @@ fn try_invalid_transfers(
None,
None,
Some("IBC token transfer error: context error: `ICS04 Channel error"),
false,
)?;

Ok(())
Expand Down Expand Up @@ -1402,6 +1417,7 @@ fn transfer(
timeout_sec: Option<Duration>,
shielding_data_path: Option<PathBuf>,
expected_err: Option<&str>,
gen_refund_target: bool,
) -> Result<u32> {
let rpc = get_actor_rpc(test, Who::Validator(0));

Expand Down Expand Up @@ -1449,7 +1465,7 @@ fn transfer(
tx_args.push(&memo);
}

if sender.as_ref().starts_with("zsk") {
if gen_refund_target {
let mut cmd = run!(
test,
Bin::Wallet,
Expand Down Expand Up @@ -1912,9 +1928,32 @@ fn check_balance(
) -> Result<()> {
let rpc = get_actor_rpc(test, Who::Validator(0));

if owner.as_ref().starts_with("zvk") {
shielded_sync(test, owner.as_ref())?;
}
let query_args = vec![
"balance",
"--owner",
owner.as_ref(),
"--token",
token.as_ref(),
"--node",
&rpc,
];
let mut client = run!(test, Bin::Client, query_args, Some(40))?;
let expected =
format!("{}: {expected_amount}", token.as_ref().to_lowercase());
client.exp_string(&expected)?;
client.assert_success();
Ok(())
}

fn check_shielded_balance(
test: &Test,
owner: impl AsRef<str>,
token: impl AsRef<str>,
expected_amount: u64,
) -> Result<()> {
let rpc = get_actor_rpc(test, Who::Validator(0));

shielded_sync(test, owner.as_ref())?;

let query_args = vec![
"balance",
Expand Down

0 comments on commit 706a143

Please sign in to comment.