Skip to content
Snippets Groups Projects
net_test.rs 2.79 KiB
Newer Older
Hugo Trentesaux's avatar
Hugo Trentesaux committed
use crate::*;
use sp_core::DeriveJunction;
use subxt::ext::sp_runtime::MultiAddress;
pub async fn repart(data: &Data, target: u32, actual_repart: Option<u32>) -> anyhow::Result<()> {
	let KeyPair::Sr25519(keypair) = data.keypair().await else {
		panic!("Cesium keys not implemented there")
	};
	let mut pairs = Vec::new();
	for i in actual_repart.unwrap_or_default()..target {
		let pair_i = keypair
			.derive(std::iter::once(DeriveJunction::hard::<u32>(i)), None)
			.map_err(|_| anyhow!("Fail to derive //{}", i))?
			.0;
		pairs.push((i, pair_i));
	}
	for (i, pair_i) in &pairs {
		/*let _ = api
			.tx()
			.balances()
			.transfer_allow_death(MultiAddress::Id(pair_i.public().into()), 501)?
			.sign_and_submit_then_watch(&signer, DefaultExtrinsicParamsBuilder::new())
			.await?
			.wait_for_in_block()
			.await?;
		signer.increment_nonce();*/
		if let Some(pair_i_account) = data
			.client()
			.storage()
			.at_latest()
			.await?
			.fetch(&runtime::storage().system().account(&pair_i.public().into()))
			.await?
		{
			log::info!("account //{} balance: {}", i, pair_i_account.data.free);
	Ok(())
pub async fn spam_roll(data: &Data, actual_repart: usize) -> anyhow::Result<()> {
	let KeyPair::Sr25519(keypair) = data.keypair().await else {
		panic!("Cesium keys not implemented there")
	};
	let client = data.client();
	let mut nonce = 0;
	let mut pairs =
		Vec::<(PairSigner<Runtime, sr25519::Pair>, AccountId)>::with_capacity(actual_repart);
	for i in 0..actual_repart {
		let pair_i = keypair
			.derive(std::iter::once(DeriveJunction::hard::<u32>(i as u32)), None)
			.map_err(|_| anyhow!("Fail to derive //{}", i))?
			.0;
		let account_id_i = pair_i.public().into();
		pairs.push((PairSigner::new(pair_i), account_id_i));
	}
	loop {
		let mut watchers = Vec::with_capacity(actual_repart);
		for i in 0..(actual_repart - 1) {
			let dest: AccountId = pairs[i + 1].1.clone();
			let watcher = client
				.tx()
				.create_signed_offline(
					&runtime::tx()
						.balances()
						.transfer_allow_death(MultiAddress::Id(dest).into(), 1),
					&pairs[i].0,
					DefaultExtrinsicParamsBuilder::new().nonce(nonce).build(),
				)?
				.submit_and_watch()
				.await?;
			nonce += 1;
			log::info!("send 1 cent from //{} to //{}", i, i + 1);
			watchers.push(watcher);
		}
		let dest: AccountId = pairs[0].1.clone();
		let watcher = client
			.tx()
			.sign_and_submit_then_watch(
				&runtime::tx()
					.balances()
					.transfer_allow_death(MultiAddress::Id(dest).into(), 1),
				&pairs[actual_repart - 1].0,
				DefaultExtrinsicParamsBuilder::new().build(),
			)
			.await?;
		nonce += 1;
		log::info!("send 1 cent from //{} to //0", actual_repart - 1);
		watchers.push(watcher);
		// Wait all transactions
		// FIXME fix after subxt update
		// for watcher in watchers {
		// 	watcher.wait_for_in_block().await?;
		// }