Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[refactor] #4126: test to prevent cross chain replay attacks #4342

Merged
merged 4 commits into from
Mar 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion client/tests/integration/asset.rs
Original file line number Diff line number Diff line change
Expand Up @@ -496,7 +496,11 @@ fn account_id_new(account_name: &str, account_domain: &str) -> AccountId {
)
}

fn asset_id_new(definition_name: &str, definition_domain: &str, account_id: AccountId) -> AssetId {
pub fn asset_id_new(
definition_name: &str,
definition_domain: &str,
account_id: AccountId,
) -> AssetId {
AssetId::new(
AssetDefinitionId::new(
definition_domain.parse().expect("Valid"),
Expand Down
1 change: 1 addition & 0 deletions client/tests/integration/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ mod set_parameter;
mod sorting;
mod transfer_asset;
mod triggers;
mod tx_chain_id;
mod tx_history;
mod tx_rollback;
mod upgrade;
Expand Down
67 changes: 67 additions & 0 deletions client/tests/integration/tx_chain_id.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
use std::str::FromStr;

use iroha_crypto::KeyPair;
use iroha_data_model::prelude::*;
use iroha_primitives::numeric::numeric;
use test_network::*;

use crate::integration::asset::asset_id_new;

#[test]
fn send_tx_with_different_chain_id() {
let (_rt, _peer, test_client) = <PeerBuilder>::new().with_port(11_240).start_with_runtime();
wait_for_genesis_committed(&[test_client.clone()], 0);
// Given
let sender_account_id = AccountId::from_str("sender@wonderland").unwrap();
let sender_keypair = KeyPair::generate();
let receiver_account_id = AccountId::from_str("receiver@wonderland").unwrap();
let receiver_keypair = KeyPair::generate();
let asset_definition_id = AssetDefinitionId::from_str("test_asset#wonderland").unwrap();
let to_transfer = numeric!(1);

let create_sender_account: InstructionBox = Register::account(Account::new(
sender_account_id.clone(),
sender_keypair.public_key().clone(),
))
.into();
let create_receiver_account: InstructionBox = Register::account(Account::new(
receiver_account_id.clone(),
receiver_keypair.public_key().clone(),
))
.into();
let register_asset_definition: InstructionBox =
Register::asset_definition(AssetDefinition::numeric(asset_definition_id.clone())).into();
let register_asset: InstructionBox = Register::asset(Asset::new(
AssetId::new(asset_definition_id.clone(), sender_account_id.clone()),
numeric!(10),
))
.into();
test_client
.submit_all_blocking([
create_sender_account,
create_receiver_account,
register_asset_definition,
register_asset,
])
.unwrap();
let chain_id_0 = ChainId::from("0"); // Value configured by default
let chain_id_1 = ChainId::from("1");

let transfer_instruction = Transfer::asset_numeric(
asset_id_new("test_asset", "wonderland", sender_account_id.clone()),
to_transfer,
receiver_account_id.clone(),
);
let asset_transfer_tx_0 = TransactionBuilder::new(chain_id_0, sender_account_id.clone())
.with_instructions([transfer_instruction.clone()])
.sign(&sender_keypair);
let asset_transfer_tx_1 = TransactionBuilder::new(chain_id_1, sender_account_id.clone())
.with_instructions([transfer_instruction])
.sign(&sender_keypair);
test_client
.submit_transaction_blocking(&asset_transfer_tx_0)
.unwrap();
let _err = test_client
.submit_transaction_blocking(&asset_transfer_tx_1)
.unwrap_err();
}
Loading